Exemple #1
0
    def _create_node(self, node_index, container=None):
        node = DockerNode(parent_cluster=self,
                          container=container,
                          ssh_login_info=dict(
                              hostname=None,
                              user=self.node_container_user,
                              key_file=self.node_container_key_file),
                          base_logdir=self.logdir,
                          node_prefix=self.node_prefix,
                          node_index=node_index)

        if container is None:
            ContainerManager.build_container_image(node, "node")

        ContainerManager.run_container(
            node,
            "node",
            seed_ip=self.nodes[0].public_ip_address if node_index else None)
        ContainerManager.wait_for_status(node, "node", status="running")
        ContainerManager.ssh_copy_id(node, "node", self.node_container_user,
                                     self.node_container_key_file)

        node.init()

        return node
    def test_build_container_image(self):
        with self.subTest("Try to build image for existent container"):
            self.assertRaises(ContainerAlreadyRegistered, ContainerManager.build_container_image, self.node, "c1")

        with self.subTest("Node-wide container image tag"):
            self.node.container_image_tag = Mock(return_value="blah")
            self.assertRaisesRegex(AssertionError, "image tag", ContainerManager.build_container_image, self.node, "c2")

        with self.subTest("Node-wide dockerfile args"):
            self.node.c2_container_image_tag = Mock(return_value="hello-world:latest")
            self.node.container_image_dockerfile_args = Mock(return_value="blah")
            self.assertRaisesRegex(AssertionError, "Dockerfile",
                                   ContainerManager.build_container_image, self.node, "c2")
            self.node.c2_container_image_tag.assert_called_once_with()

        with self.subTest("No build args"):
            self.node.c2_container_image_tag.reset_mock()
            self.node.c2_container_image_dockerfile_args = Mock(return_value={"path": "."})
            with patch("sdcm.utils.docker_utils.LOGGER.debug") as logger:
                image = ContainerManager.build_container_image(self.node, "c2:another", arg1="value1", arg2="value2")
            self.assertEqual(image, ((), dict(tag="hello-world:latest",
                                              path=".",
                                              labels=self.node.tags,
                                              pull=True,
                                              rm=True,
                                              arg1="value1",
                                              arg2="value2")))
            logger.assert_has_calls([call("blah"), ])
            self.node.c2_container_image_tag.assert_called_once_with("another")
            self.node.c2_container_image_dockerfile_args.assert_called_once_with("another")

        with self.subTest("No build args"):
            self.node.c2_container_image_tag.reset_mock()
            self.node.c2_container_image_dockerfile_args.reset_mock()
            self.node.c2_container_image_build_args = lambda **kw: {v: k for k, v in kw.items()}
            with patch("sdcm.utils.docker_utils.LOGGER.debug") as logger:
                image = ContainerManager.build_container_image(self.node, "c2:another", arg1="value1", arg2="value2")
            self.assertEqual(image, ((), dict(tag="hello-world:latest",
                                              path=".",
                                              labels=self.node.tags,
                                              pull=True,
                                              rm=True,
                                              value1="arg1",
                                              value2="arg2")))
            logger.assert_has_calls([call("blah"), ])
            self.node.c2_container_image_tag.assert_called_once_with("another")
            self.node.c2_container_image_dockerfile_args.assert_called_once_with("another")