Add nova client functions to shutdown and activate Nova server

Change-Id: I5cd46dd56d7ace7258d9f334320368977ab3a861
This commit is contained in:
Federico Ressi 2020-01-27 15:51:10 +01:00
parent e91356faeb
commit 1f0611f058
3 changed files with 56 additions and 6 deletions

View File

@ -31,6 +31,8 @@ nova_client = _client.nova_client
NovaClientFixture = _client.NovaClientFixture
wait_for_server_status = _client.wait_for_server_status
ServerStatusTimeout = _client.ServerStatusTimeout
shutoff_server = _client.shutoff_server
activate_server = _client.activate_server
skip_if_missing_hypervisors = _hypervisor.skip_if_missing_hypervisors
get_same_host_hypervisors = _hypervisor.get_same_host_hypervisors

View File

@ -150,20 +150,52 @@ class ServerStatusTimeout(tobiko.TobikoException):
"status after {timeout} seconds")
def wait_for_server_status(server_id, status, client=None, timeout=30.,
sleep_time=5.):
def wait_for_server_status(server, status, client=None, timeout=None,
sleep_time=None):
if timeout is None:
timeout = 300.
if sleep_time is None:
sleep_time = 5.
start_time = time.time()
while True:
server = get_server(server_id, client)
server = get_server(server=server, client=client)
if server.status == status:
break
if time.time() - start_time >= timeout:
raise ServerStatusTimeout(server_id=server_id,
raise ServerStatusTimeout(server_id=server.id,
status=status,
timeout=timeout)
LOG.debug('Waiting for server %r status to get from %r to %r',
server_id, server.status, status)
server.id, server.status, status)
time.sleep(sleep_time)
return server
def shutoff_server(server, client=None, timeout=None, sleep_time=None):
client = nova_client(client)
server = get_server(server=server, client=client)
if server.status == 'SHUTOFF':
return server
client.servers.stop(server.id)
return wait_for_server_status(server=server.id, status='SHUTOFF',
client=client, timeout=timeout,
sleep_time=sleep_time)
def activate_server(server, client=None, timeout=None, sleep_time=None):
client = nova_client(client)
server = get_server(server=server, client=client)
if server.status == 'ACTIVE':
return server
if server.status == 'SHUTOFF':
client.servers.start(server.id)
else:
client.servers.reboot(server.id, reboot_type='HARD')
return wait_for_server_status(server=server.id, status='ACTIVE',
client=client, timeout=timeout,
sleep_time=sleep_time)

View File

@ -96,7 +96,23 @@ class ClientTest(testtools.TestCase):
def test_wait_for_server_status(self):
server_id = self.stack.server_id
server = nova.wait_for_server_status(server_id, 'ACTIVE')
server = nova.wait_for_server_status(server=server_id, status='ACTIVE')
self.assertEqual(server_id, server.id)
self.assertEqual('ACTIVE', server.status)
def test_shutof_and_activate_server(self):
server_id = self.useFixture(stacks.CirrosServerStackFixture(
stack_name=self.id())).server_id
server = nova.wait_for_server_status(server=server_id, status='ACTIVE')
self.assertEqual(server_id, server.id)
self.assertEqual('ACTIVE', server.status)
server = nova.shutoff_server(server=server_id)
self.assertEqual(server_id, server.id)
self.assertEqual('SHUTOFF', server.status)
server = nova.activate_server(server=server_id)
self.assertEqual(server_id, server.id)
self.assertEqual('ACTIVE', server.status)