import realm from realm import Realm import random from realm import BaseProfile class VRProfile(BaseProfile): """ Virtual Router profile """ def __init__(self, local_realm, debug=False): super().__init__(local_realm=local_realm, debug=debug) self.vr_eid = None self.created_rdds = [] self.created_vrcxs = [] # self.vrcx_data = { # 'shelf': 1, # 'resource': 1, # 'vr-name': None, # 'local_dev': None, # outer rdd # 'remote_dev': None, # inner rdd # "x": 200+ran, # "y": 0, # "width": 10, # "height": 10, # 'flags': 0, # "subnets": None, # "nexthop": None, # "vrrp_ip": "0.0.0.0" # } # # self.set_port_data = { # "shelf": 1, # "resource": 1, # "port": None, # "ip_addr": None, # "netmask": None, # "gateway": None # } def create_rdd(self, resource=1, ip_addr=None, netmask=None, gateway=None, suppress_related_commands_=True, debug_=False): rdd_data = { "shelf": 1, "resource": resource, "port": "rdd0", "peer_ifname": "rdd1" } # print("creating rdd0") self.json_post("/cli-json/add_rdd", rdd_data, ) rdd_data = { "shelf": 1, "resource": resource, "port": "rdd1", "peer_ifname": "rdd0" } # print("creating rdd1") # self.json_post("/cli-json/add_rdd", # rdd_data, # suppress_related_commands_=suppress_related_commands_, # debug_=debug_) # # self.set_port_data["port"] = "rdd0" # self.set_port_data["ip_addr"] = gateway # self.set_port_data["netmask"] = netmask # self.set_port_data["gateway"] = gateway # self.json_post("/cli-json/set_port", # self.set_port_data, # suppress_related_commands_=suppress_related_commands_, # debug_=debug_) # # self.set_port_data["port"] = "rdd1" # self.set_port_data["ip_addr"] = ip_addr # self.set_port_data["netmask"] = netmask # self.set_port_data["gateway"] = gateway # self.json_post("/cli-json/set_port", # self.set_port_data, # suppress_related_commands_=suppress_related_commands_, # debug_=debug_) # # self.created_rdds.append("rdd0") # self.created_rdds.append("rdd1") def create_vrcx(self, resource=1, local_dev=None, remote_dev=None, subnets=None, nexthop=None, flags=0, suppress_related_commands_=True, debug_=False): if self.vr_name is not None: self.vrcx_data["resource"] = resource self.vrcx_data["vr_name"] = self.vr_name self.vrcx_data["local_dev"] = local_dev self.vrcx_data["remote_dev"] = remote_dev self.vrcx_data["subnets"] = subnets self.vrcx_data["nexthop"] = nexthop self.vrcx_data["flags"] = flags self.json_post("/cli-json/add_vrcx", self.vrcx_data, suppress_related_commands_=suppress_related_commands_, debug_=debug_) else: raise ValueError("vr_name must be set. Current name: %s" % self.vr_name) def create(self, vr_name=None, upstream_port=None, upstream_subnets=[], upstream_nexthop=None, local_subnets=[], local_nexthop=None, debug=False, suppress_related_commands_=True): # Create vr if self.debug: debug = True if vr_name is None: raise ValueError("vr_name must be set. Current name: %s" % vr_name) self.vr_eid = self.parent_realm.name_to_eid(vr_name) from random import randint x = randint(100, 200) y = randint(100, 200) self.add_vr_data = { "alias": self.vr_eid[2], "shelf": 1, "resource": self.vr_eid[1], "x": x, "y": y, "width": 250, "height": 250, "flags": 0 } self.json_post("/cli-json/add_vr", self.add_vr_data) # # Create 1 rdd pair # self.create_rdd(resource=resource, ip_addr=rdd_ip, gateway=rdd_gateway, # netmask=rdd_netmask) # rdd0, rdd1; rdd0 gateway, rdd1 connected to network # # # connect rdds and upstream # self.create_vrcx(resource=resource, local_dev=upstream_port, remote_dev="NA", subnets=upstream_subnets, # nexthop=upstream_nexthop, # flags=257, suppress_related_commands_=suppress_related_commands_, debug_=debug) # self.create_vrcx(resource=resource, local_dev="rdd0", remote_dev="rdd1", subnets=local_subnets, # nexthop=local_nexthop, # flags=1, suppress_related_commands_=suppress_related_commands_, debug_=debug) def cleanup(self, resource, delay=0.03): # TODO: Cleanup for VRProfile pass #