Merge "Switch rebuild_server cloud method to rely on proxy" into feature/r1
This commit is contained in:
@@ -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)
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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']),
|
||||
|
||||
@@ -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(
|
||||
|
||||
@@ -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': ''}
|
||||
|
||||
Reference in New Issue
Block a user