| #!/usr/bin/python |
| |
| import argparse |
| import json |
| import sys |
| import os |
| import shutil |
| |
| import conf |
| import ems_util |
| |
| |
| def sw_fallback(ne_info_list): |
| ne_list = [] |
| num_failure = 0 |
| |
| for ne_info in ne_info_list: |
| if ne_info.get("status") == conf.STATUS_DOWNLOADING: |
| ne_info["status"] = conf.STATUS_ACTIVATED |
| ems_util.update_ne_info(ne_info) |
| |
| ne_entry = { |
| "nEIdentification": ne_info["nEIdentification"], |
| "swFallbackStatus": "fallbackSuccessful" |
| } |
| ne_list.append(ne_entry) |
| continue |
| |
| sw_install_dir_in_ne = conf.PNF_SIMULATORS_DIR + '/' + ne_info['omIP'] + conf.PNF_SW_INSTALL_DIR |
| |
| if ne_info.get("status") == conf.STATUS_INSTALLING: |
| old_sw_version = ne_info.get("currentSwVersion", "") |
| current_sw_version = ne_info.get("targetSwVersion", "") |
| else: |
| old_sw_version = ne_info.get("oldSwVersion", "") |
| current_sw_version = ne_info.get("currentSwVersion", "") |
| |
| old_sw_dir = sw_install_dir_in_ne + '/' + old_sw_version |
| |
| if not old_sw_version or not os.path.isdir(old_sw_dir): |
| ne_entry = { |
| "nEIdentification": ne_info["nEIdentification"], |
| "swFallbackStatus": "fallbackUnsuccessful" |
| } |
| ne_list.append(ne_entry) |
| |
| num_failure += 1 |
| continue |
| |
| current_sw_dir = sw_install_dir_in_ne + '/' + current_sw_version |
| |
| if current_sw_version and os.path.isdir(current_sw_dir) and current_sw_dir != old_sw_dir: |
| shutil.rmtree(current_sw_dir, ignore_errors=True) |
| |
| old_cwd = os.getcwd() |
| os.chdir(sw_install_dir_in_ne) |
| if os.path.islink(conf.CURRENT_VERSION_DIR): |
| os.remove(conf.CURRENT_VERSION_DIR) |
| os.symlink(old_sw_version, conf.CURRENT_VERSION_DIR) |
| os.chdir(old_cwd) |
| |
| installed_sw_db = old_sw_dir + '/' + conf.INSTALLED_SW |
| if os.path.isfile(installed_sw_db): |
| with open(installed_sw_db) as f_installed_sw: |
| installed_sw_table = json.load(f_installed_sw) |
| if not installed_sw_table: |
| installed_sw_table = {} |
| else: |
| installed_sw_table = {} |
| |
| ne_info["installedSw"] = installed_sw_table |
| if "oldSwVersion" in ne_info: |
| ne_info["currentSwVersion"] = ne_info["oldSwVersion"] |
| del ne_info["oldSwVersion"] |
| |
| if "targetSwVersion" in ne_info: |
| del ne_info["targetSwVersion"] |
| |
| if "downloadedSwLocation" in ne_info: |
| if os.path.isdir(ne_info["downloadedSwLocation"]): |
| shutil.rmtree(ne_info["downloadedSwLocation"], ignore_errors=True) |
| del ne_info["downloadedSwLocation"] |
| |
| ne_info["status"] = conf.STATUS_ACTIVATED |
| ems_util.update_ne_info(ne_info) |
| |
| ne_entry = { |
| "nEIdentification": ne_info["nEIdentification"], |
| "swFallbackStatus": "fallbackSuccessful" |
| } |
| ne_list.append(ne_entry) |
| |
| if num_failure == 0: |
| result = conf.RESULT_SUCCESS |
| elif num_failure == len(ne_info_list): |
| result = conf.RESULT_FAILURE |
| else: |
| result = conf.RESULT_PARTLY |
| |
| ret_value = { |
| "nEList": ne_list, |
| "result": result |
| } |
| |
| return ret_value |
| |
| |
| def main(): |
| parser = argparse.ArgumentParser() |
| |
| parser.add_argument("--filter", help="To describe properties of the NEs to be selected", required=True) |
| |
| args = parser.parse_args() |
| |
| ne_info_list = ems_util.get_ne_info_list_from_db(args.filter) |
| |
| ret_value = sw_fallback(ne_info_list) |
| print json.dumps(ret_value) |
| |
| if ret_value["result"] == conf.RESULT_SUCCESS: |
| sys.exit(conf.RET_CODE_SUCCESS) |
| else: |
| sys.exit(conf.RET_CODE_FAILURE) |
| |
| |
| if __name__ == '__main__': |
| main() |