async def _get_and_set_inline_policies(self, resource, iam_resource_type): client = AWSFacadeUtils.get_client('iam', self.session) list_policy_method = getattr(client, 'list_' + iam_resource_type + '_policies') resource_name = resource[iam_resource_type.title() + 'Name'] args = {iam_resource_type.title() + 'Name': resource_name} resource['inline_policies'] = {} policy_names = await run_concurrently( lambda: list_policy_method(**args)['PolicyNames']) if len(policy_names) == 0: resource['inline_policies_count'] = 0 return get_policy_method = getattr(client, 'get_' + iam_resource_type + '_policy') tasks = { asyncio.ensure_future( run_concurrently(lambda: get_policy_method(**dict( args, PolicyName=policy_name)))) for policy_name in policy_names } for task in asyncio.as_completed(tasks): policy = await task policy_name = policy['PolicyName'] policy_id = get_non_provider_id(policy_name) policy_document = policy['PolicyDocument'] resource['inline_policies'][policy_id] = {} resource['inline_policies'][policy_id][ 'PolicyDocument'] = self._normalize_statements(policy_document) resource['inline_policies'][policy_id]['name'] = policy_name resource['inline_policies_count'] = len(resource['inline_policies'])
async def get_clusters(self, region): cluster_list = await AWSFacadeUtils.get_all_pages( 'emr', region, self.session, 'list_clusters', 'Clusters') cluster_ids = [cluster['Id'] for cluster in cluster_list] client = AWSFacadeUtils.get_client('emr', self.session, region) return await map_concurrently( lambda cluster_id: run_concurrently( lambda: client.describe_cluster(ClusterId=cluster_id)[ 'Cluster']), cluster_ids)
async def _get_and_set_mount_target_security_groups(self, mount_target: {}, region: str): client = AWSFacadeUtils.get_client('efs', self.session, region) mount_target['SecurityGroups'] = run_concurrently(lambda: client.describe_mount_target_security_groups( MountTargetId=mount_target['MountTargetId'])['SecurityGroups'])