def test_create_trustee_and_trust(self, mock_generate_password):
        mock_password = "******"
        mock_generate_password.return_value = mock_password
        mock_cluster = mock.MagicMock()
        mock_cluster.uuid = 'mock_cluster_uuid'
        mock_cluster.project_id = 'mock_cluster_project_id'
        mock_keystone = mock.MagicMock()
        mock_trustee = mock.MagicMock()
        mock_trustee.id = 'mock_trustee_id'
        mock_trustee.name = 'mock_trustee_username'
        mock_trust = mock.MagicMock()
        mock_trust.id = 'mock_trust_id'

        self.osc.keystone.return_value = mock_keystone

        mock_keystone.create_trustee.return_value = mock_trustee
        mock_keystone.create_trust.return_value = mock_trust

        trust_manager.create_trustee_and_trust(self.osc, mock_cluster)

        mock_keystone.create_trustee.assert_called_once_with(
            '%s_%s' % (mock_cluster.uuid, mock_cluster.project_id),
            mock_password,
        )
        mock_keystone.create_trust.assert_called_once_with(mock_trustee.id, )
        self.assertEqual(mock_trustee.name, mock_cluster.trustee_username)
        self.assertEqual(mock_trustee.id, mock_cluster.trustee_user_id)
        self.assertEqual(mock_password, mock_cluster.trustee_password)
        self.assertEqual(mock_trust.id, mock_cluster.trust_id)
示例#2
0
    def bay_create(self, context, bay, bay_create_timeout):
        LOG.debug('bay_heat bay_create')

        osc = clients.OpenStackClients(context)

        bay.uuid = uuid.uuid4()
        try:
            # Create trustee/trust and set them to bay
            trust_manager.create_trustee_and_trust(osc, bay)
            # Generate certificate and set the cert reference to bay
            cert_manager.generate_certificates_to_bay(bay, context=context)
            conductor_utils.notify_about_bay_operation(
                context, taxonomy.ACTION_CREATE, taxonomy.OUTCOME_PENDING)
            created_stack = _create_stack(context, osc, bay,
                                          bay_create_timeout)
        except Exception as e:
            cert_manager.delete_certificates_from_bay(bay, context=context)
            trust_manager.delete_trustee_and_trust(osc, context, bay)
            conductor_utils.notify_about_bay_operation(
                context, taxonomy.ACTION_CREATE, taxonomy.OUTCOME_FAILURE)

            if isinstance(e, exc.HTTPBadRequest):
                e = exception.InvalidParameterValue(message=six.text_type(e))

            raise e

        bay.stack_id = created_stack['stack']['id']
        bay.status = bay_status.CREATE_IN_PROGRESS
        bay.create()

        self._poll_and_check(osc, bay)

        return bay
示例#3
0
    def test_create_trustee_and_trust(self, mock_generate_password):
        mock_password = "******"
        mock_trustee_domain_id = 'trustee_domain_id_mock'
        mock_generate_password.return_value = mock_password
        mock_bay = mock.MagicMock()
        mock_bay.uuid = 'mock_bay_uuid'
        mock_keystone = mock.MagicMock()
        mock_trustee = mock.MagicMock()
        mock_trustee.id = 'mock_trustee_id'
        mock_trustee.name = 'mock_trustee_username'
        mock_trust = mock.MagicMock()
        mock_trust.id = 'mock_trust_id'

        self.osc.keystone.return_value = mock_keystone
        fixture.Config().config(group='trust',
                                trustee_domain_id=mock_trustee_domain_id)

        mock_keystone.create_trustee.return_value = mock_trustee
        mock_keystone.create_trust.return_value = mock_trust

        trust_manager.create_trustee_and_trust(self.osc, mock_bay)

        mock_keystone.create_trustee.assert_called_once_with(
            mock_bay.uuid,
            mock_password,
            mock_trustee_domain_id,
        )
        mock_keystone.create_trust.assert_called_once_with(
            mock_trustee.id,
        )
        self.assertEqual(mock_trustee.name, mock_bay.trustee_username)
        self.assertEqual(mock_trustee.id, mock_bay.trustee_user_id)
        self.assertEqual(mock_password, mock_bay.trustee_password)
        self.assertEqual(mock_trust.id, mock_bay.trust_id)
示例#4
0
    def test_create_trustee_and_trust(self, mock_generate_password):
        mock_password = "******"
        mock_generate_password.return_value = mock_password
        mock_cluster = mock.MagicMock()
        mock_cluster.uuid = 'mock_cluster_uuid'
        mock_keystone = mock.MagicMock()
        mock_trustee = mock.MagicMock()
        mock_trustee.id = 'mock_trustee_id'
        mock_trustee.name = 'mock_trustee_username'
        mock_trust = mock.MagicMock()
        mock_trust.id = 'mock_trust_id'

        self.osc.keystone.return_value = mock_keystone

        mock_keystone.create_trustee.return_value = mock_trustee
        mock_keystone.create_trust.return_value = mock_trust

        trust_manager.create_trustee_and_trust(self.osc, mock_cluster)

        mock_keystone.create_trustee.assert_called_once_with(
            mock_cluster.uuid,
            mock_password,
        )
        mock_keystone.create_trust.assert_called_once_with(
            mock_trustee.id,
        )
        self.assertEqual(mock_trustee.name, mock_cluster.trustee_username)
        self.assertEqual(mock_trustee.id, mock_cluster.trustee_user_id)
        self.assertEqual(mock_password, mock_cluster.trustee_password)
        self.assertEqual(mock_trust.id, mock_cluster.trust_id)
示例#5
0
    def bay_create(self, context, bay, bay_create_timeout):
        LOG.debug('bay_heat bay_create')

        osc = clients.OpenStackClients(context)

        bay.uuid = uuid.uuid4()
        try:
            # Create trustee/trust and set them to bay
            trust_manager.create_trustee_and_trust(osc, bay)
            # Generate certificate and set the cert reference to bay
            cert_manager.generate_certificates_to_bay(bay, context=context)
            conductor_utils.notify_about_bay_operation(
                context, taxonomy.ACTION_CREATE, taxonomy.OUTCOME_PENDING)
            created_stack = _create_stack(context, osc, bay,
                                          bay_create_timeout)
        except Exception as e:
            cert_manager.delete_certificates_from_bay(bay, context=context)
            trust_manager.delete_trustee_and_trust(osc, context, bay)
            conductor_utils.notify_about_bay_operation(
                context, taxonomy.ACTION_CREATE, taxonomy.OUTCOME_FAILURE)

            if isinstance(e, exc.HTTPBadRequest):
                e = exception.InvalidParameterValue(message=six.text_type(e))

                raise e
            raise

        bay.stack_id = created_stack['stack']['id']
        bay.status = bay_status.CREATE_IN_PROGRESS
        bay.create()

        self._poll_and_check(osc, bay)

        return bay
示例#6
0
    def cluster_create(self, context, cluster, create_timeout):
        LOG.debug('cluster_heat cluster_create')

        osc = clients.OpenStackClients(context)

        try:
            # Create trustee/trust and set them to cluster
            trust_manager.create_trustee_and_trust(osc, cluster)
            # Generate certificate and set the cert reference to cluster
            cert_manager.generate_certificates_to_cluster(cluster,
                                                          context=context)
            conductor_utils.notify_about_cluster_operation(
                context, taxonomy.ACTION_CREATE, taxonomy.OUTCOME_PENDING)
            created_stack = _create_stack(context, osc, cluster,
                                          create_timeout)
        except Exception as e:
            cluster.status = fields.ClusterStatus.CREATE_FAILED
            cluster.status_reason = six.text_type(e)
            cluster.create()
            conductor_utils.notify_about_cluster_operation(
                context, taxonomy.ACTION_CREATE, taxonomy.OUTCOME_FAILURE)

            if isinstance(e, exc.HTTPBadRequest):
                e = exception.InvalidParameterValue(message=six.text_type(e))

                raise e
            raise

        cluster.stack_id = created_stack['stack']['id']
        cluster.status = fields.ClusterStatus.CREATE_IN_PROGRESS
        cluster.create()

        self._poll_and_check(osc, cluster)

        return cluster
示例#7
0
    def test_create_trustee_and_trust(self, mock_generate_password):
        mock_password = "******"
        mock_trustee_domain_id = 'trustee_domain_id_mock'
        mock_generate_password.return_value = mock_password
        mock_bay = mock.MagicMock()
        mock_bay.uuid = 'mock_bay_uuid'
        mock_keystone = mock.MagicMock()
        mock_trustee = mock.MagicMock()
        mock_trustee.id = 'mock_trustee_id'
        mock_trustee.name = 'mock_trustee_username'
        mock_trust = mock.MagicMock()
        mock_trust.id = 'mock_trust_id'

        self.osc.keystone.return_value = mock_keystone
        fixture.Config().config(group='trust',
                                trustee_domain_id=mock_trustee_domain_id)

        mock_keystone.create_trustee.return_value = mock_trustee
        mock_keystone.create_trust.return_value = mock_trust

        trust_manager.create_trustee_and_trust(self.osc, mock_bay)

        mock_keystone.create_trustee.assert_called_once_with(
            mock_bay.uuid,
            mock_password,
            mock_trustee_domain_id,
        )
        mock_keystone.create_trust.assert_called_once_with(
            mock_trustee.id,
        )
        self.assertEqual(mock_trustee.name, mock_bay.trustee_username)
        self.assertEqual(mock_trustee.id, mock_bay.trustee_user_id)
        self.assertEqual(mock_password, mock_bay.trustee_password)
        self.assertEqual(mock_trust.id, mock_bay.trust_id)
示例#8
0
    def cluster_create(self, context, cluster, master_count, node_count,
                       create_timeout):
        LOG.debug('cluster_heat cluster_create')

        osc = clients.OpenStackClients(context)

        cluster.status = fields.ClusterStatus.CREATE_IN_PROGRESS
        cluster.status_reason = None
        cluster.create()

        # Master nodegroup
        master_ng = conductor_utils._get_nodegroup_object(context,
                                                          cluster,
                                                          master_count,
                                                          is_master=True)
        master_ng.create()
        # Minion nodegroup
        minion_ng = conductor_utils._get_nodegroup_object(context,
                                                          cluster,
                                                          node_count,
                                                          is_master=False)
        minion_ng.create()

        try:
            # Create trustee/trust and set them to cluster
            trust_manager.create_trustee_and_trust(osc, cluster)
            # Generate certificate and set the cert reference to cluster
            cert_manager.generate_certificates_to_cluster(cluster,
                                                          context=context)
            conductor_utils.notify_about_cluster_operation(
                context, taxonomy.ACTION_CREATE, taxonomy.OUTCOME_PENDING,
                cluster)
            # Get driver
            cluster_driver = driver.Driver.get_driver_for_cluster(
                context, cluster)
            # Create cluster
            cluster_driver.create_cluster(context, cluster, create_timeout)
            cluster.save()
            for ng in cluster.nodegroups:
                ng.stack_id = cluster.stack_id
                ng.save()

        except Exception as e:
            cluster.status = fields.ClusterStatus.CREATE_FAILED
            cluster.status_reason = six.text_type(e)
            cluster.save()
            conductor_utils.notify_about_cluster_operation(
                context, taxonomy.ACTION_CREATE, taxonomy.OUTCOME_FAILURE,
                cluster)

            if isinstance(e, exc.HTTPBadRequest):
                e = exception.InvalidParameterValue(message=six.text_type(e))

                raise e
            raise

        return cluster
示例#9
0
    def cluster_create(self, context, cluster, master_count, node_count,
                       create_timeout):
        LOG.debug('cluster_heat cluster_create')

        osc = clients.OpenStackClients(context)

        cluster.status = fields.ClusterStatus.CREATE_IN_PROGRESS
        cluster.status_reason = None
        cluster.create()

        # Master nodegroup
        master_ng = conductor_utils._get_nodegroup_object(
            context, cluster, master_count, is_master=True)
        master_ng.create()
        # Minion nodegroup
        minion_ng = conductor_utils._get_nodegroup_object(
            context, cluster, node_count, is_master=False)
        minion_ng.create()

        try:
            # Create trustee/trust and set them to cluster
            trust_manager.create_trustee_and_trust(osc, cluster)
            # Generate certificate and set the cert reference to cluster
            cert_manager.generate_certificates_to_cluster(cluster,
                                                          context=context)
            conductor_utils.notify_about_cluster_operation(
                context, taxonomy.ACTION_CREATE, taxonomy.OUTCOME_PENDING)
            # Get driver
            cluster_driver = driver.Driver.get_driver_for_cluster(context,
                                                                  cluster)
            # Create cluster
            cluster_driver.create_cluster(context, cluster, create_timeout)
            cluster.save()

        except Exception as e:
            cluster.status = fields.ClusterStatus.CREATE_FAILED
            cluster.status_reason = six.text_type(e)
            cluster.save()
            conductor_utils.notify_about_cluster_operation(
                context, taxonomy.ACTION_CREATE, taxonomy.OUTCOME_FAILURE)

            if isinstance(e, exc.HTTPBadRequest):
                e = exception.InvalidParameterValue(message=six.text_type(e))

                raise e
            raise

        return cluster
示例#10
0
    def cluster_create(self, context, cluster, create_timeout):
        LOG.debug('cluster_heat cluster_create')

        osc = clients.OpenStackClients(context)

        try:
            # Create trustee/trust and set them to cluster
            trust_manager.create_trustee_and_trust(osc, cluster)
            # Generate certificate and set the cert reference to cluster
            cert_manager.generate_certificates_to_cluster(cluster,
                                                          context=context)
            conductor_utils.notify_about_cluster_operation(
                context, taxonomy.ACTION_CREATE, taxonomy.OUTCOME_PENDING)
            # Get driver
            ct = conductor_utils.retrieve_cluster_template(context, cluster)
            cluster_driver = driver.Driver.get_driver(ct.server_type,
                                                      ct.cluster_distro,
                                                      ct.coe)
            # Create cluster
            created_stack = cluster_driver.create_stack(context, osc, cluster,
                                                        create_timeout)
        except Exception as e:
            cluster.status = fields.ClusterStatus.CREATE_FAILED
            cluster.status_reason = six.text_type(e)
            cluster.create()
            conductor_utils.notify_about_cluster_operation(
                context, taxonomy.ACTION_CREATE, taxonomy.OUTCOME_FAILURE)

            if isinstance(e, exc.HTTPBadRequest):
                e = exception.InvalidParameterValue(message=six.text_type(e))

                raise e
            raise

        cluster.stack_id = created_stack['stack']['id']
        cluster.status = fields.ClusterStatus.CREATE_IN_PROGRESS
        cluster.create()

        self._poll_and_check(osc, cluster, cluster_driver)

        return cluster