Exemple #1
0
    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'])
Exemple #2
0
    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]
Exemple #3
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
Exemple #4
0
    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)
Exemple #5
0
    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)