Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
lab_topology.description = "AutoNetkit Lab"
lab_topology.author = "AutoNetkit"
lab_topology.web = "www.autonetkit.org"
host_nodes = list(self.nidb.nodes(host = self.host, platform = "netkit"))
if not len(host_nodes):
log.debug("No Netkit hosts for %s" % self.host)
#TODO: make so can return here
#return
# also need collision domains for this host
cd_nodes = self.nidb.nodes("collision_domain", host = self.host) # add in collision domains for this host (don't have platform)
#TODO: need to allocate cds to a platform
host_nodes += cd_nodes
subgraph = self.nidb.subgraph(host_nodes, self.host)
#TODO: sort this numerically, not just by string
lab_topology.machines = " ".join(alpha_sort(naming.network_hostname(phy_node)
for phy_node in subgraph.nodes("is_l3device")))
G_ip = self.anm['ip']
lab_topology.config_items = []
for node in sorted(subgraph.nodes("is_l3device")):
for edge in node.edges():
collision_domain = str(G_ip.edge(edge).dst.subnet).replace("/", ".")
numeric_id = edge.id.replace("eth", "") # netkit lab.conf uses 1 instead of eth1
lab_topology.config_items.append(
device = naming.network_hostname(node),
key = numeric_id,
value = collision_domain,
)
lab_topology.tap_ips = []
for node in subgraph:
def compile(self):
self.copy_across_ip_addresses()
log.info("Compiling Netkit for %s" % self.host)
g_phy = self.anm['phy']
quagga_compiler = QuaggaCompiler(self.nidb, self.anm)
# todo: set platform render
lab_topology = self.nidb.topology(self.host)
lab_topology.render2 = PlatformRender()
# TODO: this should be all l3 devices not just routers
for phy_node in g_phy.l3devices(host=self.host, syntax='quagga'):
folder_name = naming.network_hostname(phy_node)
dm_node = self.nidb.node(phy_node)
dm_node.add_stanza("render")
# TODO: order by folder and file template src/dst
dm_node.render.base = os.path.join("templates", "quagga")
dm_node.render.template = os.path.join("templates",
"netkit_startup.mako")
dm_node.render.dst_folder = os.path.join("rendered",
self.host, "netkit")
dm_node.render.base_dst_folder = os.path.join("rendered",
self.host, "netkit", folder_name)
dm_node.render.dst_file = "%s.startup" % folder_name
dm_node.render.custom = {
'abc': 'def.txt'
}
def compile(self, node):
phy_node = self.anm['phy'].node(node)
ip_node = self.anm['ip'].node(node)
node.label = naming.network_hostname(phy_node)
node.input_label = phy_node.id
node.loopback = ip_node.loopback
node.loopback_subnet = netaddr.IPNetwork(node.loopback)
node.loopback_subnet.prefixlen = 32
self.interfaces(node)
if node in self.anm['ospf']:
self.ospf(node)
if node in self.anm['ibgp'] or node in self.anm['ebgp']:
self.bgp(node)
"render_dst_file": "lab.conf",
"description": "AutoNetkit Lab",
"author": "AutoNetkit",
"web": "www.autonetkit.org",
}
host_nodes = list(
self.nidb.nodes(host=self.host, platform="netkit"))
if not len(host_nodes):
log.debug("No Netkit hosts for %s" % self.host)
# also need collision domains for this host
cd_nodes = self.nidb.nodes("broadcast_domain", host=self.host)
host_nodes += cd_nodes
subgraph = self.nidb.subgraph(host_nodes, self.host)
lab_topology.machines = " ".join(alpha_sort(naming.network_hostname(phy_node)
for phy_node in subgraph.l3devices()))
lab_topology.config_items = []
for node in sorted(subgraph.l3devices()):
for interface in node.physical_interfaces():
broadcast_domain = str(interface.ipv4_subnet).replace("/", ".")
# netkit lab.conf uses 1 instead of eth1
numeric_id = interface.numeric_id
stanza = ConfigStanza(
device=naming.network_hostname(node),
key=numeric_id,
value=broadcast_domain,
)
lab_topology.config_items.append(stanza)
lab_topology.tap_ips = []
if use_mgmt_interfaces:
mgmt_int_id = "mgmt0"
mgmt_int = DmNode.add_interface(management=True)
mgmt_int.id = mgmt_int_id
staros_compiler = StarOsCompiler(self.nidb, self.anm)
for phy_node in g_phy.routers(host=self.host, syntax='StarOS'):
DmNode = self.nidb.node(phy_node)
DmNode.add_stanza("render")
DmNode.render.template = os.path.join("templates", "staros.mako")
if to_memory:
DmNode.render.to_memory = True
else:
DmNode.render.dst_folder = dst_folder
DmNode.render.dst_file = "%s.conf" % naming.network_hostname(
phy_node)
# Assign interfaces
int_ids = self.interface_ids_nxos()
for interface in DmNode.physical_interfaces():
if not interface.id:
interface.id = self.numeric_to_interface_label_star_os(
interface.numeric_id)
staros_compiler.compile(DmNode)
# TODO: make this work other way around
if use_mgmt_interfaces:
mgmt_int_id = "ethernet 1/1"
mgmt_int = DmNode.add_interface(management=True)
mgmt_int.id = mgmt_int_id
try:
from autonetkit_cisco.compilers.device.cisco import IosXrCompiler
ios_xr_compiler = IosXrCompiler(self.nidb, self.anm)
except ImportError:
ios_xr_compiler = IosXrCompiler(self.nidb, self.anm)
for phy_node in g_phy.routers(host=self.host, syntax='ios_xr'):
DmNode = self.nidb.node(phy_node)
DmNode.add_stanza("render")
DmNode.render.template = os.path.join(
"templates", "ios_xr", "router.conf.mako")
if to_memory:
DmNode.render.to_memory = True
else:
DmNode.render.dst_folder = dst_folder
DmNode.render.dst_file = "%s.conf" % naming.network_hostname(
phy_node)
# Assign interfaces
int_ids = self.interface_ids_ios_xr()
for interface in DmNode.physical_interfaces():
if not interface.id:
interface.id = self.numeric_to_interface_label_ios_xr(
interface.numeric_id)
ios_xr_compiler.compile(DmNode)
if use_mgmt_interfaces:
mgmt_int_id = "mgmteth0/0/CPU0/0"
mgmt_int = DmNode.add_interface(management=True)
mgmt_int.id = mgmt_int_id
def compile(self):
log.info("Compiling Netkit for %s" % self.host)
G_phy = self.anm['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 = naming.network_hostname(phy_node)
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 = "1234"
hostname = folder_name
if hostname[0] in string.digits:
hostname = "r" + hostname
nidb_node.zebra.hostname = hostname # can't have . in quagga hostnames
nidb_node.ssh.use_key = True #TODO: make this set based on presence of key
# Note this could take external data
# also need collision domains for this host
cd_nodes = self.nidb.nodes("broadcast_domain", host=self.host)
host_nodes += cd_nodes
subgraph = self.nidb.subgraph(host_nodes, self.host)
lab_topology.machines = " ".join(alpha_sort(naming.network_hostname(phy_node)
for phy_node in subgraph.l3devices()))
lab_topology.config_items = []
for node in sorted(subgraph.l3devices()):
for interface in node.physical_interfaces():
broadcast_domain = str(interface.ipv4_subnet).replace("/", ".")
# netkit lab.conf uses 1 instead of eth1
numeric_id = interface.numeric_id
stanza = ConfigStanza(
device=naming.network_hostname(node),
key=numeric_id,
value=broadcast_domain,
)
lab_topology.config_items.append(stanza)
lab_topology.tap_ips = []
for node in subgraph:
if node.tap:
stanza = ConfigStanza(
device=naming.network_hostname(node),
id=node.tap.id.replace("eth", ""), # strip ethx -> x
ip=node.tap.ip,
)
lab_topology.tap_ips.append(stanza)
lab_topology.tap_ips = sorted(lab_topology.tap_ips, key=lambda x: x.ip)