def get_vpn_cfg(self): """Return VPN configuration of the VRouter5600. :return: A tuple: Status, JSON for VPN configuration. :rtype: instance of the `Result` class (containing configuration data) - STATUS.CONN_ERROR: If the controller did not respond. - STATUS.CTRL_INTERNAL_ERROR: If the controller responded but did not provide any status. - STATUS.OK: Success. Result is valid. - STATUS.HTTP_ERROR: If the controller responded with an error status code. """ status = OperStatus() url_ext = "vyatta-security:security/vyatta-security-vpn-ipsec:vpn" cfg = None ctrl = self.ctrl myname = self.name url = ctrl.get_ext_mount_config_url(myname) url += url_ext resp = ctrl.http_get_request(url, data=None, headers=None) if(resp is None): status.set_status(STATUS.CONN_ERROR) elif(resp.content is None): status.set_status(STATUS.CTRL_INTERNAL_ERROR) elif (resp.status_code == 200): cfg = resp.content status.set_status(STATUS.OK) elif (resp.status_code == 404): status.set_status(STATUS.DATA_NOT_FOUND, resp) else: status.set_status(STATUS.HTTP_ERROR, resp) return Result(status, cfg)
def get_hypervisor_details(self, vtep_hvsr): status = OperStatus() url = self.get_ovrl_mgr_hvsr_oper_url(vtep_hvsr['hvsrIp'], vtep_hvsr['hvsrPortNum']) payload = None headers = {"content-type": "application/json", "accept": "application/json"} timeout = None print(url) resp = self.http_get_request(url, payload, headers, timeout) print(resp) if resp is None: status.set_status(STATUS.CONN_ERROR) elif resp.content is None: status.set_status(STATUS.CTRL_INTERNAL_ERROR) elif resp.status_code == 200: status.set_status(STATUS.NODE_CONFIGURED) else: status.set_status(STATUS.DATA_NOT_FOUND, resp) return Result(status, None)
def set_vpn_cfg(self, vpn): """ Create/update VPN configuration :param vpn: instance of the 'Vpn' class :return: A tuple: Status, None :rtype: instance of the `Result` class - STATUS.CONN_ERROR: If the controller did not respond. - STATUS.CTRL_INTERNAL_ERROR: If the controller responded but did not provide any status. - STATUS.OK: Success. Result is valid. - STATUS.HTTP_ERROR: If the controller responded with an error status code. """ assert(isinstance(vpn, Vpn)) status = OperStatus() ctrl = self.ctrl headers = {'content-type': 'application/yang.data+json'} url = ctrl.get_ext_mount_config_url(self.name) ext = vpn.get_url_extension() url += ext payload = vpn.get_payload() resp = ctrl.http_put_request(url, payload, headers) if(resp is None): status.set_status(STATUS.CONN_ERROR) elif(resp.content is None): status.set_status(STATUS.CTRL_INTERNAL_ERROR) elif (resp.status_code == 200 or resp.status_code == 204): status.set_status(STATUS.OK) else: status.set_status(STATUS.HTTP_ERROR, resp) return Result(status, None)
def get_cfg(self): """Return configuration :return: A tuple: Status, JSON for configuration. :rtype: instance of the `Result` class (containing configuration data) - STATUS.CONN_ERROR: If the controller did not respond. - STATUS.CTRL_INTERNAL_ERROR: If the controller responded but did not provide any status. - STATUS.OK: Success. Result is valid. - STATUS.HTTP_ERROR: If the controller responded with an error status code. """ status = OperStatus() cfg = None ctrl = self.ctrl myname = self.name url = ctrl.get_ext_mount_config_url(myname) resp = ctrl.http_get_request(url, data=None, headers=None) if(resp is None): status.set_status(STATUS.CONN_ERROR) elif(resp.content is None): status.set_status(STATUS.CTRL_INTERNAL_ERROR) elif (resp.status_code == 200): cfg = resp.content status.set_status(STATUS.OK) else: status.set_status(STATUS.HTTP_ERROR, resp) return Result(status, cfg)
def delete_dataplane_interface_firewall(self, ifName): """ Delete both inbound and outbound firewalls for a dataplane interface on the VRouter5600. :param string ifName: The dataplane interface to attach a firewall. :return: A tuple: Status, Response from VRouter5600. :rtype: instance of the `Result` class - STATUS.CONN_ERROR: If the controller did not respond. - STATUS.CTRL_INTERNAL_ERROR: If the controller responded but did not provide any status. - STATUS.OK: Success. Result is valid. - STATUS.HTTP_ERROR: If the controller responded with an error status code. """ status = OperStatus() templateModelRef = "vyatta-interfaces:" + \ "interfaces/vyatta-interfaces-dataplane:" + \ "dataplane/{}/vyatta-security-firewall:firewall/" modelref = templateModelRef.format(ifName) myname = self.name ctrl = self.ctrl url = ctrl.get_ext_mount_config_url(myname) resp = ctrl.http_delete_request(url + modelref, data=None, headers=None) if(resp is None): status.set_status(STATUS.CONN_ERROR) elif(resp.content is None): status.set_status(STATUS.CTRL_INTERNAL_ERROR) elif (resp.status_code == 200): status.set_status(STATUS.OK) else: status.set_status(STATUS.HTTP_ERROR, resp) return Result(status, None)
def add_modify_firewall_instance(self, fwInstance): """Create a firewall on the VRouter5600. :param fwInstance: instance of the 'Firewall' class :return: A tuple: Status, None. :rtype: instance of the `Result` class - STATUS.CONN_ERROR: If the controller did not respond. - STATUS.CTRL_INTERNAL_ERROR: If the controller responded but did not provide any status. - STATUS.OK: Success. Result is valid. - STATUS.HTTP_ERROR: If the controller responded with an error status code. """ status = OperStatus() ctrl = self.ctrl myname = self.name url = ctrl.get_ext_mount_config_url(myname) headers = {'content-type': 'application/yang.data+json'} payload = fwInstance.get_payload() url_ext = fwInstance.get_url_extension() url += url_ext resp = ctrl.http_put_request(url, payload, headers) if(resp is None): status.set_status(STATUS.CONN_ERROR) elif(resp.content is None): status.set_status(STATUS.CTRL_INTERNAL_ERROR) elif (resp.status_code == 200 or resp.status_code == 204): status.set_status(STATUS.OK) else: status.set_status(STATUS.HTTP_ERROR, resp) return Result(status, None)
def delete_firewall_instance(self, fwInstance): """Delete a firewall from the VRouter5600. :param fwInstance: Firewall :class: :return: A tuple: Status, None. :rtype: instance of the `Result` class - STATUS.CONN_ERROR: If the controller did not respond. - STATUS.CTRL_INTERNAL_ERROR: If the controller responded but did not provide any status. - STATUS.OK: Success. Result is valid. - STATUS.HTTP_ERROR: if the controller responded with an error status . code. """ assert isinstance(fwInstance, Firewall) status = OperStatus() ctrl = self.ctrl myname = self.name url = ctrl.get_ext_mount_config_url(myname) ext = fwInstance.get_url_extension() url += ext resp = ctrl.http_delete_request(url, data=None, headers=None) if(resp is None): status.set_status(STATUS.CONN_ERROR) elif(resp.content is None): status.set_status(STATUS.CTRL_INTERNAL_ERROR) elif (resp.status_code == 200): status.set_status(STATUS.OK) else: status.set_status(STATUS.HTTP_ERROR, resp) return Result(status, None)
def get_firewall_instance_cfg(self, instance): """Return configuration for a specific firewall on the VRouter5600. :param instance of the 'Firewall' class :return: A tuple: Status, JSON for firewall configuration. :rtype: instance of the `Result` class (containing configuration data) - STATUS.CONN_ERROR: If the controller did not respond. - STATUS.CTRL_INTERNAL_ERROR: If the controller responded but did not provide any status. - STATUS.OK: Success. Result is valid. - STATUS.HTTP_ERROR: If the controller responded with an error status code. """ status = OperStatus() cfg = None templateModelRef = "vyatta-security:" + \ "security/vyatta-security-firewall:firewall/name/{}" modelref = templateModelRef.format(instance) ctrl = self.ctrl myname = self.name url = ctrl.get_ext_mount_config_url(myname) url += modelref resp = ctrl.http_get_request(url, data=None, headers=None) if(resp is None): status.set_status(STATUS.CONN_ERROR) elif(resp.content is None): status.set_status(STATUS.CTRL_INTERNAL_ERROR) elif (resp.status_code == 200): cfg = resp.content status.set_status(STATUS.OK) else: status.set_status(STATUS.HTTP_ERROR, resp) return Result(status, cfg)
def delete_vtep_from_hypervisor(self, vtep_hvsr): status = OperStatus() url = self.get_ovrl_mgr_hvsr_vtep_config_url(vtep_hvsr) payload = None headers = {"content-type": "application/json", "accept": "application/json"} logging.debug(url) logging.debug(payload) resp = self.http_delete_request(url, payload, headers) logging.info(resp) if resp is None: status.set_status(STATUS.CONN_ERROR) elif resp.content is None: status.set_status(STATUS.CTRL_INTERNAL_ERROR) elif resp.status_code == 200: status.set_status(STATUS.NODE_CONFIGURED) else: status.set_status(STATUS.DATA_NOT_FOUND, resp) return Result(status, None)
def set_protocols_ospf(self, ospf): status = OperStatus() ctrl = self.ctrl headers = {'content-type': 'application/yang.data+json'} url = ctrl.get_ext_mount_config_url(self.name) obj = ospf payload = obj.get_payload() ext = ospf.get_url_extension() url += ext print(url) print(headers) print(payload) resp = ctrl.http_put_request(url, payload, headers) print(resp) if(resp is None): status.set_status(STATUS.CONN_ERROR) elif(resp.content is None): status.set_status(STATUS.CTRL_INTERNAL_ERROR) elif (resp.status_code == 200 or resp.status_code == 204): status.set_status(STATUS.OK) else: status.set_status(STATUS.HTTP_ERROR, resp) return Result(status, None)
def register_hypervisor(self, vtep_hvsr): status = OperStatus() url = self.get_ovrl_mgr_hvsr_config_url(vtep_hvsr['hvsrIp'], vtep_hvsr['hvsrPortNum']) var = '{{\"device\": [{{\"ip-address\": \"{0}\",\"user-name\": \"\",\"portnumber\": \"{1}\",\"device-type\": \"hypervisor\",\"name\": \"\",\"device-id\": \"{2}:{3}\",\"password\": \"\"}}]}}' payload = var.format(vtep_hvsr['hvsrIp'], vtep_hvsr['hvsrPortNum'], vtep_hvsr['hvsrIp'], vtep_hvsr['hvsrPortNum']) headers = {"content-type": "application/json", "accept": "application/json"} print(payload) resp = self.http_put_request(url, payload, headers) print(resp) if resp is None: status.set_status(STATUS.CONN_ERROR) elif resp.content is None: status.set_status(STATUS.CTRL_INTERNAL_ERROR) elif resp.status_code == 200: status.set_status(STATUS.NODE_CONFIGURED) else: status.set_status(STATUS.DATA_NOT_FOUND, resp) return Result(status, None)
def get_loopback_interface_cfg(self, ifName): """ Return the configuration for a single loopback interface on the VRouter5600 :param string ifName: The interface name of the interface for which configuration should be returned :return: A tuple: Status, configuration of dataplane interface :rtype: instance of the `Result` class (containing configuration data) - STATUS.CONN_ERROR: If the controller did not respond. - STATUS.CTRL_INTERNAL_ERROR: If the controller responded but did not provide any status. - STATUS.OK: Success. Result is valid. - STATUS.HTTP_ERROR: If the controller responded with an error status code. """ status = OperStatus() templateModelRef = "vyatta-interfaces:" + \ "interfaces/vyatta-interfaces-loopback:" + \ "loopback/{}" modelref = templateModelRef.format(ifName) ctrl = self.ctrl url = ctrl.get_ext_mount_config_url(self.name) url += modelref resp = ctrl.http_get_request(url, data=None, headers=None) if(resp is None): status.set_status(STATUS.CONN_ERROR) elif(resp.content is None): status.set_status(STATUS.CTRL_INTERNAL_ERROR) elif (resp.status_code == 200): status.set_status(STATUS.OK) else: status.set_status(STATUS.HTTP_ERROR, resp) return Result(status, resp)
def get_interfaces_cfg(ctrl, name): """ Return the configuration for the interfaces on the VRouter5600 :return: A tuple: Status, configuration of the interfaces :rtype: instance of the `Result` class (containing configuration data) - STATUS.CONN_ERROR: If the controller did not respond. - STATUS.CTRL_INTERNAL_ERROR: If the controller responded but did not provide any status. - STATUS.OK: Success. Result is valid. - STATUS.HTTP_ERROR: If the controller responded with an error status code. """ status = OperStatus() cfg = None templateModelRef = "cliconf-linux:interfaces" modelref = templateModelRef url = ctrl.get_ext_mount_config_url(name) url += modelref resp = ctrl.http_get_request(url, data=None, headers=None, timeout=120) if(resp is None): status.set_status(STATUS.CONN_ERROR) elif(resp.content is None): status.set_status(STATUS.CTRL_INTERNAL_ERROR) elif (resp.status_code == 200): cfg = resp.content status.set_status(STATUS.OK) else: status.set_status(STATUS.HTTP_ERROR, resp) return Result(status, cfg)
def resister_vtep_on_hypervisor(self, vtep_hvsr): status = OperStatus() url = self.get_ovrl_mgr_hvsr_vtep_config_url(vtep_hvsr) var = '{{\"vteps\": [{{\"name\": \"{0}\",\"ip-address\":\"{1}\",\"configuration\": {{\"brocade-app-overlay-ovs-vtep:switch-name\": \"{2}\"}}}}' payload = var.format(vtep_hvsr['vtep_hvsr_name'], vtep_hvsr['hvsrIp'], vtep_hvsr['switchName']) headers = {"content-type": "application/json", "accept": "application/json"} print(url) resp = self.http_put_request(url, payload, headers) print(resp) if resp is None: status.set_status(STATUS.CONN_ERROR) elif resp.content is None: status.set_status(STATUS.CTRL_INTERNAL_ERROR) elif resp.status_code == 200: status.set_status(STATUS.NODE_CONFIGURED) else: status.set_status(STATUS.DATA_NOT_FOUND, resp) return Result(status, None)
def create_tunnel_between_two_hypervisors(self, tnl_name, vni_id, vtep_hvsrA, vtep_hvsrB): status = OperStatus() url = self.get_ovrl_mgr_tunnel_hvsr2hvsr_config_url(tnl_name) var = '{{\"tunnel\": [{{\"tunnel-name\": \"{0}\",\"vni-id\": \"{1}\",\"tunnel-endpoints\": [{{\"device-id\": \"{2}:{3}\",\"vtep-name\": \"{4}\"}},{{\"device-id/": \"{5}:{6}\",\"vtep-name\": \"{7}\"}}]}}' payload = var.format(tnl_name, vni_id, vtep_hvsrA['hvsrIp'], vtep_hvsrA['hvsrPortNum'], vtep_hvsrA['vtep_hvsr_name'], vtep_hvsrB['hvsrIp'], vtep_hvsrB['hvsrPortNum'], vtep_hvsrB['vtep_hvsr_name']) headers = {"content-type": "application/json", "accept": "application/json"} print(payload) resp = self.http_put_request(url, payload, headers) print(resp) if resp is None: status.set_status(STATUS.CONN_ERROR) elif resp.content is None: status.set_status(STATUS.CTRL_INTERNAL_ERROR) elif resp.status_code == 200: status.set_status(STATUS.NODE_CONFIGURED) else: status.set_status(STATUS.DATA_NOT_FOUND, resp) return Result(status, None)
def get_protocols_cfg(self, model_ref=None): status = OperStatus() templateModelRef = "vyatta-protocols:protocols" cfg = None ctrl = self.ctrl url = ctrl.get_ext_mount_config_url(self.name) url += templateModelRef if (model_ref is not None): url += "/" + model_ref resp = ctrl.http_get_request(url, data=None, headers=None) if(resp is None): status.set_status(STATUS.CONN_ERROR) elif(resp.content is None): status.set_status(STATUS.CTRL_INTERNAL_ERROR) elif (resp.status_code == 200): cfg = resp.content status.set_status(STATUS.OK) elif (resp.status_code == 404): status.set_status(STATUS.DATA_NOT_FOUND, resp) else: status.set_status(STATUS.HTTP_ERROR, resp) return Result(status, cfg)
def get_openvpn_interface_cfg(self, ifName): status = OperStatus() templateModelRef = "vyatta-interfaces:" + \ "interfaces/vyatta-interfaces-openvpn:" + \ "openvpn/{}" cfg = None modelref = templateModelRef.format(ifName) ctrl = self.ctrl url = ctrl.get_ext_mount_config_url(self.name) url += modelref resp = ctrl.http_get_request(url, data=None, headers=None) if(resp is None): status.set_status(STATUS.CONN_ERROR) elif(resp.content is None): status.set_status(STATUS.CTRL_INTERNAL_ERROR) elif (resp.status_code == 200): cfg = resp.content status.set_status(STATUS.OK) elif (resp.status_code == 404): status.set_status(STATUS.DATA_NOT_FOUND, resp) else: status.set_status(STATUS.HTTP_ERROR, resp) return Result(status, cfg)
def get_interfaces_cfg(ctrl, name): status = OperStatus() cfg = None templateModelRef = "brocade-interface:interface" modelref = templateModelRef url = ctrl.get_ext_mount_config_url(name) url += modelref resp = ctrl.http_get_request(url, data=None, headers=None, timeout=120) if(resp is None): status.set_status(STATUS.CONN_ERROR) elif(resp.content is None): status.set_status(STATUS.CTRL_INTERNAL_ERROR) elif (resp.status_code == 200): cfg = resp.content status.set_status(STATUS.OK) else: status.set_status(STATUS.HTTP_ERROR, resp) return Result(status, cfg)
def delete_vpn_cfg(self): """ Delete VPN configuration """ status = OperStatus() url_ext = "vyatta-security:security/vyatta-security-vpn-ipsec:vpn" ctrl = self.ctrl myname = self.name url = ctrl.get_ext_mount_config_url(myname) url += url_ext resp = ctrl.http_delete_request(url, data=None, headers=None) if(resp is None): status.set_status(STATUS.CONN_ERROR) elif(resp.content is None): status.set_status(STATUS.CTRL_INTERNAL_ERROR) elif (resp.status_code == 200): status.set_status(STATUS.OK) else: status.set_status(STATUS.HTTP_ERROR, resp) return Result(status, None)
def delete_protocols_cfg(self, model_ref=None): status = OperStatus() url_ext = "vyatta-protocols:protocols" ctrl = self.ctrl myname = self.name url = ctrl.get_ext_mount_config_url(myname) url += url_ext if (model_ref is not None): url += "/" + model_ref resp = ctrl.http_delete_request(url, data=None, headers=None) if(resp is None): status.set_status(STATUS.CONN_ERROR) elif(resp.content is None): status.set_status(STATUS.CTRL_INTERNAL_ERROR) elif (resp.status_code == 200): status.set_status(STATUS.OK) else: status.set_status(STATUS.HTTP_ERROR, resp) return Result(status, None)
def set_protocols_static_route_cfg(self, static_route): assert(isinstance(static_route, StaticRoute)) status = OperStatus() ctrl = self.ctrl headers = {'content-type': 'application/yang.data+json'} url = ctrl.get_ext_mount_config_url(self.name) obj = static_route payload = obj.get_payload() ext = static_route.get_url_extension() url += ext resp = ctrl.http_put_request(url, payload, headers) if(resp is None): status.set_status(STATUS.CONN_ERROR) elif(resp.content is None): status.set_status(STATUS.CTRL_INTERNAL_ERROR) elif (resp.status_code == 200 or resp.status_code == 204): status.set_status(STATUS.OK) else: status.set_status(STATUS.HTTP_ERROR, resp) return Result(status, None)
def set_dataplane_interface_cfg(self, dpInstance): """ Return the configuration for a dataplane interface on the VRouter5600 :param string ifName: The interface name of the interface for which configuration should be returned :return: A tuple: Status, configuration of dataplane interface :rtype: instance of the `Result` class (containing configuration data) - STATUS.CONN_ERROR: If the controller did not respond. - STATUS.CTRL_INTERNAL_ERROR: If the controller responded but did not provide any status. - STATUS.OK: Success. Result is valid. - STATUS.HTTP_ERROR: If the controller responded with an error status code. """ status = OperStatus() ctrl = self.ctrl myname = self.name url = ctrl.get_ext_mount_config_url(myname) headers = {"content-type": "application/json", "accept": "application/json"} payload = dpInstance.get_payload() url_ext = dpInstance.get_url_extension() url += url_ext print url print payload print headers resp = ctrl.http_put_request(url, payload, headers) print(resp) if(resp is None): status.set_status(STATUS.CONN_ERROR) elif(resp.content is None): status.set_status(STATUS.CTRL_INTERNAL_ERROR) elif (resp.status_code == 200): cfg = resp.content status.set_status(STATUS.OK) else: status.set_status(STATUS.HTTP_ERROR, resp) return Result(status, None)
def set_dataplane_interface_firewall(self, ifName, inboundFwName, outboundFwName): """ Set a firewall for inbound, outbound or both for a dataplane interface on the VRouter5600. :param string ifName: The dataplane interface to attache a firewall. :param string inboundFwName: None or name of firewall on VRouter5600 to use for traffic inbound towards router. :param string outboundFwName: None or name of firewall on VRouter5600 to use for traffic outbound from router. :return: A tuple: Status, None. :rtype: instance of the `Result` class - STATUS.CONN_ERROR: if the controller did not respond. schema is empty. - STATUS.CTRL_INTERNAL_ERROR: if the controller responded but did not provide any status. schema is empty. - STATUS.OK: Success. result is valid. - STATUS.HTTP_ERROR: if the controller responded with an error status code. """ status = OperStatus() ctrl = self.ctrl headers = {'content-type': 'application/yang.data+json'} url = ctrl.get_ext_mount_config_url(self.name) obj = DataplaneInterfaceFirewall(ifName) if (inboundFwName is not None): obj.add_in_policy(inboundFwName) if (outboundFwName is not None): obj.add_out_policy(outboundFwName) payload = obj.get_payload() url += obj.get_url_extension() resp = ctrl.http_put_request(url, payload, headers) if(resp is None): status.set_status(STATUS.CONN_ERROR) elif(resp.content is None): status.set_status(STATUS.CTRL_INTERNAL_ERROR) elif (resp.status_code == 200): status.set_status(STATUS.OK) else: status.set_status(STATUS.HTTP_ERROR, resp) return Result(status, None)
def set_dataplane_interface_vif_cfg(self, vif): status = OperStatus() ctrl = self.ctrl myname = self.name url = ctrl.get_ext_mount_config_url(myname) headers = {"content-type": "application/json", "accept": "application/json"} payload = vif.get_payload() url_ext = vif.get_url_extension() url += url_ext print url print payload print headers resp = ctrl.http_put_request(url, payload, headers) if(resp is None): status.set_status(STATUS.CONN_ERROR) elif(resp.content is None): status.set_status(STATUS.CTRL_INTERNAL_ERROR) elif (resp.status_code == 200 or resp.status_code == 204): status.set_status(STATUS.OK) else: status.set_status(STATUS.HTTP_ERROR, resp) return Result(status, None)