Exemple #1
0
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')
Exemple #2
0
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")
Exemple #3
0
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()
Exemple #4
0
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()
Exemple #5
0
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')
Exemple #6
0
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")
Exemple #7
0
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))
Exemple #8
0
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()