From 9222fdd8663944171380b78bcc7421d946532486 Mon Sep 17 00:00:00 2001 From: Alex_geth Date: Wed, 16 Aug 2023 19:04:27 +0300 Subject: [PATCH] k8s provision update fix */list --- library/decort_k8s.py | 26 +++++++++++++++++--------- module_utils/decort_utils.py | 31 +++++++++++++++++++++++-------- 2 files changed, 40 insertions(+), 17 deletions(-) diff --git a/library/decort_k8s.py b/library/decort_k8s.py index b15e39c..d64f226 100644 --- a/library/decort_k8s.py +++ b/library/decort_k8s.py @@ -80,13 +80,13 @@ class decort_k8s(DecortController): self.result['failed'] = True self.result['changed'] = False self.result['msg'] = "At least one worker group must be present" - self.fail_json(**self.result) + self.amodule.fail_json(**self.result) if arg_amodule.params['name'] == "" and arg_amodule.params['id'] == 0: self.result['failed'] = True self.result['changed'] = False self.result['msg'] = "Cannot manage k8s cluster when its ID is 0 and name is empty." - self.fail_json(**self.result) + self.amodule.fail_json(**self.result) if not arg_amodule.params['id']: @@ -99,17 +99,17 @@ class decort_k8s(DecortController): self.result['msg'] = ("Current user does not have access to the account ID {} / " "name '{}' or non-existent account specified.").format(arg_amodule.params['account_id'], arg_amodule.params['account_name']) - self.fail_json(**self.result) + self.amodule.fail_json(**self.result) # fail the module -> exit # now validate RG validated_rg_id, validated_rg_facts = self.rg_find(validated_acc_id, - arg_amodule.params['rg_id'],) + arg_amodule.params['rg_id'],) if not validated_rg_id: self.result['failed'] = True self.result['changed'] = False self.result['msg'] = "Cannot find RG ID {} / name '{}'.".format(arg_amodule.params['rg_id'], arg_amodule.params['rg_name']) - self.fail_json(**self.result) + self.amodule.fail_json(**self.result) # fail the module - exit @@ -120,7 +120,7 @@ class decort_k8s(DecortController): self.result['failed'] = True self.result['changed'] = False self.result['msg'] = "Cannot find K8CI ID {}.".format(arg_amodule.params['k8ci_id']) - self.fail_json(**self.result) + self.amodule.fail_json(**self.result) self.rg_id = validated_rg_id arg_amodule.params['rg_id'] = validated_rg_id @@ -203,7 +203,7 @@ class decort_k8s(DecortController): return def create(self): - self.k8s_provision(self.amodule.params['name'], + k8s_id = self.k8s_provision(self.amodule.params['name'], self.amodule.params['k8ci_id'], self.amodule.params['rg_id'], self.amodule.params['network_plugin'], @@ -211,12 +211,18 @@ class decort_k8s(DecortController): self.amodule.params['master_cpu'], self.amodule.params['master_ram'], self.amodule.params['master_disk'], + self.amodule.params['master_sepid'], + self.amodule.params['master_pool'], self.amodule.params['workers'][0], self.amodule.params['extnet_id'], self.amodule.params['with_lb'], self.amodule.params['description'],) - self.k8s_id,self.k8s_info = self.k8s_find(k8s_id=self.amodule.params['id'], + if not k8s_id: + self.result['failed'] = True + self.amodule.fail_json(**self.result) + + self.k8s_id,self.k8s_info = self.k8s_find(k8s_id=k8s_id, k8s_name=self.amodule.params['name'], rg_id=self.rg_id, check_state=False) @@ -284,7 +290,7 @@ class decort_k8s(DecortController): user=dict(type='str', required=False, fallback=(env_fallback, ['DECORT_USER'])), - name=dict(type='str', required=True), + name=dict(type='str', required=False, default=""), id=dict(type='int', required=False, default=0), getConfig=dict(type='bool',required=False, default=False), rg_id=dict(type='int', default=0), @@ -296,6 +302,8 @@ class decort_k8s(DecortController): master_cpu=dict(type='int', default=2), master_ram=dict(type='int', default=2048), master_disk=dict(type='int', default=10), + master_sepid=dict(type='int', required=False, default=None), + master_pool=dict(type='str', required=False, default=None), worker_count=dict(type='int', default=1), worker_cpu=dict(type='int', default=1), worker_ram_mb=dict(type='int', default=1024), diff --git a/module_utils/decort_utils.py b/module_utils/decort_utils.py index d6bef3f..55de31f 100644 --- a/module_utils/decort_utils.py +++ b/module_utils/decort_utils.py @@ -1367,7 +1367,7 @@ class DecortController(object): api_resp = self.decort_api_call(requests.post, "/restmachine/cloudapi/image/list", api_params) # On success the above call will return here. On error it will abort execution by calling fail_json. images_list = json.loads(api_resp.content.decode('utf8')) - for image_record in images_list: + for image_record in images_list['data']: if image_record['name'] == image_name and image_record['status'] == "CREATED": if sepid == 0 and pool == "": # if no filtering by SEP ID or pool name is requested, return the first match @@ -3414,10 +3414,18 @@ class DecortController(object): return def k8s_provision(self, k8s_name, - k8ci_id,rg_id,plugin,master_count, - master_cpu, master_ram, - master_disk, default_worker, extnet_id, - with_lb, annotation, ): + k8ci_id,rg_id, + plugin, + master_count, + master_cpu, + master_ram, + master_disk, + master_sepid, + master_pool, + default_worker, + extnet_id, + with_lb, + annotation, ): self.result['waypoints'] = "{} -> {}".format(self.result['waypoints'], "k8s_provision") @@ -3431,6 +3439,8 @@ class DecortController(object): def_wg_cpu = default_worker['cpu'] def_wg_ram = default_worker['ram'] def_wg_disk = default_worker['disk'] + def_wg_sepid = default_worker['sep_id'] + def_wg_pool = default_worker['pool'] def_wg_lab = default_worker['labels'] if "labels" in default_worker else None def_wg_taints = default_worker['taints'] if "taints" in default_worker else None def_wg_ann = default_worker['annotations'] if "annotations" in default_worker else None @@ -3445,10 +3455,14 @@ class DecortController(object): masterCpu=master_cpu, masterRam=master_ram, masterDisk=master_disk, + masterSepId=master_sepid, + masterSepPool=master_pool, workerNum=def_wg_count, workerCpu=def_wg_cpu, workerRam=def_wg_ram, workerDisk=def_wg_disk, + workerSepId=def_wg_sepid, + workerSepPool=def_wg_pool, labels=def_wg_lab, taints=def_wg_taints, annotations=def_wg_ann, @@ -3472,8 +3486,8 @@ class DecortController(object): self.result['failed'] = False time.sleep(30) elif ret_info['status'] == "ERROR": - self.result['msg'] = ("k8s_provision(): Can't create cluster") - self.result['failed'] = True + self.result['msg'] = f"k8s_provision(): {ret_info['error']}" + self.result['changed'] = False return elif ret_info['status'] == "OK": k8s_id = ret_info['result'] @@ -3493,7 +3507,6 @@ class DecortController(object): self.result['failed'] = True self.result['changed'] = False - self.fail_json(**self.result) return def k8s_workers_modify(self,arg_k8swg,arg_modwg): @@ -3546,6 +3559,8 @@ class DecortController(object): workerCpu=wg['cpu'], workerRam=wg['ram'], workerDisk=wg['disk'], + workerSepId=wg['sep_id'] if "sep_id" in wg else None, + workerSepPool=wg['pool'] if "pool" in wg else None, labels=wg['labels'] if "labels" in wg else None, taints=wg['taints'] if "taints" in wg else None, annotations=wg['annotations'] if "annotations" in wg else None,