def _update_dataplane_ip(self, vnc_lib, dataplane_ip, prouter_name): warning_info = {} object_type = "physical_router" if dataplane_ip == "": return "", "", warning_info else: try: obj_dict = { "uuid": None, "fq_name": ["default-global-system-config", prouter_name], "physical_router_dataplane_ip": dataplane_ip, "physical_router_loopback_ip": dataplane_ip } cls = JobVncApi.get_vnc_cls(object_type) physical_router_obj = cls.from_dict(**obj_dict) vnc_lib.physical_router_update(physical_router_obj) upd_resp = "\nUpdated device with dataplane ip: " except Exception as ex: _task_error_log(str(ex)) _task_error_log(traceback.format_exc()) upd_resp = "There was a problem while updating the" \ " device with dataplane ip: " warning_info = { "device_name": prouter_name, "dataplane_ip": dataplane_ip, "warning_message": str(ex) } return dataplane_ip, upd_resp, warning_info
def _create_logical_interfaces(self, vnc_lib, logical_interfaces_payload): object_type = "logical_interface" success_intfs_names = [] log_intf_failed_info = [] for log_interface_dict in logical_interfaces_payload: try: try: cls = JobVncApi.get_vnc_cls(object_type) log_interface_obj = cls.from_dict(**log_interface_dict) existing_obj = vnc_lib.logical_interface_read( fq_name=log_interface_dict.get('fq_name')) existing_obj_dict = vnc_lib.obj_to_dict(existing_obj) for key in log_interface_dict: to_be_upd_value = log_interface_dict[key] existing_value = existing_obj_dict.get(key) if to_be_upd_value != existing_value: vnc_lib.logical_interface_update(log_interface_obj) break success_intfs_names.append( log_interface_dict['fq_name'][-1]) except NoIdError as exc: vnc_lib.logical_interface_create(log_interface_obj) success_intfs_names.append( log_interface_dict['fq_name'][-1]) except Exception as exc: _task_error_log(str(exc)) _task_error_log(traceback.format_exc()) log_intf_failed_info.append({ "log_interface_name": log_interface_dict['fq_name'][-1], "failure_msg": str(exc) }) return success_intfs_names, log_intf_failed_info
def _update_physical_router_object(self, obj_dict_payload, prouter_name): warning_info = {} object_type = "physical_router" try: cls = JobVncApi.get_vnc_cls(object_type) physical_router_obj = cls.from_dict(**obj_dict_payload) self.vnc_lib.physical_router_update(physical_router_obj) job_log_msg = "- loopback_ip: %s\n - OS Version: %s\n" \ % ( physical_router_obj. get_physical_router_loopback_ip(), physical_router_obj. get_physical_router_os_version() ) except NoIdError as exc: _task_error_log(str(exc)) _task_error_log(traceback.format_exc()) job_log_msg = "The device being updated was not found" \ " in the vnc database" warning_info = { "device_name": prouter_name, "obj_dict_payload": obj_dict_payload, "warning_message": str(exc) } except Exception as ex: _task_error_log(str(ex)) _task_error_log(traceback.format_exc()) job_log_msg = "There was a problem while updating the" \ " device" warning_info = { "device_name": prouter_name, "obj_dict_payload": obj_dict_payload, "warning_message": str(ex) } return { "warning_info": warning_info, "job_log_msg": job_log_msg }
def _create_hardware_inventory(self, job_ctx, hardware_inventory_payload, prouter_name, pr_product_name, prouter_vendor): object_type = "hardware_inventory" hardware_iven_obj = prouter_vendor + "__" + pr_product_name json_data =\ hardware_inventory_payload['hardware_inventory_inventory_info'] data_str = json.dumps(json_data) hardware_inventory_payload_final = { "parent_type": "physical-router", "fq_name": [ "default-global-system-config", prouter_name, hardware_iven_obj], "hardware_inventory_inventory_info": data_str } hardware_obj_key = "hardware_inventory_inventory_info" vnc_lib = JobVncApi.vnc_init(job_ctx) # try to update the existing hardware existing object else create new one. try: try: cls = JobVncApi.get_vnc_cls(object_type) inventory_obj = cls.from_dict( **hardware_inventory_payload_final) existing_obj = vnc_lib.hardware_inventory_read( fq_name=hardware_inventory_payload_final.get('fq_name')) existing_obj_dict = vnc_lib.obj_to_dict(existing_obj) to_be_upd_value =\ hardware_inventory_payload_final[hardware_obj_key] existing_value = existing_obj_dict.get(hardware_obj_key) if to_be_upd_value != existing_value: vnc_lib.hardware_inventory_update( inventory_obj) except NoIdError: vnc_lib.hardware_inventory_create(inventory_obj) except Exception as exc: raise Exception("Inventory object creation failed" " with exception: %s", str(exc))
def create_cli_obj(self, job_ctx, device_mgmt_ip, device_name): directory_path = PLAYBOOK_BASE + "/manual_config/" + device_mgmt_ip file_list = glob.glob(directory_path + "/*.diff") if len(file_list) == 0: return "No new cli commits found. Proceeding..." else: object_type = 'cli_config' device_cli_obj_name = device_name + "_" + "cli_config" cli_config_payload = { "parent_type": "physical-router", "fq_name": [ "default-global-system-config", device_name, device_cli_obj_name ] } # try to update an existing object else create and then update with # diff info try: vnc_lib = JobVncApi.vnc_init(job_ctx) pr_fq_name = ["default-global-system-config", device_name] pr_obj = vnc_lib.physical_router_read(fq_name=pr_fq_name) pr_obj.set_physical_router_cli_commit_state("out_of_sync") vnc_lib.physical_router_update(pr_obj) try: cls = JobVncApi.get_vnc_cls(object_type) cli_obj_payload = cls.from_dict(**cli_config_payload) existing_cli_obj = vnc_lib.cli_config_read( fq_name=cli_config_payload.get('fq_name')) updated_cli_obj = self._cli_config_obj_update( job_ctx, None, existing_cli_obj, file_list) except NoIdError: new_cli_uuid = vnc_lib.cli_config_create(cli_obj_payload) updated_cli_obj = self._cli_config_obj_update( job_ctx, new_cli_uuid, None, file_list) except Exception as exc: raise Exception( "Database operation has failed with " "exception: %s", str(exc)) return updated_cli_obj
def _import_chassis_info(self, job_ctx, chassis_payload, prouter_name, prouter_vendor): warning_info = [] chassis_mac_ids = [] chassis_mac_fqnames = [] object_type = "device_chassis" vnc_lib = JobVncApi.vnc_init(job_ctx) # try to create device_chassis objects from chassis_payload for chassis_info in chassis_payload: chassis_mac_fqname = chassis_info.get('fq_name') chassis_mac_id = chassis_mac_fqname[-1].split( prouter_vendor + '_')[1].replace('_', ':') try: try: cls = JobVncApi.get_vnc_cls(object_type) chassis_obj = cls.from_dict(**chassis_info) existing_obj = vnc_lib.device_chassis_read( fq_name=chassis_mac_fqname) existing_obj_dict = vnc_lib.obj_to_dict(existing_obj) for key in chassis_info: to_be_upd_value = chassis_info[key] existing_value = existing_obj_dict.get(key) if to_be_upd_value != existing_value: vnc_lib.device_chassis_update( chassis_obj) break chassis_mac_fqnames.append( chassis_mac_fqname) chassis_mac_ids.append( chassis_mac_id ) except NoIdError: vnc_lib.device_chassis_create(chassis_obj) chassis_mac_fqnames.append( chassis_mac_fqname) chassis_mac_ids.append( chassis_mac_id ) except Exception as exc: _task_error_log(str(exc)) _task_error_log(traceback.format_exc()) warn_info = dict() warn_info['failed_operation'] = 'Device Chassis Creation' warn_info['failure_message'] = 'Error while creating' \ 'chassis_id(' + \ chassis_mac_id + \ ') for ' + prouter_vendor + \ ' device: ' + str(exc) warning_info.append(warn_info) # Now try to link all the created chassis objects as references # to this prouter object_type = "physical_router" device_chassis_ref_list = [] for chassis_fqname in chassis_mac_fqnames: device_chassis_ref_list.append( {'to': chassis_fqname} ) try: pr_dict = { 'fq_name': ['default-global-system-config', prouter_name] } cls = JobVncApi.get_vnc_cls(object_type) physical_router_obj = cls.from_dict(**pr_dict) physical_router_obj.set_device_chassis_list( device_chassis_ref_list) vnc_lib.physical_router_update(physical_router_obj) except Exception as ex: _task_error_log(str(ex)) _task_error_log(traceback.format_exc()) warn_info = dict() warn_info['failed_operation'] = 'Physical Router Updation' warn_info['failure_message'] = 'Error while updating' \ 'chassis_ids refs for ' + \ prouter_vendor + ' device ' + \ prouter_name + ': ' + str(ex) warning_info.append(warn_info) return \ { 'chassis_mac_ids': chassis_mac_ids, 'warning_info': warning_info }