コード例 #1
0
    def test_project_settings(self):

        mock_project_settings = {'Test': 'Setting'}

        mock_configuration_bucket_arn = 'mock-arn'

        mock_response = mock_aws.s3_get_object_response(
            json.dumps(mock_project_settings))

        with mock_aws.patch_client('s3',
                                   'get_object',
                                   return_value=mock_response,
                                   reload=stack_info) as mock_get_object:
            with mock.patch(
                    'resource_manager_common.stack_info.ProjectInfo.configuration_bucket',
                    new_callable=mock.PropertyMock,
                    return_value=mock_configuration_bucket_arn):
                with mock.patch(
                        "resource_manager_common.json_utils.JSONCustomEncoder.default",
                        return_value='mock'):
                    target = stack_info.ProjectInfo(MOCK_STACK_ARN)
                    actual_project_settings = target.project_settings
                    self.assertEquals(actual_project_settings,
                                      mock_project_settings)
                    mock_get_object.assert_called_once_with(
                        Bucket=mock_configuration_bucket_arn,
                        Key='project-settings.json')
コード例 #2
0
    def test_project_settings_missing_object(self):

        mock_configuration_bucket_arn = 'mock-arn'

        error_response = {
            'Error': {
                'Message': 'Access Denied',
                'Code': 'AccessDenied'
            }
        }

        client_error = ClientError(error_response, 'get_object')

        with mock_aws.patch_client('s3',
                                   'get_object',
                                   side_effect=client_error,
                                   reload=stack_info) as mock_get_object:
            with mock.patch(
                    'resource_manager_common.stack_info.ProjectInfo.configuration_bucket',
                    new_callable=mock.PropertyMock,
                    return_value=mock_configuration_bucket_arn):
                target = stack_info.ProjectInfo(MOCK_STACK_ARN)
                actual_project_settings = target.project_settings
                self.assertEquals(actual_project_settings, {})
                mock_get_object.assert_called_once_with(
                    Bucket=mock_configuration_bucket_arn,
                    Key='project-settings.json')
コード例 #3
0
def get_resource_physical_id(event):
    project_stack_arn = os.environ.get('PROJECT_STACK_ARN')
    if not project_stack_arn:
        raise RuntimeError(
            'Configuration error: PROJECT_STACK_ARN was not defined')

    stack = event.get('stack')
    if stack != 'Access':
        raise RuntimeError('Invalid stack {}'.format(stack))

    deployment_name = event.get('deployment_name')
    if not deployment_name:
        raise RuntimeError('Missing deployment_name')

    resource_name = event.get('resource_name')
    if not resource_name:
        raise RuntimeError('Missing resource_name')

    project = stack_info.ProjectInfo(project_stack_arn)
    for deployment in project.deployments:
        if deployment.deployment_name == deployment_name:
            physical_id = deployment.deployment_access.resources.get_by_logical_id(
                resource_name).physical_id
            return {'physical_id': physical_id}

    raise RuntimeError('Deployment {} not found'.format(deployment_name))
コード例 #4
0
 def test_constructor(self):
     target = stack_info.ProjectInfo(
         MOCK_STACK_ARN,
         client=MOCK_CLIENT,
         stack_description=MOCK_STACK_DESCRIPTION)
     self.assertEquals(target.stack_type,
                       stack_info.StackInfo.STACK_TYPE_PROJECT)
     self.assertIs(target.client, MOCK_CLIENT)
     self.assertIs(target.stack_description, MOCK_STACK_DESCRIPTION)
コード例 #5
0
def get_deployment_access_resource_info(request, deployment_name,
                                        resource_name):
    project_stack_arn = CloudCanvas.get_setting('PROJECT_STACK_ARN')
    project = stack_info.ProjectInfo(project_stack_arn)
    for deployment in project.deployments:
        if deployment.deployment_name == deployment_name:
            physical_id = deployment.deployment_access.resources.get_by_logical_id(
                resource_name).physical_id
            if physical_id:
                return {'PhysicalId': physical_id}
            raise errors.NotFoundError(
                'Resource {} not found.'.format(resource_name))
    raise errors.NotFoundError(
        'Deployment {} not found'.format(deployment_name))
コード例 #6
0
 def test_configuration_bucket(self):
     expected_configuration_bucket_id = 'test-id'
     mock_resource = mock.MagicMock(
         physical_id=expected_configuration_bucket_id)
     mock_resources = mock.MagicMock()
     mock_resources.get_by_logical_id.return_value = mock_resource
     with mock.patch(
             'resource_manager_common.stack_info.ProjectInfo.resources',
             new=mock.PropertyMock(return_value=mock_resources)):
         target = stack_info.ProjectInfo(MOCK_STACK_ARN)
         actual_configuration_bucket_id = target.configuration_bucket
         self.assertEquals(actual_configuration_bucket_id,
                           expected_configuration_bucket_id)
         mock_resources.get_by_logical_id.assert_called_once_with(
             'Configuration', expected_type='AWS::S3::Bucket')
コード例 #7
0
 def test_deployments(self):
     mock_deployment_1_name = 'dep1'
     mock_deployment_2_name = 'dep2'
     mock_deployment_1_stack_arn = make_stack_arn(mock_deployment_1_name)
     mock_deployment_2_stack_arn = make_stack_arn(mock_deployment_2_name)
     mock_deployment_1_access_stack_arn = make_stack_arn(
         mock_deployment_1_name + 'access')
     mock_deployment_2_access_stack_arn = make_stack_arn(
         mock_deployment_2_name + 'access')
     mock_project_settings = {
         'deployment': {
             mock_deployment_1_name: {
                 'DeploymentStackId': mock_deployment_1_stack_arn,
                 'DeploymentAccessStackId':
                 mock_deployment_1_access_stack_arn
             },
             mock_deployment_2_name: {
                 'DeploymentStackId': mock_deployment_2_stack_arn,
                 'DeploymentAccessStackId':
                 mock_deployment_2_access_stack_arn
             },
             '*': {}
         }
     }
     mock_deployments = ['test-deployment-info-1', 'test-deployment-info-2']
     with mock.patch('resource_manager_common.stack_info.DeploymentInfo',
                     side_effect=mock_deployments) as mock_DeploymentInfo:
         with mock.patch(
                 'resource_manager_common.stack_info.ProjectInfo.project_settings',
                 new_callable=mock.PropertyMock,
                 return_value=mock_project_settings):
             target = stack_info.ProjectInfo(MOCK_STACK_ARN,
                                             client=MOCK_CLIENT)
             actual_deployments = target.deployments
             mock_DeploymentInfo.assert_any_call(
                 mock_deployment_1_stack_arn,
                 deployment_access_stack_arn=
                 mock_deployment_1_access_stack_arn,
                 client=MOCK_CLIENT,
                 project_info=target)
             mock_DeploymentInfo.assert_any_call(
                 mock_deployment_2_stack_arn,
                 deployment_access_stack_arn=
                 mock_deployment_2_access_stack_arn,
                 client=MOCK_CLIENT,
                 project_info=target)
             self.assertItemsEqual(actual_deployments, mock_deployments)
コード例 #8
0
def get_resource_group_resource_info(request, deployment_name,
                                     resource_group_name, resource_name):
    project_stack_arn = CloudCanvas.get_setting('ProjectStackArn')
    stack_info_manager = stack_info.StackInfoManager()
    project = stack_info.ProjectInfo(stack_info_manager, project_stack_arn)
    for deployment in project.deployments:
        if deployment.deployment_name == deployment_name:
            for resource_group in deployment.resource_groups:
                if resource_group.resource_group_name == resource_group_name:
                    physical_id = resource_group.resources.get_by_logical_id(
                        resource_name).physical_id
                    if physical_id:
                        return {'PhysicalId': physical_id}
                    raise errors.NotFoundError(
                        'Resource {} not found.'.format(resource_name))
            raise errors.NotFoundError(
                'Resource Group {} not found.'.format(resource_group))
    raise errors.NotFoundError(
        'Deployment {} not found'.format(deployment_name))
コード例 #9
0
def list_deployment_resources(request, deployment_name):
    project_stack_arn = CloudCanvas.get_setting('ProjectStackArn')
    stack_info_manager = stack_info.StackInfoManager()
    project = stack_info.ProjectInfo(stack_info_manager, project_stack_arn)
    for deployment in project.deployments:
        if deployment.deployment_name == deployment_name:
            resources = {}
            for resource_group in deployment.resource_groups:
                for resource in resource_group.resources:
                    full_logical_id = '.'.join([
                        resource_group.resource_group_name, resource.logical_id
                    ])
                    if resource.type == 'Custom::ServiceApi':
                        resources[full_logical_id] = __get_service_api_mapping(
                            resource_group, resource)
                    else:
                        resources[full_logical_id] = {
                            'PhysicalResourceId': resource.physical_id,
                            'ResourceType': resource.type
                        }
            return {'Resources': resources}
    raise errors.NotFoundError(
        'Deployment {} not found'.format(deployment_name))
コード例 #10
0
 def test_project_name(self):
     target = stack_info.ProjectInfo(MOCK_STACK_ARN)
     self.assertEquals(target.project_name, MOCK_STACK_NAME)