def _get_instances_by_region(self, regions, filters): ''' :param regions: a list of regions in which to describe instances :param filters: a list of ECS filter dictionaries :return A list of instance dictionaries ''' all_instances = [] if not regions: try: regions = list( map( lambda x: x.id, self.connect_to_ecs(footmark.ecs, "cn-beijing").describe_regions())) except Exception as e: raise AnsibleError( 'Unable to get regions list from available methods, you must specify the "regions" option to continue.' ) for region in regions: try: conn = connect_to_acs(footmark.ecs, region, **self.credentials) insts = conn.describe_instances(**filters) all_instances.extend(map(lambda x: x.read(), insts)) except Exception as e: raise AnsibleError("Failed to describe instances: %s" % to_native(e)) return sorted(all_instances, key=lambda x: x['instance_id'])
def get_instance_by_id(self, region, instance_id): ''' Fetch ECS instances in a specified instance ID ''' instances = connect_to_acs( footmark.ecs, region, **self.credentials).describe_instances(instance_ids=[instance_id]) if instances and len(instances) > 0: return instances[0]
def connect_to_ecs(self, module, region): # Check module args for credentials, then check environment vars access key pair and region connect_args = self.credentials connect_args['user_agent'] = 'Ansible-Provider-Alicloud' conn = connect_to_acs(module, region, **connect_args) if conn is None: self.fail_with_error("region name: %s likely not supported. Connection to region failed." % region) return conn
def get_instances_by_region(self, region): ''' List ECS instances in a specified region ''' conn = connect_to_acs(footmark.ecs, region, **self.credentials) if self.ecs_instance_filters: instances = conn.get_all_instances(**self.ecs_instance_filters) else: instances = conn.get_all_instances() for instance in instances: self.add_instance(instance, region)
def get_instances_by_region(self, region): ''' List ECS instances in a specified region ''' conn = connect_to_acs(footmark.ecs, region, **self.credentials) instances = [] page_number = 1 while True: self.ecs_instance_filters['page_number'] = page_number insts = conn.describe_instances(**self.ecs_instance_filters) instances.extend(insts) if insts and len(insts) == self.ecs_instance_filters['page_size']: page_number += 1 continue break for instance in instances: self.add_instance(instance, region)