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:
Sahid Orentino Ferdjaoui 2022-10-21 10:03:58 +02:00
parent 9a17781629
commit caa4e135e2
5 changed files with 19 additions and 8 deletions

View File

@ -944,7 +944,8 @@ class Proxy(proxy.Proxy):
server = self._get_resource(_server.Server, server)
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.
: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
destination host by the scheduler. (New in API version
2.29).
:param target_state: Set target state for the evacuated instance (New
in API version 2.94).
:returns: None
"""
server = self._get_resource(_server.Server, server)
server.evacuate(self, host=host, admin_pass=admin_pass,
force=force)
force=force, target_state=target_state)
def start_server(self, server):
"""Starts a stopped server and changes its state to ``ACTIVE``.

View File

@ -459,7 +459,8 @@ class Server(resource.Resource, metadata.MetadataMixin, tag.TagMixin):
body = {"unrescue": None}
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": {}}
if host is not None:
body["evacuate"]["host"] = host
@ -467,6 +468,8 @@ class Server(resource.Resource, metadata.MetadataMixin, tag.TagMixin):
body["evacuate"]["adminPass"] = admin_pass
if force is not None:
body["evacuate"]["force"] = force
if target_state is not None:
body["evacuate"]["targetState"] = target_state
self._action(session, body)
def start(self, session):

View File

@ -882,16 +882,18 @@ class TestCompute(TestComputeProxy):
self.proxy.evacuate_server,
method_args=["value"],
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):
self._verify(
"openstack.compute.v2.server.Server.evacuate",
self.proxy.evacuate_server,
method_args=["value", 'HOST2', 'NEW_PASS', True],
method_args=["value", 'HOST2', 'NEW_PASS', True, 'stopped'],
expected_args=[self.proxy],
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):
self._verify(

View File

@ -735,12 +735,12 @@ class TestServer(base.TestCase):
sot = server.Server(**EXAMPLE)
res = sot.evacuate(self.sess, host='HOST2', admin_pass='NEW_PASS',
force=True)
force=True, target_state='stopped')
self.assertIsNone(res)
url = 'servers/IDENTIFIER/action'
body = {"evacuate": {'host': 'HOST2', 'adminPass': 'NEW_PASS',
'force': True}}
'force': True, 'targetState': 'stopped'}}
headers = {'Accept': ''}
self.sess.post.assert_called_with(
url, json=body, headers=headers, microversion=None)

View File

@ -0,0 +1,3 @@
---
features:
- Add support of setting target state for evacuate API.