示例#1
0
    def update(self, expect_state, current_state):
        expect_state["current_state"] = current_state
        current_state["current_state"] = current_state
        timeout = 60 * int(self.module.params['timeouts']['update'].rstrip('m'))

        params = build_update_parameters(expect_state)
        params1 = build_update_parameters(current_state)
        if params and are_different_dicts(params, params1):
            try:
                request = UpdateVolumeRequest(self.module.params['id'], params)
                self.log('Update evs disk request body: %s' %request)
                response = self.evs_client.update_volume(request)
                self.log('Update evs disk response body: %s' % response)
            except exceptions.ClientRequestException as e:
                self.fail('Update evs disk failed: %s' % e)

        params = build_extend_disk_parameters(expect_state)
        params1 = build_extend_disk_parameters(current_state)
        if params and are_different_dicts(params, params1):
            try:
                request = ResizeVolumeRequest(self.module.params['id'], params)
                self.log('Resize evs disk request body: %s' %request)
                response = self.evs_client.resize_volume(request)
                self.log('Resize evs disk response body: %s' % response)
            except exceptions.ClientRequestException as e:
                self.fail('Resize evs disk failed: %s' % e)

            job_id = response.to_json_object()['job_id']
            self.async_wait(job_id, timeout)
    def search_resource(self):
        opts = user_input_parameters(self.module)
        identity_obj = _build_identity_object(self.module, opts)
        result = []

        try:
            request = ListClustersRequest()
            self.log('list cce cluster request: %s' % request)
            response = self.cce_client.list_clusters(request)
            self.log('list cce cluster response: %s' % response)
        except exceptions.ClientRequestException as e:
            raise HwcModuleException('search cce cluster failed: %s' %
                                     e.error_msg)
        r = navigate_value(response.to_json_object(), ['items'], None)

        if not r:
            return result

        for item in r:
            item = fill_list_resp_body(item)
            self.log('cce cluster identity_obj: %s' % identity_obj)
            self.log('cce cluster item: %s' % item)
            if not are_different_dicts(identity_obj, item):
                result.append(item)

        if len(result) > 1:
            return result

        return result
    def search_resource(self):
        opts = user_input_parameters(self.module)
        identity_obj = _build_identity_object(self.module, opts)
        result = []
        marker = ''

        while True:
            try:
                request = ListSecurityGroupsRequest(limit=10, marker=marker)
                self.log('list security group request: %s' % request)
                response = self.vpc_client.list_security_groups(request)
                self.log('list security group response: %s' % response)
            except exceptions.ClientRequestException as e:
                raise HwcModuleException('search security group failed: %s' %
                                         e.error_msg)
            r = navigate_value(response.to_json_object(), ['security_groups'],
                               None)

            if not r:
                break

            for item in r:
                item = fill_list_resp_body(item)
                self.log('security group identity_obj: %s' % identity_obj)
                self.log('security group item: %s' % item)
                if not are_different_dicts(identity_obj, item):
                    result.append(item)

            if len(result) > 1:
                break

            marker = r[-1].get('id')

        return result
    def exec_module(self, **kwargs):

        self.results['check_mode'] = self.check_mode

        try:
            resource = None
            if self.module.params['id']:
                resource = True
            else:
                v = self.search_resource()
                if len(v) > 1:
                    raise Exception(
                        'find more than one resources(%s)' %
                        ', '.join([navigate_value(i, ['id']) for i in v]))

                if len(v) == 1:
                    resource = v[0]
                    self.module.params['id'] = navigate_value(resource, ['id'])

            result = {}
            changed = False
            if self.module.params['state'] == 'present':
                if resource is None:
                    if not self.module.check_mode:
                        self.create()
                    changed = True

                current = self.read()
                self.log('vpc current: %s' % current)
                expect = user_input_parameters(self.module)
                set_readonly_options(expect, current)
                self.log('vpc expect: %s' % expect)
                if are_different_dicts(expect, current):
                    if not self.module.check_mode:
                        self.update(current)
                    changed = True

                result = self.read()
                result['id'] = self.module.params.get('id')
            else:
                if resource:
                    if not self.module.check_mode:
                        self.delete()
                        result['status'] = 'Deleted'
                    changed = True

        except Exception as ex:
            self.module.fail_json(msg=str(ex))

        else:
            self.results['state'] = result
            self.results['changed'] = changed

        return self.results
    def update(self, expect_state, current_state):
        self.log('expect_state: %s' % expect_state)
        self.log('current_state: %s' % current_state)

        params = build_update_parameters(expect_state)
        params1 = build_update_parameters(current_state)
        if params and are_different_dicts(params, params1):
            try:
                request = UpdateClusterRequest(self.module.params['id'],
                                               body=params)
                self.log('Update cce cluster request body: %s' % request)
                response = self.cce_client.update_cluster(request)
                self.log('Update cce cluster response body: %s' % response)
            except exceptions.ClientRequestException as e:
                self.fail('Update cce cluster failed: %s' % e)
    def exec_module(self, **kwargs):

        self.results['check_mode'] = self.check_mode

        try:
            resource = None
            if self.module.params['id']:
                resource = True
            else:
                v = self.search_resource()
                if len(v) > 1:
                    raise Exception(
                        "find more than one resources(%s)" %
                        ", ".join([navigate_value(i, ["id"]) for i in v]))

                if len(v) == 1:
                    resource = v[0]
                    self.module.params['id'] = navigate_value(
                        resource, ["metadata", "uid"])

            result = {}
            changed = False

            if self.module.params['state'] == 'present':
                if not resource:
                    if not self.module.check_mode:
                        self.create()
                    changed = True

                inputv = user_input_parameters(self.module)
                resp, array_index = self.read()
                result = build_state(inputv, resp, array_index)
                set_readonly_options(inputv, result)
                if are_different_dicts(inputv, result):
                    if not self.module.check_mode:
                        self.update(inputv, result)
                        inputv = user_input_parameters(self.module)
                        resp, array_index = self.read()
                        result = build_state(inputv, resp, array_index)
                        set_readonly_options(inputv, result)
                        if are_different_dicts(inputv, result):
                            raise Exception("Update resource failed, "
                                            "some attributes are not updated")

                    changed = True

                result['id'] = self.module.params.get('id')
            else:
                result = dict()
                if resource:
                    if not self.module.check_mode:
                        self.delete()
                        result['status'] = 'Deleted'
                    changed = True

        except Exception as ex:
            self.module.fail_json(msg=str(ex))

        else:
            self.results['state'] = result
            self.results['changed'] = changed

        return self.results