def create_one_image(self, user, **kwargs):
        """Create one image for the user."""

        clients = osclients.Clients(user["endpoint"])

        image_id = types.ImageResourceType.transform(
            clients=clients, resource_config=self.config["image"])
        flavor_id = types.FlavorResourceType.transform(
            clients=clients, resource_config=self.config["flavor"])

        vm_scenario = vmtasks.VMTasks(self.context, clients=clients)

        server, fip = vm_scenario._boot_server_with_fip(
            image=image_id,
            flavor=flavor_id,
            floating_network=self.config.get("floating_network"),
            userdata=self.config.get("userdata"),
            key_name=user["keypair"]["name"],
            security_groups=[user["secgroup"]["name"]],
            **kwargs)

        try:
            LOG.debug("Installing benchmark on %r %s", server, fip["ip"])
            self.customize_image(server, fip, user)

            LOG.debug("Stopping server %r", server)
            vm_scenario._stop_server(server)

            LOG.debug("Creating snapshot for %r", server)
            custom_image = vm_scenario._create_image(server).to_dict()
        finally:
            vm_scenario._delete_server_with_fip(server, fip)

        return custom_image
예제 #2
0
    def test_boot_runcommand_delete_custom_image(self):
        context = {
            "user": {
                "tenant_id": "tenant_id",
                "credential": mock.Mock()
            },
            "tenant": {
                "custom_image": {
                    "id": "image_id"
                }
            }
        }
        scenario = vmtasks.VMTasks(context)

        scenario.boot_runcommand_delete = mock.Mock()

        scenario.boot_runcommand_delete_custom_image(flavor="flavor_id",
                                                     command={
                                                         "script_file":
                                                         "foo_script",
                                                         "interpreter":
                                                         "bar_interpreter"
                                                     },
                                                     username="******")

        scenario.boot_runcommand_delete.assert_called_once_with(
            image="image_id",
            flavor="flavor_id",
            username="******",
            command={
                "script_file": "foo_script",
                "interpreter": "bar_interpreter"
            })
예제 #3
0
 def setUp(self):
     super(VMTasksTestCase, self).setUp()
     self.scenario = vmtasks.VMTasks(
         context={"user": {"keypair": {"name": "keypair_name"},
                           "endpoint": mock.MagicMock()}}
     )
     self.ip = {"id": "foo_id", "ip": "foo_ip", "is_floating": True}
     self.scenario._boot_server_with_fip = mock.Mock(
         return_value=("foo_server", self.ip))
     self.scenario._delete_server_with_fip = mock.Mock()
     self.scenario._create_volume = mock.Mock(
         return_value=mock.Mock(id="foo_volume"))
     self.scenario._run_command = mock.MagicMock(
         return_value=(0, "\"foo_out\"", "foo_err"))
예제 #4
0
    def create_one_image(self, user, **kwargs):
        """Create one image for the user."""

        clients = osclients.Clients(user["credential"])
        admin_clients = osclients.Clients(self.context["admin"]["credential"])

        image_id = types.GlanceImage.transform(
            clients=clients, resource_config=self.config["image"])
        flavor_id = types.Flavor.transform(
            clients=clients, resource_config=self.config["flavor"])

        vm_scenario = vmtasks.VMTasks(self.context, clients=clients)

        glance_wrap = glance_wrapper.wrap(admin_clients.glance, self)

        server, fip = vm_scenario._boot_server_with_fip(
            image=image_id, flavor=flavor_id,
            floating_network=self.config.get("floating_network"),
            userdata=self.config.get("userdata"),
            key_name=user["keypair"]["name"],
            security_groups=[user["secgroup"]["name"]],
            **kwargs)

        try:
            LOG.debug("Installing benchmark on %r %s", server, fip["ip"])
            self.customize_image(server, fip, user)

            LOG.debug("Stopping server %r", server)
            vm_scenario._stop_server(server)

            LOG.debug("Creating snapshot for %r", server)
            custom_image = vm_scenario._create_image(server)
            glance_wrap.set_visibility(custom_image)
        finally:
            vm_scenario._delete_server_with_fip(server, fip)

        if hasattr(custom_image, "to_dict"):
            # NOTE(stpierre): Glance v1 images are objects that can be
            # converted to dicts; Glance v2 images are already
            # dict-like
            custom_image = custom_image.to_dict()

        return custom_image
예제 #5
0
 def test_runcommand_heat(self, mock_sshutils, mock_heat):
     fake_ssh = mock.Mock()
     fake_ssh.execute.return_value = [0, "key:val", ""]
     mock_sshutils.SSH.return_value = fake_ssh
     fake_stack = mock.Mock()
     fake_stack.stack.outputs = [{
         "output_key": "gate_node",
         "output_value": "ok"
     }]
     mock_heat.main.Stack.return_value = fake_stack
     context = {
         "user": {
             "keypair": {
                 "name": "name",
                 "private": "pk"
             },
             "credential": "ok"
         },
         "tenant": {
             "networks": [{
                 "router_id": "1"
             }]
         }
     }
     scenario = vmtasks.VMTasks(context)
     scenario.generate_random_name = mock.Mock(return_value="name")
     scenario.add_output = mock.Mock()
     workload = {"username": "******", "resource": ["foo", "bar"]}
     scenario.runcommand_heat(workload, "template",
                              {"file_key": "file_value"},
                              {"param_key": "param_value"})
     expected = {
         "chart_plugin": "Table",
         "data": {
             "rows": [["key", "val"]],
             "cols": ["key", "value"]
         },
         "description": "Data generated by workload",
         "title": "Workload summary"
     }
     scenario.add_output.assert_called_once_with(complete=expected)