def ansible(env, **kwargs): """ generate ansible inventory """ if kwargs.get("output"): # user specified output filename file_name = kwargs.get("output") else: # writes to <env>_testbed.yaml by default file_name = '{}_inventory.yaml'.format(env) running = helpers.check_sim_running(env) if running: sim_name = running server = VIRLServer() roster = server.get_sim_roster(sim_name) # sim_name = "topology-fpyHFs" virl_data = server.export(sim_name, ip=True).content interfaces = server.get_interfaces(sim_name).json() inventory_yaml = ansible_inventory_generator(sim_name, virl_data, roster=roster, interfaces=interfaces) click.secho("Writing {}".format(file_name)) with open(file_name, 'w') as yaml_file: yaml_file.write(inventory_yaml) else: click.secho("couldnt generate testbed for for env: {}".format(env), fg='red')
def pyats1(env, **kwargs): """ Generates a pyats testbed config for an environment """ if kwargs.get("output"): # user specified output filename file_name = kwargs.get("output") else: # writes to <env>_testbed.yaml by default file_name = "{}_testbed.yaml".format(env) running = helpers.check_sim_running(env) if running: sim_name = running server = VIRLServer() roster = server.get_sim_roster(sim_name) # sim_name = "topology-fpyHFs" virl_data = server.export(sim_name, ip=True).content interfaces = server.get_interfaces(sim_name).json() testbed_yaml = pyats_testbed_generator1(sim_name, virl_data, roster=roster, interfaces=interfaces) click.secho("Writing {}".format(file_name)) with open(file_name, "w") as yaml_file: yaml_file.write(testbed_yaml) else: click.secho("couldnt generate testbed for for env: {}".format(env), fg="red")
def telnet(node): """ telnet to a node """ if len(node) == 2: # we received env and node name env = node[0] running = helpers.check_sim_running(env) node = node[1] elif len(node) == 1: # assume default env env = 'default' running = helpers.check_sim_running(env) node = node[0] else: exit(call(['virl', 'telnet', '--help'])) if running: sim_name = running server = VIRLServer() details = server.get_sim_roster(sim_name) if node: try: node_dict = get_node_from_roster(node, details) node_name = node_dict.get("NodeName") ip = node_dict['managementIP'] proxy = node_dict.get("managementProxy") # use user specified telnet command if 'VIRL_TELNET_COMMAND' in server.config: cmd = server.config['VIRL_TELNET_COMMAND'] cmd = cmd.format(host=ip) print("Calling user specified command: {}".format(cmd)) exit(call(cmd.split())) if proxy == 'lxc': lxc = get_mgmt_lxc_ip(details) click.secho("Attemping telnet connection" " to {} at {} via ssh {}".format( node_name, ip, lxc)) cmd = 'ssh -t {}@{} "telnet {}"' cmd = cmd.format(server.user, lxc, ip) exit(call(cmd, shell=True)) else: # handle the "flat" networking case click.secho("Attemping telnet connection" " to {} at {}".format(node_name, ip)) exit(call(['telnet', ip])) except AttributeError: click.secho("Could not find management info " "for {}:{}".format(env, node), fg="red") except KeyError: click.secho("Unknown node {}:{}".format(env, node), fg="red") else: return details.json()
def ssh(node): """ ssh to a node """ if len(node) == 2: # we received env and node name env = node[0] running = helpers.check_sim_running(env) node = node[1] elif len(node) == 1: # assume default env env = 'default' running = helpers.check_sim_running(env) node = node[0] else: exit(call(['virl', 'ssh', '--help'])) if running: sim_name = running server = VIRLServer() details = server.get_sim_roster(sim_name) if node: try: node_dict = get_node_from_roster(node, details) node_name = node_dict.get("NodeName") ip = node_dict['managementIP'] proxy = node_dict.get("managementProxy") if proxy == 'lxc': lxc = get_mgmt_lxc_ip(details) if lxc: click.secho("Attemping ssh connection" "to {} at {} via {}".format(node_name, ip, lxc)) cmd = 'ssh -o "ProxyCommand ssh -W %h:%p {}@{}" {}@{}' cmd = cmd.format(server.user, lxc, 'cisco', ip) exit(call(cmd, shell=True)) else: # handle the "flat" networking case click.secho("Attemping ssh connection" "to {} at {}".format(node_name, ip)) exit(call(['ssh', 'cisco@{}'.format(ip)])) except AttributeError: click.secho("Could not find management info" "for {}:{}".format(env, node), fg="red") except KeyError: click.secho("Unknown node {}:{}".format(env, node), fg="red") else: return details.json()
def nodes(env, **kwargs): """ get nodes for sim_name """ running = helpers.check_sim_running(env) if running: sim_name = running server = VIRLServer() details = server.get_sim_roster(sim_name) node_list_table(details) else: click.secho("Environment {} is not running".format(env), fg='red')
def nso1(env, syncfrom, **kwargs): """ generate nso inventory """ if kwargs.get("output"): # user specified output filename file_name = kwargs.get("output") else: # writes to <env>.json by default file_name = None running = helpers.check_sim_running(env) if running: sim_name = running server = VIRLServer() roster = server.get_sim_roster(sim_name) # sim_name = "topology-fpyHFs" virl_data = server.export(sim_name, ip=True).content interfaces = server.get_interfaces(sim_name).json() payload = nso_payload_generator1(sim_name, virl_data, roster=roster, interfaces=interfaces) if file_name: # pragma: no cover click.secho("Writing payload to {}".format(file_name)) with open(file_name, "w") as payload_file: payload_file.write(payload) else: click.secho("Updating NSO....") nso_obj = NSO() nso_response = nso_obj.update_devices(payload) if nso_response.ok: click.secho("Successfully added VIRL devices to NSO") else: click.secho("Error updating NSO: ", fg="red") click.secho(nso_response.text) if syncfrom: resp = nso_obj.perform_sync_from() sync_table(resp.json()) else: click.secho("couldnt generate testbed for for env: {}".format(env), fg="red")
def telnet(node): """ telnet to a node """ if len(node) == 2: # we received env and node name env = node[0] running = helpers.check_sim_running(env) node = node[1] else: # assume default env env = 'default' running = helpers.check_sim_running(env) node = node[0] if running: sim_name = running server = VIRLServer() details = server.get_sim_roster(sim_name) #resp = server.get_node_console(sim_name, node=node) for node_dict in details.values(): node_name = node_dict.get("NodeName") if node_name == node: click.secho( "Attemping telnet connection to {}".format(node_name))
def ssh1(node): """ ssh to a node """ if len(node) == 2: # we received env and node name env = node[0] running = helpers.check_sim_running(env) node = node[1] elif len(node) == 1: # assume default env env = "default" running = helpers.check_sim_running(env) node = node[0] else: exit(call(["virl", "ssh", "--help"])) if running: sim_name = running server = VIRLServer() details = server.get_sim_roster(sim_name) # default ssh username can be overriden username = server.config.get("VIRL_SSH_USERNAME", "cisco") if node: try: node_dict = get_node_from_roster(node, details) node_name = node_dict.get("NodeName") ip = node_dict["managementIP"] proxy = node_dict.get("managementProxy") if "VIRL_SSH_COMMAND" in server.config: cmd = server.config["VIRL_SSH_COMMAND"] cmd = cmd.format(host=ip, username=username) print("Calling user specified command: {}".format(cmd)) exit(call(cmd.split())) if proxy == "lxc": lxc = get_mgmt_lxc_ip(details) if lxc: click.secho("Attemping ssh connection" "to {} at {} via {}".format( node_name, ip, lxc)) cmd = 'ssh -o "ProxyCommand ssh -W %h:%p {}@{}" {}@{}' cmd = cmd.format(server.user, lxc, username, ip) exit(call(cmd, shell=True)) else: # handle the "flat" networking case click.secho("Attemping ssh connection" "to {} at {}".format(node_name, ip)) exit(call(["ssh", "{}@{}".format(username, ip)])) except AttributeError: click.secho("Could not find management info" " for {}:{}".format(env, node), fg="red") except KeyError: click.secho("Unknown node {}:{}".format(env, node), fg="red") else: return details.json()