def delete(config): module = config.module client = config.client(get_region(module), "evs", "project") timeout = 60 * int(module.params['timeouts']['delete'].rstrip('m')) r = send_delete_request(module, None, client) client = config.client(get_region(module), "volume", "project") client.endpoint = client.endpoint.replace("/v2/", "/v1/") async_wait(config, r, client, timeout)
def create(config): module = config.module client = config.client(get_region(module), "volumev3", "project") timeout = 60 * int(module.params['timeouts']['create'].rstrip('m')) opts = user_input_parameters(module) opts["ansible_module"] = module params = build_create_parameters(opts) r = send_create_request(module, params, client) client1 = config.client(get_region(module), "volume", "project") client1.endpoint = client1.endpoint.replace("/v2/", "/v1/") obj = async_wait(config, r, client1, timeout) module.params['id'] = navigate_value(obj, ["entities", "volume_id"])
def search_resource(config): module = config.module client = config.client(get_region(module), "vpc", "project") opts = user_input_parameters(module) identity_obj = _build_identity_object(opts) query_link = _build_query_link(opts) link = "security-group-rules" + query_link result = [] p = {'marker': ''} while True: url = link.format(**p) r = send_list_request(module, client, url) if not r: break for item in r: item = fill_list_resp_body(item) if not are_different_dicts(identity_obj, item): result.append(item) if len(result) > 1: break p['marker'] = r[-1].get('id') return result
def get_resource_id(config): module = config.module client = config.client(get_region(module), "smn", "project") link = "notifications/topics" query_link = "?offset={offset}&limit=10" link += query_link p = {'offset': 0} v = module.params.get('name') ids = set() while True: r = None try: r = client.get(link.format(**p)) except Exception: pass if r is None: break r = r.get('topics', []) if r == []: break for i in r: if i.get('name') == v: ids.add(i.get('topic_urn')) if len(ids) >= 2: module.fail_json(msg="Multiple resources are found") p['offset'] += 1 return ids.pop() if ids else None
def search_resource(config): module = config.module client = config.client(get_region(module), "volumev3", "project") opts = user_input_parameters(module) name = module.params.get("name") query_link = _build_query_link(opts) link = "os-vendor-volumes/detail" + query_link result = [] p = {'start': 0} while True: url = link.format(**p) r = send_list_request(module, client, url) if not r: break for item in r: if name == item.get("name"): result.append(item) if len(result) > 1: break p['start'] += len(r) return result
def delete(config): module = config.module client = config.client(get_region(module), "vpc", "project") send_delete_request(module, None, client) url = build_path(module, "subnets/{id}") def _refresh_status(): try: client.get(url) except HwcClientException404: return True, "Done" except Exception: return None, "" return True, "Pending" timeout = 60 * int(module.params['timeouts']['create'].rstrip('m')) try: wait_to_finish(["Done"], ["Pending"], _refresh_status, timeout) except Exception as ex: module.fail_json(msg="module(hwc_vpc_subnet): error " "waiting for api(delete) to " "be done, error= %s" % str(ex))
def wait_for_completion(op_uri, timeout, allowed_states, complete_states, config): module = config.module client = config.client(get_region(module), "vpc", "project") def _refresh_status(): r = None try: r = fetch_resource(module, client, op_uri) except Exception: return None, "" status = "" try: status = navigate_value(r, ['vpc', 'status']) except Exception: return None, "" return r, status try: return wait_to_finish(complete_states, allowed_states, _refresh_status, timeout) except Exception as ex: module.fail_json(msg=str(ex))
def update(config): module = config.module client = config.client(get_region(module), "network", "project") opts = user_input_parameters(module) params = build_update_parameters(opts) if params: send_update_request(module, params, client)
def create(config): module = config.module client = config.client(get_region(module), "vpc", "project") opts = user_input_parameters(module) params = build_create_parameters(opts) r = send_create_request(module, params, client) module.params['id'] = navigate_value(r, ["security_group_rule", "id"])
def get_id_by_name(config): module = config.module client = config.client(get_region(module), "vpc", "project") name = module.params.get("name") link = "vpcs" query_link = "?marker={marker}&limit=10" link += query_link not_format_keys = re.findall("={marker}", link) none_values = re.findall("=None", link) if not (not_format_keys or none_values): r = None try: r = client.get(link) except Exception: pass if r is None: return None r = r.get('vpcs', []) ids = [ i.get('id') for i in r if i.get('name', '') == name ] if not ids: return None elif len(ids) == 1: return ids[0] else: module.fail_json( msg="Multiple resources with same name are found.") elif none_values: module.fail_json( msg="Can not find id by name because url includes None.") else: p = {'marker': ''} ids = set() while True: r = None try: r = client.get(link.format(**p)) except Exception: pass if r is None: break r = r.get('vpcs', []) if r == []: break for i in r: if i.get('name') == name: ids.add(i.get('id')) if len(ids) >= 2: module.fail_json( msg="Multiple resources with same name are found.") p['marker'] = r[-1].get('id') return ids.pop() if ids else None
def main(): """Main function""" module = HwcModule( argument_spec=dict(state=dict(default='present', choices=['present', 'absent'], type='str'), display_name=dict(type='str'), name=dict(required=True, type='str')), supports_check_mode=True, ) config = Config(module, "smn") state = module.params['state'] if not module.params.get("id"): module.params['id'] = get_resource_id(config) fetch = None link = self_link(module) # the link will include Nones if required format parameters are missed if not re.search('/None/|/None$', link): client = config.client(get_region(module), "smn", "project") fetch = fetch_resource(module, client, link) changed = False if fetch: if state == 'present': expect = _get_resource_editable_properties(module) current_state = response_to_hash(module, fetch) current = {'display_name': current_state['display_name']} if are_different_dicts(expect, current): if not module.check_mode: fetch = update(config) fetch = response_to_hash(module, fetch) changed = True else: fetch = current_state else: if not module.check_mode: delete(config) fetch = {} changed = True else: if state == 'present': if not module.check_mode: fetch = create(config) fetch = response_to_hash(module, fetch) changed = True else: fetch = {} fetch.update({'changed': changed}) module.exit_json(**fetch)
def read_resource(config, exclude_output=False): module = config.module client = config.client(get_region(module), "vpc", "project") res = {} r = send_read_request(module, client) res["read"] = fill_read_resp_body(r) return update_properties(module, res, None, exclude_output)
def update(config): module = config.module client = config.client(get_region(module), "vpc", "project") timeout = 60 * int(module.params['timeouts']['update'].rstrip('m')) opts = user_input_parameters(module) params = build_update_parameters(opts) if params: r = send_update_request(module, params, client) async_wait_update(config, r, client, timeout)
def read_resource(config): module = config.module client = config.client(get_region(module), "volumev3", "project") res = {} r = send_read_request(module, client) res["read"] = fill_read_resp_body(r) return res, None
def create(config): module = config.module client = config.client(get_region(module), "vpc", "project") timeout = 60 * int(module.params['timeouts']['create'].rstrip('m')) opts = user_input_parameters(module) params = build_create_parameters(opts) r = send_create_request(module, params, client) obj = async_wait_create(config, r, client, timeout) module.params['id'] = navigate_value(obj, ["subnet", "id"])
def create(config): module = config.module client = config.client(get_region(module), "vpc", "project") opts = user_input_parameters(module) params = build_create_parameters(opts) r = send_create_request(module, params, client) module.params['id'] = navigate_value(r, ["security_group", "id"]) result = update_properties(module, {"read": fill_read_resp_body(r)}, None) return result
def delete(config): module = config.module client = config.client(get_region(module), "smn", "project") link = self_link(module) try: client.delete(link) except HwcClientException as ex: msg = ("module(hwc_smn_topic): error deleting " "resource, error: %s" % str(ex)) module.fail_json(msg=msg)
def update(config, expect_state, current_state): module = config.module expect_state["current_state"] = current_state current_state["current_state"] = current_state client = config.client(get_region(module), "evs", "project") timeout = 60 * int(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): send_update_request(module, params, client) params = build_extend_disk_parameters(expect_state) params1 = build_extend_disk_parameters(current_state) if params and are_different_dicts(params, params1): client1 = config.client(get_region(module), "evsv2.1", "project") r = send_extend_disk_request(module, params, client1) client1 = config.client(get_region(module), "volume", "project") client1.endpoint = client1.endpoint.replace("/v2/", "/v1/") async_wait(config, r, client1, timeout)
def delete(config, link): module = config.module client = config.client(get_region(module), "vpc", "project") try: client.delete(link) except HwcClientException as ex: msg = ("module(hwc_network_vpc): error deleting " "resource, error: %s" % str(ex)) module.fail_json(msg=msg) wait_for_delete(module, client, link)
def update(config): module = config.module client = config.client(get_region(module), "smn", "project") link = self_link(module) try: client.put(link, update_resource_opts(module)) except HwcClientException as ex: msg = ("module(hwc_smn_topic): error updating " "resource, error: %s" % str(ex)) module.fail_json(msg=msg) return fetch_resource(module, client, link)
def get_resource(config, result): module = config.module client = config.client(get_region(module), "smn", "project") v = "" try: v = navigate_value(result, ['topic_urn']) except Exception as ex: module.fail_json(msg=str(ex)) d = {'topic_urn': v} url = build_path(module, 'notifications/topics/{topic_urn}', d) return fetch_resource(module, client, url)
def read_resource(config, exclude_output=False): module = config.module client = config.client(get_region(module), "vpc", "project") res = {} r = send_read_request(module, client) res["read"] = fill_read_resp_body(r) array_index = { "read.fixed_ips": 0, } return update_properties(module, res, array_index, exclude_output)
def create(config): module = config.module client = config.client(get_region(module), "smn", "project") link = "notifications/topics" r = None try: r = client.post(link, create_resource_opts(module)) except HwcClientException as ex: msg = ("module(hwc_smn_topic): error creating " "resource, error: %s" % str(ex)) module.fail_json(msg=msg) return get_resource(config, r)
def update(config, link): module = config.module client = config.client(get_region(module), "vpc", "project") r = None try: r = client.put(link, resource_to_update(module)) except HwcClientException as ex: msg = ("module(hwc_network_vpc): error updating " "resource, error: %s" % str(ex)) module.fail_json(msg=msg) wait_for_operation(config, 'update', r) return fetch_resource(module, client, link)
def create(config, link): module = config.module client = config.client(get_region(module), "vpc", "project") r = None try: r = client.post(link, resource_to_create(module)) except HwcClientException as ex: msg = ("module(hwc_network_vpc): error creating " "resource, error: %s" % str(ex)) module.fail_json(msg=msg) wait_done = wait_for_operation(config, 'create', r) v = "" try: v = navigate_value(wait_done, ['vpc', 'id']) except Exception as ex: module.fail_json(msg=str(ex)) url = build_path(module, 'vpcs/{op_id}', {'op_id': v}) return fetch_resource(module, client, url)
def delete(config): module = config.module client = config.client(get_region(module), "vpc", "project") send_delete_request(module, None, client)