def compile(self): log.info("Compiling Netkit for %s" % self.host) G_phy = self.anm.overlay.phy quagga_compiler = QuaggaCompiler(self.nidb, self.anm) #TODO: this should be all l3 devices not just routers for phy_node in G_phy.nodes('is_router', host = self.host, syntax='quagga'): folder_name = ank.name_folder_safe(phy_node.label) nidb_node = self.nidb.node(phy_node) nidb_node.render.base = "templates/quagga" nidb_node.render.template = "templates/netkit_startup.mako" nidb_node.render.dst_folder = "rendered/%s/%s" % (self.host, "netkit") nidb_node.render.base_dst_folder = "rendered/%s/%s/%s" % (self.host, "netkit", folder_name) nidb_node.render.dst_file = "%s.startup" % folder_name # allocate zebra information nidb_node.zebra.password = "******" # Allocate edges # assign interfaces # Note this could take external data int_ids = self.interface_ids() for edge in self.nidb.edges(nidb_node): edge.id = int_ids.next() # and allocate tap interface nidb_node.tap.id = int_ids.next() quagga_compiler.compile(nidb_node) # and lab.conf self.allocate_tap_ips() self.lab_topology()
def lab_topology(self): host_nodes = self.nidb.nodes(host = self.host) #TODO: replace name/label and use attribute from subgraph lab_topology = self.nidb.topology[self.host] lab_topology.render_template = "templates/netkit_lab_conf.mako" lab_topology.render_dst_folder = "rendered/%s/%s" % (self.host, "netkit") lab_topology.render_dst_file = "lab.conf" subgraph = self.nidb.subgraph(host_nodes, self.host) lab_topology.description = "AutoNetkit Lab" lab_topology.author = "AutoNetkit" lab_topology.web = "www.autonetkit.org" G_ip = self.anm['ip'] config_items = [] for node in subgraph.nodes("is_l3device"): for edge in node.edges('is_router'): collision_domain = "%s.%s" % (G_ip.edge(edge).ip_address, G_ip.edge(edge).dst.subnet.prefixlen) numeric_id = edge.id.replace("eth", "") # netkit lab.conf uses 1 instead of eth1 config_items.append({ 'device': ank.name_folder_safe(node.label), 'key': numeric_id, 'value': collision_domain, }) tap_ips = [] for node in subgraph: if node.tap: tap_ips.append({ 'device': ank.name_folder_safe(node.label), 'id': node.tap.id, 'ip': node.tap.ip, }) #TODO: include ram, etc from here lab_topology.config_items = config_items lab_topology.tap_ips = sort_attribute(tap_ips, "device")
def compile(self): log.info("Compiling Cisco for %s" % self.host) G_phy = self.anm.overlay.phy ios_compiler = IosCompiler(self.nidb, self.anm) for phy_node in G_phy.nodes('is_router', host = self.host, syntax='ios'): nidb_node = self.nidb.node(phy_node) nidb_node.render.template = "templates/ios.mako" nidb_node.render.dst_folder = os.path.join(self.host, self.timestamp) nidb_node.render.dst_file = "%s.conf" % ank.name_folder_safe(phy_node.label) # Assign interfaces int_ids = self.interface_ids_ios() for edge in self.nidb.edges(nidb_node): edge.id = int_ids.next() ios_compiler.compile(nidb_node)
def compile(self): log.info("Compiling Junosphere for %s" % self.host) G_phy = self.anm.overlay.phy junos_compiler = JunosCompiler(self.nidb, self.anm) for phy_node in G_phy.nodes('is_router', host = self.host, syntax='junos'): nidb_node = self.nidb.node(phy_node) nidb_node.render.template = "templates/junos.mako" nidb_node.render.dst_folder = "rendered/%s/%s" % (self.host, "junosphere") nidb_node.render.dst_file = "%s.conf" % ank.name_folder_safe(phy_node.label) int_ids = self.interface_ids() for edge in self.nidb.edges(nidb_node): edge.unit = 0 edge.id = int_ids.next() junos_compiler.compile(nidb_node)
def compile(self): log.info("Compiling Dynagen for %s" % self.host) G_phy = self.anm.overlay.phy ios_compiler = IosCompiler(self.nidb, self.anm) for phy_node in G_phy.nodes('is_router', host = self.host, syntax='ios'): nidb_node = self.nidb.node(phy_node) nidb_node.render.template = "templates/ios.mako" nidb_node.render.dst_folder = "rendered/%s/%s" % (self.host, "dynagen") nidb_node.render.dst_file = "%s.conf" % ank.name_folder_safe(phy_node.label) # Allocate edges # assign interfaces # Note this could take external data int_ids = self.interface_ids() for edge in self.nidb.edges(nidb_node): edge.id = int_ids.next() ios_compiler.compile(nidb_node)