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 NovaClientFixture = _client.NovaClientFixture
wait_for_server_status = _client.wait_for_server_status wait_for_server_status = _client.wait_for_server_status
ServerStatusTimeout = _client.ServerStatusTimeout ServerStatusTimeout = _client.ServerStatusTimeout
shutoff_server = _client.shutoff_server
activate_server = _client.activate_server
skip_if_missing_hypervisors = _hypervisor.skip_if_missing_hypervisors skip_if_missing_hypervisors = _hypervisor.skip_if_missing_hypervisors
get_same_host_hypervisors = _hypervisor.get_same_host_hypervisors get_same_host_hypervisors = _hypervisor.get_same_host_hypervisors

View File

@ -150,20 +150,52 @@ class ServerStatusTimeout(tobiko.TobikoException):
"status after {timeout} seconds") "status after {timeout} seconds")
def wait_for_server_status(server_id, status, client=None, timeout=30., def wait_for_server_status(server, status, client=None, timeout=None,
sleep_time=5.): sleep_time=None):
if timeout is None:
timeout = 300.
if sleep_time is None:
sleep_time = 5.
start_time = time.time() start_time = time.time()
while True: while True:
server = get_server(server_id, client) server = get_server(server=server, client=client)
if server.status == status: if server.status == status:
break break
if time.time() - start_time >= timeout: if time.time() - start_time >= timeout:
raise ServerStatusTimeout(server_id=server_id, raise ServerStatusTimeout(server_id=server.id,
status=status, status=status,
timeout=timeout) timeout=timeout)
LOG.debug('Waiting for server %r status to get from %r to %r', 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) time.sleep(sleep_time)
return server 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): def test_wait_for_server_status(self):
server_id = self.stack.server_id 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(server_id, server.id)
self.assertEqual('ACTIVE', server.status) self.assertEqual('ACTIVE', server.status)