Merge "Switch rebuild_server cloud method to rely on proxy" into feature/r1

This commit is contained in:
Zuul
2021-12-22 12:54:59 +00:00
committed by Gerrit Code Review
6 changed files with 62 additions and 62 deletions

View File

@@ -1086,41 +1086,23 @@ class ComputeCloudMixin(_normalize.Normalizer):
wait=False, timeout=180):
kwargs = {}
if image_id:
kwargs['imageRef'] = image_id
kwargs['image'] = image_id
if admin_pass:
kwargs['adminPass'] = admin_pass
kwargs['admin_password'] = admin_pass
data = proxy._json_response(
self.compute.post(
'/servers/{server_id}/action'.format(server_id=server_id),
json={'rebuild': kwargs}),
error_message="Error in rebuilding instance")
server = self._get_and_munchify('server', data)
server = self.compute.rebuild_server(
server_id,
**kwargs
)
if not wait:
return self._expand_server(
self._normalize_server(server), bare=bare, detailed=detailed)
server, bare=bare, detailed=detailed)
admin_pass = server.get('adminPass') or admin_pass
for count in utils.iterate_timeout(
timeout,
"Timeout waiting for server {0} to "
"rebuild.".format(server_id),
wait=self._SERVER_AGE):
try:
server = self.get_server(server_id, bare=True)
except Exception:
continue
if not server:
continue
if server['status'] == 'ERROR':
raise exc.OpenStackCloudException(
"Error in rebuilding the server",
extra_data=dict(server=server))
if server['status'] == 'ACTIVE':
server.adminPass = admin_pass
break
server = self.compute.wait_for_server(
server, wait=timeout)
if server['status'] == 'ACTIVE':
server.adminPass = admin_pass
return self._expand_server(server, detailed=detailed, bare=bare)

View File

@@ -754,7 +754,7 @@ class Proxy(proxy.Proxy):
server = self._get_resource(_server.Server, server)
server.reboot(self, reboot_type)
def rebuild_server(self, server, name, admin_password, **attrs):
def rebuild_server(self, server, image, **attrs):
"""Rebuild a server
:param server: Either the ID of a server or a
@@ -780,7 +780,7 @@ class Proxy(proxy.Proxy):
instance.
"""
server = self._get_resource(_server.Server, server)
return server.rebuild(self, name, admin_password, **attrs)
return server.rebuild(self, image=image, **attrs)
def resize_server(self, server, flavor):
"""Resize a server

View File

@@ -293,16 +293,16 @@ class Server(resource.Resource, metadata.MetadataMixin, tag.TagMixin):
body = {'forceDelete': None}
self._action(session, body)
def rebuild(self, session, name=None, admin_password=None,
preserve_ephemeral=False, image=None,
def rebuild(self, session, image, name=None, admin_password=None,
preserve_ephemeral=None,
access_ipv4=None, access_ipv6=None,
metadata=None, user_data=None):
"""Rebuild the server with the given arguments."""
action = {
'preserve_ephemeral': preserve_ephemeral
'imageRef': resource.Resource._get_id(image)
}
if image is not None:
action['imageRef'] = resource.Resource._get_id(image)
if preserve_ephemeral is not None:
action['preserve_ephemeral'] = preserve_ephemeral
if name is not None:
action['name'] = name
if admin_password is not None:

View File

@@ -82,8 +82,8 @@ class TestRebuildServer(base.TestCase):
self.get_nova_discovery_mock_dict(),
dict(method='GET',
uri=self.get_mock_url(
'compute', 'public', append=['servers', 'detail']),
json={'servers': [self.error_server]}),
'compute', 'public', append=['servers', self.server_id]),
json={'server': self.error_server}),
])
self.assertRaises(
exc.OpenStackCloudException,
@@ -109,8 +109,8 @@ class TestRebuildServer(base.TestCase):
self.get_nova_discovery_mock_dict(),
dict(method='GET',
uri=self.get_mock_url(
'compute', 'public', append=['servers', 'detail']),
json={'servers': [self.rebuild_server]}),
'compute', 'public', append=['servers', self.server_id]),
json={'server': self.rebuild_server}),
])
self.assertRaises(
exc.OpenStackCloudTimeout,
@@ -199,12 +199,12 @@ class TestRebuildServer(base.TestCase):
self.get_nova_discovery_mock_dict(),
dict(method='GET',
uri=self.get_mock_url(
'compute', 'public', append=['servers', 'detail']),
json={'servers': [self.rebuild_server]}),
'compute', 'public', append=['servers', self.server_id]),
json={'server': self.rebuild_server}),
dict(method='GET',
uri=self.get_mock_url(
'compute', 'public', append=['servers', 'detail']),
json={'servers': [self.fake_server]}),
'compute', 'public', append=['servers', self.server_id]),
json={'server': self.fake_server}),
dict(method='GET',
uri=self.get_mock_url(
'network', 'public', append=['v2.0', 'networks']),
@@ -237,12 +237,12 @@ class TestRebuildServer(base.TestCase):
self.get_nova_discovery_mock_dict(),
dict(method='GET',
uri=self.get_mock_url(
'compute', 'public', append=['servers', 'detail']),
json={'servers': [self.rebuild_server]}),
'compute', 'public', append=['servers', self.server_id]),
json={'server': self.rebuild_server}),
dict(method='GET',
uri=self.get_mock_url(
'compute', 'public', append=['servers', 'detail']),
json={'servers': [self.fake_server]}),
'compute', 'public', append=['servers', self.server_id]),
json={'server': self.fake_server}),
dict(method='GET',
uri=self.get_mock_url(
'network', 'public', append=['v2.0', 'networks']),

View File

@@ -729,19 +729,35 @@ class TestCompute(TestComputeProxy):
self._verify(
'openstack.compute.v2.server.Server.rebuild',
self.proxy.rebuild_server,
method_args=["value", "test_server", "test_pass"],
method_kwargs={"metadata": {"k1": "v1"}, "image": image_obj},
expected_args=[self.proxy, "test_server", "test_pass"],
expected_kwargs={"metadata": {"k1": "v1"}, "image": image_obj})
method_args=["value"],
method_kwargs={
"name": "test_server",
"admin_password": "test_pass",
"metadata": {"k1": "v1"},
"image": image_obj},
expected_args=[self.proxy],
expected_kwargs={
"name": "test_server",
"admin_password": "test_pass",
"metadata": {"k1": "v1"},
"image": image_obj})
# Case2: image name or id is provided
self._verify(
'openstack.compute.v2.server.Server.rebuild',
self.proxy.rebuild_server,
method_args=["value", "test_server", "test_pass"],
method_kwargs={"metadata": {"k1": "v1"}, "image": id},
expected_args=[self.proxy, "test_server", "test_pass"],
expected_kwargs={"metadata": {"k1": "v1"}, "image": id})
method_args=["value"],
method_kwargs={
"name": "test_server",
"admin_password": "test_pass",
"metadata": {"k1": "v1"},
"image": id},
expected_args=[self.proxy],
expected_kwargs={
"name": "test_server",
"admin_password": "test_pass",
"metadata": {"k1": "v1"},
"image": id})
def test_add_fixed_ip_to_server(self):
self._verify(

View File

@@ -315,11 +315,14 @@ class TestServer(base.TestCase):
# Let the translate pass through, that portion is tested elsewhere
sot._translate_response = lambda arg: arg
result = sot.rebuild(self.sess, name='noo', admin_password='seekr3t',
image='http://image/1', access_ipv4="12.34.56.78",
access_ipv6="fe80::100",
metadata={"meta var": "meta val"},
user_data="ZWNobyAiaGVsbG8gd29ybGQi")
result = sot.rebuild(
self.sess, name='noo', admin_password='seekr3t',
image='http://image/1', access_ipv4="12.34.56.78",
access_ipv6="fe80::100",
metadata={"meta var": "meta val"},
user_data="ZWNobyAiaGVsbG8gd29ybGQi",
preserve_ephemeral=False
)
self.assertIsInstance(result, server.Server)
@@ -357,7 +360,6 @@ class TestServer(base.TestCase):
"name": "nootoo",
"imageRef": "http://image/2",
"adminPass": "seekr3two",
"preserve_ephemeral": False
}
}
headers = {'Accept': ''}