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))
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))
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))
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)
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))
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)
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()