compute/server: add support of target state for evacuate API
Related-To: bp/allowing-target-state-for-evacuate Signed-off-by: Sahid Orentino Ferdjaoui <sahid.ferdjaoui@industrialdiscipline.com> Change-Id: Ieb8681bb4fd4834666b7bdb31d0ea6339c396400
This commit is contained in:
parent
9a17781629
commit
caa4e135e2
@ -944,7 +944,8 @@ class Proxy(proxy.Proxy):
|
|||||||
server = self._get_resource(_server.Server, server)
|
server = self._get_resource(_server.Server, server)
|
||||||
server.unrescue(self)
|
server.unrescue(self)
|
||||||
|
|
||||||
def evacuate_server(self, server, host=None, admin_pass=None, force=None):
|
def evacuate_server(self, server, host=None, admin_pass=None, force=None,
|
||||||
|
target_state=None):
|
||||||
"""Evacuates a server from a failed host to a new host.
|
"""Evacuates a server from a failed host to a new host.
|
||||||
|
|
||||||
:param server: Either the ID of a server or a
|
:param server: Either the ID of a server or a
|
||||||
@ -956,11 +957,13 @@ class Proxy(proxy.Proxy):
|
|||||||
:param force: Force an evacuation by not verifying the provided
|
:param force: Force an evacuation by not verifying the provided
|
||||||
destination host by the scheduler. (New in API version
|
destination host by the scheduler. (New in API version
|
||||||
2.29).
|
2.29).
|
||||||
|
:param target_state: Set target state for the evacuated instance (New
|
||||||
|
in API version 2.94).
|
||||||
:returns: None
|
:returns: None
|
||||||
"""
|
"""
|
||||||
server = self._get_resource(_server.Server, server)
|
server = self._get_resource(_server.Server, server)
|
||||||
server.evacuate(self, host=host, admin_pass=admin_pass,
|
server.evacuate(self, host=host, admin_pass=admin_pass,
|
||||||
force=force)
|
force=force, target_state=target_state)
|
||||||
|
|
||||||
def start_server(self, server):
|
def start_server(self, server):
|
||||||
"""Starts a stopped server and changes its state to ``ACTIVE``.
|
"""Starts a stopped server and changes its state to ``ACTIVE``.
|
||||||
|
@ -459,7 +459,8 @@ class Server(resource.Resource, metadata.MetadataMixin, tag.TagMixin):
|
|||||||
body = {"unrescue": None}
|
body = {"unrescue": None}
|
||||||
self._action(session, body)
|
self._action(session, body)
|
||||||
|
|
||||||
def evacuate(self, session, host=None, admin_pass=None, force=None):
|
def evacuate(self, session, host=None, admin_pass=None, force=None,
|
||||||
|
target_state=None):
|
||||||
body = {"evacuate": {}}
|
body = {"evacuate": {}}
|
||||||
if host is not None:
|
if host is not None:
|
||||||
body["evacuate"]["host"] = host
|
body["evacuate"]["host"] = host
|
||||||
@ -467,6 +468,8 @@ class Server(resource.Resource, metadata.MetadataMixin, tag.TagMixin):
|
|||||||
body["evacuate"]["adminPass"] = admin_pass
|
body["evacuate"]["adminPass"] = admin_pass
|
||||||
if force is not None:
|
if force is not None:
|
||||||
body["evacuate"]["force"] = force
|
body["evacuate"]["force"] = force
|
||||||
|
if target_state is not None:
|
||||||
|
body["evacuate"]["targetState"] = target_state
|
||||||
self._action(session, body)
|
self._action(session, body)
|
||||||
|
|
||||||
def start(self, session):
|
def start(self, session):
|
||||||
|
@ -882,16 +882,18 @@ class TestCompute(TestComputeProxy):
|
|||||||
self.proxy.evacuate_server,
|
self.proxy.evacuate_server,
|
||||||
method_args=["value"],
|
method_args=["value"],
|
||||||
expected_args=[self.proxy],
|
expected_args=[self.proxy],
|
||||||
expected_kwargs={"host": None, "admin_pass": None, "force": None})
|
expected_kwargs={"host": None, "admin_pass": None, "force": None,
|
||||||
|
"target_state": None})
|
||||||
|
|
||||||
def test_server_evacuate_with_options(self):
|
def test_server_evacuate_with_options(self):
|
||||||
self._verify(
|
self._verify(
|
||||||
"openstack.compute.v2.server.Server.evacuate",
|
"openstack.compute.v2.server.Server.evacuate",
|
||||||
self.proxy.evacuate_server,
|
self.proxy.evacuate_server,
|
||||||
method_args=["value", 'HOST2', 'NEW_PASS', True],
|
method_args=["value", 'HOST2', 'NEW_PASS', True, 'stopped'],
|
||||||
expected_args=[self.proxy],
|
expected_args=[self.proxy],
|
||||||
expected_kwargs={
|
expected_kwargs={
|
||||||
"host": "HOST2", "admin_pass": 'NEW_PASS', "force": True})
|
"host": "HOST2", "admin_pass": 'NEW_PASS', "force": True,
|
||||||
|
"target_state": 'stopped'})
|
||||||
|
|
||||||
def test_server_start(self):
|
def test_server_start(self):
|
||||||
self._verify(
|
self._verify(
|
||||||
|
@ -735,12 +735,12 @@ class TestServer(base.TestCase):
|
|||||||
sot = server.Server(**EXAMPLE)
|
sot = server.Server(**EXAMPLE)
|
||||||
|
|
||||||
res = sot.evacuate(self.sess, host='HOST2', admin_pass='NEW_PASS',
|
res = sot.evacuate(self.sess, host='HOST2', admin_pass='NEW_PASS',
|
||||||
force=True)
|
force=True, target_state='stopped')
|
||||||
|
|
||||||
self.assertIsNone(res)
|
self.assertIsNone(res)
|
||||||
url = 'servers/IDENTIFIER/action'
|
url = 'servers/IDENTIFIER/action'
|
||||||
body = {"evacuate": {'host': 'HOST2', 'adminPass': 'NEW_PASS',
|
body = {"evacuate": {'host': 'HOST2', 'adminPass': 'NEW_PASS',
|
||||||
'force': True}}
|
'force': True, 'targetState': 'stopped'}}
|
||||||
headers = {'Accept': ''}
|
headers = {'Accept': ''}
|
||||||
self.sess.post.assert_called_with(
|
self.sess.post.assert_called_with(
|
||||||
url, json=body, headers=headers, microversion=None)
|
url, json=body, headers=headers, microversion=None)
|
||||||
|
@ -0,0 +1,3 @@
|
|||||||
|
---
|
||||||
|
features:
|
||||||
|
- Add support of setting target state for evacuate API.
|
Loading…
x
Reference in New Issue
Block a user