Merge "Remove BootRuncommandDeleteCustomImage scenario"
This commit is contained in:
commit
a10a45937f
@ -367,8 +367,6 @@
|
||||
sla:
|
||||
failure_rate:
|
||||
max: 0
|
||||
|
||||
VMTasks.boot_runcommand_delete_custom_image:
|
||||
-
|
||||
args:
|
||||
command:
|
||||
|
@ -632,8 +632,6 @@
|
||||
sla:
|
||||
failure_rate:
|
||||
max: 0
|
||||
|
||||
VMTasks.boot_runcommand_delete_custom_image:
|
||||
-
|
||||
args:
|
||||
command:
|
||||
|
@ -153,9 +153,8 @@ class BaseCustomImageGenerator(context.Context):
|
||||
flavor_id = types.Flavor.transform(
|
||||
clients=clients, resource_config=self.config["flavor"])
|
||||
|
||||
vm_scenario = vmtasks.BootRuncommandDeleteCustomImage(
|
||||
self.context,
|
||||
clients=clients)
|
||||
vm_scenario = vmtasks.BootRuncommandDelete(self.context,
|
||||
clients=clients)
|
||||
|
||||
glance_wrap = glance_wrapper.wrap(admin_clients.glance, self)
|
||||
|
||||
|
@ -36,11 +36,13 @@ LOG = logging.getLogger(__name__)
|
||||
|
||||
@types.convert(image={"type": "glance_image"},
|
||||
flavor={"type": "nova_flavor"})
|
||||
@validation.image_valid_on_flavor("flavor", "image")
|
||||
@validation.image_valid_on_flavor("flavor", "image", fail_on_404_image=False)
|
||||
@validation.valid_command("command")
|
||||
@validation.number("port", minval=1, maxval=65535, nullable=True,
|
||||
integer_only=True)
|
||||
@validation.external_network_exists("floating_network")
|
||||
@validation.required_param_or_context(arg_name="image",
|
||||
ctx_name="image_command_customizer")
|
||||
@validation.required_services(consts.Service.NOVA, consts.Service.CINDER)
|
||||
@validation.required_openstack(users=True)
|
||||
@scenario.configure(context={"cleanup": ["nova", "cinder"],
|
||||
@ -48,13 +50,16 @@ LOG = logging.getLogger(__name__)
|
||||
name="VMTasks.boot_runcommand_delete")
|
||||
class BootRuncommandDelete(vm_utils.VMScenario):
|
||||
|
||||
def run(self, image, flavor, username, password=None, command=None,
|
||||
def run(self, flavor, username, password=None,
|
||||
image=None,
|
||||
command=None,
|
||||
volume_args=None, floating_network=None, port=22,
|
||||
use_floating_ip=True, force_delete=False, wait_for_ping=True,
|
||||
max_log_length=None, **kwargs):
|
||||
"""Boot a server, run script specified in command and delete server.
|
||||
|
||||
:param image: glance image name to use for the vm
|
||||
:param image: glance image name to use for the vm. Optional
|
||||
in case of specified "image_command_customizer" context
|
||||
:param flavor: VM flavor name
|
||||
:param username: ssh username on server, str
|
||||
:param password: Password on SSH authentication
|
||||
@ -137,11 +142,13 @@ class BootRuncommandDelete(vm_utils.VMScenario):
|
||||
data: dict, JSON output from the script
|
||||
errors: str, raw data from the script's stderr stream
|
||||
"""
|
||||
|
||||
if volume_args:
|
||||
volume = self._create_volume(volume_args["size"], imageRef=None)
|
||||
kwargs["block_device_mapping"] = {"vdrally": "%s:::1" % volume.id}
|
||||
|
||||
if not image:
|
||||
image = self.context["tenant"]["custom_image"]["id"]
|
||||
|
||||
server, fip = self._boot_server_with_fip(
|
||||
image, flavor, use_floating_ip=use_floating_ip,
|
||||
floating_network=floating_network,
|
||||
@ -211,30 +218,6 @@ class BootRuncommandDelete(vm_utils.VMScenario):
|
||||
self.add_output(**{chart_type: chart})
|
||||
|
||||
|
||||
@types.convert(image={"type": "glance_image"},
|
||||
flavor={"type": "nova_flavor"})
|
||||
@validation.number("port", minval=1, maxval=65535, nullable=True,
|
||||
integer_only=True)
|
||||
@validation.valid_command("command")
|
||||
@validation.external_network_exists("floating_network")
|
||||
@validation.required_services(consts.Service.NOVA, consts.Service.CINDER)
|
||||
@validation.required_openstack(users=True)
|
||||
@validation.required_contexts("image_command_customizer")
|
||||
@scenario.configure(context={"cleanup": ["nova", "cinder"],
|
||||
"keypair": {}, "allow_ssh": {}},
|
||||
name="VMTasks.boot_runcommand_delete_custom_image")
|
||||
class BootRuncommandDeleteCustomImage(vm_utils.VMScenario):
|
||||
|
||||
def run(self, **kwargs):
|
||||
"""Boot a server from a custom image, run a command that outputs JSON.
|
||||
|
||||
Example Script in rally-jobs/extra/install_benchmark.sh
|
||||
"""
|
||||
boot_runcommand_delete = BootRuncommandDelete(self.context)
|
||||
return boot_runcommand_delete.run(
|
||||
image=self.context["tenant"]["custom_image"]["id"], **kwargs)
|
||||
|
||||
|
||||
@scenario.configure(context={"cleanup": ["nova", "heat"],
|
||||
"keypair": {}, "network": {}},
|
||||
name="VMTasks.runcommand_heat")
|
||||
|
@ -1,5 +1,5 @@
|
||||
{
|
||||
"VMTasks.boot_runcommand_delete_custom_image": [
|
||||
"VMTasks.boot_runcommand_delete": [
|
||||
{
|
||||
"args": {
|
||||
"flavor": {"name": "m1.small"},
|
||||
|
@ -1,5 +1,5 @@
|
||||
---
|
||||
VMTasks.boot_runcommand_delete_custom_image:
|
||||
VMTasks.boot_runcommand_delete:
|
||||
-
|
||||
args:
|
||||
command:
|
||||
|
@ -66,10 +66,10 @@ class BaseCustomImageContextVMTestCase(test.TestCase):
|
||||
@mock.patch("%s.types.GlanceImage.transform" % BASE, return_value="image")
|
||||
@mock.patch("%s.types.Flavor.transform" % BASE, return_value="flavor")
|
||||
@mock.patch("rally.plugins.openstack.wrappers.glance.wrap")
|
||||
@mock.patch("%s.vmtasks.BootRuncommandDeleteCustomImage" % BASE)
|
||||
@mock.patch("%s.vmtasks.BootRuncommandDelete" % BASE)
|
||||
def test_create_one_image(
|
||||
self, mock_scenario, mock_glance_wrap, mock_flavor_transform,
|
||||
mock_glance_image_transform, mock_clients
|
||||
self, mock_boot_runcommand_delete, mock_glance_wrap,
|
||||
mock_flavor_transform, mock_glance_image_transform, mock_clients
|
||||
):
|
||||
ip = {"ip": "foo_ip", "id": "foo_id", "is_floating": True}
|
||||
fake_server = mock.Mock()
|
||||
@ -77,7 +77,7 @@ class BaseCustomImageContextVMTestCase(test.TestCase):
|
||||
fake_image = mock.MagicMock(
|
||||
to_dict=mock.MagicMock(return_value={"id": "image"}))
|
||||
|
||||
scenario = mock_scenario.return_value = mock.MagicMock(
|
||||
scenario = mock_boot_runcommand_delete.return_value = mock.MagicMock(
|
||||
_create_image=mock.MagicMock(return_value=fake_image),
|
||||
_boot_server_with_fip=mock.MagicMock(
|
||||
return_value=(fake_server, ip))
|
||||
@ -103,7 +103,7 @@ class BaseCustomImageContextVMTestCase(test.TestCase):
|
||||
mock_glance_image_transform.assert_called_once_with(
|
||||
clients=mock_clients.return_value,
|
||||
resource_config={"name": "image"})
|
||||
mock_scenario.assert_called_once_with(
|
||||
mock_boot_runcommand_delete.assert_called_once_with(
|
||||
self.context, clients=mock_clients.return_value)
|
||||
|
||||
scenario._boot_server_with_fip.assert_called_once_with(
|
||||
@ -132,10 +132,10 @@ class BaseCustomImageContextVMTestCase(test.TestCase):
|
||||
@mock.patch("%s.types.Flavor.transform" % BASE,
|
||||
return_value="flavor")
|
||||
@mock.patch("rally.plugins.openstack.wrappers.glance.wrap")
|
||||
@mock.patch("%s.vmtasks.BootRuncommandDeleteCustomImage" % BASE)
|
||||
@mock.patch("%s.vmtasks.BootRuncommandDelete" % BASE)
|
||||
def test_create_one_image_cleanup(
|
||||
self, mock_scenario, mock_glance_wrap, mock_flavor_transform,
|
||||
mock_glance_image_transform, mock_clients
|
||||
self, mock_boot_runcommand_delete, mock_glance_wrap,
|
||||
mock_flavor_transform, mock_glance_image_transform, mock_clients
|
||||
):
|
||||
ip = {"ip": "foo_ip", "id": "foo_id", "is_floating": True}
|
||||
fake_server = mock.Mock()
|
||||
@ -143,7 +143,7 @@ class BaseCustomImageContextVMTestCase(test.TestCase):
|
||||
fake_image = mock.MagicMock(
|
||||
to_dict=mock.MagicMock(return_value={"id": "image"}))
|
||||
|
||||
scenario = mock_scenario.return_value = mock.MagicMock(
|
||||
scenario = mock_boot_runcommand_delete.return_value = mock.MagicMock(
|
||||
_create_image=mock.MagicMock(return_value=fake_image),
|
||||
_boot_server_with_fip=mock.MagicMock(
|
||||
return_value=(fake_server, ip)),
|
||||
|
@ -124,7 +124,8 @@ class VMScenarioTestCase(test.ScenarioTestCase):
|
||||
"interpreter": "bar"})
|
||||
|
||||
mock_sshutils_ssh.assert_called_once_with(
|
||||
"username", "1.2.3.4", port=22, pkey="ssh", password="password")
|
||||
"username", "1.2.3.4",
|
||||
port=22, pkey="ssh", password="password")
|
||||
mock_sshutils_ssh.return_value.wait.assert_called_once_with(120, 1)
|
||||
mock_vm_scenario__run_command_over_ssh.assert_called_once_with(
|
||||
mock_sshutils_ssh.return_value,
|
||||
|
@ -49,7 +49,7 @@ class VMTasksTestCase(test.ScenarioTestCase):
|
||||
scenario = self.create_env(vmtasks.BootRuncommandDelete(self.context))
|
||||
scenario._run_command = mock.MagicMock(
|
||||
return_value=(0, "{\"foo\": 42}", "foo_err"))
|
||||
scenario.run("foo_image", "foo_flavor",
|
||||
scenario.run("foo_flavor", image="foo_image",
|
||||
command={"script_file": "foo_script",
|
||||
"interpreter": "foo_interpreter"},
|
||||
username="foo_username",
|
||||
@ -100,7 +100,9 @@ class VMTasksTestCase(test.ScenarioTestCase):
|
||||
scenario = self.create_env(vmtasks.BootRuncommandDelete(self.context))
|
||||
|
||||
scenario._run_command.return_value = output
|
||||
kwargs = {"command": {"remote_path": "foo"},
|
||||
kwargs = {"flavor": "foo_flavor",
|
||||
"image": "foo_image",
|
||||
"command": {"remote_path": "foo"},
|
||||
"username": "foo_username",
|
||||
"password": "foo_password",
|
||||
"use_floating_ip": "use_fip",
|
||||
@ -109,11 +111,10 @@ class VMTasksTestCase(test.ScenarioTestCase):
|
||||
"volume_args": {"size": 16},
|
||||
"foo_arg": "foo_value"}
|
||||
if raises:
|
||||
self.assertRaises(raises, scenario.run,
|
||||
"foo_image", "foo_flavor", **kwargs)
|
||||
self.assertRaises(raises, scenario.run, **kwargs)
|
||||
self.assertFalse(scenario.add_output.called)
|
||||
else:
|
||||
scenario.run("foo_image", "foo_flavor", **kwargs)
|
||||
scenario.run(**kwargs)
|
||||
calls = [mock.call(**kw) for kw in expected]
|
||||
scenario.add_output.assert_has_calls(calls, any_order=True)
|
||||
|
||||
@ -136,7 +137,7 @@ class VMTasksTestCase(test.ScenarioTestCase):
|
||||
scenario._run_command.side_effect = exceptions.SSHTimeout()
|
||||
self.assertRaises(exceptions.SSHTimeout,
|
||||
scenario.run,
|
||||
"foo_image", "foo_flavor", "foo_interpreter",
|
||||
"foo_flavor", "foo_image", "foo_interpreter",
|
||||
"foo_script", "foo_username")
|
||||
scenario._delete_server_with_fip.assert_called_once_with(
|
||||
"foo_server", self.ip, force_delete=False)
|
||||
@ -179,31 +180,49 @@ class VMTasksTestCase(test.ScenarioTestCase):
|
||||
"foo_server", self.ip, force_delete=False)
|
||||
self.assertFalse(scenario.add_output.called)
|
||||
|
||||
@mock.patch("%s.BootRuncommandDelete.run" % BASE)
|
||||
def test_boot_runcommand_delete_custom_image(self, mock_scenario):
|
||||
def test_boot_runcommand_delete_custom_image(self):
|
||||
context = {
|
||||
"user": {
|
||||
"tenant_id": "tenant_id",
|
||||
"keypair": {"name": "foo_keypair_name"},
|
||||
"credential": mock.Mock()
|
||||
},
|
||||
"tenant": {
|
||||
"custom_image": {"id": "image_id"}
|
||||
}
|
||||
}
|
||||
scenario = vmtasks.BootRuncommandDeleteCustomImage(context)
|
||||
|
||||
scenario.run(flavor="flavor_id",
|
||||
command={
|
||||
"script_file": "foo_script",
|
||||
"interpreter": "bar_interpreter"},
|
||||
username="username")
|
||||
scenario = self.create_env(vmtasks.BootRuncommandDelete(context))
|
||||
scenario._run_command = mock.MagicMock(
|
||||
return_value=(0, "{\"foo\": 42}", "foo_err"))
|
||||
scenario.run("foo_flavor",
|
||||
command={"script_file": "foo_script",
|
||||
"interpreter": "foo_interpreter"},
|
||||
username="foo_username",
|
||||
password="foo_password",
|
||||
use_floating_ip="use_fip",
|
||||
floating_network="ext_network",
|
||||
force_delete="foo_force",
|
||||
volume_args={"size": 16},
|
||||
foo_arg="foo_value")
|
||||
|
||||
mock_scenario.assert_called_once_with(
|
||||
image="image_id", flavor="flavor_id", username="username",
|
||||
command={
|
||||
"script_file": "foo_script",
|
||||
"interpreter": "bar_interpreter"}
|
||||
)
|
||||
scenario._create_volume.assert_called_once_with(16, imageRef=None)
|
||||
scenario._boot_server_with_fip.assert_called_once_with(
|
||||
"image_id", "foo_flavor", key_name="foo_keypair_name",
|
||||
use_floating_ip="use_fip", floating_network="ext_network",
|
||||
block_device_mapping={"vdrally": "foo_volume:::1"},
|
||||
foo_arg="foo_value")
|
||||
|
||||
scenario._wait_for_ping.assert_called_once_with("foo_ip")
|
||||
scenario._run_command.assert_called_once_with(
|
||||
"foo_ip", 22, "foo_username", "foo_password",
|
||||
command={"script_file": "foo_script",
|
||||
"interpreter": "foo_interpreter"})
|
||||
scenario._delete_server_with_fip.assert_called_once_with(
|
||||
"foo_server", self.ip, force_delete="foo_force")
|
||||
scenario.add_output.assert_called_once_with(
|
||||
additive={"title": "Command output", "chart_plugin": "Lines",
|
||||
"data": [["foo", 42.0]]})
|
||||
|
||||
@mock.patch("%s.heat" % BASE)
|
||||
@mock.patch("%s.sshutils" % BASE)
|
||||
|
Loading…
x
Reference in New Issue
Block a user