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 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 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 != None): url += "/" + model_ref resp = ctrl.http_get_request(url, data=None, headers=None) if (resp == None): status.set_status(STATUS.CONN_ERROR) elif (resp.content == 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_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 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 == None): status.set_status(STATUS.CONN_ERROR) elif (resp.content == 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 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) obj = vpn payload = obj.get_payload() resp = ctrl.http_post_request(url, payload, headers) if (resp == None): status.set_status(STATUS.CONN_ERROR) elif (resp.content == 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_loopback_interfaces_list(self): """ Return a list of loopback interfaces on the VRouter5600 :return: A tuple: Status, list of loopback interface names :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. """ lbInterfaces = [] result = self.get_interfaces_cfg() status = result.get_status() if (status.eq(STATUS.OK)): cfg = result.get_data() p1 = 'interfaces' p2 = 'vyatta-interfaces-loopback:loopback' if (p1 in cfg and p2 in cfg): items = json.loads(cfg).get(p1).get(p2) p3 = 'tagnode' for item in items: if p3 in item: lbInterfaces.append(item[p3]) return Result(status, lbInterfaces)
def get_loopback_interfaces_cfg(self): """ Return the configuration for the loopback interfaces on the VRouter5600 :return: A tuple: Status, configuration of loopback 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. """ lbIfCfg = None result = self.get_interfaces_cfg() status = result.get_status() if (status.eq(STATUS.OK)): cfg = result.get_data() p1 = 'interfaces' p2 = 'vyatta-interfaces-loopback:loopback' if (p1 in cfg and p2 in cfg): lbIfCfg = json.loads(cfg).get(p1).get(p2) return Result(status, lbIfCfg)
def get_interfaces_list(self): """ Get the list of interfaces on the VRouter5600. :return: A tuple: Status, list of interface names. :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. """ ifList = [] result = self.get_interfaces_cfg() status = result.get_status() if (status.eq(STATUS.OK)): cfg = result.get_data() p1 = 'interfaces' if (p1 in cfg): d = json.loads(cfg).get(p1) p2 = 'tagnode' for k, v in d.items(): print k print type(v) if (isinstance(v, list)): for item in v: if p2 in item: ifList.append(item[p2]) return Result(status, ifList)
def get_interfaces_cfg(self): """ 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 = "vyatta-interfaces:interfaces" modelref = templateModelRef 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 == None): status.set_status(STATUS.CONN_ERROR) elif (resp.content == 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 create_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() resp = ctrl.http_post_request(url, payload, headers) if (resp == None): status.set_status(STATUS.CONN_ERROR) elif (resp.content == 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_openvpn_interfaces_cfg(self): openVpnIfCfg = None result = self.get_interfaces_cfg() status = result.get_status() if (status.eq(STATUS.OK)): cfg = result.get_data() p1 = 'interfaces' p2 = 'vyatta-interfaces-openvpn:openvpn' if (p1 in cfg and p2 in cfg): openVpnIfCfg = json.loads(cfg).get(p1).get(p2) else: status.set_status(STATUS.DATA_NOT_FOUND) return Result(status, openVpnIfCfg) pass
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 != None): obj.add_in_policy(inboundFwName) if (outboundFwName != 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 == None): status.set_status(STATUS.CONN_ERROR) elif (resp.content == 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_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_openvpn_interface_cfg(self, ifName): status = OperStatus() templateModelRef = "vyatta-interfaces:interfaces/vyatta-interfaces-openvpn:openvpn/{}" modelref = templateModelRef.format(ifName) ctrl = self.ctrl url = ctrl.get_ext_mount_config_url(self.name) url += modelref resp = ctrl.http_delete_request(url, data=None, headers=None) if (resp == None): status.set_status(STATUS.CONN_ERROR) elif (resp.content == 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 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() resp = ctrl.http_post_request(url, payload, headers) if (resp == None): status.set_status(STATUS.CONN_ERROR) elif (resp.content == 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_openvpn_interface_cfg(self, openvpn_interface): assert (isinstance(openvpn_interface, OpenVpnInterface)) status = OperStatus() ctrl = self.ctrl headers = {'content-type': 'application/yang.data+json'} url = ctrl.get_ext_mount_config_url(self.name) obj = openvpn_interface payload = obj.get_payload() ext = openvpn_interface.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 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)