asg.py 文件源码

python
阅读 100 收藏 0 点赞 0 评论 0

项目:cloud-custodian 作者: capitalone 项目源码 文件源码
def get_images(self):
        manager = self.manager.get_resource_manager('ami')
        images = set()
        image_snaps = set()
        image_ids = list({lc['ImageId'] for lc in self.configs.values()})

        # Pull account images, we should be able to utilize cached values,
        # drawn down the image population to just images not in the account.
        account_images = [
            i for i in manager.resources() if i['ImageId'] in image_ids]
        account_image_ids = {i['ImageId'] for i in account_images}
        image_ids = [image_id for image_id in image_ids
                     if image_id not in account_image_ids]

        # To pull third party images, we explicitly use a describe
        # source without any cache.
        #
        # Can't use a config source since it won't have state for
        # third party ami, we auto propagate source normally, so we
        # explicitly pull a describe source. Can't use a cache either
        # as their not in the account.
        #
        while image_ids:
            try:
                amis = manager.get_source('describe').get_resources(
                    image_ids, cache=False)
                account_images.extend(amis)
                break
            except ClientError as e:
                msg = e.response['Error']['Message']
                if e.response['Error']['Code'] != 'InvalidAMIID.NotFound':
                    raise
                for n in msg[msg.find('[') + 1: msg.find(']')].split(','):
                    image_ids.remove(n.strip())

        for a in account_images:
            images.add(a['ImageId'])
            # Capture any snapshots, images strongly reference their
            # snapshots, and some of these will be third party in the
            # case of a third party image.
            for bd in a.get('BlockDeviceMappings', ()):
                if 'Ebs' not in bd or 'SnapshotId' not in bd['Ebs']:
                    continue
                image_snaps.add(bd['Ebs']['SnapshotId'].strip())

        return images, image_snaps
评论列表
文章目录


问题


面经


文章

微信
公众号

扫码关注公众号