From b1b2ce86b181d43d3b4ac79a0efcf9a889484ad9 Mon Sep 17 00:00:00 2001 From: Sergey Shubin svs1370 Date: Tue, 7 Jul 2020 14:34:29 +0300 Subject: [PATCH] Debug PFW module and minor fixes to the rest of the modules --- library/decort_disk.py | 2 +- library/decort_kvmvm.py | 2 +- library/decort_osimage.py | 2 +- library/decort_pfw.py | 18 ++++++++++-------- library/decort_rg.py | 2 +- library/decort_vins.py | 2 +- module_utils/decort_utils.py | 26 ++++++++++++++++---------- 7 files changed, 31 insertions(+), 23 deletions(-) diff --git a/library/decort_disk.py b/library/decort_disk.py index 5638256..aa3fc61 100644 --- a/library/decort_disk.py +++ b/library/decort_disk.py @@ -29,7 +29,7 @@ requirements: - PyJWT module - requests module - decort_utils utility library (module) - - DECORT cloud platform version 3.4.1 or higher + - DECORT cloud platform version 3.4.2 or higher notes: - Environment variables can be used to pass selected parameters to the module, see details below. - Specified Oauth2 provider must be trusted by the DECORT cloud controller on which JWT will be used. diff --git a/library/decort_kvmvm.py b/library/decort_kvmvm.py index a6eec2c..41424cc 100644 --- a/library/decort_kvmvm.py +++ b/library/decort_kvmvm.py @@ -31,7 +31,7 @@ requirements: - PyJWT module - requests module - decort_utils utility library (module) - - DECORT cloud platform version 3.4.1 or higher + - DECORT cloud platform version 3.4.2 or higher notes: - Environment variables can be used to pass selected parameters to the module, see details below. - Specified Oauth2 provider must be trusted by the DECORT cloud controller on which JWT will be used. diff --git a/library/decort_osimage.py b/library/decort_osimage.py index e144359..559c89c 100644 --- a/library/decort_osimage.py +++ b/library/decort_osimage.py @@ -32,7 +32,7 @@ requirements: - PyJWT module - requests module - decort_utils utility library (module) - - DECORT cloud platform version 3.4.1 or higher. + - DECORT cloud platform version 3.4.2 or higher. notes: - Environment variables can be used to pass selected parameters to the module, see details below. - Specified Oauth2 provider must be trusted by the DECORT cloud controller on which JWT will be used. diff --git a/library/decort_pfw.py b/library/decort_pfw.py index 97d3133..03add21 100644 --- a/library/decort_pfw.py +++ b/library/decort_pfw.py @@ -16,7 +16,7 @@ ANSIBLE_METADATA = {'metadata_version': '1.1', DOCUMENTATION = ''' --- -module: decort_disk +module: decort_pfw short_description: Manage network Port Forward rules for Compute instances in DECORT cloud description: > This module can be used to create new port forwarding rules in DECORT cloud platform, @@ -29,7 +29,7 @@ requirements: - PyJWT module - requests module - decort_utils utility library (module) - - DECORT cloud platform version 3.4.1 or higher + - DECORT cloud platform version 3.4.2 or higher notes: - Environment variables can be used to pass selected parameters to the module, see details below. - Specified Oauth2 provider must be trusted by the DECORT cloud controller on which JWT will be used. @@ -105,7 +105,9 @@ options: be created, which maps specified external port range to local ports starting from I(local_port).' - ' - (int) local_port - port number on the local interface of the Compute. For ranged rule it is interpreted as a base port to translate public port range to internal port range.' - - ' - (string) porot - protocol, specify either I(tcp) or I(udp).' + - ' - (string) proto - protocol, specify either I(tcp) or I(udp).' + - 'Note that rules are meaningful only if I(state=present). If I(state=absent) is specified, rules set + will be ignored, and all rules for the specified Compute will be deleted.' state: description: - 'Specify the desired state of the port forwarding rules set for the Compute instance identified by @@ -192,7 +194,7 @@ def decort_pfw_package_facts(pfw_facts, check_mode=False): ret_dict = dict(id=0, name="none", state="CHECK_MODE", - comp_id=0, + compute_id=0, vins_id=0, ) @@ -205,7 +207,7 @@ def decort_pfw_package_facts(pfw_facts, check_mode=False): ret_dict['state'] = "ABSENT" return ret_dict - ret_dict['comp_id'] = pfw_facts['com_id'] + ret_dict['compute_id'] = pfw_facts['compute_id'] return ret_dict @@ -268,7 +270,7 @@ def main(): decon = DecortController(amodule) - pfw_facts = None # will hold PFW facts + pfw_facts = None # will hold PFW facts as returned by pfw_configure # # Validate module arguments: @@ -278,10 +280,10 @@ def main(): # 4) Compute is connected to this ViNS # - validated_comp_id, comp_facts, rg_id = decon.compute_find(amodule.params['comp_id']) + validated_comp_id, comp_facts, rg_id = decon.compute_find(amodule.params['compute_id']) if not validated_comp_id: decon.result['failed'] = True - decon.result['msg'] = "Cannot find specified Compute ID {}.".format(amodule.params['comp_id']) + decon.result['msg'] = "Cannot find specified Compute ID {}.".format(amodule.params['compute_id']) amodule.fail_json(**decon.result) validated_vins_id, vins_facts = decon.vins_find(amodule.params['vins_id']) diff --git a/library/decort_rg.py b/library/decort_rg.py index f273993..c542f99 100644 --- a/library/decort_rg.py +++ b/library/decort_rg.py @@ -29,7 +29,7 @@ requirements: - PyJWT module - requests module - decort_utils utility library (module) - - DECORT cloud platform version 3.4.0 or higher + - DECORT cloud platform version 3.4.2 or higher notes: - Environment variables can be used to pass selected parameters to the module, see details below. - Specified Oauth2 provider must be trusted by the DECORT cloud controller on which JWT will be used. diff --git a/library/decort_vins.py b/library/decort_vins.py index e649e91..decd2d3 100644 --- a/library/decort_vins.py +++ b/library/decort_vins.py @@ -29,7 +29,7 @@ requirements: - PyJWT module - requests module - decort_utils utility library (module) - - DECORT cloud platform version 3.4.1 or higher + - DECORT cloud platform version 3.4.2 or higher notes: - Environment variables can be used to pass selected parameters to the module, see details below. - Specified Oauth2 provider must be trusted by the DECORT cloud controller on which JWT will be used. diff --git a/module_utils/decort_utils.py b/module_utils/decort_utils.py index 55de2ea..48bacc7 100644 --- a/module_utils/decort_utils.py +++ b/module_utils/decort_utils.py @@ -532,14 +532,16 @@ class DecortController(object): api_params = dict(computeId = comp_dict['id'], diskId=did) self.decort_api_call(requests.post, "/restmachine/cloudapi/compute/diskDetach", api_params) # On success the above call will return here. On error it will abort execution by calling fail_json. + self.result['changed'] = True for did in attach_list: api_params = dict(computeId = comp_dict['id'], diskId=did) self.decort_api_call(requests.post, "/restmachine/cloudapi/compute/diskAttach", api_params) # On success the above call will return here. On error it will abort execution by calling fail_json. + self.result['changed'] = True self.result['failed'] = False - self.result['changed'] = True + return def compute_delete(self, comp_id, permanently=False): @@ -841,6 +843,7 @@ class DecortController(object): # # then all values (including those for 'id' key) when entering this method will be of # type string. We need to explicitly cast int type on all of them. + for repair in new_networks: repair['id'] = int(repair['id']) @@ -931,13 +934,14 @@ class DecortController(object): for api_params in detach_list: self.decort_api_call(requests.post, "/restmachine/cloudapi/compute/netDetach", api_params) # On success the above call will return here. On error it will abort execution by calling fail_json. + self.result['changed'] = True for api_params in attach_list: self.decort_api_call(requests.post, "/restmachine/cloudapi/compute/netAttach", api_params) # On success the above call will return here. On error it will abort execution by calling fail_json. + self.result['changed'] = True self.result['failed'] = False - self.result['changed'] = True return @@ -2473,14 +2477,12 @@ class DecortController(object): "for Compute ID {} are empty - nothing to do.").format(comp_facts['id']) return None - if not len(new_rules): + if new_rules == None or len(new_rules) == 0: # delete all existing rules for this Compute - api_params = dict(vinsId=vins_facts['id']) - for runner in existing_rules: - api_params['ruleId'] = runner['id'] - self.decort_api_call(requests.post, "/restmachine/cloudapi/vins/natRuleDel", api_params) - self.result['failed'] = False - self.result['chnaged'] = True + api_params = dict(vinsId=vins_facts['id'], + ruleId=-1) + self.decort_api_call(requests.post, "/restmachine/cloudapi/vins/natRuleDel", api_params) + self.result['changed'] = True return None # @@ -2540,6 +2542,8 @@ class DecortController(object): # tells what kind of action is expected on this rule - 'add' or 'del' # We first iterate to delete, then iterate again to add rules + # Sort pfw_delta_list so that the items with action="del" come first, and those with + # action='add' come last. # Iterate over pfw_delta_list and first delete port forwarding rules marked for deletion, # next create the rules marked for creation. api_base = "/restmachine/cloudapi/vins/" @@ -2549,6 +2553,7 @@ class DecortController(object): ruleId=delta_rule['id']) self.decort_api_call(requests.post, api_base + 'natRuleDel', api_params) # On success the above call will return here. On error it will abort execution by calling fail_json. + self.result['changed'] = True elif delta_rule['action'] == 'add': api_params = dict(vinsId=vins_facts['id'], intIp=iface_ipaddr, @@ -2558,7 +2563,8 @@ class DecortController(object): proto=delta_rule['protocol']) self.decort_api_call(requests.post, api_base + 'natRuleAdd', api_params) # On success the above call will return here. On error it will abort execution by calling fail_json. + self.result['changed'] = True self.result['failed'] = False - self.result['changed'] = True + return \ No newline at end of file