Source code for c7n.resources.code

# Copyright 2017 Capital One Services, LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
from __future__ import absolute_import, division, print_function, unicode_literals

from botocore.exceptions import ClientError

from c7n.actions import BaseAction
from c7n.filters.vpc import SubnetFilter, SecurityGroupFilter, VpcFilter
from c7n.manager import resources
from c7n.query import QueryResourceManager, DescribeSource, ConfigSource
from c7n.tags import universal_augment
from c7n.utils import local_session, get_retry, type_schema


[docs]@resources.register('codecommit') class CodeRepository(QueryResourceManager): retry = staticmethod(get_retry(('Throttling',)))
[docs] class resource_type(object): service = 'codecommit' enum_spec = ('list_repositories', 'repositories', None) batch_detail_spec = ( 'batch_get_repositories', 'repositoryNames', 'repositoryName', 'repositories', None) id = 'repositoryId' arn = "Arn" name = 'repositoryName' date = 'creationDate' dimension = None filter_name = None
[docs]@CodeRepository.action_registry.register('delete') class DeleteRepository(BaseAction): """Action to delete code commit It is recommended to use a filter to avoid unwanted deletion of repos :example: .. code-block:: yaml policies: - name: codecommit-delete resource: codecommit actions: - delete """ schema = type_schema('delete') permissions = ("codecommit:DeleteRepository",)
[docs] def process(self, repositories): client = local_session( self.manager.session_factory).client('codecommit') for r in repositories: self.process_repository(client, r)
[docs] def process_repository(self, client, repository): try: client.delete_repository(repositoryName=repository['repositoryName']) except ClientError as e: self.log.exception( "Exception deleting repo:\n %s" % e)
[docs]@resources.register('codebuild') class CodeBuildProject(QueryResourceManager):
[docs] class resource_type(object): service = 'codebuild' enum_spec = ('list_projects', 'projects', None) batch_detail_spec = ( 'batch_get_projects', 'names', None, 'projects', None) name = id = 'name' arn = 'arn' date = 'created' dimension = None filter_name = None config_type = "AWS::CodeBuild::Project" type = 'project' universal_taggable = object()
[docs] def get_source(self, source_type): if source_type == 'describe': return DescribeBuild(self) elif source_type == 'config': return ConfigSource(self) raise ValueError("Unsupported source: %s for %s" % ( source_type, self.resource_type.config_type))
[docs]class DescribeBuild(DescribeSource):
[docs] def augment(self, resources): return universal_augment( self.manager, super(DescribeBuild, self).augment(resources))
[docs]@CodeBuildProject.filter_registry.register('subnet') class BuildSubnetFilter(SubnetFilter): RelatedIdsExpression = "vpcConfig.subnets[]"
[docs]@CodeBuildProject.filter_registry.register('security-group') class BuildSecurityGroupFilter(SecurityGroupFilter): RelatedIdsExpression = "vpcConfig.securityGroupIds[]"
[docs]@CodeBuildProject.filter_registry.register('vpc') class BuildVpcFilter(VpcFilter): RelatedIdsExpression = "vpcConfig.vpcId"
[docs]@CodeBuildProject.action_registry.register('delete') class DeleteProject(BaseAction): """Action to delete code build It is recommended to use a filter to avoid unwanted deletion of builds :example: .. code-block:: yaml policies: - name: codebuild-delete resource: codebuild actions: - delete """ schema = type_schema('delete') permissions = ("codebuild:DeleteProject",)
[docs] def process(self, projects): client = local_session(self.manager.session_factory).client('codebuild') for p in projects: self.process_project(client, p)
[docs] def process_project(self, client, project): try: client.delete_project(name=project['name']) except ClientError as e: self.log.exception( "Exception deleting project:\n %s" % e)
[docs]@resources.register('codepipeline') class CodeDeployPipeline(QueryResourceManager): retry = staticmethod(get_retry(('Throttling',)))
[docs] class resource_type(object): service = 'codepipeline' enum_spec = ('list_pipelines', 'pipelines', None) detail_spec = ('get_pipeline', 'name', 'name', 'pipeline') dimension = filter_name = None name = id = 'name' date = 'created' filter_name = None type = ""