예제 #1
0
    def test_delete_client_files(self):
        mock_cluster = mock.MagicMock()
        mock_cluster.uuid = "mock_cluster_uuid"
        mock_dir = tempfile.mkdtemp()
        cert_dir = os.path.join(mock_dir, mock_cluster.uuid)
        cfg.CONF.set_override("temp_cache_dir", mock_dir, group='cluster')

        mock_ca_return = '%s/ca.crt' % cert_dir
        mock_key_return = '%s/client.key' % cert_dir
        mock_magnum_return = '%s/client.crt' % cert_dir

        mock_cert = mock.MagicMock()
        mock_cert.get_certificate.return_value = "some_content"
        mock_cert.get_decrypted_private_key.return_value = "some_key"
        self.CertManager.get_cert.return_value = \
            mock_cert

        (cluster_ca_cert, cluster_key, cluster_magnum_cert) = \
            cert_manager.create_client_files(mock_cluster)

        # Test the directory and files were created
        self.assertEqual(True, os.path.isdir(cert_dir))
        self.assertEqual(True, os.path.isfile(mock_ca_return))
        self.assertEqual(True, os.path.isfile(mock_key_return))
        self.assertEqual(True, os.path.isfile(mock_magnum_return))

        cert_manager.delete_client_files(mock_cluster)

        # Test that directory and files DNE
        self.assertEqual(False, os.path.isdir(cert_dir))
        self.assertEqual(False, os.path.isfile(mock_ca_return))
        self.assertEqual(False, os.path.isfile(mock_key_return))
        self.assertEqual(False, os.path.isfile(mock_magnum_return))
예제 #2
0
    def test_delete_client_files(self):
        mock_cluster = mock.MagicMock()
        mock_cluster.uuid = "mock_cluster_uuid"
        mock_dir = tempfile.mkdtemp()
        cert_dir = os.path.join(mock_dir,
                                mock_cluster.uuid)
        cfg.CONF.set_override("temp_cache_dir", mock_dir, group='cluster')

        mock_ca_return = '%s/ca.crt' % cert_dir
        mock_key_return = '%s/client.key' % cert_dir
        mock_magnum_return = '%s/client.crt' % cert_dir

        mock_cert = mock.MagicMock()
        mock_cert.get_certificate.return_value = "some_content"
        mock_cert.get_decrypted_private_key.return_value = "some_key"
        self.CertManager.get_cert.return_value = \
            mock_cert

        (cluster_ca_cert, cluster_key, cluster_magnum_cert) = \
            cert_manager.create_client_files(mock_cluster)

        # Test the directory and files were created
        self.assertEqual(True, os.path.isdir(cert_dir))
        self.assertEqual(True, os.path.isfile(mock_ca_return))
        self.assertEqual(True, os.path.isfile(mock_key_return))
        self.assertEqual(True, os.path.isfile(mock_magnum_return))

        cert_manager.delete_client_files(mock_cluster)

        # Test that directory and files DNE
        self.assertEqual(False, os.path.isdir(cert_dir))
        self.assertEqual(False, os.path.isfile(mock_ca_return))
        self.assertEqual(False, os.path.isfile(mock_key_return))
        self.assertEqual(False, os.path.isfile(mock_magnum_return))
예제 #3
0
    def test_delete_client_files_none(self):
        mock_cluster = mock.MagicMock()
        mock_cluster.uuid = "mock_cluster_uuid"
        mock_dir = tempfile.mkdtemp()
        cfg.CONF.set_override("temp_cache_dir", mock_dir, group='cluster')
        cert_dir = os.path.join(mock_dir, mock_cluster.uuid)

        self.assertEqual(True, os.path.isdir(mock_dir))
        self.assertEqual(False, os.path.isdir(cert_dir))

        cert_manager.delete_client_files(mock_cluster)

        self.assertEqual(True, os.path.isdir(mock_dir))
        self.assertEqual(False, os.path.isdir(cert_dir))
예제 #4
0
    def _delete_complete(self):
        LOG.info('Cluster has been deleted, stack_id: %s',
                 self.cluster.stack_id)
        try:
            trust_manager.delete_trustee_and_trust(self.openstack_client,
                                                   self.context, self.cluster)
            cert_manager.delete_certificates_from_cluster(self.cluster,
                                                          context=self.context)
            cert_manager.delete_client_files(self.cluster,
                                             context=self.context)

        except exception.ClusterNotFound:
            LOG.info('The cluster %s has been deleted by others.',
                     self.cluster.uuid)
예제 #5
0
    def test_delete_client_files_none(self):
        mock_cluster = mock.MagicMock()
        mock_cluster.uuid = "mock_cluster_uuid"
        mock_dir = tempfile.mkdtemp()
        cfg.CONF.set_override("temp_cache_dir", mock_dir, group='cluster')
        cert_dir = os.path.join(mock_dir,
                                mock_cluster.uuid)

        self.assertEqual(True, os.path.isdir(mock_dir))
        self.assertEqual(False, os.path.isdir(cert_dir))

        cert_manager.delete_client_files(mock_cluster)

        self.assertEqual(True, os.path.isdir(mock_dir))
        self.assertEqual(False, os.path.isdir(cert_dir))
예제 #6
0
파일: driver.py 프로젝트: openstack/magnum
    def _delete_complete(self):
        LOG.info('Cluster has been deleted, stack_id: %s',
                 self.cluster.stack_id)
        try:
            trust_manager.delete_trustee_and_trust(self.openstack_client,
                                                   self.context,
                                                   self.cluster)
            cert_manager.delete_certificates_from_cluster(self.cluster,
                                                          context=self.context)
            cert_manager.delete_client_files(self.cluster,
                                             context=self.context)

        except exception.ClusterNotFound:
            LOG.info('The cluster %s has been deleted by others.',
                     self.cluster.uuid)
예제 #7
0
    def update_cluster_status(self, context, cluster):
        """Updates the cluster status.

        This method should be finished within the periodic interval(10s).

        :param context: Admin context.
        :param cluster: Cluster object.
        """
        if cluster.status == fields.ClusterStatus.CREATE_IN_PROGRESS:
            if cluster.stack_id is None:
                return

            stack_ctx = mag_ctx.make_cluster_context(cluster)
            os_clients = clients.OpenStackClients(stack_ctx)
            stack = os_clients.heat().stacks.get(
                cluster.stack_id,
                resolve_outputs=False
            )

            if stack.stack_status == fields.ClusterStatus.CREATE_COMPLETE:
                stack_ctx = mag_ctx.make_cluster_context(cluster)
                kubeconfig_path = self._get_kubeconfig(stack_ctx, cluster)
                cluster_kubectl = kubectl.KubeCtl(
                    bin="/usr/bin/kubectl",
                    global_flags="--kubeconfig %s" % kubeconfig_path
                )

                ns = self.kubectl.get("namespace %s" % cluster.uuid)
                labels = ns['metadata'].get('labels', {})

                if not labels.get('magnum.k8s.io/status'):
                    self._install_addons(cluster, cluster_kubectl, context)
                    return

                if self._workers_ready(cluster, cluster_kubectl):
                    LOG.info(
                        'Cluster %s is created successfully', cluster.uuid
                    )

                    # Update the worker addresses in the cluster from the Heat
                    # stack output.
                    stack = os_clients.heat().stacks.get(
                        cluster.stack_id,
                        resolve_outputs=True
                    )
                    template_def = self.get_template_definition()
                    c_template = conductor_utils.retrieve_cluster_template(
                        context,
                        cluster
                    )
                    template_def.update_outputs(stack, c_template, cluster)

                    cluster.status = fields.ClusterStatus.CREATE_COMPLETE
                    cluster.save()
            elif stack.stack_status in (
                fields.ClusterStatus.CREATE_FAILED,
                fields.ClusterStatus.DELETE_FAILED,
                fields.ClusterStatus.UPDATE_FAILED,
                fields.ClusterStatus.ROLLBACK_COMPLETE,
                fields.ClusterStatus.ROLLBACK_FAILED
            ):
                self._sync_cluster_status(cluster, stack)
                LOG.error('Failed to create cluster %s', cluster.uuid)

        elif cluster.status == fields.ClusterStatus.DELETE_IN_PROGRESS:
            # Check if the namespace is deleted.
            ns_template = self.jinja_env.get_template('namespace.yaml.j2')
            ns_body = ns_template.render({"namespace": cluster.uuid})
            namespaces = self.kubectl.get('namespace')
            names = [n['metadata']['name'] for n in namespaces]

            if cluster.uuid not in names:
                LOG.debug(
                    "Namespace has been deleted for cluster %s",
                    cluster.uuid
                )
                stack_ctx = mag_ctx.make_cluster_context(cluster)
                os_client = clients.OpenStackClients(stack_ctx)

                try:
                    trust_manager.delete_trustee_and_trust(
                        os_client,
                        context,
                        cluster
                    )
                    cert_manager.delete_certificates_from_cluster(
                        cluster,
                        context=context
                    )
                    cert_manager.delete_client_files(cluster, context=context)
                except exception.ClusterNotFound:
                    LOG.info(
                        'The cluster %s has been deleted by others.',
                        cluster.uuid
                    )

                LOG.info('Cluster %s has been deleted.', cluster.uuid)

                cluster.status = fields.ClusterStatus.DELETE_COMPLETE
                cluster.save()