Add vm power action driver methods and get console output
Add vm power actions support including: power on, power off, pause, unpause and get vm console output via smut backend. Change-Id: Id032dea9dce6c157367f2320a4a373ff862fe10b
This commit is contained in:
parent
369b0b1674
commit
fab7a6c77e
|
@ -435,3 +435,47 @@ class TestZVMDriver(test.NoDBTestCase):
|
|||
|
||||
call.assert_any_call('guest_get_definition_info',
|
||||
self._instance['name'])
|
||||
|
||||
@mock.patch('nova_zvm.virt.zvm.utils.zVMConnectorRequestHandler.call')
|
||||
def test_instance_power_action(self, call):
|
||||
call.side_effect = [['test0001', 'test0002'], None]
|
||||
self.driver._instance_power_action(self._instance, 'guest_start')
|
||||
call.assert_any_call('guest_list')
|
||||
call.assert_any_call('guest_start', 'test0001')
|
||||
|
||||
@mock.patch('nova_zvm.virt.zvm.utils.zVMConnectorRequestHandler.call')
|
||||
def test_instance_power_action_not_exist(self, call):
|
||||
call.return_value = ['test0002', 'test0003']
|
||||
self.driver._instance_power_action(self._instance, 'guest_start')
|
||||
call.assert_any_call('guest_list')
|
||||
|
||||
@mock.patch('nova_zvm.virt.zvm.driver.ZVMDriver._instance_power_action')
|
||||
def test_power_off(self, ipa):
|
||||
self.driver.power_off(self._instance)
|
||||
ipa.assert_called_once_with(self._instance, 'guest_softoff')
|
||||
self.driver.power_off(self._instance, 60, 10)
|
||||
ipa.assert_any_call(self._instance, 'guest_softoff',
|
||||
timeout=60, poll_interval=10)
|
||||
|
||||
@mock.patch('nova_zvm.virt.zvm.driver.ZVMDriver._instance_power_action')
|
||||
def test_power_on(self, ipa):
|
||||
self.driver.power_on(None, self._instance, None)
|
||||
ipa.assert_called_once_with(self._instance, 'guest_start')
|
||||
|
||||
@mock.patch('nova_zvm.virt.zvm.driver.ZVMDriver._instance_power_action')
|
||||
def test_pause(self, ipa):
|
||||
self.driver.pause(self._instance)
|
||||
ipa.assert_called_once_with(self._instance, 'guest_pause')
|
||||
|
||||
@mock.patch('nova_zvm.virt.zvm.driver.ZVMDriver._instance_power_action')
|
||||
def test_unpause(self, ipa):
|
||||
self.driver.unpause(self._instance)
|
||||
ipa.assert_called_once_with(self._instance, 'guest_unpause')
|
||||
|
||||
@mock.patch('nova_zvm.virt.zvm.utils.zVMConnectorRequestHandler.call')
|
||||
def test_get_console_output(self, call):
|
||||
call.return_value = 'console output'
|
||||
outputs = self.driver.get_console_output(None, self._instance)
|
||||
call.test_assert_called_once_with('guest_get_console_output',
|
||||
'test0001')
|
||||
self.assertEqual('console output', outputs)
|
||||
|
|
|
@ -369,3 +369,38 @@ class ZVMDriver(driver.ComputeDriver):
|
|||
def get_host_uptime(self):
|
||||
res = self._reqh.call('host_get_info')
|
||||
return res['ipl_time']
|
||||
|
||||
def _instance_power_action(self, instance, action, *args, **kwargs):
|
||||
inst_name = instance['name']
|
||||
if self._instance_exists(inst_name):
|
||||
LOG.info(_("Power action %(action)s to instance %(inst_name)s"),
|
||||
action=action, inst_name=inst_name, instance=instance)
|
||||
self._reqh.call(action, inst_name)
|
||||
else:
|
||||
LOG.warning(_('Instance %s does not exist'), inst_name,
|
||||
instance=instance)
|
||||
|
||||
def power_off(self, instance, timeout=0, retry_interval=0):
|
||||
"""Power off the specified instance."""
|
||||
if timeout >= 0 and retry_interval > 0:
|
||||
self._instance_power_action(instance, 'guest_softoff',
|
||||
timeout=timeout,
|
||||
poll_interval=retry_interval)
|
||||
else:
|
||||
self._instance_power_action(instance, 'guest_softoff')
|
||||
|
||||
def power_on(self, context, instance, network_info,
|
||||
block_device_info=None):
|
||||
"""Power on the specified instance."""
|
||||
self._instance_power_action(instance, 'guest_start')
|
||||
|
||||
def pause(self, instance):
|
||||
"""Pause the z/VM instance."""
|
||||
self._instance_power_action(instance, 'guest_pause')
|
||||
|
||||
def unpause(self, instance):
|
||||
"""Unpause the z/VM instance."""
|
||||
self._instance_power_action(instance, 'guest_unpause')
|
||||
|
||||
def get_console_output(self, context, instance):
|
||||
return self._reqh.call('guest_get_console_output', instance.name)
|
||||
|
|
Loading…
Reference in New Issue