From 6ff54c546e6e8065ee89dea8f7422949977872a2 Mon Sep 17 00:00:00 2001 From: Xu Yuandong Date: Wed, 24 Jul 2019 16:09:53 +0800 Subject: [PATCH] update to fix a bug (#59346) --- .../modules/network/cloudengine/ce_startup.py | 93 ++++++++++--------- 1 file changed, 49 insertions(+), 44 deletions(-) diff --git a/lib/ansible/modules/network/cloudengine/ce_startup.py b/lib/ansible/modules/network/cloudengine/ce_startup.py index 819ec8faec6..c31e8560196 100644 --- a/lib/ansible/modules/network/cloudengine/ce_startup.py +++ b/lib/ansible/modules/network/cloudengine/ce_startup.py @@ -132,27 +132,8 @@ updates: import re from ansible.module_utils.basic import AnsibleModule -from ansible.module_utils.network.cloudengine.ce import get_nc_config, ce_argument_spec, run_commands - - -CE_NC_GET_STARTUP_INFO = """ - - - - - - - - - - - - - - - - -""" +from ansible.module_utils.network.cloudengine.ce import ce_argument_spec, run_commands +from ansible.module_utils.connection import exec_command class StartUp(object): @@ -196,28 +177,37 @@ class StartUp(object): self.module.fail_json(msg='Error: %s failed.' % xml_name) def get_startup_dict(self): - """ get rollback attributes dict.""" + """Retrieves the current config from the device or cache + """ + cmd = 'display startup' + rc, out, err = exec_command(self.module, cmd) + if rc != 0: + self.module.fail_json(msg=err) + cfg = str(out).strip() startup_info = dict() - conf_str = CE_NC_GET_STARTUP_INFO - xml_str = get_nc_config(self.module, conf_str) - startup_info["StartupInfos"] = list() - if "" in xml_str: + if not cfg: return startup_info else: - re_find = re.findall(r'.*(.*).*\s*' - r'(.*).*\s*' - r'(.*).*\s*' - r'(.*).*\s*' - r'(.*).*\s*' - r'(.*).*\s*' - r'(.*).*\s*' - r'(.*).*', xml_str) - for mem in re_find: - startup_info["StartupInfos"].append( - dict(position=mem[0], nextStartupFile=mem[1], configSysSoft=mem[2], curentSysSoft=mem[3], - nextSysSoft=mem[4], curentStartupFile=mem[5], curentPatchFile=mem[6], nextPatchFile=mem[7])) + re_find = re.findall(r'(.*)\s*' + r'\s*Configured\s*startup\s*system\s*software:\s*(.*)' + r'\s*Startup\s*system\s*software:\s*(.*)' + r'\s*Next\s*startup\s*system\s*software:\s*(.*)' + r'\s*Startup\s*saved-configuration\s*file:\s*(.*)' + r'\s*Next\s*startup\s*saved-configuration\s*file:\s*(.*)' + r'\s*Startup\s*paf\s*file:\s*(.*)' + r'\s*Next\s*startup\s*paf\s*file:\s*(.*)' + r'\s*Startup\s*patch\s*package:\s*(.*)' + r'\s*Next\s*startup\s*patch\s*package:\s*(.*)', cfg) + + if re_find: + for mem in re_find: + startup_info["StartupInfos"].append( + dict(nextStartupFile=mem[5], configSysSoft=mem[1], curentSysSoft=mem[2], + nextSysSoft=mem[3], curentStartupFile=mem[4], curentPatchFile=mem[8], + nextPatchFile=mem[9], postion=mem[0])) + return startup_info return startup_info def get_cfg_filename_type(self, filename): @@ -404,30 +394,45 @@ class StartUp(object): """get existing info""" if not self.startup_info: - return - self.existing["StartupInfos"] = self.startup_info["StartupInfos"] + self.existing["StartupInfos"] = None + else: + self.existing["StartupInfos"] = self.startup_info["StartupInfos"] def get_end_state(self): """get end state info""" - self.end_state["StartupInfos"] = None + if not self.startup_info: + self.end_state["StartupInfos"] = None + else: + self.end_state["StartupInfos"] = self.startup_info["StartupInfos"] + if self.end_state == self.existing: + self.changed = False def work(self): """worker""" self.check_params() self.get_proposed() + self.startup_info = self.get_startup_dict() self.get_existing() + + startup_info = self.startup_info["StartupInfos"][0] if self.cfg_file: - self.startup_next_cfg_file() + if self.cfg_file != startup_info["nextStartupFile"]: + self.startup_next_cfg_file() + if self.software_file: - self.startup_next_software_file() + if self.software_file != startup_info["nextSysSoft"]: + self.startup_next_software_file() if self.patch_file: - self.startup_next_pat_file() + if self.patch_file != startup_info["nextPatchFile"]: + self.startup_next_pat_file() if self.action == "display": self.startup_info = self.get_startup_dict() + self.startup_info = self.get_startup_dict() self.get_end_state() + self.results['changed'] = self.changed self.results['proposed'] = self.proposed self.results['existing'] = self.existing