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
示例#2
0
    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 _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 _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))
示例#7
0
 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
示例#8
0
    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
            }