diff --git a/nested-labvm/atd-docker/coder/Dockerfile b/nested-labvm/atd-docker/coder/Dockerfile index ae82a1c67..8690214f7 100644 --- a/nested-labvm/atd-docker/coder/Dockerfile +++ b/nested-labvm/atd-docker/coder/Dockerfile @@ -5,7 +5,7 @@ RUN sudo apt update && \ RUN sudo pip3 install --upgrade pip -RUN sudo pip3 install pyeapi jsonrpclib-pelix shyaml +RUN sudo pip3 install pyeapi jsonrpclib-pelix shyaml ansible-pylibssh RUN wget --quiet https://raw.githubusercontent.com/aristanetworks/ansible-avd/devel/ansible_collections/arista/avd/requirements.txt @@ -16,7 +16,7 @@ RUN wget --quiet https://raw.githubusercontent.com/aristanetworks/ansible-avd/de RUN sudo pip3 install -r requirements-dev.txt # Install arista.avd, community.general and ansible.posix ansible-galaxy collections with upgrade flag if already exists -RUN ansible-galaxy collection install arista.avd --upgrade +RUN ansible-galaxy collection install arista.avd --force RUN ansible-galaxy collection install community.general --upgrade diff --git a/nested-labvm/atd-docker/cvpUpdater/Dockerfile b/nested-labvm/atd-docker/cvpUpdater/Dockerfile index 882590611..557ab365d 100644 --- a/nested-labvm/atd-docker/cvpUpdater/Dockerfile +++ b/nested-labvm/atd-docker/cvpUpdater/Dockerfile @@ -9,8 +9,9 @@ RUN curl -SsL https://github.com/boxboat/fixuid/releases/download/v0.5/fixuid-0. printf "user: arista\ngroup: arista\npaths:\n - /home/arista\n - /home/arista/CVP_DATA\n" > /etc/fixuid/config.yml RUN pip install rcvpapi \ - ruamel.yaml - + ruamel.yaml \ + cvprac paramiko scp + RUN mkdir -p /home/arista/CVP_DATA WORKDIR /home/arista diff --git a/nested-labvm/atd-docker/cvpUpdater/src/cvpUpdater.py b/nested-labvm/atd-docker/cvpUpdater/src/cvpUpdater.py index 8243b3595..d07cc8a37 100644 --- a/nested-labvm/atd-docker/cvpUpdater/src/cvpUpdater.py +++ b/nested-labvm/atd-docker/cvpUpdater/src/cvpUpdater.py @@ -1,9 +1,11 @@ #!/usr/bin/env python - +from cvprac.cvp_client import CvpClient from ruamel.yaml import YAML from rcvpapi.rcvpapi import * -import requests, json +from paramiko import SSHClient +from paramiko import AutoAddPolicy +from scp import SCPClient from os import path, listdir, system from sys import exit from time import sleep @@ -20,6 +22,7 @@ # Temporary file_path location for CVP Custom info cvp_file = '/home/arista/cvp/cvp_info.yaml' + # ================================== # Start of Global Functions # ================================== @@ -198,6 +201,9 @@ def main(): cvpPassword = atd_yaml['login_info']['jump_host']['pw'] while not cvp_clnt: try: + cvprac_clnt = CvpClient() + cvprac_clnt.api.request_timeout = 180 + cvprac_clnt.connect([atd_yaml['nodes']['cvp'][0]['ip']], cvpUsername, cvpPassword) cvp_clnt = CVPCON(atd_yaml['nodes']['cvp'][0]['ip'], cvpUsername, cvpPassword) pS("OK","Connected to CVP at {0}".format(atd_yaml['nodes']['cvp'][0]['ip'])) except: @@ -220,6 +226,30 @@ def main(): pS("INFO", "CVP will be bare and no configuration.") return(True) if cvp_clnt: + # ========================================== + # Check the current version to see if a + # token needs to be generated + # ========================================== + _version = cvprac_clnt.api.get_cvp_info() + _version = _version['version'].split('.') + _version_major = float(f"{_version[0]}.{_version[1]}") + # Perform check if it is a cEOS based topo and 2022.2 or later CVP + if _version_major >= 2022.2 and (atd_yaml['eos_type'] == 'ceos' or atd_yaml['eos_type'] == 'container-labs'): + pS("INFO", "Generating a token for onboarding...") + _token_response = cvprac_clnt.api.create_enroll_token("24h") + _token_path = path.expanduser(f"~/token") + with open(f"{_token_path}", 'w') as token_out: + token_out.write(_token_response['data']) + for _node in eos_info: + with SSHClient() as ssh: + ssh.set_missing_host_key_policy(AutoAddPolicy()) + ssh.connect(_node.ip, username=cvpUsername, password=cvpPassword,) + with SCPClient(ssh.get_transport()) as scp: + pS("INFO", f"Transferring token to {_node.hostname}") + scp.put(f"{_token_path}", "/tmp/token") + else: + pS("INFO", f"Version does not require a token for onboarding...") + # ========================================== # Check to see how many nodes have connected # ========================================== @@ -391,4 +421,4 @@ def main(): else: pS("OK","CVP is already configured") while True: - sleep(600) + sleep(600) \ No newline at end of file diff --git a/nested-labvm/atd-docker/docker-compose.yml b/nested-labvm/atd-docker/docker-compose.yml index 2016be13c..0a11b5875 100644 --- a/nested-labvm/atd-docker/docker-compose.yml +++ b/nested-labvm/atd-docker/docker-compose.yml @@ -24,7 +24,7 @@ services: - /home/arista/arista-dir:/home/arista:rw login: container_name: atd-login - image: us.gcr.io/atd-testdrivetraining-dev/atddocker_login:1.0.5 + image: us.gcr.io/atd-testdrivetraining-dev/atddocker_login:1.0.16 user: $ArID:$ArGD restart: always hostname: devbox @@ -41,7 +41,7 @@ services: - /var/run/libvirt/libvirt-sock:/var/run/libvirt/libvirt-sock:ro cvpupdater: container_name: atd-cvpupdater - image: us.gcr.io/atd-testdrivetraining-dev/atddocker_cvpupdater:1.0.0 + image: us.gcr.io/atd-testdrivetraining-dev/atddocker_cvpupdater:2.0.2 user: $ArID:$ArGD restart: always environment: @@ -53,7 +53,7 @@ services: - cvp_dir:/home/arista/CVP_DATA:rw gitconfigletsync: container_name: atd-gitconfigletsync - image: us.gcr.io/atd-testdrivetraining-dev/atddocker_gitconfigletsync:1.0.0 + image: us.gcr.io/atd-testdrivetraining-dev/atddocker_gitconfigletsync:2.0.0 user: $ArID:$ArGD restart: always environment: @@ -85,7 +85,7 @@ services: - /opt/ceos:/opt/ceos:rw uilanding: container_name: atd-uilanding - image: us.gcr.io/atd-testdrivetraining-dev/atddocker_uilanding:1.0.0 + image: us.gcr.io/atd-testdrivetraining-dev/atddocker_uilanding:1.0.16 restart: always environment: - PYTHONUNBUFFERED=1 @@ -93,17 +93,46 @@ services: - /etc/atd:/etc/atd:ro - /opt/atd:/opt/atd:ro - /home/arista/arista-dir/apps/uilanding:/opt/modules:ro + - /home/arista/arista-dir/menus:/opt/menus:rw + - /var/run/docker.sock:/var/run/docker.sock:ro networks: - atd_nginx labguides: container_name: atd-labguides - image: us.gcr.io/atd-testdrivetraining-dev/atddocker_labguides:1.0.0 + image: us.gcr.io/atd-testdrivetraining-dev/atddocker_labguides:1.0.1 restart: always environment: - PYTHONUNBUFFERED=1 volumes: - /etc/atd:/etc/atd:ro - /opt/atd:/opt/atd:ro + - /opt/labguides/web/:/root/labguides/web/:rw + networks: + - atd_nginx + syslog: + container_name: atd-syslog + image: us.gcr.io/atd-testdrivetraining-dev/atddocker_syslog:1.0.1 + restart: always + environment: + - PYTHONUNBUFFERED=1 + volumes: + - /home/arista/arista-dir/apps/syslog/:/var/log/remote/:rw + ports: + - "1514:1514" + - "1514:1514/udp" + networks: + - atd_nginx + tacacs: + container_name: atd-tacacs + image: us.gcr.io/atd-testdrivetraining-dev/atddocker_tacacs:1.0.0 + restart: always + environment: + - PYTHONUNBUFFERED=1 + volumes: + - /home/arista/arista-dir/apps/tacacs/config:/etc/tac_plus/tac_user.cfg:ro + - /home/arista/arista-dir/apps/tacacs/tac.log:/var/log/tac_plus.log:rw + ports: + - "49:49" networks: - atd_nginx freerad: @@ -117,7 +146,7 @@ services: - "1813:1813/udp" nginx: container_name: atd-nginx - image: us.gcr.io/atd-testdrivetraining-dev/atddocker_nginx:1.0.2 + image: us.gcr.io/atd-testdrivetraining-dev/atddocker_nginx:1.0.5 restart: always depends_on: - uilanding @@ -158,7 +187,7 @@ services: - ./jenkins/src/groovy/users.groovy.override:/usr/share/jenkins/ref/init.groovy.d/users.groovy.override:rw coder: container_name: atd-coder - image: us.gcr.io/atd-testdrivetraining-dev/atddocker_coder:1.0.1 + image: us.gcr.io/atd-testdrivetraining-dev/atddocker_coder:1.0.2 restart: always user: $ArID:$ArGD command: /home/coder/project diff --git a/nested-labvm/atd-docker/docker_run.sh b/nested-labvm/atd-docker/docker_run.sh new file mode 100644 index 000000000..86fed6a48 --- /dev/null +++ b/nested-labvm/atd-docker/docker_run.sh @@ -0,0 +1,5 @@ +#!/bin/bash + +echo "Starting one-time containers" + +docker run -d --rm -e PYTHONUNBUFFERED=1 --name atd-vtepinfo -v /etc/atd:/etc/atd:rw us.gcr.io/atd-testdrivetraining-dev/atddocker_vtepinfo:0.1.9 \ No newline at end of file diff --git a/nested-labvm/atd-docker/gitConfigletSync/Dockerfile b/nested-labvm/atd-docker/gitConfigletSync/Dockerfile index 1375f67ff..1290cfc24 100644 --- a/nested-labvm/atd-docker/gitConfigletSync/Dockerfile +++ b/nested-labvm/atd-docker/gitConfigletSync/Dockerfile @@ -11,8 +11,9 @@ RUN curl -SsL https://github.com/boxboat/fixuid/releases/download/v0.5/fixuid-0. RUN pip install rcvpapi \ cvprac \ Pyyaml \ - ruamel.yaml - + ruamel.yaml \ + paramiko \ + scp RUN mkdir -p /home/arista/CVP_DATA WORKDIR /home/arista diff --git a/nested-labvm/atd-docker/gitConfigletSync/src/gitConfigletSync.py b/nested-labvm/atd-docker/gitConfigletSync/src/gitConfigletSync.py index 99d8bdbda..e0248ccfe 100644 --- a/nested-labvm/atd-docker/gitConfigletSync/src/gitConfigletSync.py +++ b/nested-labvm/atd-docker/gitConfigletSync/src/gitConfigletSync.py @@ -6,11 +6,18 @@ import yaml from ruamel.yaml import YAML from rcvpapi.rcvpapi import * +from cvprac.cvp_client import CvpClient +from paramiko import SSHClient +from paramiko import AutoAddPolicy +from scp import SCPClient +from os import path from datetime import datetime import urllib3 urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning) ACCESS = '/etc/atd/ACCESS_INFO.yaml' +REPO_PATH = '/opt/atd/' +REPO_TOPO = REPO_PATH + 'topologies/' CVP_CONFIG_FIILE = os.path.expanduser('~/CVP_DATA/.cvpState.txt') sleep_delay = 30 @@ -36,6 +43,45 @@ def syncConfiglet(cvpClient,configletName,configletConfig): ##### End of syncConfiglet +def getTopoInfo(yaml_file): + """ + Function that parses the supplied YAML file to build the CVP topology. + """ + topoInfo = open(yaml_file,'r') + topoYaml = YAML().load(topoInfo) + topoInfo.close() + return(topoYaml) + +def checkConnected(cvp_clnt, NODES): + """ + Function to check if all nodes have connected and + are reachable via ping + Parameters: + cvp_clnt = CVP rCVPAPI client (object) + NODES = EOS Node yaml (dict) + """ + tmp_device_count = len(cvp_clnt.inventory) + while len(NODES) > tmp_device_count: + pS("INFO", "Only {0} out of {1} nodes have registered to CVP. Sleeping {2} seconds.".format(tmp_device_count, len(NODES), sleep_delay)) + time.sleep(sleep_delay) + cvp_clnt.getDeviceInventory() + tmp_device_count = len(cvp_clnt.inventory) + pS("OK", "All {0} out of {1} nodes have registered to CVP.".format(tmp_device_count, len(NODES))) + pS("INFO", "Checking to see if all nodes are reachable") + # Make sure all nodes are up and reachable + for vnode in cvp_clnt.inventory: + while True: + vresponse = cvp_clnt.ipConnectivityTest(cvp_clnt.inventory[vnode]['ipAddress']) + if 'data' in vresponse: + if vresponse['data'] == 'success': + pS("OK", "{0} is up and reachable at {1}".format(vnode, cvp_clnt.inventory[vnode]['ipAddress'])) + break + else: + pS("INFO", "{0} is NOT reachable at {1}. Sleeping {2} seconds.".format(vnode, cvp_clnt.inventory[vnode]['ipAddress'], sleep_delay)) + time.sleep(sleep_delay) + pS("OK", "All Devices are registered and reachable.") + return(True) + def pS(mstat,mtype): """ Function to send output from service file to Syslog @@ -53,7 +99,7 @@ def main(): break else: pS("ERROR", "ACCESS_INFO file is not available...Waiting for {0} seconds".format(sleep_delay)) - sleep(sleep_delay) + time.sleep(sleep_delay) try: f = open(ACCESS) accessinfo = yaml.safe_load(f) @@ -88,6 +134,7 @@ def main(): # rcvpapi clnt var container cvp_clnt = "" + cvprc_clnt = "" # Adding new connection to CVP via rcvpapi while not cvp_clnt: @@ -106,6 +153,49 @@ def main(): else: pS("INFO", "Local copy is missing....Waiting 1 minute for it to become available") time.sleep(60) + while not cvprc_clnt: + try: + cvprac_clnt = CvpClient() + cvprac_clnt.api.request_timeout = 180 + cvprac_clnt.connect([accessinfo['nodes']['cvp'][0]['ip']], cvpUsername, cvpPassword) + cvprc_clnt = CVPCON(accessinfo['nodes']['cvp'][0]['ip'], cvpUsername, cvpPassword) + pS("OK","Connected to CVP at {0}".format(accessinfo['nodes']['cvp'][0]['ip'])) + except: + pS("ERROR","CVP is currently unavailable....Retrying in {0} seconds.".format(sleep_delay)) + time.sleep(sleep_delay) + + # ========================================== + # Check the current version to see if a + # token needs to be generated + # ========================================== + _version = cvprac_clnt.api.get_cvp_info() + _version = _version['version'].split('.') + _version_major = float(f"{_version[0]}.{_version[1]}") + build_yaml = getTopoInfo(REPO_TOPO + accessinfo['topology'] + '/topo_build.yml') + # Perform check if it is a cEOS based topo and 2022.2 or later CVP + if _version_major >= 2022.2 and (accessinfo['eos_type'] == 'ceos' or accessinfo['eos_type'] == 'container-labs'): + pS("INFO", "Generating a token for onboarding...") + _token_response = cvprac_clnt.api.create_enroll_token("24h") + _token_path = path.expanduser(f"~/token") + with open(f"{_token_path}", 'w') as token_out: + token_out.write(_token_response['data']) + # EOS_DEV = [] + for dev in build_yaml['nodes']: + devn = list(dev.keys())[0] + _eos_ip = dev[devn]['ip_addr'] + with SSHClient() as ssh: + ssh.set_missing_host_key_policy(AutoAddPolicy()) + ssh.connect(_eos_ip, username=cvpUsername, password=cvpPassword,) + with SCPClient(ssh.get_transport()) as scp: + pS("INFO", f"Transferring token to {devn}") + scp.put(f"{_token_path}", "/tmp/token") + else: + pS("INFO", f"Version does not require a token for onboarding...") + + # ========================================== + # Check to see how many nodes have connected + # ========================================== + checkConnected(cvp_clnt, build_yaml['nodes']) configlets = os.listdir(gitTempPath + configletPath) @@ -133,17 +223,17 @@ def main(): res = cvp_clnt.impConfiglet("static",configletName,configletConfig) pS("OK", "{0} Configlet: {1}".format(res[0],configletName)) # Perform a check to see if there any pending tasks to be executed due to configlet update - sleep(20) + time.sleep(20) pS("INFO", "Checking for any pending tasks") cvp_clnt.getAllTasks("pending") if cvp_clnt.tasks['pending']: pS("INFO", "{0} Pending tasks found, will be executing".format(len(cvp_clnt.tasks['pending']))) task_response = cvp_clnt.execAllTasks("pending") - sleep(10) + time.sleep(10) while len(cvp_clnt.tasks['pending']) > 0: pS("INFO", "{0} Pending tasks found, will be executing".format(len(cvp_clnt.tasks['pending']))) _tmp_response = cvp_clnt.execAllTasks("pending") - sleep(5) + time.sleep(5) cvp_clnt.getAllTasks("pending") # Perform check to see if there are any existing tasks to be executed if task_response: @@ -160,7 +250,27 @@ def main(): break else: pS("INFO", "Task ID: {0} Status: {1}, Waiting 10 seconds...".format(task_id, task_status)) - sleep(10) + time.sleep(10) + # Perform check to see if any tasks failed + cvp_clnt.getAllTasks("failed") + if len(cvp_clnt.tasks["failed"]) > 0: + pS("INFO", "Failed tasks found, will execute tasks...") + task_response = cvp_clnt.execAllTasks("failed") + if task_response: + pS("OK", "All pending tasks are executing") + for task_id in task_response['ids']: + task_status = cvp_clnt.getTaskStatus(task_id)['taskStatus'] + while task_status != "Completed": + task_status = cvp_clnt.getTaskStatus(task_id)['taskStatus'] + if task_status == 'Failed': + pS("iBerg", "Task ID: {0} Status: {1}".format(task_id, task_status)) + break + elif task_status == 'Completed': + pS("INFO", "Task ID: {0} Status: {1}".format(task_id, task_status)) + break + else: + pS("INFO", "Task ID: {0} Status: {1}, Waiting 10 seconds...".format(task_id, task_status)) + time.sleep(10) else: pS("INFO", "No pending tasks found to be executed.") @@ -174,4 +284,4 @@ def main(): else: pS("INFO", "CVP not provisioned, holding off on configlet sync.") while True: - sleep(600) \ No newline at end of file + time.sleep(600) \ No newline at end of file diff --git a/nested-labvm/atd-docker/labguides/src/build_labguides.sh b/nested-labvm/atd-docker/labguides/src/build_labguides.sh index 68a0a7f3a..3bea11217 100644 --- a/nested-labvm/atd-docker/labguides/src/build_labguides.sh +++ b/nested-labvm/atd-docker/labguides/src/build_labguides.sh @@ -1,45 +1,45 @@ #!/bin/bash -while [ $(cat /etc/atd/ACCESS_INFO.yaml | shyaml get-value login_info.jump_host.pw) == 'REPLACE_PWD' ] -do - echo "Password has not been updated yet. sleeping..." - sleep 10 -done +# while [ $(cat /etc/atd/ACCESS_INFO.yaml | shyaml get-value login_info.jump_host.pw) == 'REPLACE_PWD' ] +# do +# echo "Password has not been updated yet. sleeping..." +# sleep 10 +# done -TOPO=$(cat /etc/atd/ACCESS_INFO.yaml | shyaml get-value topology) -ARISTA_PWD=$(cat /etc/atd/ACCESS_INFO.yaml | shyaml get-value login_info.jump_host.pw) -EOS_TYPE=$(cat /etc/atd/ACCESS_INFO.yaml | python3 -m shyaml get-value eos_type) +# TOPO=$(cat /etc/atd/ACCESS_INFO.yaml | shyaml get-value topology) +# ARISTA_PWD=$(cat /etc/atd/ACCESS_INFO.yaml | shyaml get-value login_info.jump_host.pw) +# EOS_TYPE=$(cat /etc/atd/ACCESS_INFO.yaml | python3 -m shyaml get-value eos_type) -# Clean up previous stuff to make sure it's current -#rm -rf /home/arista/labguides/build +# # Clean up previous stuff to make sure it's current +# #rm -rf /home/arista/labguides/build -cp -r /opt/atd/topologies/$TOPO/labguides/* /root/labguides/ +# cp -r /opt/atd/topologies/$TOPO/labguides/* /root/labguides/ -# Update the Arista user password for connecting to the labvm -find /root/labguides/source/* -type f -print0 | xargs -0 sed -i "s/{REPLACE_PWD}/$ARISTA_PWD/g" +# # Update the Arista user password for connecting to the labvm +# find /root/labguides/source/* -type f -print0 | xargs -0 sed -i "s/{REPLACE_PWD}/$ARISTA_PWD/g" -if [ $EOS_TYPE == 'ceos' ] -then - find /root/labguides/source/* -type f -print0 | xargs -0 sed -i "s/Management1/Management0/g" -fi +# if [ $EOS_TYPE == 'ceos' ] +# then +# find /root/labguides/source/* -type f -print0 | xargs -0 sed -i "s/Management1/Management0/g" +# fi -# chown -R arista:arista /home/arista/labguides/src/ +# # chown -R arista:arista /home/arista/labguides/src/ -# Build the lab guides html files -cd /root/labguides/ -make html -sphinx-build -b latex source build +# # Build the lab guides html files +# cd /root/labguides/ +# make html +# sphinx-build -b latex source build -# Build the lab guides PDF -make latexpdf LATEXOPTS=-interaction=nonstopmode +# # Build the lab guides PDF +# make latexpdf LATEXOPTS=-interaction=nonstopmode -rm -r /root/labguides/web/* +# rm -r /root/labguides/web/* -# Put the new HTML and PDF in the proper directories -mv /root/labguides/build/latex/ATD.pdf /root/labguides/web/ -mv /root/labguides/build/html/* /root/labguides/web/ +# # Put the new HTML and PDF in the proper directories +# mv /root/labguides/build/latex/ATD.pdf /root/labguides/web/ +# mv /root/labguides/build/html/* /root/labguides/web/ -echo Labguide build complete +# echo Labguide build complete cd /root diff --git a/nested-labvm/atd-docker/login/Dockerfile b/nested-labvm/atd-docker/login/Dockerfile index 8fb369598..8f5ce9217 100644 --- a/nested-labvm/atd-docker/login/Dockerfile +++ b/nested-labvm/atd-docker/login/Dockerfile @@ -31,16 +31,26 @@ RUN mkdir .ssh COPY src/login.py /usr/local/bin +COPY src/callConfigTopo.py /usr/local/bin + COPY src/resetVMs.py /usr/local/bin +COPY src/lab_status.py /usr/local/bin + COPY src/uploadExam.py /usr/local/bin COPY src/localGrading.py /usr/local/bin COPY src/saveRunning.py /usr/local/bin +COPY src/qa-steps.py /usr/local/bin + +RUN chmod +x /usr/local/bin/lab_status.py + RUN chmod +x /usr/local/bin/login.py +RUN chmod +x /usr/local/bin/qa-steps.py + RUN chmod +x /usr/local/bin/resetVMs.py RUN chmod +x /usr/local/bin/uploadExam.py @@ -67,4 +77,4 @@ EXPOSE 22 USER arista -CMD ["/usr/local/bin/entrypoint.sh"] +CMD ["/usr/local/bin/entrypoint.sh"] \ No newline at end of file diff --git a/nested-labvm/atd-docker/login/src/ConfigureTopology/ConfigureTopology.py b/nested-labvm/atd-docker/login/src/ConfigureTopology/ConfigureTopology.py index 1f25038dc..de73e32de 100644 --- a/nested-labvm/atd-docker/login/src/ConfigureTopology/ConfigureTopology.py +++ b/nested-labvm/atd-docker/login/src/ConfigureTopology/ConfigureTopology.py @@ -243,6 +243,7 @@ def deploy_lab(self): input('Lab Setup Completed. Please press Enter to continue...') self.send_to_syslog("OK", 'Lab Setup Completed.') else: + print('Lab Setup Completed. ') self.send_to_syslog("OK", 'Lab Setup Completed.') all_tasks_completed = True else: @@ -279,4 +280,5 @@ def deploy_lab(self): input('Lab Setup Completed. Please press Enter to continue...') self.send_to_syslog("OK", 'Lab Setup Completed.') else: - self.send_to_syslog("OK", 'Lab Setup Completed.') + print('Lab Setup Completed. ') + self.send_to_syslog("OK", 'Lab Setup Completed.') \ No newline at end of file diff --git a/nested-labvm/atd-docker/login/src/callConfigTopo.py b/nested-labvm/atd-docker/login/src/callConfigTopo.py new file mode 100644 index 000000000..b1a406846 --- /dev/null +++ b/nested-labvm/atd-docker/login/src/callConfigTopo.py @@ -0,0 +1,4 @@ +from ConfigureTopology.ConfigureTopology import ConfigureTopology +import sys +#ConfigureTopology(selected_menu='training-l3',selected_lab='reset',public_module_flag=True) +ConfigureTopology(selected_menu=str(sys.argv[1]),selected_lab=str(sys.argv[2]),public_module_flag=True) \ No newline at end of file diff --git a/nested-labvm/atd-docker/login/src/lab_status.py b/nested-labvm/atd-docker/login/src/lab_status.py new file mode 100644 index 000000000..2f48a3b8f --- /dev/null +++ b/nested-labvm/atd-docker/login/src/lab_status.py @@ -0,0 +1,70 @@ +#!/usr/bin/env python + +import libvirt +import time +import jsonrpclib +import yaml +import ssl +import sys + +try: + _create_unverified_https_context = ssl._create_unverified_context +except AttributeError: + pass +else: + ssl._create_default_https_context = _create_unverified_https_context + + +labACCESS = '/etc/atd/ACCESS_INFO.yaml' + + +def readLabDetails(): + # get the lab password and the topolgy in use + with open(labACCESS) as f: + labDetails = yaml.load(f,Loader=yaml.FullLoader) + return labDetails['login_info']['jump_host']['pw'], labDetails['topology'] + + + +def readAtdTopo(labTopology): + #get a list of all IP addresses in the topology + with open("/opt/atd/topologies/"+ labTopology +"/topo_build.yml") as f: + topology = yaml.load(f,Loader=yaml.FullLoader) + # print(topology) + mylist= topology['nodes'] + test=[] + for item in mylist: + test.append(list(item.keys())) + hostsName = [item for sublist in test for item in sublist] + hostsIP = [] + for a in topology['nodes']: + for key in a.keys(): + hostsIP.append(a[key]['ip_addr']) + return hostsIP, hostsName + + +def _get_libvirt_machine(machine): + #libvirt.registerErrorHandler(f=_libvirt_silence_error, ctx=None) + try: + conn = libvirt.open("qemu:///system") + except: + print("Unable to connect to local HV. Are you using sudo?") + sys.exit() + else: + libvirt_machine = conn.lookupByName(machine) + return libvirt_machine + + +def main(): + labPassword, labTopology = readLabDetails() + allHostsIP, allHostsName = readAtdTopo(labTopology) + switch_status=[] + for name, ip in zip(allHostsName,allHostsIP): + switch = jsonrpclib.Server("https://arista:{password}@{ipaddress}/command-api".format(password = labPassword, ipaddress = ip)) + try: + switch.runCmds(1,["show version"]) + except: + print("{switch},Down".format(switch = name)) + else: + print("{switch},Ok".format(switch = name)) +main() \ No newline at end of file diff --git a/nested-labvm/atd-docker/login/src/login.py b/nested-labvm/atd-docker/login/src/login.py index 8963dc2fb..5f2d3780e 100644 --- a/nested-labvm/atd-docker/login/src/login.py +++ b/nested-labvm/atd-docker/login/src/login.py @@ -86,9 +86,9 @@ def device_menu(): # Sort veos instances veos_info_sorted = sort_veos(veos_info) - print("\n\n*****************************************") - print("*****Jump Host for Arista Test Drive*****") - print("*****************************************") + print("\n\n*******************************************") + print("*****Jump Host for Arista Training Labs****") + print("*******************************************") print("\n\n==========Device SSH Menu==========\n") print("Screen Instructions:\n") @@ -107,6 +107,7 @@ def device_menu(): counter += 1 print("\nOther Options: ") + print("95. Upload your exam (exam)") print("96. Screen (screen) - Opens a screen session to each of the hosts") print("97. Back to Previous Menu (back)") print("98. Shell (shell/bash)") @@ -121,6 +122,8 @@ def device_menu(): os.system('ssh -o StrictHostKeyChecking=no ' + device_dict[user_input]) elif user_input == '96' or user_input.lower() == 'screen': os.system('/usr/bin/screen') + elif user_input == '95' or user_input.lower() == 'exam': + os.system('uploadExam.py') elif user_input == '97' or user_input.lower() == 'back': if menu_mode == previous_menu: menu_mode = 'MAIN' @@ -145,9 +148,9 @@ def lab_options_menu(): global previous_menu os.system("clear") - print("\n\n*****************************************") - print("*****Jump Host for Arista Test Drive*****") - print("*****************************************") + print("\n\n*******************************************") + print("*****Jump Host for Arista Training Labs****") + print("*******************************************") if menu_mode == 'LAB_OPTIONS': # Get Yaml Files in /home/arista/menus @@ -263,9 +266,9 @@ def main_menu(): global previous_menu os.system("clear") - print("\n\n*****************************************") - print("*****Jump Host for Arista Test Drive*****") - print("*****************************************") + print("\n\n*******************************************") + print("*****Jump Host for Arista Training Labs****") + print("*******************************************") print("\n\n==========Main Menu==========\n") print("Please select from the following options: ") @@ -369,4 +372,4 @@ def main(): os.system("/bin/bash") if __name__ == '__main__': - main() + main() \ No newline at end of file diff --git a/nested-labvm/atd-docker/login/src/qa-steps.py b/nested-labvm/atd-docker/login/src/qa-steps.py new file mode 100644 index 000000000..85ffc3d46 --- /dev/null +++ b/nested-labvm/atd-docker/login/src/qa-steps.py @@ -0,0 +1,90 @@ +#!/usr/bin/env python +from base64 import b64decode, b64encode +import time +import jsonrpclib +import yaml +import ssl +import sys +import traceback +import json +import requests +TOPO_API = 'atd-conftopo' +try: + _create_unverified_https_context = ssl._create_unverified_context +except AttributeError: + pass +else: + ssl._create_default_https_context = _create_unverified_https_context + + +labACCESS = '/etc/atd/ACCESS_INFO.yaml' + + +def readLabDetails(): + # get the lab password and the topolgy in use + with open(labACCESS) as f: + labDetails = yaml.load(f,Loader=yaml.FullLoader) + return labDetails['login_info']['jump_host']['pw'], labDetails['topology'] + + + +def readAtdTopo(labTopology): + #get a list of all IP addresses in the topology + with open("/opt/atd/topologies/"+ labTopology +"/topo_build.yml") as f: + topology = yaml.load(f,Loader=yaml.FullLoader) + # print(topology) + mylist= topology['nodes'] + test=[] + for item in mylist: + test.append(list(item.keys())) + hostsName = [item for sublist in test for item in sublist] + hostsIP = [] + for a in topology['nodes']: + for key in a.keys(): + hostsIP.append(a[key]['ip_addr']) + return hostsIP, hostsName + + +def encodeID(tmp_data): + tmp_str = json.dumps(tmp_data).encode() + enc_str = b64encode(tmp_str).decode() + return(enc_str) + +def getAPI(action): + try: + _action = encodeID(action) + response = requests.get(f"http://{TOPO_API}:50010/td-api/conftopo?action={_action}") + return(json.loads(response.text)) + except Exception as e: + print("Error calling backend API.") + traceback.print_exc() + print("Message: {err}".format( + err = str(e), + )) + return (e) + +def main(): + status = 0 + switches={} + labPassword, labTopology = readLabDetails() + allHostsIP, allHostsName = readAtdTopo(labTopology) + try: + for name, ip in zip(allHostsName,allHostsIP): + name=name.replace('-','') + switches[name]={} + switch = jsonrpclib.Server("https://arista:{password}@{ipaddress}/command-api".format(password = labPassword, ipaddress = ip)) + switches[name]["hostname"]=switch.runCmds(1,["show hostname"])[0]["hostname"] + switches[name]["ztp_mode"]=switch.runCmds(1,["show zerotouch"])[0]['mode'] + if name != switches[name]['hostname'] or switches[name]['ztp_mode']!='disabled': + return("failed") + switches["cvp_status"]=getAPI("cvp_tasks") + if isinstance(switches["cvp_status"], Exception): + return("failed") + elif switches["cvp_status"]['status'] == 'Complete': + return("success") + else: + return ("failed") + except Exception as e: + print(e) + return("failed") +print(main()) \ No newline at end of file diff --git a/nested-labvm/atd-docker/login/src/resetVMs.py b/nested-labvm/atd-docker/login/src/resetVMs.py index 7c41a00f3..abe0ebb26 100644 --- a/nested-labvm/atd-docker/login/src/resetVMs.py +++ b/nested-labvm/atd-docker/login/src/resetVMs.py @@ -69,7 +69,10 @@ def main(): print("Switch {switch} appears to have no eAPI connectivity".format(switch = name)) machine_to_kill = _get_libvirt_machine(name) print("Restarting {switch}".format(switch = name)) - machine_to_kill.destroy() + try: + machine_to_kill.destroy() + except: + print("Switch does not exists.") time.sleep(3) machine_to_kill.create() print("Restarted {switch}".format(switch = name)) @@ -83,4 +86,4 @@ def main(): print("No problems were detected, please check with your instructor") -main() +main() \ No newline at end of file diff --git a/nested-labvm/atd-docker/nginx/src/atd.conf b/nested-labvm/atd-docker/nginx/src/atd.conf index 371e0a5dd..8608d5b26 100644 --- a/nested-labvm/atd-docker/nginx/src/atd.conf +++ b/nested-labvm/atd-docker/nginx/src/atd.conf @@ -14,6 +14,7 @@ server { } server { listen 443 ssl; + http2 on; ssl_certificate /etc/nginx/certs/fullchain.pem; ssl_certificate_key /etc/nginx/certs/privkey.pem; ssl_session_cache builtin:1000 shared:SSL:10m; @@ -51,6 +52,35 @@ server { proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } + location /host1 { + proxy_pass http://192.168.0.1:6001/; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + proxy_ssl_verify off; + proxy_hide_header Content-Security-Policy; + proxy_buffering off; + proxy_read_timeout 90; + client_max_body_size 800M; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection $http_connection; + } + location /host2 { + proxy_pass http://192.168.0.1:6002/; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + proxy_ssl_verify off; + proxy_hide_header Content-Security-Policy; + proxy_buffering off; + proxy_read_timeout 90; + client_max_body_size 800M; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection $http_connection; + + } location /uptime { access_log off; proxy_pass http://atd-uptime:50010; @@ -94,7 +124,14 @@ server { proxy_read_timeout 86400; } } - location ~ ^/(cv|static|api|web) { + location ~ ^/(grpc-web/arista\..*|arista\..*) { + grpc_pass grpcs://192.168.0.5:443; + grpc_ssl_verify off; + grpc_read_timeout 14400; + grpc_send_timeout 14400; + client_body_timeout 14400; + } + location ~ ^/(cv|grpc-web|cvpservice|static|api|web|assets) { proxy_pass https://192.168.0.5; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; diff --git a/nested-labvm/atd-docker/syslog/Dockerfile b/nested-labvm/atd-docker/syslog/Dockerfile new file mode 100644 index 000000000..f58930723 --- /dev/null +++ b/nested-labvm/atd-docker/syslog/Dockerfile @@ -0,0 +1,19 @@ +FROM ubuntu:14.04 + +ENV DEBIAN_FRONTEND noninteractive + +ADD ./src/rsyslog.list /etc/apt/sources.list.d/rsyslog.list +RUN apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 0F6DD8135234BF2B +RUN apt-get update && \ + apt-get install -y rsyslog + +# Create app structure +RUN mkdir -p /var/log/remote/ +ADD ./src/rsyslog.conf /etc/rsyslog.conf +VOLUME /var/log/remote/ +# Set the syslog user and group explicitly +RUN chmod -R 777 /var/log/remote/ + +EXPOSE 1514 +EXPOSE 1514/udp +CMD /usr/sbin/rsyslogd -n -f /etc/rsyslog.conf \ No newline at end of file diff --git a/nested-labvm/atd-docker/syslog/src/rsyslog.conf b/nested-labvm/atd-docker/syslog/src/rsyslog.conf new file mode 100644 index 000000000..536ab393b --- /dev/null +++ b/nested-labvm/atd-docker/syslog/src/rsyslog.conf @@ -0,0 +1,68 @@ +# /etc/rsyslog.conf Configuration file for rsyslog. +# +# For more information see +# /usr/share/doc/rsyslog-doc/html/rsyslog_conf.html +# +# Default logging rules can be found in /etc/rsyslog.d/50-default.conf + + +################# +#### MODULES #### +################# + +# provides UDP syslog reception +$ModLoad imudp +$UDPServerRun 1514 + +# provides TCP syslog reception +$ModLoad imtcp +$InputTCPServerRun 1514 + +########################### +#### GLOBAL DIRECTIVES #### +########################### + +# +# Use traditional timestamp format. +# To enable high precision timestamps, comment out the following line. +# +$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat + +# Filter duplicated messages +$RepeatedMsgReduction on + +# +# Set the default permissions for all log files. +# +$FileOwner root +$FileGroup root +$FileCreateMode 0777 +$DirCreateMode 0777 +$Umask 0022 +$PrivDropToUser root +$PrivDropToGroup root + +# +# Where to place spool and state files +# +$WorkDirectory /var/spool/rsyslog + +# +# Include all config files in /etc/rsyslog.d/ +# +$IncludeConfig /etc/rsyslog.d/*.conf + +########################### +#### Central log stuff #### +########################### +template (name="HostLogs" type="string" string="/var/log/remote/%FROMHOST%/%programname%.%$YEAR%-%$MONTH%-%$DAY%.log") + +ruleset(name="remote"){ + action(type="omfile" DynaFile="HostLogs") +} + +input(type="imtcp" port="1514" ruleset="remote") +input(type="imudp" port="1514" ruleset="remote") +# remote host is: name/ip:port, e.g. 192.168.0.1:514, port optional +*.* @@192.168.0.24:514 +# ### end of the forwarding rule ### \ No newline at end of file diff --git a/nested-labvm/atd-docker/syslog/src/rsyslog.conf.client b/nested-labvm/atd-docker/syslog/src/rsyslog.conf.client new file mode 100644 index 000000000..317e18130 --- /dev/null +++ b/nested-labvm/atd-docker/syslog/src/rsyslog.conf.client @@ -0,0 +1,47 @@ +# /etc/rsyslog.conf Configuration file for rsyslog. +# +# For more information see +# /usr/share/doc/rsyslog-doc/html/rsyslog_conf.html +# +# Default logging rules can be found in /etc/rsyslog.d/50-default.conf + + +################# +#### MODULES #### +################# + +########################### +#### GLOBAL DIRECTIVES #### +########################### + +# +# Use traditional timestamp format. +# To enable high precision timestamps, comment out the following line. +# +$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat + +# Filter duplicated messages +$RepeatedMsgReduction on + +# +# Set the default permissions for all log files. +# +$FileOwner syslog +$FileGroup adm +$FileCreateMode 0640 +$DirCreateMode 0755 +$Umask 0022 +$PrivDropToUser syslog +$PrivDropToGroup syslog + +# +# Where to place spool and state files +# +$WorkDirectory /var/spool/rsyslog + +# +# Include all config files in /etc/rsyslog.d/ +# +#$IncludeConfig /etc/rsyslog.d/*.conf + +*.* @@rsyslog.services.thalarion.be:1514 \ No newline at end of file diff --git a/nested-labvm/atd-docker/syslog/src/rsyslog.list b/nested-labvm/atd-docker/syslog/src/rsyslog.list new file mode 100644 index 000000000..da5cbeb24 --- /dev/null +++ b/nested-labvm/atd-docker/syslog/src/rsyslog.list @@ -0,0 +1,2 @@ +deb http://ppa.launchpad.net/adiscon/v8-stable/ubuntu trusty main +deb-src http://ppa.launchpad.net/adiscon/v8-stable/ubuntu trusty main \ No newline at end of file diff --git a/nested-labvm/atd-docker/tacacs/Dockerfile b/nested-labvm/atd-docker/tacacs/Dockerfile new file mode 100644 index 000000000..4bff971df --- /dev/null +++ b/nested-labvm/atd-docker/tacacs/Dockerfile @@ -0,0 +1,28 @@ +FROM alpine:latest as base +ENV VERSION=201712190728 +ENV TAC_PLUS_BIN=/tacacs/sbin/tac_plus +ENV CONF_FILE=/etc/tac_plus/tac_plus.cfg + + +FROM base as build +RUN apk add --no-cache \ + build-base bzip2 perl perl-digest-md5 perl-ldap +ADD http://www.pro-bono-publico.de/projects/src/DEVEL.$VERSION.tar.bz2 /tac_plus.tar.bz2 +ADD http://www.pro-bono-publico.de/projects/unpacked/mavis/perl/mavis_tacplus_radius.pl /mavis_tacplus_radius.pl +RUN tar -xjf /tac_plus.tar.bz2 && \ + cd /PROJECTS && \ + ./configure --prefix=/tacacs && \ + make && \ + make install + + +FROM base +COPY --from=build /tacacs /tacacs +COPY --from=build /mavis_tacplus_radius.pl /usr/local/lib/mavis_tacplus_radius.pl +COPY ./src/tac_base.cfg $CONF_FILE +COPY ./src/entrypoint.sh /entrypoint.sh + +RUN apk add --no-cache perl perl-digest-md5 perl-ldap && \ + chmod u+x /entrypoint.sh +EXPOSE 49 +ENTRYPOINT ["/entrypoint.sh"] \ No newline at end of file diff --git a/nested-labvm/atd-docker/tacacs/src/config b/nested-labvm/atd-docker/tacacs/src/config new file mode 100644 index 000000000..8ef85cfa0 --- /dev/null +++ b/nested-labvm/atd-docker/tacacs/src/config @@ -0,0 +1,20 @@ +key = "COOKBOOK" +group = limited { + default service = deny +} +user = fedexuser { + # default service = permit + login = clear fedexuser + # member = limited + service = shell { + set priv-lvl = 15 + cmd = show { + deny running-config + permit .* + } + } +} +user = fedex { + default service = permit + login = clear arista +} \ No newline at end of file diff --git a/nested-labvm/atd-docker/tacacs/src/entrypoint.sh b/nested-labvm/atd-docker/tacacs/src/entrypoint.sh new file mode 100644 index 000000000..b00dc6332 --- /dev/null +++ b/nested-labvm/atd-docker/tacacs/src/entrypoint.sh @@ -0,0 +1,22 @@ +#!/bin/sh + +# Check configuration file exists +if [ ! -f /etc/tac_plus/tac_plus.cfg ]; then + echo "No configuration file at ${CONF_FILE}" + exit 1 +fi + +# Check configuration file for syntax errors +${TAC_PLUS_BIN} -P ${CONF_FILE} +if [ $? -ne 0 ]; then + echo "Invalid configuration file" + exit 1 +fi + +# Make the log directories +mkdir -p /var/log/tac_plus + +echo "Starting server..." + +# Start the server +exec ${TAC_PLUS_BIN} -f ${CONF_FILE} \ No newline at end of file diff --git a/nested-labvm/atd-docker/tacacs/src/tac_base.cfg b/nested-labvm/atd-docker/tacacs/src/tac_base.cfg new file mode 100644 index 000000000..0a4b30c48 --- /dev/null +++ b/nested-labvm/atd-docker/tacacs/src/tac_base.cfg @@ -0,0 +1,43 @@ +id = spawnd { + listen = { port = 49 } + spawn = { + instances min = 1 + instances max = 10 + } + background = no +} + +id = tac_plus { + debug = AUTHOR AUTHEN + + log = stdout { + destination = /proc/1/fd/1 + } + + log = stderr { + destination = /dev/stderr + } + + log = file { + destination = /var/log/tac_plus.log + } + + # Seems to have problems with STDOUT, so we'll log to STDERR as well (this works fine!) + authentication log = stderr + authorization log = stderr + accounting log = stderr + + #authentication log = stdout + #authorization log = stdout + #accounting log = stdout + + authentication log = file + authorization log = file + accounting log = file + + user = $enable$ { + login = clear enable + } + + include = /etc/tac_plus/tac_user.cfg +} \ No newline at end of file diff --git a/nested-labvm/atd-docker/uilanding/Dockerfile b/nested-labvm/atd-docker/uilanding/Dockerfile index 37dcd1fdf..fb323b25d 100644 --- a/nested-labvm/atd-docker/uilanding/Dockerfile +++ b/nested-labvm/atd-docker/uilanding/Dockerfile @@ -3,7 +3,7 @@ FROM python:3.9 RUN pip install --upgrade pip -RUN pip install tornado requests ruamel.yaml +RUN pip install tornado requests ruamel.yaml docker RUN mkdir -p /opt/topo/html @@ -11,6 +11,12 @@ RUN mkdir -p /root/labguides WORKDIR /root +RUN apt-get update && \ + apt-get -qy full-upgrade && \ + apt-get install -qy curl && \ + apt-get install -qy curl && \ + curl -sSL https://get.docker.com/ | sh + COPY ./src/html /opt/topo/html/ COPY ./src/uilanding.py /usr/local/bin/uilanding @@ -20,4 +26,3 @@ RUN chmod +x /usr/local/bin/uilanding EXPOSE 80 CMD ["uilanding"] - diff --git a/nested-labvm/atd-docker/uilanding/Dockerfile copy b/nested-labvm/atd-docker/uilanding/Dockerfile copy new file mode 100644 index 000000000..8b1378917 --- /dev/null +++ b/nested-labvm/atd-docker/uilanding/Dockerfile copy @@ -0,0 +1 @@ + diff --git a/nested-labvm/atd-docker/uilanding/src/html/css/style.css b/nested-labvm/atd-docker/uilanding/src/html/css/style.css new file mode 100644 index 000000000..520fd6131 --- /dev/null +++ b/nested-labvm/atd-docker/uilanding/src/html/css/style.css @@ -0,0 +1,78 @@ +#spinner { + position: fixed; + top: 0; + left: 0; + opacity: 0.5; + z-index: 60; + width: 100vw; + height: 100vh; + display: flex; + justify-content: center; + align-items: center; + background: white; + } + #spinner img { + height: 100px; + width: 100px; + } + #tooltiptext { + visibility: hidden; + background-color: black; + color: #fff; + text-align: center; + padding: 5px 0; + border-radius: 6px; + position: absolute; + z-index: 1; + text-align: center; + display: flex; + margin-left: 12px; + width: 200px; + } + + table { + font-family: arial, sans-serif; + border-collapse: collapse; + width: 100%; + } + + td, + th { + border: 1px solid #dddddd; + text-align: left; + text-align: center; + padding: 8px; + } + + .modal { + display: none; + position: fixed; + padding-top: 100px; + left: 0; + top: 0; + width: 100%; + height: 100%; + overflow: auto; + background-color: rgb(0, 0, 0); + background-color: rgba(0, 0, 0, 0.4); + } + .modal-content { + background-color: #fefefe; + margin: auto; + padding: 20px; + border: 1px solid #888; + width: 80%; + } + .close { + color: #aaaaaa; + float: right; + font-size: 28px; + font-weight: bold; + } + + .close:hover, + .close:focus { + color: #000; + text-decoration: none; + cursor: pointer; + } \ No newline at end of file diff --git a/nested-labvm/atd-docker/uilanding/src/html/index.html b/nested-labvm/atd-docker/uilanding/src/html/index.html index fa257c69c..a4e6c1a57 100755 --- a/nested-labvm/atd-docker/uilanding/src/html/index.html +++ b/nested-labvm/atd-docker/uilanding/src/html/index.html @@ -12,12 +12,18 @@ - + + +
@@ -26,14 +32,27 @@

+
  • + Home +
  • {% if "labguides" not in disable_links %}
  • - Lab Guides (PDF) + Lab Guides
  • {% end %} {% if "console" not in disable_links %}
  • - Console Access + Switch Access + +
  • + {% end %} + {% if "cvp" not in disable_links %} +
  • + CVP + CVP is Starting, Please wait +
  • +
  • + CVP
  • {% end %} {% if "ide" not in disable_links %} @@ -46,14 +65,23 @@ WebUI {% end %} - {% if "cvp" not in disable_links %} + + {% if "jenkins" not in disable_links %}
  • - CVP + Jenkins
  • {% end %} - {% if "jenkins" not in disable_links %} + {% if "lab_menu" not in disable_links %}
  • - Jenkins + Lab Menu +
  • + {% end %} +
  • + Passwords +
  • + {% if "lab_status" not in disable_links %} +
  • + Lab Status
  • {% end %} @@ -63,6 +91,7 @@
    +

    Arista {{ topo_title }}

    Welcome to the Arista {{ topo_title }}! Please use the links on the left to navigate through the lab.

    @@ -80,29 +109,122 @@

    Topology

    {{ escape(node) }} {% end %} {% end %} + {% for gui_url in zip(GUI_URLS,SERVERS) %} + {{ escape(gui_url[1]) }} + {% end %}

    {% if topo_cvp %}

    {% end %} -

    Usernames and Passwords

    - Use the following usernames and passwords to access the ATD: -
    -
    - - - - - - -
    Device Username Password
    Lab Credentials arista {{ ARISTA_PWD }}
    Programmability IDE {{ ARISTA_PWD }}
    WebUI @rista1
    +
    + + + + + +
    +
    - + @@ -110,8 +232,9 @@

    Usernames and Passwords

    + - + \ No newline at end of file diff --git a/nested-labvm/atd-docker/uilanding/src/html/js/atd-ws.js b/nested-labvm/atd-docker/uilanding/src/html/js/atd-ws.js index 75575387d..c48d4d7a6 100644 --- a/nested-labvm/atd-docker/uilanding/src/html/js/atd-ws.js +++ b/nested-labvm/atd-docker/uilanding/src/html/js/atd-ws.js @@ -40,6 +40,33 @@ function createWS(SOCK_URL) { { var re_data = evt.data; var received_msg = JSON.parse(re_data); + console.log(received_msg) + reg_data = received_msg['data']; + if (reg_data['cvp'] && reg_data['cvp']['status'] && reg_data['cvp']['status'] != 'UP') { + + btn = document.getElementById('labBtn') + if (btn) { + btn.disabled = true + cvp = document.getElementById('cvpStatus') + if (cvp) { + cvp.textContent = "CVP is currently starting, Lab menu will be available once CVP is up" + document.getElementById('cvpLoading').style.display = "block" + document.getElementById('cvpLoaded').style.display = "none" + } + } + } else { + btn = document.getElementById('labBtn') + if (btn) { + btn.disabled = false + cvp = document.getElementById('cvpStatus') + if (cvp) { + cvp.textContent = "" + document.getElementById('cvpLoading').style.display = "none" + document.getElementById('cvpLoaded').style.display = "block" + } + } + + } if (received_msg['type'] == 'ping') { ws.send(JSON.stringify({ type: "pong", @@ -117,4 +144,4 @@ function instanceCountdown(element, boot_time, runtime) { el.style.color = count_style; }, 1000); event_timer_ids[element] = interval; -} +} \ No newline at end of file diff --git a/nested-labvm/atd-docker/uilanding/src/html/js/backend.js b/nested-labvm/atd-docker/uilanding/src/html/js/backend.js new file mode 100644 index 000000000..5a75d2c50 --- /dev/null +++ b/nested-labvm/atd-docker/uilanding/src/html/js/backend.js @@ -0,0 +1,173 @@ +const labStaustext = document.getElementById("labStatusByApi"); +labStaustext.innerHTML = "Please wait, Lab Status is being loaded..."; +let failedSwitches = [] +const checkIsAllSwitchesOK = localStorage.getItem('isAllSwitchesOk') +isAllSwitchesOk = true; +if (checkIsAllSwitchesOK == 'yes' || checkIsAllSwitchesOK == undefined) { + isAllSwitchesOk = true; +} else { + isAllSwitchesOk = false; +} +resetRequestSubmittedTime = localStorage.getItem('resetRequestSubmittedTime') +if (resetRequestSubmittedTime) { + document.getElementById('resetOkMSG').innerHTML = "Please wait, reset request has been submitted at " + resetRequestSubmittedTime +} +$('#labMenu').click(function (event) { + document.getElementById('labMenuDiv').style.display = 'block' + document.getElementById('mainContent').style.display = 'none' + document.getElementById('labStatusContent').style.display = 'none' + document.getElementById('labGradingData').style.display = 'none' + clearInterval(labStatusInterval) +}); +$('#home').click(function (event) { + document.getElementById('labMenuDiv').style.display = 'none' + document.getElementById('mainContent').style.display = 'block' + document.getElementById('labStatusContent').style.display = 'none' + document.getElementById('labGradingData').style.display = 'none' + clearInterval(labStatusInterval) +}) +$('#labStaus').click(function (event) { + document.getElementById('labMenuDiv').style.display = 'none' + document.getElementById('mainContent').style.display = 'none' + document.getElementById('labStatusContent').style.display = 'block' + document.getElementById('labGradingData').style.display = 'none' + getLabStatus() + labStatusInterval = setInterval( + () => { + getLabStatus() + }, 30000 + ) +}) +$('#labGrading').click(function (event) { + document.getElementById('labMenuDiv').style.display = 'none' + document.getElementById('mainContent').style.display = 'none' + document.getElementById('labStatusContent').style.display = 'none' + document.getElementById('labGradingData').style.display = 'block' + clearInterval(labStatusInterval) +}) + +$('#resetLabs').click((event) => { + if (confirm('Please click ok to reset below switches \n-' + failedSwitches.join('\n-'))) { + document.getElementById('resetLabs').innerHTML = '' + document.getElementById('resetOkMSG').innerHTML = "Please wait, reset request has been submitted at " + new Date().toLocaleDateString() + ' ' + new Date().toLocaleTimeString() + isAllSwitchesOk = false; + localStorage.setItem('isAllSwitchesOk', 'no') + localStorage.setItem('resetRequestSubmittedTime', new Date().toLocaleDateString() + ' ' + new Date().toLocaleTimeString()) + $.get('/resetLab?lab_names=' + failedSwitches.join(','), (res) => { + + }) + } +}) + + +function getLabStatus() { + let switchesTable = document.getElementById("labStatusByApi"); + + + $.get('/labStaus', (res) => { + switchesTable.innerHTML = ""; + failedSwitches = [] + res.response.forEach( + (item) => { + let row = document.createElement("tr"); + let labName = document.createElement("td"); + values = item.split(',') + labName.innerHTML = values[0]; + let labStatus = document.createElement("td"); + labStatus.innerHTML = values[1]; + if (values[1].indexOf("Ok") >= 0) { + labStatus.style.color = "green" + } else { + failedSwitches.push(values[0]) + labStatus.style.color = "red" + labStatus.style.fontWeight = "bold" + labStatus.innerHTML = values[1]; + } + row.appendChild(labName); + row.appendChild(labStatus); + switchesTable.appendChild(row); + } + ) + if (failedSwitches.length == 0) { + isAllSwitchesOk = true; + localStorage.setItem('isAllSwitchesOk', 'yes') + document.getElementById('resetOkMSG').innerHTML = '' + localStorage.removeItem('resetRequestSubmittedTime') + } + if (isAllSwitchesOk && failedSwitches.length > 0) { + document.getElementById('resetLabs').innerHTML = 'Please click here to reset failed switches' + + } else { + document.getElementById('resetLabs').innerHTML = '' + } + + document.getElementById('lastUpdated').innerHTML = "Last updated : " + new Date().toLocaleDateString() + ' ' + new Date().toLocaleTimeString() + }) + +} + + + + + + +document.getElementById("labBtn").addEventListener("click", function () { + const selected_lab_options = document.querySelector('input[name="lab"]:checked').value; + document.getElementById('loader').style.display = 'block' + $.get("/lab?lab_value=" + selected_lab_options, (res) => { + console.log(res) + if (res.response) { + // output = '' + // res.response.forEach(element => { + // output = output + element + // }); + document.getElementById('apiResponse').textContent = res.response + document.getElementById('loader').style.display = 'none' + + } + }).fail((err) => { + console.log(err) + document.getElementById('apiResponse').textContent = "Some thing went wrong" + document.getElementById('loader').style.display = 'none' + }) + + +}); +function displayToolTip() { + document.getElementById('tooltiptext').style.visibility = "visible"; +} +function hideToolTip() { + document.getElementById('tooltiptext').style.visibility = "hidden"; +} +document.getElementById('CvpStatus').style.color = "grey"; +document.getElementById('CvpStatus').style.pointerEvents = "none"; + + + +// For Popup + +// Get the modal +var modal = document.getElementById("myModal"); + +// Get the button that opens the modal +var btn = document.getElementById("myBtn"); + +// Get the element that closes the modal +var span = document.getElementsByClassName("close")[0]; + +// When the user clicks the button, open the modal +btn.onclick = function () { + modal.style.display = "block"; +} + +// When the user clicks on (x), close the modal +span.onclick = function () { + modal.style.display = "none"; +} + +// When the user clicks anywhere outside of the modal, close it +window.onclick = function (event) { + if (event.target == modal) { + modal.style.display = "none"; + } +} \ No newline at end of file diff --git a/nested-labvm/atd-docker/uilanding/src/uilanding.py b/nested-labvm/atd-docker/uilanding/src/uilanding.py index 7091ef5a0..566b2e43a 100755 --- a/nested-labvm/atd-docker/uilanding/src/uilanding.py +++ b/nested-labvm/atd-docker/uilanding/src/uilanding.py @@ -11,6 +11,7 @@ import secrets import hashlib, uuid import json +import docker import urllib3 import traceback @@ -25,6 +26,21 @@ ArBASE_PATH = '/opt/modules/' MODULE_FILE = ArBASE_PATH + 'modules.yaml' +MENU_BASE_PATH = '/opt/menus/' +# Open yaml for the default yaml and read what file to lookup for default menu +default_menu_file = open(MENU_BASE_PATH+'default.yaml') +default_menu_info = YAML().load(default_menu_file) +default_menu_file.close() +if str(default_menu_info['default_menu']).lower() == 'ssh': + NOMENUOPTIONFILE =True +else: + # Open yaml for the lab option (minus 'LAB_' from menu mode) and load the variables + NOMENUOPTIONFILE = False + menu_file = open('/opt/menus/{0}'.format(default_menu_info['default_menu'])) + MENU_ITEMS = YAML().load(menu_file) + menu_file.close() + DEFAULT_MENU_FILE_VALUE = default_menu_info['default_menu'].replace('.yaml', '') + with open(MODULE_FILE, 'r') as mf: MOD_YAML = YAML().load(mf) @@ -49,7 +65,10 @@ NAME = host_yaml['name'] ZONE = host_yaml['zone'] TOPO = host_yaml['topology'] - +if 'schema' in host_yaml: + SCHEMA = host_yaml['schema'] +else: + SCHEMA = 1 # Add a check for the title parameter for legacy deployment catches if 'title' in host_yaml: TITLE = host_yaml['title'] @@ -114,6 +133,12 @@ def get(self): disable_links = host_yaml['disabled_links'] else: disable_links = [] + menu={} + if NOMENUOPTIONFILE: + disable_links.append('lab_menu') + else: + for lab in MENU_ITEMS['lab_list']: + menu[lab] = MENU_ITEMS['lab_list'][lab]['description'] if 'labguides' in host_yaml: if host_yaml['labguides'] == 'self': labguides = '/labguides/index.html' @@ -123,15 +148,31 @@ def get(self): labguides = '/labguides/index.html' if 'cvp' in host_yaml: if host_yaml['cvp'] != "none": - _topo_cvp = True + _topo_cvp = True + gui_urls,servers =[],[] + if host_yaml['eos_type'] == 'container-labs': + try: + servers = MOD_YAML['topology']['servers'] + if servers is None: + servers = [] + external_ip_url = "http://metadata.google.internal/computeMetadata/v1/instance/network-interfaces/0/access-configs/0/external-ip" + headers = {"Metadata-Flavor": "Google"} + response = requests.get(external_ip_url, headers=headers) + for server in servers: + gui_urls.append(f'http://{response.text}:{servers[server]["port"]}') + except Exception as e: + pS(f"Error while looking for servers in GUI {e}") self.render( BASE_PATH + 'index.html', NODES = MOD_YAML['topology']['nodes'], + SERVERS = servers, + GUI_URLS= gui_urls, ARISTA_PWD=host_yaml['login_info']['jump_host']['pw'], topo_title = TITLE, disable_links = disable_links, labguides = labguides, - topo_cvp = _topo_cvp + topo_cvp = _topo_cvp, + menu_options = menu ) class topoDataHandler(tornado.websocket.WebSocketHandler): @@ -246,13 +287,13 @@ def getUptime(instanceIP): if instance_data['status'] == 'init': instance_data['runtime'] = int(TOPO_DATA['labels']['runtime']) else: - instance_data['runtime'] = 8 + instance_data['runtime'] = 12 return(instance_data) except: return({ 'boottime': 0, 'uptime': 0, - 'runtime': 8, + 'runtime': 12, 'status': 'init' }) @@ -261,7 +302,10 @@ def getEventStatus(instanceName, instanceZone): Function to get the currnet status of an instance. """ try: - response = requests.get(FUNC_STATE + "?function=state&instance={0}&zone={1}".format(instanceName, instanceZone)) + if SCHEMA == 2: + response = requests.get(FUNC_STATE + "?function=state&instance={0}-eos&zone={1}".format(instanceName, instanceZone)) + else: + response = requests.get(FUNC_STATE + "?function=state&instance={0}&zone={1}".format(instanceName, instanceZone)) return(response.json()) except ValueError: pS("Value Error retrieving status for {0}".format(instanceName)) @@ -282,6 +326,52 @@ def pS(mtype): mmes = "\t" + mtype print("[{0}] {1}".format(cur_dt, mmes.expandtabs(7 - len(cur_dt)))) +class LabHandler(tornado.web.RequestHandler): + def get(self): + self.set_header("Access-Control-Allow-Origin", "*") + selected_lab_option = self.get_argument('lab_value') + docker_conn= docker.from_env() + login_container = docker_conn.containers.get('atd-login') + login_container.exec_run(f'python3 /usr/local/bin/callConfigTopo.py {DEFAULT_MENU_FILE_VALUE} {selected_lab_option}', detach=True) + # print(container_output) + # log_file = open('log.txt','w') + # log_file.write(str(container_output.output.decode("utf-8"))) + # log_file.close() + # with open("log.txt", "r") as txt_file: + # response = txt_file.readlines() + self.write({ + 'response':'Configuration is being applied. Check in CVP that all tasks have been applied' + }) + +class LabStausHandler(tornado.web.RequestHandler): + def get(self): + self.set_header("Access-Control-Allow-Origin", "*") + docker_conn= docker.from_env() + login_container = docker_conn.containers.get('atd-login') + container_output=login_container.exec_run(f'sudo lab_status.py') + log_file = open('log.txt','w') + log_file.write(str(container_output.output.decode("utf-8"))) + log_file.close() + with open("log.txt", "r") as txt_file: + response = txt_file.readlines() + print(response) + self.write({ + 'response':response + }) + + +class ResetLabHandler(tornado.web.RequestHandler): + def get(self): + self.set_header("Access-Control-Allow-Origin", "*") + lab_names = self.get_argument('lab_names') + self.write({ + 'response':lab_names + }) + docker_conn= docker.from_env() + login_container = docker_conn.containers.get('atd-login') + login_container.exec_run(f'sudo python3 /usr/local/bin/resetVMs.py') + + if __name__ == "__main__": settings = { @@ -296,6 +386,9 @@ def pS(mtype): (r'/', topoRequestHandler), (r'/td-ws', topoDataHandler), (r'/login', LoginHandler), + (r'/lab', LabHandler), + (r'/labStaus', LabStausHandler), + (r'/resetLab', ResetLabHandler), ], **settings) app.listen(PORT) print('*** Websocket Server Started on {} ***'.format(PORT)) diff --git a/nested-labvm/atd-docker/vtepinfo/Dockerfile b/nested-labvm/atd-docker/vtepinfo/Dockerfile new file mode 100644 index 000000000..05a09287f --- /dev/null +++ b/nested-labvm/atd-docker/vtepinfo/Dockerfile @@ -0,0 +1,9 @@ +FROM python:3.10 + +RUN pip install ruamel.yaml requests + +COPY ./src/vtepinfo.py /usr/local/bin/ + +RUN chmod +x /usr/local/bin/vtepinfo.py + +CMD ["vtepinfo.py"] \ No newline at end of file diff --git a/nested-labvm/atd-docker/vtepinfo/src/vtepinfo.py b/nested-labvm/atd-docker/vtepinfo/src/vtepinfo.py new file mode 100644 index 000000000..05bcc23d5 --- /dev/null +++ b/nested-labvm/atd-docker/vtepinfo/src/vtepinfo.py @@ -0,0 +1,110 @@ +#!/usr/bin/env python3 + +from datetime import datetime +from os.path import exists +from time import sleep +from ruamel.yaml import YAML +import requests + + +# ===================================== +# Global Variables +# ===================================== + +SLEEP_DELAY = 10 +COUNTER_THRESHOLD = 10 +ATD_ACCESS_PATH = '/etc/atd/ACCESS_INFO.yaml' +VTEP_SCRIPT_PATH = '/etc/atd/.vtep.sh' +FUNC_STATE = 'https://us-central1-{0}.cloudfunctions.net/atd-state' + +CMD_OUT = ["#!/bin/bash\n"] + +def openYAML(fpath): + """ + Function to open and read yaml file contents. + """ + try: + host_yaml = YAML().load(open(fpath, 'r')) + return(host_yaml) + except: + return("File not available") + +def checkProvisioned(full_file_path): + if exists(full_file_path): + return('init') + else: + return('post') + +def pS(mtype): + """ + Function to send output from service file to Syslog + """ + cur_dt = datetime.now().strftime("%Y-%m-%d %H:%M:%S") + mmes = "\t" + mtype + print("[{0}] {1}".format(cur_dt, mmes.expandtabs(7 - len(cur_dt)))) + +def main(): + # Check if in init boot + if checkProvisioned('/etc/atd/.init') == 'init': + pS("Initial boot, will gather VTEP info") + while True: + access_yaml = openYAML(ATD_ACCESS_PATH) + if 'project' and 'zone' and 'name' and 'atd_role' in access_yaml: + pS("Necessary parameters exist, continuing") + break + else: + pS("Necessary parameters do not exist") + sleep(SLEEP_DELAY) + # Gather topo variables + project = access_yaml['project'] + name = access_yaml['name'] + zone = access_yaml['zone'] + atd_role = access_yaml['atd_role'] + function_state_url = FUNC_STATE.format(project) + if atd_role == 'nodes': + _self_state_url = f"{function_state_url}?function=state&instance={name}-eos&zone={zone}" + _peer_state_url = f"{function_state_url}?function=state&instance={name}-cvp&zone={zone}" + else: + _self_state_url = f"{function_state_url}?function=state&instance={name}-cvp&zone={zone}" + _peer_state_url = f"{function_state_url}?function=state&instance={name}-eos&zone={zone}" + # Perform loop until Private IP is available + while True: + response_self = requests.get(_self_state_url) + json_self = response_self.json() + try: + self_ip = json_self['privateIP'] + if self_ip and type(self_ip) == str: + break + else: + pS(f"Did not get self_ip: {json_peer}") + except: + pS("Unable to get self IP") + sleep(SLEEP_DELAY) + pS("Received local IP") + while True: + response_peer = requests.get(_peer_state_url) + json_peer = response_peer.json() + try: + peer_ip = json_peer['privateIP'] + if peer_ip and type(peer_ip) == str: + break + else: + pS(f"Did not get peer_ip: {json_peer}") + except: + pS("Unable to get Peer IP") + sleep(SLEEP_DELAY) + pS("Received Peer IP") + access_yaml['vtep_local'] = self_ip + access_yaml['vtep_remote'] = peer_ip + # Set commands + CMD_OUT.append(f"ip link add vxlan10 type vxlan id 10 local {self_ip} remote {peer_ip}\n") + CMD_OUT.append("brctl addif vmgmt vxlan10\n") + CMD_OUT.append("ip link set vxlan10 up\n") + YAML().dump(access_yaml, open(ATD_ACCESS_PATH, 'w')) + with open(VTEP_SCRIPT_PATH, 'w') as vout: + vout.writelines(CMD_OUT) + else: + pS("Post deploy, exiting") + +if __name__ == "__main__": + main() \ No newline at end of file diff --git a/nested-labvm/services/atdStartup/atdStartup.sh b/nested-labvm/services/atdStartup/atdStartup.sh index c9827010f..5ad69fcfa 100644 --- a/nested-labvm/services/atdStartup/atdStartup.sh +++ b/nested-labvm/services/atdStartup/atdStartup.sh @@ -1,9 +1,48 @@ #!/bin/bash echo "Starting atdStartup" - +sudo curl -o /etc/atd/base_topo.yml https://raw.githubusercontent.com/aristanetworks/training-infra-public/nested-release/topologies/base_topo.yml TOPO=$(cat /etc/atd/ACCESS_INFO.yaml | python3 -m shyaml get-value topology) APWD=$(cat /etc/atd/ACCESS_INFO.yaml | python3 -m shyaml get-value login_info.jump_host.pw) +PROJECT=$(cat /etc/atd/ACCESS_INFO.yaml | python3 -m shyaml get-value project) +CVP_VER=$(cat /etc/atd/ACCESS_INFO.yaml | python3 -m shyaml get-value cvp) +CVP_VER_MOD=$(echo "$CVP_VER" | sed 's/\./\\./g') +EOS_TYPE=$(cat /etc/atd/ACCESS_INFO.yaml | python3 -m shyaml get-value eos_type) +if [ "$EOS_TYPE" == "container-labs" ]; then + EOS_TYPE="ceos" +fi +LABGUIDE_FILENAME_URL=$(cat /opt/atd/topologies/metadata.yml | python3 -m shyaml get-value topologies.$PROJECT.$TOPO.labguide_zipfile_url) +if [ "$PROJECT" == "atd-testdrivetraining-prod" ]; then + PROJECT="prod" +else + PROJECT="dev" +fi +NEW_BRANCH_NAME=$(cat /etc/atd/base_topo.yml | python3 -m shyaml get-value topologies.$TOPO.$PROJECT.$EOS_TYPE.cvp.$CVP_VER_MOD.branch) +if [ $? -eq 0 ]; then + sed -i "/atd-public-branch/catd-public-branch: $NEW_BRANCH_NAME" /etc/atd/ATD_REPO.yaml + echo "changing branch name to $NEW_BRANCH_NAME" +else + echo "not changing any branch name" +fi +IFS="/" read -ra url_parts <<< "$LABGUIDE_FILENAME_URL" +LABGUIDE_FILENAME="${url_parts[-1]}" + +LABGUIDE_DIRECTORY="/opt/labguides/web/" +if [ ! -d "$LABGUIDE_DIRECTORY" ]; then + mkdir -p "$LABGUIDE_DIRECTORY" + echo "Directory created: $LABGUIDE_DIRECTORY" +fi +if [ -e "${LABGUIDE_DIRECTORY}${LABGUIDE_FILENAME}" ]; then + echo "File ${LABGUIDE_FILENAME} already exists. Nothing to do." +else + # Remove all files in the target directory + rm -rf "${LABGUIDE_DIRECTORY}"* + # Download the file from the source URL to the target directory + gsutil cp "${LABGUIDE_FILENAME_URL}" "${LABGUIDE_DIRECTORY}" + cd $LABGUIDE_DIRECTORY + tar -xzf "${LABGUIDE_FILENAME}" + echo "File ${LABGUIDE_FILENAME} downloaded to ${LABGUIDE_DIRECTORY}" +fi if [ "$(cat /etc/atd/ACCESS_INFO.yaml | grep eos_type)" ] then @@ -33,8 +72,7 @@ fi # Update the base configlets for ceos/veos mgmt numbering -if [ $EOS_TYPE == 'ceos' ] -then +if [ "$EOS_TYPE" = 'ceos' ] || [ "$EOS_TYPE" = 'container-labs' ]; then sed -i 's/Management1/Management0/g' /opt/atd/topologies/$TOPO/configlets/* fi @@ -79,6 +117,12 @@ echo 'y' | docker image prune systemctl restart sshd +if [ -f "/opt/clab/scripts/containerlabs_setup.py" ] +then + bash /opt/clab/scripts/veth-connection.sh >> /opt/clab/scripts/log.txt +fi + + # if cEOS Startup present, run it if [ -f "/opt/ceos/scripts/.ceos.txt" ] then diff --git a/nested-labvm/services/cvpStartup/cvpStartup.sh b/nested-labvm/services/cvpStartup/cvpStartup.sh new file mode 100644 index 000000000..b33c17f87 --- /dev/null +++ b/nested-labvm/services/cvpStartup/cvpStartup.sh @@ -0,0 +1,39 @@ +#!/bin/bash + +echo "Starting cvpStartup" + +TOPO=$(cat /etc/atd/ACCESS_INFO.yaml | python3 -m shyaml get-value topology) +APWD=$(cat /etc/atd/ACCESS_INFO.yaml | python3 -m shyaml get-value login_info.jump_host.pw) + +if [ "$(cat /etc/atd/ACCESS_INFO.yaml | grep eos_type)" ] +then + EOS_TYPE=$(cat /etc/atd/ACCESS_INFO.yaml | python3 -m shyaml get-value eos_type) +else + EOS_TYPE=veos +fi + +# Perform check to see if docker auth file exists +if ! [ -f "/home/atdadmin/.docker/config.json" ] +then + echo "Docker auth file not found, creating..." + gcloud auth configure-docker gcr.io,us.gcr.io --quiet + su atdadmin -c "gcloud auth configure-docker gcr.io,us.gcr.io --quiet" +fi + +cd /opt/atd/nested-labvm/atd-docker +# if VTEP file present +if [ -f "/etc/atd/.provisioned" ] +then + if [ -f "/etc/atd/.init" ] + then + bash docker_run.sh + while : ; do + [[ -f "/etc/atd/.vtep.sh" ]] && break + echo "Pausing until file exists." + sleep 1 + done + bash /etc/atd/.vtep.sh + else + bash /etc/atd/.vtep.sh + fi +fi \ No newline at end of file diff --git a/nested-labvm/services/cvpUpdate/cvpUpdate.sh b/nested-labvm/services/cvpUpdate/cvpUpdate.sh new file mode 100644 index 000000000..b7c5521a7 --- /dev/null +++ b/nested-labvm/services/cvpUpdate/cvpUpdate.sh @@ -0,0 +1,47 @@ +#!/bin/bash + +BRANCH=$(cat /etc/atd/ATD_REPO.yaml | python3 -m shyaml get-value atd-public-branch) + +if [ -z "$(cat /etc/atd/ATD_REPO.yaml | grep repo)" ] +then + REPO="https://github.com/aristanetworks/atd-public.git" +else + REPO=$(cat /etc/atd/ATD_REPO.yaml | python3 -m shyaml get-value public-repo) +fi + +# Perform git repo check +cd /opt/atd + +# Check the current repo compared to the targeted repo +if [[ ! "$(git remote get-url origin)" = "$REPO" ]] +then + echo "Repos do not match, updating to $REPO" + git remote set-url origin $REPO +fi + +# Fetch updates from the remote repo +git fetch + +# Perform check on the current branch/tag to the targeted +if [[ "$(git branch --show-current)" = "$BRANCH" ]] +then + echo "Target branch matches current branch" + git checkout . + git pull +else + echo "Branches do not match, updating to branch $BRANCH" + git checkout . + git checkout $BRANCH + git pull +fi + +# Update cvpUpdate script + +rsync -av /opt/atd/nested-labvm/services/cvpUpdate/cvpUpdate.sh /usr/local/bin/ + +# Update cvpStartup script + +rsync -av /opt/atd/nested-labvm/services/cvpStartup/cvpStartup.sh /usr/local/bin/ + +echo "Executing cvpStartup" +bash /usr/local/bin/cvpStartup.sh \ No newline at end of file diff --git a/nested-labvm/services/eosStartup/eosStartup.sh b/nested-labvm/services/eosStartup/eosStartup.sh new file mode 100644 index 000000000..f88a564ca --- /dev/null +++ b/nested-labvm/services/eosStartup/eosStartup.sh @@ -0,0 +1,124 @@ +#!/bin/bash + +echo "Starting atdStartup" + +TOPO=$(cat /etc/atd/ACCESS_INFO.yaml | python3 -m shyaml get-value topology) +APWD=$(cat /etc/atd/ACCESS_INFO.yaml | python3 -m shyaml get-value login_info.jump_host.pw) + +if [ "$(cat /etc/atd/ACCESS_INFO.yaml | grep eos_type)" ] +then + EOS_TYPE=$(cat /etc/atd/ACCESS_INFO.yaml | python3 -m shyaml get-value eos_type) +else + EOS_TYPE=veos +fi + +# Update ssh-key in EOS configlet for Arista user +ARISTA_SSH=$(cat /home/arista/.ssh/id_rsa.pub) + +sed -i "/username arista ssh-key/cusername arista ssh-key ${ARISTA_SSH}" /opt/atd/topologies/$TOPO/configlets/ATD-INFRA + +# Update arista user password for Guacamole + +find /opt/atd/nested-labvm/atd-docker/* -type f -print0 | xargs -0 sed -i "s/{ARISTA_REPLACE}/$APWD/g" +find /opt/atd/topologies/$TOPO/files/* -type f -print0 | xargs -0 sed -i "s/{ARISTA_REPLACE}/$APWD/g" + + +# Perform check to see if docker auth file exists +if ! [ -f "/home/atdadmin/.docker/config.json" ] +then + echo "Docker auth file not found, creating..." + gcloud auth configure-docker gcr.io,us.gcr.io --quiet + su atdadmin -c "gcloud auth configure-docker gcr.io,us.gcr.io --quiet" +fi + +# Update the base configlets for ceos/veos mgmt numbering + +if [ $EOS_TYPE == 'ceos' ] +then + sed -i 's/Management1/Management0/g' /opt/atd/topologies/$TOPO/configlets/* +fi + +# Copy topo image to app directory +rsync -av /opt/atd/topologies/$TOPO/atd-topo.png /opt/atd/topologies/$TOPO/files/apps/uilanding + +# Add files to arista home +rsync -av --update /opt/atd/topologies/$TOPO/files/ /home/arista/arista-dir +rsync -av /opt/atd/topologies/$TOPO/files/infra /home/arista/ + +# Perform check if there is a scripts directory +if [ -d "/opt/atd/topologies/$TOPO/files/scripts" ] +then + rsync -av /opt/atd/topologies/$TOPO/files/scripts /home/arista/GUI_Desktop/ +fi + +# Perform a check for the repo directory for datacenter +if ! [ -d "/home/arista/arista-dir/apps/coder/labfiles/lab6/repo" ] && [ $TOPO == "datacenter" ] +then + mkdir -p /home/arista/arista-dir/apps/coder/labfiles/lab6/repo + cd /home/arista/arista-dir/apps/coder/labfiles/lab6/repo + git init --bare +fi + +chown -R arista:arista /home/arista + +# Update ATD containers + +cd /opt/atd/nested-labvm/atd-docker + +# su atdadmin -c 'bash docker_build.sh' + +# Setting arista user ids for coder container +export ArID=$(id -u arista) +export ArGD=$(id -g arista) +export AtID=$(id -u atdadmin) +export AtGD=$(id -g atdadmin) + +/usr/local/bin/docker-compose up -d --remove-orphans --force-recreate + +echo 'y' | docker image prune + +systemctl restart sshd +if [ -f "/opt/clab/scripts/containerlabs_setup.py" ] +then + bash /opt/clab/scripts/veth-connection.sh >> /opt/clab/scripts/log.txt +fi + +# if cEOS Startup present, run it +if [ -f "/opt/ceos/scripts/.ceos.txt" ] +then + while : ; do + [[ -f "/opt/ceos/scripts/Startup.sh" ]] && break + echo "Pausing until file exists." + sleep 1 + done + bash /opt/ceos/scripts/Startup.sh + # =============================================== + # Adding below section to adjust veth pair MTUs to 10000 + # =============================================== + sleep 5 + for i in $(ifconfig | grep veth | awk '{print $1}') + do + echo $i + ip link set $i mtu 10000 + done + # =============================================== + # End veth mtu adjustment section + # =============================================== +fi + +# if VTEP file present +if [ -f "/etc/atd/.provisioned" ] +then + if [ -f "/etc/atd/.init" ] + then + bash docker_run.sh + while : ; do + [[ -f "/etc/atd/.vtep.sh" ]] && break + echo "Pausing until file exists." + sleep 1 + done + bash /etc/atd/.vtep.sh + else + bash /etc/atd/.vtep.sh + fi +fi diff --git a/nested-labvm/services/eosUpdate/eosUpdate.sh b/nested-labvm/services/eosUpdate/eosUpdate.sh new file mode 100644 index 000000000..ae26315e4 --- /dev/null +++ b/nested-labvm/services/eosUpdate/eosUpdate.sh @@ -0,0 +1,47 @@ +#!/bin/bash + +BRANCH=$(cat /etc/atd/ATD_REPO.yaml | python3 -m shyaml get-value atd-public-branch) + +if [ -z "$(cat /etc/atd/ATD_REPO.yaml | grep repo)" ] +then + REPO="https://github.com/aristanetworks/atd-public.git" +else + REPO=$(cat /etc/atd/ATD_REPO.yaml | python3 -m shyaml get-value public-repo) +fi + +# Perform git repo check +cd /opt/atd + +# Check the current repo compared to the targeted repo +if [[ ! "$(git remote get-url origin)" = "$REPO" ]] +then + echo "Repos do not match, updating to $REPO" + git remote set-url origin $REPO +fi + +# Fetch updates from the remote repo +git fetch + +# Perform check on the current branch/tag to the targeted +if [[ "$(git branch --show-current)" = "$BRANCH" ]] +then + echo "Target branch matches current branch" + git checkout . + git pull +else + echo "Branches do not match, updating to branch $BRANCH" + git checkout . + git checkout $BRANCH + git pull +fi + +# Update eosUpdate script + +rsync -av /opt/atd/nested-labvm/services/eosUpdate/eosUpdate.sh /usr/local/bin/ + +# Update eosStartup script + +rsync -av /opt/atd/nested-labvm/services/eosStartup/eosStartup.sh /usr/local/bin/ + +echo "Executing eosStartup" +bash /usr/local/bin/eosStartup.sh \ No newline at end of file diff --git a/result.pdf b/result.pdf new file mode 100644 index 000000000..c809fa5c7 Binary files /dev/null and b/result.pdf differ diff --git a/topologies/metadata.yml b/topologies/metadata.yml new file mode 100644 index 000000000..7a7d2dcc0 --- /dev/null +++ b/topologies/metadata.yml @@ -0,0 +1,23 @@ +topologies: + atd-testdrivetraining-dev: + training-level-1-cl: + labguide_zipfile_url : gs://topology_deploy_files/lab-guide-zips/L1_02062024.tar.gz + training-level-2-cl: + labguide_zipfile_url : gs://topology_deploy_files/lab-guide-zips/L2_03122024.tar.gz + training-level-3-cl: + labguide_zipfile_url : gs://topology_deploy_files/lab-guide-zips/L3_03122024.tar.gz + training-level4: + labguide_zipfile_url : gs://topology_deploy_files/lab-guide-zips/L4.tar.gz + training-level4-v2: + labguide_zipfile_url : gs://topology_deploy_files/lab-guide-zips/L4.tar.gz + atd-testdrivetraining-prod: + training-level-1-cl: + labguide_zipfile_url : gs://topology_deploy_files_prod/lab-guide-zips/L1_02062024.tar.gz + training-level-2-cl: + labguide_zipfile_url : gs://topology_deploy_files_prod/lab-guide-zips/L2_03122024.tar.gz + training-level-3-cl: + labguide_zipfile_url : gs://topology_deploy_files_prod/lab-guide-zips/L3_03122024.tar.gz + training-level4: + labguide_zipfile_url : gs://topology_deploy_files_prod/lab-guide-zips/L4_01222024.tar.gz + training-level4-v2: + labguide_zipfile_url : gs://topology_deploy_files_prod/lab-guide-zips/L4_01222024.tar.gz diff --git a/topologies/network-to-code/configlets/ATD-INFRA b/topologies/network-to-code/configlets/ATD-INFRA index fc0192036..6a88951d1 100644 --- a/topologies/network-to-code/configlets/ATD-INFRA +++ b/topologies/network-to-code/configlets/ATD-INFRA @@ -1,5 +1,5 @@ daemon TerminAttr - exec /usr/bin/TerminAttr -ingestgrpcurl=192.168.0.5:9910 -taillogs -ingestauth=key,atd-lab -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent + exec /usr/bin/TerminAttr -cvcompression=gzip -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent -cvaddr=192.168.0.5:9910 -cvauth=token,/tmp/token -cvvrf=default -taillogs -disableaaa no shutdown ! alias mlag-reload bash /mnt/flash/shut_intfs && sudo shutdown now -r diff --git a/topologies/network-to-code/test b/topologies/network-to-code/test new file mode 100644 index 000000000..30d74d258 --- /dev/null +++ b/topologies/network-to-code/test @@ -0,0 +1 @@ +test \ No newline at end of file diff --git a/topologies/training-fxf-ceos/atd-topo.png b/topologies/training-fxf-ceos/atd-topo.png new file mode 100644 index 000000000..bef5d0ca1 Binary files /dev/null and b/topologies/training-fxf-ceos/atd-topo.png differ diff --git a/topologies/training-fxf-ceos/configlets/ATD-INFRA b/topologies/training-fxf-ceos/configlets/ATD-INFRA new file mode 100644 index 000000000..de87bc743 --- /dev/null +++ b/topologies/training-fxf-ceos/configlets/ATD-INFRA @@ -0,0 +1,53 @@ +vrf instance MGMT +! +daemon TerminAttr + exec /usr/bin/TerminAttr -cvcompression=gzip -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent -cvaddr=192.168.0.5:9910 -cvauth=token,/tmp/token -cvvrf=MGMT -taillogs -disableaaa + no shutdown +! +alias mlag-reload bash /mnt/flash/shut_intfs && sudo shutdown now -r +alias conint sh interface | i connected +alias senz show interface counter error | nz +alias shmc show int | awk '/^[A-Z]/ { intf = $1 } /, address is/ { print intf, $6 }' +alias snz show interface counter | nz +alias spd show port-channel %1 detail all +alias sqnz show interface counter queue | nz +alias srnz show interface counter rate | nz +alias intdesc + !! Usage: intdesc interface-name description + 10 config + 20 int %1 + 30 desc %2 + 40 exit +! +dns domain arista.lab +! +service routing protocols model multi-agent +! +ntp server vrf MGMT 192.168.0.1 iburst source Management0 +! +radius-server host 192.168.0.1 vrf MGMT key 7 0207165218120E +! +aaa group server radius atds + server 192.168.0.1 vrf MGMT +! +aaa authentication login default group atds local +aaa authorization exec default group atds local +aaa authorization commands all default local +! +username Script secret sha512 $6$PNfpb9anSBQ5/aia$phaa3ar5pwkntenD9WHc6Ed5b96lbW0dc0bjtwPnFLaDiCK8D5Cjl6ewP/xdNbl4PtS6Paq.3SssN8pj05NQm. +username admin privilege 15 role network-admin secret 5 $1$5O85YVVn$HrXcfOivJEnISTMb6xrJc. +username arista privilege 15 role network-admin secret 5 $1$4VjIjfd1$XkUVulbNDESHFzcxDU.Tk1 +! +username arista ssh-key ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC+ERvV4GaPq3FzxY8T+5hMF/1T+l8wiPsVCtOrZU4Hy6NCNlAiDBdA/RUtX5/aOu5JvHyPTVHqWJ0qi9BqU3rxCNl/l2/5UZbm9RPzdZ1QCwoYwPB9/j/tYJV8lZdr6t0yGBfxgzD3oW/zF7a+ZtASaMAu7lkgoqPK2pVIGa+Y9ZCsA0Xq756XpLCw+d3pHKHvIkgWLCo9FoeIv8f/bu5u/ztzRE+Nvl+o5add6MxnjsXz3s7BnW2FX6JNjyp0Z+OXjupQc2gcfFvpd/dA2lCNuuaCHkRgyPwIZtWPmNqMRXPp37mlPwV43qDJRVPQkvh0xPxwS35BbzUxWdT+ZLZv +! +ip radius source-interface Management0 +! +ip routing vrf MGMT +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 +! +management api http-commands + no shutdown + vrf MGMT + no shutdown +! diff --git a/topologies/training-fxf-ceos/configlets/Access-1-BASE b/topologies/training-fxf-ceos/configlets/Access-1-BASE new file mode 100644 index 000000000..9dba1bdb4 --- /dev/null +++ b/topologies/training-fxf-ceos/configlets/Access-1-BASE @@ -0,0 +1,14 @@ +hostname Access-1 +! +! +interface Management0 + vrf MGMT + ip address 192.168.0.23/24 + + +! +dns domain arista.lab +! +ip routing vrf MGMT +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 diff --git a/topologies/training-fxf-ceos/configlets/Access-2-BASE b/topologies/training-fxf-ceos/configlets/Access-2-BASE new file mode 100644 index 000000000..d24c08883 --- /dev/null +++ b/topologies/training-fxf-ceos/configlets/Access-2-BASE @@ -0,0 +1,14 @@ +hostname Access-2 +! +! +interface Management0 + vrf MGMT + ip address 192.168.0.24/24 + + +! +dns domain arista.lab +! +ip routing vrf MGMT +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 diff --git a/topologies/training-fxf-ceos/configlets/Base-Builder.py b/topologies/training-fxf-ceos/configlets/Base-Builder.py new file mode 100644 index 000000000..167d9c750 --- /dev/null +++ b/topologies/training-fxf-ceos/configlets/Base-Builder.py @@ -0,0 +1,86 @@ +from cvplibrary import CVPGlobalVariables, GlobalVariableNames, Form + + + +# Get this devices Serial + + +serial = CVPGlobalVariables.getValue( GlobalVariableNames.CVP_SERIAL ) +mask = '24' +ServiceRouting = True + +#Create the IP address from the serial number + + +if serial == '4A7F6E96300132903A73A74CCF18B697': + IPaddress = '192.168.0.21' + hostname = 'leaf1' + + +elif serial == '3831DEFC364900BF9EEFC45FEE7794E7': + IPaddress = '192.168.0.22' + hostname = 'leaf2' + + +elif serial == 'ED469CFA13C4017B2D19BF7EBCAD50B1': + IPaddress = '192.168.0.23' + hostname = 'leaf3' + + +elif serial == '434653268ABA082A2FF6B52F1367CE80': + IPaddress = '192.168.0.24' + hostname = 'leaf4' + +elif serial == '8085B9640BC6D8FDC1FD23D242EBF433': + IPaddress = '192.168.0.11' + hostname = 'spine1' + +elif serial == 'D28D62E5729AB8BF44A0BC017DEB188A': + IPaddress = '192.168.0.12' + hostname = 'spine2' + +elif serial == 'F77703A62ADE220E689A41057AA56288': + IPaddress = '192.168.0.13' + hostname = 'spine3' + +elif serial == 'D763323F00C03738A8C824D2F1DA05E8': + IPaddress = '192.168.0.25' + hostname = 'borderleaf1' + +elif serial == '7C16136B7483F2E2FB002E8E0646F1F0': + IPaddress = '192.168.0.26' + hostname = 'borderleaf2' + +elif serial == '86342B780ED73BCB30E1DFE48E26AC38': + IPaddress = '192.168.0.51' + ServiceRouting = False + hostname = 'host1' + + +elif serial == 'CE0B31805130945E3CE40B060E9E636D': + IPaddress = '192.168.0.52' + ServiceRouting = False + hostname = 'host2' + + +# Generate and print config - Ignore the service routing command if not needed +print 'hostname %s' % hostname +print '!' +print 'interface Management 1' +print ' ip address %s/%s' % ( IPaddress, mask ) +print ' no lldp transmit' +print ' no lldp receive' +print '!' +if ServiceRouting: + print 'service routing protocols model multi-agent' + print '!' +print 'dns domain arista.lab' +print '!' +print 'ip route 0.0.0.0/0 192.168.0.1' +print '!' +print 'ip routing' +print '!' +print 'management api http-commands' +print ' no shutdown' +print ' protocol http' +print '!' \ No newline at end of file diff --git a/topologies/training-fxf-ceos/configlets/Core-1-BASE b/topologies/training-fxf-ceos/configlets/Core-1-BASE new file mode 100644 index 000000000..7338e8067 --- /dev/null +++ b/topologies/training-fxf-ceos/configlets/Core-1-BASE @@ -0,0 +1,14 @@ +hostname Core-1 +! +! +interface Management0 + vrf MGMT + ip address 192.168.0.21/24 + + +! +dns domain arista.lab +! +ip routing vrf MGMT +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 diff --git a/topologies/training-fxf-ceos/configlets/Core-2-BASE b/topologies/training-fxf-ceos/configlets/Core-2-BASE new file mode 100644 index 000000000..bac581d80 --- /dev/null +++ b/topologies/training-fxf-ceos/configlets/Core-2-BASE @@ -0,0 +1,14 @@ +hostname Core-2 +! +! +interface Management0 + vrf MGMT + ip address 192.168.0.22/24 + + +! +dns domain arista.lab +! +ip routing vrf MGMT +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 diff --git a/topologies/training-fxf-ceos/configlets/Router-1-BASE b/topologies/training-fxf-ceos/configlets/Router-1-BASE new file mode 100644 index 000000000..413d6a275 --- /dev/null +++ b/topologies/training-fxf-ceos/configlets/Router-1-BASE @@ -0,0 +1,14 @@ +hostname Router-1 +! +! +interface Management0 + vrf MGMT + ip address 192.168.0.12/24 + + +! +dns domain arista.lab +! +ip routing vrf MGMT +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 diff --git a/topologies/training-fxf-ceos/configlets/Router-2-BASE b/topologies/training-fxf-ceos/configlets/Router-2-BASE new file mode 100644 index 000000000..6e42217f8 --- /dev/null +++ b/topologies/training-fxf-ceos/configlets/Router-2-BASE @@ -0,0 +1,14 @@ +hostname Router-2 +! +! +interface Management0 + vrf MGMT + ip address 192.168.0.13/24 + + +! +dns domain arista.lab +! +ip routing vrf MGMT +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 diff --git a/topologies/training-fxf-ceos/configlets/Wan-1-BASE b/topologies/training-fxf-ceos/configlets/Wan-1-BASE new file mode 100644 index 000000000..f1f6939a0 --- /dev/null +++ b/topologies/training-fxf-ceos/configlets/Wan-1-BASE @@ -0,0 +1,72 @@ +hostname Wan-1 +! +switchport default mode routed +! +spanning-tree mode mstp +! +vlan 11 +! +interface Loopback0 + ip address 1.1.1.7/32 +! +interface Management0 + vrf MGMT + ip address 192.168.0.11/24 +! +interface Management0 + vrf MGMT + ip address 192.168.0.11/24 +! +ip routing +! +dns domain arista.lab + +management api http-commands + no shutdown + ! + vrf MGMT + no shutdown +! +interface Ethernet1 + description L3 Link to Wan-1 E1 + no switchport + ip address 172.28.138.1/20 +! +interface Ethernet2 + no switchport + ip address 172.28.144.1/20 +! +interface Ethernet3 + switchport access vlan 11 + switchport + spanning-tree portfast +! +interface Loopback0 + ip address 1.1.1.7/32 +! +! +interface Vlan11 + no autostate + ip address 11.0.0.254/24 +! +ip routing +ip routing vrf MGMT +! +ip route 0.0.0.0/0 172.28.138.5 20 +ip route 0.0.0.0/0 172.28.144.5 21 +ip route 12.0.0.0/24 172.28.138.5 20 +ip route 12.0.0.0/24 172.28.144.5 21 +ip route 14.0.0.0/24 172.28.144.5 20 +ip route 14.0.0.0/24 172.28.138.5 21 +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 +! +ntp server vrf MGMT 192.168.0.1 iburst source Management0 +! +ip radius source-interface Management0 +! +management telnet + no shutdown +! + +management ssh + no shutdown diff --git a/topologies/training-fxf-ceos/files/.ansible.cfg b/topologies/training-fxf-ceos/files/.ansible.cfg new file mode 100644 index 000000000..14c806515 --- /dev/null +++ b/topologies/training-fxf-ceos/files/.ansible.cfg @@ -0,0 +1,2 @@ +[defaults] +host_key_checking = False diff --git a/topologies/training-fxf-ceos/files/.screenrc b/topologies/training-fxf-ceos/files/.screenrc new file mode 100644 index 000000000..1d70f5e42 --- /dev/null +++ b/topologies/training-fxf-ceos/files/.screenrc @@ -0,0 +1,23 @@ +# Turn off the startup message. +startup_message off +# Set the caption to the active windows. +caption always "%-Lw%{= BW}%50>%n%f* %t%{-}%+Lw%<" + +term screen-256color + +# New screens for various processes. +# Example: screen -t +# screen -t 7050SX-128 0 ssh aristaadmin@192.100.37.128 +screen 1 ssh 192.168.0.4 +screen -t CVP 2 ssh 192.168.0.5 +screen -t Spine1 3 ssh 192.168.0.11 +screen -t Spine2 4 ssh 192.168.0.12 +screen -t Spine3 5 ssh 192.168.0.13 +screen -t Leaf1 6 ssh 192.168.0.21 +screen -t Leaf2 7 ssh 192.168.0.22 +screen -t Leaf3 8 ssh 192.168.0.23 +screen -t Leaf4 9 ssh 192.168.0.24 +screen -t Borderleaf1 10 ssh 192.168.0.25 +screen -t Borderlead2 11 ssh 192.168.0.26 +screen -t Host1 15 ssh 192.168.0.51 +screen -t Host2 16 ssh 192.168.0.52 diff --git a/topologies/training-fxf-ceos/files/MenuOptions.yaml b/topologies/training-fxf-ceos/files/MenuOptions.yaml new file mode 100644 index 000000000..f68e2261d --- /dev/null +++ b/topologies/training-fxf-ceos/files/MenuOptions.yaml @@ -0,0 +1,214 @@ +--- +options: + reset: + - command: "/usr/local/bin/ConfigureTopology.py && bash /home/arista/Broadcaster/pushHostDefaultConfig.sh" + description: "Reset All Devices to Base ATD (reset)" + vxlan: + - command: "/usr/local/bin/ConfigureTopology.py -t vxlan" + description: "VXLAN Lab (vxlan)" + l2evpn: + - command: "/usr/local/bin/ConfigureTopology.py -t l2evpn" + description: "L2-EVPN Lab (l2evpn)" + l3evpn: + - command: "/usr/local/bin/ConfigureTopology.py -t l3evpn" + description: "L3-EVPN Lab (l3evpn)" + aamh: + - command: "/usr/local/bin/ConfigureTopology.py -t aamh" + description: "Active-Active Multi Homing lab (aamh)" + pim: + - command: "/usr/local/bin/ConfigureTopology.py -t aamh" + description: "PIM Lab (pim)" +labconfiglets: + reset: + spine1: + - "spine1-base" + spine2: + - "spine2-base" + spine3: + - "spine3-base" + leaf1: + - "leaf1-base" + leaf2: + - "leaf2-base" + leaf3: + - "leaf3-base" + leaf4: + - "leaf4-base" + host1: + - "host1-base" + host2: + - "host2-base" + borderleaf1: + - "borderleaf1-base" + borderleaf2: + - "borderleaf2-base" + vxlan: + spine1: + - "spine1-base" + - "Spine-1-VXALN-Begin" + spine2: + - "spine2-base" + - "Spine-2-VXALN-Begin" + spine3: + - "spine3-base" + - "Spine-3-VXALN-Begin" + leaf1: + - "leaf1-base" + - "Leaf-1-VXALN-Begin" + leaf2: + - "leaf2-base" + - "Leaf-2-VXALN-Begin" + leaf3: + - "leaf3-base" + - "leaf-3-VXALN-Begin" + leaf4: + - "leaf4-base" + - "leaf-4-VXALN-Begin" + host1: + - "host1-base" + - "Host-1-VXALN-Begin" + host2: + - "host2-base" + - "Host-2-VXALN-Begin" + borderleaf1: + - "borderleaf1-base" + - "Borderleaf-1-VXALN-Begin" + borderleaf2: + - "borderleaf2-base" + - "Borderleaf-2-VXALN-Begin" + l2evpn: + spine1: + - "spine1-base" + - "Spine-1-L2EVPN-Begin" + spine2: + - "spine2-base" + - "Spine-2-L2EVPN-Begin" + spine3: + - "spine3-base" + - "Spine-3-L2EVPN-Begin" + leaf1: + - "leaf1-base" + - "Leaf-1-L2EVPN-Begin" + leaf2: + - "leaf2-base" + - "Leaf-2-L2EVPN-Begin" + leaf3: + - "leaf3-base" + - "Leaf-3-L2EVPN-Begin" + leaf4: + - "leaf4-base" + - "Leaf-4-L2EVPN-Begin" + host1: + - "host1-base" + - "Host-1-L2EVPN-Begin" + host2: + - "host2-base" + - "Host-2-L2EVPN-Begin" + borderleaf1: + - "borderleaf1-base" + - "Borderleaf-1-L2EVPN-Begin" + borderleaf2: + - "borderleaf2-base" + - "Borderleaf-2-L2EVPN-Begin" + l3evpn: + spine1: + - "spine1-base" + - "Spine-1-L3EVPN-Begin" + spine2: + - "spine2-base" + - "Spine-2-L3EVPN-Begin" + spine3: + - "spine3-base" + - "Spine-3-L3EVPN-Begin" + leaf1: + - "leaf1-base" + - "Leaf-1-L3EVPN-Begin" + leaf2: + - "leaf2-base" + - "Leaf-2-L3EVPN-Begin" + leaf3: + - "leaf3-base" + - "Leaf-3-L3EVPN-Begin" + leaf4: + - "leaf4-base" + - "Leaf-4-L3EVPN-Begin" + host1: + - "host1-base" + - "Host-1-L3EVPN-Begin" + host2: + - "host2-base" + - "Host-2-L3EVPN-Begin" + borderleaf1: + - "borderleaf1-base" + - "Borderleaf-1-L3EVPN-Begin" + borderleaf2: + - "borderleaf2-base" + - "Borderleaf-2-L3EVPN-Begin" + aamh: + spine1: + - "spine1-base" + - "Spine-1-AAMH-Begin" + spine2: + - "spine2-base" + - "Spine-2-AAMH-Begin" + spine3: + - "spine3-base" + - "Spine-3-AAMH-Begin" + leaf1: + - "leaf1-base" + - "Leaf-1-AAMH-Begin" + leaf2: + - "leaf2-base" + - "Leaf-2-AAMH-Begin" + leaf3: + - "leaf3-base" + - "Leaf-3-AAMH-Begin" + leaf4: + - "leaf4-base" + - "Leaf-4-AAMH-Begin" + host1: + - "host1-base" + - "Host-1-AAMH-Begin" + host2: + - "host2-base" + - "Host-2-AAMH-Begin" + borderleaf1: + - "borderleaf1-base" + - "Borderleaf-1-AAMH-Begin" + borderleaf2: + - "borderleaf2-base" + - "Borderleaf-2-AAMH-Begin" + pim: + spine1: + - "spine1-base" + - "Spine-1-PIM-Begin" + spine2: + - "spine2-base" + - "Spine-2-PIM-Begin" + spine3: + - "spine3-base" + - "Spine-3-PIM-Begin" + leaf1: + - "leaf1-base" + - "Leaf-1-PIM-Begin" + leaf2: + - "leaf2-base" + - "Leaf-2-PIM-Begin" + leaf3: + - "leaf3-base" + - "Leaf-3-PIM-Begin" + leaf4: + - "leaf4-base" + - "Leaf-4-PIM-Begin" + host1: + - "host1-base" + - "Host-1-PIM-Begin" + host2: + - "host2-base" + - "Host-2-PIM-Begin" + borderleaf1: + - "borderleaf1-base" + - "Borderleaf-1-PIM-Begin" + borderleaf2: + - "borderleaf2-base" + - "Borderleaf-2-PIM-Begin" \ No newline at end of file diff --git a/topologies/training-fxf-ceos/files/apps/coder/coder.yaml b/topologies/training-fxf-ceos/files/apps/coder/coder.yaml new file mode 100644 index 000000000..80cc852d1 --- /dev/null +++ b/topologies/training-fxf-ceos/files/apps/coder/coder.yaml @@ -0,0 +1,4 @@ +bind-addr: 127.0.0.1:8080 +auth: password +password: {ARISTA_REPLACE} +cert: false \ No newline at end of file diff --git a/topologies/training-fxf-ceos/files/apps/coder/labfiles/.placeholder b/topologies/training-fxf-ceos/files/apps/coder/labfiles/.placeholder new file mode 100644 index 000000000..e69de29bb diff --git a/topologies/training-fxf-ceos/files/apps/gui/host-1/arista/host-startup.sh b/topologies/training-fxf-ceos/files/apps/gui/host-1/arista/host-startup.sh new file mode 100644 index 000000000..16eafb783 --- /dev/null +++ b/topologies/training-fxf-ceos/files/apps/gui/host-1/arista/host-startup.sh @@ -0,0 +1,17 @@ +sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 4EB27DB2A3B88B8B +sudo apt-get update +sudo apt install openssh-server -y +sudo service ssh start +sudo apt-get install ufw -y +sudo ufw enable +sudo ufw allow 22 +sudo ufw disable +useradd -rm -d /home/arista -s /bin/bash -g root -G sudo -u 1000 arista +echo 'arista:arista123' | chpasswd +service ssh start +sudo apt install ifenslave -y +sudo apt install iputils-ping -y +sudo add-apt-repository ppa:wireshark-dev/stable -y +sudo apt-get install filezilla -y +sudo apt-get install vsftpd -y +sudo service vsftpd restart \ No newline at end of file diff --git a/topologies/training-fxf-ceos/files/apps/gui/host-12/arista/host-startup.sh b/topologies/training-fxf-ceos/files/apps/gui/host-12/arista/host-startup.sh new file mode 100644 index 000000000..16eafb783 --- /dev/null +++ b/topologies/training-fxf-ceos/files/apps/gui/host-12/arista/host-startup.sh @@ -0,0 +1,17 @@ +sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 4EB27DB2A3B88B8B +sudo apt-get update +sudo apt install openssh-server -y +sudo service ssh start +sudo apt-get install ufw -y +sudo ufw enable +sudo ufw allow 22 +sudo ufw disable +useradd -rm -d /home/arista -s /bin/bash -g root -G sudo -u 1000 arista +echo 'arista:arista123' | chpasswd +service ssh start +sudo apt install ifenslave -y +sudo apt install iputils-ping -y +sudo add-apt-repository ppa:wireshark-dev/stable -y +sudo apt-get install filezilla -y +sudo apt-get install vsftpd -y +sudo service vsftpd restart \ No newline at end of file diff --git a/topologies/training-fxf-ceos/files/apps/gui/host-14/arista/host-startup.sh b/topologies/training-fxf-ceos/files/apps/gui/host-14/arista/host-startup.sh new file mode 100644 index 000000000..16eafb783 --- /dev/null +++ b/topologies/training-fxf-ceos/files/apps/gui/host-14/arista/host-startup.sh @@ -0,0 +1,17 @@ +sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 4EB27DB2A3B88B8B +sudo apt-get update +sudo apt install openssh-server -y +sudo service ssh start +sudo apt-get install ufw -y +sudo ufw enable +sudo ufw allow 22 +sudo ufw disable +useradd -rm -d /home/arista -s /bin/bash -g root -G sudo -u 1000 arista +echo 'arista:arista123' | chpasswd +service ssh start +sudo apt install ifenslave -y +sudo apt install iputils-ping -y +sudo add-apt-repository ppa:wireshark-dev/stable -y +sudo apt-get install filezilla -y +sudo apt-get install vsftpd -y +sudo service vsftpd restart \ No newline at end of file diff --git a/topologies/training-fxf-ceos/files/apps/ssh/web.json b/topologies/training-fxf-ceos/files/apps/ssh/web.json new file mode 100644 index 000000000..13fac47dd --- /dev/null +++ b/topologies/training-fxf-ceos/files/apps/ssh/web.json @@ -0,0 +1,76 @@ +{ + "listen": { + "ip": "0.0.0.0", + "port": 2222 + }, + "user": { + "name": null, + "password": null, + "privatekey": null + }, + "ssh": { + "host": null, + "port": 22, + "localAddress": null, + "localPort": null, + "term": "xterm-color", + "readyTimeout": 20000, + "keepaliveInterval": 120000, + "keepaliveCountMax": 10, + "allowedSubnets": [ "192.168.0.0/16", "10.0.0.0/8", "172.16.0.0/12" ] + }, + "terminal": { + "cursorBlink": true, + "scrollback": 10000, + "tabStopWidth": 8, + "bellStyle": "sound" + }, + "header": { + "text": null, + "background": "green" + }, + "session": { + "name": "WebSSH2", + "secret": "mysecret" + }, + "options": { + "challengeButton": true, + "allowreauth": true + }, + "algorithms": { + "kex": [ + "ecdh-sha2-nistp256", + "ecdh-sha2-nistp384", + "ecdh-sha2-nistp521", + "diffie-hellman-group-exchange-sha256", + "diffie-hellman-group14-sha1" + ], + "cipher": [ + "aes128-ctr", + "aes192-ctr", + "aes256-ctr", + "aes128-gcm", + "aes128-gcm@openssh.com", + "aes256-gcm", + "aes256-gcm@openssh.com", + "aes256-cbc" + ], + "hmac": [ + "hmac-sha2-256", + "hmac-sha2-512", + "hmac-sha1" + ], + "compress": [ + "none", + "zlib@openssh.com", + "zlib" + ] + }, + "serverlog": { + "client": false, + "server": false + }, + "accesslog": false, + "verify": false, + "safeShutdownDuration": 300 + } \ No newline at end of file diff --git a/topologies/training-fxf-ceos/files/apps/syslog/172.18.0.1/.bkp b/topologies/training-fxf-ceos/files/apps/syslog/172.18.0.1/.bkp new file mode 100644 index 000000000..e69de29bb diff --git a/topologies/training-fxf-ceos/files/apps/syslog/192.168.0.24/.bkp b/topologies/training-fxf-ceos/files/apps/syslog/192.168.0.24/.bkp new file mode 100644 index 000000000..e69de29bb diff --git a/topologies/training-fxf-ceos/files/apps/tacacs/config b/topologies/training-fxf-ceos/files/apps/tacacs/config new file mode 100644 index 000000000..c756c03e8 --- /dev/null +++ b/topologies/training-fxf-ceos/files/apps/tacacs/config @@ -0,0 +1,20 @@ + key = "COOKBOOK" + +# user: fedexuser login password: fedexuser + + user = fedexuser { + login = clear fedexuser + service = shell { + set priv-lvl = 15 + cmd = show { + deny running-config + permit .* + } + } + } + +# user: fedex login password: arista + user = fedex { + default service = permit + login = clear arista + } \ No newline at end of file diff --git a/topologies/training-fxf-ceos/files/apps/tacacs/tac.log b/topologies/training-fxf-ceos/files/apps/tacacs/tac.log new file mode 100644 index 000000000..e69de29bb diff --git a/topologies/training-fxf-ceos/files/apps/uilanding/modules.yaml b/topologies/training-fxf-ceos/files/apps/uilanding/modules.yaml new file mode 100644 index 000000000..5d7df4ad4 --- /dev/null +++ b/topologies/training-fxf-ceos/files/apps/uilanding/modules.yaml @@ -0,0 +1,37 @@ +topology: + image: "atd-topo.png" + nodes: + Access-1: + coords: "73,468,189,532" + ip: "192.168.0.14" + Access-2: + coords: "206,474,338,520" + ip: "192.168.0.21" + Core-1: + coords: "81,319,176,381" + ip: "192.168.0.22" + Core-2: + coords: "218,316,335,393" + ip: "192.168.0.23" + Router-1: + coords: "81,218,192,284" + ip: "192.168.0.24" + Router-2: + coords: "216,216,351,301" + ip: "192.168.0.25" + Wan-1: + coords: "105,114,305,198" + ip: "192.168.0.26" + servers: + Server-1: + coords: "145,1,267,78" + ip: "192.168.0.11" + port : 6001 + Server-12: + coords: "75,548,171,611" + ip: "192.168.0.12" + port : 6002 + Server-14: + coords: "221,541,326,617" + ip: "192.168.0.13" + port : 6003 diff --git a/topologies/training-fxf-ceos/files/apps/webui/.vncpass_clear b/topologies/training-fxf-ceos/files/apps/webui/.vncpass_clear new file mode 100644 index 000000000..cd09dd7a5 --- /dev/null +++ b/topologies/training-fxf-ceos/files/apps/webui/.vncpass_clear @@ -0,0 +1 @@ +@rista1 \ No newline at end of file diff --git a/topologies/training-fxf-ceos/files/cvp/cvp_info.yaml b/topologies/training-fxf-ceos/files/cvp/cvp_info.yaml new file mode 100644 index 000000000..9ac5b19d9 --- /dev/null +++ b/topologies/training-fxf-ceos/files/cvp/cvp_info.yaml @@ -0,0 +1,31 @@ +cvp_info: + containers: + Tenant: + nodes: + - Wan-1 + - Router-1 + - Router-2 + - Core-1 + - Core-2 + - Access-1 + - Access-2 + snapshots: + configlets: + containers: + Tenant: + - ATD-INFRA + netelements: + Wan-1: + - Wan-1-BASE + Router-1: + - Router-1-BASE + Router-2: + - Router-2-BASE + Core-1: + - Core-1-BASE + Core-2: + - Core-2-BASE + Access-1: + - Access-1-BASE + Access-2: + - Access-2-BASE diff --git a/topologies/training-fxf-ceos/files/hosts b/topologies/training-fxf-ceos/files/hosts new file mode 100644 index 000000000..b01ba8483 --- /dev/null +++ b/topologies/training-fxf-ceos/files/hosts @@ -0,0 +1,24 @@ +127.0.0.1 localhost +192.168.0.11 spine1 +192.168.0.12 spine2 +192.168.0.13 spine3 +192.168.0.14 spine4 +192.168.0.21 leaf1 +192.168.0.22 leaf2 +192.168.0.23 leaf3 +192.168.0.24 leaf4 +192.168.0.25 borderleaf1 +192.168.0.26 borderleaf2 +192.168.0.41 server1 +192.168.0.42 server2 +192.168.0.43 server3 +192.168.0.44 server4 +192.168.0.51 host1 +192.168.0.52 host2 +192.168.0.53 host3 +192.168.0.54 host4 +192.168.0.101 host5 +192.168.0.102 host6 +192.168.0.103 host7 +192.168.0.104 host8 +192.168.0.5 cvp diff --git a/topologies/training-fxf-ceos/files/menus/default.yaml b/topologies/training-fxf-ceos/files/menus/default.yaml new file mode 100644 index 000000000..7edae00fc --- /dev/null +++ b/topologies/training-fxf-ceos/files/menus/default.yaml @@ -0,0 +1,2 @@ +--- +default_menu: training-l3.yaml \ No newline at end of file diff --git a/topologies/training-fxf-ceos/files/menus/training-l3.yaml b/topologies/training-fxf-ceos/files/menus/training-l3.yaml new file mode 100644 index 000000000..f5bc9bc09 --- /dev/null +++ b/topologies/training-fxf-ceos/files/menus/training-l3.yaml @@ -0,0 +1,26 @@ +--- + lab_list: + reset: + description: "Reset All Devices to Base Lab (reset)" + labconfiglets: + reset: + Wan-1: + - "Wan-1-BASE" + Router-1: + - "Router-1-BASE" + Router-2: + - "Router-2-BASE" + Core-1: + - "Core-1-BASE" + Core-2: + - "Core-2-BASE" + Access-1: + - "Access-1-BASE" + Access-2: + - "Access-2-BASE" + host-1: + - "host-1-BASE" + host-12: + - "host-12-BASE" + host-14: + - "host-14-BASE" \ No newline at end of file diff --git a/topologies/training-fxf-ceos/files/scripts/Authenticate-CVP b/topologies/training-fxf-ceos/files/scripts/Authenticate-CVP new file mode 100644 index 000000000..144bb13eb --- /dev/null +++ b/topologies/training-fxf-ceos/files/scripts/Authenticate-CVP @@ -0,0 +1,32 @@ +import requests +import json + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + +# Print user details + +print "User Name:%s\n "%output['username'] +print "First Name: %s\n "%output['user']['firstName'] +print "Last Name: %s\n "%output['user']['lastName'] +print "User Permissions: %s\n "%output['permissionList'] +print "Cookie Jar: %s\n "%cookies diff --git a/topologies/training-fxf-ceos/files/scripts/Authenticate-CVP2 b/topologies/training-fxf-ceos/files/scripts/Authenticate-CVP2 new file mode 100644 index 000000000..3f6bf9190 --- /dev/null +++ b/topologies/training-fxf-ceos/files/scripts/Authenticate-CVP2 @@ -0,0 +1,48 @@ +import requests +import json + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + +# Print user details + +print "User Name:%s\n "%output['username'] +print "First Name: %s\n "%output['user']['firstName'] +print "Last Name: %s\n "%output['user']['lastName'] +print "User Permissions: %s\n "%output['permissionList'] +print "Cookie Jar: %s\n "%cookies + +#Create an HTTP GET request to the CVP server + +getConfigletURL = "/cvpservice/configlet/getConfiglets.do?" +getConfigletParams = {'startIndex':'0','endIndex':'0','type':'Configlet'} +response = requests.get(url+getConfigletURL,cookies=cookies, params=getConfigletParams,verify=False) +assert response.ok +outputConfiglets = response.json() + +# Print Configlet details + +for configlet in outputConfiglets['data']: + print "ConfigletName: %s"%configlet['name'] + print "ConfigletKey: %s"%configlet['key'] + print "\n" + diff --git a/topologies/training-fxf-ceos/files/scripts/Authenticate-CVP3 b/topologies/training-fxf-ceos/files/scripts/Authenticate-CVP3 new file mode 100644 index 000000000..2445806ea --- /dev/null +++ b/topologies/training-fxf-ceos/files/scripts/Authenticate-CVP3 @@ -0,0 +1,95 @@ +import requests +import json + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + +# Print user details + +print "User Name:%s\n "%output['username'] +print "First Name: %s\n "%output['user']['firstName'] +print "Last Name: %s\n "%output['user']['lastName'] +print "User Permissions: %s\n "%output['permissionList'] +print "Cookie Jar: %s\n "%cookies + +#Create an HTTP GET request to the CVP server + +getConfigletURL = "/cvpservice/configlet/getConfiglets.do?" +getConfigletParams = {'startIndex':'0','endIndex':'0','type':'Configlet'} +response = requests.get(url+getConfigletURL,cookies=cookies, params=getConfigletParams,verify=False) +assert response.ok +outputConfiglets = response.json() + +# Print Configlet details + +for configlet in outputConfiglets['data']: + print "ConfigletName: %s"%configlet['name'] + print "ConfigletKey: %s"%configlet['key'] + print "\n" +# Create an HTTP GET request to the CVP server + +getConfigletHistoryURL = "/cvpservice/configlet/getConfigletHistory.do?" +getConfigletParams = {'configletId':'configlet_32_438214998013','startIndex':'0','endIndex':'0'} +response = requests.get(url+getConfigletHistoryURL,cookies=cookies, params=getConfigletParams,verify=False) +assert response.ok +outputConfigletHistory = response.json() + +# Print Configlet details + +for entry in outputConfigletHistory['configletHistory']: + print "ConfigletKey: %s"%entry['key'] + print "ConfigletOldConfig: %s"%entry['oldConfig'] + print "ConfigletNewConfig: %s"%entry['newConfig'] + print "\n" + + +# Create an HTTP GET request to the CVP server + +getConfigletDetailURL = "/cvpservice/configlet/getConfigletByName.do?" +getConfigletParams = {'name':'VLANs'} +response = requests.get(url+getConfigletDetailURL,cookies=cookies, params=getConfigletParams,verify=False) +assert response.ok +outputConfigletDetail = response.json() + +# Print Configlet details + +print "ConfigletKey: %s"%outputConfigletDetail['key'] +print "ConfigletName: %s"%outputConfigletDetail['name'] +print "ConfigletConfig: %s"%outputConfigletDetail['config'] +print "ConfigletNote: %s"%outputConfigletDetail['note'] +print "\n" + + +# Create an HTTP POST request to the CVP server + +headers = { 'Content-Type': 'application/json' } +postConfigletChangeURL = "/cvpservice/configlet/updateConfiglet.do" +changeData = json.dumps({"config": "! some configuration here", "key": "configlet_32_438214998013", "name": "VLANs"}) +response = requests.post(url+postConfigletChangeURL, cookies=cookies, data=changeData,headers=headers,verify=False) +assert response.ok +outputConfigletChange = response.json() + +# Print Configlet details + +print "ConfigletChange: %s"%outputConfigletChange['data'] +print "\n" + diff --git a/topologies/training-fxf-ceos/files/scripts/Configlet1 b/topologies/training-fxf-ceos/files/scripts/Configlet1 new file mode 100644 index 000000000..3f6bf9190 --- /dev/null +++ b/topologies/training-fxf-ceos/files/scripts/Configlet1 @@ -0,0 +1,48 @@ +import requests +import json + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + +# Print user details + +print "User Name:%s\n "%output['username'] +print "First Name: %s\n "%output['user']['firstName'] +print "Last Name: %s\n "%output['user']['lastName'] +print "User Permissions: %s\n "%output['permissionList'] +print "Cookie Jar: %s\n "%cookies + +#Create an HTTP GET request to the CVP server + +getConfigletURL = "/cvpservice/configlet/getConfiglets.do?" +getConfigletParams = {'startIndex':'0','endIndex':'0','type':'Configlet'} +response = requests.get(url+getConfigletURL,cookies=cookies, params=getConfigletParams,verify=False) +assert response.ok +outputConfiglets = response.json() + +# Print Configlet details + +for configlet in outputConfiglets['data']: + print "ConfigletName: %s"%configlet['name'] + print "ConfigletKey: %s"%configlet['key'] + print "\n" + diff --git a/topologies/training-fxf-ceos/files/scripts/ConfigletChange b/topologies/training-fxf-ceos/files/scripts/ConfigletChange new file mode 100644 index 000000000..691ff5864 --- /dev/null +++ b/topologies/training-fxf-ceos/files/scripts/ConfigletChange @@ -0,0 +1,40 @@ +import requests +import json + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + + +# Create an HTTP POST request to the CVP server + +headers = { 'Content-Type': 'application/json' } +postConfigletChangeURL = "/cvpservice/configlet/addNoteToConfiglet.do" +changeData = json.dumps({"note": "Configlet Changed by API", "key": "configlet_516_7018635812307"}) +response = requests.post(url+postConfigletChangeURL, cookies=cookies, data=changeData,headers=headers,verify=False) +assert response.ok +outputConfigletChange = response.json() + +# Print Configlet details + +print "ConfigletChange: %s"%outputConfigletChange['data'] +print "\n" + diff --git a/topologies/training-fxf-ceos/files/scripts/ConfigletDetail b/topologies/training-fxf-ceos/files/scripts/ConfigletDetail new file mode 100644 index 000000000..eb2a85937 --- /dev/null +++ b/topologies/training-fxf-ceos/files/scripts/ConfigletDetail @@ -0,0 +1,43 @@ +import requests +import json + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + +# Create an HTTP GET request to the CVP server + +getConfigletDetailURL = "/cvpservice/configlet/getConfigletByName.do?" +getConfigletParams = {'name':'VLANs'} +response = requests.get(url+getConfigletDetailURL,cookies=cookies, params=getConfigletParams,verify=False) +assert response.ok +outputConfigletDetail = response.json() + +# Print Configlet details + +print "ConfigletKey: %s"%outputConfigletDetail['key'] +print "ConfigletName: %s"%outputConfigletDetail['name'] +print "ConfigletConfig: %s"%outputConfigletDetail['config'] +print "ConfigletNote: %s"%outputConfigletDetail['note'] +print "\n" + + + diff --git a/topologies/training-fxf-ceos/files/scripts/ConfigletHistory b/topologies/training-fxf-ceos/files/scripts/ConfigletHistory new file mode 100644 index 000000000..71f1ac693 --- /dev/null +++ b/topologies/training-fxf-ceos/files/scripts/ConfigletHistory @@ -0,0 +1,41 @@ +import requests +import json + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + +# Create an HTTP GET request to the CVP server + +getConfigletHistoryURL = "/cvpservice/configlet/getConfigletHistory.do?" +getConfigletParams = {'configletId':'configlet_344_7351420097365','startIndex':'0','endIndex':'0'} +response = requests.get(url+getConfigletHistoryURL,cookies=cookies, params=getConfigletParams,verify=False) +assert response.ok +outputConfigletHistory = response.json() + +# Print Configlet details + +for entry in outputConfigletHistory['configletHistory']: + print "ConfigletKey: %s"%entry['key'] + print "ConfigletOldConfig: \n%s"%entry['oldConfig'] + print "ConfigletNewConfig: \n%s"%entry['newConfig'] + print "\n" + diff --git a/topologies/training-fxf-ceos/files/scripts/TaskBase b/topologies/training-fxf-ceos/files/scripts/TaskBase new file mode 100644 index 000000000..6f8deccaf --- /dev/null +++ b/topologies/training-fxf-ceos/files/scripts/TaskBase @@ -0,0 +1,59 @@ +import requests +import json + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + + +# Create an HTTP GET request to the CVP server + +getTasksURL = "/cvpservice/task/getTasks.do?" +getTasksParams = {'startIndex':'0','endIndex':'0','queryparam':'Pending'} +response = requests.get(url+getTasksURL,cookies=cookies, params=getTasksParams,verify=False) +assert response.ok +outputPendingTasks = response.json() + + +# Print Tasks Created by Current User +taskList = [ ] +for entry in outputPendingTasks['data']: + if str(entry['createdBy']) == str(CVP_USER): + print "TaskNumber: %s"%entry['workOrderId'] + taskList.append(str(entry['workOrderId'])) +print "TaskList: %s"%taskList + + + +# Create an HTTP POST request to the CVP server + +headers = { 'Content-Type': 'application/json' } +postTaskLogURL = "/cvpservice/workflow/addWorkOrderLog.do" +taskLogData = json.dumps({"taskId": taskList[1],"message": "This is a test Change","source": "CVP REST API"}) +response = requests.post(url+postTaskLogURL, cookies=cookies, data=taskLogData,headers=headers,verify=False) +assert response.ok +outputTaskLog = response.json() + +# Print Configlet details + +print "TaskLogAmmend: %s"%outputTaskLog['data'] +print "\n" + diff --git a/topologies/training-fxf-ceos/files/scripts/TaskCVP1 b/topologies/training-fxf-ceos/files/scripts/TaskCVP1 new file mode 100644 index 000000000..1ebd05764 --- /dev/null +++ b/topologies/training-fxf-ceos/files/scripts/TaskCVP1 @@ -0,0 +1,48 @@ +import requests +import json + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + +# Print user details + +print "User Name:%s\n "%output['username'] +print "First Name: %s\n "%output['user']['firstName'] +print "Last Name: %s\n "%output['user']['lastName'] + + +getTasksURL = "/cvpservice/task/getTasks.do?" +getTasksParams = {'startIndex':'0','endIndex':'0'} +response = requests.get(url+getTasksURL,cookies=cookies, params=getTasksParams,verify=False) +assert response.ok +outputPendingTasks = response.json() + + +# Print Tasks Created by Current User +taskList = [ ] +for entry in outputPendingTasks['data']: + if str(entry['createdBy']) == str(CVP_USER): + print( "TaskNumber: %s Description: %s" %(entry['workOrderId'],entry['description'])) + taskList.append(str(entry['workOrderId'])) +#print "TaskList: %s"%taskList + + diff --git a/topologies/training-fxf-ceos/files/scripts/TaskExecute b/topologies/training-fxf-ceos/files/scripts/TaskExecute new file mode 100644 index 000000000..3db487284 --- /dev/null +++ b/topologies/training-fxf-ceos/files/scripts/TaskExecute @@ -0,0 +1,56 @@ +import requests +import json + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + + +# Create an HTTP GET request to the CVP server + +getTasksURL = "/cvpservice/task/getTasks.do?" +getTasksParams = {'startIndex':'0','endIndex':'0','queryparam':'Pending'} +response = requests.get(url+getTasksURL,cookies=cookies, params=getTasksParams,verify=False) +assert response.ok +outputPendingTasks = response.json() + + +# Print Tasks Created by Current User +taskList = [ ] +for entry in outputPendingTasks['data']: + if str(entry['createdBy']) == str(CVP_USER): + print "TaskNumber: %s"%entry['workOrderId'] + taskList.append(str(entry['workOrderId'])) +print "TaskList: %s"%taskList + + + +headers = { 'Content-Type': 'application/json' } +postTaskExecuteURL = "/cvpservice/task/executeTask.do" +for taskNumber in taskList: + executeData = json.dumps({'data': [taskNumber]}) + response = requests.post(url+postTaskExecuteURL, cookies=cookies,data=executeData,headers=headers,verify=False) + assert response.ok + outputExecuteTask = response.json() + print (outputExecuteTask['data']) + print "Task: "+str(taskNumber)+" Execute: "+str(outputExecuteTask['data']) + print "\n" + diff --git a/topologies/training-fxf-ceos/files/scripts/TaskLog b/topologies/training-fxf-ceos/files/scripts/TaskLog new file mode 100644 index 000000000..c835008b8 --- /dev/null +++ b/topologies/training-fxf-ceos/files/scripts/TaskLog @@ -0,0 +1,59 @@ +import requests +import json + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + + +# Create an HTTP GET request to the CVP server + +getTasksURL = "/cvpservice/task/getTasks.do?" +getTasksParams = {'startIndex':'0','endIndex':'0'} +response = requests.get(url+getTasksURL,cookies=cookies, params=getTasksParams,verify=False) +assert response.ok +outputTasks = response.json() + + +# Print Tasks Created by Current User +taskList = [ ] +for entry in outputTasks['data']: + if str(entry['createdBy']) == str(CVP_USER): + print "TaskNumber: %s"%entry['workOrderId'] + taskList.append(str(entry['workOrderId'])) +print "TaskList: %s"%taskList + + + +# Create an HTTP POST request to the CVP server + +headers = { 'Content-Type': 'application/json' } +postTaskLogURL = "/cvpservice/workflow/addWorkOrderLog.do" +taskLogData = json.dumps({"taskId": taskList[0],"message": "This is a test Change","source": "CVP REST API"}) +response = requests.post(url+postTaskLogURL, cookies=cookies, data=taskLogData,headers=headers,verify=False) +assert response.ok +outputTaskLog = response.json() + +# Print Configlet details + +print "TaskLogAmmend: %s"%outputTaskLog['data'] +print "\n" + diff --git a/topologies/training-fxf-ceos/files/scripts/TaskLog1 b/topologies/training-fxf-ceos/files/scripts/TaskLog1 new file mode 100644 index 000000000..c835008b8 --- /dev/null +++ b/topologies/training-fxf-ceos/files/scripts/TaskLog1 @@ -0,0 +1,59 @@ +import requests +import json + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + + +# Create an HTTP GET request to the CVP server + +getTasksURL = "/cvpservice/task/getTasks.do?" +getTasksParams = {'startIndex':'0','endIndex':'0'} +response = requests.get(url+getTasksURL,cookies=cookies, params=getTasksParams,verify=False) +assert response.ok +outputTasks = response.json() + + +# Print Tasks Created by Current User +taskList = [ ] +for entry in outputTasks['data']: + if str(entry['createdBy']) == str(CVP_USER): + print "TaskNumber: %s"%entry['workOrderId'] + taskList.append(str(entry['workOrderId'])) +print "TaskList: %s"%taskList + + + +# Create an HTTP POST request to the CVP server + +headers = { 'Content-Type': 'application/json' } +postTaskLogURL = "/cvpservice/workflow/addWorkOrderLog.do" +taskLogData = json.dumps({"taskId": taskList[0],"message": "This is a test Change","source": "CVP REST API"}) +response = requests.post(url+postTaskLogURL, cookies=cookies, data=taskLogData,headers=headers,verify=False) +assert response.ok +outputTaskLog = response.json() + +# Print Configlet details + +print "TaskLogAmmend: %s"%outputTaskLog['data'] +print "\n" + diff --git a/topologies/training-fxf-ceos/files/scripts/TaskLogView b/topologies/training-fxf-ceos/files/scripts/TaskLogView new file mode 100644 index 000000000..7b34904dd --- /dev/null +++ b/topologies/training-fxf-ceos/files/scripts/TaskLogView @@ -0,0 +1,51 @@ +import requests +import json +import pprint + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + + +# Create an HTTP GET request to the CVP server + +getTasksURL = "/cvpservice/task/getTasks.do?" +getTasksParams = {'startIndex':'0','endIndex':'0'} +response = requests.get(url+getTasksURL,cookies=cookies, params=getTasksParams,verify=False) +assert response.ok +outputTasks = response.json() + +taskList = [ ] +for entry in outputTasks['data']: + if str(entry['createdBy']) == str(CVP_USER): + taskList.append(str(entry['workOrderId'])) + +getTaskLogURL = "/cvpservice/task/getLogsById.do?" +#getTaskLogParams = {'startIndex':'0','endIndex':'0','id':'0'} +getTaskLogParams = {'startIndex':'0','endIndex':'0','id':taskList[0]} +response = requests.get(url+getTaskLogURL,cookies=cookies, params=getTaskLogParams,verify=False) +assert response.ok +outputTaskLog = response.json() + +# Print TaskLog details +print "TaskLogOutput: %s" %outputTaskLog['data'] +print "\n" + diff --git a/topologies/training-fxf-ceos/files/scripts/TaskNote b/topologies/training-fxf-ceos/files/scripts/TaskNote new file mode 100644 index 000000000..6cd1d6cfd --- /dev/null +++ b/topologies/training-fxf-ceos/files/scripts/TaskNote @@ -0,0 +1,52 @@ +import requests +import json +import pprint + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + + +# Create an HTTP GET request to the CVP server + +getTasksURL = "/cvpservice/task/getTasks.do?" +getTasksParams = {'startIndex':'0','endIndex':'0'} +response = requests.get(url+getTasksURL,cookies=cookies, params=getTasksParams,verify=False) +assert response.ok +outputTasks = response.json() + +taskList = [ ] +for entry in outputTasks['data']: + if str(entry['createdBy']) == str(CVP_USER): + taskList.append(str(entry['workOrderId'])) + +headers = { 'Content-Type': 'application/json' } +postTaskNoteURL = "/cvpservice/task/addNoteToTask.do" +taskNoteData = json.dumps({"workOrderId": taskList[0],"note": "This is a test Change using the API"}) +response = requests.post(url+postTaskNoteURL, cookies=cookies, data=taskNoteData,headers=headers,verify=False) +assert response.ok +outputTaskNote = response.json() + +# Print Task details + +print "TaskNoteAmmend: %s"%outputTaskNote['data'] +print "\n" + diff --git a/topologies/training-fxf-ceos/labguides/.gitignore b/topologies/training-fxf-ceos/labguides/.gitignore new file mode 100644 index 000000000..ed86553f4 --- /dev/null +++ b/topologies/training-fxf-ceos/labguides/.gitignore @@ -0,0 +1,2 @@ +.DS_Store +build/ diff --git a/topologies/training-fxf-ceos/labguides/Makefile b/topologies/training-fxf-ceos/labguides/Makefile new file mode 100644 index 000000000..874ed2529 --- /dev/null +++ b/topologies/training-fxf-ceos/labguides/Makefile @@ -0,0 +1,20 @@ +# Minimal makefile for Sphinx documentation +# + +# You can set these variables from the command line. +SPHINXOPTS = +SPHINXBUILD = python -msphinx +SPHINXPROJ = ATD +SOURCEDIR = source +BUILDDIR = build + +# Put it first so that "make" without argument is like "make help". +help: + @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) + +.PHONY: help Makefile + +# Catch-all target: route all unknown targets to Sphinx using the new +# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). +%: Makefile + @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) \ No newline at end of file diff --git a/topologies/training-fxf-ceos/labguides/readme.md b/topologies/training-fxf-ceos/labguides/readme.md new file mode 100644 index 000000000..5a5369ecd --- /dev/null +++ b/topologies/training-fxf-ceos/labguides/readme.md @@ -0,0 +1,12 @@ +# Lab Guides +In this folder are rST (restructured text) formatted lab guides for the ATD event. + +## Building +To build the documentation, you will need to install Sphinx and sphinx_bootstrap_theme with `pip`: + +`pip install sphinx sphinx_bootstrap_theme` + +## Contributing +At some point, this section may expand, but for now please make sure to review existing files for formatting guidelines. + +Please see https://github.com/ralsina/rst-cheatsheet/blob/master/rst-cheatsheet.rst for a cheat sheet. \ No newline at end of file diff --git a/topologies/training-fxf-ceos/labguides/source/_static/arista_logo.png b/topologies/training-fxf-ceos/labguides/source/_static/arista_logo.png new file mode 100644 index 000000000..2376e72b9 Binary files /dev/null and b/topologies/training-fxf-ceos/labguides/source/_static/arista_logo.png differ diff --git a/topologies/training-fxf-ceos/labguides/source/_static/arista_logo_160by26.png b/topologies/training-fxf-ceos/labguides/source/_static/arista_logo_160by26.png new file mode 100644 index 000000000..d0d0cbeec Binary files /dev/null and b/topologies/training-fxf-ceos/labguides/source/_static/arista_logo_160by26.png differ diff --git a/topologies/training-fxf-ceos/labguides/source/_static/arista_logo_320by52.png b/topologies/training-fxf-ceos/labguides/source/_static/arista_logo_320by52.png new file mode 100644 index 000000000..43dfa7ed2 Binary files /dev/null and b/topologies/training-fxf-ceos/labguides/source/_static/arista_logo_320by52.png differ diff --git a/topologies/training-fxf-ceos/labguides/source/_static/cloudvision-icon.png b/topologies/training-fxf-ceos/labguides/source/_static/cloudvision-icon.png new file mode 100644 index 000000000..c309ed98e Binary files /dev/null and b/topologies/training-fxf-ceos/labguides/source/_static/cloudvision-icon.png differ diff --git a/topologies/training-fxf-ceos/labguides/source/_static/logo.jpg b/topologies/training-fxf-ceos/labguides/source/_static/logo.jpg new file mode 100644 index 000000000..6eda41f7e Binary files /dev/null and b/topologies/training-fxf-ceos/labguides/source/_static/logo.jpg differ diff --git a/topologies/training-fxf-ceos/labguides/source/_static/my-styles.css b/topologies/training-fxf-ceos/labguides/source/_static/my-styles.css new file mode 100644 index 000000000..1150528ee --- /dev/null +++ b/topologies/training-fxf-ceos/labguides/source/_static/my-styles.css @@ -0,0 +1,41 @@ +body { + background-color: #FFFFFF; + color: #002859 +} + +.navbar-inverse { + background-image: -webkit-linear-gradient(#6d94bf, #446e9b 50%, #002859); + background-image: -o-linear-gradient(#6d94bf, #446e9b 50%, #002859); + background-image: -webkit-gradient(linear, left top, left bottom, from(#6d94bf), color-stop(50%, #446e9b), to(#002859)); + background-image: linear-gradient(#6d94bf, #446e9b 50%, #002859); + background-repeat: no-repeat; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff6d94bf', endColorstr='#ff002859', GradientType=0); + -webkit-filter: none; + filter: none; + border: 1px solid #345578; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.3) +} + +.navbar-brand { + background: url("arista_logo_320by52.png") center / contain no-repeat; + display: inline-block; + width: 1px; + padding: 0 10px 0 60px; + margin-right: 30px; + margin-left: -30px; +} + +.navbar-brand>img { + display: inline-block; + padding: 0 100px 0 0px; + margin-right: 20px; +} +a.navbar-brand { + display: inline-block; + padding: 15px 0 0 120px; +} + +footer { + background-color: #002859; + color: #FFFFFF; +} diff --git a/topologies/training-fxf-ceos/labguides/source/conf.py b/topologies/training-fxf-ceos/labguides/source/conf.py new file mode 100644 index 000000000..afccec09c --- /dev/null +++ b/topologies/training-fxf-ceos/labguides/source/conf.py @@ -0,0 +1,247 @@ +# -*- coding: utf-8 -*- +# +# ATD documentation build configuration file, created by +# sphinx-quickstart on Tue Apr 17 10:00:04 2018. +# +# This file is execfile()d with the current directory set to its +# containing dir. +# +# Note that not all possible configuration values are present in this +# autogenerated file. +# +# All configuration values have a default; values that are commented out +# serve to show the default. + +# If extensions (or modules to document with autodoc) are in another directory, +# add these directories to sys.path here. If the directory is relative to the +# documentation root, use os.path.abspath to make it absolute, like shown here. +# +# import os +# import sys +# sys.path.insert(0, os.path.abspath('.')) + +import sphinx_bootstrap_theme + +# Importing datetime module to auto update copyright year +from datetime import date + +# -- General configuration ------------------------------------------------ + +# If your documentation needs a minimal Sphinx version, state it here. +# +# needs_sphinx = '1.0' + +# Add any Sphinx extension module names here, as strings. They can be +# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom +# ones. + +# Add any paths that contain templates here, relative to this directory. +templates_path = ['_templates'] + +# The suffix(es) of source filenames. +# You can specify multiple suffix as a list of string: +# +# source_suffix = ['.rst', '.md'] +source_suffix = '.rst' + +# The master toctree document. +master_doc = 'index' + +# General information about the project. +# Updating copyright var to auto update with current year +project = u'Arista ATD' +copyright = u'{0}, Arista Networks'.format(date.today().year) +author = u'Arista ATD atd-help@arista.com' + +# Show Source +html_show_sourcelink = False + +# The version info for the project you're documenting, acts as replacement for +# |version| and |release|, also used in various other places throughout the +# built documents. +# +# The short X.Y version. +version = u'Version 3.0' +# The full version, including alpha/beta/rc tags. +release = u'1' + +# The language for content autogenerated by Sphinx. Refer to documentation +# for a list of supported languages. +# +# This is also used if you do content translation via gettext catalogs. +# Usually you set "language" from the command line for these cases. +language = None + +# List of patterns, relative to source directory, that match files and +# directories to ignore when looking for source files. +# This patterns also effect to html_static_path and html_extra_path +exclude_patterns = [] + +# The name of the Pygments (syntax highlighting) style to use. +pygments_style = 'sphinx' + +# If true, `todo` and `todoList` produce output, else they produce nothing. +todo_include_todos = False + + +# -- Options for HTML output ---------------------------------------------- + +# The theme to use for HTML and HTML Help pages. See the documentation for +# a list of builtin themes. +# +#html_theme = 'alabaster' +html_theme = 'bootstrap' +html_theme_path = sphinx_bootstrap_theme.get_html_theme_path() + +# Add any paths that contain custom static files (such as style sheets) here, +# relative to this directory. They are copied after the builtin static files, +# so a file named "default.css" will overwrite the builtin "default.css". +html_static_path = ['_static'] + +# Theme options are theme-specific and customize the look and feel of a theme +# further. For a list of options available for each theme, see the +# documentation. +# +html_theme_options = { + # Navigation bar title. (Default: ``project`` value) + 'navbar_title': "ATD", + + # Tab name for entire site. (Default: "Site") + 'navbar_site_name': "Table of Contents", + + # A list of tuples containing pages or urls to link to. + # Valid tuples should be in the following forms: + # (name, page) # a link to a page + # (name, "/aa/bb", 1) # a link to an arbitrary relative url + # (name, "http://example.com", True) # arbitrary absolute url + # Note the "1" or "True" value above as the third argument to indicate + # an arbitrary url. + 'navbar_links': [ + ("Arista", "http://www.arista.com", True), + ], + + # Render the next and previous page links in navbar. (Default: true) + 'navbar_sidebarrel': True, + + # Render the current pages TOC in the navbar. (Default: true) + 'navbar_pagenav': False, + + # Tab name for the current pages TOC. (Default: "Page") + 'navbar_pagenav_name': "Page", + + # Global TOC depth for "site" navbar tab. (Default: 1) + # Switching to -1 shows all levels. + 'globaltoc_depth': 2, + + # Include hidden TOCs in Site navbar? + # + # Note: If this is "false", you cannot have mixed ``:hidden:`` and + # non-hidden ``toctree`` directives in the same page, or else the build + # will break. + # + # Values: "true" (default) or "false" + 'globaltoc_includehidden': "true", + + # HTML navbar class (Default: "navbar") to attach to
    element. + # For black navbar, do "navbar navbar-inverse" + #'navbar_class': "navbar navbar-inverse", + 'navbar_class': "navbar", + + # Fix navigation bar to top of page? + # Values: "true" (default) or "false" + 'navbar_fixed_top': "true", + + # Location of link to source. + # Options are "nav" (default), "footer" or anything else to exclude. + #'source_link_position': "nav", + + # Bootswatch (http://bootswatch.com/) theme. + # + # Options are nothing (default) or the name of a valid theme + # such as "cosmo" or "sandstone". + # + # The set of valid themes depend on the version of Bootstrap + # that's used (the next config option). + # + # Currently, the supported themes are: + # - Bootstrap 2: https://bootswatch.com/2 + # - Bootstrap 3: https://bootswatch.com/3 + 'bootswatch_theme': "spacelab", + + # Choose Bootstrap version. + # Values: "3" (default) or "2" (in quotes) + 'bootstrap_version': "3", +} + +# The name for this set of Sphinx documents. If None, it defaults to +# " v documentation". +#html_title = "AristaATD" + +# A shorter title for the navigation bar. Default is the same as html_title. +#html_short_title = "Demo" + +# (Optional) Logo. Should be small enough to fit the navbar (ideally 24x24). +# Path should be relative to the ``_static`` files directory. +#html_logo = "cloudvision-icon.png" + +# -- Options for HTMLHelp output ------------------------------------------ + +# Output file base name for HTML help builder. +htmlhelp_basename = 'AristaATD' + + +# -- Options for LaTeX output --------------------------------------------- + +latex_elements = { + # The paper size ('letterpaper' or 'a4paper'). + # + # 'papersize': 'letterpaper', + + # The font size ('10pt', '11pt' or '12pt'). + # + # 'pointsize': '10pt', + + # Additional stuff for the LaTeX preamble. + # + # 'preamble': '', + + # Latex figure (float) alignment + # + # 'figure_align': 'htbp', +} + +# Grouping the document tree into LaTeX files. List of tuples +# (source start file, target name, title, +# author, documentclass [howto, manual, or own class]). +latex_documents = [ + (master_doc, 'ATD.tex', u'ATD Lab Guide', + u'ATD Help (atd-help@arista.com)', 'manual'), +] + + +# -- Options for manual page output --------------------------------------- + +# One entry per manual page. List of tuples +# (source start file, name, description, authors, manual section). +man_pages = [ + (master_doc, 'atd', u'ATD Lab Guide', + [author], 1) +] + + +# -- Options for Texinfo output ------------------------------------------- + +# Grouping the document tree into Texinfo files. List of tuples +# (source start file, target name, title, author, +# dir menu entry, description, category) +texinfo_documents = [ + (master_doc, 'ATD', u'ATD Lab Guide', + author, 'ATD', 'Lab Documentation.', + 'Miscellaneous'), +] + + +def setup(app): + app.add_stylesheet("my-styles.css") # also can be a full URL + # app.add_stylesheet("ANOTHER.css") + # app.add_stylesheet("AND_ANOTHER.css") diff --git a/topologies/training-fxf-ceos/labguides/source/connecting.rst b/topologies/training-fxf-ceos/labguides/source/connecting.rst new file mode 100644 index 000000000..10ae589ef --- /dev/null +++ b/topologies/training-fxf-ceos/labguides/source/connecting.rst @@ -0,0 +1,28 @@ +Connecting +========== + +1. Log into the Arista Test Drive portal with your assigned URL. If you + don’t have one, please see your ATD staff. + +.. image:: images/connecting/nested_connecting_1.png + +2. SSH to the public address assigned to the LabAccess jumphost server (this is the Topology Address shown in the "Welcome to Arista's Test Drive!" picture above). The username is ``arista`` and the password is ``{REPLACE_PWD}``: + + .. code-block:: text + + ssh arista@{unique_address}.topo.testdrive.arista.com + +| + +.. image:: images/connecting/nested_connecting_2.png + :align: center + +| + +3. The LabAccess menu allows users to connect to each device and specify + lab topology. It is recommended to open multiple SSH sessions or use + the Screen option (under the SSH Menu) to jump between devices rapidly. + + You can also Access the LabAccess Menu from your browser by clicking on `Console Access` + +.. image:: images/connecting/nested_connecting_3.png diff --git a/topologies/training-fxf-ceos/labguides/source/images/connecting/nested_connecting_1.png b/topologies/training-fxf-ceos/labguides/source/images/connecting/nested_connecting_1.png new file mode 100644 index 000000000..aa76597b8 Binary files /dev/null and b/topologies/training-fxf-ceos/labguides/source/images/connecting/nested_connecting_1.png differ diff --git a/topologies/training-fxf-ceos/labguides/source/images/connecting/nested_connecting_2.png b/topologies/training-fxf-ceos/labguides/source/images/connecting/nested_connecting_2.png new file mode 100644 index 000000000..2c6b51a2b Binary files /dev/null and b/topologies/training-fxf-ceos/labguides/source/images/connecting/nested_connecting_2.png differ diff --git a/topologies/training-fxf-ceos/labguides/source/images/connecting/nested_connecting_3.png b/topologies/training-fxf-ceos/labguides/source/images/connecting/nested_connecting_3.png new file mode 100644 index 000000000..1cc7402a3 Binary files /dev/null and b/topologies/training-fxf-ceos/labguides/source/images/connecting/nested_connecting_3.png differ diff --git a/topologies/training-fxf-ceos/labguides/source/images/logo.jpg b/topologies/training-fxf-ceos/labguides/source/images/logo.jpg new file mode 100644 index 000000000..6eda41f7e Binary files /dev/null and b/topologies/training-fxf-ceos/labguides/source/images/logo.jpg differ diff --git a/topologies/training-fxf-ceos/labguides/source/index.rst b/topologies/training-fxf-ceos/labguides/source/index.rst new file mode 100644 index 000000000..bb76aaa2e --- /dev/null +++ b/topologies/training-fxf-ceos/labguides/source/index.rst @@ -0,0 +1,8 @@ +Welcome to the Arista Training documentation! +======================================== + +.. toctree:: + :maxdepth: 1 + :caption: EOS Configuration + + connecting.rst diff --git a/topologies/training-fxf-ceos/topo_build.yml b/topologies/training-fxf-ceos/topo_build.yml new file mode 100644 index 000000000..a3bc1988f --- /dev/null +++ b/topologies/training-fxf-ceos/topo_build.yml @@ -0,0 +1,142 @@ +host_cpu: 4 +cvp_cpu: 32 +cvp_ram: 42 +cvp_nodes: 1 +veos_cpu: 2 +nodes: + - Wan-1: + ip_addr: 192.168.0.11 + sys_mac: 00:1c:73:b1:c6:01 + neighbors: + - neighborDevice: Router-1 + neighborPort: Ethernet1 + port: Ethernet1 + - neighborDevice: Router-2 + neighborPort: Ethernet1 + port: Ethernet2 + - neighborDevice: host-1 + neighborPort: Ethernet1 + port: Ethernet3 + - Router-1: + ip_addr: 192.168.0.12 + sys_mac: 00:1c:73:b2:c6:01 + neighbors: + - neighborDevice: Wan-1 + neighborPort: Ethernet1 + port: Ethernet1 + - neighborDevice: Core-1 + neighborPort: Ethernet5 + port: Ethernet2 + - neighborDevice: Router-2 + neighborPort: Ethernet3 + port: Ethernet3 + - neighborDevice: Router-2 + neighborPort: Ethernet4 + port: Ethernet4 + - Router-2: + ip_addr: 192.168.0.13 + sys_mac: 00:1c:73:b3:c6:01 + neighbors: + - neighborDevice: Wan-1 + neighborPort: Ethernet2 + port: Ethernet1 + - neighborDevice: Core-2 + neighborPort: Ethernet5 + port: Ethernet2 + - neighborDevice: Router-1 + neighborPort: Ethernet3 + port: Ethernet3 + - neighborDevice: Router-1 + neighborPort: Ethernet4 + port: Ethernet4 + - Core-1: + ip_addr: 192.168.0.21 + sys_mac: 00:1c:73:c1:c6:01 + neighbors: + - neighborDevice: Access-1 + neighborPort: Ethernet1 + port: Ethernet1 + - neighborDevice: Access-2 + neighborPort: Ethernet2 + port: Ethernet2 + - neighborDevice: Core-2 + neighborPort: Ethernet3 + port: Ethernet3 + - neighborDevice: Core-2 + neighborPort: Ethernet4 + port: Ethernet4 + - neighborDevice: Router-1 + neighborPort: Ethernet2 + port: Ethernet5 + - Core-2: + ip_addr: 192.168.0.22 + sys_mac: 00:1c:73:c2:c6:01 + neighbors: + - neighborDevice: Access-2 + neighborPort: Ethernet1 + port: Ethernet1 + - neighborDevice: Access-1 + neighborPort: Ethernet2 + port: Ethernet2 + - neighborDevice: Core-1 + neighborPort: Ethernet3 + port: Ethernet3 + - neighborDevice: Core-1 + neighborPort: Ethernet4 + port: Ethernet4 + - neighborDevice: Router-2 + neighborPort: Ethernet2 + port: Ethernet5 + - Access-1: + ip_addr: 192.168.0.23 + sys_mac: 00:1c:73:c3:c6:01 + neighbors: + - neighborDevice: Core-1 + neighborPort: Ethernet1 + port: Ethernet1 + - neighborDevice: Core-2 + neighborPort: Ethernet2 + port: Ethernet2 + - neighborDevice: host-12 + neighborPort: Ethernet1 + port: Ethernet3 + - Access-2: + ip_addr: 192.168.0.24 + sys_mac: 00:1c:73:c4:c6:01 + neighbors: + - neighborDevice: Core-2 + neighborPort: Ethernet1 + port: Ethernet1 + - neighborDevice: Core-1 + neighborPort: Ethernet2 + port: Ethernet2 + - neighborDevice: host-14 + neighborPort: Ethernet1 + port: Ethernet3 +servers: + - host-1: + image_name: "gcr.io/atd-testdrivetraining-dev/hosts-gui/host1:latest" + ip_addr: 192.168.0.41 + port : 6001 + neighbors: + - neighborDevice: Wan-1 + neighborPort: Ethernet3 + port: Ethernet1 + - host-12: + image_name: "gcr.io/atd-testdrivetraining-dev/hosts-gui/host1:latest" + ip_addr: 192.168.0.42 + port : 6002 + neighbors: + - neighborDevice: Access-1 + neighborPort: Ethernet3 + port: Ethernet1 + - host-14: + image_name: "gcr.io/atd-testdrivetraining-dev/hosts-gui/host1:latest" + ip_addr: 192.168.0.43 + port : 6003 + neighbors: + - neighborDevice: Access-2 + neighborPort: Ethernet3 + port: Ethernet1 +additional_ssh_nodes: +additional_clab_nodes: diff --git a/topologies/training-fxf/atd-topo.png b/topologies/training-fxf/atd-topo.png new file mode 100644 index 000000000..bef5d0ca1 Binary files /dev/null and b/topologies/training-fxf/atd-topo.png differ diff --git a/topologies/training-fxf/configlets/ATD-INFRA b/topologies/training-fxf/configlets/ATD-INFRA new file mode 100644 index 000000000..a8c0268c6 --- /dev/null +++ b/topologies/training-fxf/configlets/ATD-INFRA @@ -0,0 +1,53 @@ +vrf instance MGMT +! +daemon TerminAttr + exec /usr/bin/TerminAttr -cvcompression=gzip -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent -cvaddr=192.168.0.5:9910 -cvauth=token,/tmp/token -cvvrf=MGMT -taillogs -disableaaa + no shutdown +! +alias mlag-reload bash /mnt/flash/shut_intfs && sudo shutdown now -r +alias conint sh interface | i connected +alias senz show interface counter error | nz +alias shmc show int | awk '/^[A-Z]/ { intf = $1 } /, address is/ { print intf, $6 }' +alias snz show interface counter | nz +alias spd show port-channel %1 detail all +alias sqnz show interface counter queue | nz +alias srnz show interface counter rate | nz +alias intdesc + !! Usage: intdesc interface-name description + 10 config + 20 int %1 + 30 desc %2 + 40 exit +! +dns domain arista.lab +! +service routing protocols model multi-agent +! +ntp server vrf MGMT 192.168.0.1 iburst source Management1 +! +radius-server host 192.168.0.1 vrf MGMT key 7 0207165218120E +! +aaa group server radius atds + server 192.168.0.1 vrf MGMT +! +aaa authentication login default group atds local +aaa authorization exec default group atds local +aaa authorization commands all default local +! +username Script secret sha512 $6$PNfpb9anSBQ5/aia$phaa3ar5pwkntenD9WHc6Ed5b96lbW0dc0bjtwPnFLaDiCK8D5Cjl6ewP/xdNbl4PtS6Paq.3SssN8pj05NQm. +username admin privilege 15 role network-admin secret 5 $1$5O85YVVn$HrXcfOivJEnISTMb6xrJc. +username arista privilege 15 role network-admin secret 5 $1$4VjIjfd1$XkUVulbNDESHFzcxDU.Tk1 +! +username arista ssh-key ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC+ERvV4GaPq3FzxY8T+5hMF/1T+l8wiPsVCtOrZU4Hy6NCNlAiDBdA/RUtX5/aOu5JvHyPTVHqWJ0qi9BqU3rxCNl/l2/5UZbm9RPzdZ1QCwoYwPB9/j/tYJV8lZdr6t0yGBfxgzD3oW/zF7a+ZtASaMAu7lkgoqPK2pVIGa+Y9ZCsA0Xq756XpLCw+d3pHKHvIkgWLCo9FoeIv8f/bu5u/ztzRE+Nvl+o5add6MxnjsXz3s7BnW2FX6JNjyp0Z+OXjupQc2gcfFvpd/dA2lCNuuaCHkRgyPwIZtWPmNqMRXPp37mlPwV43qDJRVPQkvh0xPxwS35BbzUxWdT+ZLZv +! +ip radius source-interface Management1 +! +ip routing vrf MGMT +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 +! +management api http-commands + no shutdown + vrf MGMT + no shutdown +! diff --git a/topologies/training-fxf/configlets/Access-1-BASE b/topologies/training-fxf/configlets/Access-1-BASE new file mode 100644 index 000000000..603418ba9 --- /dev/null +++ b/topologies/training-fxf/configlets/Access-1-BASE @@ -0,0 +1,14 @@ +hostname Access-1 +! +! +interface Management1 + vrf MGMT + ip address 192.168.0.23/24 + + +! +dns domain arista.lab +! +ip routing vrf MGMT +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 diff --git a/topologies/training-fxf/configlets/Access-2-BASE b/topologies/training-fxf/configlets/Access-2-BASE new file mode 100644 index 000000000..429a9159e --- /dev/null +++ b/topologies/training-fxf/configlets/Access-2-BASE @@ -0,0 +1,14 @@ +hostname Access-2 +! +! +interface Management1 + vrf MGMT + ip address 192.168.0.24/24 + + +! +dns domain arista.lab +! +ip routing vrf MGMT +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 diff --git a/topologies/training-fxf/configlets/Base-Builder.py b/topologies/training-fxf/configlets/Base-Builder.py new file mode 100644 index 000000000..167d9c750 --- /dev/null +++ b/topologies/training-fxf/configlets/Base-Builder.py @@ -0,0 +1,86 @@ +from cvplibrary import CVPGlobalVariables, GlobalVariableNames, Form + + + +# Get this devices Serial + + +serial = CVPGlobalVariables.getValue( GlobalVariableNames.CVP_SERIAL ) +mask = '24' +ServiceRouting = True + +#Create the IP address from the serial number + + +if serial == '4A7F6E96300132903A73A74CCF18B697': + IPaddress = '192.168.0.21' + hostname = 'leaf1' + + +elif serial == '3831DEFC364900BF9EEFC45FEE7794E7': + IPaddress = '192.168.0.22' + hostname = 'leaf2' + + +elif serial == 'ED469CFA13C4017B2D19BF7EBCAD50B1': + IPaddress = '192.168.0.23' + hostname = 'leaf3' + + +elif serial == '434653268ABA082A2FF6B52F1367CE80': + IPaddress = '192.168.0.24' + hostname = 'leaf4' + +elif serial == '8085B9640BC6D8FDC1FD23D242EBF433': + IPaddress = '192.168.0.11' + hostname = 'spine1' + +elif serial == 'D28D62E5729AB8BF44A0BC017DEB188A': + IPaddress = '192.168.0.12' + hostname = 'spine2' + +elif serial == 'F77703A62ADE220E689A41057AA56288': + IPaddress = '192.168.0.13' + hostname = 'spine3' + +elif serial == 'D763323F00C03738A8C824D2F1DA05E8': + IPaddress = '192.168.0.25' + hostname = 'borderleaf1' + +elif serial == '7C16136B7483F2E2FB002E8E0646F1F0': + IPaddress = '192.168.0.26' + hostname = 'borderleaf2' + +elif serial == '86342B780ED73BCB30E1DFE48E26AC38': + IPaddress = '192.168.0.51' + ServiceRouting = False + hostname = 'host1' + + +elif serial == 'CE0B31805130945E3CE40B060E9E636D': + IPaddress = '192.168.0.52' + ServiceRouting = False + hostname = 'host2' + + +# Generate and print config - Ignore the service routing command if not needed +print 'hostname %s' % hostname +print '!' +print 'interface Management 1' +print ' ip address %s/%s' % ( IPaddress, mask ) +print ' no lldp transmit' +print ' no lldp receive' +print '!' +if ServiceRouting: + print 'service routing protocols model multi-agent' + print '!' +print 'dns domain arista.lab' +print '!' +print 'ip route 0.0.0.0/0 192.168.0.1' +print '!' +print 'ip routing' +print '!' +print 'management api http-commands' +print ' no shutdown' +print ' protocol http' +print '!' \ No newline at end of file diff --git a/topologies/training-fxf/configlets/Core-1-BASE b/topologies/training-fxf/configlets/Core-1-BASE new file mode 100644 index 000000000..4a983df28 --- /dev/null +++ b/topologies/training-fxf/configlets/Core-1-BASE @@ -0,0 +1,14 @@ +hostname Core-1 +! +! +interface Management1 + vrf MGMT + ip address 192.168.0.21/24 + + +! +dns domain arista.lab +! +ip routing vrf MGMT +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 diff --git a/topologies/training-fxf/configlets/Core-2-BASE b/topologies/training-fxf/configlets/Core-2-BASE new file mode 100644 index 000000000..af2399087 --- /dev/null +++ b/topologies/training-fxf/configlets/Core-2-BASE @@ -0,0 +1,14 @@ +hostname Core-2 +! +! +interface Management1 + vrf MGMT + ip address 192.168.0.22/24 + + +! +dns domain arista.lab +! +ip routing vrf MGMT +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 diff --git a/topologies/training-fxf/configlets/Router-1-BASE b/topologies/training-fxf/configlets/Router-1-BASE new file mode 100644 index 000000000..e68fe76ad --- /dev/null +++ b/topologies/training-fxf/configlets/Router-1-BASE @@ -0,0 +1,14 @@ +hostname Router-1 +! +! +interface Management1 + vrf MGMT + ip address 192.168.0.12/24 + + +! +dns domain arista.lab +! +ip routing vrf MGMT +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 diff --git a/topologies/training-fxf/configlets/Router-2-BASE b/topologies/training-fxf/configlets/Router-2-BASE new file mode 100644 index 000000000..992c28f23 --- /dev/null +++ b/topologies/training-fxf/configlets/Router-2-BASE @@ -0,0 +1,14 @@ +hostname Router-2 +! +! +interface Management 1 + vrf MGMT + ip address 192.168.0.13/24 + + +! +dns domain arista.lab +! +ip routing vrf MGMT +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 diff --git a/topologies/training-fxf/configlets/Wan-1-BASE b/topologies/training-fxf/configlets/Wan-1-BASE new file mode 100644 index 000000000..4a6c7e767 --- /dev/null +++ b/topologies/training-fxf/configlets/Wan-1-BASE @@ -0,0 +1,57 @@ +hostname Wan-1 +dns domain arista.lab +! +transceiver qsfp default-mode 4x10G +! +service routing protocols model multi-agent +spanning-tree mode mstp +! +vlan 11 +! +! +management api http-commands + no shutdown + ! + vrf MGMT + no shutdown + +! +! +interface Ethernet1 + description L3 Link to Wan-1 E1 + no switchport + ip address 172.28.138.1/20 +! +interface Ethernet2 + no switchport + ip address 172.28.144.1/20 +! +interface Ethernet3 + switchport access vlan 11 + switchport + spanning-tree portfast +! +interface Loopback0 + ip address 1.1.1.7/32 +! +! +interface Vlan11 + no autostate + ip address 11.0.0.254/24 +! +ip routing +ip routing vrf MGMT +! +ip route 0.0.0.0/0 172.28.138.5 20 +ip route 0.0.0.0/0 172.28.144.5 21 +ip route 12.0.0.0/24 172.28.138.5 20 +ip route 12.0.0.0/24 172.28.144.5 21 +ip route 14.0.0.0/24 172.28.144.5 20 +ip route 14.0.0.0/24 172.28.138.5 21 +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 +! +! +management telnet + no shutdown +! + diff --git a/topologies/training-fxf/configlets/Wan-1-OSPF b/topologies/training-fxf/configlets/Wan-1-OSPF new file mode 100644 index 000000000..8e2237a54 --- /dev/null +++ b/topologies/training-fxf/configlets/Wan-1-OSPF @@ -0,0 +1,27 @@ +router ospf 1 + router-id 1.1.1.7 + passive-interface default + no passive-interface Ethernet1 + no passive-interface Ethernet2 + no passive-interface Vlan14 + network 10.0.0.16/30 area 0.0.0.1 + network 10.0.0.20/30 area 0.0.0.1 + network 14.0.0.0/24 area 0.0.0.0 + default-information originate always + + + interface Vlan14 + no autostate + ip address 14.0.0.254/24 + ip ospf area 0.0.0.0 + + interface Ethernet 1 + description OSPF Area 1 to Router-1 + ip ospf network point-to-point + ip ospf area 0.0.0.1 + + + interface Ethernet 2 + description OSPF Area 1 to Router-2 + ip ospf network point-to-point + ip ospf area 0.0.0.1 \ No newline at end of file diff --git a/topologies/training-fxf/configlets/host-1-BASE b/topologies/training-fxf/configlets/host-1-BASE new file mode 100644 index 000000000..314cfd674 --- /dev/null +++ b/topologies/training-fxf/configlets/host-1-BASE @@ -0,0 +1,27 @@ +hostname host-1 +! +no spanning-tree vlan-id 14 +! +interface Management1 + vrf MGMT + ip address 192.168.0.41/24 +! +vlan 14 +! +interface Vlan14 + ip address 14.0.0.11/24 + no autostate +! +interface Ethernet 1 + switchport + switchport mode access + switchport access vlan 14 +! +ip routing +ip route 0.0.0.0/0 14.0.0.254 +! +dns domain arista.lab +! +ip routing vrf MGMT +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 diff --git a/topologies/training-fxf/configlets/host-12-BASE b/topologies/training-fxf/configlets/host-12-BASE new file mode 100644 index 000000000..376ad91f8 --- /dev/null +++ b/topologies/training-fxf/configlets/host-12-BASE @@ -0,0 +1,28 @@ +hostname host-12 +! +no spanning-tree vlan-id 13 +! +interface Management1 + vrf MGMT + ip address 192.168.0.42/24 +! +vlan 12 +! +interface Vlan13 + ip address 13.0.0.11/24 + no autostate +! +interface Ethernet 1 + switchport + switchport mode access + switchport access vlan 13 +! +ip routing +! +ip route 0.0.0.0/0 13.0.0.1 +! +dns domain arista.lab +! +ip routing vrf MGMT +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 diff --git a/topologies/training-fxf/configlets/host-14-BASE b/topologies/training-fxf/configlets/host-14-BASE new file mode 100644 index 000000000..7057584ea --- /dev/null +++ b/topologies/training-fxf/configlets/host-14-BASE @@ -0,0 +1,28 @@ +hostname host-14 +! +no spanning-tree vlan-id 14 +! +interface Management1 + vrf MGMT + ip address 192.168.0.43/24 +! +vlan 14 +! +interface Vlan14 + ip address 14.0.0.11/24 + no autostate +! +interface Ethernet 1 + switchport + switchport mode access + switchport access vlan 14 +! +ip routing +! +ip route 0.0.0.0/0 14.0.0.254 +! +dns domain arista.lab +! +ip routing vrf MGMT +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 diff --git a/topologies/training-fxf/files/.ansible.cfg b/topologies/training-fxf/files/.ansible.cfg new file mode 100644 index 000000000..14c806515 --- /dev/null +++ b/topologies/training-fxf/files/.ansible.cfg @@ -0,0 +1,2 @@ +[defaults] +host_key_checking = False diff --git a/topologies/training-fxf/files/.screenrc b/topologies/training-fxf/files/.screenrc new file mode 100644 index 000000000..1d70f5e42 --- /dev/null +++ b/topologies/training-fxf/files/.screenrc @@ -0,0 +1,23 @@ +# Turn off the startup message. +startup_message off +# Set the caption to the active windows. +caption always "%-Lw%{= BW}%50>%n%f* %t%{-}%+Lw%<" + +term screen-256color + +# New screens for various processes. +# Example: screen -t +# screen -t 7050SX-128 0 ssh aristaadmin@192.100.37.128 +screen 1 ssh 192.168.0.4 +screen -t CVP 2 ssh 192.168.0.5 +screen -t Spine1 3 ssh 192.168.0.11 +screen -t Spine2 4 ssh 192.168.0.12 +screen -t Spine3 5 ssh 192.168.0.13 +screen -t Leaf1 6 ssh 192.168.0.21 +screen -t Leaf2 7 ssh 192.168.0.22 +screen -t Leaf3 8 ssh 192.168.0.23 +screen -t Leaf4 9 ssh 192.168.0.24 +screen -t Borderleaf1 10 ssh 192.168.0.25 +screen -t Borderlead2 11 ssh 192.168.0.26 +screen -t Host1 15 ssh 192.168.0.51 +screen -t Host2 16 ssh 192.168.0.52 diff --git a/topologies/training-fxf/files/MenuOptions.yaml b/topologies/training-fxf/files/MenuOptions.yaml new file mode 100644 index 000000000..f68e2261d --- /dev/null +++ b/topologies/training-fxf/files/MenuOptions.yaml @@ -0,0 +1,214 @@ +--- +options: + reset: + - command: "/usr/local/bin/ConfigureTopology.py && bash /home/arista/Broadcaster/pushHostDefaultConfig.sh" + description: "Reset All Devices to Base ATD (reset)" + vxlan: + - command: "/usr/local/bin/ConfigureTopology.py -t vxlan" + description: "VXLAN Lab (vxlan)" + l2evpn: + - command: "/usr/local/bin/ConfigureTopology.py -t l2evpn" + description: "L2-EVPN Lab (l2evpn)" + l3evpn: + - command: "/usr/local/bin/ConfigureTopology.py -t l3evpn" + description: "L3-EVPN Lab (l3evpn)" + aamh: + - command: "/usr/local/bin/ConfigureTopology.py -t aamh" + description: "Active-Active Multi Homing lab (aamh)" + pim: + - command: "/usr/local/bin/ConfigureTopology.py -t aamh" + description: "PIM Lab (pim)" +labconfiglets: + reset: + spine1: + - "spine1-base" + spine2: + - "spine2-base" + spine3: + - "spine3-base" + leaf1: + - "leaf1-base" + leaf2: + - "leaf2-base" + leaf3: + - "leaf3-base" + leaf4: + - "leaf4-base" + host1: + - "host1-base" + host2: + - "host2-base" + borderleaf1: + - "borderleaf1-base" + borderleaf2: + - "borderleaf2-base" + vxlan: + spine1: + - "spine1-base" + - "Spine-1-VXALN-Begin" + spine2: + - "spine2-base" + - "Spine-2-VXALN-Begin" + spine3: + - "spine3-base" + - "Spine-3-VXALN-Begin" + leaf1: + - "leaf1-base" + - "Leaf-1-VXALN-Begin" + leaf2: + - "leaf2-base" + - "Leaf-2-VXALN-Begin" + leaf3: + - "leaf3-base" + - "leaf-3-VXALN-Begin" + leaf4: + - "leaf4-base" + - "leaf-4-VXALN-Begin" + host1: + - "host1-base" + - "Host-1-VXALN-Begin" + host2: + - "host2-base" + - "Host-2-VXALN-Begin" + borderleaf1: + - "borderleaf1-base" + - "Borderleaf-1-VXALN-Begin" + borderleaf2: + - "borderleaf2-base" + - "Borderleaf-2-VXALN-Begin" + l2evpn: + spine1: + - "spine1-base" + - "Spine-1-L2EVPN-Begin" + spine2: + - "spine2-base" + - "Spine-2-L2EVPN-Begin" + spine3: + - "spine3-base" + - "Spine-3-L2EVPN-Begin" + leaf1: + - "leaf1-base" + - "Leaf-1-L2EVPN-Begin" + leaf2: + - "leaf2-base" + - "Leaf-2-L2EVPN-Begin" + leaf3: + - "leaf3-base" + - "Leaf-3-L2EVPN-Begin" + leaf4: + - "leaf4-base" + - "Leaf-4-L2EVPN-Begin" + host1: + - "host1-base" + - "Host-1-L2EVPN-Begin" + host2: + - "host2-base" + - "Host-2-L2EVPN-Begin" + borderleaf1: + - "borderleaf1-base" + - "Borderleaf-1-L2EVPN-Begin" + borderleaf2: + - "borderleaf2-base" + - "Borderleaf-2-L2EVPN-Begin" + l3evpn: + spine1: + - "spine1-base" + - "Spine-1-L3EVPN-Begin" + spine2: + - "spine2-base" + - "Spine-2-L3EVPN-Begin" + spine3: + - "spine3-base" + - "Spine-3-L3EVPN-Begin" + leaf1: + - "leaf1-base" + - "Leaf-1-L3EVPN-Begin" + leaf2: + - "leaf2-base" + - "Leaf-2-L3EVPN-Begin" + leaf3: + - "leaf3-base" + - "Leaf-3-L3EVPN-Begin" + leaf4: + - "leaf4-base" + - "Leaf-4-L3EVPN-Begin" + host1: + - "host1-base" + - "Host-1-L3EVPN-Begin" + host2: + - "host2-base" + - "Host-2-L3EVPN-Begin" + borderleaf1: + - "borderleaf1-base" + - "Borderleaf-1-L3EVPN-Begin" + borderleaf2: + - "borderleaf2-base" + - "Borderleaf-2-L3EVPN-Begin" + aamh: + spine1: + - "spine1-base" + - "Spine-1-AAMH-Begin" + spine2: + - "spine2-base" + - "Spine-2-AAMH-Begin" + spine3: + - "spine3-base" + - "Spine-3-AAMH-Begin" + leaf1: + - "leaf1-base" + - "Leaf-1-AAMH-Begin" + leaf2: + - "leaf2-base" + - "Leaf-2-AAMH-Begin" + leaf3: + - "leaf3-base" + - "Leaf-3-AAMH-Begin" + leaf4: + - "leaf4-base" + - "Leaf-4-AAMH-Begin" + host1: + - "host1-base" + - "Host-1-AAMH-Begin" + host2: + - "host2-base" + - "Host-2-AAMH-Begin" + borderleaf1: + - "borderleaf1-base" + - "Borderleaf-1-AAMH-Begin" + borderleaf2: + - "borderleaf2-base" + - "Borderleaf-2-AAMH-Begin" + pim: + spine1: + - "spine1-base" + - "Spine-1-PIM-Begin" + spine2: + - "spine2-base" + - "Spine-2-PIM-Begin" + spine3: + - "spine3-base" + - "Spine-3-PIM-Begin" + leaf1: + - "leaf1-base" + - "Leaf-1-PIM-Begin" + leaf2: + - "leaf2-base" + - "Leaf-2-PIM-Begin" + leaf3: + - "leaf3-base" + - "Leaf-3-PIM-Begin" + leaf4: + - "leaf4-base" + - "Leaf-4-PIM-Begin" + host1: + - "host1-base" + - "Host-1-PIM-Begin" + host2: + - "host2-base" + - "Host-2-PIM-Begin" + borderleaf1: + - "borderleaf1-base" + - "Borderleaf-1-PIM-Begin" + borderleaf2: + - "borderleaf2-base" + - "Borderleaf-2-PIM-Begin" \ No newline at end of file diff --git a/topologies/training-fxf/files/apps/coder/coder.yaml b/topologies/training-fxf/files/apps/coder/coder.yaml new file mode 100644 index 000000000..80cc852d1 --- /dev/null +++ b/topologies/training-fxf/files/apps/coder/coder.yaml @@ -0,0 +1,4 @@ +bind-addr: 127.0.0.1:8080 +auth: password +password: {ARISTA_REPLACE} +cert: false \ No newline at end of file diff --git a/topologies/training-fxf/files/apps/coder/labfiles/.placeholder b/topologies/training-fxf/files/apps/coder/labfiles/.placeholder new file mode 100644 index 000000000..e69de29bb diff --git a/topologies/training-fxf/files/apps/gui/Server-1/arista/host-startup.sh b/topologies/training-fxf/files/apps/gui/Server-1/arista/host-startup.sh new file mode 100644 index 000000000..16eafb783 --- /dev/null +++ b/topologies/training-fxf/files/apps/gui/Server-1/arista/host-startup.sh @@ -0,0 +1,17 @@ +sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 4EB27DB2A3B88B8B +sudo apt-get update +sudo apt install openssh-server -y +sudo service ssh start +sudo apt-get install ufw -y +sudo ufw enable +sudo ufw allow 22 +sudo ufw disable +useradd -rm -d /home/arista -s /bin/bash -g root -G sudo -u 1000 arista +echo 'arista:arista123' | chpasswd +service ssh start +sudo apt install ifenslave -y +sudo apt install iputils-ping -y +sudo add-apt-repository ppa:wireshark-dev/stable -y +sudo apt-get install filezilla -y +sudo apt-get install vsftpd -y +sudo service vsftpd restart \ No newline at end of file diff --git a/topologies/training-fxf/files/apps/gui/Server-11/arista/host-startup.sh b/topologies/training-fxf/files/apps/gui/Server-11/arista/host-startup.sh new file mode 100644 index 000000000..16eafb783 --- /dev/null +++ b/topologies/training-fxf/files/apps/gui/Server-11/arista/host-startup.sh @@ -0,0 +1,17 @@ +sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 4EB27DB2A3B88B8B +sudo apt-get update +sudo apt install openssh-server -y +sudo service ssh start +sudo apt-get install ufw -y +sudo ufw enable +sudo ufw allow 22 +sudo ufw disable +useradd -rm -d /home/arista -s /bin/bash -g root -G sudo -u 1000 arista +echo 'arista:arista123' | chpasswd +service ssh start +sudo apt install ifenslave -y +sudo apt install iputils-ping -y +sudo add-apt-repository ppa:wireshark-dev/stable -y +sudo apt-get install filezilla -y +sudo apt-get install vsftpd -y +sudo service vsftpd restart \ No newline at end of file diff --git a/topologies/training-fxf/files/apps/gui/Server-12/arista/host-startup.sh b/topologies/training-fxf/files/apps/gui/Server-12/arista/host-startup.sh new file mode 100644 index 000000000..16eafb783 --- /dev/null +++ b/topologies/training-fxf/files/apps/gui/Server-12/arista/host-startup.sh @@ -0,0 +1,17 @@ +sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 4EB27DB2A3B88B8B +sudo apt-get update +sudo apt install openssh-server -y +sudo service ssh start +sudo apt-get install ufw -y +sudo ufw enable +sudo ufw allow 22 +sudo ufw disable +useradd -rm -d /home/arista -s /bin/bash -g root -G sudo -u 1000 arista +echo 'arista:arista123' | chpasswd +service ssh start +sudo apt install ifenslave -y +sudo apt install iputils-ping -y +sudo add-apt-repository ppa:wireshark-dev/stable -y +sudo apt-get install filezilla -y +sudo apt-get install vsftpd -y +sudo service vsftpd restart \ No newline at end of file diff --git a/topologies/training-fxf/files/apps/gui/host6/arista/host-startup.sh b/topologies/training-fxf/files/apps/gui/host6/arista/host-startup.sh new file mode 100644 index 000000000..16eafb783 --- /dev/null +++ b/topologies/training-fxf/files/apps/gui/host6/arista/host-startup.sh @@ -0,0 +1,17 @@ +sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 4EB27DB2A3B88B8B +sudo apt-get update +sudo apt install openssh-server -y +sudo service ssh start +sudo apt-get install ufw -y +sudo ufw enable +sudo ufw allow 22 +sudo ufw disable +useradd -rm -d /home/arista -s /bin/bash -g root -G sudo -u 1000 arista +echo 'arista:arista123' | chpasswd +service ssh start +sudo apt install ifenslave -y +sudo apt install iputils-ping -y +sudo add-apt-repository ppa:wireshark-dev/stable -y +sudo apt-get install filezilla -y +sudo apt-get install vsftpd -y +sudo service vsftpd restart \ No newline at end of file diff --git a/topologies/training-fxf/files/apps/ssh/web.json b/topologies/training-fxf/files/apps/ssh/web.json new file mode 100644 index 000000000..13fac47dd --- /dev/null +++ b/topologies/training-fxf/files/apps/ssh/web.json @@ -0,0 +1,76 @@ +{ + "listen": { + "ip": "0.0.0.0", + "port": 2222 + }, + "user": { + "name": null, + "password": null, + "privatekey": null + }, + "ssh": { + "host": null, + "port": 22, + "localAddress": null, + "localPort": null, + "term": "xterm-color", + "readyTimeout": 20000, + "keepaliveInterval": 120000, + "keepaliveCountMax": 10, + "allowedSubnets": [ "192.168.0.0/16", "10.0.0.0/8", "172.16.0.0/12" ] + }, + "terminal": { + "cursorBlink": true, + "scrollback": 10000, + "tabStopWidth": 8, + "bellStyle": "sound" + }, + "header": { + "text": null, + "background": "green" + }, + "session": { + "name": "WebSSH2", + "secret": "mysecret" + }, + "options": { + "challengeButton": true, + "allowreauth": true + }, + "algorithms": { + "kex": [ + "ecdh-sha2-nistp256", + "ecdh-sha2-nistp384", + "ecdh-sha2-nistp521", + "diffie-hellman-group-exchange-sha256", + "diffie-hellman-group14-sha1" + ], + "cipher": [ + "aes128-ctr", + "aes192-ctr", + "aes256-ctr", + "aes128-gcm", + "aes128-gcm@openssh.com", + "aes256-gcm", + "aes256-gcm@openssh.com", + "aes256-cbc" + ], + "hmac": [ + "hmac-sha2-256", + "hmac-sha2-512", + "hmac-sha1" + ], + "compress": [ + "none", + "zlib@openssh.com", + "zlib" + ] + }, + "serverlog": { + "client": false, + "server": false + }, + "accesslog": false, + "verify": false, + "safeShutdownDuration": 300 + } \ No newline at end of file diff --git a/topologies/training-fxf/files/apps/syslog/172.18.0.1/.bkp b/topologies/training-fxf/files/apps/syslog/172.18.0.1/.bkp new file mode 100644 index 000000000..e69de29bb diff --git a/topologies/training-fxf/files/apps/syslog/192.168.0.24/.bkp b/topologies/training-fxf/files/apps/syslog/192.168.0.24/.bkp new file mode 100644 index 000000000..e69de29bb diff --git a/topologies/training-fxf/files/apps/tacacs/config b/topologies/training-fxf/files/apps/tacacs/config new file mode 100644 index 000000000..c756c03e8 --- /dev/null +++ b/topologies/training-fxf/files/apps/tacacs/config @@ -0,0 +1,20 @@ + key = "COOKBOOK" + +# user: fedexuser login password: fedexuser + + user = fedexuser { + login = clear fedexuser + service = shell { + set priv-lvl = 15 + cmd = show { + deny running-config + permit .* + } + } + } + +# user: fedex login password: arista + user = fedex { + default service = permit + login = clear arista + } \ No newline at end of file diff --git a/topologies/training-fxf/files/apps/tacacs/tac.log b/topologies/training-fxf/files/apps/tacacs/tac.log new file mode 100644 index 000000000..e69de29bb diff --git a/topologies/training-fxf/files/apps/uilanding/modules.yaml b/topologies/training-fxf/files/apps/uilanding/modules.yaml new file mode 100644 index 000000000..5d7df4ad4 --- /dev/null +++ b/topologies/training-fxf/files/apps/uilanding/modules.yaml @@ -0,0 +1,37 @@ +topology: + image: "atd-topo.png" + nodes: + Access-1: + coords: "73,468,189,532" + ip: "192.168.0.14" + Access-2: + coords: "206,474,338,520" + ip: "192.168.0.21" + Core-1: + coords: "81,319,176,381" + ip: "192.168.0.22" + Core-2: + coords: "218,316,335,393" + ip: "192.168.0.23" + Router-1: + coords: "81,218,192,284" + ip: "192.168.0.24" + Router-2: + coords: "216,216,351,301" + ip: "192.168.0.25" + Wan-1: + coords: "105,114,305,198" + ip: "192.168.0.26" + servers: + Server-1: + coords: "145,1,267,78" + ip: "192.168.0.11" + port : 6001 + Server-12: + coords: "75,548,171,611" + ip: "192.168.0.12" + port : 6002 + Server-14: + coords: "221,541,326,617" + ip: "192.168.0.13" + port : 6003 diff --git a/topologies/training-fxf/files/apps/webui/.vncpass_clear b/topologies/training-fxf/files/apps/webui/.vncpass_clear new file mode 100644 index 000000000..cd09dd7a5 --- /dev/null +++ b/topologies/training-fxf/files/apps/webui/.vncpass_clear @@ -0,0 +1 @@ +@rista1 \ No newline at end of file diff --git a/topologies/training-fxf/files/cvp/cvp_info.yaml b/topologies/training-fxf/files/cvp/cvp_info.yaml new file mode 100644 index 000000000..ac8b5450b --- /dev/null +++ b/topologies/training-fxf/files/cvp/cvp_info.yaml @@ -0,0 +1,40 @@ +cvp_info: + containers: + Tenant: + nodes: + - Wan-1 + - Router-1 + - Router-2 + - Core-1 + - Core-2 + - Access-1 + - Access-2 + - host-1-BASE + - host-12-BASE + - host-14-BASE + snapshots: + configlets: + containers: + Tenant: + - ATD-INFRA + netelements: + Wan-1: + - Wan-1-BASE + Router-1: + - Router-1-BASE + Router-2: + - Router-2-BASE + Core-1: + - Core-1-BASE + Core-2: + - Core-2-BASE + Access-1: + - Access-1-BASE + Access-2: + - Access-2-BASE + host-1: + - host-1-BASE + host-12: + - host-12-BASE + host-14: + - host-14-BASE diff --git a/topologies/training-fxf/files/hosts b/topologies/training-fxf/files/hosts new file mode 100644 index 000000000..b01ba8483 --- /dev/null +++ b/topologies/training-fxf/files/hosts @@ -0,0 +1,24 @@ +127.0.0.1 localhost +192.168.0.11 spine1 +192.168.0.12 spine2 +192.168.0.13 spine3 +192.168.0.14 spine4 +192.168.0.21 leaf1 +192.168.0.22 leaf2 +192.168.0.23 leaf3 +192.168.0.24 leaf4 +192.168.0.25 borderleaf1 +192.168.0.26 borderleaf2 +192.168.0.41 server1 +192.168.0.42 server2 +192.168.0.43 server3 +192.168.0.44 server4 +192.168.0.51 host1 +192.168.0.52 host2 +192.168.0.53 host3 +192.168.0.54 host4 +192.168.0.101 host5 +192.168.0.102 host6 +192.168.0.103 host7 +192.168.0.104 host8 +192.168.0.5 cvp diff --git a/topologies/training-fxf/files/menus/default.yaml b/topologies/training-fxf/files/menus/default.yaml new file mode 100644 index 000000000..7edae00fc --- /dev/null +++ b/topologies/training-fxf/files/menus/default.yaml @@ -0,0 +1,2 @@ +--- +default_menu: training-l3.yaml \ No newline at end of file diff --git a/topologies/training-fxf/files/menus/training-l3.yaml b/topologies/training-fxf/files/menus/training-l3.yaml new file mode 100644 index 000000000..f5bc9bc09 --- /dev/null +++ b/topologies/training-fxf/files/menus/training-l3.yaml @@ -0,0 +1,26 @@ +--- + lab_list: + reset: + description: "Reset All Devices to Base Lab (reset)" + labconfiglets: + reset: + Wan-1: + - "Wan-1-BASE" + Router-1: + - "Router-1-BASE" + Router-2: + - "Router-2-BASE" + Core-1: + - "Core-1-BASE" + Core-2: + - "Core-2-BASE" + Access-1: + - "Access-1-BASE" + Access-2: + - "Access-2-BASE" + host-1: + - "host-1-BASE" + host-12: + - "host-12-BASE" + host-14: + - "host-14-BASE" \ No newline at end of file diff --git a/topologies/training-fxf/files/scripts/Authenticate-CVP b/topologies/training-fxf/files/scripts/Authenticate-CVP new file mode 100644 index 000000000..144bb13eb --- /dev/null +++ b/topologies/training-fxf/files/scripts/Authenticate-CVP @@ -0,0 +1,32 @@ +import requests +import json + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + +# Print user details + +print "User Name:%s\n "%output['username'] +print "First Name: %s\n "%output['user']['firstName'] +print "Last Name: %s\n "%output['user']['lastName'] +print "User Permissions: %s\n "%output['permissionList'] +print "Cookie Jar: %s\n "%cookies diff --git a/topologies/training-fxf/files/scripts/Authenticate-CVP2 b/topologies/training-fxf/files/scripts/Authenticate-CVP2 new file mode 100644 index 000000000..3f6bf9190 --- /dev/null +++ b/topologies/training-fxf/files/scripts/Authenticate-CVP2 @@ -0,0 +1,48 @@ +import requests +import json + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + +# Print user details + +print "User Name:%s\n "%output['username'] +print "First Name: %s\n "%output['user']['firstName'] +print "Last Name: %s\n "%output['user']['lastName'] +print "User Permissions: %s\n "%output['permissionList'] +print "Cookie Jar: %s\n "%cookies + +#Create an HTTP GET request to the CVP server + +getConfigletURL = "/cvpservice/configlet/getConfiglets.do?" +getConfigletParams = {'startIndex':'0','endIndex':'0','type':'Configlet'} +response = requests.get(url+getConfigletURL,cookies=cookies, params=getConfigletParams,verify=False) +assert response.ok +outputConfiglets = response.json() + +# Print Configlet details + +for configlet in outputConfiglets['data']: + print "ConfigletName: %s"%configlet['name'] + print "ConfigletKey: %s"%configlet['key'] + print "\n" + diff --git a/topologies/training-fxf/files/scripts/Authenticate-CVP3 b/topologies/training-fxf/files/scripts/Authenticate-CVP3 new file mode 100644 index 000000000..2445806ea --- /dev/null +++ b/topologies/training-fxf/files/scripts/Authenticate-CVP3 @@ -0,0 +1,95 @@ +import requests +import json + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + +# Print user details + +print "User Name:%s\n "%output['username'] +print "First Name: %s\n "%output['user']['firstName'] +print "Last Name: %s\n "%output['user']['lastName'] +print "User Permissions: %s\n "%output['permissionList'] +print "Cookie Jar: %s\n "%cookies + +#Create an HTTP GET request to the CVP server + +getConfigletURL = "/cvpservice/configlet/getConfiglets.do?" +getConfigletParams = {'startIndex':'0','endIndex':'0','type':'Configlet'} +response = requests.get(url+getConfigletURL,cookies=cookies, params=getConfigletParams,verify=False) +assert response.ok +outputConfiglets = response.json() + +# Print Configlet details + +for configlet in outputConfiglets['data']: + print "ConfigletName: %s"%configlet['name'] + print "ConfigletKey: %s"%configlet['key'] + print "\n" +# Create an HTTP GET request to the CVP server + +getConfigletHistoryURL = "/cvpservice/configlet/getConfigletHistory.do?" +getConfigletParams = {'configletId':'configlet_32_438214998013','startIndex':'0','endIndex':'0'} +response = requests.get(url+getConfigletHistoryURL,cookies=cookies, params=getConfigletParams,verify=False) +assert response.ok +outputConfigletHistory = response.json() + +# Print Configlet details + +for entry in outputConfigletHistory['configletHistory']: + print "ConfigletKey: %s"%entry['key'] + print "ConfigletOldConfig: %s"%entry['oldConfig'] + print "ConfigletNewConfig: %s"%entry['newConfig'] + print "\n" + + +# Create an HTTP GET request to the CVP server + +getConfigletDetailURL = "/cvpservice/configlet/getConfigletByName.do?" +getConfigletParams = {'name':'VLANs'} +response = requests.get(url+getConfigletDetailURL,cookies=cookies, params=getConfigletParams,verify=False) +assert response.ok +outputConfigletDetail = response.json() + +# Print Configlet details + +print "ConfigletKey: %s"%outputConfigletDetail['key'] +print "ConfigletName: %s"%outputConfigletDetail['name'] +print "ConfigletConfig: %s"%outputConfigletDetail['config'] +print "ConfigletNote: %s"%outputConfigletDetail['note'] +print "\n" + + +# Create an HTTP POST request to the CVP server + +headers = { 'Content-Type': 'application/json' } +postConfigletChangeURL = "/cvpservice/configlet/updateConfiglet.do" +changeData = json.dumps({"config": "! some configuration here", "key": "configlet_32_438214998013", "name": "VLANs"}) +response = requests.post(url+postConfigletChangeURL, cookies=cookies, data=changeData,headers=headers,verify=False) +assert response.ok +outputConfigletChange = response.json() + +# Print Configlet details + +print "ConfigletChange: %s"%outputConfigletChange['data'] +print "\n" + diff --git a/topologies/training-fxf/files/scripts/Configlet1 b/topologies/training-fxf/files/scripts/Configlet1 new file mode 100644 index 000000000..3f6bf9190 --- /dev/null +++ b/topologies/training-fxf/files/scripts/Configlet1 @@ -0,0 +1,48 @@ +import requests +import json + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + +# Print user details + +print "User Name:%s\n "%output['username'] +print "First Name: %s\n "%output['user']['firstName'] +print "Last Name: %s\n "%output['user']['lastName'] +print "User Permissions: %s\n "%output['permissionList'] +print "Cookie Jar: %s\n "%cookies + +#Create an HTTP GET request to the CVP server + +getConfigletURL = "/cvpservice/configlet/getConfiglets.do?" +getConfigletParams = {'startIndex':'0','endIndex':'0','type':'Configlet'} +response = requests.get(url+getConfigletURL,cookies=cookies, params=getConfigletParams,verify=False) +assert response.ok +outputConfiglets = response.json() + +# Print Configlet details + +for configlet in outputConfiglets['data']: + print "ConfigletName: %s"%configlet['name'] + print "ConfigletKey: %s"%configlet['key'] + print "\n" + diff --git a/topologies/training-fxf/files/scripts/ConfigletChange b/topologies/training-fxf/files/scripts/ConfigletChange new file mode 100644 index 000000000..691ff5864 --- /dev/null +++ b/topologies/training-fxf/files/scripts/ConfigletChange @@ -0,0 +1,40 @@ +import requests +import json + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + + +# Create an HTTP POST request to the CVP server + +headers = { 'Content-Type': 'application/json' } +postConfigletChangeURL = "/cvpservice/configlet/addNoteToConfiglet.do" +changeData = json.dumps({"note": "Configlet Changed by API", "key": "configlet_516_7018635812307"}) +response = requests.post(url+postConfigletChangeURL, cookies=cookies, data=changeData,headers=headers,verify=False) +assert response.ok +outputConfigletChange = response.json() + +# Print Configlet details + +print "ConfigletChange: %s"%outputConfigletChange['data'] +print "\n" + diff --git a/topologies/training-fxf/files/scripts/ConfigletDetail b/topologies/training-fxf/files/scripts/ConfigletDetail new file mode 100644 index 000000000..eb2a85937 --- /dev/null +++ b/topologies/training-fxf/files/scripts/ConfigletDetail @@ -0,0 +1,43 @@ +import requests +import json + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + +# Create an HTTP GET request to the CVP server + +getConfigletDetailURL = "/cvpservice/configlet/getConfigletByName.do?" +getConfigletParams = {'name':'VLANs'} +response = requests.get(url+getConfigletDetailURL,cookies=cookies, params=getConfigletParams,verify=False) +assert response.ok +outputConfigletDetail = response.json() + +# Print Configlet details + +print "ConfigletKey: %s"%outputConfigletDetail['key'] +print "ConfigletName: %s"%outputConfigletDetail['name'] +print "ConfigletConfig: %s"%outputConfigletDetail['config'] +print "ConfigletNote: %s"%outputConfigletDetail['note'] +print "\n" + + + diff --git a/topologies/training-fxf/files/scripts/ConfigletHistory b/topologies/training-fxf/files/scripts/ConfigletHistory new file mode 100644 index 000000000..71f1ac693 --- /dev/null +++ b/topologies/training-fxf/files/scripts/ConfigletHistory @@ -0,0 +1,41 @@ +import requests +import json + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + +# Create an HTTP GET request to the CVP server + +getConfigletHistoryURL = "/cvpservice/configlet/getConfigletHistory.do?" +getConfigletParams = {'configletId':'configlet_344_7351420097365','startIndex':'0','endIndex':'0'} +response = requests.get(url+getConfigletHistoryURL,cookies=cookies, params=getConfigletParams,verify=False) +assert response.ok +outputConfigletHistory = response.json() + +# Print Configlet details + +for entry in outputConfigletHistory['configletHistory']: + print "ConfigletKey: %s"%entry['key'] + print "ConfigletOldConfig: \n%s"%entry['oldConfig'] + print "ConfigletNewConfig: \n%s"%entry['newConfig'] + print "\n" + diff --git a/topologies/training-fxf/files/scripts/TaskBase b/topologies/training-fxf/files/scripts/TaskBase new file mode 100644 index 000000000..6f8deccaf --- /dev/null +++ b/topologies/training-fxf/files/scripts/TaskBase @@ -0,0 +1,59 @@ +import requests +import json + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + + +# Create an HTTP GET request to the CVP server + +getTasksURL = "/cvpservice/task/getTasks.do?" +getTasksParams = {'startIndex':'0','endIndex':'0','queryparam':'Pending'} +response = requests.get(url+getTasksURL,cookies=cookies, params=getTasksParams,verify=False) +assert response.ok +outputPendingTasks = response.json() + + +# Print Tasks Created by Current User +taskList = [ ] +for entry in outputPendingTasks['data']: + if str(entry['createdBy']) == str(CVP_USER): + print "TaskNumber: %s"%entry['workOrderId'] + taskList.append(str(entry['workOrderId'])) +print "TaskList: %s"%taskList + + + +# Create an HTTP POST request to the CVP server + +headers = { 'Content-Type': 'application/json' } +postTaskLogURL = "/cvpservice/workflow/addWorkOrderLog.do" +taskLogData = json.dumps({"taskId": taskList[1],"message": "This is a test Change","source": "CVP REST API"}) +response = requests.post(url+postTaskLogURL, cookies=cookies, data=taskLogData,headers=headers,verify=False) +assert response.ok +outputTaskLog = response.json() + +# Print Configlet details + +print "TaskLogAmmend: %s"%outputTaskLog['data'] +print "\n" + diff --git a/topologies/training-fxf/files/scripts/TaskCVP1 b/topologies/training-fxf/files/scripts/TaskCVP1 new file mode 100644 index 000000000..1ebd05764 --- /dev/null +++ b/topologies/training-fxf/files/scripts/TaskCVP1 @@ -0,0 +1,48 @@ +import requests +import json + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + +# Print user details + +print "User Name:%s\n "%output['username'] +print "First Name: %s\n "%output['user']['firstName'] +print "Last Name: %s\n "%output['user']['lastName'] + + +getTasksURL = "/cvpservice/task/getTasks.do?" +getTasksParams = {'startIndex':'0','endIndex':'0'} +response = requests.get(url+getTasksURL,cookies=cookies, params=getTasksParams,verify=False) +assert response.ok +outputPendingTasks = response.json() + + +# Print Tasks Created by Current User +taskList = [ ] +for entry in outputPendingTasks['data']: + if str(entry['createdBy']) == str(CVP_USER): + print( "TaskNumber: %s Description: %s" %(entry['workOrderId'],entry['description'])) + taskList.append(str(entry['workOrderId'])) +#print "TaskList: %s"%taskList + + diff --git a/topologies/training-fxf/files/scripts/TaskExecute b/topologies/training-fxf/files/scripts/TaskExecute new file mode 100644 index 000000000..3db487284 --- /dev/null +++ b/topologies/training-fxf/files/scripts/TaskExecute @@ -0,0 +1,56 @@ +import requests +import json + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + + +# Create an HTTP GET request to the CVP server + +getTasksURL = "/cvpservice/task/getTasks.do?" +getTasksParams = {'startIndex':'0','endIndex':'0','queryparam':'Pending'} +response = requests.get(url+getTasksURL,cookies=cookies, params=getTasksParams,verify=False) +assert response.ok +outputPendingTasks = response.json() + + +# Print Tasks Created by Current User +taskList = [ ] +for entry in outputPendingTasks['data']: + if str(entry['createdBy']) == str(CVP_USER): + print "TaskNumber: %s"%entry['workOrderId'] + taskList.append(str(entry['workOrderId'])) +print "TaskList: %s"%taskList + + + +headers = { 'Content-Type': 'application/json' } +postTaskExecuteURL = "/cvpservice/task/executeTask.do" +for taskNumber in taskList: + executeData = json.dumps({'data': [taskNumber]}) + response = requests.post(url+postTaskExecuteURL, cookies=cookies,data=executeData,headers=headers,verify=False) + assert response.ok + outputExecuteTask = response.json() + print (outputExecuteTask['data']) + print "Task: "+str(taskNumber)+" Execute: "+str(outputExecuteTask['data']) + print "\n" + diff --git a/topologies/training-fxf/files/scripts/TaskLog b/topologies/training-fxf/files/scripts/TaskLog new file mode 100644 index 000000000..c835008b8 --- /dev/null +++ b/topologies/training-fxf/files/scripts/TaskLog @@ -0,0 +1,59 @@ +import requests +import json + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + + +# Create an HTTP GET request to the CVP server + +getTasksURL = "/cvpservice/task/getTasks.do?" +getTasksParams = {'startIndex':'0','endIndex':'0'} +response = requests.get(url+getTasksURL,cookies=cookies, params=getTasksParams,verify=False) +assert response.ok +outputTasks = response.json() + + +# Print Tasks Created by Current User +taskList = [ ] +for entry in outputTasks['data']: + if str(entry['createdBy']) == str(CVP_USER): + print "TaskNumber: %s"%entry['workOrderId'] + taskList.append(str(entry['workOrderId'])) +print "TaskList: %s"%taskList + + + +# Create an HTTP POST request to the CVP server + +headers = { 'Content-Type': 'application/json' } +postTaskLogURL = "/cvpservice/workflow/addWorkOrderLog.do" +taskLogData = json.dumps({"taskId": taskList[0],"message": "This is a test Change","source": "CVP REST API"}) +response = requests.post(url+postTaskLogURL, cookies=cookies, data=taskLogData,headers=headers,verify=False) +assert response.ok +outputTaskLog = response.json() + +# Print Configlet details + +print "TaskLogAmmend: %s"%outputTaskLog['data'] +print "\n" + diff --git a/topologies/training-fxf/files/scripts/TaskLog1 b/topologies/training-fxf/files/scripts/TaskLog1 new file mode 100644 index 000000000..c835008b8 --- /dev/null +++ b/topologies/training-fxf/files/scripts/TaskLog1 @@ -0,0 +1,59 @@ +import requests +import json + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + + +# Create an HTTP GET request to the CVP server + +getTasksURL = "/cvpservice/task/getTasks.do?" +getTasksParams = {'startIndex':'0','endIndex':'0'} +response = requests.get(url+getTasksURL,cookies=cookies, params=getTasksParams,verify=False) +assert response.ok +outputTasks = response.json() + + +# Print Tasks Created by Current User +taskList = [ ] +for entry in outputTasks['data']: + if str(entry['createdBy']) == str(CVP_USER): + print "TaskNumber: %s"%entry['workOrderId'] + taskList.append(str(entry['workOrderId'])) +print "TaskList: %s"%taskList + + + +# Create an HTTP POST request to the CVP server + +headers = { 'Content-Type': 'application/json' } +postTaskLogURL = "/cvpservice/workflow/addWorkOrderLog.do" +taskLogData = json.dumps({"taskId": taskList[0],"message": "This is a test Change","source": "CVP REST API"}) +response = requests.post(url+postTaskLogURL, cookies=cookies, data=taskLogData,headers=headers,verify=False) +assert response.ok +outputTaskLog = response.json() + +# Print Configlet details + +print "TaskLogAmmend: %s"%outputTaskLog['data'] +print "\n" + diff --git a/topologies/training-fxf/files/scripts/TaskLogView b/topologies/training-fxf/files/scripts/TaskLogView new file mode 100644 index 000000000..7b34904dd --- /dev/null +++ b/topologies/training-fxf/files/scripts/TaskLogView @@ -0,0 +1,51 @@ +import requests +import json +import pprint + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + + +# Create an HTTP GET request to the CVP server + +getTasksURL = "/cvpservice/task/getTasks.do?" +getTasksParams = {'startIndex':'0','endIndex':'0'} +response = requests.get(url+getTasksURL,cookies=cookies, params=getTasksParams,verify=False) +assert response.ok +outputTasks = response.json() + +taskList = [ ] +for entry in outputTasks['data']: + if str(entry['createdBy']) == str(CVP_USER): + taskList.append(str(entry['workOrderId'])) + +getTaskLogURL = "/cvpservice/task/getLogsById.do?" +#getTaskLogParams = {'startIndex':'0','endIndex':'0','id':'0'} +getTaskLogParams = {'startIndex':'0','endIndex':'0','id':taskList[0]} +response = requests.get(url+getTaskLogURL,cookies=cookies, params=getTaskLogParams,verify=False) +assert response.ok +outputTaskLog = response.json() + +# Print TaskLog details +print "TaskLogOutput: %s" %outputTaskLog['data'] +print "\n" + diff --git a/topologies/training-fxf/files/scripts/TaskNote b/topologies/training-fxf/files/scripts/TaskNote new file mode 100644 index 000000000..6cd1d6cfd --- /dev/null +++ b/topologies/training-fxf/files/scripts/TaskNote @@ -0,0 +1,52 @@ +import requests +import json +import pprint + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + + +# Create an HTTP GET request to the CVP server + +getTasksURL = "/cvpservice/task/getTasks.do?" +getTasksParams = {'startIndex':'0','endIndex':'0'} +response = requests.get(url+getTasksURL,cookies=cookies, params=getTasksParams,verify=False) +assert response.ok +outputTasks = response.json() + +taskList = [ ] +for entry in outputTasks['data']: + if str(entry['createdBy']) == str(CVP_USER): + taskList.append(str(entry['workOrderId'])) + +headers = { 'Content-Type': 'application/json' } +postTaskNoteURL = "/cvpservice/task/addNoteToTask.do" +taskNoteData = json.dumps({"workOrderId": taskList[0],"note": "This is a test Change using the API"}) +response = requests.post(url+postTaskNoteURL, cookies=cookies, data=taskNoteData,headers=headers,verify=False) +assert response.ok +outputTaskNote = response.json() + +# Print Task details + +print "TaskNoteAmmend: %s"%outputTaskNote['data'] +print "\n" + diff --git a/topologies/training-fxf/labguides/.gitignore b/topologies/training-fxf/labguides/.gitignore new file mode 100644 index 000000000..ed86553f4 --- /dev/null +++ b/topologies/training-fxf/labguides/.gitignore @@ -0,0 +1,2 @@ +.DS_Store +build/ diff --git a/topologies/training-fxf/labguides/Makefile b/topologies/training-fxf/labguides/Makefile new file mode 100644 index 000000000..874ed2529 --- /dev/null +++ b/topologies/training-fxf/labguides/Makefile @@ -0,0 +1,20 @@ +# Minimal makefile for Sphinx documentation +# + +# You can set these variables from the command line. +SPHINXOPTS = +SPHINXBUILD = python -msphinx +SPHINXPROJ = ATD +SOURCEDIR = source +BUILDDIR = build + +# Put it first so that "make" without argument is like "make help". +help: + @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) + +.PHONY: help Makefile + +# Catch-all target: route all unknown targets to Sphinx using the new +# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). +%: Makefile + @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) \ No newline at end of file diff --git a/topologies/training-fxf/labguides/readme.md b/topologies/training-fxf/labguides/readme.md new file mode 100644 index 000000000..5a5369ecd --- /dev/null +++ b/topologies/training-fxf/labguides/readme.md @@ -0,0 +1,12 @@ +# Lab Guides +In this folder are rST (restructured text) formatted lab guides for the ATD event. + +## Building +To build the documentation, you will need to install Sphinx and sphinx_bootstrap_theme with `pip`: + +`pip install sphinx sphinx_bootstrap_theme` + +## Contributing +At some point, this section may expand, but for now please make sure to review existing files for formatting guidelines. + +Please see https://github.com/ralsina/rst-cheatsheet/blob/master/rst-cheatsheet.rst for a cheat sheet. \ No newline at end of file diff --git a/topologies/training-fxf/labguides/source/_static/arista_logo.png b/topologies/training-fxf/labguides/source/_static/arista_logo.png new file mode 100644 index 000000000..2376e72b9 Binary files /dev/null and b/topologies/training-fxf/labguides/source/_static/arista_logo.png differ diff --git a/topologies/training-fxf/labguides/source/_static/arista_logo_160by26.png b/topologies/training-fxf/labguides/source/_static/arista_logo_160by26.png new file mode 100644 index 000000000..d0d0cbeec Binary files /dev/null and b/topologies/training-fxf/labguides/source/_static/arista_logo_160by26.png differ diff --git a/topologies/training-fxf/labguides/source/_static/arista_logo_320by52.png b/topologies/training-fxf/labguides/source/_static/arista_logo_320by52.png new file mode 100644 index 000000000..43dfa7ed2 Binary files /dev/null and b/topologies/training-fxf/labguides/source/_static/arista_logo_320by52.png differ diff --git a/topologies/training-fxf/labguides/source/_static/cloudvision-icon.png b/topologies/training-fxf/labguides/source/_static/cloudvision-icon.png new file mode 100644 index 000000000..c309ed98e Binary files /dev/null and b/topologies/training-fxf/labguides/source/_static/cloudvision-icon.png differ diff --git a/topologies/training-fxf/labguides/source/_static/logo.jpg b/topologies/training-fxf/labguides/source/_static/logo.jpg new file mode 100644 index 000000000..6eda41f7e Binary files /dev/null and b/topologies/training-fxf/labguides/source/_static/logo.jpg differ diff --git a/topologies/training-fxf/labguides/source/_static/my-styles.css b/topologies/training-fxf/labguides/source/_static/my-styles.css new file mode 100644 index 000000000..1150528ee --- /dev/null +++ b/topologies/training-fxf/labguides/source/_static/my-styles.css @@ -0,0 +1,41 @@ +body { + background-color: #FFFFFF; + color: #002859 +} + +.navbar-inverse { + background-image: -webkit-linear-gradient(#6d94bf, #446e9b 50%, #002859); + background-image: -o-linear-gradient(#6d94bf, #446e9b 50%, #002859); + background-image: -webkit-gradient(linear, left top, left bottom, from(#6d94bf), color-stop(50%, #446e9b), to(#002859)); + background-image: linear-gradient(#6d94bf, #446e9b 50%, #002859); + background-repeat: no-repeat; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff6d94bf', endColorstr='#ff002859', GradientType=0); + -webkit-filter: none; + filter: none; + border: 1px solid #345578; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.3) +} + +.navbar-brand { + background: url("arista_logo_320by52.png") center / contain no-repeat; + display: inline-block; + width: 1px; + padding: 0 10px 0 60px; + margin-right: 30px; + margin-left: -30px; +} + +.navbar-brand>img { + display: inline-block; + padding: 0 100px 0 0px; + margin-right: 20px; +} +a.navbar-brand { + display: inline-block; + padding: 15px 0 0 120px; +} + +footer { + background-color: #002859; + color: #FFFFFF; +} diff --git a/topologies/training-fxf/labguides/source/conf.py b/topologies/training-fxf/labguides/source/conf.py new file mode 100644 index 000000000..afccec09c --- /dev/null +++ b/topologies/training-fxf/labguides/source/conf.py @@ -0,0 +1,247 @@ +# -*- coding: utf-8 -*- +# +# ATD documentation build configuration file, created by +# sphinx-quickstart on Tue Apr 17 10:00:04 2018. +# +# This file is execfile()d with the current directory set to its +# containing dir. +# +# Note that not all possible configuration values are present in this +# autogenerated file. +# +# All configuration values have a default; values that are commented out +# serve to show the default. + +# If extensions (or modules to document with autodoc) are in another directory, +# add these directories to sys.path here. If the directory is relative to the +# documentation root, use os.path.abspath to make it absolute, like shown here. +# +# import os +# import sys +# sys.path.insert(0, os.path.abspath('.')) + +import sphinx_bootstrap_theme + +# Importing datetime module to auto update copyright year +from datetime import date + +# -- General configuration ------------------------------------------------ + +# If your documentation needs a minimal Sphinx version, state it here. +# +# needs_sphinx = '1.0' + +# Add any Sphinx extension module names here, as strings. They can be +# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom +# ones. + +# Add any paths that contain templates here, relative to this directory. +templates_path = ['_templates'] + +# The suffix(es) of source filenames. +# You can specify multiple suffix as a list of string: +# +# source_suffix = ['.rst', '.md'] +source_suffix = '.rst' + +# The master toctree document. +master_doc = 'index' + +# General information about the project. +# Updating copyright var to auto update with current year +project = u'Arista ATD' +copyright = u'{0}, Arista Networks'.format(date.today().year) +author = u'Arista ATD atd-help@arista.com' + +# Show Source +html_show_sourcelink = False + +# The version info for the project you're documenting, acts as replacement for +# |version| and |release|, also used in various other places throughout the +# built documents. +# +# The short X.Y version. +version = u'Version 3.0' +# The full version, including alpha/beta/rc tags. +release = u'1' + +# The language for content autogenerated by Sphinx. Refer to documentation +# for a list of supported languages. +# +# This is also used if you do content translation via gettext catalogs. +# Usually you set "language" from the command line for these cases. +language = None + +# List of patterns, relative to source directory, that match files and +# directories to ignore when looking for source files. +# This patterns also effect to html_static_path and html_extra_path +exclude_patterns = [] + +# The name of the Pygments (syntax highlighting) style to use. +pygments_style = 'sphinx' + +# If true, `todo` and `todoList` produce output, else they produce nothing. +todo_include_todos = False + + +# -- Options for HTML output ---------------------------------------------- + +# The theme to use for HTML and HTML Help pages. See the documentation for +# a list of builtin themes. +# +#html_theme = 'alabaster' +html_theme = 'bootstrap' +html_theme_path = sphinx_bootstrap_theme.get_html_theme_path() + +# Add any paths that contain custom static files (such as style sheets) here, +# relative to this directory. They are copied after the builtin static files, +# so a file named "default.css" will overwrite the builtin "default.css". +html_static_path = ['_static'] + +# Theme options are theme-specific and customize the look and feel of a theme +# further. For a list of options available for each theme, see the +# documentation. +# +html_theme_options = { + # Navigation bar title. (Default: ``project`` value) + 'navbar_title': "ATD", + + # Tab name for entire site. (Default: "Site") + 'navbar_site_name': "Table of Contents", + + # A list of tuples containing pages or urls to link to. + # Valid tuples should be in the following forms: + # (name, page) # a link to a page + # (name, "/aa/bb", 1) # a link to an arbitrary relative url + # (name, "http://example.com", True) # arbitrary absolute url + # Note the "1" or "True" value above as the third argument to indicate + # an arbitrary url. + 'navbar_links': [ + ("Arista", "http://www.arista.com", True), + ], + + # Render the next and previous page links in navbar. (Default: true) + 'navbar_sidebarrel': True, + + # Render the current pages TOC in the navbar. (Default: true) + 'navbar_pagenav': False, + + # Tab name for the current pages TOC. (Default: "Page") + 'navbar_pagenav_name': "Page", + + # Global TOC depth for "site" navbar tab. (Default: 1) + # Switching to -1 shows all levels. + 'globaltoc_depth': 2, + + # Include hidden TOCs in Site navbar? + # + # Note: If this is "false", you cannot have mixed ``:hidden:`` and + # non-hidden ``toctree`` directives in the same page, or else the build + # will break. + # + # Values: "true" (default) or "false" + 'globaltoc_includehidden': "true", + + # HTML navbar class (Default: "navbar") to attach to
    element. + # For black navbar, do "navbar navbar-inverse" + #'navbar_class': "navbar navbar-inverse", + 'navbar_class': "navbar", + + # Fix navigation bar to top of page? + # Values: "true" (default) or "false" + 'navbar_fixed_top': "true", + + # Location of link to source. + # Options are "nav" (default), "footer" or anything else to exclude. + #'source_link_position': "nav", + + # Bootswatch (http://bootswatch.com/) theme. + # + # Options are nothing (default) or the name of a valid theme + # such as "cosmo" or "sandstone". + # + # The set of valid themes depend on the version of Bootstrap + # that's used (the next config option). + # + # Currently, the supported themes are: + # - Bootstrap 2: https://bootswatch.com/2 + # - Bootstrap 3: https://bootswatch.com/3 + 'bootswatch_theme': "spacelab", + + # Choose Bootstrap version. + # Values: "3" (default) or "2" (in quotes) + 'bootstrap_version': "3", +} + +# The name for this set of Sphinx documents. If None, it defaults to +# " v documentation". +#html_title = "AristaATD" + +# A shorter title for the navigation bar. Default is the same as html_title. +#html_short_title = "Demo" + +# (Optional) Logo. Should be small enough to fit the navbar (ideally 24x24). +# Path should be relative to the ``_static`` files directory. +#html_logo = "cloudvision-icon.png" + +# -- Options for HTMLHelp output ------------------------------------------ + +# Output file base name for HTML help builder. +htmlhelp_basename = 'AristaATD' + + +# -- Options for LaTeX output --------------------------------------------- + +latex_elements = { + # The paper size ('letterpaper' or 'a4paper'). + # + # 'papersize': 'letterpaper', + + # The font size ('10pt', '11pt' or '12pt'). + # + # 'pointsize': '10pt', + + # Additional stuff for the LaTeX preamble. + # + # 'preamble': '', + + # Latex figure (float) alignment + # + # 'figure_align': 'htbp', +} + +# Grouping the document tree into LaTeX files. List of tuples +# (source start file, target name, title, +# author, documentclass [howto, manual, or own class]). +latex_documents = [ + (master_doc, 'ATD.tex', u'ATD Lab Guide', + u'ATD Help (atd-help@arista.com)', 'manual'), +] + + +# -- Options for manual page output --------------------------------------- + +# One entry per manual page. List of tuples +# (source start file, name, description, authors, manual section). +man_pages = [ + (master_doc, 'atd', u'ATD Lab Guide', + [author], 1) +] + + +# -- Options for Texinfo output ------------------------------------------- + +# Grouping the document tree into Texinfo files. List of tuples +# (source start file, target name, title, author, +# dir menu entry, description, category) +texinfo_documents = [ + (master_doc, 'ATD', u'ATD Lab Guide', + author, 'ATD', 'Lab Documentation.', + 'Miscellaneous'), +] + + +def setup(app): + app.add_stylesheet("my-styles.css") # also can be a full URL + # app.add_stylesheet("ANOTHER.css") + # app.add_stylesheet("AND_ANOTHER.css") diff --git a/topologies/training-fxf/labguides/source/connecting.rst b/topologies/training-fxf/labguides/source/connecting.rst new file mode 100644 index 000000000..10ae589ef --- /dev/null +++ b/topologies/training-fxf/labguides/source/connecting.rst @@ -0,0 +1,28 @@ +Connecting +========== + +1. Log into the Arista Test Drive portal with your assigned URL. If you + don’t have one, please see your ATD staff. + +.. image:: images/connecting/nested_connecting_1.png + +2. SSH to the public address assigned to the LabAccess jumphost server (this is the Topology Address shown in the "Welcome to Arista's Test Drive!" picture above). The username is ``arista`` and the password is ``{REPLACE_PWD}``: + + .. code-block:: text + + ssh arista@{unique_address}.topo.testdrive.arista.com + +| + +.. image:: images/connecting/nested_connecting_2.png + :align: center + +| + +3. The LabAccess menu allows users to connect to each device and specify + lab topology. It is recommended to open multiple SSH sessions or use + the Screen option (under the SSH Menu) to jump between devices rapidly. + + You can also Access the LabAccess Menu from your browser by clicking on `Console Access` + +.. image:: images/connecting/nested_connecting_3.png diff --git a/topologies/training-fxf/labguides/source/images/connecting/nested_connecting_1.png b/topologies/training-fxf/labguides/source/images/connecting/nested_connecting_1.png new file mode 100644 index 000000000..aa76597b8 Binary files /dev/null and b/topologies/training-fxf/labguides/source/images/connecting/nested_connecting_1.png differ diff --git a/topologies/training-fxf/labguides/source/images/connecting/nested_connecting_2.png b/topologies/training-fxf/labguides/source/images/connecting/nested_connecting_2.png new file mode 100644 index 000000000..2c6b51a2b Binary files /dev/null and b/topologies/training-fxf/labguides/source/images/connecting/nested_connecting_2.png differ diff --git a/topologies/training-fxf/labguides/source/images/connecting/nested_connecting_3.png b/topologies/training-fxf/labguides/source/images/connecting/nested_connecting_3.png new file mode 100644 index 000000000..1cc7402a3 Binary files /dev/null and b/topologies/training-fxf/labguides/source/images/connecting/nested_connecting_3.png differ diff --git a/topologies/training-fxf/labguides/source/images/logo.jpg b/topologies/training-fxf/labguides/source/images/logo.jpg new file mode 100644 index 000000000..6eda41f7e Binary files /dev/null and b/topologies/training-fxf/labguides/source/images/logo.jpg differ diff --git a/topologies/training-fxf/labguides/source/index.rst b/topologies/training-fxf/labguides/source/index.rst new file mode 100644 index 000000000..bb76aaa2e --- /dev/null +++ b/topologies/training-fxf/labguides/source/index.rst @@ -0,0 +1,8 @@ +Welcome to the Arista Training documentation! +======================================== + +.. toctree:: + :maxdepth: 1 + :caption: EOS Configuration + + connecting.rst diff --git a/topologies/training-fxf/topo_build.yml b/topologies/training-fxf/topo_build.yml new file mode 100644 index 000000000..4e1538a08 --- /dev/null +++ b/topologies/training-fxf/topo_build.yml @@ -0,0 +1,138 @@ +host_cpu: 4 +cvp_cpu: 32 +cvp_ram: 42 +cvp_nodes: 1 +veos_cpu: 2 +nodes: + - Wan-1: + ip_addr: 192.168.0.11 + sys_mac: 00:1c:73:b1:c6:01 + neighbors: + - neighborDevice: Router-1 + neighborPort: Ethernet1 + port: Ethernet1 + - neighborDevice: Router-2 + neighborPort: Ethernet1 + port: Ethernet2 + - neighborDevice: host-1 + neighborPort: Ethernet1 + port: Ethernet3 + - Router-1: + ip_addr: 192.168.0.12 + sys_mac: 00:1c:73:b2:c6:01 + neighbors: + - neighborDevice: Wan-1 + neighborPort: Ethernet1 + port: Ethernet1 + - neighborDevice: Core-1 + neighborPort: Ethernet5 + port: Ethernet2 + - neighborDevice: Router-2 + neighborPort: Ethernet3 + port: Ethernet3 + - neighborDevice: Router-2 + neighborPort: Ethernet4 + port: Ethernet4 + - Router-2: + ip_addr: 192.168.0.13 + sys_mac: 00:1c:73:b3:c6:01 + neighbors: + - neighborDevice: Wan-1 + neighborPort: Ethernet2 + port: Ethernet1 + - neighborDevice: Core-2 + neighborPort: Ethernet5 + port: Ethernet2 + - neighborDevice: Router-1 + neighborPort: Ethernet3 + port: Ethernet3 + - neighborDevice: Router-1 + neighborPort: Ethernet4 + port: Ethernet4 + - Core-1: + ip_addr: 192.168.0.21 + sys_mac: 00:1c:73:c1:c6:01 + neighbors: + - neighborDevice: Access-1 + neighborPort: Ethernet1 + port: Ethernet1 + - neighborDevice: Access-2 + neighborPort: Ethernet2 + port: Ethernet2 + - neighborDevice: Core-2 + neighborPort: Ethernet3 + port: Ethernet3 + - neighborDevice: Core-2 + neighborPort: Ethernet4 + port: Ethernet4 + - neighborDevice: Router-1 + neighborPort: Ethernet2 + port: Ethernet5 + - Core-2: + ip_addr: 192.168.0.22 + sys_mac: 00:1c:73:c2:c6:01 + neighbors: + - neighborDevice: Access-2 + neighborPort: Ethernet1 + port: Ethernet1 + - neighborDevice: Access-1 + neighborPort: Ethernet2 + port: Ethernet2 + - neighborDevice: Core-1 + neighborPort: Ethernet3 + port: Ethernet3 + - neighborDevice: Core-1 + neighborPort: Ethernet4 + port: Ethernet4 + - neighborDevice: Router-2 + neighborPort: Ethernet2 + port: Ethernet5 + - Access-1: + ip_addr: 192.168.0.23 + sys_mac: 00:1c:73:c3:c6:01 + neighbors: + - neighborDevice: Core-1 + neighborPort: Ethernet1 + port: Ethernet1 + - neighborDevice: Core-2 + neighborPort: Ethernet2 + port: Ethernet2 + - neighborDevice: host-12 + neighborPort: Ethernet1 + port: Ethernet3 + - Access-2: + ip_addr: 192.168.0.24 + sys_mac: 00:1c:73:c4:c6:01 + neighbors: + - neighborDevice: Core-2 + neighborPort: Ethernet1 + port: Ethernet1 + - neighborDevice: Core-1 + neighborPort: Ethernet2 + port: Ethernet2 + - neighborDevice: host-14 + neighborPort: Ethernet1 + port: Ethernet3 + - host-1: + ip_addr: 192.168.0.41 + sys_mac: 00:1c:73:e1:c6:01 + neighbors: + - neighborDevice: Wan-1 + neighborPort: Ethernet3 + port: Ethernet1 + - host-12: + ip_addr: 192.168.0.42 + sys_mac: 00:1c:73:e2:c6:01 + neighbors: + - neighborDevice: Access-1 + neighborPort: Ethernet3 + port: Ethernet1 + - host-14: + ip_addr: 192.168.0.43 + sys_mac: 00:1c:73:e3:c6:01 + neighbors: + - neighborDevice: Access-2 + neighborPort: Ethernet3 + port: Ethernet1 +additional_ssh_nodes: +additional_clab_nodes: diff --git a/topologies/training-fxg/atd-topo.png b/topologies/training-fxg/atd-topo.png new file mode 100644 index 000000000..cf663b5dc Binary files /dev/null and b/topologies/training-fxg/atd-topo.png differ diff --git a/topologies/training-fxg/configlets/ATD-INFRA b/topologies/training-fxg/configlets/ATD-INFRA new file mode 100644 index 000000000..a8c0268c6 --- /dev/null +++ b/topologies/training-fxg/configlets/ATD-INFRA @@ -0,0 +1,53 @@ +vrf instance MGMT +! +daemon TerminAttr + exec /usr/bin/TerminAttr -cvcompression=gzip -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent -cvaddr=192.168.0.5:9910 -cvauth=token,/tmp/token -cvvrf=MGMT -taillogs -disableaaa + no shutdown +! +alias mlag-reload bash /mnt/flash/shut_intfs && sudo shutdown now -r +alias conint sh interface | i connected +alias senz show interface counter error | nz +alias shmc show int | awk '/^[A-Z]/ { intf = $1 } /, address is/ { print intf, $6 }' +alias snz show interface counter | nz +alias spd show port-channel %1 detail all +alias sqnz show interface counter queue | nz +alias srnz show interface counter rate | nz +alias intdesc + !! Usage: intdesc interface-name description + 10 config + 20 int %1 + 30 desc %2 + 40 exit +! +dns domain arista.lab +! +service routing protocols model multi-agent +! +ntp server vrf MGMT 192.168.0.1 iburst source Management1 +! +radius-server host 192.168.0.1 vrf MGMT key 7 0207165218120E +! +aaa group server radius atds + server 192.168.0.1 vrf MGMT +! +aaa authentication login default group atds local +aaa authorization exec default group atds local +aaa authorization commands all default local +! +username Script secret sha512 $6$PNfpb9anSBQ5/aia$phaa3ar5pwkntenD9WHc6Ed5b96lbW0dc0bjtwPnFLaDiCK8D5Cjl6ewP/xdNbl4PtS6Paq.3SssN8pj05NQm. +username admin privilege 15 role network-admin secret 5 $1$5O85YVVn$HrXcfOivJEnISTMb6xrJc. +username arista privilege 15 role network-admin secret 5 $1$4VjIjfd1$XkUVulbNDESHFzcxDU.Tk1 +! +username arista ssh-key ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC+ERvV4GaPq3FzxY8T+5hMF/1T+l8wiPsVCtOrZU4Hy6NCNlAiDBdA/RUtX5/aOu5JvHyPTVHqWJ0qi9BqU3rxCNl/l2/5UZbm9RPzdZ1QCwoYwPB9/j/tYJV8lZdr6t0yGBfxgzD3oW/zF7a+ZtASaMAu7lkgoqPK2pVIGa+Y9ZCsA0Xq756XpLCw+d3pHKHvIkgWLCo9FoeIv8f/bu5u/ztzRE+Nvl+o5add6MxnjsXz3s7BnW2FX6JNjyp0Z+OXjupQc2gcfFvpd/dA2lCNuuaCHkRgyPwIZtWPmNqMRXPp37mlPwV43qDJRVPQkvh0xPxwS35BbzUxWdT+ZLZv +! +ip radius source-interface Management1 +! +ip routing vrf MGMT +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 +! +management api http-commands + no shutdown + vrf MGMT + no shutdown +! diff --git a/topologies/training-fxg/configlets/Access-1-BASE b/topologies/training-fxg/configlets/Access-1-BASE new file mode 100644 index 000000000..603418ba9 --- /dev/null +++ b/topologies/training-fxg/configlets/Access-1-BASE @@ -0,0 +1,14 @@ +hostname Access-1 +! +! +interface Management1 + vrf MGMT + ip address 192.168.0.23/24 + + +! +dns domain arista.lab +! +ip routing vrf MGMT +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 diff --git a/topologies/training-fxg/configlets/Access-2-BASE b/topologies/training-fxg/configlets/Access-2-BASE new file mode 100644 index 000000000..429a9159e --- /dev/null +++ b/topologies/training-fxg/configlets/Access-2-BASE @@ -0,0 +1,14 @@ +hostname Access-2 +! +! +interface Management1 + vrf MGMT + ip address 192.168.0.24/24 + + +! +dns domain arista.lab +! +ip routing vrf MGMT +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 diff --git a/topologies/training-fxg/configlets/Base-Builder.py b/topologies/training-fxg/configlets/Base-Builder.py new file mode 100644 index 000000000..167d9c750 --- /dev/null +++ b/topologies/training-fxg/configlets/Base-Builder.py @@ -0,0 +1,86 @@ +from cvplibrary import CVPGlobalVariables, GlobalVariableNames, Form + + + +# Get this devices Serial + + +serial = CVPGlobalVariables.getValue( GlobalVariableNames.CVP_SERIAL ) +mask = '24' +ServiceRouting = True + +#Create the IP address from the serial number + + +if serial == '4A7F6E96300132903A73A74CCF18B697': + IPaddress = '192.168.0.21' + hostname = 'leaf1' + + +elif serial == '3831DEFC364900BF9EEFC45FEE7794E7': + IPaddress = '192.168.0.22' + hostname = 'leaf2' + + +elif serial == 'ED469CFA13C4017B2D19BF7EBCAD50B1': + IPaddress = '192.168.0.23' + hostname = 'leaf3' + + +elif serial == '434653268ABA082A2FF6B52F1367CE80': + IPaddress = '192.168.0.24' + hostname = 'leaf4' + +elif serial == '8085B9640BC6D8FDC1FD23D242EBF433': + IPaddress = '192.168.0.11' + hostname = 'spine1' + +elif serial == 'D28D62E5729AB8BF44A0BC017DEB188A': + IPaddress = '192.168.0.12' + hostname = 'spine2' + +elif serial == 'F77703A62ADE220E689A41057AA56288': + IPaddress = '192.168.0.13' + hostname = 'spine3' + +elif serial == 'D763323F00C03738A8C824D2F1DA05E8': + IPaddress = '192.168.0.25' + hostname = 'borderleaf1' + +elif serial == '7C16136B7483F2E2FB002E8E0646F1F0': + IPaddress = '192.168.0.26' + hostname = 'borderleaf2' + +elif serial == '86342B780ED73BCB30E1DFE48E26AC38': + IPaddress = '192.168.0.51' + ServiceRouting = False + hostname = 'host1' + + +elif serial == 'CE0B31805130945E3CE40B060E9E636D': + IPaddress = '192.168.0.52' + ServiceRouting = False + hostname = 'host2' + + +# Generate and print config - Ignore the service routing command if not needed +print 'hostname %s' % hostname +print '!' +print 'interface Management 1' +print ' ip address %s/%s' % ( IPaddress, mask ) +print ' no lldp transmit' +print ' no lldp receive' +print '!' +if ServiceRouting: + print 'service routing protocols model multi-agent' + print '!' +print 'dns domain arista.lab' +print '!' +print 'ip route 0.0.0.0/0 192.168.0.1' +print '!' +print 'ip routing' +print '!' +print 'management api http-commands' +print ' no shutdown' +print ' protocol http' +print '!' \ No newline at end of file diff --git a/topologies/training-fxg/configlets/Core-1-BASE b/topologies/training-fxg/configlets/Core-1-BASE new file mode 100644 index 000000000..4a983df28 --- /dev/null +++ b/topologies/training-fxg/configlets/Core-1-BASE @@ -0,0 +1,14 @@ +hostname Core-1 +! +! +interface Management1 + vrf MGMT + ip address 192.168.0.21/24 + + +! +dns domain arista.lab +! +ip routing vrf MGMT +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 diff --git a/topologies/training-fxg/configlets/Core-2-BASE b/topologies/training-fxg/configlets/Core-2-BASE new file mode 100644 index 000000000..af2399087 --- /dev/null +++ b/topologies/training-fxg/configlets/Core-2-BASE @@ -0,0 +1,14 @@ +hostname Core-2 +! +! +interface Management1 + vrf MGMT + ip address 192.168.0.22/24 + + +! +dns domain arista.lab +! +ip routing vrf MGMT +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 diff --git a/topologies/training-fxg/configlets/Router-1-BASE b/topologies/training-fxg/configlets/Router-1-BASE new file mode 100644 index 000000000..e68fe76ad --- /dev/null +++ b/topologies/training-fxg/configlets/Router-1-BASE @@ -0,0 +1,14 @@ +hostname Router-1 +! +! +interface Management1 + vrf MGMT + ip address 192.168.0.12/24 + + +! +dns domain arista.lab +! +ip routing vrf MGMT +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 diff --git a/topologies/training-fxg/configlets/Router-2-BASE b/topologies/training-fxg/configlets/Router-2-BASE new file mode 100644 index 000000000..da13cac20 --- /dev/null +++ b/topologies/training-fxg/configlets/Router-2-BASE @@ -0,0 +1,14 @@ +hostname Router-2 +! +! +interface Management1 + vrf MGMT + ip address 192.168.0.13/24 + + +! +dns domain arista.lab +! +ip routing vrf MGMT +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 diff --git a/topologies/training-fxg/configlets/Wan-1-BASE b/topologies/training-fxg/configlets/Wan-1-BASE new file mode 100644 index 000000000..42431a61b --- /dev/null +++ b/topologies/training-fxg/configlets/Wan-1-BASE @@ -0,0 +1,14 @@ +hostname Wan-1 +! +! +interface Management1 + vrf MGMT + ip address 192.168.0.11/24 + + +! +dns domain arista.lab +! +ip routing vrf MGMT +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 diff --git a/topologies/training-fxg/configlets/Wan-1-OSPF b/topologies/training-fxg/configlets/Wan-1-OSPF new file mode 100644 index 000000000..8e2237a54 --- /dev/null +++ b/topologies/training-fxg/configlets/Wan-1-OSPF @@ -0,0 +1,27 @@ +router ospf 1 + router-id 1.1.1.7 + passive-interface default + no passive-interface Ethernet1 + no passive-interface Ethernet2 + no passive-interface Vlan14 + network 10.0.0.16/30 area 0.0.0.1 + network 10.0.0.20/30 area 0.0.0.1 + network 14.0.0.0/24 area 0.0.0.0 + default-information originate always + + + interface Vlan14 + no autostate + ip address 14.0.0.254/24 + ip ospf area 0.0.0.0 + + interface Ethernet 1 + description OSPF Area 1 to Router-1 + ip ospf network point-to-point + ip ospf area 0.0.0.1 + + + interface Ethernet 2 + description OSPF Area 1 to Router-2 + ip ospf network point-to-point + ip ospf area 0.0.0.1 \ No newline at end of file diff --git a/topologies/training-fxg/configlets/host-1-BASE b/topologies/training-fxg/configlets/host-1-BASE new file mode 100644 index 000000000..6860bc957 --- /dev/null +++ b/topologies/training-fxg/configlets/host-1-BASE @@ -0,0 +1,27 @@ +hostname host-1 +! +no spanning-tree vlan-id 14 +! +interface Management1 + vrf MGMT + ip address 192.168.0.41/24 +! +vlan 14 +! +interface Vlan14 + ip address 14.0.0.11/24 + no autostate +! +interface Ethernet 1 + switchport + switchport mode access + switchport access vlan 14 +! +ip routing +ip route 0.0.0.0/0 14.0.0.254 +! +dns domain arista.lab +! +ip routing vrf MGMT +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 diff --git a/topologies/training-fxg/configlets/host-11-BASE b/topologies/training-fxg/configlets/host-11-BASE new file mode 100644 index 000000000..57f678028 --- /dev/null +++ b/topologies/training-fxg/configlets/host-11-BASE @@ -0,0 +1,28 @@ +hostname host-11 +! +no spanning-tree vlan-id 11 +! +interface Management1 + vrf MGMT + ip address 192.168.0.42/24 +! +vlan 11 +! +interface Vlan11 + ip address 11.0.0.11/24 + no autostate +! +interface Ethernet 1 + switchport + switchport mode access + switchport access vlan 11 +! +ip routing +! +ip route 0.0.0.0/0 11.0.0.1 +! +dns domain arista.lab +! +ip routing vrf MGMT +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 diff --git a/topologies/training-fxg/configlets/host-12-BASE b/topologies/training-fxg/configlets/host-12-BASE new file mode 100644 index 000000000..5ff9d1335 --- /dev/null +++ b/topologies/training-fxg/configlets/host-12-BASE @@ -0,0 +1,28 @@ +hostname host-12 +! +no spanning-tree vlan-id 13 +! +interface Management1 + vrf MGMT + ip address 192.168.0.43/24 +! +vlan 13 +! +interface Vlan13 + ip address 13.0.0.11/24 + no autostate +! +interface Ethernet 1 + switchport + switchport mode access + switchport access vlan 13 +! +ip routing +! +ip route 0.0.0.0/0 13.0.0.1 +! +dns domain arista.lab +! +ip routing vrf MGMT +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 diff --git a/topologies/training-fxg/files/.ansible.cfg b/topologies/training-fxg/files/.ansible.cfg new file mode 100644 index 000000000..14c806515 --- /dev/null +++ b/topologies/training-fxg/files/.ansible.cfg @@ -0,0 +1,2 @@ +[defaults] +host_key_checking = False diff --git a/topologies/training-fxg/files/.screenrc b/topologies/training-fxg/files/.screenrc new file mode 100644 index 000000000..1d70f5e42 --- /dev/null +++ b/topologies/training-fxg/files/.screenrc @@ -0,0 +1,23 @@ +# Turn off the startup message. +startup_message off +# Set the caption to the active windows. +caption always "%-Lw%{= BW}%50>%n%f* %t%{-}%+Lw%<" + +term screen-256color + +# New screens for various processes. +# Example: screen -t +# screen -t 7050SX-128 0 ssh aristaadmin@192.100.37.128 +screen 1 ssh 192.168.0.4 +screen -t CVP 2 ssh 192.168.0.5 +screen -t Spine1 3 ssh 192.168.0.11 +screen -t Spine2 4 ssh 192.168.0.12 +screen -t Spine3 5 ssh 192.168.0.13 +screen -t Leaf1 6 ssh 192.168.0.21 +screen -t Leaf2 7 ssh 192.168.0.22 +screen -t Leaf3 8 ssh 192.168.0.23 +screen -t Leaf4 9 ssh 192.168.0.24 +screen -t Borderleaf1 10 ssh 192.168.0.25 +screen -t Borderlead2 11 ssh 192.168.0.26 +screen -t Host1 15 ssh 192.168.0.51 +screen -t Host2 16 ssh 192.168.0.52 diff --git a/topologies/training-fxg/files/MenuOptions.yaml b/topologies/training-fxg/files/MenuOptions.yaml new file mode 100644 index 000000000..f68e2261d --- /dev/null +++ b/topologies/training-fxg/files/MenuOptions.yaml @@ -0,0 +1,214 @@ +--- +options: + reset: + - command: "/usr/local/bin/ConfigureTopology.py && bash /home/arista/Broadcaster/pushHostDefaultConfig.sh" + description: "Reset All Devices to Base ATD (reset)" + vxlan: + - command: "/usr/local/bin/ConfigureTopology.py -t vxlan" + description: "VXLAN Lab (vxlan)" + l2evpn: + - command: "/usr/local/bin/ConfigureTopology.py -t l2evpn" + description: "L2-EVPN Lab (l2evpn)" + l3evpn: + - command: "/usr/local/bin/ConfigureTopology.py -t l3evpn" + description: "L3-EVPN Lab (l3evpn)" + aamh: + - command: "/usr/local/bin/ConfigureTopology.py -t aamh" + description: "Active-Active Multi Homing lab (aamh)" + pim: + - command: "/usr/local/bin/ConfigureTopology.py -t aamh" + description: "PIM Lab (pim)" +labconfiglets: + reset: + spine1: + - "spine1-base" + spine2: + - "spine2-base" + spine3: + - "spine3-base" + leaf1: + - "leaf1-base" + leaf2: + - "leaf2-base" + leaf3: + - "leaf3-base" + leaf4: + - "leaf4-base" + host1: + - "host1-base" + host2: + - "host2-base" + borderleaf1: + - "borderleaf1-base" + borderleaf2: + - "borderleaf2-base" + vxlan: + spine1: + - "spine1-base" + - "Spine-1-VXALN-Begin" + spine2: + - "spine2-base" + - "Spine-2-VXALN-Begin" + spine3: + - "spine3-base" + - "Spine-3-VXALN-Begin" + leaf1: + - "leaf1-base" + - "Leaf-1-VXALN-Begin" + leaf2: + - "leaf2-base" + - "Leaf-2-VXALN-Begin" + leaf3: + - "leaf3-base" + - "leaf-3-VXALN-Begin" + leaf4: + - "leaf4-base" + - "leaf-4-VXALN-Begin" + host1: + - "host1-base" + - "Host-1-VXALN-Begin" + host2: + - "host2-base" + - "Host-2-VXALN-Begin" + borderleaf1: + - "borderleaf1-base" + - "Borderleaf-1-VXALN-Begin" + borderleaf2: + - "borderleaf2-base" + - "Borderleaf-2-VXALN-Begin" + l2evpn: + spine1: + - "spine1-base" + - "Spine-1-L2EVPN-Begin" + spine2: + - "spine2-base" + - "Spine-2-L2EVPN-Begin" + spine3: + - "spine3-base" + - "Spine-3-L2EVPN-Begin" + leaf1: + - "leaf1-base" + - "Leaf-1-L2EVPN-Begin" + leaf2: + - "leaf2-base" + - "Leaf-2-L2EVPN-Begin" + leaf3: + - "leaf3-base" + - "Leaf-3-L2EVPN-Begin" + leaf4: + - "leaf4-base" + - "Leaf-4-L2EVPN-Begin" + host1: + - "host1-base" + - "Host-1-L2EVPN-Begin" + host2: + - "host2-base" + - "Host-2-L2EVPN-Begin" + borderleaf1: + - "borderleaf1-base" + - "Borderleaf-1-L2EVPN-Begin" + borderleaf2: + - "borderleaf2-base" + - "Borderleaf-2-L2EVPN-Begin" + l3evpn: + spine1: + - "spine1-base" + - "Spine-1-L3EVPN-Begin" + spine2: + - "spine2-base" + - "Spine-2-L3EVPN-Begin" + spine3: + - "spine3-base" + - "Spine-3-L3EVPN-Begin" + leaf1: + - "leaf1-base" + - "Leaf-1-L3EVPN-Begin" + leaf2: + - "leaf2-base" + - "Leaf-2-L3EVPN-Begin" + leaf3: + - "leaf3-base" + - "Leaf-3-L3EVPN-Begin" + leaf4: + - "leaf4-base" + - "Leaf-4-L3EVPN-Begin" + host1: + - "host1-base" + - "Host-1-L3EVPN-Begin" + host2: + - "host2-base" + - "Host-2-L3EVPN-Begin" + borderleaf1: + - "borderleaf1-base" + - "Borderleaf-1-L3EVPN-Begin" + borderleaf2: + - "borderleaf2-base" + - "Borderleaf-2-L3EVPN-Begin" + aamh: + spine1: + - "spine1-base" + - "Spine-1-AAMH-Begin" + spine2: + - "spine2-base" + - "Spine-2-AAMH-Begin" + spine3: + - "spine3-base" + - "Spine-3-AAMH-Begin" + leaf1: + - "leaf1-base" + - "Leaf-1-AAMH-Begin" + leaf2: + - "leaf2-base" + - "Leaf-2-AAMH-Begin" + leaf3: + - "leaf3-base" + - "Leaf-3-AAMH-Begin" + leaf4: + - "leaf4-base" + - "Leaf-4-AAMH-Begin" + host1: + - "host1-base" + - "Host-1-AAMH-Begin" + host2: + - "host2-base" + - "Host-2-AAMH-Begin" + borderleaf1: + - "borderleaf1-base" + - "Borderleaf-1-AAMH-Begin" + borderleaf2: + - "borderleaf2-base" + - "Borderleaf-2-AAMH-Begin" + pim: + spine1: + - "spine1-base" + - "Spine-1-PIM-Begin" + spine2: + - "spine2-base" + - "Spine-2-PIM-Begin" + spine3: + - "spine3-base" + - "Spine-3-PIM-Begin" + leaf1: + - "leaf1-base" + - "Leaf-1-PIM-Begin" + leaf2: + - "leaf2-base" + - "Leaf-2-PIM-Begin" + leaf3: + - "leaf3-base" + - "Leaf-3-PIM-Begin" + leaf4: + - "leaf4-base" + - "Leaf-4-PIM-Begin" + host1: + - "host1-base" + - "Host-1-PIM-Begin" + host2: + - "host2-base" + - "Host-2-PIM-Begin" + borderleaf1: + - "borderleaf1-base" + - "Borderleaf-1-PIM-Begin" + borderleaf2: + - "borderleaf2-base" + - "Borderleaf-2-PIM-Begin" \ No newline at end of file diff --git a/topologies/training-fxg/files/apps/coder/coder.yaml b/topologies/training-fxg/files/apps/coder/coder.yaml new file mode 100644 index 000000000..80cc852d1 --- /dev/null +++ b/topologies/training-fxg/files/apps/coder/coder.yaml @@ -0,0 +1,4 @@ +bind-addr: 127.0.0.1:8080 +auth: password +password: {ARISTA_REPLACE} +cert: false \ No newline at end of file diff --git a/topologies/training-fxg/files/apps/coder/labfiles/.placeholder b/topologies/training-fxg/files/apps/coder/labfiles/.placeholder new file mode 100644 index 000000000..e69de29bb diff --git a/topologies/training-fxg/files/apps/gui/host-1/arista/host-startup.sh b/topologies/training-fxg/files/apps/gui/host-1/arista/host-startup.sh new file mode 100644 index 000000000..16eafb783 --- /dev/null +++ b/topologies/training-fxg/files/apps/gui/host-1/arista/host-startup.sh @@ -0,0 +1,17 @@ +sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 4EB27DB2A3B88B8B +sudo apt-get update +sudo apt install openssh-server -y +sudo service ssh start +sudo apt-get install ufw -y +sudo ufw enable +sudo ufw allow 22 +sudo ufw disable +useradd -rm -d /home/arista -s /bin/bash -g root -G sudo -u 1000 arista +echo 'arista:arista123' | chpasswd +service ssh start +sudo apt install ifenslave -y +sudo apt install iputils-ping -y +sudo add-apt-repository ppa:wireshark-dev/stable -y +sudo apt-get install filezilla -y +sudo apt-get install vsftpd -y +sudo service vsftpd restart \ No newline at end of file diff --git a/topologies/training-fxg/files/apps/gui/host-11/arista/host-startup.sh b/topologies/training-fxg/files/apps/gui/host-11/arista/host-startup.sh new file mode 100644 index 000000000..16eafb783 --- /dev/null +++ b/topologies/training-fxg/files/apps/gui/host-11/arista/host-startup.sh @@ -0,0 +1,17 @@ +sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 4EB27DB2A3B88B8B +sudo apt-get update +sudo apt install openssh-server -y +sudo service ssh start +sudo apt-get install ufw -y +sudo ufw enable +sudo ufw allow 22 +sudo ufw disable +useradd -rm -d /home/arista -s /bin/bash -g root -G sudo -u 1000 arista +echo 'arista:arista123' | chpasswd +service ssh start +sudo apt install ifenslave -y +sudo apt install iputils-ping -y +sudo add-apt-repository ppa:wireshark-dev/stable -y +sudo apt-get install filezilla -y +sudo apt-get install vsftpd -y +sudo service vsftpd restart \ No newline at end of file diff --git a/topologies/training-fxg/files/apps/gui/host-12/arista/host-startup.sh b/topologies/training-fxg/files/apps/gui/host-12/arista/host-startup.sh new file mode 100644 index 000000000..16eafb783 --- /dev/null +++ b/topologies/training-fxg/files/apps/gui/host-12/arista/host-startup.sh @@ -0,0 +1,17 @@ +sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 4EB27DB2A3B88B8B +sudo apt-get update +sudo apt install openssh-server -y +sudo service ssh start +sudo apt-get install ufw -y +sudo ufw enable +sudo ufw allow 22 +sudo ufw disable +useradd -rm -d /home/arista -s /bin/bash -g root -G sudo -u 1000 arista +echo 'arista:arista123' | chpasswd +service ssh start +sudo apt install ifenslave -y +sudo apt install iputils-ping -y +sudo add-apt-repository ppa:wireshark-dev/stable -y +sudo apt-get install filezilla -y +sudo apt-get install vsftpd -y +sudo service vsftpd restart \ No newline at end of file diff --git a/topologies/training-fxg/files/apps/gui/host6/arista/host-startup.sh b/topologies/training-fxg/files/apps/gui/host6/arista/host-startup.sh new file mode 100644 index 000000000..16eafb783 --- /dev/null +++ b/topologies/training-fxg/files/apps/gui/host6/arista/host-startup.sh @@ -0,0 +1,17 @@ +sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 4EB27DB2A3B88B8B +sudo apt-get update +sudo apt install openssh-server -y +sudo service ssh start +sudo apt-get install ufw -y +sudo ufw enable +sudo ufw allow 22 +sudo ufw disable +useradd -rm -d /home/arista -s /bin/bash -g root -G sudo -u 1000 arista +echo 'arista:arista123' | chpasswd +service ssh start +sudo apt install ifenslave -y +sudo apt install iputils-ping -y +sudo add-apt-repository ppa:wireshark-dev/stable -y +sudo apt-get install filezilla -y +sudo apt-get install vsftpd -y +sudo service vsftpd restart \ No newline at end of file diff --git a/topologies/training-fxg/files/apps/ssh/web.json b/topologies/training-fxg/files/apps/ssh/web.json new file mode 100644 index 000000000..13fac47dd --- /dev/null +++ b/topologies/training-fxg/files/apps/ssh/web.json @@ -0,0 +1,76 @@ +{ + "listen": { + "ip": "0.0.0.0", + "port": 2222 + }, + "user": { + "name": null, + "password": null, + "privatekey": null + }, + "ssh": { + "host": null, + "port": 22, + "localAddress": null, + "localPort": null, + "term": "xterm-color", + "readyTimeout": 20000, + "keepaliveInterval": 120000, + "keepaliveCountMax": 10, + "allowedSubnets": [ "192.168.0.0/16", "10.0.0.0/8", "172.16.0.0/12" ] + }, + "terminal": { + "cursorBlink": true, + "scrollback": 10000, + "tabStopWidth": 8, + "bellStyle": "sound" + }, + "header": { + "text": null, + "background": "green" + }, + "session": { + "name": "WebSSH2", + "secret": "mysecret" + }, + "options": { + "challengeButton": true, + "allowreauth": true + }, + "algorithms": { + "kex": [ + "ecdh-sha2-nistp256", + "ecdh-sha2-nistp384", + "ecdh-sha2-nistp521", + "diffie-hellman-group-exchange-sha256", + "diffie-hellman-group14-sha1" + ], + "cipher": [ + "aes128-ctr", + "aes192-ctr", + "aes256-ctr", + "aes128-gcm", + "aes128-gcm@openssh.com", + "aes256-gcm", + "aes256-gcm@openssh.com", + "aes256-cbc" + ], + "hmac": [ + "hmac-sha2-256", + "hmac-sha2-512", + "hmac-sha1" + ], + "compress": [ + "none", + "zlib@openssh.com", + "zlib" + ] + }, + "serverlog": { + "client": false, + "server": false + }, + "accesslog": false, + "verify": false, + "safeShutdownDuration": 300 + } \ No newline at end of file diff --git a/topologies/training-fxg/files/apps/syslog/172.18.0.1/.bkp b/topologies/training-fxg/files/apps/syslog/172.18.0.1/.bkp new file mode 100644 index 000000000..e69de29bb diff --git a/topologies/training-fxg/files/apps/syslog/192.168.0.24/.bkp b/topologies/training-fxg/files/apps/syslog/192.168.0.24/.bkp new file mode 100644 index 000000000..e69de29bb diff --git a/topologies/training-fxg/files/apps/tacacs/config b/topologies/training-fxg/files/apps/tacacs/config new file mode 100644 index 000000000..c756c03e8 --- /dev/null +++ b/topologies/training-fxg/files/apps/tacacs/config @@ -0,0 +1,20 @@ + key = "COOKBOOK" + +# user: fedexuser login password: fedexuser + + user = fedexuser { + login = clear fedexuser + service = shell { + set priv-lvl = 15 + cmd = show { + deny running-config + permit .* + } + } + } + +# user: fedex login password: arista + user = fedex { + default service = permit + login = clear arista + } \ No newline at end of file diff --git a/topologies/training-fxg/files/apps/tacacs/tac.log b/topologies/training-fxg/files/apps/tacacs/tac.log new file mode 100644 index 000000000..e69de29bb diff --git a/topologies/training-fxg/files/apps/uilanding/modules.yaml b/topologies/training-fxg/files/apps/uilanding/modules.yaml new file mode 100644 index 000000000..9738c6e9d --- /dev/null +++ b/topologies/training-fxg/files/apps/uilanding/modules.yaml @@ -0,0 +1,37 @@ +topology: + image: "atd-topo.png" + nodes: + Access-1: + coords: "201,555,390,658" + ip: "192.168.0.23" + Access-2: + coords: "428,558,600,648" + ip: "192.168.0.24" + Core-1: + coords: "200,413,381,505" + ip: "192.168.0.21" + Core-2: + coords: "421,415,612,505" + ip: "192.168.0.22" + Router-1: + coords: "214,258,393,363" + ip: "192.168.0.12" + Router-2: + coords: "432,264,608,366" + ip: "192.168.0.13" + Wan-1: + coords: "312,158,484,251" + ip: "192.168.0.11" + servers: + Server-1: + coords: "339,38,469,127" + ip: "192.168.0.41" + port : 6001 + Server-11: + coords: "214,683,364,766" + ip: "192.168.0.42" + port : 6002 + Server-12: + coords: "445,678,578,772" + ip: "192.168.0.43" + port : 6003 diff --git a/topologies/training-fxg/files/apps/webui/.vncpass_clear b/topologies/training-fxg/files/apps/webui/.vncpass_clear new file mode 100644 index 000000000..cd09dd7a5 --- /dev/null +++ b/topologies/training-fxg/files/apps/webui/.vncpass_clear @@ -0,0 +1 @@ +@rista1 \ No newline at end of file diff --git a/topologies/training-fxg/files/cvp/cvp_info.yaml b/topologies/training-fxg/files/cvp/cvp_info.yaml new file mode 100644 index 000000000..c4556ac60 --- /dev/null +++ b/topologies/training-fxg/files/cvp/cvp_info.yaml @@ -0,0 +1,40 @@ +cvp_info: + containers: + Tenant: + nodes: + - Wan-1 + - Router-1 + - Router-2 + - Core-1 + - Core-2 + - Access-1 + - Access-2 + - host-1 + - host-11 + - host-12 + snapshots: + configlets: + containers: + Tenant: + - ATD-INFRA + netelements: + Wan-1: + - Wan-1-BASE + Router-1: + - Router-1-BASE + Router-2: + - Router-2-BASE + Core-1: + - Core-1-BASE + Core-2: + - Core-2-BASE + Access-1: + - Access-1-BASE + Access-2: + - Access-2-BASE + host-1: + - host-1-BASE + host-11: + - host-11-BASE + host-12: + - host-12-BASE \ No newline at end of file diff --git a/topologies/training-fxg/files/hosts b/topologies/training-fxg/files/hosts new file mode 100644 index 000000000..b01ba8483 --- /dev/null +++ b/topologies/training-fxg/files/hosts @@ -0,0 +1,24 @@ +127.0.0.1 localhost +192.168.0.11 spine1 +192.168.0.12 spine2 +192.168.0.13 spine3 +192.168.0.14 spine4 +192.168.0.21 leaf1 +192.168.0.22 leaf2 +192.168.0.23 leaf3 +192.168.0.24 leaf4 +192.168.0.25 borderleaf1 +192.168.0.26 borderleaf2 +192.168.0.41 server1 +192.168.0.42 server2 +192.168.0.43 server3 +192.168.0.44 server4 +192.168.0.51 host1 +192.168.0.52 host2 +192.168.0.53 host3 +192.168.0.54 host4 +192.168.0.101 host5 +192.168.0.102 host6 +192.168.0.103 host7 +192.168.0.104 host8 +192.168.0.5 cvp diff --git a/topologies/training-fxg/files/menus/default.yaml b/topologies/training-fxg/files/menus/default.yaml new file mode 100644 index 000000000..7edae00fc --- /dev/null +++ b/topologies/training-fxg/files/menus/default.yaml @@ -0,0 +1,2 @@ +--- +default_menu: training-l3.yaml \ No newline at end of file diff --git a/topologies/training-fxg/files/menus/training-l3.yaml b/topologies/training-fxg/files/menus/training-l3.yaml new file mode 100644 index 000000000..0ec5f26cc --- /dev/null +++ b/topologies/training-fxg/files/menus/training-l3.yaml @@ -0,0 +1,26 @@ +--- + lab_list: + reset: + description: "Reset All Devices to Base Lab (reset)" + labconfiglets: + reset: + Wan-1: + - "Wan-1-BASE" + Router-1: + - "Router-1-BASE" + Router-2: + - "Router-2-BASE" + Core-1: + - "Core-1-BASE" + Core-2: + - "Core-2-BASE" + Access-1: + - "Access-1-BASE" + Access-2: + - "Access-2-BASE" + host-1: + - "host-1-BASE" + host-11: + - "host-11-BASE" + host-12: + - "host-12-BASE" \ No newline at end of file diff --git a/topologies/training-fxg/files/scripts/Authenticate-CVP b/topologies/training-fxg/files/scripts/Authenticate-CVP new file mode 100644 index 000000000..144bb13eb --- /dev/null +++ b/topologies/training-fxg/files/scripts/Authenticate-CVP @@ -0,0 +1,32 @@ +import requests +import json + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + +# Print user details + +print "User Name:%s\n "%output['username'] +print "First Name: %s\n "%output['user']['firstName'] +print "Last Name: %s\n "%output['user']['lastName'] +print "User Permissions: %s\n "%output['permissionList'] +print "Cookie Jar: %s\n "%cookies diff --git a/topologies/training-fxg/files/scripts/Authenticate-CVP2 b/topologies/training-fxg/files/scripts/Authenticate-CVP2 new file mode 100644 index 000000000..3f6bf9190 --- /dev/null +++ b/topologies/training-fxg/files/scripts/Authenticate-CVP2 @@ -0,0 +1,48 @@ +import requests +import json + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + +# Print user details + +print "User Name:%s\n "%output['username'] +print "First Name: %s\n "%output['user']['firstName'] +print "Last Name: %s\n "%output['user']['lastName'] +print "User Permissions: %s\n "%output['permissionList'] +print "Cookie Jar: %s\n "%cookies + +#Create an HTTP GET request to the CVP server + +getConfigletURL = "/cvpservice/configlet/getConfiglets.do?" +getConfigletParams = {'startIndex':'0','endIndex':'0','type':'Configlet'} +response = requests.get(url+getConfigletURL,cookies=cookies, params=getConfigletParams,verify=False) +assert response.ok +outputConfiglets = response.json() + +# Print Configlet details + +for configlet in outputConfiglets['data']: + print "ConfigletName: %s"%configlet['name'] + print "ConfigletKey: %s"%configlet['key'] + print "\n" + diff --git a/topologies/training-fxg/files/scripts/Authenticate-CVP3 b/topologies/training-fxg/files/scripts/Authenticate-CVP3 new file mode 100644 index 000000000..2445806ea --- /dev/null +++ b/topologies/training-fxg/files/scripts/Authenticate-CVP3 @@ -0,0 +1,95 @@ +import requests +import json + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + +# Print user details + +print "User Name:%s\n "%output['username'] +print "First Name: %s\n "%output['user']['firstName'] +print "Last Name: %s\n "%output['user']['lastName'] +print "User Permissions: %s\n "%output['permissionList'] +print "Cookie Jar: %s\n "%cookies + +#Create an HTTP GET request to the CVP server + +getConfigletURL = "/cvpservice/configlet/getConfiglets.do?" +getConfigletParams = {'startIndex':'0','endIndex':'0','type':'Configlet'} +response = requests.get(url+getConfigletURL,cookies=cookies, params=getConfigletParams,verify=False) +assert response.ok +outputConfiglets = response.json() + +# Print Configlet details + +for configlet in outputConfiglets['data']: + print "ConfigletName: %s"%configlet['name'] + print "ConfigletKey: %s"%configlet['key'] + print "\n" +# Create an HTTP GET request to the CVP server + +getConfigletHistoryURL = "/cvpservice/configlet/getConfigletHistory.do?" +getConfigletParams = {'configletId':'configlet_32_438214998013','startIndex':'0','endIndex':'0'} +response = requests.get(url+getConfigletHistoryURL,cookies=cookies, params=getConfigletParams,verify=False) +assert response.ok +outputConfigletHistory = response.json() + +# Print Configlet details + +for entry in outputConfigletHistory['configletHistory']: + print "ConfigletKey: %s"%entry['key'] + print "ConfigletOldConfig: %s"%entry['oldConfig'] + print "ConfigletNewConfig: %s"%entry['newConfig'] + print "\n" + + +# Create an HTTP GET request to the CVP server + +getConfigletDetailURL = "/cvpservice/configlet/getConfigletByName.do?" +getConfigletParams = {'name':'VLANs'} +response = requests.get(url+getConfigletDetailURL,cookies=cookies, params=getConfigletParams,verify=False) +assert response.ok +outputConfigletDetail = response.json() + +# Print Configlet details + +print "ConfigletKey: %s"%outputConfigletDetail['key'] +print "ConfigletName: %s"%outputConfigletDetail['name'] +print "ConfigletConfig: %s"%outputConfigletDetail['config'] +print "ConfigletNote: %s"%outputConfigletDetail['note'] +print "\n" + + +# Create an HTTP POST request to the CVP server + +headers = { 'Content-Type': 'application/json' } +postConfigletChangeURL = "/cvpservice/configlet/updateConfiglet.do" +changeData = json.dumps({"config": "! some configuration here", "key": "configlet_32_438214998013", "name": "VLANs"}) +response = requests.post(url+postConfigletChangeURL, cookies=cookies, data=changeData,headers=headers,verify=False) +assert response.ok +outputConfigletChange = response.json() + +# Print Configlet details + +print "ConfigletChange: %s"%outputConfigletChange['data'] +print "\n" + diff --git a/topologies/training-fxg/files/scripts/Configlet1 b/topologies/training-fxg/files/scripts/Configlet1 new file mode 100644 index 000000000..3f6bf9190 --- /dev/null +++ b/topologies/training-fxg/files/scripts/Configlet1 @@ -0,0 +1,48 @@ +import requests +import json + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + +# Print user details + +print "User Name:%s\n "%output['username'] +print "First Name: %s\n "%output['user']['firstName'] +print "Last Name: %s\n "%output['user']['lastName'] +print "User Permissions: %s\n "%output['permissionList'] +print "Cookie Jar: %s\n "%cookies + +#Create an HTTP GET request to the CVP server + +getConfigletURL = "/cvpservice/configlet/getConfiglets.do?" +getConfigletParams = {'startIndex':'0','endIndex':'0','type':'Configlet'} +response = requests.get(url+getConfigletURL,cookies=cookies, params=getConfigletParams,verify=False) +assert response.ok +outputConfiglets = response.json() + +# Print Configlet details + +for configlet in outputConfiglets['data']: + print "ConfigletName: %s"%configlet['name'] + print "ConfigletKey: %s"%configlet['key'] + print "\n" + diff --git a/topologies/training-fxg/files/scripts/ConfigletChange b/topologies/training-fxg/files/scripts/ConfigletChange new file mode 100644 index 000000000..691ff5864 --- /dev/null +++ b/topologies/training-fxg/files/scripts/ConfigletChange @@ -0,0 +1,40 @@ +import requests +import json + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + + +# Create an HTTP POST request to the CVP server + +headers = { 'Content-Type': 'application/json' } +postConfigletChangeURL = "/cvpservice/configlet/addNoteToConfiglet.do" +changeData = json.dumps({"note": "Configlet Changed by API", "key": "configlet_516_7018635812307"}) +response = requests.post(url+postConfigletChangeURL, cookies=cookies, data=changeData,headers=headers,verify=False) +assert response.ok +outputConfigletChange = response.json() + +# Print Configlet details + +print "ConfigletChange: %s"%outputConfigletChange['data'] +print "\n" + diff --git a/topologies/training-fxg/files/scripts/ConfigletDetail b/topologies/training-fxg/files/scripts/ConfigletDetail new file mode 100644 index 000000000..eb2a85937 --- /dev/null +++ b/topologies/training-fxg/files/scripts/ConfigletDetail @@ -0,0 +1,43 @@ +import requests +import json + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + +# Create an HTTP GET request to the CVP server + +getConfigletDetailURL = "/cvpservice/configlet/getConfigletByName.do?" +getConfigletParams = {'name':'VLANs'} +response = requests.get(url+getConfigletDetailURL,cookies=cookies, params=getConfigletParams,verify=False) +assert response.ok +outputConfigletDetail = response.json() + +# Print Configlet details + +print "ConfigletKey: %s"%outputConfigletDetail['key'] +print "ConfigletName: %s"%outputConfigletDetail['name'] +print "ConfigletConfig: %s"%outputConfigletDetail['config'] +print "ConfigletNote: %s"%outputConfigletDetail['note'] +print "\n" + + + diff --git a/topologies/training-fxg/files/scripts/ConfigletHistory b/topologies/training-fxg/files/scripts/ConfigletHistory new file mode 100644 index 000000000..71f1ac693 --- /dev/null +++ b/topologies/training-fxg/files/scripts/ConfigletHistory @@ -0,0 +1,41 @@ +import requests +import json + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + +# Create an HTTP GET request to the CVP server + +getConfigletHistoryURL = "/cvpservice/configlet/getConfigletHistory.do?" +getConfigletParams = {'configletId':'configlet_344_7351420097365','startIndex':'0','endIndex':'0'} +response = requests.get(url+getConfigletHistoryURL,cookies=cookies, params=getConfigletParams,verify=False) +assert response.ok +outputConfigletHistory = response.json() + +# Print Configlet details + +for entry in outputConfigletHistory['configletHistory']: + print "ConfigletKey: %s"%entry['key'] + print "ConfigletOldConfig: \n%s"%entry['oldConfig'] + print "ConfigletNewConfig: \n%s"%entry['newConfig'] + print "\n" + diff --git a/topologies/training-fxg/files/scripts/TaskBase b/topologies/training-fxg/files/scripts/TaskBase new file mode 100644 index 000000000..6f8deccaf --- /dev/null +++ b/topologies/training-fxg/files/scripts/TaskBase @@ -0,0 +1,59 @@ +import requests +import json + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + + +# Create an HTTP GET request to the CVP server + +getTasksURL = "/cvpservice/task/getTasks.do?" +getTasksParams = {'startIndex':'0','endIndex':'0','queryparam':'Pending'} +response = requests.get(url+getTasksURL,cookies=cookies, params=getTasksParams,verify=False) +assert response.ok +outputPendingTasks = response.json() + + +# Print Tasks Created by Current User +taskList = [ ] +for entry in outputPendingTasks['data']: + if str(entry['createdBy']) == str(CVP_USER): + print "TaskNumber: %s"%entry['workOrderId'] + taskList.append(str(entry['workOrderId'])) +print "TaskList: %s"%taskList + + + +# Create an HTTP POST request to the CVP server + +headers = { 'Content-Type': 'application/json' } +postTaskLogURL = "/cvpservice/workflow/addWorkOrderLog.do" +taskLogData = json.dumps({"taskId": taskList[1],"message": "This is a test Change","source": "CVP REST API"}) +response = requests.post(url+postTaskLogURL, cookies=cookies, data=taskLogData,headers=headers,verify=False) +assert response.ok +outputTaskLog = response.json() + +# Print Configlet details + +print "TaskLogAmmend: %s"%outputTaskLog['data'] +print "\n" + diff --git a/topologies/training-fxg/files/scripts/TaskCVP1 b/topologies/training-fxg/files/scripts/TaskCVP1 new file mode 100644 index 000000000..1ebd05764 --- /dev/null +++ b/topologies/training-fxg/files/scripts/TaskCVP1 @@ -0,0 +1,48 @@ +import requests +import json + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + +# Print user details + +print "User Name:%s\n "%output['username'] +print "First Name: %s\n "%output['user']['firstName'] +print "Last Name: %s\n "%output['user']['lastName'] + + +getTasksURL = "/cvpservice/task/getTasks.do?" +getTasksParams = {'startIndex':'0','endIndex':'0'} +response = requests.get(url+getTasksURL,cookies=cookies, params=getTasksParams,verify=False) +assert response.ok +outputPendingTasks = response.json() + + +# Print Tasks Created by Current User +taskList = [ ] +for entry in outputPendingTasks['data']: + if str(entry['createdBy']) == str(CVP_USER): + print( "TaskNumber: %s Description: %s" %(entry['workOrderId'],entry['description'])) + taskList.append(str(entry['workOrderId'])) +#print "TaskList: %s"%taskList + + diff --git a/topologies/training-fxg/files/scripts/TaskExecute b/topologies/training-fxg/files/scripts/TaskExecute new file mode 100644 index 000000000..3db487284 --- /dev/null +++ b/topologies/training-fxg/files/scripts/TaskExecute @@ -0,0 +1,56 @@ +import requests +import json + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + + +# Create an HTTP GET request to the CVP server + +getTasksURL = "/cvpservice/task/getTasks.do?" +getTasksParams = {'startIndex':'0','endIndex':'0','queryparam':'Pending'} +response = requests.get(url+getTasksURL,cookies=cookies, params=getTasksParams,verify=False) +assert response.ok +outputPendingTasks = response.json() + + +# Print Tasks Created by Current User +taskList = [ ] +for entry in outputPendingTasks['data']: + if str(entry['createdBy']) == str(CVP_USER): + print "TaskNumber: %s"%entry['workOrderId'] + taskList.append(str(entry['workOrderId'])) +print "TaskList: %s"%taskList + + + +headers = { 'Content-Type': 'application/json' } +postTaskExecuteURL = "/cvpservice/task/executeTask.do" +for taskNumber in taskList: + executeData = json.dumps({'data': [taskNumber]}) + response = requests.post(url+postTaskExecuteURL, cookies=cookies,data=executeData,headers=headers,verify=False) + assert response.ok + outputExecuteTask = response.json() + print (outputExecuteTask['data']) + print "Task: "+str(taskNumber)+" Execute: "+str(outputExecuteTask['data']) + print "\n" + diff --git a/topologies/training-fxg/files/scripts/TaskLog b/topologies/training-fxg/files/scripts/TaskLog new file mode 100644 index 000000000..c835008b8 --- /dev/null +++ b/topologies/training-fxg/files/scripts/TaskLog @@ -0,0 +1,59 @@ +import requests +import json + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + + +# Create an HTTP GET request to the CVP server + +getTasksURL = "/cvpservice/task/getTasks.do?" +getTasksParams = {'startIndex':'0','endIndex':'0'} +response = requests.get(url+getTasksURL,cookies=cookies, params=getTasksParams,verify=False) +assert response.ok +outputTasks = response.json() + + +# Print Tasks Created by Current User +taskList = [ ] +for entry in outputTasks['data']: + if str(entry['createdBy']) == str(CVP_USER): + print "TaskNumber: %s"%entry['workOrderId'] + taskList.append(str(entry['workOrderId'])) +print "TaskList: %s"%taskList + + + +# Create an HTTP POST request to the CVP server + +headers = { 'Content-Type': 'application/json' } +postTaskLogURL = "/cvpservice/workflow/addWorkOrderLog.do" +taskLogData = json.dumps({"taskId": taskList[0],"message": "This is a test Change","source": "CVP REST API"}) +response = requests.post(url+postTaskLogURL, cookies=cookies, data=taskLogData,headers=headers,verify=False) +assert response.ok +outputTaskLog = response.json() + +# Print Configlet details + +print "TaskLogAmmend: %s"%outputTaskLog['data'] +print "\n" + diff --git a/topologies/training-fxg/files/scripts/TaskLog1 b/topologies/training-fxg/files/scripts/TaskLog1 new file mode 100644 index 000000000..c835008b8 --- /dev/null +++ b/topologies/training-fxg/files/scripts/TaskLog1 @@ -0,0 +1,59 @@ +import requests +import json + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + + +# Create an HTTP GET request to the CVP server + +getTasksURL = "/cvpservice/task/getTasks.do?" +getTasksParams = {'startIndex':'0','endIndex':'0'} +response = requests.get(url+getTasksURL,cookies=cookies, params=getTasksParams,verify=False) +assert response.ok +outputTasks = response.json() + + +# Print Tasks Created by Current User +taskList = [ ] +for entry in outputTasks['data']: + if str(entry['createdBy']) == str(CVP_USER): + print "TaskNumber: %s"%entry['workOrderId'] + taskList.append(str(entry['workOrderId'])) +print "TaskList: %s"%taskList + + + +# Create an HTTP POST request to the CVP server + +headers = { 'Content-Type': 'application/json' } +postTaskLogURL = "/cvpservice/workflow/addWorkOrderLog.do" +taskLogData = json.dumps({"taskId": taskList[0],"message": "This is a test Change","source": "CVP REST API"}) +response = requests.post(url+postTaskLogURL, cookies=cookies, data=taskLogData,headers=headers,verify=False) +assert response.ok +outputTaskLog = response.json() + +# Print Configlet details + +print "TaskLogAmmend: %s"%outputTaskLog['data'] +print "\n" + diff --git a/topologies/training-fxg/files/scripts/TaskLogView b/topologies/training-fxg/files/scripts/TaskLogView new file mode 100644 index 000000000..7b34904dd --- /dev/null +++ b/topologies/training-fxg/files/scripts/TaskLogView @@ -0,0 +1,51 @@ +import requests +import json +import pprint + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + + +# Create an HTTP GET request to the CVP server + +getTasksURL = "/cvpservice/task/getTasks.do?" +getTasksParams = {'startIndex':'0','endIndex':'0'} +response = requests.get(url+getTasksURL,cookies=cookies, params=getTasksParams,verify=False) +assert response.ok +outputTasks = response.json() + +taskList = [ ] +for entry in outputTasks['data']: + if str(entry['createdBy']) == str(CVP_USER): + taskList.append(str(entry['workOrderId'])) + +getTaskLogURL = "/cvpservice/task/getLogsById.do?" +#getTaskLogParams = {'startIndex':'0','endIndex':'0','id':'0'} +getTaskLogParams = {'startIndex':'0','endIndex':'0','id':taskList[0]} +response = requests.get(url+getTaskLogURL,cookies=cookies, params=getTaskLogParams,verify=False) +assert response.ok +outputTaskLog = response.json() + +# Print TaskLog details +print "TaskLogOutput: %s" %outputTaskLog['data'] +print "\n" + diff --git a/topologies/training-fxg/files/scripts/TaskNote b/topologies/training-fxg/files/scripts/TaskNote new file mode 100644 index 000000000..6cd1d6cfd --- /dev/null +++ b/topologies/training-fxg/files/scripts/TaskNote @@ -0,0 +1,52 @@ +import requests +import json +import pprint + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + + +# Create an HTTP GET request to the CVP server + +getTasksURL = "/cvpservice/task/getTasks.do?" +getTasksParams = {'startIndex':'0','endIndex':'0'} +response = requests.get(url+getTasksURL,cookies=cookies, params=getTasksParams,verify=False) +assert response.ok +outputTasks = response.json() + +taskList = [ ] +for entry in outputTasks['data']: + if str(entry['createdBy']) == str(CVP_USER): + taskList.append(str(entry['workOrderId'])) + +headers = { 'Content-Type': 'application/json' } +postTaskNoteURL = "/cvpservice/task/addNoteToTask.do" +taskNoteData = json.dumps({"workOrderId": taskList[0],"note": "This is a test Change using the API"}) +response = requests.post(url+postTaskNoteURL, cookies=cookies, data=taskNoteData,headers=headers,verify=False) +assert response.ok +outputTaskNote = response.json() + +# Print Task details + +print "TaskNoteAmmend: %s"%outputTaskNote['data'] +print "\n" + diff --git a/topologies/training-fxg/labguides/.gitignore b/topologies/training-fxg/labguides/.gitignore new file mode 100644 index 000000000..ed86553f4 --- /dev/null +++ b/topologies/training-fxg/labguides/.gitignore @@ -0,0 +1,2 @@ +.DS_Store +build/ diff --git a/topologies/training-fxg/labguides/Makefile b/topologies/training-fxg/labguides/Makefile new file mode 100644 index 000000000..874ed2529 --- /dev/null +++ b/topologies/training-fxg/labguides/Makefile @@ -0,0 +1,20 @@ +# Minimal makefile for Sphinx documentation +# + +# You can set these variables from the command line. +SPHINXOPTS = +SPHINXBUILD = python -msphinx +SPHINXPROJ = ATD +SOURCEDIR = source +BUILDDIR = build + +# Put it first so that "make" without argument is like "make help". +help: + @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) + +.PHONY: help Makefile + +# Catch-all target: route all unknown targets to Sphinx using the new +# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). +%: Makefile + @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) \ No newline at end of file diff --git a/topologies/training-fxg/labguides/readme.md b/topologies/training-fxg/labguides/readme.md new file mode 100644 index 000000000..5a5369ecd --- /dev/null +++ b/topologies/training-fxg/labguides/readme.md @@ -0,0 +1,12 @@ +# Lab Guides +In this folder are rST (restructured text) formatted lab guides for the ATD event. + +## Building +To build the documentation, you will need to install Sphinx and sphinx_bootstrap_theme with `pip`: + +`pip install sphinx sphinx_bootstrap_theme` + +## Contributing +At some point, this section may expand, but for now please make sure to review existing files for formatting guidelines. + +Please see https://github.com/ralsina/rst-cheatsheet/blob/master/rst-cheatsheet.rst for a cheat sheet. \ No newline at end of file diff --git a/topologies/training-fxg/labguides/source/_static/arista_logo.png b/topologies/training-fxg/labguides/source/_static/arista_logo.png new file mode 100644 index 000000000..2376e72b9 Binary files /dev/null and b/topologies/training-fxg/labguides/source/_static/arista_logo.png differ diff --git a/topologies/training-fxg/labguides/source/_static/arista_logo_160by26.png b/topologies/training-fxg/labguides/source/_static/arista_logo_160by26.png new file mode 100644 index 000000000..d0d0cbeec Binary files /dev/null and b/topologies/training-fxg/labguides/source/_static/arista_logo_160by26.png differ diff --git a/topologies/training-fxg/labguides/source/_static/arista_logo_320by52.png b/topologies/training-fxg/labguides/source/_static/arista_logo_320by52.png new file mode 100644 index 000000000..43dfa7ed2 Binary files /dev/null and b/topologies/training-fxg/labguides/source/_static/arista_logo_320by52.png differ diff --git a/topologies/training-fxg/labguides/source/_static/cloudvision-icon.png b/topologies/training-fxg/labguides/source/_static/cloudvision-icon.png new file mode 100644 index 000000000..c309ed98e Binary files /dev/null and b/topologies/training-fxg/labguides/source/_static/cloudvision-icon.png differ diff --git a/topologies/training-fxg/labguides/source/_static/logo.jpg b/topologies/training-fxg/labguides/source/_static/logo.jpg new file mode 100644 index 000000000..6eda41f7e Binary files /dev/null and b/topologies/training-fxg/labguides/source/_static/logo.jpg differ diff --git a/topologies/training-fxg/labguides/source/_static/my-styles.css b/topologies/training-fxg/labguides/source/_static/my-styles.css new file mode 100644 index 000000000..1150528ee --- /dev/null +++ b/topologies/training-fxg/labguides/source/_static/my-styles.css @@ -0,0 +1,41 @@ +body { + background-color: #FFFFFF; + color: #002859 +} + +.navbar-inverse { + background-image: -webkit-linear-gradient(#6d94bf, #446e9b 50%, #002859); + background-image: -o-linear-gradient(#6d94bf, #446e9b 50%, #002859); + background-image: -webkit-gradient(linear, left top, left bottom, from(#6d94bf), color-stop(50%, #446e9b), to(#002859)); + background-image: linear-gradient(#6d94bf, #446e9b 50%, #002859); + background-repeat: no-repeat; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff6d94bf', endColorstr='#ff002859', GradientType=0); + -webkit-filter: none; + filter: none; + border: 1px solid #345578; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.3) +} + +.navbar-brand { + background: url("arista_logo_320by52.png") center / contain no-repeat; + display: inline-block; + width: 1px; + padding: 0 10px 0 60px; + margin-right: 30px; + margin-left: -30px; +} + +.navbar-brand>img { + display: inline-block; + padding: 0 100px 0 0px; + margin-right: 20px; +} +a.navbar-brand { + display: inline-block; + padding: 15px 0 0 120px; +} + +footer { + background-color: #002859; + color: #FFFFFF; +} diff --git a/topologies/training-fxg/labguides/source/conf.py b/topologies/training-fxg/labguides/source/conf.py new file mode 100644 index 000000000..afccec09c --- /dev/null +++ b/topologies/training-fxg/labguides/source/conf.py @@ -0,0 +1,247 @@ +# -*- coding: utf-8 -*- +# +# ATD documentation build configuration file, created by +# sphinx-quickstart on Tue Apr 17 10:00:04 2018. +# +# This file is execfile()d with the current directory set to its +# containing dir. +# +# Note that not all possible configuration values are present in this +# autogenerated file. +# +# All configuration values have a default; values that are commented out +# serve to show the default. + +# If extensions (or modules to document with autodoc) are in another directory, +# add these directories to sys.path here. If the directory is relative to the +# documentation root, use os.path.abspath to make it absolute, like shown here. +# +# import os +# import sys +# sys.path.insert(0, os.path.abspath('.')) + +import sphinx_bootstrap_theme + +# Importing datetime module to auto update copyright year +from datetime import date + +# -- General configuration ------------------------------------------------ + +# If your documentation needs a minimal Sphinx version, state it here. +# +# needs_sphinx = '1.0' + +# Add any Sphinx extension module names here, as strings. They can be +# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom +# ones. + +# Add any paths that contain templates here, relative to this directory. +templates_path = ['_templates'] + +# The suffix(es) of source filenames. +# You can specify multiple suffix as a list of string: +# +# source_suffix = ['.rst', '.md'] +source_suffix = '.rst' + +# The master toctree document. +master_doc = 'index' + +# General information about the project. +# Updating copyright var to auto update with current year +project = u'Arista ATD' +copyright = u'{0}, Arista Networks'.format(date.today().year) +author = u'Arista ATD atd-help@arista.com' + +# Show Source +html_show_sourcelink = False + +# The version info for the project you're documenting, acts as replacement for +# |version| and |release|, also used in various other places throughout the +# built documents. +# +# The short X.Y version. +version = u'Version 3.0' +# The full version, including alpha/beta/rc tags. +release = u'1' + +# The language for content autogenerated by Sphinx. Refer to documentation +# for a list of supported languages. +# +# This is also used if you do content translation via gettext catalogs. +# Usually you set "language" from the command line for these cases. +language = None + +# List of patterns, relative to source directory, that match files and +# directories to ignore when looking for source files. +# This patterns also effect to html_static_path and html_extra_path +exclude_patterns = [] + +# The name of the Pygments (syntax highlighting) style to use. +pygments_style = 'sphinx' + +# If true, `todo` and `todoList` produce output, else they produce nothing. +todo_include_todos = False + + +# -- Options for HTML output ---------------------------------------------- + +# The theme to use for HTML and HTML Help pages. See the documentation for +# a list of builtin themes. +# +#html_theme = 'alabaster' +html_theme = 'bootstrap' +html_theme_path = sphinx_bootstrap_theme.get_html_theme_path() + +# Add any paths that contain custom static files (such as style sheets) here, +# relative to this directory. They are copied after the builtin static files, +# so a file named "default.css" will overwrite the builtin "default.css". +html_static_path = ['_static'] + +# Theme options are theme-specific and customize the look and feel of a theme +# further. For a list of options available for each theme, see the +# documentation. +# +html_theme_options = { + # Navigation bar title. (Default: ``project`` value) + 'navbar_title': "ATD", + + # Tab name for entire site. (Default: "Site") + 'navbar_site_name': "Table of Contents", + + # A list of tuples containing pages or urls to link to. + # Valid tuples should be in the following forms: + # (name, page) # a link to a page + # (name, "/aa/bb", 1) # a link to an arbitrary relative url + # (name, "http://example.com", True) # arbitrary absolute url + # Note the "1" or "True" value above as the third argument to indicate + # an arbitrary url. + 'navbar_links': [ + ("Arista", "http://www.arista.com", True), + ], + + # Render the next and previous page links in navbar. (Default: true) + 'navbar_sidebarrel': True, + + # Render the current pages TOC in the navbar. (Default: true) + 'navbar_pagenav': False, + + # Tab name for the current pages TOC. (Default: "Page") + 'navbar_pagenav_name': "Page", + + # Global TOC depth for "site" navbar tab. (Default: 1) + # Switching to -1 shows all levels. + 'globaltoc_depth': 2, + + # Include hidden TOCs in Site navbar? + # + # Note: If this is "false", you cannot have mixed ``:hidden:`` and + # non-hidden ``toctree`` directives in the same page, or else the build + # will break. + # + # Values: "true" (default) or "false" + 'globaltoc_includehidden': "true", + + # HTML navbar class (Default: "navbar") to attach to
    element. + # For black navbar, do "navbar navbar-inverse" + #'navbar_class': "navbar navbar-inverse", + 'navbar_class': "navbar", + + # Fix navigation bar to top of page? + # Values: "true" (default) or "false" + 'navbar_fixed_top': "true", + + # Location of link to source. + # Options are "nav" (default), "footer" or anything else to exclude. + #'source_link_position': "nav", + + # Bootswatch (http://bootswatch.com/) theme. + # + # Options are nothing (default) or the name of a valid theme + # such as "cosmo" or "sandstone". + # + # The set of valid themes depend on the version of Bootstrap + # that's used (the next config option). + # + # Currently, the supported themes are: + # - Bootstrap 2: https://bootswatch.com/2 + # - Bootstrap 3: https://bootswatch.com/3 + 'bootswatch_theme': "spacelab", + + # Choose Bootstrap version. + # Values: "3" (default) or "2" (in quotes) + 'bootstrap_version': "3", +} + +# The name for this set of Sphinx documents. If None, it defaults to +# " v documentation". +#html_title = "AristaATD" + +# A shorter title for the navigation bar. Default is the same as html_title. +#html_short_title = "Demo" + +# (Optional) Logo. Should be small enough to fit the navbar (ideally 24x24). +# Path should be relative to the ``_static`` files directory. +#html_logo = "cloudvision-icon.png" + +# -- Options for HTMLHelp output ------------------------------------------ + +# Output file base name for HTML help builder. +htmlhelp_basename = 'AristaATD' + + +# -- Options for LaTeX output --------------------------------------------- + +latex_elements = { + # The paper size ('letterpaper' or 'a4paper'). + # + # 'papersize': 'letterpaper', + + # The font size ('10pt', '11pt' or '12pt'). + # + # 'pointsize': '10pt', + + # Additional stuff for the LaTeX preamble. + # + # 'preamble': '', + + # Latex figure (float) alignment + # + # 'figure_align': 'htbp', +} + +# Grouping the document tree into LaTeX files. List of tuples +# (source start file, target name, title, +# author, documentclass [howto, manual, or own class]). +latex_documents = [ + (master_doc, 'ATD.tex', u'ATD Lab Guide', + u'ATD Help (atd-help@arista.com)', 'manual'), +] + + +# -- Options for manual page output --------------------------------------- + +# One entry per manual page. List of tuples +# (source start file, name, description, authors, manual section). +man_pages = [ + (master_doc, 'atd', u'ATD Lab Guide', + [author], 1) +] + + +# -- Options for Texinfo output ------------------------------------------- + +# Grouping the document tree into Texinfo files. List of tuples +# (source start file, target name, title, author, +# dir menu entry, description, category) +texinfo_documents = [ + (master_doc, 'ATD', u'ATD Lab Guide', + author, 'ATD', 'Lab Documentation.', + 'Miscellaneous'), +] + + +def setup(app): + app.add_stylesheet("my-styles.css") # also can be a full URL + # app.add_stylesheet("ANOTHER.css") + # app.add_stylesheet("AND_ANOTHER.css") diff --git a/topologies/training-fxg/labguides/source/connecting.rst b/topologies/training-fxg/labguides/source/connecting.rst new file mode 100644 index 000000000..10ae589ef --- /dev/null +++ b/topologies/training-fxg/labguides/source/connecting.rst @@ -0,0 +1,28 @@ +Connecting +========== + +1. Log into the Arista Test Drive portal with your assigned URL. If you + don’t have one, please see your ATD staff. + +.. image:: images/connecting/nested_connecting_1.png + +2. SSH to the public address assigned to the LabAccess jumphost server (this is the Topology Address shown in the "Welcome to Arista's Test Drive!" picture above). The username is ``arista`` and the password is ``{REPLACE_PWD}``: + + .. code-block:: text + + ssh arista@{unique_address}.topo.testdrive.arista.com + +| + +.. image:: images/connecting/nested_connecting_2.png + :align: center + +| + +3. The LabAccess menu allows users to connect to each device and specify + lab topology. It is recommended to open multiple SSH sessions or use + the Screen option (under the SSH Menu) to jump between devices rapidly. + + You can also Access the LabAccess Menu from your browser by clicking on `Console Access` + +.. image:: images/connecting/nested_connecting_3.png diff --git a/topologies/training-fxg/labguides/source/images/connecting/nested_connecting_1.png b/topologies/training-fxg/labguides/source/images/connecting/nested_connecting_1.png new file mode 100644 index 000000000..aa76597b8 Binary files /dev/null and b/topologies/training-fxg/labguides/source/images/connecting/nested_connecting_1.png differ diff --git a/topologies/training-fxg/labguides/source/images/connecting/nested_connecting_2.png b/topologies/training-fxg/labguides/source/images/connecting/nested_connecting_2.png new file mode 100644 index 000000000..2c6b51a2b Binary files /dev/null and b/topologies/training-fxg/labguides/source/images/connecting/nested_connecting_2.png differ diff --git a/topologies/training-fxg/labguides/source/images/connecting/nested_connecting_3.png b/topologies/training-fxg/labguides/source/images/connecting/nested_connecting_3.png new file mode 100644 index 000000000..1cc7402a3 Binary files /dev/null and b/topologies/training-fxg/labguides/source/images/connecting/nested_connecting_3.png differ diff --git a/topologies/training-fxg/labguides/source/images/logo.jpg b/topologies/training-fxg/labguides/source/images/logo.jpg new file mode 100644 index 000000000..6eda41f7e Binary files /dev/null and b/topologies/training-fxg/labguides/source/images/logo.jpg differ diff --git a/topologies/training-fxg/labguides/source/index.rst b/topologies/training-fxg/labguides/source/index.rst new file mode 100644 index 000000000..bb76aaa2e --- /dev/null +++ b/topologies/training-fxg/labguides/source/index.rst @@ -0,0 +1,8 @@ +Welcome to the Arista Training documentation! +======================================== + +.. toctree:: + :maxdepth: 1 + :caption: EOS Configuration + + connecting.rst diff --git a/topologies/training-fxg/topo_build.yml b/topologies/training-fxg/topo_build.yml new file mode 100644 index 000000000..bd9b78a0f --- /dev/null +++ b/topologies/training-fxg/topo_build.yml @@ -0,0 +1,154 @@ +host_cpu: 4 +cvp_cpu: 32 +cvp_ram: 42 +cvp_nodes: 1 +veos_cpu: 2 +nodes: + - Wan-1: + ip_addr: 192.168.0.11 + sys_mac: 00:1c:73:b1:c6:01 + neighbors: + - neighborDevice: Router-1 + neighborPort: Ethernet1 + port: Ethernet1 + - neighborDevice: Router-2 + neighborPort: Ethernet1 + port: Ethernet2 + - neighborDevice: host-1 + neighborPort: Ethernet1 + port: Ethernet3 + - Router-1: + ip_addr: 192.168.0.12 + sys_mac: 00:1c:73:b2:c6:01 + neighbors: + - neighborDevice: Wan-1 + neighborPort: Ethernet1 + port: Ethernet1 + - neighborDevice: Core-1 + neighborPort: Ethernet5 + port: Ethernet2 + - neighborDevice: Router-2 + neighborPort: Ethernet3 + port: Ethernet3 + - neighborDevice: Router-2 + neighborPort: Ethernet4 + port: Ethernet4 + - neighborDevice: Core-2 + neighborPort: Ethernet6 + port: Ethernet5 + - Router-2: + ip_addr: 192.168.0.13 + sys_mac: 00:1c:73:b3:c6:01 + neighbors: + - neighborDevice: Wan-1 + neighborPort: Ethernet2 + port: Ethernet1 + - neighborDevice: Core-2 + neighborPort: Ethernet5 + port: Ethernet2 + - neighborDevice: Router-1 + neighborPort: Ethernet3 + port: Ethernet3 + - neighborDevice: Router-1 + neighborPort: Ethernet4 + port: Ethernet4 + - neighborDevice: Core-1 + neighborPort: Ethernet6 + port: Ethernet5 + - Core-1: + ip_addr: 192.168.0.21 + sys_mac: 00:1c:73:c1:c6:01 + neighbors: + - neighborDevice: Access-1 + neighborPort: Ethernet1 + port: Ethernet1 + - neighborDevice: Access-2 + neighborPort: Ethernet2 + port: Ethernet2 + - neighborDevice: Core-2 + neighborPort: Ethernet3 + port: Ethernet3 + - neighborDevice: Core-2 + neighborPort: Ethernet4 + port: Ethernet4 + - neighborDevice: Router-1 + neighborPort: Ethernet2 + port: Ethernet5 + - neighborDevice: Router-2 + neighborPort: Ethernet5 + port: Ethernet6 + - Core-2: + ip_addr: 192.168.0.22 + sys_mac: 00:1c:73:c2:c6:01 + neighbors: + - neighborDevice: Access-2 + neighborPort: Ethernet1 + port: Ethernet1 + - neighborDevice: Access-1 + neighborPort: Ethernet2 + port: Ethernet2 + - neighborDevice: Core-1 + neighborPort: Ethernet3 + port: Ethernet3 + - neighborDevice: Core-1 + neighborPort: Ethernet4 + port: Ethernet4 + - neighborDevice: Router-2 + neighborPort: Ethernet2 + port: Ethernet5 + - neighborDevice: Router-1 + neighborPort: Ethernet5 + port: Ethernet6 + - Access-1: + ip_addr: 192.168.0.23 + sys_mac: 00:1c:73:c3:c6:01 + neighbors: + - neighborDevice: Core-1 + neighborPort: Ethernet1 + port: Ethernet1 + - neighborDevice: Core-2 + neighborPort: Ethernet2 + port: Ethernet2 + - neighborDevice: host-11 + neighborPort: Ethernet1 + port: Ethernet3 + - Access-2: + ip_addr: 192.168.0.24 + sys_mac: 00:1c:73:c4:c6:01 + neighbors: + - neighborDevice: Core-2 + neighborPort: Ethernet1 + port: Ethernet1 + - neighborDevice: Core-1 + neighborPort: Ethernet2 + port: Ethernet2 + - neighborDevice: host-12 + neighborPort: Ethernet1 + port: Ethernet3 +servers: + - host-1: + ip_addr: 192.168.0.41 + image_name: "gcr.io/atd-testdrivetraining-dev/hosts-gui/host1:latest" + port : 6001 + neighbors: + - neighborDevice: Wan-1 + neighborPort: Ethernet3 + port: Ethernet1 + - host-11: + ip_addr: 192.168.0.42 + image_name: "gcr.io/atd-testdrivetraining-dev/hosts-gui/host1:latest" + port : 6002 + neighbors: + - neighborDevice: Access-1 + neighborPort: Ethernet3 + port: Ethernet1 + - host-12: + ip_addr: 192.168.0.43 + image_name: "gcr.io/atd-testdrivetraining-dev/hosts-gui/host1:latest" + port : 6003 + neighbors: + - neighborDevice: Access-2 + neighborPort: Ethernet3 + port: Ethernet1 +additional_ssh_nodes: +additional_clab_nodes: diff --git a/topologies/training-level-1-3-cisco-labs/atd-topo-del.png b/topologies/training-level-1-3-cisco-labs/atd-topo-del.png new file mode 100644 index 000000000..4cc023b85 Binary files /dev/null and b/topologies/training-level-1-3-cisco-labs/atd-topo-del.png differ diff --git a/topologies/training-level-1-3-cisco-labs/atd-topo.png b/topologies/training-level-1-3-cisco-labs/atd-topo.png new file mode 100644 index 000000000..ff5e3171a Binary files /dev/null and b/topologies/training-level-1-3-cisco-labs/atd-topo.png differ diff --git a/topologies/training-level-1-3-cisco-labs/configlets/ATD-INFRA b/topologies/training-level-1-3-cisco-labs/configlets/ATD-INFRA new file mode 100644 index 000000000..de87bc743 --- /dev/null +++ b/topologies/training-level-1-3-cisco-labs/configlets/ATD-INFRA @@ -0,0 +1,53 @@ +vrf instance MGMT +! +daemon TerminAttr + exec /usr/bin/TerminAttr -cvcompression=gzip -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent -cvaddr=192.168.0.5:9910 -cvauth=token,/tmp/token -cvvrf=MGMT -taillogs -disableaaa + no shutdown +! +alias mlag-reload bash /mnt/flash/shut_intfs && sudo shutdown now -r +alias conint sh interface | i connected +alias senz show interface counter error | nz +alias shmc show int | awk '/^[A-Z]/ { intf = $1 } /, address is/ { print intf, $6 }' +alias snz show interface counter | nz +alias spd show port-channel %1 detail all +alias sqnz show interface counter queue | nz +alias srnz show interface counter rate | nz +alias intdesc + !! Usage: intdesc interface-name description + 10 config + 20 int %1 + 30 desc %2 + 40 exit +! +dns domain arista.lab +! +service routing protocols model multi-agent +! +ntp server vrf MGMT 192.168.0.1 iburst source Management0 +! +radius-server host 192.168.0.1 vrf MGMT key 7 0207165218120E +! +aaa group server radius atds + server 192.168.0.1 vrf MGMT +! +aaa authentication login default group atds local +aaa authorization exec default group atds local +aaa authorization commands all default local +! +username Script secret sha512 $6$PNfpb9anSBQ5/aia$phaa3ar5pwkntenD9WHc6Ed5b96lbW0dc0bjtwPnFLaDiCK8D5Cjl6ewP/xdNbl4PtS6Paq.3SssN8pj05NQm. +username admin privilege 15 role network-admin secret 5 $1$5O85YVVn$HrXcfOivJEnISTMb6xrJc. +username arista privilege 15 role network-admin secret 5 $1$4VjIjfd1$XkUVulbNDESHFzcxDU.Tk1 +! +username arista ssh-key ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC+ERvV4GaPq3FzxY8T+5hMF/1T+l8wiPsVCtOrZU4Hy6NCNlAiDBdA/RUtX5/aOu5JvHyPTVHqWJ0qi9BqU3rxCNl/l2/5UZbm9RPzdZ1QCwoYwPB9/j/tYJV8lZdr6t0yGBfxgzD3oW/zF7a+ZtASaMAu7lkgoqPK2pVIGa+Y9ZCsA0Xq756XpLCw+d3pHKHvIkgWLCo9FoeIv8f/bu5u/ztzRE+Nvl+o5add6MxnjsXz3s7BnW2FX6JNjyp0Z+OXjupQc2gcfFvpd/dA2lCNuuaCHkRgyPwIZtWPmNqMRXPp37mlPwV43qDJRVPQkvh0xPxwS35BbzUxWdT+ZLZv +! +ip radius source-interface Management0 +! +ip routing vrf MGMT +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 +! +management api http-commands + no shutdown + vrf MGMT + no shutdown +! diff --git a/topologies/training-level-1-3-cisco-labs/configlets/Base-Builder.py b/topologies/training-level-1-3-cisco-labs/configlets/Base-Builder.py new file mode 100644 index 000000000..167d9c750 --- /dev/null +++ b/topologies/training-level-1-3-cisco-labs/configlets/Base-Builder.py @@ -0,0 +1,86 @@ +from cvplibrary import CVPGlobalVariables, GlobalVariableNames, Form + + + +# Get this devices Serial + + +serial = CVPGlobalVariables.getValue( GlobalVariableNames.CVP_SERIAL ) +mask = '24' +ServiceRouting = True + +#Create the IP address from the serial number + + +if serial == '4A7F6E96300132903A73A74CCF18B697': + IPaddress = '192.168.0.21' + hostname = 'leaf1' + + +elif serial == '3831DEFC364900BF9EEFC45FEE7794E7': + IPaddress = '192.168.0.22' + hostname = 'leaf2' + + +elif serial == 'ED469CFA13C4017B2D19BF7EBCAD50B1': + IPaddress = '192.168.0.23' + hostname = 'leaf3' + + +elif serial == '434653268ABA082A2FF6B52F1367CE80': + IPaddress = '192.168.0.24' + hostname = 'leaf4' + +elif serial == '8085B9640BC6D8FDC1FD23D242EBF433': + IPaddress = '192.168.0.11' + hostname = 'spine1' + +elif serial == 'D28D62E5729AB8BF44A0BC017DEB188A': + IPaddress = '192.168.0.12' + hostname = 'spine2' + +elif serial == 'F77703A62ADE220E689A41057AA56288': + IPaddress = '192.168.0.13' + hostname = 'spine3' + +elif serial == 'D763323F00C03738A8C824D2F1DA05E8': + IPaddress = '192.168.0.25' + hostname = 'borderleaf1' + +elif serial == '7C16136B7483F2E2FB002E8E0646F1F0': + IPaddress = '192.168.0.26' + hostname = 'borderleaf2' + +elif serial == '86342B780ED73BCB30E1DFE48E26AC38': + IPaddress = '192.168.0.51' + ServiceRouting = False + hostname = 'host1' + + +elif serial == 'CE0B31805130945E3CE40B060E9E636D': + IPaddress = '192.168.0.52' + ServiceRouting = False + hostname = 'host2' + + +# Generate and print config - Ignore the service routing command if not needed +print 'hostname %s' % hostname +print '!' +print 'interface Management 1' +print ' ip address %s/%s' % ( IPaddress, mask ) +print ' no lldp transmit' +print ' no lldp receive' +print '!' +if ServiceRouting: + print 'service routing protocols model multi-agent' + print '!' +print 'dns domain arista.lab' +print '!' +print 'ip route 0.0.0.0/0 192.168.0.1' +print '!' +print 'ip routing' +print '!' +print 'management api http-commands' +print ' no shutdown' +print ' protocol http' +print '!' \ No newline at end of file diff --git a/topologies/training-level-1-3-cisco-labs/configlets/borderleaf1-base b/topologies/training-level-1-3-cisco-labs/configlets/borderleaf1-base new file mode 100644 index 000000000..c5bdbece2 --- /dev/null +++ b/topologies/training-level-1-3-cisco-labs/configlets/borderleaf1-base @@ -0,0 +1,14 @@ +hostname borderleaf1 +! +interface Management 0 + vrf MGMT + ip address 192.168.0.25/24 + +! +service routing protocols model multi-agent +! +dns domain arista.lab +! +ip routing vrf MGMT +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 diff --git a/topologies/training-level-1-3-cisco-labs/configlets/borderleaf2-base b/topologies/training-level-1-3-cisco-labs/configlets/borderleaf2-base new file mode 100644 index 000000000..3168fb4b4 --- /dev/null +++ b/topologies/training-level-1-3-cisco-labs/configlets/borderleaf2-base @@ -0,0 +1,15 @@ +hostname borderleaf2 +! +interface Management 0 + vrf MGMT + ip address 192.168.0.26/24 + + +! +service routing protocols model multi-agent +! +dns domain arista.lab +! +ip routing vrf MGMT +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 diff --git a/topologies/training-level-1-3-cisco-labs/configlets/host1-base b/topologies/training-level-1-3-cisco-labs/configlets/host1-base new file mode 100644 index 000000000..915d58edb --- /dev/null +++ b/topologies/training-level-1-3-cisco-labs/configlets/host1-base @@ -0,0 +1,15 @@ +hostname host1 +! +spanning-tree mode none +! +interface Management 0 + vrf MGMT + ip address 192.168.0.51/24 + + +! +dns domain arista.lab +! +ip routing vrf MGMT +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 diff --git a/topologies/training-level-1-3-cisco-labs/configlets/host10-base b/topologies/training-level-1-3-cisco-labs/configlets/host10-base new file mode 100644 index 000000000..e0a571f30 --- /dev/null +++ b/topologies/training-level-1-3-cisco-labs/configlets/host10-base @@ -0,0 +1,15 @@ +hostname host10 +! +spanning-tree mode none +! +interface Management 0 + vrf MGMT + ip address 192.168.0.56/24 + + +! +dns domain arista.lab +! +ip routing vrf MGMT +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 diff --git a/topologies/training-level-1-3-cisco-labs/configlets/host2-base b/topologies/training-level-1-3-cisco-labs/configlets/host2-base new file mode 100644 index 000000000..63f0c9c38 --- /dev/null +++ b/topologies/training-level-1-3-cisco-labs/configlets/host2-base @@ -0,0 +1,15 @@ +hostname host2 +! +spanning-tree mode none +! +interface Management 0 + vrf MGMT + ip address 192.168.0.52/24 + + +! +dns domain arista.lab +! +ip routing vrf MGMT +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 diff --git a/topologies/training-level-1-3-cisco-labs/configlets/host3-base b/topologies/training-level-1-3-cisco-labs/configlets/host3-base new file mode 100644 index 000000000..7d5e4c331 --- /dev/null +++ b/topologies/training-level-1-3-cisco-labs/configlets/host3-base @@ -0,0 +1,14 @@ +hostname host3 +! +spanning-tree mode none +! +interface Management 0 + vrf MGMT + ip address 192.168.0.53/24 + +! +dns domain arista.lab +! +ip routing vrf MGMT +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 diff --git a/topologies/training-level-1-3-cisco-labs/configlets/host4-base b/topologies/training-level-1-3-cisco-labs/configlets/host4-base new file mode 100644 index 000000000..aec58fa5d --- /dev/null +++ b/topologies/training-level-1-3-cisco-labs/configlets/host4-base @@ -0,0 +1,16 @@ +hostname host4 +! +spanning-tree mode none +! +interface Management 0 + vrf MGMT + ip address 192.168.0.54/24 + + +! +dns domain arista.lab +! +ip routing vrf MGMT +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 + diff --git a/topologies/training-level-1-3-cisco-labs/configlets/host9-base b/topologies/training-level-1-3-cisco-labs/configlets/host9-base new file mode 100644 index 000000000..d7e5cf794 --- /dev/null +++ b/topologies/training-level-1-3-cisco-labs/configlets/host9-base @@ -0,0 +1,14 @@ +hostname host9 +! +spanning-tree mode none +! +interface Management 0 + vrf MGMT + ip address 192.168.0.55/24 + +! +dns domain arista.lab +! +ip routing vrf MGMT +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 \ No newline at end of file diff --git a/topologies/training-level-1-3-cisco-labs/configlets/leaf1-base b/topologies/training-level-1-3-cisco-labs/configlets/leaf1-base new file mode 100644 index 000000000..34fa715b4 --- /dev/null +++ b/topologies/training-level-1-3-cisco-labs/configlets/leaf1-base @@ -0,0 +1,13 @@ +hostname leaf1 +! +interface Management 0 + vrf MGMT + ip address 192.168.0.21/24 +! +service routing protocols model multi-agent +! +dns domain arista.lab +! +ip routing vrf MGMT +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 diff --git a/topologies/training-level-1-3-cisco-labs/configlets/leaf2-base b/topologies/training-level-1-3-cisco-labs/configlets/leaf2-base new file mode 100644 index 000000000..a44ce66ac --- /dev/null +++ b/topologies/training-level-1-3-cisco-labs/configlets/leaf2-base @@ -0,0 +1,14 @@ +hostname leaf2 +! +interface Management 0 + vrf MGMT + ip address 192.168.0.22/24 + +! +service routing protocols model multi-agent +! +dns domain arista.lab +! +ip routing vrf MGMT +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 diff --git a/topologies/training-level-1-3-cisco-labs/configlets/leaf3-base b/topologies/training-level-1-3-cisco-labs/configlets/leaf3-base new file mode 100644 index 000000000..685c070f1 --- /dev/null +++ b/topologies/training-level-1-3-cisco-labs/configlets/leaf3-base @@ -0,0 +1,14 @@ +hostname leaf3 +! +interface Management 0 + vrf MGMT + ip address 192.168.0.23/24 + +! +service routing protocols model multi-agent +! +dns domain arista.lab +! +ip routing vrf MGMT +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 diff --git a/topologies/training-level-1-3-cisco-labs/configlets/leaf4-base b/topologies/training-level-1-3-cisco-labs/configlets/leaf4-base new file mode 100644 index 000000000..0c2d76c51 --- /dev/null +++ b/topologies/training-level-1-3-cisco-labs/configlets/leaf4-base @@ -0,0 +1,14 @@ +hostname leaf4 +! +interface Management 0 + vrf MGMT + ip address 192.168.0.24/24 + +! +service routing protocols model multi-agent +! +dns domain arista.lab +! +ip routing vrf MGMT +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 diff --git a/topologies/training-level-1-3-cisco-labs/configlets/spine1-base b/topologies/training-level-1-3-cisco-labs/configlets/spine1-base new file mode 100644 index 000000000..5e9d072b1 --- /dev/null +++ b/topologies/training-level-1-3-cisco-labs/configlets/spine1-base @@ -0,0 +1,14 @@ +hostname spine1 +! +interface Management 0 + vrf MGMT + ip address 192.168.0.11/24 + +! +service routing protocols model multi-agent +! +dns domain arista.lab +! +ip routing vrf MGMT +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 diff --git a/topologies/training-level-1-3-cisco-labs/configlets/spine2-base b/topologies/training-level-1-3-cisco-labs/configlets/spine2-base new file mode 100644 index 000000000..ec2af056f --- /dev/null +++ b/topologies/training-level-1-3-cisco-labs/configlets/spine2-base @@ -0,0 +1,14 @@ +hostname spine2 +! +interface Management 0 + vrf MGMT + ip address 192.168.0.12/24 + +! +service routing protocols model multi-agent +! +dns domain arista.lab +! +ip routing vrf MGMT +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 diff --git a/topologies/training-level-1-3-cisco-labs/configlets/spine3-base b/topologies/training-level-1-3-cisco-labs/configlets/spine3-base new file mode 100644 index 000000000..853f6564a --- /dev/null +++ b/topologies/training-level-1-3-cisco-labs/configlets/spine3-base @@ -0,0 +1,14 @@ +hostname spine3 +! +interface Management 0 + vrf MGMT + ip address 192.168.0.13/24 + +! +service routing protocols model multi-agent +! +dns domain arista.lab +! +ip routing vrf MGMT +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 diff --git a/topologies/training-level-1-3-cisco-labs/configlets/spine4-base b/topologies/training-level-1-3-cisco-labs/configlets/spine4-base new file mode 100644 index 000000000..7e54878ba --- /dev/null +++ b/topologies/training-level-1-3-cisco-labs/configlets/spine4-base @@ -0,0 +1,15 @@ +hostname spine4 +! +interface Management 0 + vrf MGMT + ip address 192.168.0.14/24 + + +! +service routing protocols model multi-agent +! +dns domain arista.lab +! +ip routing vrf MGMT +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 diff --git a/topologies/training-level-1-3-cisco-labs/files/.ansible.cfg b/topologies/training-level-1-3-cisco-labs/files/.ansible.cfg new file mode 100644 index 000000000..14c806515 --- /dev/null +++ b/topologies/training-level-1-3-cisco-labs/files/.ansible.cfg @@ -0,0 +1,2 @@ +[defaults] +host_key_checking = False diff --git a/topologies/training-level-1-3-cisco-labs/files/.screenrc b/topologies/training-level-1-3-cisco-labs/files/.screenrc new file mode 100644 index 000000000..1d70f5e42 --- /dev/null +++ b/topologies/training-level-1-3-cisco-labs/files/.screenrc @@ -0,0 +1,23 @@ +# Turn off the startup message. +startup_message off +# Set the caption to the active windows. +caption always "%-Lw%{= BW}%50>%n%f* %t%{-}%+Lw%<" + +term screen-256color + +# New screens for various processes. +# Example: screen -t +# screen -t 7050SX-128 0 ssh aristaadmin@192.100.37.128 +screen 1 ssh 192.168.0.4 +screen -t CVP 2 ssh 192.168.0.5 +screen -t Spine1 3 ssh 192.168.0.11 +screen -t Spine2 4 ssh 192.168.0.12 +screen -t Spine3 5 ssh 192.168.0.13 +screen -t Leaf1 6 ssh 192.168.0.21 +screen -t Leaf2 7 ssh 192.168.0.22 +screen -t Leaf3 8 ssh 192.168.0.23 +screen -t Leaf4 9 ssh 192.168.0.24 +screen -t Borderleaf1 10 ssh 192.168.0.25 +screen -t Borderlead2 11 ssh 192.168.0.26 +screen -t Host1 15 ssh 192.168.0.51 +screen -t Host2 16 ssh 192.168.0.52 diff --git a/topologies/training-level-1-3-cisco-labs/files/MenuOptions.yaml b/topologies/training-level-1-3-cisco-labs/files/MenuOptions.yaml new file mode 100644 index 000000000..f68e2261d --- /dev/null +++ b/topologies/training-level-1-3-cisco-labs/files/MenuOptions.yaml @@ -0,0 +1,214 @@ +--- +options: + reset: + - command: "/usr/local/bin/ConfigureTopology.py && bash /home/arista/Broadcaster/pushHostDefaultConfig.sh" + description: "Reset All Devices to Base ATD (reset)" + vxlan: + - command: "/usr/local/bin/ConfigureTopology.py -t vxlan" + description: "VXLAN Lab (vxlan)" + l2evpn: + - command: "/usr/local/bin/ConfigureTopology.py -t l2evpn" + description: "L2-EVPN Lab (l2evpn)" + l3evpn: + - command: "/usr/local/bin/ConfigureTopology.py -t l3evpn" + description: "L3-EVPN Lab (l3evpn)" + aamh: + - command: "/usr/local/bin/ConfigureTopology.py -t aamh" + description: "Active-Active Multi Homing lab (aamh)" + pim: + - command: "/usr/local/bin/ConfigureTopology.py -t aamh" + description: "PIM Lab (pim)" +labconfiglets: + reset: + spine1: + - "spine1-base" + spine2: + - "spine2-base" + spine3: + - "spine3-base" + leaf1: + - "leaf1-base" + leaf2: + - "leaf2-base" + leaf3: + - "leaf3-base" + leaf4: + - "leaf4-base" + host1: + - "host1-base" + host2: + - "host2-base" + borderleaf1: + - "borderleaf1-base" + borderleaf2: + - "borderleaf2-base" + vxlan: + spine1: + - "spine1-base" + - "Spine-1-VXALN-Begin" + spine2: + - "spine2-base" + - "Spine-2-VXALN-Begin" + spine3: + - "spine3-base" + - "Spine-3-VXALN-Begin" + leaf1: + - "leaf1-base" + - "Leaf-1-VXALN-Begin" + leaf2: + - "leaf2-base" + - "Leaf-2-VXALN-Begin" + leaf3: + - "leaf3-base" + - "leaf-3-VXALN-Begin" + leaf4: + - "leaf4-base" + - "leaf-4-VXALN-Begin" + host1: + - "host1-base" + - "Host-1-VXALN-Begin" + host2: + - "host2-base" + - "Host-2-VXALN-Begin" + borderleaf1: + - "borderleaf1-base" + - "Borderleaf-1-VXALN-Begin" + borderleaf2: + - "borderleaf2-base" + - "Borderleaf-2-VXALN-Begin" + l2evpn: + spine1: + - "spine1-base" + - "Spine-1-L2EVPN-Begin" + spine2: + - "spine2-base" + - "Spine-2-L2EVPN-Begin" + spine3: + - "spine3-base" + - "Spine-3-L2EVPN-Begin" + leaf1: + - "leaf1-base" + - "Leaf-1-L2EVPN-Begin" + leaf2: + - "leaf2-base" + - "Leaf-2-L2EVPN-Begin" + leaf3: + - "leaf3-base" + - "Leaf-3-L2EVPN-Begin" + leaf4: + - "leaf4-base" + - "Leaf-4-L2EVPN-Begin" + host1: + - "host1-base" + - "Host-1-L2EVPN-Begin" + host2: + - "host2-base" + - "Host-2-L2EVPN-Begin" + borderleaf1: + - "borderleaf1-base" + - "Borderleaf-1-L2EVPN-Begin" + borderleaf2: + - "borderleaf2-base" + - "Borderleaf-2-L2EVPN-Begin" + l3evpn: + spine1: + - "spine1-base" + - "Spine-1-L3EVPN-Begin" + spine2: + - "spine2-base" + - "Spine-2-L3EVPN-Begin" + spine3: + - "spine3-base" + - "Spine-3-L3EVPN-Begin" + leaf1: + - "leaf1-base" + - "Leaf-1-L3EVPN-Begin" + leaf2: + - "leaf2-base" + - "Leaf-2-L3EVPN-Begin" + leaf3: + - "leaf3-base" + - "Leaf-3-L3EVPN-Begin" + leaf4: + - "leaf4-base" + - "Leaf-4-L3EVPN-Begin" + host1: + - "host1-base" + - "Host-1-L3EVPN-Begin" + host2: + - "host2-base" + - "Host-2-L3EVPN-Begin" + borderleaf1: + - "borderleaf1-base" + - "Borderleaf-1-L3EVPN-Begin" + borderleaf2: + - "borderleaf2-base" + - "Borderleaf-2-L3EVPN-Begin" + aamh: + spine1: + - "spine1-base" + - "Spine-1-AAMH-Begin" + spine2: + - "spine2-base" + - "Spine-2-AAMH-Begin" + spine3: + - "spine3-base" + - "Spine-3-AAMH-Begin" + leaf1: + - "leaf1-base" + - "Leaf-1-AAMH-Begin" + leaf2: + - "leaf2-base" + - "Leaf-2-AAMH-Begin" + leaf3: + - "leaf3-base" + - "Leaf-3-AAMH-Begin" + leaf4: + - "leaf4-base" + - "Leaf-4-AAMH-Begin" + host1: + - "host1-base" + - "Host-1-AAMH-Begin" + host2: + - "host2-base" + - "Host-2-AAMH-Begin" + borderleaf1: + - "borderleaf1-base" + - "Borderleaf-1-AAMH-Begin" + borderleaf2: + - "borderleaf2-base" + - "Borderleaf-2-AAMH-Begin" + pim: + spine1: + - "spine1-base" + - "Spine-1-PIM-Begin" + spine2: + - "spine2-base" + - "Spine-2-PIM-Begin" + spine3: + - "spine3-base" + - "Spine-3-PIM-Begin" + leaf1: + - "leaf1-base" + - "Leaf-1-PIM-Begin" + leaf2: + - "leaf2-base" + - "Leaf-2-PIM-Begin" + leaf3: + - "leaf3-base" + - "Leaf-3-PIM-Begin" + leaf4: + - "leaf4-base" + - "Leaf-4-PIM-Begin" + host1: + - "host1-base" + - "Host-1-PIM-Begin" + host2: + - "host2-base" + - "Host-2-PIM-Begin" + borderleaf1: + - "borderleaf1-base" + - "Borderleaf-1-PIM-Begin" + borderleaf2: + - "borderleaf2-base" + - "Borderleaf-2-PIM-Begin" \ No newline at end of file diff --git a/topologies/training-level-1-3-cisco-labs/files/apps/coder/coder.yaml b/topologies/training-level-1-3-cisco-labs/files/apps/coder/coder.yaml new file mode 100644 index 000000000..80cc852d1 --- /dev/null +++ b/topologies/training-level-1-3-cisco-labs/files/apps/coder/coder.yaml @@ -0,0 +1,4 @@ +bind-addr: 127.0.0.1:8080 +auth: password +password: {ARISTA_REPLACE} +cert: false \ No newline at end of file diff --git a/topologies/training-level-1-3-cisco-labs/files/apps/coder/labfiles/.placeholder b/topologies/training-level-1-3-cisco-labs/files/apps/coder/labfiles/.placeholder new file mode 100644 index 000000000..e69de29bb diff --git a/topologies/training-level-1-3-cisco-labs/files/apps/gui/host1/arista/host-startup.sh b/topologies/training-level-1-3-cisco-labs/files/apps/gui/host1/arista/host-startup.sh new file mode 100644 index 000000000..16eafb783 --- /dev/null +++ b/topologies/training-level-1-3-cisco-labs/files/apps/gui/host1/arista/host-startup.sh @@ -0,0 +1,17 @@ +sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 4EB27DB2A3B88B8B +sudo apt-get update +sudo apt install openssh-server -y +sudo service ssh start +sudo apt-get install ufw -y +sudo ufw enable +sudo ufw allow 22 +sudo ufw disable +useradd -rm -d /home/arista -s /bin/bash -g root -G sudo -u 1000 arista +echo 'arista:arista123' | chpasswd +service ssh start +sudo apt install ifenslave -y +sudo apt install iputils-ping -y +sudo add-apt-repository ppa:wireshark-dev/stable -y +sudo apt-get install filezilla -y +sudo apt-get install vsftpd -y +sudo service vsftpd restart \ No newline at end of file diff --git a/topologies/training-level-1-3-cisco-labs/files/apps/gui/host2/arista/host-startup.sh b/topologies/training-level-1-3-cisco-labs/files/apps/gui/host2/arista/host-startup.sh new file mode 100644 index 000000000..16eafb783 --- /dev/null +++ b/topologies/training-level-1-3-cisco-labs/files/apps/gui/host2/arista/host-startup.sh @@ -0,0 +1,17 @@ +sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 4EB27DB2A3B88B8B +sudo apt-get update +sudo apt install openssh-server -y +sudo service ssh start +sudo apt-get install ufw -y +sudo ufw enable +sudo ufw allow 22 +sudo ufw disable +useradd -rm -d /home/arista -s /bin/bash -g root -G sudo -u 1000 arista +echo 'arista:arista123' | chpasswd +service ssh start +sudo apt install ifenslave -y +sudo apt install iputils-ping -y +sudo add-apt-repository ppa:wireshark-dev/stable -y +sudo apt-get install filezilla -y +sudo apt-get install vsftpd -y +sudo service vsftpd restart \ No newline at end of file diff --git a/topologies/training-level-1-3-cisco-labs/files/apps/gui/host5/arista/host-startup.sh b/topologies/training-level-1-3-cisco-labs/files/apps/gui/host5/arista/host-startup.sh new file mode 100644 index 000000000..16eafb783 --- /dev/null +++ b/topologies/training-level-1-3-cisco-labs/files/apps/gui/host5/arista/host-startup.sh @@ -0,0 +1,17 @@ +sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 4EB27DB2A3B88B8B +sudo apt-get update +sudo apt install openssh-server -y +sudo service ssh start +sudo apt-get install ufw -y +sudo ufw enable +sudo ufw allow 22 +sudo ufw disable +useradd -rm -d /home/arista -s /bin/bash -g root -G sudo -u 1000 arista +echo 'arista:arista123' | chpasswd +service ssh start +sudo apt install ifenslave -y +sudo apt install iputils-ping -y +sudo add-apt-repository ppa:wireshark-dev/stable -y +sudo apt-get install filezilla -y +sudo apt-get install vsftpd -y +sudo service vsftpd restart \ No newline at end of file diff --git a/topologies/training-level-1-3-cisco-labs/files/apps/gui/host6/arista/host-startup.sh b/topologies/training-level-1-3-cisco-labs/files/apps/gui/host6/arista/host-startup.sh new file mode 100644 index 000000000..16eafb783 --- /dev/null +++ b/topologies/training-level-1-3-cisco-labs/files/apps/gui/host6/arista/host-startup.sh @@ -0,0 +1,17 @@ +sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 4EB27DB2A3B88B8B +sudo apt-get update +sudo apt install openssh-server -y +sudo service ssh start +sudo apt-get install ufw -y +sudo ufw enable +sudo ufw allow 22 +sudo ufw disable +useradd -rm -d /home/arista -s /bin/bash -g root -G sudo -u 1000 arista +echo 'arista:arista123' | chpasswd +service ssh start +sudo apt install ifenslave -y +sudo apt install iputils-ping -y +sudo add-apt-repository ppa:wireshark-dev/stable -y +sudo apt-get install filezilla -y +sudo apt-get install vsftpd -y +sudo service vsftpd restart \ No newline at end of file diff --git a/topologies/training-level-1-3-cisco-labs/files/apps/gui/host7/arista/host-startup.sh b/topologies/training-level-1-3-cisco-labs/files/apps/gui/host7/arista/host-startup.sh new file mode 100644 index 000000000..16eafb783 --- /dev/null +++ b/topologies/training-level-1-3-cisco-labs/files/apps/gui/host7/arista/host-startup.sh @@ -0,0 +1,17 @@ +sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 4EB27DB2A3B88B8B +sudo apt-get update +sudo apt install openssh-server -y +sudo service ssh start +sudo apt-get install ufw -y +sudo ufw enable +sudo ufw allow 22 +sudo ufw disable +useradd -rm -d /home/arista -s /bin/bash -g root -G sudo -u 1000 arista +echo 'arista:arista123' | chpasswd +service ssh start +sudo apt install ifenslave -y +sudo apt install iputils-ping -y +sudo add-apt-repository ppa:wireshark-dev/stable -y +sudo apt-get install filezilla -y +sudo apt-get install vsftpd -y +sudo service vsftpd restart \ No newline at end of file diff --git a/topologies/training-level-1-3-cisco-labs/files/apps/gui/host8/arista/host-startup.sh b/topologies/training-level-1-3-cisco-labs/files/apps/gui/host8/arista/host-startup.sh new file mode 100644 index 000000000..16eafb783 --- /dev/null +++ b/topologies/training-level-1-3-cisco-labs/files/apps/gui/host8/arista/host-startup.sh @@ -0,0 +1,17 @@ +sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 4EB27DB2A3B88B8B +sudo apt-get update +sudo apt install openssh-server -y +sudo service ssh start +sudo apt-get install ufw -y +sudo ufw enable +sudo ufw allow 22 +sudo ufw disable +useradd -rm -d /home/arista -s /bin/bash -g root -G sudo -u 1000 arista +echo 'arista:arista123' | chpasswd +service ssh start +sudo apt install ifenslave -y +sudo apt install iputils-ping -y +sudo add-apt-repository ppa:wireshark-dev/stable -y +sudo apt-get install filezilla -y +sudo apt-get install vsftpd -y +sudo service vsftpd restart \ No newline at end of file diff --git a/topologies/training-level-1-3-cisco-labs/files/apps/ssh/web.json b/topologies/training-level-1-3-cisco-labs/files/apps/ssh/web.json new file mode 100644 index 000000000..13fac47dd --- /dev/null +++ b/topologies/training-level-1-3-cisco-labs/files/apps/ssh/web.json @@ -0,0 +1,76 @@ +{ + "listen": { + "ip": "0.0.0.0", + "port": 2222 + }, + "user": { + "name": null, + "password": null, + "privatekey": null + }, + "ssh": { + "host": null, + "port": 22, + "localAddress": null, + "localPort": null, + "term": "xterm-color", + "readyTimeout": 20000, + "keepaliveInterval": 120000, + "keepaliveCountMax": 10, + "allowedSubnets": [ "192.168.0.0/16", "10.0.0.0/8", "172.16.0.0/12" ] + }, + "terminal": { + "cursorBlink": true, + "scrollback": 10000, + "tabStopWidth": 8, + "bellStyle": "sound" + }, + "header": { + "text": null, + "background": "green" + }, + "session": { + "name": "WebSSH2", + "secret": "mysecret" + }, + "options": { + "challengeButton": true, + "allowreauth": true + }, + "algorithms": { + "kex": [ + "ecdh-sha2-nistp256", + "ecdh-sha2-nistp384", + "ecdh-sha2-nistp521", + "diffie-hellman-group-exchange-sha256", + "diffie-hellman-group14-sha1" + ], + "cipher": [ + "aes128-ctr", + "aes192-ctr", + "aes256-ctr", + "aes128-gcm", + "aes128-gcm@openssh.com", + "aes256-gcm", + "aes256-gcm@openssh.com", + "aes256-cbc" + ], + "hmac": [ + "hmac-sha2-256", + "hmac-sha2-512", + "hmac-sha1" + ], + "compress": [ + "none", + "zlib@openssh.com", + "zlib" + ] + }, + "serverlog": { + "client": false, + "server": false + }, + "accesslog": false, + "verify": false, + "safeShutdownDuration": 300 + } \ No newline at end of file diff --git a/topologies/training-level-1-3-cisco-labs/files/apps/uilanding/modules.yaml b/topologies/training-level-1-3-cisco-labs/files/apps/uilanding/modules.yaml new file mode 100644 index 000000000..21d2faaf3 --- /dev/null +++ b/topologies/training-level-1-3-cisco-labs/files/apps/uilanding/modules.yaml @@ -0,0 +1,77 @@ +topology: + image: "atd-topo.png" + nodes: + Spine1: + coords: "17,545,148,623" + ip: "192.168.0.11" + Spine2: + coords: "368,548,507,622" + ip: "192.168.0.12" + Spine3: + coords: "560,548,706,619" + ip: "192.168.0.13" + Spine4: + coords: "937,553,1079,627" + ip: "192.168.0.14" + Leaf1: + coords: "15,754,150,832" + ip: "192.168.0.21" + Leaf2: + coords: "361,754,506,825" + ip: "192.168.0.22" + Leaf3: + coords: "559,760,705,835" + ip: "192.168.0.23" + Leaf4: + coords: "927,761,1074,833" + ip: "192.168.0.24" + BorderLeaf1: + coords: "368,402,502,470" + ip: "192.168.0.25" + BorderLeaf2: + coords: "566,401,712,467,990,417" + ip: "192.168.0.26" + host1: + coords: "563,871,704,939" + ip: "192.168.0.51" + host2: + coords: "930,873,1075,943" + ip: "192.168.0.52" + host3: + coords: "563,871,704,939" + ip: "192.168.0.52" + host4: + coords: "930,873,1075,943" + ip: "192.168.0.54" + host9: + coords: "368,6,517,85" + ip: "192.168.0.55" + host10: + coords: "560,9,722,86" + ip: "192.168.0.56" + ciscoL1: + coords: "370,120,513,197" + ip: "192.168.0.121" + ciscoL2: + coords: "575,121,719,196" + ip: "192.168.0.122" + ciscoS1: + coords: "475,292,608,365" + ip: "192.168.0.111" + servers: + host5: + coords: "178,869,302,962" + ip: "192.168.0.101" + port : 6001 + host6: + coords: "180,975,311,1061" + ip: "192.168.0.102" + port : 6002 + host7: + coords: "750,877,876,957" + ip: "192.168.0.103" + port : 6003 + host8: + coords: "738,975,872,1065,697,1066" + ip: "192.168.0.104" + port : 6004 \ No newline at end of file diff --git a/topologies/training-level-1-3-cisco-labs/files/apps/webui/.vncpass_clear b/topologies/training-level-1-3-cisco-labs/files/apps/webui/.vncpass_clear new file mode 100644 index 000000000..cd09dd7a5 --- /dev/null +++ b/topologies/training-level-1-3-cisco-labs/files/apps/webui/.vncpass_clear @@ -0,0 +1 @@ +@rista1 \ No newline at end of file diff --git a/topologies/training-level-1-3-cisco-labs/files/cvp/cvp_info.yaml b/topologies/training-level-1-3-cisco-labs/files/cvp/cvp_info.yaml new file mode 100644 index 000000000..f3a9090ea --- /dev/null +++ b/topologies/training-level-1-3-cisco-labs/files/cvp/cvp_info.yaml @@ -0,0 +1,71 @@ +cvp_info: + containers: + Tenant: + nodes: + Leaf: + parent: Tenant + nodes: + - leaf1 + - leaf2 + - leaf3 + - leaf4 + Borderleaf: + parent: Tenant + nodes: + - borderleaf1 + - borderleaf2 + Spine: + parent: Tenant + nodes: + - spine1 + - spine2 + - spine3 + - spine4 + Hosts: + parent: Tenant + nodes: + - host1 + - host2 + - host3 + - host4 + - host9 + - host10 + snapshots: + configlets: + containers: + Tenant: + - ATD-INFRA + netelements: + spine1: + - spine1-base + spine2: + - spine2-base + spine3: + - spine3-base + spine4: + - spine4-base + leaf1: + - leaf1-base + leaf2: + - leaf2-base + borderleaf1: + - borderleaf1-base + borderleaf2: + - borderleaf2-base + leaf3: + - leaf3-base + leaf4: + - leaf4-base + host3: + - host3-base + host4: + - host4-base + host1: + - host1-base + host2: + - host2-base + host9: + - host9-base + host10: + - host10-base + diff --git a/topologies/training-level-1-3-cisco-labs/files/hosts b/topologies/training-level-1-3-cisco-labs/files/hosts new file mode 100644 index 000000000..961a8678f --- /dev/null +++ b/topologies/training-level-1-3-cisco-labs/files/hosts @@ -0,0 +1,26 @@ +127.0.0.1 localhost +192.168.0.11 spine1 +192.168.0.12 spine2 +192.168.0.13 spine3 +192.168.0.14 spine4 +192.168.0.21 leaf1 +192.168.0.22 leaf2 +192.168.0.23 leaf3 +192.168.0.24 leaf4 +192.168.0.25 borderleaf1 +192.168.0.26 borderleaf2 +192.168.0.41 server1 +192.168.0.42 server2 +192.168.0.43 server3 +192.168.0.44 server4 +192.168.0.51 host1 +192.168.0.52 host2 +192.168.0.53 host3 +192.168.0.54 host4 +192.168.0.5 cvp +192.168.0.55 host9 +192.168.0.56 host10 +192.168.0.101 host5 +192.168.0.102 host6 +192.168.0.103 host7 +192.168.0.104 host8 \ No newline at end of file diff --git a/topologies/training-level-1-3-cisco-labs/files/menus/default.yaml b/topologies/training-level-1-3-cisco-labs/files/menus/default.yaml new file mode 100644 index 000000000..7edae00fc --- /dev/null +++ b/topologies/training-level-1-3-cisco-labs/files/menus/default.yaml @@ -0,0 +1,2 @@ +--- +default_menu: training-l3.yaml \ No newline at end of file diff --git a/topologies/training-level-1-3-cisco-labs/files/menus/training-l3.yaml b/topologies/training-level-1-3-cisco-labs/files/menus/training-l3.yaml new file mode 100644 index 000000000..41133498a --- /dev/null +++ b/topologies/training-level-1-3-cisco-labs/files/menus/training-l3.yaml @@ -0,0 +1,32 @@ +--- + lab_list: + reset: + additional_commands: + - "bash /home/arista/Broadcaster/pushHostDefaultConfig.sh" + description: "Reset All Devices to Base Lab (reset)" + labconfiglets: + reset: + spine1: + - "spine1-base" + spine2: + - "spine2-base" + spine3: + - "spine3-base" + spine4: + - "spine4-base" + leaf1: + - "leaf1-base" + leaf2: + - "leaf2-base" + leaf3: + - "leaf3-base" + leaf4: + - "leaf4-base" + host1: + - "host1-base" + host2: + - "host2-base" + borderleaf1: + - "borderleaf1-base" + borderleaf2: + - "borderleaf2-base" diff --git a/topologies/training-level-1-3-cisco-labs/files/scripts/Authenticate-CVP b/topologies/training-level-1-3-cisco-labs/files/scripts/Authenticate-CVP new file mode 100644 index 000000000..144bb13eb --- /dev/null +++ b/topologies/training-level-1-3-cisco-labs/files/scripts/Authenticate-CVP @@ -0,0 +1,32 @@ +import requests +import json + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + +# Print user details + +print "User Name:%s\n "%output['username'] +print "First Name: %s\n "%output['user']['firstName'] +print "Last Name: %s\n "%output['user']['lastName'] +print "User Permissions: %s\n "%output['permissionList'] +print "Cookie Jar: %s\n "%cookies diff --git a/topologies/training-level-1-3-cisco-labs/files/scripts/Authenticate-CVP2 b/topologies/training-level-1-3-cisco-labs/files/scripts/Authenticate-CVP2 new file mode 100644 index 000000000..3f6bf9190 --- /dev/null +++ b/topologies/training-level-1-3-cisco-labs/files/scripts/Authenticate-CVP2 @@ -0,0 +1,48 @@ +import requests +import json + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + +# Print user details + +print "User Name:%s\n "%output['username'] +print "First Name: %s\n "%output['user']['firstName'] +print "Last Name: %s\n "%output['user']['lastName'] +print "User Permissions: %s\n "%output['permissionList'] +print "Cookie Jar: %s\n "%cookies + +#Create an HTTP GET request to the CVP server + +getConfigletURL = "/cvpservice/configlet/getConfiglets.do?" +getConfigletParams = {'startIndex':'0','endIndex':'0','type':'Configlet'} +response = requests.get(url+getConfigletURL,cookies=cookies, params=getConfigletParams,verify=False) +assert response.ok +outputConfiglets = response.json() + +# Print Configlet details + +for configlet in outputConfiglets['data']: + print "ConfigletName: %s"%configlet['name'] + print "ConfigletKey: %s"%configlet['key'] + print "\n" + diff --git a/topologies/training-level-1-3-cisco-labs/files/scripts/Authenticate-CVP3 b/topologies/training-level-1-3-cisco-labs/files/scripts/Authenticate-CVP3 new file mode 100644 index 000000000..2445806ea --- /dev/null +++ b/topologies/training-level-1-3-cisco-labs/files/scripts/Authenticate-CVP3 @@ -0,0 +1,95 @@ +import requests +import json + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + +# Print user details + +print "User Name:%s\n "%output['username'] +print "First Name: %s\n "%output['user']['firstName'] +print "Last Name: %s\n "%output['user']['lastName'] +print "User Permissions: %s\n "%output['permissionList'] +print "Cookie Jar: %s\n "%cookies + +#Create an HTTP GET request to the CVP server + +getConfigletURL = "/cvpservice/configlet/getConfiglets.do?" +getConfigletParams = {'startIndex':'0','endIndex':'0','type':'Configlet'} +response = requests.get(url+getConfigletURL,cookies=cookies, params=getConfigletParams,verify=False) +assert response.ok +outputConfiglets = response.json() + +# Print Configlet details + +for configlet in outputConfiglets['data']: + print "ConfigletName: %s"%configlet['name'] + print "ConfigletKey: %s"%configlet['key'] + print "\n" +# Create an HTTP GET request to the CVP server + +getConfigletHistoryURL = "/cvpservice/configlet/getConfigletHistory.do?" +getConfigletParams = {'configletId':'configlet_32_438214998013','startIndex':'0','endIndex':'0'} +response = requests.get(url+getConfigletHistoryURL,cookies=cookies, params=getConfigletParams,verify=False) +assert response.ok +outputConfigletHistory = response.json() + +# Print Configlet details + +for entry in outputConfigletHistory['configletHistory']: + print "ConfigletKey: %s"%entry['key'] + print "ConfigletOldConfig: %s"%entry['oldConfig'] + print "ConfigletNewConfig: %s"%entry['newConfig'] + print "\n" + + +# Create an HTTP GET request to the CVP server + +getConfigletDetailURL = "/cvpservice/configlet/getConfigletByName.do?" +getConfigletParams = {'name':'VLANs'} +response = requests.get(url+getConfigletDetailURL,cookies=cookies, params=getConfigletParams,verify=False) +assert response.ok +outputConfigletDetail = response.json() + +# Print Configlet details + +print "ConfigletKey: %s"%outputConfigletDetail['key'] +print "ConfigletName: %s"%outputConfigletDetail['name'] +print "ConfigletConfig: %s"%outputConfigletDetail['config'] +print "ConfigletNote: %s"%outputConfigletDetail['note'] +print "\n" + + +# Create an HTTP POST request to the CVP server + +headers = { 'Content-Type': 'application/json' } +postConfigletChangeURL = "/cvpservice/configlet/updateConfiglet.do" +changeData = json.dumps({"config": "! some configuration here", "key": "configlet_32_438214998013", "name": "VLANs"}) +response = requests.post(url+postConfigletChangeURL, cookies=cookies, data=changeData,headers=headers,verify=False) +assert response.ok +outputConfigletChange = response.json() + +# Print Configlet details + +print "ConfigletChange: %s"%outputConfigletChange['data'] +print "\n" + diff --git a/topologies/training-level-1-3-cisco-labs/files/scripts/Configlet1 b/topologies/training-level-1-3-cisco-labs/files/scripts/Configlet1 new file mode 100644 index 000000000..3f6bf9190 --- /dev/null +++ b/topologies/training-level-1-3-cisco-labs/files/scripts/Configlet1 @@ -0,0 +1,48 @@ +import requests +import json + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + +# Print user details + +print "User Name:%s\n "%output['username'] +print "First Name: %s\n "%output['user']['firstName'] +print "Last Name: %s\n "%output['user']['lastName'] +print "User Permissions: %s\n "%output['permissionList'] +print "Cookie Jar: %s\n "%cookies + +#Create an HTTP GET request to the CVP server + +getConfigletURL = "/cvpservice/configlet/getConfiglets.do?" +getConfigletParams = {'startIndex':'0','endIndex':'0','type':'Configlet'} +response = requests.get(url+getConfigletURL,cookies=cookies, params=getConfigletParams,verify=False) +assert response.ok +outputConfiglets = response.json() + +# Print Configlet details + +for configlet in outputConfiglets['data']: + print "ConfigletName: %s"%configlet['name'] + print "ConfigletKey: %s"%configlet['key'] + print "\n" + diff --git a/topologies/training-level-1-3-cisco-labs/files/scripts/ConfigletChange b/topologies/training-level-1-3-cisco-labs/files/scripts/ConfigletChange new file mode 100644 index 000000000..691ff5864 --- /dev/null +++ b/topologies/training-level-1-3-cisco-labs/files/scripts/ConfigletChange @@ -0,0 +1,40 @@ +import requests +import json + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + + +# Create an HTTP POST request to the CVP server + +headers = { 'Content-Type': 'application/json' } +postConfigletChangeURL = "/cvpservice/configlet/addNoteToConfiglet.do" +changeData = json.dumps({"note": "Configlet Changed by API", "key": "configlet_516_7018635812307"}) +response = requests.post(url+postConfigletChangeURL, cookies=cookies, data=changeData,headers=headers,verify=False) +assert response.ok +outputConfigletChange = response.json() + +# Print Configlet details + +print "ConfigletChange: %s"%outputConfigletChange['data'] +print "\n" + diff --git a/topologies/training-level-1-3-cisco-labs/files/scripts/ConfigletDetail b/topologies/training-level-1-3-cisco-labs/files/scripts/ConfigletDetail new file mode 100644 index 000000000..eb2a85937 --- /dev/null +++ b/topologies/training-level-1-3-cisco-labs/files/scripts/ConfigletDetail @@ -0,0 +1,43 @@ +import requests +import json + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + +# Create an HTTP GET request to the CVP server + +getConfigletDetailURL = "/cvpservice/configlet/getConfigletByName.do?" +getConfigletParams = {'name':'VLANs'} +response = requests.get(url+getConfigletDetailURL,cookies=cookies, params=getConfigletParams,verify=False) +assert response.ok +outputConfigletDetail = response.json() + +# Print Configlet details + +print "ConfigletKey: %s"%outputConfigletDetail['key'] +print "ConfigletName: %s"%outputConfigletDetail['name'] +print "ConfigletConfig: %s"%outputConfigletDetail['config'] +print "ConfigletNote: %s"%outputConfigletDetail['note'] +print "\n" + + + diff --git a/topologies/training-level-1-3-cisco-labs/files/scripts/ConfigletHistory b/topologies/training-level-1-3-cisco-labs/files/scripts/ConfigletHistory new file mode 100644 index 000000000..71f1ac693 --- /dev/null +++ b/topologies/training-level-1-3-cisco-labs/files/scripts/ConfigletHistory @@ -0,0 +1,41 @@ +import requests +import json + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + +# Create an HTTP GET request to the CVP server + +getConfigletHistoryURL = "/cvpservice/configlet/getConfigletHistory.do?" +getConfigletParams = {'configletId':'configlet_344_7351420097365','startIndex':'0','endIndex':'0'} +response = requests.get(url+getConfigletHistoryURL,cookies=cookies, params=getConfigletParams,verify=False) +assert response.ok +outputConfigletHistory = response.json() + +# Print Configlet details + +for entry in outputConfigletHistory['configletHistory']: + print "ConfigletKey: %s"%entry['key'] + print "ConfigletOldConfig: \n%s"%entry['oldConfig'] + print "ConfigletNewConfig: \n%s"%entry['newConfig'] + print "\n" + diff --git a/topologies/training-level-1-3-cisco-labs/files/scripts/TaskBase b/topologies/training-level-1-3-cisco-labs/files/scripts/TaskBase new file mode 100644 index 000000000..6f8deccaf --- /dev/null +++ b/topologies/training-level-1-3-cisco-labs/files/scripts/TaskBase @@ -0,0 +1,59 @@ +import requests +import json + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + + +# Create an HTTP GET request to the CVP server + +getTasksURL = "/cvpservice/task/getTasks.do?" +getTasksParams = {'startIndex':'0','endIndex':'0','queryparam':'Pending'} +response = requests.get(url+getTasksURL,cookies=cookies, params=getTasksParams,verify=False) +assert response.ok +outputPendingTasks = response.json() + + +# Print Tasks Created by Current User +taskList = [ ] +for entry in outputPendingTasks['data']: + if str(entry['createdBy']) == str(CVP_USER): + print "TaskNumber: %s"%entry['workOrderId'] + taskList.append(str(entry['workOrderId'])) +print "TaskList: %s"%taskList + + + +# Create an HTTP POST request to the CVP server + +headers = { 'Content-Type': 'application/json' } +postTaskLogURL = "/cvpservice/workflow/addWorkOrderLog.do" +taskLogData = json.dumps({"taskId": taskList[1],"message": "This is a test Change","source": "CVP REST API"}) +response = requests.post(url+postTaskLogURL, cookies=cookies, data=taskLogData,headers=headers,verify=False) +assert response.ok +outputTaskLog = response.json() + +# Print Configlet details + +print "TaskLogAmmend: %s"%outputTaskLog['data'] +print "\n" + diff --git a/topologies/training-level-1-3-cisco-labs/files/scripts/TaskCVP1 b/topologies/training-level-1-3-cisco-labs/files/scripts/TaskCVP1 new file mode 100644 index 000000000..1ebd05764 --- /dev/null +++ b/topologies/training-level-1-3-cisco-labs/files/scripts/TaskCVP1 @@ -0,0 +1,48 @@ +import requests +import json + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + +# Print user details + +print "User Name:%s\n "%output['username'] +print "First Name: %s\n "%output['user']['firstName'] +print "Last Name: %s\n "%output['user']['lastName'] + + +getTasksURL = "/cvpservice/task/getTasks.do?" +getTasksParams = {'startIndex':'0','endIndex':'0'} +response = requests.get(url+getTasksURL,cookies=cookies, params=getTasksParams,verify=False) +assert response.ok +outputPendingTasks = response.json() + + +# Print Tasks Created by Current User +taskList = [ ] +for entry in outputPendingTasks['data']: + if str(entry['createdBy']) == str(CVP_USER): + print( "TaskNumber: %s Description: %s" %(entry['workOrderId'],entry['description'])) + taskList.append(str(entry['workOrderId'])) +#print "TaskList: %s"%taskList + + diff --git a/topologies/training-level-1-3-cisco-labs/files/scripts/TaskExecute b/topologies/training-level-1-3-cisco-labs/files/scripts/TaskExecute new file mode 100644 index 000000000..3db487284 --- /dev/null +++ b/topologies/training-level-1-3-cisco-labs/files/scripts/TaskExecute @@ -0,0 +1,56 @@ +import requests +import json + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + + +# Create an HTTP GET request to the CVP server + +getTasksURL = "/cvpservice/task/getTasks.do?" +getTasksParams = {'startIndex':'0','endIndex':'0','queryparam':'Pending'} +response = requests.get(url+getTasksURL,cookies=cookies, params=getTasksParams,verify=False) +assert response.ok +outputPendingTasks = response.json() + + +# Print Tasks Created by Current User +taskList = [ ] +for entry in outputPendingTasks['data']: + if str(entry['createdBy']) == str(CVP_USER): + print "TaskNumber: %s"%entry['workOrderId'] + taskList.append(str(entry['workOrderId'])) +print "TaskList: %s"%taskList + + + +headers = { 'Content-Type': 'application/json' } +postTaskExecuteURL = "/cvpservice/task/executeTask.do" +for taskNumber in taskList: + executeData = json.dumps({'data': [taskNumber]}) + response = requests.post(url+postTaskExecuteURL, cookies=cookies,data=executeData,headers=headers,verify=False) + assert response.ok + outputExecuteTask = response.json() + print (outputExecuteTask['data']) + print "Task: "+str(taskNumber)+" Execute: "+str(outputExecuteTask['data']) + print "\n" + diff --git a/topologies/training-level-1-3-cisco-labs/files/scripts/TaskLog b/topologies/training-level-1-3-cisco-labs/files/scripts/TaskLog new file mode 100644 index 000000000..c835008b8 --- /dev/null +++ b/topologies/training-level-1-3-cisco-labs/files/scripts/TaskLog @@ -0,0 +1,59 @@ +import requests +import json + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + + +# Create an HTTP GET request to the CVP server + +getTasksURL = "/cvpservice/task/getTasks.do?" +getTasksParams = {'startIndex':'0','endIndex':'0'} +response = requests.get(url+getTasksURL,cookies=cookies, params=getTasksParams,verify=False) +assert response.ok +outputTasks = response.json() + + +# Print Tasks Created by Current User +taskList = [ ] +for entry in outputTasks['data']: + if str(entry['createdBy']) == str(CVP_USER): + print "TaskNumber: %s"%entry['workOrderId'] + taskList.append(str(entry['workOrderId'])) +print "TaskList: %s"%taskList + + + +# Create an HTTP POST request to the CVP server + +headers = { 'Content-Type': 'application/json' } +postTaskLogURL = "/cvpservice/workflow/addWorkOrderLog.do" +taskLogData = json.dumps({"taskId": taskList[0],"message": "This is a test Change","source": "CVP REST API"}) +response = requests.post(url+postTaskLogURL, cookies=cookies, data=taskLogData,headers=headers,verify=False) +assert response.ok +outputTaskLog = response.json() + +# Print Configlet details + +print "TaskLogAmmend: %s"%outputTaskLog['data'] +print "\n" + diff --git a/topologies/training-level-1-3-cisco-labs/files/scripts/TaskLog1 b/topologies/training-level-1-3-cisco-labs/files/scripts/TaskLog1 new file mode 100644 index 000000000..c835008b8 --- /dev/null +++ b/topologies/training-level-1-3-cisco-labs/files/scripts/TaskLog1 @@ -0,0 +1,59 @@ +import requests +import json + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + + +# Create an HTTP GET request to the CVP server + +getTasksURL = "/cvpservice/task/getTasks.do?" +getTasksParams = {'startIndex':'0','endIndex':'0'} +response = requests.get(url+getTasksURL,cookies=cookies, params=getTasksParams,verify=False) +assert response.ok +outputTasks = response.json() + + +# Print Tasks Created by Current User +taskList = [ ] +for entry in outputTasks['data']: + if str(entry['createdBy']) == str(CVP_USER): + print "TaskNumber: %s"%entry['workOrderId'] + taskList.append(str(entry['workOrderId'])) +print "TaskList: %s"%taskList + + + +# Create an HTTP POST request to the CVP server + +headers = { 'Content-Type': 'application/json' } +postTaskLogURL = "/cvpservice/workflow/addWorkOrderLog.do" +taskLogData = json.dumps({"taskId": taskList[0],"message": "This is a test Change","source": "CVP REST API"}) +response = requests.post(url+postTaskLogURL, cookies=cookies, data=taskLogData,headers=headers,verify=False) +assert response.ok +outputTaskLog = response.json() + +# Print Configlet details + +print "TaskLogAmmend: %s"%outputTaskLog['data'] +print "\n" + diff --git a/topologies/training-level-1-3-cisco-labs/files/scripts/TaskLogView b/topologies/training-level-1-3-cisco-labs/files/scripts/TaskLogView new file mode 100644 index 000000000..7b34904dd --- /dev/null +++ b/topologies/training-level-1-3-cisco-labs/files/scripts/TaskLogView @@ -0,0 +1,51 @@ +import requests +import json +import pprint + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + + +# Create an HTTP GET request to the CVP server + +getTasksURL = "/cvpservice/task/getTasks.do?" +getTasksParams = {'startIndex':'0','endIndex':'0'} +response = requests.get(url+getTasksURL,cookies=cookies, params=getTasksParams,verify=False) +assert response.ok +outputTasks = response.json() + +taskList = [ ] +for entry in outputTasks['data']: + if str(entry['createdBy']) == str(CVP_USER): + taskList.append(str(entry['workOrderId'])) + +getTaskLogURL = "/cvpservice/task/getLogsById.do?" +#getTaskLogParams = {'startIndex':'0','endIndex':'0','id':'0'} +getTaskLogParams = {'startIndex':'0','endIndex':'0','id':taskList[0]} +response = requests.get(url+getTaskLogURL,cookies=cookies, params=getTaskLogParams,verify=False) +assert response.ok +outputTaskLog = response.json() + +# Print TaskLog details +print "TaskLogOutput: %s" %outputTaskLog['data'] +print "\n" + diff --git a/topologies/training-level-1-3-cisco-labs/files/scripts/TaskNote b/topologies/training-level-1-3-cisco-labs/files/scripts/TaskNote new file mode 100644 index 000000000..6cd1d6cfd --- /dev/null +++ b/topologies/training-level-1-3-cisco-labs/files/scripts/TaskNote @@ -0,0 +1,52 @@ +import requests +import json +import pprint + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + + +# Create an HTTP GET request to the CVP server + +getTasksURL = "/cvpservice/task/getTasks.do?" +getTasksParams = {'startIndex':'0','endIndex':'0'} +response = requests.get(url+getTasksURL,cookies=cookies, params=getTasksParams,verify=False) +assert response.ok +outputTasks = response.json() + +taskList = [ ] +for entry in outputTasks['data']: + if str(entry['createdBy']) == str(CVP_USER): + taskList.append(str(entry['workOrderId'])) + +headers = { 'Content-Type': 'application/json' } +postTaskNoteURL = "/cvpservice/task/addNoteToTask.do" +taskNoteData = json.dumps({"workOrderId": taskList[0],"note": "This is a test Change using the API"}) +response = requests.post(url+postTaskNoteURL, cookies=cookies, data=taskNoteData,headers=headers,verify=False) +assert response.ok +outputTaskNote = response.json() + +# Print Task details + +print "TaskNoteAmmend: %s"%outputTaskNote['data'] +print "\n" + diff --git a/topologies/training-level-1-3-cisco-labs/labguides/.gitignore b/topologies/training-level-1-3-cisco-labs/labguides/.gitignore new file mode 100644 index 000000000..ed86553f4 --- /dev/null +++ b/topologies/training-level-1-3-cisco-labs/labguides/.gitignore @@ -0,0 +1,2 @@ +.DS_Store +build/ diff --git a/topologies/training-level-1-3-cisco-labs/labguides/Makefile b/topologies/training-level-1-3-cisco-labs/labguides/Makefile new file mode 100644 index 000000000..874ed2529 --- /dev/null +++ b/topologies/training-level-1-3-cisco-labs/labguides/Makefile @@ -0,0 +1,20 @@ +# Minimal makefile for Sphinx documentation +# + +# You can set these variables from the command line. +SPHINXOPTS = +SPHINXBUILD = python -msphinx +SPHINXPROJ = ATD +SOURCEDIR = source +BUILDDIR = build + +# Put it first so that "make" without argument is like "make help". +help: + @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) + +.PHONY: help Makefile + +# Catch-all target: route all unknown targets to Sphinx using the new +# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). +%: Makefile + @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) \ No newline at end of file diff --git a/topologies/training-level-1-3-cisco-labs/labguides/readme.md b/topologies/training-level-1-3-cisco-labs/labguides/readme.md new file mode 100644 index 000000000..5a5369ecd --- /dev/null +++ b/topologies/training-level-1-3-cisco-labs/labguides/readme.md @@ -0,0 +1,12 @@ +# Lab Guides +In this folder are rST (restructured text) formatted lab guides for the ATD event. + +## Building +To build the documentation, you will need to install Sphinx and sphinx_bootstrap_theme with `pip`: + +`pip install sphinx sphinx_bootstrap_theme` + +## Contributing +At some point, this section may expand, but for now please make sure to review existing files for formatting guidelines. + +Please see https://github.com/ralsina/rst-cheatsheet/blob/master/rst-cheatsheet.rst for a cheat sheet. \ No newline at end of file diff --git a/topologies/training-level-1-3-cisco-labs/labguides/source/_static/arista_logo.png b/topologies/training-level-1-3-cisco-labs/labguides/source/_static/arista_logo.png new file mode 100644 index 000000000..2376e72b9 Binary files /dev/null and b/topologies/training-level-1-3-cisco-labs/labguides/source/_static/arista_logo.png differ diff --git a/topologies/training-level-1-3-cisco-labs/labguides/source/_static/arista_logo_160by26.png b/topologies/training-level-1-3-cisco-labs/labguides/source/_static/arista_logo_160by26.png new file mode 100644 index 000000000..d0d0cbeec Binary files /dev/null and b/topologies/training-level-1-3-cisco-labs/labguides/source/_static/arista_logo_160by26.png differ diff --git a/topologies/training-level-1-3-cisco-labs/labguides/source/_static/arista_logo_320by52.png b/topologies/training-level-1-3-cisco-labs/labguides/source/_static/arista_logo_320by52.png new file mode 100644 index 000000000..43dfa7ed2 Binary files /dev/null and b/topologies/training-level-1-3-cisco-labs/labguides/source/_static/arista_logo_320by52.png differ diff --git a/topologies/training-level-1-3-cisco-labs/labguides/source/_static/cloudvision-icon.png b/topologies/training-level-1-3-cisco-labs/labguides/source/_static/cloudvision-icon.png new file mode 100644 index 000000000..c309ed98e Binary files /dev/null and b/topologies/training-level-1-3-cisco-labs/labguides/source/_static/cloudvision-icon.png differ diff --git a/topologies/training-level-1-3-cisco-labs/labguides/source/_static/logo.jpg b/topologies/training-level-1-3-cisco-labs/labguides/source/_static/logo.jpg new file mode 100644 index 000000000..6eda41f7e Binary files /dev/null and b/topologies/training-level-1-3-cisco-labs/labguides/source/_static/logo.jpg differ diff --git a/topologies/training-level-1-3-cisco-labs/labguides/source/_static/my-styles.css b/topologies/training-level-1-3-cisco-labs/labguides/source/_static/my-styles.css new file mode 100644 index 000000000..1150528ee --- /dev/null +++ b/topologies/training-level-1-3-cisco-labs/labguides/source/_static/my-styles.css @@ -0,0 +1,41 @@ +body { + background-color: #FFFFFF; + color: #002859 +} + +.navbar-inverse { + background-image: -webkit-linear-gradient(#6d94bf, #446e9b 50%, #002859); + background-image: -o-linear-gradient(#6d94bf, #446e9b 50%, #002859); + background-image: -webkit-gradient(linear, left top, left bottom, from(#6d94bf), color-stop(50%, #446e9b), to(#002859)); + background-image: linear-gradient(#6d94bf, #446e9b 50%, #002859); + background-repeat: no-repeat; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff6d94bf', endColorstr='#ff002859', GradientType=0); + -webkit-filter: none; + filter: none; + border: 1px solid #345578; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.3) +} + +.navbar-brand { + background: url("arista_logo_320by52.png") center / contain no-repeat; + display: inline-block; + width: 1px; + padding: 0 10px 0 60px; + margin-right: 30px; + margin-left: -30px; +} + +.navbar-brand>img { + display: inline-block; + padding: 0 100px 0 0px; + margin-right: 20px; +} +a.navbar-brand { + display: inline-block; + padding: 15px 0 0 120px; +} + +footer { + background-color: #002859; + color: #FFFFFF; +} diff --git a/topologies/training-level-1-3-cisco-labs/labguides/source/conf.py b/topologies/training-level-1-3-cisco-labs/labguides/source/conf.py new file mode 100644 index 000000000..afccec09c --- /dev/null +++ b/topologies/training-level-1-3-cisco-labs/labguides/source/conf.py @@ -0,0 +1,247 @@ +# -*- coding: utf-8 -*- +# +# ATD documentation build configuration file, created by +# sphinx-quickstart on Tue Apr 17 10:00:04 2018. +# +# This file is execfile()d with the current directory set to its +# containing dir. +# +# Note that not all possible configuration values are present in this +# autogenerated file. +# +# All configuration values have a default; values that are commented out +# serve to show the default. + +# If extensions (or modules to document with autodoc) are in another directory, +# add these directories to sys.path here. If the directory is relative to the +# documentation root, use os.path.abspath to make it absolute, like shown here. +# +# import os +# import sys +# sys.path.insert(0, os.path.abspath('.')) + +import sphinx_bootstrap_theme + +# Importing datetime module to auto update copyright year +from datetime import date + +# -- General configuration ------------------------------------------------ + +# If your documentation needs a minimal Sphinx version, state it here. +# +# needs_sphinx = '1.0' + +# Add any Sphinx extension module names here, as strings. They can be +# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom +# ones. + +# Add any paths that contain templates here, relative to this directory. +templates_path = ['_templates'] + +# The suffix(es) of source filenames. +# You can specify multiple suffix as a list of string: +# +# source_suffix = ['.rst', '.md'] +source_suffix = '.rst' + +# The master toctree document. +master_doc = 'index' + +# General information about the project. +# Updating copyright var to auto update with current year +project = u'Arista ATD' +copyright = u'{0}, Arista Networks'.format(date.today().year) +author = u'Arista ATD atd-help@arista.com' + +# Show Source +html_show_sourcelink = False + +# The version info for the project you're documenting, acts as replacement for +# |version| and |release|, also used in various other places throughout the +# built documents. +# +# The short X.Y version. +version = u'Version 3.0' +# The full version, including alpha/beta/rc tags. +release = u'1' + +# The language for content autogenerated by Sphinx. Refer to documentation +# for a list of supported languages. +# +# This is also used if you do content translation via gettext catalogs. +# Usually you set "language" from the command line for these cases. +language = None + +# List of patterns, relative to source directory, that match files and +# directories to ignore when looking for source files. +# This patterns also effect to html_static_path and html_extra_path +exclude_patterns = [] + +# The name of the Pygments (syntax highlighting) style to use. +pygments_style = 'sphinx' + +# If true, `todo` and `todoList` produce output, else they produce nothing. +todo_include_todos = False + + +# -- Options for HTML output ---------------------------------------------- + +# The theme to use for HTML and HTML Help pages. See the documentation for +# a list of builtin themes. +# +#html_theme = 'alabaster' +html_theme = 'bootstrap' +html_theme_path = sphinx_bootstrap_theme.get_html_theme_path() + +# Add any paths that contain custom static files (such as style sheets) here, +# relative to this directory. They are copied after the builtin static files, +# so a file named "default.css" will overwrite the builtin "default.css". +html_static_path = ['_static'] + +# Theme options are theme-specific and customize the look and feel of a theme +# further. For a list of options available for each theme, see the +# documentation. +# +html_theme_options = { + # Navigation bar title. (Default: ``project`` value) + 'navbar_title': "ATD", + + # Tab name for entire site. (Default: "Site") + 'navbar_site_name': "Table of Contents", + + # A list of tuples containing pages or urls to link to. + # Valid tuples should be in the following forms: + # (name, page) # a link to a page + # (name, "/aa/bb", 1) # a link to an arbitrary relative url + # (name, "http://example.com", True) # arbitrary absolute url + # Note the "1" or "True" value above as the third argument to indicate + # an arbitrary url. + 'navbar_links': [ + ("Arista", "http://www.arista.com", True), + ], + + # Render the next and previous page links in navbar. (Default: true) + 'navbar_sidebarrel': True, + + # Render the current pages TOC in the navbar. (Default: true) + 'navbar_pagenav': False, + + # Tab name for the current pages TOC. (Default: "Page") + 'navbar_pagenav_name': "Page", + + # Global TOC depth for "site" navbar tab. (Default: 1) + # Switching to -1 shows all levels. + 'globaltoc_depth': 2, + + # Include hidden TOCs in Site navbar? + # + # Note: If this is "false", you cannot have mixed ``:hidden:`` and + # non-hidden ``toctree`` directives in the same page, or else the build + # will break. + # + # Values: "true" (default) or "false" + 'globaltoc_includehidden': "true", + + # HTML navbar class (Default: "navbar") to attach to
    element. + # For black navbar, do "navbar navbar-inverse" + #'navbar_class': "navbar navbar-inverse", + 'navbar_class': "navbar", + + # Fix navigation bar to top of page? + # Values: "true" (default) or "false" + 'navbar_fixed_top': "true", + + # Location of link to source. + # Options are "nav" (default), "footer" or anything else to exclude. + #'source_link_position': "nav", + + # Bootswatch (http://bootswatch.com/) theme. + # + # Options are nothing (default) or the name of a valid theme + # such as "cosmo" or "sandstone". + # + # The set of valid themes depend on the version of Bootstrap + # that's used (the next config option). + # + # Currently, the supported themes are: + # - Bootstrap 2: https://bootswatch.com/2 + # - Bootstrap 3: https://bootswatch.com/3 + 'bootswatch_theme': "spacelab", + + # Choose Bootstrap version. + # Values: "3" (default) or "2" (in quotes) + 'bootstrap_version': "3", +} + +# The name for this set of Sphinx documents. If None, it defaults to +# " v documentation". +#html_title = "AristaATD" + +# A shorter title for the navigation bar. Default is the same as html_title. +#html_short_title = "Demo" + +# (Optional) Logo. Should be small enough to fit the navbar (ideally 24x24). +# Path should be relative to the ``_static`` files directory. +#html_logo = "cloudvision-icon.png" + +# -- Options for HTMLHelp output ------------------------------------------ + +# Output file base name for HTML help builder. +htmlhelp_basename = 'AristaATD' + + +# -- Options for LaTeX output --------------------------------------------- + +latex_elements = { + # The paper size ('letterpaper' or 'a4paper'). + # + # 'papersize': 'letterpaper', + + # The font size ('10pt', '11pt' or '12pt'). + # + # 'pointsize': '10pt', + + # Additional stuff for the LaTeX preamble. + # + # 'preamble': '', + + # Latex figure (float) alignment + # + # 'figure_align': 'htbp', +} + +# Grouping the document tree into LaTeX files. List of tuples +# (source start file, target name, title, +# author, documentclass [howto, manual, or own class]). +latex_documents = [ + (master_doc, 'ATD.tex', u'ATD Lab Guide', + u'ATD Help (atd-help@arista.com)', 'manual'), +] + + +# -- Options for manual page output --------------------------------------- + +# One entry per manual page. List of tuples +# (source start file, name, description, authors, manual section). +man_pages = [ + (master_doc, 'atd', u'ATD Lab Guide', + [author], 1) +] + + +# -- Options for Texinfo output ------------------------------------------- + +# Grouping the document tree into Texinfo files. List of tuples +# (source start file, target name, title, author, +# dir menu entry, description, category) +texinfo_documents = [ + (master_doc, 'ATD', u'ATD Lab Guide', + author, 'ATD', 'Lab Documentation.', + 'Miscellaneous'), +] + + +def setup(app): + app.add_stylesheet("my-styles.css") # also can be a full URL + # app.add_stylesheet("ANOTHER.css") + # app.add_stylesheet("AND_ANOTHER.css") diff --git a/topologies/training-level-1-3-cisco-labs/labguides/source/connecting.rst b/topologies/training-level-1-3-cisco-labs/labguides/source/connecting.rst new file mode 100644 index 000000000..10ae589ef --- /dev/null +++ b/topologies/training-level-1-3-cisco-labs/labguides/source/connecting.rst @@ -0,0 +1,28 @@ +Connecting +========== + +1. Log into the Arista Test Drive portal with your assigned URL. If you + don’t have one, please see your ATD staff. + +.. image:: images/connecting/nested_connecting_1.png + +2. SSH to the public address assigned to the LabAccess jumphost server (this is the Topology Address shown in the "Welcome to Arista's Test Drive!" picture above). The username is ``arista`` and the password is ``{REPLACE_PWD}``: + + .. code-block:: text + + ssh arista@{unique_address}.topo.testdrive.arista.com + +| + +.. image:: images/connecting/nested_connecting_2.png + :align: center + +| + +3. The LabAccess menu allows users to connect to each device and specify + lab topology. It is recommended to open multiple SSH sessions or use + the Screen option (under the SSH Menu) to jump between devices rapidly. + + You can also Access the LabAccess Menu from your browser by clicking on `Console Access` + +.. image:: images/connecting/nested_connecting_3.png diff --git a/topologies/training-level-1-3-cisco-labs/labguides/source/images/connecting/nested_connecting_1.png b/topologies/training-level-1-3-cisco-labs/labguides/source/images/connecting/nested_connecting_1.png new file mode 100644 index 000000000..aa76597b8 Binary files /dev/null and b/topologies/training-level-1-3-cisco-labs/labguides/source/images/connecting/nested_connecting_1.png differ diff --git a/topologies/training-level-1-3-cisco-labs/labguides/source/images/connecting/nested_connecting_2.png b/topologies/training-level-1-3-cisco-labs/labguides/source/images/connecting/nested_connecting_2.png new file mode 100644 index 000000000..2c6b51a2b Binary files /dev/null and b/topologies/training-level-1-3-cisco-labs/labguides/source/images/connecting/nested_connecting_2.png differ diff --git a/topologies/training-level-1-3-cisco-labs/labguides/source/images/connecting/nested_connecting_3.png b/topologies/training-level-1-3-cisco-labs/labguides/source/images/connecting/nested_connecting_3.png new file mode 100644 index 000000000..1cc7402a3 Binary files /dev/null and b/topologies/training-level-1-3-cisco-labs/labguides/source/images/connecting/nested_connecting_3.png differ diff --git a/topologies/training-level-1-3-cisco-labs/labguides/source/images/logo.jpg b/topologies/training-level-1-3-cisco-labs/labguides/source/images/logo.jpg new file mode 100644 index 000000000..6eda41f7e Binary files /dev/null and b/topologies/training-level-1-3-cisco-labs/labguides/source/images/logo.jpg differ diff --git a/topologies/training-level-1-3-cisco-labs/labguides/source/index.rst b/topologies/training-level-1-3-cisco-labs/labguides/source/index.rst new file mode 100644 index 000000000..bb76aaa2e --- /dev/null +++ b/topologies/training-level-1-3-cisco-labs/labguides/source/index.rst @@ -0,0 +1,8 @@ +Welcome to the Arista Training documentation! +======================================== + +.. toctree:: + :maxdepth: 1 + :caption: EOS Configuration + + connecting.rst diff --git a/topologies/training-level-1-3-cisco-labs/topo_build.yml b/topologies/training-level-1-3-cisco-labs/topo_build.yml new file mode 100644 index 000000000..632e0ea33 --- /dev/null +++ b/topologies/training-level-1-3-cisco-labs/topo_build.yml @@ -0,0 +1,514 @@ +host_cpu: 4 +cvp_cpu: 24 +cvp_nodes: 1 +veos_cpu: 2 +nodes: + - spine1: + ip_addr: 192.168.0.11 + sys_mac: 00:1c:73:b1:c6:01 + neighbors: + - neighborDevice: spine2 + neighborPort: Ethernet1 + port: Ethernet1 + - neighborDevice: spine2 + neighborPort: Ethernet2 + port: Ethernet2 + - neighborDevice: leaf1 + neighborPort: Ethernet3 + port: Ethernet3 + - neighborDevice: leaf2 + neighborPort: Ethernet3 + port: Ethernet4 + - neighborDevice: leaf3 + neighborPort: Ethernet3 + port: Ethernet5 + - neighborDevice: leaf4 + neighborPort: Ethernet3 + port: Ethernet6 + - neighborDevice: borderleaf1 + neighborPort: Ethernet3 + port: Ethernet7 + - neighborDevice: borderleaf2 + neighborPort: Ethernet3 + port: Ethernet8 + - spine2: + ip_addr: 192.168.0.12 + sys_mac: 00:1c:73:b2:c6:01 + neighbors: + - neighborDevice: spine1 + neighborPort: Ethernet1 + port: Ethernet1 + - neighborDevice: spine1 + neighborPort: Ethernet2 + port: Ethernet2 + - neighborDevice: leaf1 + neighborPort: Ethernet4 + port: Ethernet3 + - neighborDevice: leaf2 + neighborPort: Ethernet4 + port: Ethernet4 + - neighborDevice: leaf3 + neighborPort: Ethernet4 + port: Ethernet5 + - neighborDevice: leaf4 + neighborPort: Ethernet4 + port: Ethernet6 + - neighborDevice: borderleaf1 + neighborPort: Ethernet4 + port: Ethernet7 + - neighborDevice: borderleaf2 + neighborPort: Ethernet4 + port: Ethernet8 + - spine3: + ip_addr: 192.168.0.13 + sys_mac: 00:1c:73:b3:c6:01 + neighbors: + - neighborDevice: spine4 + neighborPort: Ethernet1 + port: Ethernet1 + - neighborDevice: spine4 + neighborPort: Ethernet2 + port: Ethernet2 + - neighborDevice: leaf1 + neighborPort: Ethernet5 + port: Ethernet3 + - neighborDevice: leaf2 + neighborPort: Ethernet5 + port: Ethernet4 + - neighborDevice: leaf3 + neighborPort: Ethernet5 + port: Ethernet5 + - neighborDevice: leaf4 + neighborPort: Ethernet5 + port: Ethernet6 + - neighborDevice: borderleaf1 + neighborPort: Ethernet5 + port: Ethernet7 + - neighborDevice: borderleaf2 + neighborPort: Ethernet5 + port: Ethernet8 + - spine4: + ip_addr: 192.168.0.14 + sys_mac: 00:1c:73:b4:c6:01 + neighbors: + - neighborDevice: spine3 + neighborPort: Ethernet1 + port: Ethernet1 + - neighborDevice: spine3 + neighborPort: Ethernet2 + port: Ethernet2 + - neighborDevice: leaf1 + neighborPort: Ethernet6 + port: Ethernet3 + - neighborDevice: leaf2 + neighborPort: Ethernet6 + port: Ethernet4 + - neighborDevice: leaf3 + neighborPort: Ethernet6 + port: Ethernet5 + - neighborDevice: leaf4 + neighborPort: Ethernet6 + port: Ethernet6 + - neighborDevice: borderleaf1 + neighborPort: Ethernet6 + port: Ethernet7 + - neighborDevice: borderleaf2 + neighborPort: Ethernet6 + port: Ethernet8 + - leaf1: + ip_addr: 192.168.0.21 + sys_mac: 00:1c:73:c1:c6:01 + neighbors: + - neighborDevice: leaf2 + neighborPort: Ethernet1 + port: Ethernet1 + - neighborDevice: leaf2 + neighborPort: Ethernet2 + port: Ethernet2 + - neighborDevice: spine1 + neighborPort: Ethernet3 + port: Ethernet3 + - neighborDevice: spine2 + neighborPort: Ethernet3 + port: Ethernet4 + - neighborDevice: spine3 + neighborPort: Ethernet3 + port: Ethernet5 + - neighborDevice: spine4 + neighborPort: Ethernet3 + port: Ethernet6 + - neighborDevice: host1 + neighborPort: Ethernet1 + port: Ethernet7 + - neighborDevice: host5 + neighborPort: Ethernet1 + port: Ethernet8 + - neighborDevice: host2 + neighborPort: Ethernet1 + port: Ethernet9 + - neighborDevice: host6 + neighborPort: Ethernet1 + port: Ethernet10 + - leaf2: + ip_addr: 192.168.0.22 + sys_mac: 00:1c:73:c2:c6:01 + neighbors: + - neighborDevice: leaf1 + neighborPort: Ethernet1 + port: Ethernet1 + - neighborDevice: leaf1 + neighborPort: Ethernet2 + port: Ethernet2 + - neighborDevice: spine1 + neighborPort: Ethernet4 + port: Ethernet3 + - neighborDevice: spine2 + neighborPort: Ethernet4 + port: Ethernet4 + - neighborDevice: spine3 + neighborPort: Ethernet4 + port: Ethernet5 + - neighborDevice: spine4 + neighborPort: Ethernet4 + port: Ethernet6 + - neighborDevice: host1 + neighborPort: Ethernet2 + port: Ethernet7 + - neighborDevice: host5 + neighborPort: Ethernet2 + port: Ethernet8 + - neighborDevice: host2 + neighborPort: Ethernet2 + port: Ethernet9 + - neighborDevice: host6 + neighborPort: Ethernet2 + port: Ethernet10 + - leaf3: + ip_addr: 192.168.0.23 + sys_mac: 00:1c:73:c3:c6:01 + neighbors: + - neighborDevice: leaf4 + neighborPort: Ethernet1 + port: Ethernet1 + - neighborDevice: leaf4 + neighborPort: Ethernet2 + port: Ethernet2 + - neighborDevice: spine1 + neighborPort: Ethernet5 + port: Ethernet3 + - neighborDevice: spine2 + neighborPort: Ethernet5 + port: Ethernet4 + - neighborDevice: spine3 + neighborPort: Ethernet5 + port: Ethernet5 + - neighborDevice: spine4 + neighborPort: Ethernet5 + port: Ethernet6 + - neighborDevice: host3 + neighborPort: Ethernet1 + port: Ethernet7 + - neighborDevice: host7 + neighborPort: Ethernet1 + port: Ethernet8 + - neighborDevice: host4 + neighborPort: Ethernet1 + port: Ethernet9 + - neighborDevice: host8 + neighborPort: Ethernet1 + port: Ethernet10 + - leaf4: + ip_addr: 192.168.0.24 + sys_mac: 00:1c:73:c4:c6:01 + neighbors: + - neighborDevice: leaf3 + neighborPort: Ethernet1 + port: Ethernet1 + - neighborDevice: leaf3 + neighborPort: Ethernet2 + port: Ethernet2 + - neighborDevice: spine1 + neighborPort: Ethernet6 + port: Ethernet3 + - neighborDevice: spine2 + neighborPort: Ethernet6 + port: Ethernet4 + - neighborDevice: spine3 + neighborPort: Ethernet6 + port: Ethernet5 + - neighborDevice: spine4 + neighborPort: Ethernet6 + port: Ethernet6 + - neighborDevice: host3 + neighborPort: Ethernet2 + port: Ethernet7 + - neighborDevice: host7 + neighborPort: Ethernet2 + port: Ethernet8 + - neighborDevice: host4 + neighborPort: Ethernet2 + port: Ethernet9 + - neighborDevice: host8 + neighborPort: Ethernet2 + port: Ethernet10 + - borderleaf1: + ip_addr: 192.168.0.25 + sys_mac: 00:1c:73:c5:c6:01 + neighbors: + - neighborDevice: borderleaf2 + neighborPort: Ethernet1 + port: Ethernet1 + - neighborDevice: borderleaf2 + neighborPort: Ethernet2 + port: Ethernet2 + - neighborDevice: spine1 + neighborPort: Ethernet7 + port: Ethernet3 + - neighborDevice: spine2 + neighborPort: Ethernet7 + port: Ethernet4 + - neighborDevice: spine3 + neighborPort: Ethernet7 + port: Ethernet5 + - neighborDevice: spine4 + neighborPort: Ethernet7 + port: Ethernet6 + - neighborDevice: CiscoL1 + neighborPort: Ethernet4 + port: Ethernet8 + - neighborDevice: CiscoS1 + neighborPort: Ethernet3 + port: Ethernet7 + + + - borderleaf2: + ip_addr: 192.168.0.26 + sys_mac: 00:1c:73:c6:c6:01 + neighbors: + - neighborDevice: borderleaf1 + neighborPort: Ethernet1 + port: Ethernet1 + - neighborDevice: borderleaf1 + neighborPort: Ethernet2 + port: Ethernet2 + - neighborDevice: spine1 + neighborPort: Ethernet8 + port: Ethernet3 + - neighborDevice: spine2 + neighborPort: Ethernet8 + port: Ethernet4 + - neighborDevice: spine3 + neighborPort: Ethernet8 + port: Ethernet5 + - neighborDevice: spine4 + neighborPort: Ethernet8 + port: Ethernet6 + - neighborDevice: CiscoL2 + neighborPort: Ethernet4 + port: Ethernet8 + - neighborDevice: CiscoS1 + neighborPort: Ethernet4 + port: Ethernet7 + - host1: + ip_addr: 192.168.0.51 + sys_mac: 00:1c:73:f1:c6:01 + neighbors: + - neighborDevice: leaf1 + neighborPort: Ethernet7 + port: Ethernet1 + - neighborDevice: leaf2 + neighborPort: Ethernet7 + port: Ethernet2 + - host2: + ip_addr: 192.168.0.52 + sys_mac: 00:1c:73:f2:c6:01 + neighbors: + - neighborDevice: leaf1 + neighborPort: Ethernet9 + port: Ethernet1 + - neighborDevice: leaf2 + neighborPort: Ethernet9 + port: Ethernet2 + - host3: + ip_addr: 192.168.0.53 + sys_mac: 00:1c:73:f3:c6:01 + neighbors: + - neighborDevice: leaf3 + neighborPort: Ethernet7 + port: Ethernet1 + - neighborDevice: leaf4 + neighborPort: Ethernet7 + port: Ethernet2 + - host4: + ip_addr: 192.168.0.54 + sys_mac: 00:1c:73:f4:c6:01 + neighbors: + - neighborDevice: leaf3 + neighborPort: Ethernet9 + port: Ethernet1 + - neighborDevice: leaf4 + neighborPort: Ethernet9 + port: Ethernet2 + - host9: + ip_addr: 192.168.0.55 + sys_mac: 00:1c:73:f5:c6:01 + neighbors: + - neighborDevice: CiscoL1 + neighborPort: Ethernet5 + port: Ethernet1 + - neighborDevice: CiscoL2 + neighborPort: Ethernet5 + port: Ethernet2 + - neighborDevice: CiscoL1 + neighborPort: Ethernet6 + port: Ethernet3 + - neighborDevice: CiscoL2 + neighborPort: Ethernet6 + port: Ethernet4 + - host10: + ip_addr: 192.168.0.56 + sys_mac: 00:1c:73:f6:c6:01 + neighbors: + - neighborDevice: CiscoL1 + neighborPort: Ethernet7 + port: Ethernet1 + - neighborDevice: CiscoL2 + neighborPort: Ethernet7 + port: Ethernet2 + - neighborDevice: CiscoL1 + neighborPort: Ethernet8 + port: Ethernet3 + - neighborDevice: CiscoL2 + neighborPort: Ethernet8 + port: Ethernet4 + +servers: + - host5: + image_name: "gcr.io/atd-testdrivetraining-dev/hosts-gui/host1:latest" + ip_addr: 192.168.0.101 + port : 6001 + neighbors: + - neighborDevice: leaf1 + neighborPort: Ethernet8 + port: Ethernet1 + - neighborDevice: leaf2 + neighborPort: Ethernet8 + port: Ethernet2 + - host6: + image_name: "gcr.io/atd-testdrivetraining-dev/hosts-gui/host1:latest" + ip_addr: 192.168.0.102 + port : 6002 + neighbors: + - neighborDevice: leaf1 + neighborPort: Ethernet10 + port: Ethernet1 + - neighborDevice: leaf2 + neighborPort: Ethernet10 + port: Ethernet2 + - host7: + image_name: "gcr.io/atd-testdrivetraining-dev/hosts-gui/host1:latest" + ip_addr: 192.168.0.103 + port : 6003 + neighbors: + - neighborDevice: leaf3 + neighborPort: Ethernet8 + port: Ethernet1 + - neighborDevice: leaf4 + neighborPort: Ethernet8 + port: Ethernet2 + - host8: + image_name: "gcr.io/atd-testdrivetraining-dev/hosts-gui/host1:latest" + ip_addr: 192.168.0.104 + port : 6004 + neighbors: + - neighborDevice: leaf3 + neighborPort: Ethernet10 + port: Ethernet1 + - neighborDevice: leaf4 + neighborPort: Ethernet10 + port: Ethernet2 +additional_ssh_nodes: +additional_clab_nodes: + - CiscoS1: + kind : vr-n9kv + image_name: "gcr.io/atd-testdrivetraining-dev/vr-n9kv:9.3.3" + port : 22 + ip_addr: 192.168.0.111 + sys_mac: 00:1c:73:d3:c6:01 + neighbors: + - neighborDevice: CiscoL1 + neighborPort: Ethernet3 + port: Ethernet1 + - neighborDevice: CiscoL2 + neighborPort: Ethernet3 + port: Ethernet2 + - neighborDevice: borderleaf1 + neighborPort: Ethernet7 + port: Ethernet3 + - neighborDevice: borderleaf2 + neighborPort: Ethernet7 + port: Ethernet4 + - CiscoL1: + kind : vr-n9kv + image_name: "gcr.io/atd-testdrivetraining-dev/vr-n9kv:9.3.3" + ip_addr: 192.168.0.121 + port : 22 + sys_mac: 00:1c:73:a1:c6:01 + neighbors: + - neighborDevice: CiscoL2 + neighborPort: Ethernet1 + port: Ethernet1 + - neighborDevice: CiscoL2 + neighborPort: Ethernet2 + port: Ethernet2 + - neighborDevice: CiscoS1 + neighborPort: Ethernet1 + port: Ethernet3 + - neighborDevice: borderleaf1 + neighborPort: Ethernet8 + port: Ethernet4 + - neighborDevice: host9 + neighborPort: Ethernet1 + port: Ethernet5 + - neighborDevice: host9 + neighborPort: Ethernet3 + port: Ethernet6 + - neighborDevice: host10 + neighborPort: Ethernet1 + port: Ethernet7 + - neighborDevice: host10 + neighborPort: Ethernet3 + port: Ethernet8 + - CiscoL2: + kind : vr-n9kv + image_name: "gcr.io/atd-testdrivetraining-dev/vr-n9kv:9.3.3" + ip_addr: 192.168.0.122 + port : 22 + sys_mac: 00:1c:73:a2:c6:01 + neighbors: + - neighborDevice: CiscoL1 + neighborPort: Ethernet1 + port: Ethernet1 + - neighborDevice: CiscoL1 + neighborPort: Ethernet2 + port: Ethernet2 + - neighborDevice: CiscoS1 + neighborPort: Ethernet2 + port: Ethernet3 + - neighborDevice: borderleaf2 + neighborPort: Ethernet8 + port: Ethernet4 + - neighborDevice: host9 + neighborPort: Ethernet2 + port: Ethernet5 + - neighborDevice: host9 + neighborPort: Ethernet4 + port: Ethernet6 + - neighborDevice: host10 + neighborPort: Ethernet2 + port: Ethernet7 + - neighborDevice: host10 + neighborPort: Ethernet4 + port: Ethernet8 + + diff --git a/topologies/training-level-1-3-container-labs-dual-topo/atd-topo-bkp-2.png b/topologies/training-level-1-3-container-labs-dual-topo/atd-topo-bkp-2.png new file mode 100644 index 000000000..ce621aec8 Binary files /dev/null and b/topologies/training-level-1-3-container-labs-dual-topo/atd-topo-bkp-2.png differ diff --git a/topologies/training-level-1-3-container-labs-dual-topo/atd-topo-bkp.png b/topologies/training-level-1-3-container-labs-dual-topo/atd-topo-bkp.png new file mode 100644 index 000000000..4cc023b85 Binary files /dev/null and b/topologies/training-level-1-3-container-labs-dual-topo/atd-topo-bkp.png differ diff --git a/topologies/training-level-1-3-container-labs-dual-topo/atd-topo.png b/topologies/training-level-1-3-container-labs-dual-topo/atd-topo.png new file mode 100644 index 000000000..53ba5d7d9 Binary files /dev/null and b/topologies/training-level-1-3-container-labs-dual-topo/atd-topo.png differ diff --git a/topologies/training-level-1-3-container-labs-dual-topo/configlets/ATD-INFRA b/topologies/training-level-1-3-container-labs-dual-topo/configlets/ATD-INFRA new file mode 100644 index 000000000..de87bc743 --- /dev/null +++ b/topologies/training-level-1-3-container-labs-dual-topo/configlets/ATD-INFRA @@ -0,0 +1,53 @@ +vrf instance MGMT +! +daemon TerminAttr + exec /usr/bin/TerminAttr -cvcompression=gzip -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent -cvaddr=192.168.0.5:9910 -cvauth=token,/tmp/token -cvvrf=MGMT -taillogs -disableaaa + no shutdown +! +alias mlag-reload bash /mnt/flash/shut_intfs && sudo shutdown now -r +alias conint sh interface | i connected +alias senz show interface counter error | nz +alias shmc show int | awk '/^[A-Z]/ { intf = $1 } /, address is/ { print intf, $6 }' +alias snz show interface counter | nz +alias spd show port-channel %1 detail all +alias sqnz show interface counter queue | nz +alias srnz show interface counter rate | nz +alias intdesc + !! Usage: intdesc interface-name description + 10 config + 20 int %1 + 30 desc %2 + 40 exit +! +dns domain arista.lab +! +service routing protocols model multi-agent +! +ntp server vrf MGMT 192.168.0.1 iburst source Management0 +! +radius-server host 192.168.0.1 vrf MGMT key 7 0207165218120E +! +aaa group server radius atds + server 192.168.0.1 vrf MGMT +! +aaa authentication login default group atds local +aaa authorization exec default group atds local +aaa authorization commands all default local +! +username Script secret sha512 $6$PNfpb9anSBQ5/aia$phaa3ar5pwkntenD9WHc6Ed5b96lbW0dc0bjtwPnFLaDiCK8D5Cjl6ewP/xdNbl4PtS6Paq.3SssN8pj05NQm. +username admin privilege 15 role network-admin secret 5 $1$5O85YVVn$HrXcfOivJEnISTMb6xrJc. +username arista privilege 15 role network-admin secret 5 $1$4VjIjfd1$XkUVulbNDESHFzcxDU.Tk1 +! +username arista ssh-key ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC+ERvV4GaPq3FzxY8T+5hMF/1T+l8wiPsVCtOrZU4Hy6NCNlAiDBdA/RUtX5/aOu5JvHyPTVHqWJ0qi9BqU3rxCNl/l2/5UZbm9RPzdZ1QCwoYwPB9/j/tYJV8lZdr6t0yGBfxgzD3oW/zF7a+ZtASaMAu7lkgoqPK2pVIGa+Y9ZCsA0Xq756XpLCw+d3pHKHvIkgWLCo9FoeIv8f/bu5u/ztzRE+Nvl+o5add6MxnjsXz3s7BnW2FX6JNjyp0Z+OXjupQc2gcfFvpd/dA2lCNuuaCHkRgyPwIZtWPmNqMRXPp37mlPwV43qDJRVPQkvh0xPxwS35BbzUxWdT+ZLZv +! +ip radius source-interface Management0 +! +ip routing vrf MGMT +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 +! +management api http-commands + no shutdown + vrf MGMT + no shutdown +! diff --git a/topologies/training-level-1-3-container-labs-dual-topo/configlets/Base-Builder.py b/topologies/training-level-1-3-container-labs-dual-topo/configlets/Base-Builder.py new file mode 100644 index 000000000..167d9c750 --- /dev/null +++ b/topologies/training-level-1-3-container-labs-dual-topo/configlets/Base-Builder.py @@ -0,0 +1,86 @@ +from cvplibrary import CVPGlobalVariables, GlobalVariableNames, Form + + + +# Get this devices Serial + + +serial = CVPGlobalVariables.getValue( GlobalVariableNames.CVP_SERIAL ) +mask = '24' +ServiceRouting = True + +#Create the IP address from the serial number + + +if serial == '4A7F6E96300132903A73A74CCF18B697': + IPaddress = '192.168.0.21' + hostname = 'leaf1' + + +elif serial == '3831DEFC364900BF9EEFC45FEE7794E7': + IPaddress = '192.168.0.22' + hostname = 'leaf2' + + +elif serial == 'ED469CFA13C4017B2D19BF7EBCAD50B1': + IPaddress = '192.168.0.23' + hostname = 'leaf3' + + +elif serial == '434653268ABA082A2FF6B52F1367CE80': + IPaddress = '192.168.0.24' + hostname = 'leaf4' + +elif serial == '8085B9640BC6D8FDC1FD23D242EBF433': + IPaddress = '192.168.0.11' + hostname = 'spine1' + +elif serial == 'D28D62E5729AB8BF44A0BC017DEB188A': + IPaddress = '192.168.0.12' + hostname = 'spine2' + +elif serial == 'F77703A62ADE220E689A41057AA56288': + IPaddress = '192.168.0.13' + hostname = 'spine3' + +elif serial == 'D763323F00C03738A8C824D2F1DA05E8': + IPaddress = '192.168.0.25' + hostname = 'borderleaf1' + +elif serial == '7C16136B7483F2E2FB002E8E0646F1F0': + IPaddress = '192.168.0.26' + hostname = 'borderleaf2' + +elif serial == '86342B780ED73BCB30E1DFE48E26AC38': + IPaddress = '192.168.0.51' + ServiceRouting = False + hostname = 'host1' + + +elif serial == 'CE0B31805130945E3CE40B060E9E636D': + IPaddress = '192.168.0.52' + ServiceRouting = False + hostname = 'host2' + + +# Generate and print config - Ignore the service routing command if not needed +print 'hostname %s' % hostname +print '!' +print 'interface Management 1' +print ' ip address %s/%s' % ( IPaddress, mask ) +print ' no lldp transmit' +print ' no lldp receive' +print '!' +if ServiceRouting: + print 'service routing protocols model multi-agent' + print '!' +print 'dns domain arista.lab' +print '!' +print 'ip route 0.0.0.0/0 192.168.0.1' +print '!' +print 'ip routing' +print '!' +print 'management api http-commands' +print ' no shutdown' +print ' protocol http' +print '!' \ No newline at end of file diff --git a/topologies/training-level-1-3-container-labs-dual-topo/configlets/borderleaf1-base b/topologies/training-level-1-3-container-labs-dual-topo/configlets/borderleaf1-base new file mode 100644 index 000000000..e274c6eb4 --- /dev/null +++ b/topologies/training-level-1-3-container-labs-dual-topo/configlets/borderleaf1-base @@ -0,0 +1,14 @@ +hostname borderleaf1 +! +interface Management 0 + vrf MGMT + ip address 192.168.0.25/24 +! +service routing protocols model multi-agent +! +dns domain arista.lab +! +ip routing vrf MGMT +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 +! diff --git a/topologies/training-level-1-3-container-labs-dual-topo/configlets/borderleaf2-base b/topologies/training-level-1-3-container-labs-dual-topo/configlets/borderleaf2-base new file mode 100644 index 000000000..a7778e0b4 --- /dev/null +++ b/topologies/training-level-1-3-container-labs-dual-topo/configlets/borderleaf2-base @@ -0,0 +1,14 @@ +hostname borderleaf2 +! +interface Management 0 + vrf MGMT + ip address 192.168.0.26/24 + +! +service routing protocols model multi-agent +! +dns domain arista.lab +! +ip routing vrf MGMT +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 diff --git a/topologies/training-level-1-3-container-labs-dual-topo/configlets/host1-base b/topologies/training-level-1-3-container-labs-dual-topo/configlets/host1-base new file mode 100644 index 000000000..915d58edb --- /dev/null +++ b/topologies/training-level-1-3-container-labs-dual-topo/configlets/host1-base @@ -0,0 +1,15 @@ +hostname host1 +! +spanning-tree mode none +! +interface Management 0 + vrf MGMT + ip address 192.168.0.51/24 + + +! +dns domain arista.lab +! +ip routing vrf MGMT +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 diff --git a/topologies/training-level-1-3-container-labs-dual-topo/configlets/host2-base b/topologies/training-level-1-3-container-labs-dual-topo/configlets/host2-base new file mode 100644 index 000000000..63f0c9c38 --- /dev/null +++ b/topologies/training-level-1-3-container-labs-dual-topo/configlets/host2-base @@ -0,0 +1,15 @@ +hostname host2 +! +spanning-tree mode none +! +interface Management 0 + vrf MGMT + ip address 192.168.0.52/24 + + +! +dns domain arista.lab +! +ip routing vrf MGMT +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 diff --git a/topologies/training-level-1-3-container-labs-dual-topo/configlets/host3-base b/topologies/training-level-1-3-container-labs-dual-topo/configlets/host3-base new file mode 100644 index 000000000..979a49b28 --- /dev/null +++ b/topologies/training-level-1-3-container-labs-dual-topo/configlets/host3-base @@ -0,0 +1,15 @@ +hostname host3 +! +spanning-tree mode none +! +interface Management 0 + vrf MGMT + ip address 192.168.0.53/24 + + +! +dns domain arista.lab +! +ip routing vrf MGMT +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 diff --git a/topologies/training-level-1-3-container-labs-dual-topo/configlets/host4-base b/topologies/training-level-1-3-container-labs-dual-topo/configlets/host4-base new file mode 100644 index 000000000..f85e77a77 --- /dev/null +++ b/topologies/training-level-1-3-container-labs-dual-topo/configlets/host4-base @@ -0,0 +1,15 @@ +hostname host4 +! +spanning-tree mode none +! +interface Management 0 + vrf MGMT + ip address 192.168.0.54/24 + +! +dns domain arista.lab +! +ip routing vrf MGMT +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 + diff --git a/topologies/training-level-1-3-container-labs-dual-topo/configlets/leaf1-base b/topologies/training-level-1-3-container-labs-dual-topo/configlets/leaf1-base new file mode 100644 index 000000000..7b316b33b --- /dev/null +++ b/topologies/training-level-1-3-container-labs-dual-topo/configlets/leaf1-base @@ -0,0 +1,13 @@ +hostname leaf1 +! +interface Management 0 + vrf MGMT + ip address 192.168.0.21/24 + +service routing protocols model multi-agent +! +dns domain arista.lab +! +ip routing vrf MGMT +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 diff --git a/topologies/training-level-1-3-container-labs-dual-topo/configlets/leaf2-base b/topologies/training-level-1-3-container-labs-dual-topo/configlets/leaf2-base new file mode 100644 index 000000000..22fffb444 --- /dev/null +++ b/topologies/training-level-1-3-container-labs-dual-topo/configlets/leaf2-base @@ -0,0 +1,15 @@ +hostname leaf2 +! +interface Management 0 + vrf MGMT + ip address 192.168.0.22/24 + + +! +service routing protocols model multi-agent +! +dns domain arista.lab +! +ip routing vrf MGMT +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 diff --git a/topologies/training-level-1-3-container-labs-dual-topo/configlets/leaf3-base b/topologies/training-level-1-3-container-labs-dual-topo/configlets/leaf3-base new file mode 100644 index 000000000..37e7bc8d3 --- /dev/null +++ b/topologies/training-level-1-3-container-labs-dual-topo/configlets/leaf3-base @@ -0,0 +1,13 @@ +hostname leaf3 +! +interface Management 0 + vrf MGMT + ip address 192.168.0.23/24 + +service routing protocols model multi-agent +! +dns domain arista.lab +! +ip routing vrf MGMT +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 diff --git a/topologies/training-level-1-3-container-labs-dual-topo/configlets/leaf4-base b/topologies/training-level-1-3-container-labs-dual-topo/configlets/leaf4-base new file mode 100644 index 000000000..f0cff7b25 --- /dev/null +++ b/topologies/training-level-1-3-container-labs-dual-topo/configlets/leaf4-base @@ -0,0 +1,13 @@ +hostname leaf4 +! +interface Management 0 + vrf MGMT + ip address 192.168.0.24/24 + +service routing protocols model multi-agent +! +dns domain arista.lab +! +ip routing vrf MGMT +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 diff --git a/topologies/training-level-1-3-container-labs-dual-topo/configlets/spine1-base b/topologies/training-level-1-3-container-labs-dual-topo/configlets/spine1-base new file mode 100644 index 000000000..5e9d072b1 --- /dev/null +++ b/topologies/training-level-1-3-container-labs-dual-topo/configlets/spine1-base @@ -0,0 +1,14 @@ +hostname spine1 +! +interface Management 0 + vrf MGMT + ip address 192.168.0.11/24 + +! +service routing protocols model multi-agent +! +dns domain arista.lab +! +ip routing vrf MGMT +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 diff --git a/topologies/training-level-1-3-container-labs-dual-topo/configlets/spine2-base b/topologies/training-level-1-3-container-labs-dual-topo/configlets/spine2-base new file mode 100644 index 000000000..cc9d0bef1 --- /dev/null +++ b/topologies/training-level-1-3-container-labs-dual-topo/configlets/spine2-base @@ -0,0 +1,13 @@ +hostname spine2 +! +interface Management 0 + vrf MGMT + ip address 192.168.0.12/24 + +service routing protocols model multi-agent +! +dns domain arista.lab +! +ip routing vrf MGMT +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 diff --git a/topologies/training-level-1-3-container-labs-dual-topo/configlets/spine3-base b/topologies/training-level-1-3-container-labs-dual-topo/configlets/spine3-base new file mode 100644 index 000000000..853f6564a --- /dev/null +++ b/topologies/training-level-1-3-container-labs-dual-topo/configlets/spine3-base @@ -0,0 +1,14 @@ +hostname spine3 +! +interface Management 0 + vrf MGMT + ip address 192.168.0.13/24 + +! +service routing protocols model multi-agent +! +dns domain arista.lab +! +ip routing vrf MGMT +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 diff --git a/topologies/training-level-1-3-container-labs-dual-topo/configlets/spine4-base b/topologies/training-level-1-3-container-labs-dual-topo/configlets/spine4-base new file mode 100644 index 000000000..240453581 --- /dev/null +++ b/topologies/training-level-1-3-container-labs-dual-topo/configlets/spine4-base @@ -0,0 +1,14 @@ +hostname spine4 +! +interface Management 0 + vrf MGMT + ip address 192.168.0.14/24 + +! +service routing protocols model multi-agent +! +dns domain arista.lab +! +ip routing vrf MGMT +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 diff --git a/topologies/training-level-1-3-container-labs-dual-topo/files/.ansible.cfg b/topologies/training-level-1-3-container-labs-dual-topo/files/.ansible.cfg new file mode 100644 index 000000000..14c806515 --- /dev/null +++ b/topologies/training-level-1-3-container-labs-dual-topo/files/.ansible.cfg @@ -0,0 +1,2 @@ +[defaults] +host_key_checking = False diff --git a/topologies/training-level-1-3-container-labs-dual-topo/files/.screenrc b/topologies/training-level-1-3-container-labs-dual-topo/files/.screenrc new file mode 100644 index 000000000..1d70f5e42 --- /dev/null +++ b/topologies/training-level-1-3-container-labs-dual-topo/files/.screenrc @@ -0,0 +1,23 @@ +# Turn off the startup message. +startup_message off +# Set the caption to the active windows. +caption always "%-Lw%{= BW}%50>%n%f* %t%{-}%+Lw%<" + +term screen-256color + +# New screens for various processes. +# Example: screen -t +# screen -t 7050SX-128 0 ssh aristaadmin@192.100.37.128 +screen 1 ssh 192.168.0.4 +screen -t CVP 2 ssh 192.168.0.5 +screen -t Spine1 3 ssh 192.168.0.11 +screen -t Spine2 4 ssh 192.168.0.12 +screen -t Spine3 5 ssh 192.168.0.13 +screen -t Leaf1 6 ssh 192.168.0.21 +screen -t Leaf2 7 ssh 192.168.0.22 +screen -t Leaf3 8 ssh 192.168.0.23 +screen -t Leaf4 9 ssh 192.168.0.24 +screen -t Borderleaf1 10 ssh 192.168.0.25 +screen -t Borderlead2 11 ssh 192.168.0.26 +screen -t Host1 15 ssh 192.168.0.51 +screen -t Host2 16 ssh 192.168.0.52 diff --git a/topologies/training-level-1-3-container-labs-dual-topo/files/MenuOptions.yaml b/topologies/training-level-1-3-container-labs-dual-topo/files/MenuOptions.yaml new file mode 100644 index 000000000..f68e2261d --- /dev/null +++ b/topologies/training-level-1-3-container-labs-dual-topo/files/MenuOptions.yaml @@ -0,0 +1,214 @@ +--- +options: + reset: + - command: "/usr/local/bin/ConfigureTopology.py && bash /home/arista/Broadcaster/pushHostDefaultConfig.sh" + description: "Reset All Devices to Base ATD (reset)" + vxlan: + - command: "/usr/local/bin/ConfigureTopology.py -t vxlan" + description: "VXLAN Lab (vxlan)" + l2evpn: + - command: "/usr/local/bin/ConfigureTopology.py -t l2evpn" + description: "L2-EVPN Lab (l2evpn)" + l3evpn: + - command: "/usr/local/bin/ConfigureTopology.py -t l3evpn" + description: "L3-EVPN Lab (l3evpn)" + aamh: + - command: "/usr/local/bin/ConfigureTopology.py -t aamh" + description: "Active-Active Multi Homing lab (aamh)" + pim: + - command: "/usr/local/bin/ConfigureTopology.py -t aamh" + description: "PIM Lab (pim)" +labconfiglets: + reset: + spine1: + - "spine1-base" + spine2: + - "spine2-base" + spine3: + - "spine3-base" + leaf1: + - "leaf1-base" + leaf2: + - "leaf2-base" + leaf3: + - "leaf3-base" + leaf4: + - "leaf4-base" + host1: + - "host1-base" + host2: + - "host2-base" + borderleaf1: + - "borderleaf1-base" + borderleaf2: + - "borderleaf2-base" + vxlan: + spine1: + - "spine1-base" + - "Spine-1-VXALN-Begin" + spine2: + - "spine2-base" + - "Spine-2-VXALN-Begin" + spine3: + - "spine3-base" + - "Spine-3-VXALN-Begin" + leaf1: + - "leaf1-base" + - "Leaf-1-VXALN-Begin" + leaf2: + - "leaf2-base" + - "Leaf-2-VXALN-Begin" + leaf3: + - "leaf3-base" + - "leaf-3-VXALN-Begin" + leaf4: + - "leaf4-base" + - "leaf-4-VXALN-Begin" + host1: + - "host1-base" + - "Host-1-VXALN-Begin" + host2: + - "host2-base" + - "Host-2-VXALN-Begin" + borderleaf1: + - "borderleaf1-base" + - "Borderleaf-1-VXALN-Begin" + borderleaf2: + - "borderleaf2-base" + - "Borderleaf-2-VXALN-Begin" + l2evpn: + spine1: + - "spine1-base" + - "Spine-1-L2EVPN-Begin" + spine2: + - "spine2-base" + - "Spine-2-L2EVPN-Begin" + spine3: + - "spine3-base" + - "Spine-3-L2EVPN-Begin" + leaf1: + - "leaf1-base" + - "Leaf-1-L2EVPN-Begin" + leaf2: + - "leaf2-base" + - "Leaf-2-L2EVPN-Begin" + leaf3: + - "leaf3-base" + - "Leaf-3-L2EVPN-Begin" + leaf4: + - "leaf4-base" + - "Leaf-4-L2EVPN-Begin" + host1: + - "host1-base" + - "Host-1-L2EVPN-Begin" + host2: + - "host2-base" + - "Host-2-L2EVPN-Begin" + borderleaf1: + - "borderleaf1-base" + - "Borderleaf-1-L2EVPN-Begin" + borderleaf2: + - "borderleaf2-base" + - "Borderleaf-2-L2EVPN-Begin" + l3evpn: + spine1: + - "spine1-base" + - "Spine-1-L3EVPN-Begin" + spine2: + - "spine2-base" + - "Spine-2-L3EVPN-Begin" + spine3: + - "spine3-base" + - "Spine-3-L3EVPN-Begin" + leaf1: + - "leaf1-base" + - "Leaf-1-L3EVPN-Begin" + leaf2: + - "leaf2-base" + - "Leaf-2-L3EVPN-Begin" + leaf3: + - "leaf3-base" + - "Leaf-3-L3EVPN-Begin" + leaf4: + - "leaf4-base" + - "Leaf-4-L3EVPN-Begin" + host1: + - "host1-base" + - "Host-1-L3EVPN-Begin" + host2: + - "host2-base" + - "Host-2-L3EVPN-Begin" + borderleaf1: + - "borderleaf1-base" + - "Borderleaf-1-L3EVPN-Begin" + borderleaf2: + - "borderleaf2-base" + - "Borderleaf-2-L3EVPN-Begin" + aamh: + spine1: + - "spine1-base" + - "Spine-1-AAMH-Begin" + spine2: + - "spine2-base" + - "Spine-2-AAMH-Begin" + spine3: + - "spine3-base" + - "Spine-3-AAMH-Begin" + leaf1: + - "leaf1-base" + - "Leaf-1-AAMH-Begin" + leaf2: + - "leaf2-base" + - "Leaf-2-AAMH-Begin" + leaf3: + - "leaf3-base" + - "Leaf-3-AAMH-Begin" + leaf4: + - "leaf4-base" + - "Leaf-4-AAMH-Begin" + host1: + - "host1-base" + - "Host-1-AAMH-Begin" + host2: + - "host2-base" + - "Host-2-AAMH-Begin" + borderleaf1: + - "borderleaf1-base" + - "Borderleaf-1-AAMH-Begin" + borderleaf2: + - "borderleaf2-base" + - "Borderleaf-2-AAMH-Begin" + pim: + spine1: + - "spine1-base" + - "Spine-1-PIM-Begin" + spine2: + - "spine2-base" + - "Spine-2-PIM-Begin" + spine3: + - "spine3-base" + - "Spine-3-PIM-Begin" + leaf1: + - "leaf1-base" + - "Leaf-1-PIM-Begin" + leaf2: + - "leaf2-base" + - "Leaf-2-PIM-Begin" + leaf3: + - "leaf3-base" + - "Leaf-3-PIM-Begin" + leaf4: + - "leaf4-base" + - "Leaf-4-PIM-Begin" + host1: + - "host1-base" + - "Host-1-PIM-Begin" + host2: + - "host2-base" + - "Host-2-PIM-Begin" + borderleaf1: + - "borderleaf1-base" + - "Borderleaf-1-PIM-Begin" + borderleaf2: + - "borderleaf2-base" + - "Borderleaf-2-PIM-Begin" \ No newline at end of file diff --git a/topologies/training-level-1-3-container-labs-dual-topo/files/apps/coder/coder.yaml b/topologies/training-level-1-3-container-labs-dual-topo/files/apps/coder/coder.yaml new file mode 100644 index 000000000..80cc852d1 --- /dev/null +++ b/topologies/training-level-1-3-container-labs-dual-topo/files/apps/coder/coder.yaml @@ -0,0 +1,4 @@ +bind-addr: 127.0.0.1:8080 +auth: password +password: {ARISTA_REPLACE} +cert: false \ No newline at end of file diff --git a/topologies/training-level-1-3-container-labs-dual-topo/files/apps/coder/labfiles/.placeholder b/topologies/training-level-1-3-container-labs-dual-topo/files/apps/coder/labfiles/.placeholder new file mode 100644 index 000000000..e69de29bb diff --git a/topologies/training-level-1-3-container-labs-dual-topo/files/apps/gui/host5/arista/host-startup.sh b/topologies/training-level-1-3-container-labs-dual-topo/files/apps/gui/host5/arista/host-startup.sh new file mode 100644 index 000000000..16eafb783 --- /dev/null +++ b/topologies/training-level-1-3-container-labs-dual-topo/files/apps/gui/host5/arista/host-startup.sh @@ -0,0 +1,17 @@ +sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 4EB27DB2A3B88B8B +sudo apt-get update +sudo apt install openssh-server -y +sudo service ssh start +sudo apt-get install ufw -y +sudo ufw enable +sudo ufw allow 22 +sudo ufw disable +useradd -rm -d /home/arista -s /bin/bash -g root -G sudo -u 1000 arista +echo 'arista:arista123' | chpasswd +service ssh start +sudo apt install ifenslave -y +sudo apt install iputils-ping -y +sudo add-apt-repository ppa:wireshark-dev/stable -y +sudo apt-get install filezilla -y +sudo apt-get install vsftpd -y +sudo service vsftpd restart \ No newline at end of file diff --git a/topologies/training-level-1-3-container-labs-dual-topo/files/apps/gui/host6/arista/host-startup.sh b/topologies/training-level-1-3-container-labs-dual-topo/files/apps/gui/host6/arista/host-startup.sh new file mode 100644 index 000000000..16eafb783 --- /dev/null +++ b/topologies/training-level-1-3-container-labs-dual-topo/files/apps/gui/host6/arista/host-startup.sh @@ -0,0 +1,17 @@ +sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 4EB27DB2A3B88B8B +sudo apt-get update +sudo apt install openssh-server -y +sudo service ssh start +sudo apt-get install ufw -y +sudo ufw enable +sudo ufw allow 22 +sudo ufw disable +useradd -rm -d /home/arista -s /bin/bash -g root -G sudo -u 1000 arista +echo 'arista:arista123' | chpasswd +service ssh start +sudo apt install ifenslave -y +sudo apt install iputils-ping -y +sudo add-apt-repository ppa:wireshark-dev/stable -y +sudo apt-get install filezilla -y +sudo apt-get install vsftpd -y +sudo service vsftpd restart \ No newline at end of file diff --git a/topologies/training-level-1-3-container-labs-dual-topo/files/apps/gui/host7/arista/host-startup.sh b/topologies/training-level-1-3-container-labs-dual-topo/files/apps/gui/host7/arista/host-startup.sh new file mode 100644 index 000000000..16eafb783 --- /dev/null +++ b/topologies/training-level-1-3-container-labs-dual-topo/files/apps/gui/host7/arista/host-startup.sh @@ -0,0 +1,17 @@ +sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 4EB27DB2A3B88B8B +sudo apt-get update +sudo apt install openssh-server -y +sudo service ssh start +sudo apt-get install ufw -y +sudo ufw enable +sudo ufw allow 22 +sudo ufw disable +useradd -rm -d /home/arista -s /bin/bash -g root -G sudo -u 1000 arista +echo 'arista:arista123' | chpasswd +service ssh start +sudo apt install ifenslave -y +sudo apt install iputils-ping -y +sudo add-apt-repository ppa:wireshark-dev/stable -y +sudo apt-get install filezilla -y +sudo apt-get install vsftpd -y +sudo service vsftpd restart \ No newline at end of file diff --git a/topologies/training-level-1-3-container-labs-dual-topo/files/apps/gui/host8/arista/host-startup.sh b/topologies/training-level-1-3-container-labs-dual-topo/files/apps/gui/host8/arista/host-startup.sh new file mode 100644 index 000000000..16eafb783 --- /dev/null +++ b/topologies/training-level-1-3-container-labs-dual-topo/files/apps/gui/host8/arista/host-startup.sh @@ -0,0 +1,17 @@ +sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 4EB27DB2A3B88B8B +sudo apt-get update +sudo apt install openssh-server -y +sudo service ssh start +sudo apt-get install ufw -y +sudo ufw enable +sudo ufw allow 22 +sudo ufw disable +useradd -rm -d /home/arista -s /bin/bash -g root -G sudo -u 1000 arista +echo 'arista:arista123' | chpasswd +service ssh start +sudo apt install ifenslave -y +sudo apt install iputils-ping -y +sudo add-apt-repository ppa:wireshark-dev/stable -y +sudo apt-get install filezilla -y +sudo apt-get install vsftpd -y +sudo service vsftpd restart \ No newline at end of file diff --git a/topologies/training-level-1-3-container-labs-dual-topo/files/apps/ssh/web.json b/topologies/training-level-1-3-container-labs-dual-topo/files/apps/ssh/web.json new file mode 100644 index 000000000..13fac47dd --- /dev/null +++ b/topologies/training-level-1-3-container-labs-dual-topo/files/apps/ssh/web.json @@ -0,0 +1,76 @@ +{ + "listen": { + "ip": "0.0.0.0", + "port": 2222 + }, + "user": { + "name": null, + "password": null, + "privatekey": null + }, + "ssh": { + "host": null, + "port": 22, + "localAddress": null, + "localPort": null, + "term": "xterm-color", + "readyTimeout": 20000, + "keepaliveInterval": 120000, + "keepaliveCountMax": 10, + "allowedSubnets": [ "192.168.0.0/16", "10.0.0.0/8", "172.16.0.0/12" ] + }, + "terminal": { + "cursorBlink": true, + "scrollback": 10000, + "tabStopWidth": 8, + "bellStyle": "sound" + }, + "header": { + "text": null, + "background": "green" + }, + "session": { + "name": "WebSSH2", + "secret": "mysecret" + }, + "options": { + "challengeButton": true, + "allowreauth": true + }, + "algorithms": { + "kex": [ + "ecdh-sha2-nistp256", + "ecdh-sha2-nistp384", + "ecdh-sha2-nistp521", + "diffie-hellman-group-exchange-sha256", + "diffie-hellman-group14-sha1" + ], + "cipher": [ + "aes128-ctr", + "aes192-ctr", + "aes256-ctr", + "aes128-gcm", + "aes128-gcm@openssh.com", + "aes256-gcm", + "aes256-gcm@openssh.com", + "aes256-cbc" + ], + "hmac": [ + "hmac-sha2-256", + "hmac-sha2-512", + "hmac-sha1" + ], + "compress": [ + "none", + "zlib@openssh.com", + "zlib" + ] + }, + "serverlog": { + "client": false, + "server": false + }, + "accesslog": false, + "verify": false, + "safeShutdownDuration": 300 + } \ No newline at end of file diff --git a/topologies/training-level-1-3-container-labs-dual-topo/files/apps/uilanding/modules.yaml b/topologies/training-level-1-3-container-labs-dual-topo/files/apps/uilanding/modules.yaml new file mode 100644 index 000000000..c983faac0 --- /dev/null +++ b/topologies/training-level-1-3-container-labs-dual-topo/files/apps/uilanding/modules.yaml @@ -0,0 +1,62 @@ +topology: + image: "atd-topo.png" + nodes: + Spine1: + coords: "22,218,167,296" + ip: "192.168.0.11" + Spine2: + coords: "356,215,517,300" + ip: "192.168.0.12" + Spine3: + coords: "555,214,724,294" + ip: "192.168.0.13" + Spine4: + coords: "925,218,1077,293" + ip: "192.168.0.14" + Leaf1: + coords: "16,424,165,501" + ip: "192.168.0.21" + Leaf2: + coords: "353,425,520,493" + ip: "192.168.0.22" + Leaf3: + coords: "569,430,714,499" + ip: "192.168.0.23" + Leaf4: + coords: "921,423,1074,502" + ip: "192.168.0.24" + BorderLeaf1: + coords: "370,57,511,138" + ip: "192.168.0.25" + BorderLeaf2: + coords: "561,65,726,145" + ip: "192.168.0.26" + Host1: + coords: "15,534,149,611" + ip: "192.168.0.51" + Host2: + coords: "365,539,504,619" + ip: "192.168.0.52" + Host3: + coords: "566,542,711,620" + ip: "192.168.0.53" + Host4: + coords: "929,542,1075,615" + ip: "192.168.0.54" + servers: + Host5: + coords: "182,545,307,636" + ip: "192.168.0.101" + port : 6001 + Host6: + coords: "183,650,312,744" + ip: "192.168.0.102" + port : 6002 + Host7: + coords: "747,545,875,636" + ip: "192.168.0.103" + port : 6003 + Host8: + coords: "752,645,877,731" + ip: "192.168.0.104" + port : 6004 diff --git a/topologies/training-level-1-3-container-labs-dual-topo/files/apps/webui/.vncpass_clear b/topologies/training-level-1-3-container-labs-dual-topo/files/apps/webui/.vncpass_clear new file mode 100644 index 000000000..cd09dd7a5 --- /dev/null +++ b/topologies/training-level-1-3-container-labs-dual-topo/files/apps/webui/.vncpass_clear @@ -0,0 +1 @@ +@rista1 \ No newline at end of file diff --git a/topologies/training-level-1-3-container-labs-dual-topo/files/cvp/cvp_info.yaml b/topologies/training-level-1-3-container-labs-dual-topo/files/cvp/cvp_info.yaml new file mode 100644 index 000000000..7e796e77f --- /dev/null +++ b/topologies/training-level-1-3-container-labs-dual-topo/files/cvp/cvp_info.yaml @@ -0,0 +1,64 @@ +cvp_info: + containers: + Tenant: + nodes: + Leaf: + parent: Tenant + nodes: + - leaf1 + - leaf2 + - leaf3 + - leaf4 + Borderleaf: + parent: Tenant + nodes: + - borderleaf1 + - borderleaf2 + Spine: + parent: Tenant + nodes: + - spine1 + - spine2 + - spine3 + - spine4 + Hosts: + parent: Tenant + nodes: + - host1 + - host2 + - host3 + - host4 + snapshots: + configlets: + containers: + Tenant: + - ATD-INFRA + netelements: + spine1: + - spine1-base + spine2: + - spine2-base + spine3: + - spine3-base + spine4: + - spine4-base + leaf1: + - leaf1-base + leaf2: + - leaf2-base + borderleaf1: + - borderleaf1-base + borderleaf2: + - borderleaf2-base + leaf3: + - leaf3-base + leaf4: + - leaf4-base + host3: + - host3-base + host4: + - host4-base + host1: + - host1-base + host2: + - host2-base \ No newline at end of file diff --git a/topologies/training-level-1-3-container-labs-dual-topo/files/hosts b/topologies/training-level-1-3-container-labs-dual-topo/files/hosts new file mode 100644 index 000000000..b01ba8483 --- /dev/null +++ b/topologies/training-level-1-3-container-labs-dual-topo/files/hosts @@ -0,0 +1,24 @@ +127.0.0.1 localhost +192.168.0.11 spine1 +192.168.0.12 spine2 +192.168.0.13 spine3 +192.168.0.14 spine4 +192.168.0.21 leaf1 +192.168.0.22 leaf2 +192.168.0.23 leaf3 +192.168.0.24 leaf4 +192.168.0.25 borderleaf1 +192.168.0.26 borderleaf2 +192.168.0.41 server1 +192.168.0.42 server2 +192.168.0.43 server3 +192.168.0.44 server4 +192.168.0.51 host1 +192.168.0.52 host2 +192.168.0.53 host3 +192.168.0.54 host4 +192.168.0.101 host5 +192.168.0.102 host6 +192.168.0.103 host7 +192.168.0.104 host8 +192.168.0.5 cvp diff --git a/topologies/training-level-1-3-container-labs-dual-topo/files/menus/default.yaml b/topologies/training-level-1-3-container-labs-dual-topo/files/menus/default.yaml new file mode 100644 index 000000000..7edae00fc --- /dev/null +++ b/topologies/training-level-1-3-container-labs-dual-topo/files/menus/default.yaml @@ -0,0 +1,2 @@ +--- +default_menu: training-l3.yaml \ No newline at end of file diff --git a/topologies/training-level-1-3-container-labs-dual-topo/files/menus/training-l3.yaml b/topologies/training-level-1-3-container-labs-dual-topo/files/menus/training-l3.yaml new file mode 100644 index 000000000..41133498a --- /dev/null +++ b/topologies/training-level-1-3-container-labs-dual-topo/files/menus/training-l3.yaml @@ -0,0 +1,32 @@ +--- + lab_list: + reset: + additional_commands: + - "bash /home/arista/Broadcaster/pushHostDefaultConfig.sh" + description: "Reset All Devices to Base Lab (reset)" + labconfiglets: + reset: + spine1: + - "spine1-base" + spine2: + - "spine2-base" + spine3: + - "spine3-base" + spine4: + - "spine4-base" + leaf1: + - "leaf1-base" + leaf2: + - "leaf2-base" + leaf3: + - "leaf3-base" + leaf4: + - "leaf4-base" + host1: + - "host1-base" + host2: + - "host2-base" + borderleaf1: + - "borderleaf1-base" + borderleaf2: + - "borderleaf2-base" diff --git a/topologies/training-level-1-3-container-labs-dual-topo/files/scripts/Authenticate-CVP b/topologies/training-level-1-3-container-labs-dual-topo/files/scripts/Authenticate-CVP new file mode 100644 index 000000000..144bb13eb --- /dev/null +++ b/topologies/training-level-1-3-container-labs-dual-topo/files/scripts/Authenticate-CVP @@ -0,0 +1,32 @@ +import requests +import json + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + +# Print user details + +print "User Name:%s\n "%output['username'] +print "First Name: %s\n "%output['user']['firstName'] +print "Last Name: %s\n "%output['user']['lastName'] +print "User Permissions: %s\n "%output['permissionList'] +print "Cookie Jar: %s\n "%cookies diff --git a/topologies/training-level-1-3-container-labs-dual-topo/files/scripts/Authenticate-CVP2 b/topologies/training-level-1-3-container-labs-dual-topo/files/scripts/Authenticate-CVP2 new file mode 100644 index 000000000..3f6bf9190 --- /dev/null +++ b/topologies/training-level-1-3-container-labs-dual-topo/files/scripts/Authenticate-CVP2 @@ -0,0 +1,48 @@ +import requests +import json + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + +# Print user details + +print "User Name:%s\n "%output['username'] +print "First Name: %s\n "%output['user']['firstName'] +print "Last Name: %s\n "%output['user']['lastName'] +print "User Permissions: %s\n "%output['permissionList'] +print "Cookie Jar: %s\n "%cookies + +#Create an HTTP GET request to the CVP server + +getConfigletURL = "/cvpservice/configlet/getConfiglets.do?" +getConfigletParams = {'startIndex':'0','endIndex':'0','type':'Configlet'} +response = requests.get(url+getConfigletURL,cookies=cookies, params=getConfigletParams,verify=False) +assert response.ok +outputConfiglets = response.json() + +# Print Configlet details + +for configlet in outputConfiglets['data']: + print "ConfigletName: %s"%configlet['name'] + print "ConfigletKey: %s"%configlet['key'] + print "\n" + diff --git a/topologies/training-level-1-3-container-labs-dual-topo/files/scripts/Authenticate-CVP3 b/topologies/training-level-1-3-container-labs-dual-topo/files/scripts/Authenticate-CVP3 new file mode 100644 index 000000000..2445806ea --- /dev/null +++ b/topologies/training-level-1-3-container-labs-dual-topo/files/scripts/Authenticate-CVP3 @@ -0,0 +1,95 @@ +import requests +import json + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + +# Print user details + +print "User Name:%s\n "%output['username'] +print "First Name: %s\n "%output['user']['firstName'] +print "Last Name: %s\n "%output['user']['lastName'] +print "User Permissions: %s\n "%output['permissionList'] +print "Cookie Jar: %s\n "%cookies + +#Create an HTTP GET request to the CVP server + +getConfigletURL = "/cvpservice/configlet/getConfiglets.do?" +getConfigletParams = {'startIndex':'0','endIndex':'0','type':'Configlet'} +response = requests.get(url+getConfigletURL,cookies=cookies, params=getConfigletParams,verify=False) +assert response.ok +outputConfiglets = response.json() + +# Print Configlet details + +for configlet in outputConfiglets['data']: + print "ConfigletName: %s"%configlet['name'] + print "ConfigletKey: %s"%configlet['key'] + print "\n" +# Create an HTTP GET request to the CVP server + +getConfigletHistoryURL = "/cvpservice/configlet/getConfigletHistory.do?" +getConfigletParams = {'configletId':'configlet_32_438214998013','startIndex':'0','endIndex':'0'} +response = requests.get(url+getConfigletHistoryURL,cookies=cookies, params=getConfigletParams,verify=False) +assert response.ok +outputConfigletHistory = response.json() + +# Print Configlet details + +for entry in outputConfigletHistory['configletHistory']: + print "ConfigletKey: %s"%entry['key'] + print "ConfigletOldConfig: %s"%entry['oldConfig'] + print "ConfigletNewConfig: %s"%entry['newConfig'] + print "\n" + + +# Create an HTTP GET request to the CVP server + +getConfigletDetailURL = "/cvpservice/configlet/getConfigletByName.do?" +getConfigletParams = {'name':'VLANs'} +response = requests.get(url+getConfigletDetailURL,cookies=cookies, params=getConfigletParams,verify=False) +assert response.ok +outputConfigletDetail = response.json() + +# Print Configlet details + +print "ConfigletKey: %s"%outputConfigletDetail['key'] +print "ConfigletName: %s"%outputConfigletDetail['name'] +print "ConfigletConfig: %s"%outputConfigletDetail['config'] +print "ConfigletNote: %s"%outputConfigletDetail['note'] +print "\n" + + +# Create an HTTP POST request to the CVP server + +headers = { 'Content-Type': 'application/json' } +postConfigletChangeURL = "/cvpservice/configlet/updateConfiglet.do" +changeData = json.dumps({"config": "! some configuration here", "key": "configlet_32_438214998013", "name": "VLANs"}) +response = requests.post(url+postConfigletChangeURL, cookies=cookies, data=changeData,headers=headers,verify=False) +assert response.ok +outputConfigletChange = response.json() + +# Print Configlet details + +print "ConfigletChange: %s"%outputConfigletChange['data'] +print "\n" + diff --git a/topologies/training-level-1-3-container-labs-dual-topo/files/scripts/Configlet1 b/topologies/training-level-1-3-container-labs-dual-topo/files/scripts/Configlet1 new file mode 100644 index 000000000..3f6bf9190 --- /dev/null +++ b/topologies/training-level-1-3-container-labs-dual-topo/files/scripts/Configlet1 @@ -0,0 +1,48 @@ +import requests +import json + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + +# Print user details + +print "User Name:%s\n "%output['username'] +print "First Name: %s\n "%output['user']['firstName'] +print "Last Name: %s\n "%output['user']['lastName'] +print "User Permissions: %s\n "%output['permissionList'] +print "Cookie Jar: %s\n "%cookies + +#Create an HTTP GET request to the CVP server + +getConfigletURL = "/cvpservice/configlet/getConfiglets.do?" +getConfigletParams = {'startIndex':'0','endIndex':'0','type':'Configlet'} +response = requests.get(url+getConfigletURL,cookies=cookies, params=getConfigletParams,verify=False) +assert response.ok +outputConfiglets = response.json() + +# Print Configlet details + +for configlet in outputConfiglets['data']: + print "ConfigletName: %s"%configlet['name'] + print "ConfigletKey: %s"%configlet['key'] + print "\n" + diff --git a/topologies/training-level-1-3-container-labs-dual-topo/files/scripts/ConfigletChange b/topologies/training-level-1-3-container-labs-dual-topo/files/scripts/ConfigletChange new file mode 100644 index 000000000..691ff5864 --- /dev/null +++ b/topologies/training-level-1-3-container-labs-dual-topo/files/scripts/ConfigletChange @@ -0,0 +1,40 @@ +import requests +import json + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + + +# Create an HTTP POST request to the CVP server + +headers = { 'Content-Type': 'application/json' } +postConfigletChangeURL = "/cvpservice/configlet/addNoteToConfiglet.do" +changeData = json.dumps({"note": "Configlet Changed by API", "key": "configlet_516_7018635812307"}) +response = requests.post(url+postConfigletChangeURL, cookies=cookies, data=changeData,headers=headers,verify=False) +assert response.ok +outputConfigletChange = response.json() + +# Print Configlet details + +print "ConfigletChange: %s"%outputConfigletChange['data'] +print "\n" + diff --git a/topologies/training-level-1-3-container-labs-dual-topo/files/scripts/ConfigletDetail b/topologies/training-level-1-3-container-labs-dual-topo/files/scripts/ConfigletDetail new file mode 100644 index 000000000..eb2a85937 --- /dev/null +++ b/topologies/training-level-1-3-container-labs-dual-topo/files/scripts/ConfigletDetail @@ -0,0 +1,43 @@ +import requests +import json + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + +# Create an HTTP GET request to the CVP server + +getConfigletDetailURL = "/cvpservice/configlet/getConfigletByName.do?" +getConfigletParams = {'name':'VLANs'} +response = requests.get(url+getConfigletDetailURL,cookies=cookies, params=getConfigletParams,verify=False) +assert response.ok +outputConfigletDetail = response.json() + +# Print Configlet details + +print "ConfigletKey: %s"%outputConfigletDetail['key'] +print "ConfigletName: %s"%outputConfigletDetail['name'] +print "ConfigletConfig: %s"%outputConfigletDetail['config'] +print "ConfigletNote: %s"%outputConfigletDetail['note'] +print "\n" + + + diff --git a/topologies/training-level-1-3-container-labs-dual-topo/files/scripts/ConfigletHistory b/topologies/training-level-1-3-container-labs-dual-topo/files/scripts/ConfigletHistory new file mode 100644 index 000000000..71f1ac693 --- /dev/null +++ b/topologies/training-level-1-3-container-labs-dual-topo/files/scripts/ConfigletHistory @@ -0,0 +1,41 @@ +import requests +import json + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + +# Create an HTTP GET request to the CVP server + +getConfigletHistoryURL = "/cvpservice/configlet/getConfigletHistory.do?" +getConfigletParams = {'configletId':'configlet_344_7351420097365','startIndex':'0','endIndex':'0'} +response = requests.get(url+getConfigletHistoryURL,cookies=cookies, params=getConfigletParams,verify=False) +assert response.ok +outputConfigletHistory = response.json() + +# Print Configlet details + +for entry in outputConfigletHistory['configletHistory']: + print "ConfigletKey: %s"%entry['key'] + print "ConfigletOldConfig: \n%s"%entry['oldConfig'] + print "ConfigletNewConfig: \n%s"%entry['newConfig'] + print "\n" + diff --git a/topologies/training-level-1-3-container-labs-dual-topo/files/scripts/TaskBase b/topologies/training-level-1-3-container-labs-dual-topo/files/scripts/TaskBase new file mode 100644 index 000000000..6f8deccaf --- /dev/null +++ b/topologies/training-level-1-3-container-labs-dual-topo/files/scripts/TaskBase @@ -0,0 +1,59 @@ +import requests +import json + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + + +# Create an HTTP GET request to the CVP server + +getTasksURL = "/cvpservice/task/getTasks.do?" +getTasksParams = {'startIndex':'0','endIndex':'0','queryparam':'Pending'} +response = requests.get(url+getTasksURL,cookies=cookies, params=getTasksParams,verify=False) +assert response.ok +outputPendingTasks = response.json() + + +# Print Tasks Created by Current User +taskList = [ ] +for entry in outputPendingTasks['data']: + if str(entry['createdBy']) == str(CVP_USER): + print "TaskNumber: %s"%entry['workOrderId'] + taskList.append(str(entry['workOrderId'])) +print "TaskList: %s"%taskList + + + +# Create an HTTP POST request to the CVP server + +headers = { 'Content-Type': 'application/json' } +postTaskLogURL = "/cvpservice/workflow/addWorkOrderLog.do" +taskLogData = json.dumps({"taskId": taskList[1],"message": "This is a test Change","source": "CVP REST API"}) +response = requests.post(url+postTaskLogURL, cookies=cookies, data=taskLogData,headers=headers,verify=False) +assert response.ok +outputTaskLog = response.json() + +# Print Configlet details + +print "TaskLogAmmend: %s"%outputTaskLog['data'] +print "\n" + diff --git a/topologies/training-level-1-3-container-labs-dual-topo/files/scripts/TaskCVP1 b/topologies/training-level-1-3-container-labs-dual-topo/files/scripts/TaskCVP1 new file mode 100644 index 000000000..1ebd05764 --- /dev/null +++ b/topologies/training-level-1-3-container-labs-dual-topo/files/scripts/TaskCVP1 @@ -0,0 +1,48 @@ +import requests +import json + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + +# Print user details + +print "User Name:%s\n "%output['username'] +print "First Name: %s\n "%output['user']['firstName'] +print "Last Name: %s\n "%output['user']['lastName'] + + +getTasksURL = "/cvpservice/task/getTasks.do?" +getTasksParams = {'startIndex':'0','endIndex':'0'} +response = requests.get(url+getTasksURL,cookies=cookies, params=getTasksParams,verify=False) +assert response.ok +outputPendingTasks = response.json() + + +# Print Tasks Created by Current User +taskList = [ ] +for entry in outputPendingTasks['data']: + if str(entry['createdBy']) == str(CVP_USER): + print( "TaskNumber: %s Description: %s" %(entry['workOrderId'],entry['description'])) + taskList.append(str(entry['workOrderId'])) +#print "TaskList: %s"%taskList + + diff --git a/topologies/training-level-1-3-container-labs-dual-topo/files/scripts/TaskExecute b/topologies/training-level-1-3-container-labs-dual-topo/files/scripts/TaskExecute new file mode 100644 index 000000000..3db487284 --- /dev/null +++ b/topologies/training-level-1-3-container-labs-dual-topo/files/scripts/TaskExecute @@ -0,0 +1,56 @@ +import requests +import json + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + + +# Create an HTTP GET request to the CVP server + +getTasksURL = "/cvpservice/task/getTasks.do?" +getTasksParams = {'startIndex':'0','endIndex':'0','queryparam':'Pending'} +response = requests.get(url+getTasksURL,cookies=cookies, params=getTasksParams,verify=False) +assert response.ok +outputPendingTasks = response.json() + + +# Print Tasks Created by Current User +taskList = [ ] +for entry in outputPendingTasks['data']: + if str(entry['createdBy']) == str(CVP_USER): + print "TaskNumber: %s"%entry['workOrderId'] + taskList.append(str(entry['workOrderId'])) +print "TaskList: %s"%taskList + + + +headers = { 'Content-Type': 'application/json' } +postTaskExecuteURL = "/cvpservice/task/executeTask.do" +for taskNumber in taskList: + executeData = json.dumps({'data': [taskNumber]}) + response = requests.post(url+postTaskExecuteURL, cookies=cookies,data=executeData,headers=headers,verify=False) + assert response.ok + outputExecuteTask = response.json() + print (outputExecuteTask['data']) + print "Task: "+str(taskNumber)+" Execute: "+str(outputExecuteTask['data']) + print "\n" + diff --git a/topologies/training-level-1-3-container-labs-dual-topo/files/scripts/TaskLog b/topologies/training-level-1-3-container-labs-dual-topo/files/scripts/TaskLog new file mode 100644 index 000000000..c835008b8 --- /dev/null +++ b/topologies/training-level-1-3-container-labs-dual-topo/files/scripts/TaskLog @@ -0,0 +1,59 @@ +import requests +import json + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + + +# Create an HTTP GET request to the CVP server + +getTasksURL = "/cvpservice/task/getTasks.do?" +getTasksParams = {'startIndex':'0','endIndex':'0'} +response = requests.get(url+getTasksURL,cookies=cookies, params=getTasksParams,verify=False) +assert response.ok +outputTasks = response.json() + + +# Print Tasks Created by Current User +taskList = [ ] +for entry in outputTasks['data']: + if str(entry['createdBy']) == str(CVP_USER): + print "TaskNumber: %s"%entry['workOrderId'] + taskList.append(str(entry['workOrderId'])) +print "TaskList: %s"%taskList + + + +# Create an HTTP POST request to the CVP server + +headers = { 'Content-Type': 'application/json' } +postTaskLogURL = "/cvpservice/workflow/addWorkOrderLog.do" +taskLogData = json.dumps({"taskId": taskList[0],"message": "This is a test Change","source": "CVP REST API"}) +response = requests.post(url+postTaskLogURL, cookies=cookies, data=taskLogData,headers=headers,verify=False) +assert response.ok +outputTaskLog = response.json() + +# Print Configlet details + +print "TaskLogAmmend: %s"%outputTaskLog['data'] +print "\n" + diff --git a/topologies/training-level-1-3-container-labs-dual-topo/files/scripts/TaskLog1 b/topologies/training-level-1-3-container-labs-dual-topo/files/scripts/TaskLog1 new file mode 100644 index 000000000..c835008b8 --- /dev/null +++ b/topologies/training-level-1-3-container-labs-dual-topo/files/scripts/TaskLog1 @@ -0,0 +1,59 @@ +import requests +import json + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + + +# Create an HTTP GET request to the CVP server + +getTasksURL = "/cvpservice/task/getTasks.do?" +getTasksParams = {'startIndex':'0','endIndex':'0'} +response = requests.get(url+getTasksURL,cookies=cookies, params=getTasksParams,verify=False) +assert response.ok +outputTasks = response.json() + + +# Print Tasks Created by Current User +taskList = [ ] +for entry in outputTasks['data']: + if str(entry['createdBy']) == str(CVP_USER): + print "TaskNumber: %s"%entry['workOrderId'] + taskList.append(str(entry['workOrderId'])) +print "TaskList: %s"%taskList + + + +# Create an HTTP POST request to the CVP server + +headers = { 'Content-Type': 'application/json' } +postTaskLogURL = "/cvpservice/workflow/addWorkOrderLog.do" +taskLogData = json.dumps({"taskId": taskList[0],"message": "This is a test Change","source": "CVP REST API"}) +response = requests.post(url+postTaskLogURL, cookies=cookies, data=taskLogData,headers=headers,verify=False) +assert response.ok +outputTaskLog = response.json() + +# Print Configlet details + +print "TaskLogAmmend: %s"%outputTaskLog['data'] +print "\n" + diff --git a/topologies/training-level-1-3-container-labs-dual-topo/files/scripts/TaskLogView b/topologies/training-level-1-3-container-labs-dual-topo/files/scripts/TaskLogView new file mode 100644 index 000000000..7b34904dd --- /dev/null +++ b/topologies/training-level-1-3-container-labs-dual-topo/files/scripts/TaskLogView @@ -0,0 +1,51 @@ +import requests +import json +import pprint + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + + +# Create an HTTP GET request to the CVP server + +getTasksURL = "/cvpservice/task/getTasks.do?" +getTasksParams = {'startIndex':'0','endIndex':'0'} +response = requests.get(url+getTasksURL,cookies=cookies, params=getTasksParams,verify=False) +assert response.ok +outputTasks = response.json() + +taskList = [ ] +for entry in outputTasks['data']: + if str(entry['createdBy']) == str(CVP_USER): + taskList.append(str(entry['workOrderId'])) + +getTaskLogURL = "/cvpservice/task/getLogsById.do?" +#getTaskLogParams = {'startIndex':'0','endIndex':'0','id':'0'} +getTaskLogParams = {'startIndex':'0','endIndex':'0','id':taskList[0]} +response = requests.get(url+getTaskLogURL,cookies=cookies, params=getTaskLogParams,verify=False) +assert response.ok +outputTaskLog = response.json() + +# Print TaskLog details +print "TaskLogOutput: %s" %outputTaskLog['data'] +print "\n" + diff --git a/topologies/training-level-1-3-container-labs-dual-topo/files/scripts/TaskNote b/topologies/training-level-1-3-container-labs-dual-topo/files/scripts/TaskNote new file mode 100644 index 000000000..6cd1d6cfd --- /dev/null +++ b/topologies/training-level-1-3-container-labs-dual-topo/files/scripts/TaskNote @@ -0,0 +1,52 @@ +import requests +import json +import pprint + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + + +# Create an HTTP GET request to the CVP server + +getTasksURL = "/cvpservice/task/getTasks.do?" +getTasksParams = {'startIndex':'0','endIndex':'0'} +response = requests.get(url+getTasksURL,cookies=cookies, params=getTasksParams,verify=False) +assert response.ok +outputTasks = response.json() + +taskList = [ ] +for entry in outputTasks['data']: + if str(entry['createdBy']) == str(CVP_USER): + taskList.append(str(entry['workOrderId'])) + +headers = { 'Content-Type': 'application/json' } +postTaskNoteURL = "/cvpservice/task/addNoteToTask.do" +taskNoteData = json.dumps({"workOrderId": taskList[0],"note": "This is a test Change using the API"}) +response = requests.post(url+postTaskNoteURL, cookies=cookies, data=taskNoteData,headers=headers,verify=False) +assert response.ok +outputTaskNote = response.json() + +# Print Task details + +print "TaskNoteAmmend: %s"%outputTaskNote['data'] +print "\n" + diff --git a/topologies/training-level-1-3-container-labs-dual-topo/labguides/.gitignore b/topologies/training-level-1-3-container-labs-dual-topo/labguides/.gitignore new file mode 100644 index 000000000..ed86553f4 --- /dev/null +++ b/topologies/training-level-1-3-container-labs-dual-topo/labguides/.gitignore @@ -0,0 +1,2 @@ +.DS_Store +build/ diff --git a/topologies/training-level-1-3-container-labs-dual-topo/labguides/Makefile b/topologies/training-level-1-3-container-labs-dual-topo/labguides/Makefile new file mode 100644 index 000000000..874ed2529 --- /dev/null +++ b/topologies/training-level-1-3-container-labs-dual-topo/labguides/Makefile @@ -0,0 +1,20 @@ +# Minimal makefile for Sphinx documentation +# + +# You can set these variables from the command line. +SPHINXOPTS = +SPHINXBUILD = python -msphinx +SPHINXPROJ = ATD +SOURCEDIR = source +BUILDDIR = build + +# Put it first so that "make" without argument is like "make help". +help: + @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) + +.PHONY: help Makefile + +# Catch-all target: route all unknown targets to Sphinx using the new +# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). +%: Makefile + @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) \ No newline at end of file diff --git a/topologies/training-level-1-3-container-labs-dual-topo/labguides/readme.md b/topologies/training-level-1-3-container-labs-dual-topo/labguides/readme.md new file mode 100644 index 000000000..5a5369ecd --- /dev/null +++ b/topologies/training-level-1-3-container-labs-dual-topo/labguides/readme.md @@ -0,0 +1,12 @@ +# Lab Guides +In this folder are rST (restructured text) formatted lab guides for the ATD event. + +## Building +To build the documentation, you will need to install Sphinx and sphinx_bootstrap_theme with `pip`: + +`pip install sphinx sphinx_bootstrap_theme` + +## Contributing +At some point, this section may expand, but for now please make sure to review existing files for formatting guidelines. + +Please see https://github.com/ralsina/rst-cheatsheet/blob/master/rst-cheatsheet.rst for a cheat sheet. \ No newline at end of file diff --git a/topologies/training-level-1-3-container-labs-dual-topo/labguides/source/_static/arista_logo.png b/topologies/training-level-1-3-container-labs-dual-topo/labguides/source/_static/arista_logo.png new file mode 100644 index 000000000..2376e72b9 Binary files /dev/null and b/topologies/training-level-1-3-container-labs-dual-topo/labguides/source/_static/arista_logo.png differ diff --git a/topologies/training-level-1-3-container-labs-dual-topo/labguides/source/_static/arista_logo_160by26.png b/topologies/training-level-1-3-container-labs-dual-topo/labguides/source/_static/arista_logo_160by26.png new file mode 100644 index 000000000..d0d0cbeec Binary files /dev/null and b/topologies/training-level-1-3-container-labs-dual-topo/labguides/source/_static/arista_logo_160by26.png differ diff --git a/topologies/training-level-1-3-container-labs-dual-topo/labguides/source/_static/arista_logo_320by52.png b/topologies/training-level-1-3-container-labs-dual-topo/labguides/source/_static/arista_logo_320by52.png new file mode 100644 index 000000000..43dfa7ed2 Binary files /dev/null and b/topologies/training-level-1-3-container-labs-dual-topo/labguides/source/_static/arista_logo_320by52.png differ diff --git a/topologies/training-level-1-3-container-labs-dual-topo/labguides/source/_static/cloudvision-icon.png b/topologies/training-level-1-3-container-labs-dual-topo/labguides/source/_static/cloudvision-icon.png new file mode 100644 index 000000000..c309ed98e Binary files /dev/null and b/topologies/training-level-1-3-container-labs-dual-topo/labguides/source/_static/cloudvision-icon.png differ diff --git a/topologies/training-level-1-3-container-labs-dual-topo/labguides/source/_static/logo.jpg b/topologies/training-level-1-3-container-labs-dual-topo/labguides/source/_static/logo.jpg new file mode 100644 index 000000000..6eda41f7e Binary files /dev/null and b/topologies/training-level-1-3-container-labs-dual-topo/labguides/source/_static/logo.jpg differ diff --git a/topologies/training-level-1-3-container-labs-dual-topo/labguides/source/_static/my-styles.css b/topologies/training-level-1-3-container-labs-dual-topo/labguides/source/_static/my-styles.css new file mode 100644 index 000000000..1150528ee --- /dev/null +++ b/topologies/training-level-1-3-container-labs-dual-topo/labguides/source/_static/my-styles.css @@ -0,0 +1,41 @@ +body { + background-color: #FFFFFF; + color: #002859 +} + +.navbar-inverse { + background-image: -webkit-linear-gradient(#6d94bf, #446e9b 50%, #002859); + background-image: -o-linear-gradient(#6d94bf, #446e9b 50%, #002859); + background-image: -webkit-gradient(linear, left top, left bottom, from(#6d94bf), color-stop(50%, #446e9b), to(#002859)); + background-image: linear-gradient(#6d94bf, #446e9b 50%, #002859); + background-repeat: no-repeat; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff6d94bf', endColorstr='#ff002859', GradientType=0); + -webkit-filter: none; + filter: none; + border: 1px solid #345578; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.3) +} + +.navbar-brand { + background: url("arista_logo_320by52.png") center / contain no-repeat; + display: inline-block; + width: 1px; + padding: 0 10px 0 60px; + margin-right: 30px; + margin-left: -30px; +} + +.navbar-brand>img { + display: inline-block; + padding: 0 100px 0 0px; + margin-right: 20px; +} +a.navbar-brand { + display: inline-block; + padding: 15px 0 0 120px; +} + +footer { + background-color: #002859; + color: #FFFFFF; +} diff --git a/topologies/training-level-1-3-container-labs-dual-topo/labguides/source/conf.py b/topologies/training-level-1-3-container-labs-dual-topo/labguides/source/conf.py new file mode 100644 index 000000000..afccec09c --- /dev/null +++ b/topologies/training-level-1-3-container-labs-dual-topo/labguides/source/conf.py @@ -0,0 +1,247 @@ +# -*- coding: utf-8 -*- +# +# ATD documentation build configuration file, created by +# sphinx-quickstart on Tue Apr 17 10:00:04 2018. +# +# This file is execfile()d with the current directory set to its +# containing dir. +# +# Note that not all possible configuration values are present in this +# autogenerated file. +# +# All configuration values have a default; values that are commented out +# serve to show the default. + +# If extensions (or modules to document with autodoc) are in another directory, +# add these directories to sys.path here. If the directory is relative to the +# documentation root, use os.path.abspath to make it absolute, like shown here. +# +# import os +# import sys +# sys.path.insert(0, os.path.abspath('.')) + +import sphinx_bootstrap_theme + +# Importing datetime module to auto update copyright year +from datetime import date + +# -- General configuration ------------------------------------------------ + +# If your documentation needs a minimal Sphinx version, state it here. +# +# needs_sphinx = '1.0' + +# Add any Sphinx extension module names here, as strings. They can be +# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom +# ones. + +# Add any paths that contain templates here, relative to this directory. +templates_path = ['_templates'] + +# The suffix(es) of source filenames. +# You can specify multiple suffix as a list of string: +# +# source_suffix = ['.rst', '.md'] +source_suffix = '.rst' + +# The master toctree document. +master_doc = 'index' + +# General information about the project. +# Updating copyright var to auto update with current year +project = u'Arista ATD' +copyright = u'{0}, Arista Networks'.format(date.today().year) +author = u'Arista ATD atd-help@arista.com' + +# Show Source +html_show_sourcelink = False + +# The version info for the project you're documenting, acts as replacement for +# |version| and |release|, also used in various other places throughout the +# built documents. +# +# The short X.Y version. +version = u'Version 3.0' +# The full version, including alpha/beta/rc tags. +release = u'1' + +# The language for content autogenerated by Sphinx. Refer to documentation +# for a list of supported languages. +# +# This is also used if you do content translation via gettext catalogs. +# Usually you set "language" from the command line for these cases. +language = None + +# List of patterns, relative to source directory, that match files and +# directories to ignore when looking for source files. +# This patterns also effect to html_static_path and html_extra_path +exclude_patterns = [] + +# The name of the Pygments (syntax highlighting) style to use. +pygments_style = 'sphinx' + +# If true, `todo` and `todoList` produce output, else they produce nothing. +todo_include_todos = False + + +# -- Options for HTML output ---------------------------------------------- + +# The theme to use for HTML and HTML Help pages. See the documentation for +# a list of builtin themes. +# +#html_theme = 'alabaster' +html_theme = 'bootstrap' +html_theme_path = sphinx_bootstrap_theme.get_html_theme_path() + +# Add any paths that contain custom static files (such as style sheets) here, +# relative to this directory. They are copied after the builtin static files, +# so a file named "default.css" will overwrite the builtin "default.css". +html_static_path = ['_static'] + +# Theme options are theme-specific and customize the look and feel of a theme +# further. For a list of options available for each theme, see the +# documentation. +# +html_theme_options = { + # Navigation bar title. (Default: ``project`` value) + 'navbar_title': "ATD", + + # Tab name for entire site. (Default: "Site") + 'navbar_site_name': "Table of Contents", + + # A list of tuples containing pages or urls to link to. + # Valid tuples should be in the following forms: + # (name, page) # a link to a page + # (name, "/aa/bb", 1) # a link to an arbitrary relative url + # (name, "http://example.com", True) # arbitrary absolute url + # Note the "1" or "True" value above as the third argument to indicate + # an arbitrary url. + 'navbar_links': [ + ("Arista", "http://www.arista.com", True), + ], + + # Render the next and previous page links in navbar. (Default: true) + 'navbar_sidebarrel': True, + + # Render the current pages TOC in the navbar. (Default: true) + 'navbar_pagenav': False, + + # Tab name for the current pages TOC. (Default: "Page") + 'navbar_pagenav_name': "Page", + + # Global TOC depth for "site" navbar tab. (Default: 1) + # Switching to -1 shows all levels. + 'globaltoc_depth': 2, + + # Include hidden TOCs in Site navbar? + # + # Note: If this is "false", you cannot have mixed ``:hidden:`` and + # non-hidden ``toctree`` directives in the same page, or else the build + # will break. + # + # Values: "true" (default) or "false" + 'globaltoc_includehidden': "true", + + # HTML navbar class (Default: "navbar") to attach to
    element. + # For black navbar, do "navbar navbar-inverse" + #'navbar_class': "navbar navbar-inverse", + 'navbar_class': "navbar", + + # Fix navigation bar to top of page? + # Values: "true" (default) or "false" + 'navbar_fixed_top': "true", + + # Location of link to source. + # Options are "nav" (default), "footer" or anything else to exclude. + #'source_link_position': "nav", + + # Bootswatch (http://bootswatch.com/) theme. + # + # Options are nothing (default) or the name of a valid theme + # such as "cosmo" or "sandstone". + # + # The set of valid themes depend on the version of Bootstrap + # that's used (the next config option). + # + # Currently, the supported themes are: + # - Bootstrap 2: https://bootswatch.com/2 + # - Bootstrap 3: https://bootswatch.com/3 + 'bootswatch_theme': "spacelab", + + # Choose Bootstrap version. + # Values: "3" (default) or "2" (in quotes) + 'bootstrap_version': "3", +} + +# The name for this set of Sphinx documents. If None, it defaults to +# " v documentation". +#html_title = "AristaATD" + +# A shorter title for the navigation bar. Default is the same as html_title. +#html_short_title = "Demo" + +# (Optional) Logo. Should be small enough to fit the navbar (ideally 24x24). +# Path should be relative to the ``_static`` files directory. +#html_logo = "cloudvision-icon.png" + +# -- Options for HTMLHelp output ------------------------------------------ + +# Output file base name for HTML help builder. +htmlhelp_basename = 'AristaATD' + + +# -- Options for LaTeX output --------------------------------------------- + +latex_elements = { + # The paper size ('letterpaper' or 'a4paper'). + # + # 'papersize': 'letterpaper', + + # The font size ('10pt', '11pt' or '12pt'). + # + # 'pointsize': '10pt', + + # Additional stuff for the LaTeX preamble. + # + # 'preamble': '', + + # Latex figure (float) alignment + # + # 'figure_align': 'htbp', +} + +# Grouping the document tree into LaTeX files. List of tuples +# (source start file, target name, title, +# author, documentclass [howto, manual, or own class]). +latex_documents = [ + (master_doc, 'ATD.tex', u'ATD Lab Guide', + u'ATD Help (atd-help@arista.com)', 'manual'), +] + + +# -- Options for manual page output --------------------------------------- + +# One entry per manual page. List of tuples +# (source start file, name, description, authors, manual section). +man_pages = [ + (master_doc, 'atd', u'ATD Lab Guide', + [author], 1) +] + + +# -- Options for Texinfo output ------------------------------------------- + +# Grouping the document tree into Texinfo files. List of tuples +# (source start file, target name, title, author, +# dir menu entry, description, category) +texinfo_documents = [ + (master_doc, 'ATD', u'ATD Lab Guide', + author, 'ATD', 'Lab Documentation.', + 'Miscellaneous'), +] + + +def setup(app): + app.add_stylesheet("my-styles.css") # also can be a full URL + # app.add_stylesheet("ANOTHER.css") + # app.add_stylesheet("AND_ANOTHER.css") diff --git a/topologies/training-level-1-3-container-labs-dual-topo/labguides/source/connecting.rst b/topologies/training-level-1-3-container-labs-dual-topo/labguides/source/connecting.rst new file mode 100644 index 000000000..10ae589ef --- /dev/null +++ b/topologies/training-level-1-3-container-labs-dual-topo/labguides/source/connecting.rst @@ -0,0 +1,28 @@ +Connecting +========== + +1. Log into the Arista Test Drive portal with your assigned URL. If you + don’t have one, please see your ATD staff. + +.. image:: images/connecting/nested_connecting_1.png + +2. SSH to the public address assigned to the LabAccess jumphost server (this is the Topology Address shown in the "Welcome to Arista's Test Drive!" picture above). The username is ``arista`` and the password is ``{REPLACE_PWD}``: + + .. code-block:: text + + ssh arista@{unique_address}.topo.testdrive.arista.com + +| + +.. image:: images/connecting/nested_connecting_2.png + :align: center + +| + +3. The LabAccess menu allows users to connect to each device and specify + lab topology. It is recommended to open multiple SSH sessions or use + the Screen option (under the SSH Menu) to jump between devices rapidly. + + You can also Access the LabAccess Menu from your browser by clicking on `Console Access` + +.. image:: images/connecting/nested_connecting_3.png diff --git a/topologies/training-level-1-3-container-labs-dual-topo/labguides/source/images/connecting/nested_connecting_1.png b/topologies/training-level-1-3-container-labs-dual-topo/labguides/source/images/connecting/nested_connecting_1.png new file mode 100644 index 000000000..aa76597b8 Binary files /dev/null and b/topologies/training-level-1-3-container-labs-dual-topo/labguides/source/images/connecting/nested_connecting_1.png differ diff --git a/topologies/training-level-1-3-container-labs-dual-topo/labguides/source/images/connecting/nested_connecting_2.png b/topologies/training-level-1-3-container-labs-dual-topo/labguides/source/images/connecting/nested_connecting_2.png new file mode 100644 index 000000000..2c6b51a2b Binary files /dev/null and b/topologies/training-level-1-3-container-labs-dual-topo/labguides/source/images/connecting/nested_connecting_2.png differ diff --git a/topologies/training-level-1-3-container-labs-dual-topo/labguides/source/images/connecting/nested_connecting_3.png b/topologies/training-level-1-3-container-labs-dual-topo/labguides/source/images/connecting/nested_connecting_3.png new file mode 100644 index 000000000..1cc7402a3 Binary files /dev/null and b/topologies/training-level-1-3-container-labs-dual-topo/labguides/source/images/connecting/nested_connecting_3.png differ diff --git a/topologies/training-level-1-3-container-labs-dual-topo/labguides/source/images/logo.jpg b/topologies/training-level-1-3-container-labs-dual-topo/labguides/source/images/logo.jpg new file mode 100644 index 000000000..6eda41f7e Binary files /dev/null and b/topologies/training-level-1-3-container-labs-dual-topo/labguides/source/images/logo.jpg differ diff --git a/topologies/training-level-1-3-container-labs-dual-topo/labguides/source/index.rst b/topologies/training-level-1-3-container-labs-dual-topo/labguides/source/index.rst new file mode 100644 index 000000000..bb76aaa2e --- /dev/null +++ b/topologies/training-level-1-3-container-labs-dual-topo/labguides/source/index.rst @@ -0,0 +1,8 @@ +Welcome to the Arista Training documentation! +======================================== + +.. toctree:: + :maxdepth: 1 + :caption: EOS Configuration + + connecting.rst diff --git a/topologies/training-level-1-3-container-labs-dual-topo/topo_build.yml b/topologies/training-level-1-3-container-labs-dual-topo/topo_build.yml new file mode 100644 index 000000000..d428dd147 --- /dev/null +++ b/topologies/training-level-1-3-container-labs-dual-topo/topo_build.yml @@ -0,0 +1,385 @@ +host_cpu: 8 +cvp_cpu: 24 +cvp_ram: 32 +cvp_nodes: 1 +veos_cpu: 2 +nodes: + - spine1: + ip_addr: 192.168.0.11 + sys_mac: 00:1c:73:b1:c6:01 + neighbors: + - neighborDevice: spine2 + neighborPort: Ethernet1 + port: Ethernet1 + - neighborDevice: spine2 + neighborPort: Ethernet2 + port: Ethernet2 + - neighborDevice: leaf1 + neighborPort: Ethernet3 + port: Ethernet3 + - neighborDevice: leaf2 + neighborPort: Ethernet3 + port: Ethernet4 + - neighborDevice: leaf3 + neighborPort: Ethernet3 + port: Ethernet5 + - neighborDevice: leaf4 + neighborPort: Ethernet3 + port: Ethernet6 + - neighborDevice: borderleaf1 + neighborPort: Ethernet3 + port: Ethernet7 + - neighborDevice: borderleaf2 + neighborPort: Ethernet3 + port: Ethernet8 + - spine2: + ip_addr: 192.168.0.12 + sys_mac: 00:1c:73:b2:c6:01 + neighbors: + - neighborDevice: spine1 + neighborPort: Ethernet1 + port: Ethernet1 + - neighborDevice: spine1 + neighborPort: Ethernet2 + port: Ethernet2 + - neighborDevice: leaf1 + neighborPort: Ethernet4 + port: Ethernet3 + - neighborDevice: leaf2 + neighborPort: Ethernet4 + port: Ethernet4 + - neighborDevice: leaf3 + neighborPort: Ethernet4 + port: Ethernet5 + - neighborDevice: leaf4 + neighborPort: Ethernet4 + port: Ethernet6 + - neighborDevice: borderleaf1 + neighborPort: Ethernet4 + port: Ethernet7 + - neighborDevice: borderleaf2 + neighborPort: Ethernet4 + port: Ethernet8 + - spine3: + ip_addr: 192.168.0.13 + sys_mac: 00:1c:73:b3:c6:01 + neighbors: + - neighborDevice: spine4 + neighborPort: Ethernet1 + port: Ethernet1 + - neighborDevice: spine4 + neighborPort: Ethernet2 + port: Ethernet2 + - neighborDevice: leaf1 + neighborPort: Ethernet5 + port: Ethernet3 + - neighborDevice: leaf2 + neighborPort: Ethernet5 + port: Ethernet4 + - neighborDevice: leaf3 + neighborPort: Ethernet5 + port: Ethernet5 + - neighborDevice: leaf4 + neighborPort: Ethernet5 + port: Ethernet6 + - neighborDevice: borderleaf1 + neighborPort: Ethernet5 + port: Ethernet7 + - neighborDevice: borderleaf2 + neighborPort: Ethernet5 + port: Ethernet8 + - spine4: + ip_addr: 192.168.0.14 + sys_mac: 00:1c:73:b4:c6:01 + neighbors: + - neighborDevice: spine3 + neighborPort: Ethernet1 + port: Ethernet1 + - neighborDevice: spine3 + neighborPort: Ethernet2 + port: Ethernet2 + - neighborDevice: leaf1 + neighborPort: Ethernet6 + port: Ethernet3 + - neighborDevice: leaf2 + neighborPort: Ethernet6 + port: Ethernet4 + - neighborDevice: leaf3 + neighborPort: Ethernet6 + port: Ethernet5 + - neighborDevice: leaf4 + neighborPort: Ethernet6 + port: Ethernet6 + - neighborDevice: borderleaf1 + neighborPort: Ethernet6 + port: Ethernet7 + - neighborDevice: borderleaf2 + neighborPort: Ethernet6 + port: Ethernet8 + - leaf1: + ip_addr: 192.168.0.21 + sys_mac: 00:1c:73:c1:c6:01 + neighbors: + - neighborDevice: leaf2 + neighborPort: Ethernet1 + port: Ethernet1 + - neighborDevice: leaf2 + neighborPort: Ethernet2 + port: Ethernet2 + - neighborDevice: spine1 + neighborPort: Ethernet3 + port: Ethernet3 + - neighborDevice: spine2 + neighborPort: Ethernet3 + port: Ethernet4 + - neighborDevice: spine3 + neighborPort: Ethernet3 + port: Ethernet5 + - neighborDevice: spine4 + neighborPort: Ethernet3 + port: Ethernet6 + - neighborDevice: host1 + neighborPort: Ethernet1 + port: Ethernet7 + - neighborDevice: host5 + neighborPort: Ethernet1 + port: Ethernet8 + - neighborDevice: host2 + neighborPort: Ethernet1 + port: Ethernet9 + - neighborDevice: host6 + neighborPort: Ethernet1 + port: Ethernet10 + - leaf2: + ip_addr: 192.168.0.22 + sys_mac: 00:1c:73:c2:c6:01 + neighbors: + - neighborDevice: leaf1 + neighborPort: Ethernet1 + port: Ethernet1 + - neighborDevice: leaf1 + neighborPort: Ethernet2 + port: Ethernet2 + - neighborDevice: spine1 + neighborPort: Ethernet4 + port: Ethernet3 + - neighborDevice: spine2 + neighborPort: Ethernet4 + port: Ethernet4 + - neighborDevice: spine3 + neighborPort: Ethernet4 + port: Ethernet5 + - neighborDevice: spine4 + neighborPort: Ethernet4 + port: Ethernet6 + - neighborDevice: host1 + neighborPort: Ethernet2 + port: Ethernet7 + - neighborDevice: host5 + neighborPort: Ethernet2 + port: Ethernet8 + - neighborDevice: host2 + neighborPort: Ethernet2 + port: Ethernet9 + - neighborDevice: host6 + neighborPort: Ethernet2 + port: Ethernet10 + - leaf3: + ip_addr: 192.168.0.23 + sys_mac: 00:1c:73:c3:c6:01 + neighbors: + - neighborDevice: leaf4 + neighborPort: Ethernet1 + port: Ethernet1 + - neighborDevice: leaf4 + neighborPort: Ethernet2 + port: Ethernet2 + - neighborDevice: spine1 + neighborPort: Ethernet5 + port: Ethernet3 + - neighborDevice: spine2 + neighborPort: Ethernet5 + port: Ethernet4 + - neighborDevice: spine3 + neighborPort: Ethernet5 + port: Ethernet5 + - neighborDevice: spine4 + neighborPort: Ethernet5 + port: Ethernet6 + - neighborDevice: host3 + neighborPort: Ethernet1 + port: Ethernet7 + - neighborDevice: host7 + neighborPort: Ethernet1 + port: Ethernet8 + - neighborDevice: host4 + neighborPort: Ethernet1 + port: Ethernet9 + - neighborDevice: host8 + neighborPort: Ethernet1 + port: Ethernet10 + - leaf4: + ip_addr: 192.168.0.24 + sys_mac: 00:1c:73:c4:c6:01 + neighbors: + - neighborDevice: leaf3 + neighborPort: Ethernet1 + port: Ethernet1 + - neighborDevice: leaf3 + neighborPort: Ethernet2 + port: Ethernet2 + - neighborDevice: spine1 + neighborPort: Ethernet6 + port: Ethernet3 + - neighborDevice: spine2 + neighborPort: Ethernet6 + port: Ethernet4 + - neighborDevice: spine3 + neighborPort: Ethernet6 + port: Ethernet5 + - neighborDevice: spine4 + neighborPort: Ethernet6 + port: Ethernet6 + - neighborDevice: host3 + neighborPort: Ethernet2 + port: Ethernet7 + - neighborDevice: host7 + neighborPort: Ethernet2 + port: Ethernet8 + - neighborDevice: host4 + neighborPort: Ethernet2 + port: Ethernet9 + - neighborDevice: host8 + neighborPort: Ethernet2 + port: Ethernet10 + - borderleaf1: + ip_addr: 192.168.0.25 + sys_mac: 00:1c:73:c5:c6:01 + neighbors: + - neighborDevice: borderleaf2 + neighborPort: Ethernet1 + port: Ethernet1 + - neighborDevice: borderleaf2 + neighborPort: Ethernet2 + port: Ethernet2 + - neighborDevice: spine1 + neighborPort: Ethernet7 + port: Ethernet3 + - neighborDevice: spine2 + neighborPort: Ethernet7 + port: Ethernet4 + - neighborDevice: spine3 + neighborPort: Ethernet7 + port: Ethernet5 + - neighborDevice: spine4 + neighborPort: Ethernet7 + port: Ethernet6 + - borderleaf2: + ip_addr: 192.168.0.26 + sys_mac: 00:1c:73:c6:c6:01 + neighbors: + - neighborDevice: borderleaf1 + neighborPort: Ethernet1 + port: Ethernet1 + - neighborDevice: borderleaf1 + neighborPort: Ethernet2 + port: Ethernet2 + - neighborDevice: spine1 + neighborPort: Ethernet8 + port: Ethernet3 + - neighborDevice: spine2 + neighborPort: Ethernet8 + port: Ethernet4 + - neighborDevice: spine3 + neighborPort: Ethernet8 + port: Ethernet5 + - neighborDevice: spine4 + neighborPort: Ethernet8 + port: Ethernet6 + - host1: + ip_addr: 192.168.0.51 + sys_mac: 00:1c:73:f1:c6:01 + neighbors: + - neighborDevice: leaf1 + neighborPort: Ethernet7 + port: Ethernet1 + - neighborDevice: leaf2 + neighborPort: Ethernet7 + port: Ethernet2 + - host2: + ip_addr: 192.168.0.52 + sys_mac: 00:1c:73:f2:c6:01 + neighbors: + - neighborDevice: leaf1 + neighborPort: Ethernet9 + port: Ethernet1 + - neighborDevice: leaf2 + neighborPort: Ethernet9 + port: Ethernet2 + - host3: + ip_addr: 192.168.0.53 + sys_mac: 00:1c:73:f3:c6:01 + neighbors: + - neighborDevice: leaf3 + neighborPort: Ethernet7 + port: Ethernet1 + - neighborDevice: leaf4 + neighborPort: Ethernet7 + port: Ethernet2 + - host4: + ip_addr: 192.168.0.54 + sys_mac: 00:1c:73:f4:c6:01 + neighbors: + - neighborDevice: leaf3 + neighborPort: Ethernet9 + port: Ethernet1 + - neighborDevice: leaf4 + neighborPort: Ethernet9 + port: Ethernet2 +servers: + - host5: + image_name: "gcr.io/atd-testdrivetraining-dev/hosts-gui/host1:latest" + ip_addr: 192.168.0.101 + port : 6001 + neighbors: + - neighborDevice: leaf1 + neighborPort: Ethernet8 + port: Ethernet1 + - neighborDevice: leaf2 + neighborPort: Ethernet8 + port: Ethernet2 + - host6: + image_name: "gcr.io/atd-testdrivetraining-dev/hosts-gui/host1:latest" + ip_addr: 192.168.0.102 + port : 6002 + neighbors: + - neighborDevice: leaf1 + neighborPort: Ethernet10 + port: Ethernet1 + - neighborDevice: leaf2 + neighborPort: Ethernet10 + port: Ethernet2 + - host7: + image_name: "gcr.io/atd-testdrivetraining-dev/hosts-gui/host1:latest" + ip_addr: 192.168.0.103 + port : 6003 + neighbors: + - neighborDevice: leaf3 + neighborPort: Ethernet8 + port: Ethernet1 + - neighborDevice: leaf4 + neighborPort: Ethernet8 + port: Ethernet2 + - host8: + image_name: "gcr.io/atd-testdrivetraining-dev/hosts-gui/host1:latest" + ip_addr: 192.168.0.104 + port : 6004 + neighbors: + - neighborDevice: leaf3 + neighborPort: Ethernet10 + port: Ethernet1 + - neighborDevice: leaf4 + neighborPort: Ethernet10 + port: Ethernet2 +additional_ssh_nodes: +additional_clab_nodes: diff --git a/topologies/training-level-1-3-container-labs/atd-topo-bkp-2.png b/topologies/training-level-1-3-container-labs/atd-topo-bkp-2.png new file mode 100644 index 000000000..ce621aec8 Binary files /dev/null and b/topologies/training-level-1-3-container-labs/atd-topo-bkp-2.png differ diff --git a/topologies/training-level-1-3-container-labs/atd-topo-bkp.png b/topologies/training-level-1-3-container-labs/atd-topo-bkp.png new file mode 100644 index 000000000..4cc023b85 Binary files /dev/null and b/topologies/training-level-1-3-container-labs/atd-topo-bkp.png differ diff --git a/topologies/training-level-1-3-container-labs/atd-topo.png b/topologies/training-level-1-3-container-labs/atd-topo.png new file mode 100644 index 000000000..53ba5d7d9 Binary files /dev/null and b/topologies/training-level-1-3-container-labs/atd-topo.png differ diff --git a/topologies/training-level-1-3-container-labs/configlets/ATD-INFRA b/topologies/training-level-1-3-container-labs/configlets/ATD-INFRA new file mode 100644 index 000000000..de87bc743 --- /dev/null +++ b/topologies/training-level-1-3-container-labs/configlets/ATD-INFRA @@ -0,0 +1,53 @@ +vrf instance MGMT +! +daemon TerminAttr + exec /usr/bin/TerminAttr -cvcompression=gzip -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent -cvaddr=192.168.0.5:9910 -cvauth=token,/tmp/token -cvvrf=MGMT -taillogs -disableaaa + no shutdown +! +alias mlag-reload bash /mnt/flash/shut_intfs && sudo shutdown now -r +alias conint sh interface | i connected +alias senz show interface counter error | nz +alias shmc show int | awk '/^[A-Z]/ { intf = $1 } /, address is/ { print intf, $6 }' +alias snz show interface counter | nz +alias spd show port-channel %1 detail all +alias sqnz show interface counter queue | nz +alias srnz show interface counter rate | nz +alias intdesc + !! Usage: intdesc interface-name description + 10 config + 20 int %1 + 30 desc %2 + 40 exit +! +dns domain arista.lab +! +service routing protocols model multi-agent +! +ntp server vrf MGMT 192.168.0.1 iburst source Management0 +! +radius-server host 192.168.0.1 vrf MGMT key 7 0207165218120E +! +aaa group server radius atds + server 192.168.0.1 vrf MGMT +! +aaa authentication login default group atds local +aaa authorization exec default group atds local +aaa authorization commands all default local +! +username Script secret sha512 $6$PNfpb9anSBQ5/aia$phaa3ar5pwkntenD9WHc6Ed5b96lbW0dc0bjtwPnFLaDiCK8D5Cjl6ewP/xdNbl4PtS6Paq.3SssN8pj05NQm. +username admin privilege 15 role network-admin secret 5 $1$5O85YVVn$HrXcfOivJEnISTMb6xrJc. +username arista privilege 15 role network-admin secret 5 $1$4VjIjfd1$XkUVulbNDESHFzcxDU.Tk1 +! +username arista ssh-key ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC+ERvV4GaPq3FzxY8T+5hMF/1T+l8wiPsVCtOrZU4Hy6NCNlAiDBdA/RUtX5/aOu5JvHyPTVHqWJ0qi9BqU3rxCNl/l2/5UZbm9RPzdZ1QCwoYwPB9/j/tYJV8lZdr6t0yGBfxgzD3oW/zF7a+ZtASaMAu7lkgoqPK2pVIGa+Y9ZCsA0Xq756XpLCw+d3pHKHvIkgWLCo9FoeIv8f/bu5u/ztzRE+Nvl+o5add6MxnjsXz3s7BnW2FX6JNjyp0Z+OXjupQc2gcfFvpd/dA2lCNuuaCHkRgyPwIZtWPmNqMRXPp37mlPwV43qDJRVPQkvh0xPxwS35BbzUxWdT+ZLZv +! +ip radius source-interface Management0 +! +ip routing vrf MGMT +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 +! +management api http-commands + no shutdown + vrf MGMT + no shutdown +! diff --git a/topologies/training-level-1-3-container-labs/configlets/Base-Builder.py b/topologies/training-level-1-3-container-labs/configlets/Base-Builder.py new file mode 100644 index 000000000..167d9c750 --- /dev/null +++ b/topologies/training-level-1-3-container-labs/configlets/Base-Builder.py @@ -0,0 +1,86 @@ +from cvplibrary import CVPGlobalVariables, GlobalVariableNames, Form + + + +# Get this devices Serial + + +serial = CVPGlobalVariables.getValue( GlobalVariableNames.CVP_SERIAL ) +mask = '24' +ServiceRouting = True + +#Create the IP address from the serial number + + +if serial == '4A7F6E96300132903A73A74CCF18B697': + IPaddress = '192.168.0.21' + hostname = 'leaf1' + + +elif serial == '3831DEFC364900BF9EEFC45FEE7794E7': + IPaddress = '192.168.0.22' + hostname = 'leaf2' + + +elif serial == 'ED469CFA13C4017B2D19BF7EBCAD50B1': + IPaddress = '192.168.0.23' + hostname = 'leaf3' + + +elif serial == '434653268ABA082A2FF6B52F1367CE80': + IPaddress = '192.168.0.24' + hostname = 'leaf4' + +elif serial == '8085B9640BC6D8FDC1FD23D242EBF433': + IPaddress = '192.168.0.11' + hostname = 'spine1' + +elif serial == 'D28D62E5729AB8BF44A0BC017DEB188A': + IPaddress = '192.168.0.12' + hostname = 'spine2' + +elif serial == 'F77703A62ADE220E689A41057AA56288': + IPaddress = '192.168.0.13' + hostname = 'spine3' + +elif serial == 'D763323F00C03738A8C824D2F1DA05E8': + IPaddress = '192.168.0.25' + hostname = 'borderleaf1' + +elif serial == '7C16136B7483F2E2FB002E8E0646F1F0': + IPaddress = '192.168.0.26' + hostname = 'borderleaf2' + +elif serial == '86342B780ED73BCB30E1DFE48E26AC38': + IPaddress = '192.168.0.51' + ServiceRouting = False + hostname = 'host1' + + +elif serial == 'CE0B31805130945E3CE40B060E9E636D': + IPaddress = '192.168.0.52' + ServiceRouting = False + hostname = 'host2' + + +# Generate and print config - Ignore the service routing command if not needed +print 'hostname %s' % hostname +print '!' +print 'interface Management 1' +print ' ip address %s/%s' % ( IPaddress, mask ) +print ' no lldp transmit' +print ' no lldp receive' +print '!' +if ServiceRouting: + print 'service routing protocols model multi-agent' + print '!' +print 'dns domain arista.lab' +print '!' +print 'ip route 0.0.0.0/0 192.168.0.1' +print '!' +print 'ip routing' +print '!' +print 'management api http-commands' +print ' no shutdown' +print ' protocol http' +print '!' \ No newline at end of file diff --git a/topologies/training-level-1-3-container-labs/configlets/borderleaf1-base b/topologies/training-level-1-3-container-labs/configlets/borderleaf1-base new file mode 100644 index 000000000..e274c6eb4 --- /dev/null +++ b/topologies/training-level-1-3-container-labs/configlets/borderleaf1-base @@ -0,0 +1,14 @@ +hostname borderleaf1 +! +interface Management 0 + vrf MGMT + ip address 192.168.0.25/24 +! +service routing protocols model multi-agent +! +dns domain arista.lab +! +ip routing vrf MGMT +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 +! diff --git a/topologies/training-level-1-3-container-labs/configlets/borderleaf2-base b/topologies/training-level-1-3-container-labs/configlets/borderleaf2-base new file mode 100644 index 000000000..a7778e0b4 --- /dev/null +++ b/topologies/training-level-1-3-container-labs/configlets/borderleaf2-base @@ -0,0 +1,14 @@ +hostname borderleaf2 +! +interface Management 0 + vrf MGMT + ip address 192.168.0.26/24 + +! +service routing protocols model multi-agent +! +dns domain arista.lab +! +ip routing vrf MGMT +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 diff --git a/topologies/training-level-1-3-container-labs/configlets/host1-base b/topologies/training-level-1-3-container-labs/configlets/host1-base new file mode 100644 index 000000000..915d58edb --- /dev/null +++ b/topologies/training-level-1-3-container-labs/configlets/host1-base @@ -0,0 +1,15 @@ +hostname host1 +! +spanning-tree mode none +! +interface Management 0 + vrf MGMT + ip address 192.168.0.51/24 + + +! +dns domain arista.lab +! +ip routing vrf MGMT +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 diff --git a/topologies/training-level-1-3-container-labs/configlets/host2-base b/topologies/training-level-1-3-container-labs/configlets/host2-base new file mode 100644 index 000000000..63f0c9c38 --- /dev/null +++ b/topologies/training-level-1-3-container-labs/configlets/host2-base @@ -0,0 +1,15 @@ +hostname host2 +! +spanning-tree mode none +! +interface Management 0 + vrf MGMT + ip address 192.168.0.52/24 + + +! +dns domain arista.lab +! +ip routing vrf MGMT +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 diff --git a/topologies/training-level-1-3-container-labs/configlets/host3-base b/topologies/training-level-1-3-container-labs/configlets/host3-base new file mode 100644 index 000000000..979a49b28 --- /dev/null +++ b/topologies/training-level-1-3-container-labs/configlets/host3-base @@ -0,0 +1,15 @@ +hostname host3 +! +spanning-tree mode none +! +interface Management 0 + vrf MGMT + ip address 192.168.0.53/24 + + +! +dns domain arista.lab +! +ip routing vrf MGMT +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 diff --git a/topologies/training-level-1-3-container-labs/configlets/host4-base b/topologies/training-level-1-3-container-labs/configlets/host4-base new file mode 100644 index 000000000..f85e77a77 --- /dev/null +++ b/topologies/training-level-1-3-container-labs/configlets/host4-base @@ -0,0 +1,15 @@ +hostname host4 +! +spanning-tree mode none +! +interface Management 0 + vrf MGMT + ip address 192.168.0.54/24 + +! +dns domain arista.lab +! +ip routing vrf MGMT +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 + diff --git a/topologies/training-level-1-3-container-labs/configlets/leaf1-base b/topologies/training-level-1-3-container-labs/configlets/leaf1-base new file mode 100644 index 000000000..7b316b33b --- /dev/null +++ b/topologies/training-level-1-3-container-labs/configlets/leaf1-base @@ -0,0 +1,13 @@ +hostname leaf1 +! +interface Management 0 + vrf MGMT + ip address 192.168.0.21/24 + +service routing protocols model multi-agent +! +dns domain arista.lab +! +ip routing vrf MGMT +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 diff --git a/topologies/training-level-1-3-container-labs/configlets/leaf2-base b/topologies/training-level-1-3-container-labs/configlets/leaf2-base new file mode 100644 index 000000000..22fffb444 --- /dev/null +++ b/topologies/training-level-1-3-container-labs/configlets/leaf2-base @@ -0,0 +1,15 @@ +hostname leaf2 +! +interface Management 0 + vrf MGMT + ip address 192.168.0.22/24 + + +! +service routing protocols model multi-agent +! +dns domain arista.lab +! +ip routing vrf MGMT +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 diff --git a/topologies/training-level-1-3-container-labs/configlets/leaf3-base b/topologies/training-level-1-3-container-labs/configlets/leaf3-base new file mode 100644 index 000000000..37e7bc8d3 --- /dev/null +++ b/topologies/training-level-1-3-container-labs/configlets/leaf3-base @@ -0,0 +1,13 @@ +hostname leaf3 +! +interface Management 0 + vrf MGMT + ip address 192.168.0.23/24 + +service routing protocols model multi-agent +! +dns domain arista.lab +! +ip routing vrf MGMT +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 diff --git a/topologies/training-level-1-3-container-labs/configlets/leaf4-base b/topologies/training-level-1-3-container-labs/configlets/leaf4-base new file mode 100644 index 000000000..f0cff7b25 --- /dev/null +++ b/topologies/training-level-1-3-container-labs/configlets/leaf4-base @@ -0,0 +1,13 @@ +hostname leaf4 +! +interface Management 0 + vrf MGMT + ip address 192.168.0.24/24 + +service routing protocols model multi-agent +! +dns domain arista.lab +! +ip routing vrf MGMT +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 diff --git a/topologies/training-level-1-3-container-labs/configlets/spine1-base b/topologies/training-level-1-3-container-labs/configlets/spine1-base new file mode 100644 index 000000000..5e9d072b1 --- /dev/null +++ b/topologies/training-level-1-3-container-labs/configlets/spine1-base @@ -0,0 +1,14 @@ +hostname spine1 +! +interface Management 0 + vrf MGMT + ip address 192.168.0.11/24 + +! +service routing protocols model multi-agent +! +dns domain arista.lab +! +ip routing vrf MGMT +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 diff --git a/topologies/training-level-1-3-container-labs/configlets/spine2-base b/topologies/training-level-1-3-container-labs/configlets/spine2-base new file mode 100644 index 000000000..cc9d0bef1 --- /dev/null +++ b/topologies/training-level-1-3-container-labs/configlets/spine2-base @@ -0,0 +1,13 @@ +hostname spine2 +! +interface Management 0 + vrf MGMT + ip address 192.168.0.12/24 + +service routing protocols model multi-agent +! +dns domain arista.lab +! +ip routing vrf MGMT +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 diff --git a/topologies/training-level-1-3-container-labs/configlets/spine3-base b/topologies/training-level-1-3-container-labs/configlets/spine3-base new file mode 100644 index 000000000..853f6564a --- /dev/null +++ b/topologies/training-level-1-3-container-labs/configlets/spine3-base @@ -0,0 +1,14 @@ +hostname spine3 +! +interface Management 0 + vrf MGMT + ip address 192.168.0.13/24 + +! +service routing protocols model multi-agent +! +dns domain arista.lab +! +ip routing vrf MGMT +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 diff --git a/topologies/training-level-1-3-container-labs/configlets/spine4-base b/topologies/training-level-1-3-container-labs/configlets/spine4-base new file mode 100644 index 000000000..240453581 --- /dev/null +++ b/topologies/training-level-1-3-container-labs/configlets/spine4-base @@ -0,0 +1,14 @@ +hostname spine4 +! +interface Management 0 + vrf MGMT + ip address 192.168.0.14/24 + +! +service routing protocols model multi-agent +! +dns domain arista.lab +! +ip routing vrf MGMT +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 diff --git a/topologies/training-level-1-3-container-labs/files/.ansible.cfg b/topologies/training-level-1-3-container-labs/files/.ansible.cfg new file mode 100644 index 000000000..14c806515 --- /dev/null +++ b/topologies/training-level-1-3-container-labs/files/.ansible.cfg @@ -0,0 +1,2 @@ +[defaults] +host_key_checking = False diff --git a/topologies/training-level-1-3-container-labs/files/.screenrc b/topologies/training-level-1-3-container-labs/files/.screenrc new file mode 100644 index 000000000..1d70f5e42 --- /dev/null +++ b/topologies/training-level-1-3-container-labs/files/.screenrc @@ -0,0 +1,23 @@ +# Turn off the startup message. +startup_message off +# Set the caption to the active windows. +caption always "%-Lw%{= BW}%50>%n%f* %t%{-}%+Lw%<" + +term screen-256color + +# New screens for various processes. +# Example: screen -t +# screen -t 7050SX-128 0 ssh aristaadmin@192.100.37.128 +screen 1 ssh 192.168.0.4 +screen -t CVP 2 ssh 192.168.0.5 +screen -t Spine1 3 ssh 192.168.0.11 +screen -t Spine2 4 ssh 192.168.0.12 +screen -t Spine3 5 ssh 192.168.0.13 +screen -t Leaf1 6 ssh 192.168.0.21 +screen -t Leaf2 7 ssh 192.168.0.22 +screen -t Leaf3 8 ssh 192.168.0.23 +screen -t Leaf4 9 ssh 192.168.0.24 +screen -t Borderleaf1 10 ssh 192.168.0.25 +screen -t Borderlead2 11 ssh 192.168.0.26 +screen -t Host1 15 ssh 192.168.0.51 +screen -t Host2 16 ssh 192.168.0.52 diff --git a/topologies/training-level-1-3-container-labs/files/MenuOptions.yaml b/topologies/training-level-1-3-container-labs/files/MenuOptions.yaml new file mode 100644 index 000000000..f68e2261d --- /dev/null +++ b/topologies/training-level-1-3-container-labs/files/MenuOptions.yaml @@ -0,0 +1,214 @@ +--- +options: + reset: + - command: "/usr/local/bin/ConfigureTopology.py && bash /home/arista/Broadcaster/pushHostDefaultConfig.sh" + description: "Reset All Devices to Base ATD (reset)" + vxlan: + - command: "/usr/local/bin/ConfigureTopology.py -t vxlan" + description: "VXLAN Lab (vxlan)" + l2evpn: + - command: "/usr/local/bin/ConfigureTopology.py -t l2evpn" + description: "L2-EVPN Lab (l2evpn)" + l3evpn: + - command: "/usr/local/bin/ConfigureTopology.py -t l3evpn" + description: "L3-EVPN Lab (l3evpn)" + aamh: + - command: "/usr/local/bin/ConfigureTopology.py -t aamh" + description: "Active-Active Multi Homing lab (aamh)" + pim: + - command: "/usr/local/bin/ConfigureTopology.py -t aamh" + description: "PIM Lab (pim)" +labconfiglets: + reset: + spine1: + - "spine1-base" + spine2: + - "spine2-base" + spine3: + - "spine3-base" + leaf1: + - "leaf1-base" + leaf2: + - "leaf2-base" + leaf3: + - "leaf3-base" + leaf4: + - "leaf4-base" + host1: + - "host1-base" + host2: + - "host2-base" + borderleaf1: + - "borderleaf1-base" + borderleaf2: + - "borderleaf2-base" + vxlan: + spine1: + - "spine1-base" + - "Spine-1-VXALN-Begin" + spine2: + - "spine2-base" + - "Spine-2-VXALN-Begin" + spine3: + - "spine3-base" + - "Spine-3-VXALN-Begin" + leaf1: + - "leaf1-base" + - "Leaf-1-VXALN-Begin" + leaf2: + - "leaf2-base" + - "Leaf-2-VXALN-Begin" + leaf3: + - "leaf3-base" + - "leaf-3-VXALN-Begin" + leaf4: + - "leaf4-base" + - "leaf-4-VXALN-Begin" + host1: + - "host1-base" + - "Host-1-VXALN-Begin" + host2: + - "host2-base" + - "Host-2-VXALN-Begin" + borderleaf1: + - "borderleaf1-base" + - "Borderleaf-1-VXALN-Begin" + borderleaf2: + - "borderleaf2-base" + - "Borderleaf-2-VXALN-Begin" + l2evpn: + spine1: + - "spine1-base" + - "Spine-1-L2EVPN-Begin" + spine2: + - "spine2-base" + - "Spine-2-L2EVPN-Begin" + spine3: + - "spine3-base" + - "Spine-3-L2EVPN-Begin" + leaf1: + - "leaf1-base" + - "Leaf-1-L2EVPN-Begin" + leaf2: + - "leaf2-base" + - "Leaf-2-L2EVPN-Begin" + leaf3: + - "leaf3-base" + - "Leaf-3-L2EVPN-Begin" + leaf4: + - "leaf4-base" + - "Leaf-4-L2EVPN-Begin" + host1: + - "host1-base" + - "Host-1-L2EVPN-Begin" + host2: + - "host2-base" + - "Host-2-L2EVPN-Begin" + borderleaf1: + - "borderleaf1-base" + - "Borderleaf-1-L2EVPN-Begin" + borderleaf2: + - "borderleaf2-base" + - "Borderleaf-2-L2EVPN-Begin" + l3evpn: + spine1: + - "spine1-base" + - "Spine-1-L3EVPN-Begin" + spine2: + - "spine2-base" + - "Spine-2-L3EVPN-Begin" + spine3: + - "spine3-base" + - "Spine-3-L3EVPN-Begin" + leaf1: + - "leaf1-base" + - "Leaf-1-L3EVPN-Begin" + leaf2: + - "leaf2-base" + - "Leaf-2-L3EVPN-Begin" + leaf3: + - "leaf3-base" + - "Leaf-3-L3EVPN-Begin" + leaf4: + - "leaf4-base" + - "Leaf-4-L3EVPN-Begin" + host1: + - "host1-base" + - "Host-1-L3EVPN-Begin" + host2: + - "host2-base" + - "Host-2-L3EVPN-Begin" + borderleaf1: + - "borderleaf1-base" + - "Borderleaf-1-L3EVPN-Begin" + borderleaf2: + - "borderleaf2-base" + - "Borderleaf-2-L3EVPN-Begin" + aamh: + spine1: + - "spine1-base" + - "Spine-1-AAMH-Begin" + spine2: + - "spine2-base" + - "Spine-2-AAMH-Begin" + spine3: + - "spine3-base" + - "Spine-3-AAMH-Begin" + leaf1: + - "leaf1-base" + - "Leaf-1-AAMH-Begin" + leaf2: + - "leaf2-base" + - "Leaf-2-AAMH-Begin" + leaf3: + - "leaf3-base" + - "Leaf-3-AAMH-Begin" + leaf4: + - "leaf4-base" + - "Leaf-4-AAMH-Begin" + host1: + - "host1-base" + - "Host-1-AAMH-Begin" + host2: + - "host2-base" + - "Host-2-AAMH-Begin" + borderleaf1: + - "borderleaf1-base" + - "Borderleaf-1-AAMH-Begin" + borderleaf2: + - "borderleaf2-base" + - "Borderleaf-2-AAMH-Begin" + pim: + spine1: + - "spine1-base" + - "Spine-1-PIM-Begin" + spine2: + - "spine2-base" + - "Spine-2-PIM-Begin" + spine3: + - "spine3-base" + - "Spine-3-PIM-Begin" + leaf1: + - "leaf1-base" + - "Leaf-1-PIM-Begin" + leaf2: + - "leaf2-base" + - "Leaf-2-PIM-Begin" + leaf3: + - "leaf3-base" + - "Leaf-3-PIM-Begin" + leaf4: + - "leaf4-base" + - "Leaf-4-PIM-Begin" + host1: + - "host1-base" + - "Host-1-PIM-Begin" + host2: + - "host2-base" + - "Host-2-PIM-Begin" + borderleaf1: + - "borderleaf1-base" + - "Borderleaf-1-PIM-Begin" + borderleaf2: + - "borderleaf2-base" + - "Borderleaf-2-PIM-Begin" \ No newline at end of file diff --git a/topologies/training-level-1-3-container-labs/files/apps/coder/coder.yaml b/topologies/training-level-1-3-container-labs/files/apps/coder/coder.yaml new file mode 100644 index 000000000..80cc852d1 --- /dev/null +++ b/topologies/training-level-1-3-container-labs/files/apps/coder/coder.yaml @@ -0,0 +1,4 @@ +bind-addr: 127.0.0.1:8080 +auth: password +password: {ARISTA_REPLACE} +cert: false \ No newline at end of file diff --git a/topologies/training-level-1-3-container-labs/files/apps/coder/labfiles/.placeholder b/topologies/training-level-1-3-container-labs/files/apps/coder/labfiles/.placeholder new file mode 100644 index 000000000..e69de29bb diff --git a/topologies/training-level-1-3-container-labs/files/apps/gui/host5/arista/host-startup.sh b/topologies/training-level-1-3-container-labs/files/apps/gui/host5/arista/host-startup.sh new file mode 100644 index 000000000..16eafb783 --- /dev/null +++ b/topologies/training-level-1-3-container-labs/files/apps/gui/host5/arista/host-startup.sh @@ -0,0 +1,17 @@ +sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 4EB27DB2A3B88B8B +sudo apt-get update +sudo apt install openssh-server -y +sudo service ssh start +sudo apt-get install ufw -y +sudo ufw enable +sudo ufw allow 22 +sudo ufw disable +useradd -rm -d /home/arista -s /bin/bash -g root -G sudo -u 1000 arista +echo 'arista:arista123' | chpasswd +service ssh start +sudo apt install ifenslave -y +sudo apt install iputils-ping -y +sudo add-apt-repository ppa:wireshark-dev/stable -y +sudo apt-get install filezilla -y +sudo apt-get install vsftpd -y +sudo service vsftpd restart \ No newline at end of file diff --git a/topologies/training-level-1-3-container-labs/files/apps/gui/host6/arista/host-startup.sh b/topologies/training-level-1-3-container-labs/files/apps/gui/host6/arista/host-startup.sh new file mode 100644 index 000000000..16eafb783 --- /dev/null +++ b/topologies/training-level-1-3-container-labs/files/apps/gui/host6/arista/host-startup.sh @@ -0,0 +1,17 @@ +sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 4EB27DB2A3B88B8B +sudo apt-get update +sudo apt install openssh-server -y +sudo service ssh start +sudo apt-get install ufw -y +sudo ufw enable +sudo ufw allow 22 +sudo ufw disable +useradd -rm -d /home/arista -s /bin/bash -g root -G sudo -u 1000 arista +echo 'arista:arista123' | chpasswd +service ssh start +sudo apt install ifenslave -y +sudo apt install iputils-ping -y +sudo add-apt-repository ppa:wireshark-dev/stable -y +sudo apt-get install filezilla -y +sudo apt-get install vsftpd -y +sudo service vsftpd restart \ No newline at end of file diff --git a/topologies/training-level-1-3-container-labs/files/apps/gui/host7/arista/host-startup.sh b/topologies/training-level-1-3-container-labs/files/apps/gui/host7/arista/host-startup.sh new file mode 100644 index 000000000..16eafb783 --- /dev/null +++ b/topologies/training-level-1-3-container-labs/files/apps/gui/host7/arista/host-startup.sh @@ -0,0 +1,17 @@ +sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 4EB27DB2A3B88B8B +sudo apt-get update +sudo apt install openssh-server -y +sudo service ssh start +sudo apt-get install ufw -y +sudo ufw enable +sudo ufw allow 22 +sudo ufw disable +useradd -rm -d /home/arista -s /bin/bash -g root -G sudo -u 1000 arista +echo 'arista:arista123' | chpasswd +service ssh start +sudo apt install ifenslave -y +sudo apt install iputils-ping -y +sudo add-apt-repository ppa:wireshark-dev/stable -y +sudo apt-get install filezilla -y +sudo apt-get install vsftpd -y +sudo service vsftpd restart \ No newline at end of file diff --git a/topologies/training-level-1-3-container-labs/files/apps/gui/host8/arista/host-startup.sh b/topologies/training-level-1-3-container-labs/files/apps/gui/host8/arista/host-startup.sh new file mode 100644 index 000000000..16eafb783 --- /dev/null +++ b/topologies/training-level-1-3-container-labs/files/apps/gui/host8/arista/host-startup.sh @@ -0,0 +1,17 @@ +sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 4EB27DB2A3B88B8B +sudo apt-get update +sudo apt install openssh-server -y +sudo service ssh start +sudo apt-get install ufw -y +sudo ufw enable +sudo ufw allow 22 +sudo ufw disable +useradd -rm -d /home/arista -s /bin/bash -g root -G sudo -u 1000 arista +echo 'arista:arista123' | chpasswd +service ssh start +sudo apt install ifenslave -y +sudo apt install iputils-ping -y +sudo add-apt-repository ppa:wireshark-dev/stable -y +sudo apt-get install filezilla -y +sudo apt-get install vsftpd -y +sudo service vsftpd restart \ No newline at end of file diff --git a/topologies/training-level-1-3-container-labs/files/apps/ssh/web.json b/topologies/training-level-1-3-container-labs/files/apps/ssh/web.json new file mode 100644 index 000000000..13fac47dd --- /dev/null +++ b/topologies/training-level-1-3-container-labs/files/apps/ssh/web.json @@ -0,0 +1,76 @@ +{ + "listen": { + "ip": "0.0.0.0", + "port": 2222 + }, + "user": { + "name": null, + "password": null, + "privatekey": null + }, + "ssh": { + "host": null, + "port": 22, + "localAddress": null, + "localPort": null, + "term": "xterm-color", + "readyTimeout": 20000, + "keepaliveInterval": 120000, + "keepaliveCountMax": 10, + "allowedSubnets": [ "192.168.0.0/16", "10.0.0.0/8", "172.16.0.0/12" ] + }, + "terminal": { + "cursorBlink": true, + "scrollback": 10000, + "tabStopWidth": 8, + "bellStyle": "sound" + }, + "header": { + "text": null, + "background": "green" + }, + "session": { + "name": "WebSSH2", + "secret": "mysecret" + }, + "options": { + "challengeButton": true, + "allowreauth": true + }, + "algorithms": { + "kex": [ + "ecdh-sha2-nistp256", + "ecdh-sha2-nistp384", + "ecdh-sha2-nistp521", + "diffie-hellman-group-exchange-sha256", + "diffie-hellman-group14-sha1" + ], + "cipher": [ + "aes128-ctr", + "aes192-ctr", + "aes256-ctr", + "aes128-gcm", + "aes128-gcm@openssh.com", + "aes256-gcm", + "aes256-gcm@openssh.com", + "aes256-cbc" + ], + "hmac": [ + "hmac-sha2-256", + "hmac-sha2-512", + "hmac-sha1" + ], + "compress": [ + "none", + "zlib@openssh.com", + "zlib" + ] + }, + "serverlog": { + "client": false, + "server": false + }, + "accesslog": false, + "verify": false, + "safeShutdownDuration": 300 + } \ No newline at end of file diff --git a/topologies/training-level-1-3-container-labs/files/apps/uilanding/modules.yaml b/topologies/training-level-1-3-container-labs/files/apps/uilanding/modules.yaml new file mode 100644 index 000000000..c983faac0 --- /dev/null +++ b/topologies/training-level-1-3-container-labs/files/apps/uilanding/modules.yaml @@ -0,0 +1,62 @@ +topology: + image: "atd-topo.png" + nodes: + Spine1: + coords: "22,218,167,296" + ip: "192.168.0.11" + Spine2: + coords: "356,215,517,300" + ip: "192.168.0.12" + Spine3: + coords: "555,214,724,294" + ip: "192.168.0.13" + Spine4: + coords: "925,218,1077,293" + ip: "192.168.0.14" + Leaf1: + coords: "16,424,165,501" + ip: "192.168.0.21" + Leaf2: + coords: "353,425,520,493" + ip: "192.168.0.22" + Leaf3: + coords: "569,430,714,499" + ip: "192.168.0.23" + Leaf4: + coords: "921,423,1074,502" + ip: "192.168.0.24" + BorderLeaf1: + coords: "370,57,511,138" + ip: "192.168.0.25" + BorderLeaf2: + coords: "561,65,726,145" + ip: "192.168.0.26" + Host1: + coords: "15,534,149,611" + ip: "192.168.0.51" + Host2: + coords: "365,539,504,619" + ip: "192.168.0.52" + Host3: + coords: "566,542,711,620" + ip: "192.168.0.53" + Host4: + coords: "929,542,1075,615" + ip: "192.168.0.54" + servers: + Host5: + coords: "182,545,307,636" + ip: "192.168.0.101" + port : 6001 + Host6: + coords: "183,650,312,744" + ip: "192.168.0.102" + port : 6002 + Host7: + coords: "747,545,875,636" + ip: "192.168.0.103" + port : 6003 + Host8: + coords: "752,645,877,731" + ip: "192.168.0.104" + port : 6004 diff --git a/topologies/training-level-1-3-container-labs/files/apps/webui/.vncpass_clear b/topologies/training-level-1-3-container-labs/files/apps/webui/.vncpass_clear new file mode 100644 index 000000000..cd09dd7a5 --- /dev/null +++ b/topologies/training-level-1-3-container-labs/files/apps/webui/.vncpass_clear @@ -0,0 +1 @@ +@rista1 \ No newline at end of file diff --git a/topologies/training-level-1-3-container-labs/files/cvp/cvp_info.yaml b/topologies/training-level-1-3-container-labs/files/cvp/cvp_info.yaml new file mode 100644 index 000000000..7e796e77f --- /dev/null +++ b/topologies/training-level-1-3-container-labs/files/cvp/cvp_info.yaml @@ -0,0 +1,64 @@ +cvp_info: + containers: + Tenant: + nodes: + Leaf: + parent: Tenant + nodes: + - leaf1 + - leaf2 + - leaf3 + - leaf4 + Borderleaf: + parent: Tenant + nodes: + - borderleaf1 + - borderleaf2 + Spine: + parent: Tenant + nodes: + - spine1 + - spine2 + - spine3 + - spine4 + Hosts: + parent: Tenant + nodes: + - host1 + - host2 + - host3 + - host4 + snapshots: + configlets: + containers: + Tenant: + - ATD-INFRA + netelements: + spine1: + - spine1-base + spine2: + - spine2-base + spine3: + - spine3-base + spine4: + - spine4-base + leaf1: + - leaf1-base + leaf2: + - leaf2-base + borderleaf1: + - borderleaf1-base + borderleaf2: + - borderleaf2-base + leaf3: + - leaf3-base + leaf4: + - leaf4-base + host3: + - host3-base + host4: + - host4-base + host1: + - host1-base + host2: + - host2-base \ No newline at end of file diff --git a/topologies/training-level-1-3-container-labs/files/hosts b/topologies/training-level-1-3-container-labs/files/hosts new file mode 100644 index 000000000..b01ba8483 --- /dev/null +++ b/topologies/training-level-1-3-container-labs/files/hosts @@ -0,0 +1,24 @@ +127.0.0.1 localhost +192.168.0.11 spine1 +192.168.0.12 spine2 +192.168.0.13 spine3 +192.168.0.14 spine4 +192.168.0.21 leaf1 +192.168.0.22 leaf2 +192.168.0.23 leaf3 +192.168.0.24 leaf4 +192.168.0.25 borderleaf1 +192.168.0.26 borderleaf2 +192.168.0.41 server1 +192.168.0.42 server2 +192.168.0.43 server3 +192.168.0.44 server4 +192.168.0.51 host1 +192.168.0.52 host2 +192.168.0.53 host3 +192.168.0.54 host4 +192.168.0.101 host5 +192.168.0.102 host6 +192.168.0.103 host7 +192.168.0.104 host8 +192.168.0.5 cvp diff --git a/topologies/training-level-1-3-container-labs/files/menus/default.yaml b/topologies/training-level-1-3-container-labs/files/menus/default.yaml new file mode 100644 index 000000000..7edae00fc --- /dev/null +++ b/topologies/training-level-1-3-container-labs/files/menus/default.yaml @@ -0,0 +1,2 @@ +--- +default_menu: training-l3.yaml \ No newline at end of file diff --git a/topologies/training-level-1-3-container-labs/files/menus/training-l3.yaml b/topologies/training-level-1-3-container-labs/files/menus/training-l3.yaml new file mode 100644 index 000000000..41133498a --- /dev/null +++ b/topologies/training-level-1-3-container-labs/files/menus/training-l3.yaml @@ -0,0 +1,32 @@ +--- + lab_list: + reset: + additional_commands: + - "bash /home/arista/Broadcaster/pushHostDefaultConfig.sh" + description: "Reset All Devices to Base Lab (reset)" + labconfiglets: + reset: + spine1: + - "spine1-base" + spine2: + - "spine2-base" + spine3: + - "spine3-base" + spine4: + - "spine4-base" + leaf1: + - "leaf1-base" + leaf2: + - "leaf2-base" + leaf3: + - "leaf3-base" + leaf4: + - "leaf4-base" + host1: + - "host1-base" + host2: + - "host2-base" + borderleaf1: + - "borderleaf1-base" + borderleaf2: + - "borderleaf2-base" diff --git a/topologies/training-level-1-3-container-labs/files/scripts/Authenticate-CVP b/topologies/training-level-1-3-container-labs/files/scripts/Authenticate-CVP new file mode 100644 index 000000000..144bb13eb --- /dev/null +++ b/topologies/training-level-1-3-container-labs/files/scripts/Authenticate-CVP @@ -0,0 +1,32 @@ +import requests +import json + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + +# Print user details + +print "User Name:%s\n "%output['username'] +print "First Name: %s\n "%output['user']['firstName'] +print "Last Name: %s\n "%output['user']['lastName'] +print "User Permissions: %s\n "%output['permissionList'] +print "Cookie Jar: %s\n "%cookies diff --git a/topologies/training-level-1-3-container-labs/files/scripts/Authenticate-CVP2 b/topologies/training-level-1-3-container-labs/files/scripts/Authenticate-CVP2 new file mode 100644 index 000000000..3f6bf9190 --- /dev/null +++ b/topologies/training-level-1-3-container-labs/files/scripts/Authenticate-CVP2 @@ -0,0 +1,48 @@ +import requests +import json + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + +# Print user details + +print "User Name:%s\n "%output['username'] +print "First Name: %s\n "%output['user']['firstName'] +print "Last Name: %s\n "%output['user']['lastName'] +print "User Permissions: %s\n "%output['permissionList'] +print "Cookie Jar: %s\n "%cookies + +#Create an HTTP GET request to the CVP server + +getConfigletURL = "/cvpservice/configlet/getConfiglets.do?" +getConfigletParams = {'startIndex':'0','endIndex':'0','type':'Configlet'} +response = requests.get(url+getConfigletURL,cookies=cookies, params=getConfigletParams,verify=False) +assert response.ok +outputConfiglets = response.json() + +# Print Configlet details + +for configlet in outputConfiglets['data']: + print "ConfigletName: %s"%configlet['name'] + print "ConfigletKey: %s"%configlet['key'] + print "\n" + diff --git a/topologies/training-level-1-3-container-labs/files/scripts/Authenticate-CVP3 b/topologies/training-level-1-3-container-labs/files/scripts/Authenticate-CVP3 new file mode 100644 index 000000000..2445806ea --- /dev/null +++ b/topologies/training-level-1-3-container-labs/files/scripts/Authenticate-CVP3 @@ -0,0 +1,95 @@ +import requests +import json + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + +# Print user details + +print "User Name:%s\n "%output['username'] +print "First Name: %s\n "%output['user']['firstName'] +print "Last Name: %s\n "%output['user']['lastName'] +print "User Permissions: %s\n "%output['permissionList'] +print "Cookie Jar: %s\n "%cookies + +#Create an HTTP GET request to the CVP server + +getConfigletURL = "/cvpservice/configlet/getConfiglets.do?" +getConfigletParams = {'startIndex':'0','endIndex':'0','type':'Configlet'} +response = requests.get(url+getConfigletURL,cookies=cookies, params=getConfigletParams,verify=False) +assert response.ok +outputConfiglets = response.json() + +# Print Configlet details + +for configlet in outputConfiglets['data']: + print "ConfigletName: %s"%configlet['name'] + print "ConfigletKey: %s"%configlet['key'] + print "\n" +# Create an HTTP GET request to the CVP server + +getConfigletHistoryURL = "/cvpservice/configlet/getConfigletHistory.do?" +getConfigletParams = {'configletId':'configlet_32_438214998013','startIndex':'0','endIndex':'0'} +response = requests.get(url+getConfigletHistoryURL,cookies=cookies, params=getConfigletParams,verify=False) +assert response.ok +outputConfigletHistory = response.json() + +# Print Configlet details + +for entry in outputConfigletHistory['configletHistory']: + print "ConfigletKey: %s"%entry['key'] + print "ConfigletOldConfig: %s"%entry['oldConfig'] + print "ConfigletNewConfig: %s"%entry['newConfig'] + print "\n" + + +# Create an HTTP GET request to the CVP server + +getConfigletDetailURL = "/cvpservice/configlet/getConfigletByName.do?" +getConfigletParams = {'name':'VLANs'} +response = requests.get(url+getConfigletDetailURL,cookies=cookies, params=getConfigletParams,verify=False) +assert response.ok +outputConfigletDetail = response.json() + +# Print Configlet details + +print "ConfigletKey: %s"%outputConfigletDetail['key'] +print "ConfigletName: %s"%outputConfigletDetail['name'] +print "ConfigletConfig: %s"%outputConfigletDetail['config'] +print "ConfigletNote: %s"%outputConfigletDetail['note'] +print "\n" + + +# Create an HTTP POST request to the CVP server + +headers = { 'Content-Type': 'application/json' } +postConfigletChangeURL = "/cvpservice/configlet/updateConfiglet.do" +changeData = json.dumps({"config": "! some configuration here", "key": "configlet_32_438214998013", "name": "VLANs"}) +response = requests.post(url+postConfigletChangeURL, cookies=cookies, data=changeData,headers=headers,verify=False) +assert response.ok +outputConfigletChange = response.json() + +# Print Configlet details + +print "ConfigletChange: %s"%outputConfigletChange['data'] +print "\n" + diff --git a/topologies/training-level-1-3-container-labs/files/scripts/Configlet1 b/topologies/training-level-1-3-container-labs/files/scripts/Configlet1 new file mode 100644 index 000000000..3f6bf9190 --- /dev/null +++ b/topologies/training-level-1-3-container-labs/files/scripts/Configlet1 @@ -0,0 +1,48 @@ +import requests +import json + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + +# Print user details + +print "User Name:%s\n "%output['username'] +print "First Name: %s\n "%output['user']['firstName'] +print "Last Name: %s\n "%output['user']['lastName'] +print "User Permissions: %s\n "%output['permissionList'] +print "Cookie Jar: %s\n "%cookies + +#Create an HTTP GET request to the CVP server + +getConfigletURL = "/cvpservice/configlet/getConfiglets.do?" +getConfigletParams = {'startIndex':'0','endIndex':'0','type':'Configlet'} +response = requests.get(url+getConfigletURL,cookies=cookies, params=getConfigletParams,verify=False) +assert response.ok +outputConfiglets = response.json() + +# Print Configlet details + +for configlet in outputConfiglets['data']: + print "ConfigletName: %s"%configlet['name'] + print "ConfigletKey: %s"%configlet['key'] + print "\n" + diff --git a/topologies/training-level-1-3-container-labs/files/scripts/ConfigletChange b/topologies/training-level-1-3-container-labs/files/scripts/ConfigletChange new file mode 100644 index 000000000..691ff5864 --- /dev/null +++ b/topologies/training-level-1-3-container-labs/files/scripts/ConfigletChange @@ -0,0 +1,40 @@ +import requests +import json + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + + +# Create an HTTP POST request to the CVP server + +headers = { 'Content-Type': 'application/json' } +postConfigletChangeURL = "/cvpservice/configlet/addNoteToConfiglet.do" +changeData = json.dumps({"note": "Configlet Changed by API", "key": "configlet_516_7018635812307"}) +response = requests.post(url+postConfigletChangeURL, cookies=cookies, data=changeData,headers=headers,verify=False) +assert response.ok +outputConfigletChange = response.json() + +# Print Configlet details + +print "ConfigletChange: %s"%outputConfigletChange['data'] +print "\n" + diff --git a/topologies/training-level-1-3-container-labs/files/scripts/ConfigletDetail b/topologies/training-level-1-3-container-labs/files/scripts/ConfigletDetail new file mode 100644 index 000000000..eb2a85937 --- /dev/null +++ b/topologies/training-level-1-3-container-labs/files/scripts/ConfigletDetail @@ -0,0 +1,43 @@ +import requests +import json + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + +# Create an HTTP GET request to the CVP server + +getConfigletDetailURL = "/cvpservice/configlet/getConfigletByName.do?" +getConfigletParams = {'name':'VLANs'} +response = requests.get(url+getConfigletDetailURL,cookies=cookies, params=getConfigletParams,verify=False) +assert response.ok +outputConfigletDetail = response.json() + +# Print Configlet details + +print "ConfigletKey: %s"%outputConfigletDetail['key'] +print "ConfigletName: %s"%outputConfigletDetail['name'] +print "ConfigletConfig: %s"%outputConfigletDetail['config'] +print "ConfigletNote: %s"%outputConfigletDetail['note'] +print "\n" + + + diff --git a/topologies/training-level-1-3-container-labs/files/scripts/ConfigletHistory b/topologies/training-level-1-3-container-labs/files/scripts/ConfigletHistory new file mode 100644 index 000000000..71f1ac693 --- /dev/null +++ b/topologies/training-level-1-3-container-labs/files/scripts/ConfigletHistory @@ -0,0 +1,41 @@ +import requests +import json + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + +# Create an HTTP GET request to the CVP server + +getConfigletHistoryURL = "/cvpservice/configlet/getConfigletHistory.do?" +getConfigletParams = {'configletId':'configlet_344_7351420097365','startIndex':'0','endIndex':'0'} +response = requests.get(url+getConfigletHistoryURL,cookies=cookies, params=getConfigletParams,verify=False) +assert response.ok +outputConfigletHistory = response.json() + +# Print Configlet details + +for entry in outputConfigletHistory['configletHistory']: + print "ConfigletKey: %s"%entry['key'] + print "ConfigletOldConfig: \n%s"%entry['oldConfig'] + print "ConfigletNewConfig: \n%s"%entry['newConfig'] + print "\n" + diff --git a/topologies/training-level-1-3-container-labs/files/scripts/TaskBase b/topologies/training-level-1-3-container-labs/files/scripts/TaskBase new file mode 100644 index 000000000..6f8deccaf --- /dev/null +++ b/topologies/training-level-1-3-container-labs/files/scripts/TaskBase @@ -0,0 +1,59 @@ +import requests +import json + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + + +# Create an HTTP GET request to the CVP server + +getTasksURL = "/cvpservice/task/getTasks.do?" +getTasksParams = {'startIndex':'0','endIndex':'0','queryparam':'Pending'} +response = requests.get(url+getTasksURL,cookies=cookies, params=getTasksParams,verify=False) +assert response.ok +outputPendingTasks = response.json() + + +# Print Tasks Created by Current User +taskList = [ ] +for entry in outputPendingTasks['data']: + if str(entry['createdBy']) == str(CVP_USER): + print "TaskNumber: %s"%entry['workOrderId'] + taskList.append(str(entry['workOrderId'])) +print "TaskList: %s"%taskList + + + +# Create an HTTP POST request to the CVP server + +headers = { 'Content-Type': 'application/json' } +postTaskLogURL = "/cvpservice/workflow/addWorkOrderLog.do" +taskLogData = json.dumps({"taskId": taskList[1],"message": "This is a test Change","source": "CVP REST API"}) +response = requests.post(url+postTaskLogURL, cookies=cookies, data=taskLogData,headers=headers,verify=False) +assert response.ok +outputTaskLog = response.json() + +# Print Configlet details + +print "TaskLogAmmend: %s"%outputTaskLog['data'] +print "\n" + diff --git a/topologies/training-level-1-3-container-labs/files/scripts/TaskCVP1 b/topologies/training-level-1-3-container-labs/files/scripts/TaskCVP1 new file mode 100644 index 000000000..1ebd05764 --- /dev/null +++ b/topologies/training-level-1-3-container-labs/files/scripts/TaskCVP1 @@ -0,0 +1,48 @@ +import requests +import json + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + +# Print user details + +print "User Name:%s\n "%output['username'] +print "First Name: %s\n "%output['user']['firstName'] +print "Last Name: %s\n "%output['user']['lastName'] + + +getTasksURL = "/cvpservice/task/getTasks.do?" +getTasksParams = {'startIndex':'0','endIndex':'0'} +response = requests.get(url+getTasksURL,cookies=cookies, params=getTasksParams,verify=False) +assert response.ok +outputPendingTasks = response.json() + + +# Print Tasks Created by Current User +taskList = [ ] +for entry in outputPendingTasks['data']: + if str(entry['createdBy']) == str(CVP_USER): + print( "TaskNumber: %s Description: %s" %(entry['workOrderId'],entry['description'])) + taskList.append(str(entry['workOrderId'])) +#print "TaskList: %s"%taskList + + diff --git a/topologies/training-level-1-3-container-labs/files/scripts/TaskExecute b/topologies/training-level-1-3-container-labs/files/scripts/TaskExecute new file mode 100644 index 000000000..3db487284 --- /dev/null +++ b/topologies/training-level-1-3-container-labs/files/scripts/TaskExecute @@ -0,0 +1,56 @@ +import requests +import json + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + + +# Create an HTTP GET request to the CVP server + +getTasksURL = "/cvpservice/task/getTasks.do?" +getTasksParams = {'startIndex':'0','endIndex':'0','queryparam':'Pending'} +response = requests.get(url+getTasksURL,cookies=cookies, params=getTasksParams,verify=False) +assert response.ok +outputPendingTasks = response.json() + + +# Print Tasks Created by Current User +taskList = [ ] +for entry in outputPendingTasks['data']: + if str(entry['createdBy']) == str(CVP_USER): + print "TaskNumber: %s"%entry['workOrderId'] + taskList.append(str(entry['workOrderId'])) +print "TaskList: %s"%taskList + + + +headers = { 'Content-Type': 'application/json' } +postTaskExecuteURL = "/cvpservice/task/executeTask.do" +for taskNumber in taskList: + executeData = json.dumps({'data': [taskNumber]}) + response = requests.post(url+postTaskExecuteURL, cookies=cookies,data=executeData,headers=headers,verify=False) + assert response.ok + outputExecuteTask = response.json() + print (outputExecuteTask['data']) + print "Task: "+str(taskNumber)+" Execute: "+str(outputExecuteTask['data']) + print "\n" + diff --git a/topologies/training-level-1-3-container-labs/files/scripts/TaskLog b/topologies/training-level-1-3-container-labs/files/scripts/TaskLog new file mode 100644 index 000000000..c835008b8 --- /dev/null +++ b/topologies/training-level-1-3-container-labs/files/scripts/TaskLog @@ -0,0 +1,59 @@ +import requests +import json + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + + +# Create an HTTP GET request to the CVP server + +getTasksURL = "/cvpservice/task/getTasks.do?" +getTasksParams = {'startIndex':'0','endIndex':'0'} +response = requests.get(url+getTasksURL,cookies=cookies, params=getTasksParams,verify=False) +assert response.ok +outputTasks = response.json() + + +# Print Tasks Created by Current User +taskList = [ ] +for entry in outputTasks['data']: + if str(entry['createdBy']) == str(CVP_USER): + print "TaskNumber: %s"%entry['workOrderId'] + taskList.append(str(entry['workOrderId'])) +print "TaskList: %s"%taskList + + + +# Create an HTTP POST request to the CVP server + +headers = { 'Content-Type': 'application/json' } +postTaskLogURL = "/cvpservice/workflow/addWorkOrderLog.do" +taskLogData = json.dumps({"taskId": taskList[0],"message": "This is a test Change","source": "CVP REST API"}) +response = requests.post(url+postTaskLogURL, cookies=cookies, data=taskLogData,headers=headers,verify=False) +assert response.ok +outputTaskLog = response.json() + +# Print Configlet details + +print "TaskLogAmmend: %s"%outputTaskLog['data'] +print "\n" + diff --git a/topologies/training-level-1-3-container-labs/files/scripts/TaskLog1 b/topologies/training-level-1-3-container-labs/files/scripts/TaskLog1 new file mode 100644 index 000000000..c835008b8 --- /dev/null +++ b/topologies/training-level-1-3-container-labs/files/scripts/TaskLog1 @@ -0,0 +1,59 @@ +import requests +import json + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + + +# Create an HTTP GET request to the CVP server + +getTasksURL = "/cvpservice/task/getTasks.do?" +getTasksParams = {'startIndex':'0','endIndex':'0'} +response = requests.get(url+getTasksURL,cookies=cookies, params=getTasksParams,verify=False) +assert response.ok +outputTasks = response.json() + + +# Print Tasks Created by Current User +taskList = [ ] +for entry in outputTasks['data']: + if str(entry['createdBy']) == str(CVP_USER): + print "TaskNumber: %s"%entry['workOrderId'] + taskList.append(str(entry['workOrderId'])) +print "TaskList: %s"%taskList + + + +# Create an HTTP POST request to the CVP server + +headers = { 'Content-Type': 'application/json' } +postTaskLogURL = "/cvpservice/workflow/addWorkOrderLog.do" +taskLogData = json.dumps({"taskId": taskList[0],"message": "This is a test Change","source": "CVP REST API"}) +response = requests.post(url+postTaskLogURL, cookies=cookies, data=taskLogData,headers=headers,verify=False) +assert response.ok +outputTaskLog = response.json() + +# Print Configlet details + +print "TaskLogAmmend: %s"%outputTaskLog['data'] +print "\n" + diff --git a/topologies/training-level-1-3-container-labs/files/scripts/TaskLogView b/topologies/training-level-1-3-container-labs/files/scripts/TaskLogView new file mode 100644 index 000000000..7b34904dd --- /dev/null +++ b/topologies/training-level-1-3-container-labs/files/scripts/TaskLogView @@ -0,0 +1,51 @@ +import requests +import json +import pprint + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + + +# Create an HTTP GET request to the CVP server + +getTasksURL = "/cvpservice/task/getTasks.do?" +getTasksParams = {'startIndex':'0','endIndex':'0'} +response = requests.get(url+getTasksURL,cookies=cookies, params=getTasksParams,verify=False) +assert response.ok +outputTasks = response.json() + +taskList = [ ] +for entry in outputTasks['data']: + if str(entry['createdBy']) == str(CVP_USER): + taskList.append(str(entry['workOrderId'])) + +getTaskLogURL = "/cvpservice/task/getLogsById.do?" +#getTaskLogParams = {'startIndex':'0','endIndex':'0','id':'0'} +getTaskLogParams = {'startIndex':'0','endIndex':'0','id':taskList[0]} +response = requests.get(url+getTaskLogURL,cookies=cookies, params=getTaskLogParams,verify=False) +assert response.ok +outputTaskLog = response.json() + +# Print TaskLog details +print "TaskLogOutput: %s" %outputTaskLog['data'] +print "\n" + diff --git a/topologies/training-level-1-3-container-labs/files/scripts/TaskNote b/topologies/training-level-1-3-container-labs/files/scripts/TaskNote new file mode 100644 index 000000000..6cd1d6cfd --- /dev/null +++ b/topologies/training-level-1-3-container-labs/files/scripts/TaskNote @@ -0,0 +1,52 @@ +import requests +import json +import pprint + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + + +# Create an HTTP GET request to the CVP server + +getTasksURL = "/cvpservice/task/getTasks.do?" +getTasksParams = {'startIndex':'0','endIndex':'0'} +response = requests.get(url+getTasksURL,cookies=cookies, params=getTasksParams,verify=False) +assert response.ok +outputTasks = response.json() + +taskList = [ ] +for entry in outputTasks['data']: + if str(entry['createdBy']) == str(CVP_USER): + taskList.append(str(entry['workOrderId'])) + +headers = { 'Content-Type': 'application/json' } +postTaskNoteURL = "/cvpservice/task/addNoteToTask.do" +taskNoteData = json.dumps({"workOrderId": taskList[0],"note": "This is a test Change using the API"}) +response = requests.post(url+postTaskNoteURL, cookies=cookies, data=taskNoteData,headers=headers,verify=False) +assert response.ok +outputTaskNote = response.json() + +# Print Task details + +print "TaskNoteAmmend: %s"%outputTaskNote['data'] +print "\n" + diff --git a/topologies/training-level-1-3-container-labs/labguides/.gitignore b/topologies/training-level-1-3-container-labs/labguides/.gitignore new file mode 100644 index 000000000..ed86553f4 --- /dev/null +++ b/topologies/training-level-1-3-container-labs/labguides/.gitignore @@ -0,0 +1,2 @@ +.DS_Store +build/ diff --git a/topologies/training-level-1-3-container-labs/labguides/Makefile b/topologies/training-level-1-3-container-labs/labguides/Makefile new file mode 100644 index 000000000..874ed2529 --- /dev/null +++ b/topologies/training-level-1-3-container-labs/labguides/Makefile @@ -0,0 +1,20 @@ +# Minimal makefile for Sphinx documentation +# + +# You can set these variables from the command line. +SPHINXOPTS = +SPHINXBUILD = python -msphinx +SPHINXPROJ = ATD +SOURCEDIR = source +BUILDDIR = build + +# Put it first so that "make" without argument is like "make help". +help: + @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) + +.PHONY: help Makefile + +# Catch-all target: route all unknown targets to Sphinx using the new +# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). +%: Makefile + @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) \ No newline at end of file diff --git a/topologies/training-level-1-3-container-labs/labguides/readme.md b/topologies/training-level-1-3-container-labs/labguides/readme.md new file mode 100644 index 000000000..5a5369ecd --- /dev/null +++ b/topologies/training-level-1-3-container-labs/labguides/readme.md @@ -0,0 +1,12 @@ +# Lab Guides +In this folder are rST (restructured text) formatted lab guides for the ATD event. + +## Building +To build the documentation, you will need to install Sphinx and sphinx_bootstrap_theme with `pip`: + +`pip install sphinx sphinx_bootstrap_theme` + +## Contributing +At some point, this section may expand, but for now please make sure to review existing files for formatting guidelines. + +Please see https://github.com/ralsina/rst-cheatsheet/blob/master/rst-cheatsheet.rst for a cheat sheet. \ No newline at end of file diff --git a/topologies/training-level-1-3-container-labs/labguides/source/_static/arista_logo.png b/topologies/training-level-1-3-container-labs/labguides/source/_static/arista_logo.png new file mode 100644 index 000000000..2376e72b9 Binary files /dev/null and b/topologies/training-level-1-3-container-labs/labguides/source/_static/arista_logo.png differ diff --git a/topologies/training-level-1-3-container-labs/labguides/source/_static/arista_logo_160by26.png b/topologies/training-level-1-3-container-labs/labguides/source/_static/arista_logo_160by26.png new file mode 100644 index 000000000..d0d0cbeec Binary files /dev/null and b/topologies/training-level-1-3-container-labs/labguides/source/_static/arista_logo_160by26.png differ diff --git a/topologies/training-level-1-3-container-labs/labguides/source/_static/arista_logo_320by52.png b/topologies/training-level-1-3-container-labs/labguides/source/_static/arista_logo_320by52.png new file mode 100644 index 000000000..43dfa7ed2 Binary files /dev/null and b/topologies/training-level-1-3-container-labs/labguides/source/_static/arista_logo_320by52.png differ diff --git a/topologies/training-level-1-3-container-labs/labguides/source/_static/cloudvision-icon.png b/topologies/training-level-1-3-container-labs/labguides/source/_static/cloudvision-icon.png new file mode 100644 index 000000000..c309ed98e Binary files /dev/null and b/topologies/training-level-1-3-container-labs/labguides/source/_static/cloudvision-icon.png differ diff --git a/topologies/training-level-1-3-container-labs/labguides/source/_static/logo.jpg b/topologies/training-level-1-3-container-labs/labguides/source/_static/logo.jpg new file mode 100644 index 000000000..6eda41f7e Binary files /dev/null and b/topologies/training-level-1-3-container-labs/labguides/source/_static/logo.jpg differ diff --git a/topologies/training-level-1-3-container-labs/labguides/source/_static/my-styles.css b/topologies/training-level-1-3-container-labs/labguides/source/_static/my-styles.css new file mode 100644 index 000000000..1150528ee --- /dev/null +++ b/topologies/training-level-1-3-container-labs/labguides/source/_static/my-styles.css @@ -0,0 +1,41 @@ +body { + background-color: #FFFFFF; + color: #002859 +} + +.navbar-inverse { + background-image: -webkit-linear-gradient(#6d94bf, #446e9b 50%, #002859); + background-image: -o-linear-gradient(#6d94bf, #446e9b 50%, #002859); + background-image: -webkit-gradient(linear, left top, left bottom, from(#6d94bf), color-stop(50%, #446e9b), to(#002859)); + background-image: linear-gradient(#6d94bf, #446e9b 50%, #002859); + background-repeat: no-repeat; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff6d94bf', endColorstr='#ff002859', GradientType=0); + -webkit-filter: none; + filter: none; + border: 1px solid #345578; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.3) +} + +.navbar-brand { + background: url("arista_logo_320by52.png") center / contain no-repeat; + display: inline-block; + width: 1px; + padding: 0 10px 0 60px; + margin-right: 30px; + margin-left: -30px; +} + +.navbar-brand>img { + display: inline-block; + padding: 0 100px 0 0px; + margin-right: 20px; +} +a.navbar-brand { + display: inline-block; + padding: 15px 0 0 120px; +} + +footer { + background-color: #002859; + color: #FFFFFF; +} diff --git a/topologies/training-level-1-3-container-labs/labguides/source/conf.py b/topologies/training-level-1-3-container-labs/labguides/source/conf.py new file mode 100644 index 000000000..afccec09c --- /dev/null +++ b/topologies/training-level-1-3-container-labs/labguides/source/conf.py @@ -0,0 +1,247 @@ +# -*- coding: utf-8 -*- +# +# ATD documentation build configuration file, created by +# sphinx-quickstart on Tue Apr 17 10:00:04 2018. +# +# This file is execfile()d with the current directory set to its +# containing dir. +# +# Note that not all possible configuration values are present in this +# autogenerated file. +# +# All configuration values have a default; values that are commented out +# serve to show the default. + +# If extensions (or modules to document with autodoc) are in another directory, +# add these directories to sys.path here. If the directory is relative to the +# documentation root, use os.path.abspath to make it absolute, like shown here. +# +# import os +# import sys +# sys.path.insert(0, os.path.abspath('.')) + +import sphinx_bootstrap_theme + +# Importing datetime module to auto update copyright year +from datetime import date + +# -- General configuration ------------------------------------------------ + +# If your documentation needs a minimal Sphinx version, state it here. +# +# needs_sphinx = '1.0' + +# Add any Sphinx extension module names here, as strings. They can be +# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom +# ones. + +# Add any paths that contain templates here, relative to this directory. +templates_path = ['_templates'] + +# The suffix(es) of source filenames. +# You can specify multiple suffix as a list of string: +# +# source_suffix = ['.rst', '.md'] +source_suffix = '.rst' + +# The master toctree document. +master_doc = 'index' + +# General information about the project. +# Updating copyright var to auto update with current year +project = u'Arista ATD' +copyright = u'{0}, Arista Networks'.format(date.today().year) +author = u'Arista ATD atd-help@arista.com' + +# Show Source +html_show_sourcelink = False + +# The version info for the project you're documenting, acts as replacement for +# |version| and |release|, also used in various other places throughout the +# built documents. +# +# The short X.Y version. +version = u'Version 3.0' +# The full version, including alpha/beta/rc tags. +release = u'1' + +# The language for content autogenerated by Sphinx. Refer to documentation +# for a list of supported languages. +# +# This is also used if you do content translation via gettext catalogs. +# Usually you set "language" from the command line for these cases. +language = None + +# List of patterns, relative to source directory, that match files and +# directories to ignore when looking for source files. +# This patterns also effect to html_static_path and html_extra_path +exclude_patterns = [] + +# The name of the Pygments (syntax highlighting) style to use. +pygments_style = 'sphinx' + +# If true, `todo` and `todoList` produce output, else they produce nothing. +todo_include_todos = False + + +# -- Options for HTML output ---------------------------------------------- + +# The theme to use for HTML and HTML Help pages. See the documentation for +# a list of builtin themes. +# +#html_theme = 'alabaster' +html_theme = 'bootstrap' +html_theme_path = sphinx_bootstrap_theme.get_html_theme_path() + +# Add any paths that contain custom static files (such as style sheets) here, +# relative to this directory. They are copied after the builtin static files, +# so a file named "default.css" will overwrite the builtin "default.css". +html_static_path = ['_static'] + +# Theme options are theme-specific and customize the look and feel of a theme +# further. For a list of options available for each theme, see the +# documentation. +# +html_theme_options = { + # Navigation bar title. (Default: ``project`` value) + 'navbar_title': "ATD", + + # Tab name for entire site. (Default: "Site") + 'navbar_site_name': "Table of Contents", + + # A list of tuples containing pages or urls to link to. + # Valid tuples should be in the following forms: + # (name, page) # a link to a page + # (name, "/aa/bb", 1) # a link to an arbitrary relative url + # (name, "http://example.com", True) # arbitrary absolute url + # Note the "1" or "True" value above as the third argument to indicate + # an arbitrary url. + 'navbar_links': [ + ("Arista", "http://www.arista.com", True), + ], + + # Render the next and previous page links in navbar. (Default: true) + 'navbar_sidebarrel': True, + + # Render the current pages TOC in the navbar. (Default: true) + 'navbar_pagenav': False, + + # Tab name for the current pages TOC. (Default: "Page") + 'navbar_pagenav_name': "Page", + + # Global TOC depth for "site" navbar tab. (Default: 1) + # Switching to -1 shows all levels. + 'globaltoc_depth': 2, + + # Include hidden TOCs in Site navbar? + # + # Note: If this is "false", you cannot have mixed ``:hidden:`` and + # non-hidden ``toctree`` directives in the same page, or else the build + # will break. + # + # Values: "true" (default) or "false" + 'globaltoc_includehidden': "true", + + # HTML navbar class (Default: "navbar") to attach to
    element. + # For black navbar, do "navbar navbar-inverse" + #'navbar_class': "navbar navbar-inverse", + 'navbar_class': "navbar", + + # Fix navigation bar to top of page? + # Values: "true" (default) or "false" + 'navbar_fixed_top': "true", + + # Location of link to source. + # Options are "nav" (default), "footer" or anything else to exclude. + #'source_link_position': "nav", + + # Bootswatch (http://bootswatch.com/) theme. + # + # Options are nothing (default) or the name of a valid theme + # such as "cosmo" or "sandstone". + # + # The set of valid themes depend on the version of Bootstrap + # that's used (the next config option). + # + # Currently, the supported themes are: + # - Bootstrap 2: https://bootswatch.com/2 + # - Bootstrap 3: https://bootswatch.com/3 + 'bootswatch_theme': "spacelab", + + # Choose Bootstrap version. + # Values: "3" (default) or "2" (in quotes) + 'bootstrap_version': "3", +} + +# The name for this set of Sphinx documents. If None, it defaults to +# " v documentation". +#html_title = "AristaATD" + +# A shorter title for the navigation bar. Default is the same as html_title. +#html_short_title = "Demo" + +# (Optional) Logo. Should be small enough to fit the navbar (ideally 24x24). +# Path should be relative to the ``_static`` files directory. +#html_logo = "cloudvision-icon.png" + +# -- Options for HTMLHelp output ------------------------------------------ + +# Output file base name for HTML help builder. +htmlhelp_basename = 'AristaATD' + + +# -- Options for LaTeX output --------------------------------------------- + +latex_elements = { + # The paper size ('letterpaper' or 'a4paper'). + # + # 'papersize': 'letterpaper', + + # The font size ('10pt', '11pt' or '12pt'). + # + # 'pointsize': '10pt', + + # Additional stuff for the LaTeX preamble. + # + # 'preamble': '', + + # Latex figure (float) alignment + # + # 'figure_align': 'htbp', +} + +# Grouping the document tree into LaTeX files. List of tuples +# (source start file, target name, title, +# author, documentclass [howto, manual, or own class]). +latex_documents = [ + (master_doc, 'ATD.tex', u'ATD Lab Guide', + u'ATD Help (atd-help@arista.com)', 'manual'), +] + + +# -- Options for manual page output --------------------------------------- + +# One entry per manual page. List of tuples +# (source start file, name, description, authors, manual section). +man_pages = [ + (master_doc, 'atd', u'ATD Lab Guide', + [author], 1) +] + + +# -- Options for Texinfo output ------------------------------------------- + +# Grouping the document tree into Texinfo files. List of tuples +# (source start file, target name, title, author, +# dir menu entry, description, category) +texinfo_documents = [ + (master_doc, 'ATD', u'ATD Lab Guide', + author, 'ATD', 'Lab Documentation.', + 'Miscellaneous'), +] + + +def setup(app): + app.add_stylesheet("my-styles.css") # also can be a full URL + # app.add_stylesheet("ANOTHER.css") + # app.add_stylesheet("AND_ANOTHER.css") diff --git a/topologies/training-level-1-3-container-labs/labguides/source/connecting.rst b/topologies/training-level-1-3-container-labs/labguides/source/connecting.rst new file mode 100644 index 000000000..10ae589ef --- /dev/null +++ b/topologies/training-level-1-3-container-labs/labguides/source/connecting.rst @@ -0,0 +1,28 @@ +Connecting +========== + +1. Log into the Arista Test Drive portal with your assigned URL. If you + don’t have one, please see your ATD staff. + +.. image:: images/connecting/nested_connecting_1.png + +2. SSH to the public address assigned to the LabAccess jumphost server (this is the Topology Address shown in the "Welcome to Arista's Test Drive!" picture above). The username is ``arista`` and the password is ``{REPLACE_PWD}``: + + .. code-block:: text + + ssh arista@{unique_address}.topo.testdrive.arista.com + +| + +.. image:: images/connecting/nested_connecting_2.png + :align: center + +| + +3. The LabAccess menu allows users to connect to each device and specify + lab topology. It is recommended to open multiple SSH sessions or use + the Screen option (under the SSH Menu) to jump between devices rapidly. + + You can also Access the LabAccess Menu from your browser by clicking on `Console Access` + +.. image:: images/connecting/nested_connecting_3.png diff --git a/topologies/training-level-1-3-container-labs/labguides/source/images/connecting/nested_connecting_1.png b/topologies/training-level-1-3-container-labs/labguides/source/images/connecting/nested_connecting_1.png new file mode 100644 index 000000000..aa76597b8 Binary files /dev/null and b/topologies/training-level-1-3-container-labs/labguides/source/images/connecting/nested_connecting_1.png differ diff --git a/topologies/training-level-1-3-container-labs/labguides/source/images/connecting/nested_connecting_2.png b/topologies/training-level-1-3-container-labs/labguides/source/images/connecting/nested_connecting_2.png new file mode 100644 index 000000000..2c6b51a2b Binary files /dev/null and b/topologies/training-level-1-3-container-labs/labguides/source/images/connecting/nested_connecting_2.png differ diff --git a/topologies/training-level-1-3-container-labs/labguides/source/images/connecting/nested_connecting_3.png b/topologies/training-level-1-3-container-labs/labguides/source/images/connecting/nested_connecting_3.png new file mode 100644 index 000000000..1cc7402a3 Binary files /dev/null and b/topologies/training-level-1-3-container-labs/labguides/source/images/connecting/nested_connecting_3.png differ diff --git a/topologies/training-level-1-3-container-labs/labguides/source/images/logo.jpg b/topologies/training-level-1-3-container-labs/labguides/source/images/logo.jpg new file mode 100644 index 000000000..6eda41f7e Binary files /dev/null and b/topologies/training-level-1-3-container-labs/labguides/source/images/logo.jpg differ diff --git a/topologies/training-level-1-3-container-labs/labguides/source/index.rst b/topologies/training-level-1-3-container-labs/labguides/source/index.rst new file mode 100644 index 000000000..bb76aaa2e --- /dev/null +++ b/topologies/training-level-1-3-container-labs/labguides/source/index.rst @@ -0,0 +1,8 @@ +Welcome to the Arista Training documentation! +======================================== + +.. toctree:: + :maxdepth: 1 + :caption: EOS Configuration + + connecting.rst diff --git a/topologies/training-level-1-3-container-labs/topo_build.yml b/topologies/training-level-1-3-container-labs/topo_build.yml new file mode 100644 index 000000000..9ccba5edb --- /dev/null +++ b/topologies/training-level-1-3-container-labs/topo_build.yml @@ -0,0 +1,385 @@ +host_cpu: 4 +cvp_cpu: 32 +cvp_ram: 42 +cvp_nodes: 1 +veos_cpu: 2 +nodes: + - spine1: + ip_addr: 192.168.0.11 + sys_mac: 00:1c:73:b1:c6:01 + neighbors: + - neighborDevice: spine2 + neighborPort: Ethernet1 + port: Ethernet1 + - neighborDevice: spine2 + neighborPort: Ethernet2 + port: Ethernet2 + - neighborDevice: leaf1 + neighborPort: Ethernet3 + port: Ethernet3 + - neighborDevice: leaf2 + neighborPort: Ethernet3 + port: Ethernet4 + - neighborDevice: leaf3 + neighborPort: Ethernet3 + port: Ethernet5 + - neighborDevice: leaf4 + neighborPort: Ethernet3 + port: Ethernet6 + - neighborDevice: borderleaf1 + neighborPort: Ethernet3 + port: Ethernet7 + - neighborDevice: borderleaf2 + neighborPort: Ethernet3 + port: Ethernet8 + - spine2: + ip_addr: 192.168.0.12 + sys_mac: 00:1c:73:b2:c6:01 + neighbors: + - neighborDevice: spine1 + neighborPort: Ethernet1 + port: Ethernet1 + - neighborDevice: spine1 + neighborPort: Ethernet2 + port: Ethernet2 + - neighborDevice: leaf1 + neighborPort: Ethernet4 + port: Ethernet3 + - neighborDevice: leaf2 + neighborPort: Ethernet4 + port: Ethernet4 + - neighborDevice: leaf3 + neighborPort: Ethernet4 + port: Ethernet5 + - neighborDevice: leaf4 + neighborPort: Ethernet4 + port: Ethernet6 + - neighborDevice: borderleaf1 + neighborPort: Ethernet4 + port: Ethernet7 + - neighborDevice: borderleaf2 + neighborPort: Ethernet4 + port: Ethernet8 + - spine3: + ip_addr: 192.168.0.13 + sys_mac: 00:1c:73:b3:c6:01 + neighbors: + - neighborDevice: spine4 + neighborPort: Ethernet1 + port: Ethernet1 + - neighborDevice: spine4 + neighborPort: Ethernet2 + port: Ethernet2 + - neighborDevice: leaf1 + neighborPort: Ethernet5 + port: Ethernet3 + - neighborDevice: leaf2 + neighborPort: Ethernet5 + port: Ethernet4 + - neighborDevice: leaf3 + neighborPort: Ethernet5 + port: Ethernet5 + - neighborDevice: leaf4 + neighborPort: Ethernet5 + port: Ethernet6 + - neighborDevice: borderleaf1 + neighborPort: Ethernet5 + port: Ethernet7 + - neighborDevice: borderleaf2 + neighborPort: Ethernet5 + port: Ethernet8 + - spine4: + ip_addr: 192.168.0.14 + sys_mac: 00:1c:73:b4:c6:01 + neighbors: + - neighborDevice: spine3 + neighborPort: Ethernet1 + port: Ethernet1 + - neighborDevice: spine3 + neighborPort: Ethernet2 + port: Ethernet2 + - neighborDevice: leaf1 + neighborPort: Ethernet6 + port: Ethernet3 + - neighborDevice: leaf2 + neighborPort: Ethernet6 + port: Ethernet4 + - neighborDevice: leaf3 + neighborPort: Ethernet6 + port: Ethernet5 + - neighborDevice: leaf4 + neighborPort: Ethernet6 + port: Ethernet6 + - neighborDevice: borderleaf1 + neighborPort: Ethernet6 + port: Ethernet7 + - neighborDevice: borderleaf2 + neighborPort: Ethernet6 + port: Ethernet8 + - leaf1: + ip_addr: 192.168.0.21 + sys_mac: 00:1c:73:c1:c6:01 + neighbors: + - neighborDevice: leaf2 + neighborPort: Ethernet1 + port: Ethernet1 + - neighborDevice: leaf2 + neighborPort: Ethernet2 + port: Ethernet2 + - neighborDevice: spine1 + neighborPort: Ethernet3 + port: Ethernet3 + - neighborDevice: spine2 + neighborPort: Ethernet3 + port: Ethernet4 + - neighborDevice: spine3 + neighborPort: Ethernet3 + port: Ethernet5 + - neighborDevice: spine4 + neighborPort: Ethernet3 + port: Ethernet6 + - neighborDevice: host1 + neighborPort: Ethernet1 + port: Ethernet7 + - neighborDevice: host5 + neighborPort: Ethernet1 + port: Ethernet8 + - neighborDevice: host2 + neighborPort: Ethernet1 + port: Ethernet9 + - neighborDevice: host6 + neighborPort: Ethernet1 + port: Ethernet10 + - leaf2: + ip_addr: 192.168.0.22 + sys_mac: 00:1c:73:c2:c6:01 + neighbors: + - neighborDevice: leaf1 + neighborPort: Ethernet1 + port: Ethernet1 + - neighborDevice: leaf1 + neighborPort: Ethernet2 + port: Ethernet2 + - neighborDevice: spine1 + neighborPort: Ethernet4 + port: Ethernet3 + - neighborDevice: spine2 + neighborPort: Ethernet4 + port: Ethernet4 + - neighborDevice: spine3 + neighborPort: Ethernet4 + port: Ethernet5 + - neighborDevice: spine4 + neighborPort: Ethernet4 + port: Ethernet6 + - neighborDevice: host1 + neighborPort: Ethernet2 + port: Ethernet7 + - neighborDevice: host5 + neighborPort: Ethernet2 + port: Ethernet8 + - neighborDevice: host2 + neighborPort: Ethernet2 + port: Ethernet9 + - neighborDevice: host6 + neighborPort: Ethernet2 + port: Ethernet10 + - leaf3: + ip_addr: 192.168.0.23 + sys_mac: 00:1c:73:c3:c6:01 + neighbors: + - neighborDevice: leaf4 + neighborPort: Ethernet1 + port: Ethernet1 + - neighborDevice: leaf4 + neighborPort: Ethernet2 + port: Ethernet2 + - neighborDevice: spine1 + neighborPort: Ethernet5 + port: Ethernet3 + - neighborDevice: spine2 + neighborPort: Ethernet5 + port: Ethernet4 + - neighborDevice: spine3 + neighborPort: Ethernet5 + port: Ethernet5 + - neighborDevice: spine4 + neighborPort: Ethernet5 + port: Ethernet6 + - neighborDevice: host3 + neighborPort: Ethernet1 + port: Ethernet7 + - neighborDevice: host7 + neighborPort: Ethernet1 + port: Ethernet8 + - neighborDevice: host4 + neighborPort: Ethernet1 + port: Ethernet9 + - neighborDevice: host8 + neighborPort: Ethernet1 + port: Ethernet10 + - leaf4: + ip_addr: 192.168.0.24 + sys_mac: 00:1c:73:c4:c6:01 + neighbors: + - neighborDevice: leaf3 + neighborPort: Ethernet1 + port: Ethernet1 + - neighborDevice: leaf3 + neighborPort: Ethernet2 + port: Ethernet2 + - neighborDevice: spine1 + neighborPort: Ethernet6 + port: Ethernet3 + - neighborDevice: spine2 + neighborPort: Ethernet6 + port: Ethernet4 + - neighborDevice: spine3 + neighborPort: Ethernet6 + port: Ethernet5 + - neighborDevice: spine4 + neighborPort: Ethernet6 + port: Ethernet6 + - neighborDevice: host3 + neighborPort: Ethernet2 + port: Ethernet7 + - neighborDevice: host7 + neighborPort: Ethernet2 + port: Ethernet8 + - neighborDevice: host4 + neighborPort: Ethernet2 + port: Ethernet9 + - neighborDevice: host8 + neighborPort: Ethernet2 + port: Ethernet10 + - borderleaf1: + ip_addr: 192.168.0.25 + sys_mac: 00:1c:73:c5:c6:01 + neighbors: + - neighborDevice: borderleaf2 + neighborPort: Ethernet1 + port: Ethernet1 + - neighborDevice: borderleaf2 + neighborPort: Ethernet2 + port: Ethernet2 + - neighborDevice: spine1 + neighborPort: Ethernet7 + port: Ethernet3 + - neighborDevice: spine2 + neighborPort: Ethernet7 + port: Ethernet4 + - neighborDevice: spine3 + neighborPort: Ethernet7 + port: Ethernet5 + - neighborDevice: spine4 + neighborPort: Ethernet7 + port: Ethernet6 + - borderleaf2: + ip_addr: 192.168.0.26 + sys_mac: 00:1c:73:c6:c6:01 + neighbors: + - neighborDevice: borderleaf1 + neighborPort: Ethernet1 + port: Ethernet1 + - neighborDevice: borderleaf1 + neighborPort: Ethernet2 + port: Ethernet2 + - neighborDevice: spine1 + neighborPort: Ethernet8 + port: Ethernet3 + - neighborDevice: spine2 + neighborPort: Ethernet8 + port: Ethernet4 + - neighborDevice: spine3 + neighborPort: Ethernet8 + port: Ethernet5 + - neighborDevice: spine4 + neighborPort: Ethernet8 + port: Ethernet6 + - host1: + ip_addr: 192.168.0.51 + sys_mac: 00:1c:73:f1:c6:01 + neighbors: + - neighborDevice: leaf1 + neighborPort: Ethernet7 + port: Ethernet1 + - neighborDevice: leaf2 + neighborPort: Ethernet7 + port: Ethernet2 + - host2: + ip_addr: 192.168.0.52 + sys_mac: 00:1c:73:f2:c6:01 + neighbors: + - neighborDevice: leaf1 + neighborPort: Ethernet9 + port: Ethernet1 + - neighborDevice: leaf2 + neighborPort: Ethernet9 + port: Ethernet2 + - host3: + ip_addr: 192.168.0.53 + sys_mac: 00:1c:73:f3:c6:01 + neighbors: + - neighborDevice: leaf3 + neighborPort: Ethernet7 + port: Ethernet1 + - neighborDevice: leaf4 + neighborPort: Ethernet7 + port: Ethernet2 + - host4: + ip_addr: 192.168.0.54 + sys_mac: 00:1c:73:f4:c6:01 + neighbors: + - neighborDevice: leaf3 + neighborPort: Ethernet9 + port: Ethernet1 + - neighborDevice: leaf4 + neighborPort: Ethernet9 + port: Ethernet2 +servers: + - host5: + image_name: "gcr.io/atd-testdrivetraining-dev/hosts-gui/host1:latest" + ip_addr: 192.168.0.101 + port : 6001 + neighbors: + - neighborDevice: leaf1 + neighborPort: Ethernet8 + port: Ethernet1 + - neighborDevice: leaf2 + neighborPort: Ethernet8 + port: Ethernet2 + - host6: + image_name: "gcr.io/atd-testdrivetraining-dev/hosts-gui/host1:latest" + ip_addr: 192.168.0.102 + port : 6002 + neighbors: + - neighborDevice: leaf1 + neighborPort: Ethernet10 + port: Ethernet1 + - neighborDevice: leaf2 + neighborPort: Ethernet10 + port: Ethernet2 + - host7: + image_name: "gcr.io/atd-testdrivetraining-dev/hosts-gui/host1:latest" + ip_addr: 192.168.0.103 + port : 6003 + neighbors: + - neighborDevice: leaf3 + neighborPort: Ethernet8 + port: Ethernet1 + - neighborDevice: leaf4 + neighborPort: Ethernet8 + port: Ethernet2 + - host8: + image_name: "gcr.io/atd-testdrivetraining-dev/hosts-gui/host1:latest" + ip_addr: 192.168.0.104 + port : 6004 + neighbors: + - neighborDevice: leaf3 + neighborPort: Ethernet10 + port: Ethernet1 + - neighborDevice: leaf4 + neighborPort: Ethernet10 + port: Ethernet2 +additional_ssh_nodes: +additional_clab_nodes: diff --git a/topologies/training-level-1-3/atd-topo.png b/topologies/training-level-1-3/atd-topo.png new file mode 100644 index 000000000..4cc023b85 Binary files /dev/null and b/topologies/training-level-1-3/atd-topo.png differ diff --git a/topologies/training-level-1-3/configlets/ATD-INFRA b/topologies/training-level-1-3/configlets/ATD-INFRA new file mode 100644 index 000000000..6a88951d1 --- /dev/null +++ b/topologies/training-level-1-3/configlets/ATD-INFRA @@ -0,0 +1,45 @@ +daemon TerminAttr + exec /usr/bin/TerminAttr -cvcompression=gzip -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent -cvaddr=192.168.0.5:9910 -cvauth=token,/tmp/token -cvvrf=default -taillogs -disableaaa + no shutdown +! +alias mlag-reload bash /mnt/flash/shut_intfs && sudo shutdown now -r +alias conint sh interface | i connected +alias senz show interface counter error | nz +alias shmc show int | awk '/^[A-Z]/ { intf = $1 } /, address is/ { print intf, $6 }' +alias snz show interface counter | nz +alias spd show port-channel %1 detail all +alias sqnz show interface counter queue | nz +alias srnz show interface counter rate | nz +alias intdesc + !! Usage: intdesc interface-name description + 10 config + 20 int %1 + 30 desc %2 + 40 exit +! +dns domain arista.lab +! +service routing protocols model multi-agent +! +ntp server 192.168.0.1 iburst source Management1 +! +radius-server host 192.168.0.1 key 7 0207165218120E +! +aaa group server radius atds + server 192.168.0.1 +! +aaa authentication login default group atds local +aaa authorization exec default group atds local +aaa authorization commands all default local +! +username Script secret sha512 $6$PNfpb9anSBQ5/aia$phaa3ar5pwkntenD9WHc6Ed5b96lbW0dc0bjtwPnFLaDiCK8D5Cjl6ewP/xdNbl4PtS6Paq.3SssN8pj05NQm. +username admin privilege 15 role network-admin secret 5 $1$5O85YVVn$HrXcfOivJEnISTMb6xrJc. +username arista privilege 15 role network-admin secret 5 $1$4VjIjfd1$XkUVulbNDESHFzcxDU.Tk1 +! +username arista ssh-key ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC+ERvV4GaPq3FzxY8T+5hMF/1T+l8wiPsVCtOrZU4Hy6NCNlAiDBdA/RUtX5/aOu5JvHyPTVHqWJ0qi9BqU3rxCNl/l2/5UZbm9RPzdZ1QCwoYwPB9/j/tYJV8lZdr6t0yGBfxgzD3oW/zF7a+ZtASaMAu7lkgoqPK2pVIGa+Y9ZCsA0Xq756XpLCw+d3pHKHvIkgWLCo9FoeIv8f/bu5u/ztzRE+Nvl+o5add6MxnjsXz3s7BnW2FX6JNjyp0Z+OXjupQc2gcfFvpd/dA2lCNuuaCHkRgyPwIZtWPmNqMRXPp37mlPwV43qDJRVPQkvh0xPxwS35BbzUxWdT+ZLZv +! +ip radius source-interface Management1 +! +management api http-commands + no shutdown +! diff --git a/topologies/training-level-1-3/configlets/Base-Builder.py b/topologies/training-level-1-3/configlets/Base-Builder.py new file mode 100644 index 000000000..167d9c750 --- /dev/null +++ b/topologies/training-level-1-3/configlets/Base-Builder.py @@ -0,0 +1,86 @@ +from cvplibrary import CVPGlobalVariables, GlobalVariableNames, Form + + + +# Get this devices Serial + + +serial = CVPGlobalVariables.getValue( GlobalVariableNames.CVP_SERIAL ) +mask = '24' +ServiceRouting = True + +#Create the IP address from the serial number + + +if serial == '4A7F6E96300132903A73A74CCF18B697': + IPaddress = '192.168.0.21' + hostname = 'leaf1' + + +elif serial == '3831DEFC364900BF9EEFC45FEE7794E7': + IPaddress = '192.168.0.22' + hostname = 'leaf2' + + +elif serial == 'ED469CFA13C4017B2D19BF7EBCAD50B1': + IPaddress = '192.168.0.23' + hostname = 'leaf3' + + +elif serial == '434653268ABA082A2FF6B52F1367CE80': + IPaddress = '192.168.0.24' + hostname = 'leaf4' + +elif serial == '8085B9640BC6D8FDC1FD23D242EBF433': + IPaddress = '192.168.0.11' + hostname = 'spine1' + +elif serial == 'D28D62E5729AB8BF44A0BC017DEB188A': + IPaddress = '192.168.0.12' + hostname = 'spine2' + +elif serial == 'F77703A62ADE220E689A41057AA56288': + IPaddress = '192.168.0.13' + hostname = 'spine3' + +elif serial == 'D763323F00C03738A8C824D2F1DA05E8': + IPaddress = '192.168.0.25' + hostname = 'borderleaf1' + +elif serial == '7C16136B7483F2E2FB002E8E0646F1F0': + IPaddress = '192.168.0.26' + hostname = 'borderleaf2' + +elif serial == '86342B780ED73BCB30E1DFE48E26AC38': + IPaddress = '192.168.0.51' + ServiceRouting = False + hostname = 'host1' + + +elif serial == 'CE0B31805130945E3CE40B060E9E636D': + IPaddress = '192.168.0.52' + ServiceRouting = False + hostname = 'host2' + + +# Generate and print config - Ignore the service routing command if not needed +print 'hostname %s' % hostname +print '!' +print 'interface Management 1' +print ' ip address %s/%s' % ( IPaddress, mask ) +print ' no lldp transmit' +print ' no lldp receive' +print '!' +if ServiceRouting: + print 'service routing protocols model multi-agent' + print '!' +print 'dns domain arista.lab' +print '!' +print 'ip route 0.0.0.0/0 192.168.0.1' +print '!' +print 'ip routing' +print '!' +print 'management api http-commands' +print ' no shutdown' +print ' protocol http' +print '!' \ No newline at end of file diff --git a/topologies/training-level-1-3/configlets/borderleaf1-base b/topologies/training-level-1-3/configlets/borderleaf1-base new file mode 100644 index 000000000..556895b8c --- /dev/null +++ b/topologies/training-level-1-3/configlets/borderleaf1-base @@ -0,0 +1,15 @@ +hostname borderleaf1 +! +interface Management 1 + ip address 192.168.0.25/24 + no lldp transmit + no lldp receive +! +service routing protocols model multi-agent +! +dns domain arista.lab +! +ip route 0.0.0.0/0 192.168.0.1 +! +ip routing +! diff --git a/topologies/training-level-1-3/configlets/borderleaf2-base b/topologies/training-level-1-3/configlets/borderleaf2-base new file mode 100644 index 000000000..cde4736cf --- /dev/null +++ b/topologies/training-level-1-3/configlets/borderleaf2-base @@ -0,0 +1,15 @@ +hostname borderleaf2 +! +interface Management 1 + ip address 192.168.0.26/24 + no lldp transmit + no lldp receive +! +service routing protocols model multi-agent +! +dns domain arista.lab +! +ip route 0.0.0.0/0 192.168.0.1 +! +ip routing +! diff --git a/topologies/training-level-1-3/configlets/host1-base b/topologies/training-level-1-3/configlets/host1-base new file mode 100644 index 000000000..9bf7152e8 --- /dev/null +++ b/topologies/training-level-1-3/configlets/host1-base @@ -0,0 +1,15 @@ +hostname host1 +! +spanning-tree mode none +! +interface Management 1 + ip address 192.168.0.51/24 + no lldp transmit + no lldp receive +! +dns domain arista.lab +! +ip route 0.0.0.0/0 192.168.0.1 +! +ip routing +! \ No newline at end of file diff --git a/topologies/training-level-1-3/configlets/host2-base b/topologies/training-level-1-3/configlets/host2-base new file mode 100644 index 000000000..b2e6e735e --- /dev/null +++ b/topologies/training-level-1-3/configlets/host2-base @@ -0,0 +1,15 @@ +hostname host2 +! +spanning-tree mode none +! +interface Management 1 + ip address 192.168.0.52/24 + no lldp transmit + no lldp receive +! +dns domain arista.lab +! +ip route 0.0.0.0/0 192.168.0.1 +! +ip routing +! diff --git a/topologies/training-level-1-3/configlets/host3-base b/topologies/training-level-1-3/configlets/host3-base new file mode 100644 index 000000000..b2812b722 --- /dev/null +++ b/topologies/training-level-1-3/configlets/host3-base @@ -0,0 +1,15 @@ +hostname host3 +! +spanning-tree mode none +! +interface Management 1 + ip address 192.168.0.53/24 + no lldp transmit + no lldp receive +! +dns domain arista.lab +! +ip route 0.0.0.0/0 192.168.0.1 +! +ip routing +! diff --git a/topologies/training-level-1-3/configlets/host4-base b/topologies/training-level-1-3/configlets/host4-base new file mode 100644 index 000000000..252a6e4a2 --- /dev/null +++ b/topologies/training-level-1-3/configlets/host4-base @@ -0,0 +1,15 @@ +hostname host4 +! +spanning-tree mode none +! +interface Management 1 + ip address 192.168.0.54/24 + no lldp transmit + no lldp receive +! +dns domain arista.lab +! +ip route 0.0.0.0/0 192.168.0.1 +! +ip routing +! diff --git a/topologies/training-level-1-3/configlets/leaf1-base b/topologies/training-level-1-3/configlets/leaf1-base new file mode 100644 index 000000000..47e0ce3f6 --- /dev/null +++ b/topologies/training-level-1-3/configlets/leaf1-base @@ -0,0 +1,15 @@ +hostname leaf1 +! +interface Management 1 + ip address 192.168.0.21/24 + no lldp transmit + no lldp receive +! +service routing protocols model multi-agent +! +dns domain arista.lab +! +ip route 0.0.0.0/0 192.168.0.1 +! +ip routing +! diff --git a/topologies/training-level-1-3/configlets/leaf2-base b/topologies/training-level-1-3/configlets/leaf2-base new file mode 100644 index 000000000..72fae64c3 --- /dev/null +++ b/topologies/training-level-1-3/configlets/leaf2-base @@ -0,0 +1,15 @@ +hostname leaf2 +! +interface Management 1 + ip address 192.168.0.22/24 + no lldp transmit + no lldp receive +! +service routing protocols model multi-agent +! +dns domain arista.lab +! +ip route 0.0.0.0/0 192.168.0.1 +! +ip routing +! diff --git a/topologies/training-level-1-3/configlets/leaf3-base b/topologies/training-level-1-3/configlets/leaf3-base new file mode 100644 index 000000000..ab93834f4 --- /dev/null +++ b/topologies/training-level-1-3/configlets/leaf3-base @@ -0,0 +1,15 @@ +hostname leaf3 +! +interface Management 1 + ip address 192.168.0.23/24 + no lldp transmit + no lldp receive +! +service routing protocols model multi-agent +! +dns domain arista.lab +! +ip route 0.0.0.0/0 192.168.0.1 +! +ip routing +! diff --git a/topologies/training-level-1-3/configlets/leaf4-base b/topologies/training-level-1-3/configlets/leaf4-base new file mode 100644 index 000000000..a3b808c25 --- /dev/null +++ b/topologies/training-level-1-3/configlets/leaf4-base @@ -0,0 +1,15 @@ +hostname leaf4 +! +interface Management 1 + ip address 192.168.0.24/24 + no lldp transmit + no lldp receive +! +service routing protocols model multi-agent +! +dns domain arista.lab +! +ip route 0.0.0.0/0 192.168.0.1 +! +ip routing +! diff --git a/topologies/training-level-1-3/configlets/spine1-base b/topologies/training-level-1-3/configlets/spine1-base new file mode 100644 index 000000000..322102842 --- /dev/null +++ b/topologies/training-level-1-3/configlets/spine1-base @@ -0,0 +1,15 @@ +hostname spine1 +! +interface Management 1 + ip address 192.168.0.11/24 + no lldp transmit + no lldp receive +! +service routing protocols model multi-agent +! +dns domain arista.lab +! +ip route 0.0.0.0/0 192.168.0.1 +! +ip routing +! diff --git a/topologies/training-level-1-3/configlets/spine2-base b/topologies/training-level-1-3/configlets/spine2-base new file mode 100644 index 000000000..c664c14cc --- /dev/null +++ b/topologies/training-level-1-3/configlets/spine2-base @@ -0,0 +1,15 @@ +hostname spine2 +! +interface Management 1 + ip address 192.168.0.12/24 + no lldp transmit + no lldp receive +! +service routing protocols model multi-agent +! +dns domain arista.lab +! +ip route 0.0.0.0/0 192.168.0.1 +! +ip routing +! diff --git a/topologies/training-level-1-3/configlets/spine3-base b/topologies/training-level-1-3/configlets/spine3-base new file mode 100644 index 000000000..d964a927a --- /dev/null +++ b/topologies/training-level-1-3/configlets/spine3-base @@ -0,0 +1,15 @@ +hostname spine3 +! +interface Management 1 + ip address 192.168.0.13/24 + no lldp transmit + no lldp receive +! +service routing protocols model multi-agent +! +dns domain arista.lab +! +ip route 0.0.0.0/0 192.168.0.1 +! +ip routing +! \ No newline at end of file diff --git a/topologies/training-level-1-3/configlets/spine4-base b/topologies/training-level-1-3/configlets/spine4-base new file mode 100644 index 000000000..db1c7c18a --- /dev/null +++ b/topologies/training-level-1-3/configlets/spine4-base @@ -0,0 +1,15 @@ +hostname spine4 +! +interface Management 1 + ip address 192.168.0.14/24 + no lldp transmit + no lldp receive +! +service routing protocols model multi-agent +! +dns domain arista.lab +! +ip route 0.0.0.0/0 192.168.0.1 +! +ip routing +! \ No newline at end of file diff --git a/topologies/training-level-1-3/files/.ansible.cfg b/topologies/training-level-1-3/files/.ansible.cfg new file mode 100644 index 000000000..14c806515 --- /dev/null +++ b/topologies/training-level-1-3/files/.ansible.cfg @@ -0,0 +1,2 @@ +[defaults] +host_key_checking = False diff --git a/topologies/training-level-1-3/files/.screenrc b/topologies/training-level-1-3/files/.screenrc new file mode 100644 index 000000000..1d70f5e42 --- /dev/null +++ b/topologies/training-level-1-3/files/.screenrc @@ -0,0 +1,23 @@ +# Turn off the startup message. +startup_message off +# Set the caption to the active windows. +caption always "%-Lw%{= BW}%50>%n%f* %t%{-}%+Lw%<" + +term screen-256color + +# New screens for various processes. +# Example: screen -t +# screen -t 7050SX-128 0 ssh aristaadmin@192.100.37.128 +screen 1 ssh 192.168.0.4 +screen -t CVP 2 ssh 192.168.0.5 +screen -t Spine1 3 ssh 192.168.0.11 +screen -t Spine2 4 ssh 192.168.0.12 +screen -t Spine3 5 ssh 192.168.0.13 +screen -t Leaf1 6 ssh 192.168.0.21 +screen -t Leaf2 7 ssh 192.168.0.22 +screen -t Leaf3 8 ssh 192.168.0.23 +screen -t Leaf4 9 ssh 192.168.0.24 +screen -t Borderleaf1 10 ssh 192.168.0.25 +screen -t Borderlead2 11 ssh 192.168.0.26 +screen -t Host1 15 ssh 192.168.0.51 +screen -t Host2 16 ssh 192.168.0.52 diff --git a/topologies/training-level-1-3/files/MenuOptions.yaml b/topologies/training-level-1-3/files/MenuOptions.yaml new file mode 100644 index 000000000..f68e2261d --- /dev/null +++ b/topologies/training-level-1-3/files/MenuOptions.yaml @@ -0,0 +1,214 @@ +--- +options: + reset: + - command: "/usr/local/bin/ConfigureTopology.py && bash /home/arista/Broadcaster/pushHostDefaultConfig.sh" + description: "Reset All Devices to Base ATD (reset)" + vxlan: + - command: "/usr/local/bin/ConfigureTopology.py -t vxlan" + description: "VXLAN Lab (vxlan)" + l2evpn: + - command: "/usr/local/bin/ConfigureTopology.py -t l2evpn" + description: "L2-EVPN Lab (l2evpn)" + l3evpn: + - command: "/usr/local/bin/ConfigureTopology.py -t l3evpn" + description: "L3-EVPN Lab (l3evpn)" + aamh: + - command: "/usr/local/bin/ConfigureTopology.py -t aamh" + description: "Active-Active Multi Homing lab (aamh)" + pim: + - command: "/usr/local/bin/ConfigureTopology.py -t aamh" + description: "PIM Lab (pim)" +labconfiglets: + reset: + spine1: + - "spine1-base" + spine2: + - "spine2-base" + spine3: + - "spine3-base" + leaf1: + - "leaf1-base" + leaf2: + - "leaf2-base" + leaf3: + - "leaf3-base" + leaf4: + - "leaf4-base" + host1: + - "host1-base" + host2: + - "host2-base" + borderleaf1: + - "borderleaf1-base" + borderleaf2: + - "borderleaf2-base" + vxlan: + spine1: + - "spine1-base" + - "Spine-1-VXALN-Begin" + spine2: + - "spine2-base" + - "Spine-2-VXALN-Begin" + spine3: + - "spine3-base" + - "Spine-3-VXALN-Begin" + leaf1: + - "leaf1-base" + - "Leaf-1-VXALN-Begin" + leaf2: + - "leaf2-base" + - "Leaf-2-VXALN-Begin" + leaf3: + - "leaf3-base" + - "leaf-3-VXALN-Begin" + leaf4: + - "leaf4-base" + - "leaf-4-VXALN-Begin" + host1: + - "host1-base" + - "Host-1-VXALN-Begin" + host2: + - "host2-base" + - "Host-2-VXALN-Begin" + borderleaf1: + - "borderleaf1-base" + - "Borderleaf-1-VXALN-Begin" + borderleaf2: + - "borderleaf2-base" + - "Borderleaf-2-VXALN-Begin" + l2evpn: + spine1: + - "spine1-base" + - "Spine-1-L2EVPN-Begin" + spine2: + - "spine2-base" + - "Spine-2-L2EVPN-Begin" + spine3: + - "spine3-base" + - "Spine-3-L2EVPN-Begin" + leaf1: + - "leaf1-base" + - "Leaf-1-L2EVPN-Begin" + leaf2: + - "leaf2-base" + - "Leaf-2-L2EVPN-Begin" + leaf3: + - "leaf3-base" + - "Leaf-3-L2EVPN-Begin" + leaf4: + - "leaf4-base" + - "Leaf-4-L2EVPN-Begin" + host1: + - "host1-base" + - "Host-1-L2EVPN-Begin" + host2: + - "host2-base" + - "Host-2-L2EVPN-Begin" + borderleaf1: + - "borderleaf1-base" + - "Borderleaf-1-L2EVPN-Begin" + borderleaf2: + - "borderleaf2-base" + - "Borderleaf-2-L2EVPN-Begin" + l3evpn: + spine1: + - "spine1-base" + - "Spine-1-L3EVPN-Begin" + spine2: + - "spine2-base" + - "Spine-2-L3EVPN-Begin" + spine3: + - "spine3-base" + - "Spine-3-L3EVPN-Begin" + leaf1: + - "leaf1-base" + - "Leaf-1-L3EVPN-Begin" + leaf2: + - "leaf2-base" + - "Leaf-2-L3EVPN-Begin" + leaf3: + - "leaf3-base" + - "Leaf-3-L3EVPN-Begin" + leaf4: + - "leaf4-base" + - "Leaf-4-L3EVPN-Begin" + host1: + - "host1-base" + - "Host-1-L3EVPN-Begin" + host2: + - "host2-base" + - "Host-2-L3EVPN-Begin" + borderleaf1: + - "borderleaf1-base" + - "Borderleaf-1-L3EVPN-Begin" + borderleaf2: + - "borderleaf2-base" + - "Borderleaf-2-L3EVPN-Begin" + aamh: + spine1: + - "spine1-base" + - "Spine-1-AAMH-Begin" + spine2: + - "spine2-base" + - "Spine-2-AAMH-Begin" + spine3: + - "spine3-base" + - "Spine-3-AAMH-Begin" + leaf1: + - "leaf1-base" + - "Leaf-1-AAMH-Begin" + leaf2: + - "leaf2-base" + - "Leaf-2-AAMH-Begin" + leaf3: + - "leaf3-base" + - "Leaf-3-AAMH-Begin" + leaf4: + - "leaf4-base" + - "Leaf-4-AAMH-Begin" + host1: + - "host1-base" + - "Host-1-AAMH-Begin" + host2: + - "host2-base" + - "Host-2-AAMH-Begin" + borderleaf1: + - "borderleaf1-base" + - "Borderleaf-1-AAMH-Begin" + borderleaf2: + - "borderleaf2-base" + - "Borderleaf-2-AAMH-Begin" + pim: + spine1: + - "spine1-base" + - "Spine-1-PIM-Begin" + spine2: + - "spine2-base" + - "Spine-2-PIM-Begin" + spine3: + - "spine3-base" + - "Spine-3-PIM-Begin" + leaf1: + - "leaf1-base" + - "Leaf-1-PIM-Begin" + leaf2: + - "leaf2-base" + - "Leaf-2-PIM-Begin" + leaf3: + - "leaf3-base" + - "Leaf-3-PIM-Begin" + leaf4: + - "leaf4-base" + - "Leaf-4-PIM-Begin" + host1: + - "host1-base" + - "Host-1-PIM-Begin" + host2: + - "host2-base" + - "Host-2-PIM-Begin" + borderleaf1: + - "borderleaf1-base" + - "Borderleaf-1-PIM-Begin" + borderleaf2: + - "borderleaf2-base" + - "Borderleaf-2-PIM-Begin" \ No newline at end of file diff --git a/topologies/training-level-1-3/files/apps/coder/coder.yaml b/topologies/training-level-1-3/files/apps/coder/coder.yaml new file mode 100644 index 000000000..80cc852d1 --- /dev/null +++ b/topologies/training-level-1-3/files/apps/coder/coder.yaml @@ -0,0 +1,4 @@ +bind-addr: 127.0.0.1:8080 +auth: password +password: {ARISTA_REPLACE} +cert: false \ No newline at end of file diff --git a/topologies/training-level-1-3/files/apps/coder/labfiles/.placeholder b/topologies/training-level-1-3/files/apps/coder/labfiles/.placeholder new file mode 100644 index 000000000..e69de29bb diff --git a/topologies/training-level-1-3/files/apps/ssh/web.json b/topologies/training-level-1-3/files/apps/ssh/web.json new file mode 100644 index 000000000..13fac47dd --- /dev/null +++ b/topologies/training-level-1-3/files/apps/ssh/web.json @@ -0,0 +1,76 @@ +{ + "listen": { + "ip": "0.0.0.0", + "port": 2222 + }, + "user": { + "name": null, + "password": null, + "privatekey": null + }, + "ssh": { + "host": null, + "port": 22, + "localAddress": null, + "localPort": null, + "term": "xterm-color", + "readyTimeout": 20000, + "keepaliveInterval": 120000, + "keepaliveCountMax": 10, + "allowedSubnets": [ "192.168.0.0/16", "10.0.0.0/8", "172.16.0.0/12" ] + }, + "terminal": { + "cursorBlink": true, + "scrollback": 10000, + "tabStopWidth": 8, + "bellStyle": "sound" + }, + "header": { + "text": null, + "background": "green" + }, + "session": { + "name": "WebSSH2", + "secret": "mysecret" + }, + "options": { + "challengeButton": true, + "allowreauth": true + }, + "algorithms": { + "kex": [ + "ecdh-sha2-nistp256", + "ecdh-sha2-nistp384", + "ecdh-sha2-nistp521", + "diffie-hellman-group-exchange-sha256", + "diffie-hellman-group14-sha1" + ], + "cipher": [ + "aes128-ctr", + "aes192-ctr", + "aes256-ctr", + "aes128-gcm", + "aes128-gcm@openssh.com", + "aes256-gcm", + "aes256-gcm@openssh.com", + "aes256-cbc" + ], + "hmac": [ + "hmac-sha2-256", + "hmac-sha2-512", + "hmac-sha1" + ], + "compress": [ + "none", + "zlib@openssh.com", + "zlib" + ] + }, + "serverlog": { + "client": false, + "server": false + }, + "accesslog": false, + "verify": false, + "safeShutdownDuration": 300 + } \ No newline at end of file diff --git a/topologies/training-level-1-3/files/apps/uilanding/modules.yaml b/topologies/training-level-1-3/files/apps/uilanding/modules.yaml new file mode 100644 index 000000000..64d0909f1 --- /dev/null +++ b/topologies/training-level-1-3/files/apps/uilanding/modules.yaml @@ -0,0 +1,46 @@ +topology: + image: "atd-topo.png" + nodes: + Spine1: + coords: "43,231,220,314" + ip: "192.168.0.11" + Spine2: + coords: "324,227,503,315" + ip: "192.168.0.12" + Spine3: + coords: "596,231,777,316" + ip: "192.168.0.13" + Spine4: + coords: "880,233,1056,315" + ip: "192.168.0.14" + Leaf1: + coords: "42,518,219,601" + ip: "192.168.0.21" + Leaf2: + coords: "324,519,502,603" + ip: "192.168.0.22" + Leaf3: + coords: "597,519,779,605" + ip: "192.168.0.23" + Leaf4: + coords: "882,522,1055,603" + ip: "192.168.0.24" + BorderLeaf1: + coords: "501,100,323,20" + ip: "192.168.0.25" + BorderLeaf2: + coords: "599,20,778,101" + ip: "192.168.0.26" + Host1: + coords: "29,675,212,765" + ip: "192.168.0.51" + Host2: + coords: "319,673,498,754" + ip: "192.168.0.52" + + + Host1 + Host2 + Host3 + Host4 + \ No newline at end of file diff --git a/topologies/training-level-1-3/files/apps/webui/.vncpass_clear b/topologies/training-level-1-3/files/apps/webui/.vncpass_clear new file mode 100644 index 000000000..cd09dd7a5 --- /dev/null +++ b/topologies/training-level-1-3/files/apps/webui/.vncpass_clear @@ -0,0 +1 @@ +@rista1 \ No newline at end of file diff --git a/topologies/training-level-1-3/files/cvp/cvp_info.yaml b/topologies/training-level-1-3/files/cvp/cvp_info.yaml new file mode 100644 index 000000000..89744587c --- /dev/null +++ b/topologies/training-level-1-3/files/cvp/cvp_info.yaml @@ -0,0 +1,64 @@ +cvp_info: + containers: + Tenant: + nodes: + Leaf: + parent: Tenant + nodes: + - leaf1 + - leaf2 + - leaf3 + - leaf4 + Borderleaf: + parent: Tenant + nodes: + - borderleaf1 + - borderleaf2 + Spine: + parent: Tenant + nodes: + - spine1 + - spine2 + - spine3 + - spine4 + Hosts: + parent: Tenant + nodes: + - host1 + - host2 + - host3 + - host4 + snapshots: + configlets: + containers: + Tenant: + - ATD-INFRA + netelements: + spine1: + - spine1-base + spine2: + - spine2-base + spine3: + - spine3-base + spine4: + - spine4-base + leaf1: + - leaf1-base + leaf2: + - leaf2-base + borderleaf1: + - borderleaf1-base + borderleaf2: + - borderleaf2-base + leaf3: + - leaf3-base + leaf4: + - leaf4-base + host1: + - host1-base + host2: + - host2-base + host3: + - host3-base + host4: + - host4-base diff --git a/topologies/training-level-1-3/files/hosts b/topologies/training-level-1-3/files/hosts new file mode 100644 index 000000000..ee9fda588 --- /dev/null +++ b/topologies/training-level-1-3/files/hosts @@ -0,0 +1,20 @@ +127.0.0.1 localhost +192.168.0.11 spine1 +192.168.0.12 spine2 +192.168.0.13 spine3 +192.168.0.14 spine4 +192.168.0.21 leaf1 +192.168.0.22 leaf2 +192.168.0.23 leaf3 +192.168.0.24 leaf4 +192.168.0.25 borderleaf1 +192.168.0.26 borderleaf2 +192.168.0.41 server1 +192.168.0.42 server2 +192.168.0.43 server3 +192.168.0.44 server4 +192.168.0.51 host1 +192.168.0.52 host2 +192.168.0.53 host3 +192.168.0.54 host4 +192.168.0.5 cvp diff --git a/topologies/training-level-1-3/files/menus/default.yaml b/topologies/training-level-1-3/files/menus/default.yaml new file mode 100644 index 000000000..7edae00fc --- /dev/null +++ b/topologies/training-level-1-3/files/menus/default.yaml @@ -0,0 +1,2 @@ +--- +default_menu: training-l3.yaml \ No newline at end of file diff --git a/topologies/training-level-1-3/files/menus/training-l3.yaml b/topologies/training-level-1-3/files/menus/training-l3.yaml new file mode 100644 index 000000000..41133498a --- /dev/null +++ b/topologies/training-level-1-3/files/menus/training-l3.yaml @@ -0,0 +1,32 @@ +--- + lab_list: + reset: + additional_commands: + - "bash /home/arista/Broadcaster/pushHostDefaultConfig.sh" + description: "Reset All Devices to Base Lab (reset)" + labconfiglets: + reset: + spine1: + - "spine1-base" + spine2: + - "spine2-base" + spine3: + - "spine3-base" + spine4: + - "spine4-base" + leaf1: + - "leaf1-base" + leaf2: + - "leaf2-base" + leaf3: + - "leaf3-base" + leaf4: + - "leaf4-base" + host1: + - "host1-base" + host2: + - "host2-base" + borderleaf1: + - "borderleaf1-base" + borderleaf2: + - "borderleaf2-base" diff --git a/topologies/training-level-1-3/files/scripts/Authenticate-CVP b/topologies/training-level-1-3/files/scripts/Authenticate-CVP new file mode 100644 index 000000000..144bb13eb --- /dev/null +++ b/topologies/training-level-1-3/files/scripts/Authenticate-CVP @@ -0,0 +1,32 @@ +import requests +import json + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + +# Print user details + +print "User Name:%s\n "%output['username'] +print "First Name: %s\n "%output['user']['firstName'] +print "Last Name: %s\n "%output['user']['lastName'] +print "User Permissions: %s\n "%output['permissionList'] +print "Cookie Jar: %s\n "%cookies diff --git a/topologies/training-level-1-3/files/scripts/Authenticate-CVP2 b/topologies/training-level-1-3/files/scripts/Authenticate-CVP2 new file mode 100644 index 000000000..3f6bf9190 --- /dev/null +++ b/topologies/training-level-1-3/files/scripts/Authenticate-CVP2 @@ -0,0 +1,48 @@ +import requests +import json + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + +# Print user details + +print "User Name:%s\n "%output['username'] +print "First Name: %s\n "%output['user']['firstName'] +print "Last Name: %s\n "%output['user']['lastName'] +print "User Permissions: %s\n "%output['permissionList'] +print "Cookie Jar: %s\n "%cookies + +#Create an HTTP GET request to the CVP server + +getConfigletURL = "/cvpservice/configlet/getConfiglets.do?" +getConfigletParams = {'startIndex':'0','endIndex':'0','type':'Configlet'} +response = requests.get(url+getConfigletURL,cookies=cookies, params=getConfigletParams,verify=False) +assert response.ok +outputConfiglets = response.json() + +# Print Configlet details + +for configlet in outputConfiglets['data']: + print "ConfigletName: %s"%configlet['name'] + print "ConfigletKey: %s"%configlet['key'] + print "\n" + diff --git a/topologies/training-level-1-3/files/scripts/Authenticate-CVP3 b/topologies/training-level-1-3/files/scripts/Authenticate-CVP3 new file mode 100644 index 000000000..2445806ea --- /dev/null +++ b/topologies/training-level-1-3/files/scripts/Authenticate-CVP3 @@ -0,0 +1,95 @@ +import requests +import json + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + +# Print user details + +print "User Name:%s\n "%output['username'] +print "First Name: %s\n "%output['user']['firstName'] +print "Last Name: %s\n "%output['user']['lastName'] +print "User Permissions: %s\n "%output['permissionList'] +print "Cookie Jar: %s\n "%cookies + +#Create an HTTP GET request to the CVP server + +getConfigletURL = "/cvpservice/configlet/getConfiglets.do?" +getConfigletParams = {'startIndex':'0','endIndex':'0','type':'Configlet'} +response = requests.get(url+getConfigletURL,cookies=cookies, params=getConfigletParams,verify=False) +assert response.ok +outputConfiglets = response.json() + +# Print Configlet details + +for configlet in outputConfiglets['data']: + print "ConfigletName: %s"%configlet['name'] + print "ConfigletKey: %s"%configlet['key'] + print "\n" +# Create an HTTP GET request to the CVP server + +getConfigletHistoryURL = "/cvpservice/configlet/getConfigletHistory.do?" +getConfigletParams = {'configletId':'configlet_32_438214998013','startIndex':'0','endIndex':'0'} +response = requests.get(url+getConfigletHistoryURL,cookies=cookies, params=getConfigletParams,verify=False) +assert response.ok +outputConfigletHistory = response.json() + +# Print Configlet details + +for entry in outputConfigletHistory['configletHistory']: + print "ConfigletKey: %s"%entry['key'] + print "ConfigletOldConfig: %s"%entry['oldConfig'] + print "ConfigletNewConfig: %s"%entry['newConfig'] + print "\n" + + +# Create an HTTP GET request to the CVP server + +getConfigletDetailURL = "/cvpservice/configlet/getConfigletByName.do?" +getConfigletParams = {'name':'VLANs'} +response = requests.get(url+getConfigletDetailURL,cookies=cookies, params=getConfigletParams,verify=False) +assert response.ok +outputConfigletDetail = response.json() + +# Print Configlet details + +print "ConfigletKey: %s"%outputConfigletDetail['key'] +print "ConfigletName: %s"%outputConfigletDetail['name'] +print "ConfigletConfig: %s"%outputConfigletDetail['config'] +print "ConfigletNote: %s"%outputConfigletDetail['note'] +print "\n" + + +# Create an HTTP POST request to the CVP server + +headers = { 'Content-Type': 'application/json' } +postConfigletChangeURL = "/cvpservice/configlet/updateConfiglet.do" +changeData = json.dumps({"config": "! some configuration here", "key": "configlet_32_438214998013", "name": "VLANs"}) +response = requests.post(url+postConfigletChangeURL, cookies=cookies, data=changeData,headers=headers,verify=False) +assert response.ok +outputConfigletChange = response.json() + +# Print Configlet details + +print "ConfigletChange: %s"%outputConfigletChange['data'] +print "\n" + diff --git a/topologies/training-level-1-3/files/scripts/Configlet1 b/topologies/training-level-1-3/files/scripts/Configlet1 new file mode 100644 index 000000000..3f6bf9190 --- /dev/null +++ b/topologies/training-level-1-3/files/scripts/Configlet1 @@ -0,0 +1,48 @@ +import requests +import json + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + +# Print user details + +print "User Name:%s\n "%output['username'] +print "First Name: %s\n "%output['user']['firstName'] +print "Last Name: %s\n "%output['user']['lastName'] +print "User Permissions: %s\n "%output['permissionList'] +print "Cookie Jar: %s\n "%cookies + +#Create an HTTP GET request to the CVP server + +getConfigletURL = "/cvpservice/configlet/getConfiglets.do?" +getConfigletParams = {'startIndex':'0','endIndex':'0','type':'Configlet'} +response = requests.get(url+getConfigletURL,cookies=cookies, params=getConfigletParams,verify=False) +assert response.ok +outputConfiglets = response.json() + +# Print Configlet details + +for configlet in outputConfiglets['data']: + print "ConfigletName: %s"%configlet['name'] + print "ConfigletKey: %s"%configlet['key'] + print "\n" + diff --git a/topologies/training-level-1-3/files/scripts/ConfigletChange b/topologies/training-level-1-3/files/scripts/ConfigletChange new file mode 100644 index 000000000..691ff5864 --- /dev/null +++ b/topologies/training-level-1-3/files/scripts/ConfigletChange @@ -0,0 +1,40 @@ +import requests +import json + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + + +# Create an HTTP POST request to the CVP server + +headers = { 'Content-Type': 'application/json' } +postConfigletChangeURL = "/cvpservice/configlet/addNoteToConfiglet.do" +changeData = json.dumps({"note": "Configlet Changed by API", "key": "configlet_516_7018635812307"}) +response = requests.post(url+postConfigletChangeURL, cookies=cookies, data=changeData,headers=headers,verify=False) +assert response.ok +outputConfigletChange = response.json() + +# Print Configlet details + +print "ConfigletChange: %s"%outputConfigletChange['data'] +print "\n" + diff --git a/topologies/training-level-1-3/files/scripts/ConfigletDetail b/topologies/training-level-1-3/files/scripts/ConfigletDetail new file mode 100644 index 000000000..eb2a85937 --- /dev/null +++ b/topologies/training-level-1-3/files/scripts/ConfigletDetail @@ -0,0 +1,43 @@ +import requests +import json + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + +# Create an HTTP GET request to the CVP server + +getConfigletDetailURL = "/cvpservice/configlet/getConfigletByName.do?" +getConfigletParams = {'name':'VLANs'} +response = requests.get(url+getConfigletDetailURL,cookies=cookies, params=getConfigletParams,verify=False) +assert response.ok +outputConfigletDetail = response.json() + +# Print Configlet details + +print "ConfigletKey: %s"%outputConfigletDetail['key'] +print "ConfigletName: %s"%outputConfigletDetail['name'] +print "ConfigletConfig: %s"%outputConfigletDetail['config'] +print "ConfigletNote: %s"%outputConfigletDetail['note'] +print "\n" + + + diff --git a/topologies/training-level-1-3/files/scripts/ConfigletHistory b/topologies/training-level-1-3/files/scripts/ConfigletHistory new file mode 100644 index 000000000..71f1ac693 --- /dev/null +++ b/topologies/training-level-1-3/files/scripts/ConfigletHistory @@ -0,0 +1,41 @@ +import requests +import json + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + +# Create an HTTP GET request to the CVP server + +getConfigletHistoryURL = "/cvpservice/configlet/getConfigletHistory.do?" +getConfigletParams = {'configletId':'configlet_344_7351420097365','startIndex':'0','endIndex':'0'} +response = requests.get(url+getConfigletHistoryURL,cookies=cookies, params=getConfigletParams,verify=False) +assert response.ok +outputConfigletHistory = response.json() + +# Print Configlet details + +for entry in outputConfigletHistory['configletHistory']: + print "ConfigletKey: %s"%entry['key'] + print "ConfigletOldConfig: \n%s"%entry['oldConfig'] + print "ConfigletNewConfig: \n%s"%entry['newConfig'] + print "\n" + diff --git a/topologies/training-level-1-3/files/scripts/TaskBase b/topologies/training-level-1-3/files/scripts/TaskBase new file mode 100644 index 000000000..6f8deccaf --- /dev/null +++ b/topologies/training-level-1-3/files/scripts/TaskBase @@ -0,0 +1,59 @@ +import requests +import json + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + + +# Create an HTTP GET request to the CVP server + +getTasksURL = "/cvpservice/task/getTasks.do?" +getTasksParams = {'startIndex':'0','endIndex':'0','queryparam':'Pending'} +response = requests.get(url+getTasksURL,cookies=cookies, params=getTasksParams,verify=False) +assert response.ok +outputPendingTasks = response.json() + + +# Print Tasks Created by Current User +taskList = [ ] +for entry in outputPendingTasks['data']: + if str(entry['createdBy']) == str(CVP_USER): + print "TaskNumber: %s"%entry['workOrderId'] + taskList.append(str(entry['workOrderId'])) +print "TaskList: %s"%taskList + + + +# Create an HTTP POST request to the CVP server + +headers = { 'Content-Type': 'application/json' } +postTaskLogURL = "/cvpservice/workflow/addWorkOrderLog.do" +taskLogData = json.dumps({"taskId": taskList[1],"message": "This is a test Change","source": "CVP REST API"}) +response = requests.post(url+postTaskLogURL, cookies=cookies, data=taskLogData,headers=headers,verify=False) +assert response.ok +outputTaskLog = response.json() + +# Print Configlet details + +print "TaskLogAmmend: %s"%outputTaskLog['data'] +print "\n" + diff --git a/topologies/training-level-1-3/files/scripts/TaskCVP1 b/topologies/training-level-1-3/files/scripts/TaskCVP1 new file mode 100644 index 000000000..1ebd05764 --- /dev/null +++ b/topologies/training-level-1-3/files/scripts/TaskCVP1 @@ -0,0 +1,48 @@ +import requests +import json + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + +# Print user details + +print "User Name:%s\n "%output['username'] +print "First Name: %s\n "%output['user']['firstName'] +print "Last Name: %s\n "%output['user']['lastName'] + + +getTasksURL = "/cvpservice/task/getTasks.do?" +getTasksParams = {'startIndex':'0','endIndex':'0'} +response = requests.get(url+getTasksURL,cookies=cookies, params=getTasksParams,verify=False) +assert response.ok +outputPendingTasks = response.json() + + +# Print Tasks Created by Current User +taskList = [ ] +for entry in outputPendingTasks['data']: + if str(entry['createdBy']) == str(CVP_USER): + print( "TaskNumber: %s Description: %s" %(entry['workOrderId'],entry['description'])) + taskList.append(str(entry['workOrderId'])) +#print "TaskList: %s"%taskList + + diff --git a/topologies/training-level-1-3/files/scripts/TaskExecute b/topologies/training-level-1-3/files/scripts/TaskExecute new file mode 100644 index 000000000..3db487284 --- /dev/null +++ b/topologies/training-level-1-3/files/scripts/TaskExecute @@ -0,0 +1,56 @@ +import requests +import json + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + + +# Create an HTTP GET request to the CVP server + +getTasksURL = "/cvpservice/task/getTasks.do?" +getTasksParams = {'startIndex':'0','endIndex':'0','queryparam':'Pending'} +response = requests.get(url+getTasksURL,cookies=cookies, params=getTasksParams,verify=False) +assert response.ok +outputPendingTasks = response.json() + + +# Print Tasks Created by Current User +taskList = [ ] +for entry in outputPendingTasks['data']: + if str(entry['createdBy']) == str(CVP_USER): + print "TaskNumber: %s"%entry['workOrderId'] + taskList.append(str(entry['workOrderId'])) +print "TaskList: %s"%taskList + + + +headers = { 'Content-Type': 'application/json' } +postTaskExecuteURL = "/cvpservice/task/executeTask.do" +for taskNumber in taskList: + executeData = json.dumps({'data': [taskNumber]}) + response = requests.post(url+postTaskExecuteURL, cookies=cookies,data=executeData,headers=headers,verify=False) + assert response.ok + outputExecuteTask = response.json() + print (outputExecuteTask['data']) + print "Task: "+str(taskNumber)+" Execute: "+str(outputExecuteTask['data']) + print "\n" + diff --git a/topologies/training-level-1-3/files/scripts/TaskLog b/topologies/training-level-1-3/files/scripts/TaskLog new file mode 100644 index 000000000..c835008b8 --- /dev/null +++ b/topologies/training-level-1-3/files/scripts/TaskLog @@ -0,0 +1,59 @@ +import requests +import json + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + + +# Create an HTTP GET request to the CVP server + +getTasksURL = "/cvpservice/task/getTasks.do?" +getTasksParams = {'startIndex':'0','endIndex':'0'} +response = requests.get(url+getTasksURL,cookies=cookies, params=getTasksParams,verify=False) +assert response.ok +outputTasks = response.json() + + +# Print Tasks Created by Current User +taskList = [ ] +for entry in outputTasks['data']: + if str(entry['createdBy']) == str(CVP_USER): + print "TaskNumber: %s"%entry['workOrderId'] + taskList.append(str(entry['workOrderId'])) +print "TaskList: %s"%taskList + + + +# Create an HTTP POST request to the CVP server + +headers = { 'Content-Type': 'application/json' } +postTaskLogURL = "/cvpservice/workflow/addWorkOrderLog.do" +taskLogData = json.dumps({"taskId": taskList[0],"message": "This is a test Change","source": "CVP REST API"}) +response = requests.post(url+postTaskLogURL, cookies=cookies, data=taskLogData,headers=headers,verify=False) +assert response.ok +outputTaskLog = response.json() + +# Print Configlet details + +print "TaskLogAmmend: %s"%outputTaskLog['data'] +print "\n" + diff --git a/topologies/training-level-1-3/files/scripts/TaskLog1 b/topologies/training-level-1-3/files/scripts/TaskLog1 new file mode 100644 index 000000000..c835008b8 --- /dev/null +++ b/topologies/training-level-1-3/files/scripts/TaskLog1 @@ -0,0 +1,59 @@ +import requests +import json + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + + +# Create an HTTP GET request to the CVP server + +getTasksURL = "/cvpservice/task/getTasks.do?" +getTasksParams = {'startIndex':'0','endIndex':'0'} +response = requests.get(url+getTasksURL,cookies=cookies, params=getTasksParams,verify=False) +assert response.ok +outputTasks = response.json() + + +# Print Tasks Created by Current User +taskList = [ ] +for entry in outputTasks['data']: + if str(entry['createdBy']) == str(CVP_USER): + print "TaskNumber: %s"%entry['workOrderId'] + taskList.append(str(entry['workOrderId'])) +print "TaskList: %s"%taskList + + + +# Create an HTTP POST request to the CVP server + +headers = { 'Content-Type': 'application/json' } +postTaskLogURL = "/cvpservice/workflow/addWorkOrderLog.do" +taskLogData = json.dumps({"taskId": taskList[0],"message": "This is a test Change","source": "CVP REST API"}) +response = requests.post(url+postTaskLogURL, cookies=cookies, data=taskLogData,headers=headers,verify=False) +assert response.ok +outputTaskLog = response.json() + +# Print Configlet details + +print "TaskLogAmmend: %s"%outputTaskLog['data'] +print "\n" + diff --git a/topologies/training-level-1-3/files/scripts/TaskLogView b/topologies/training-level-1-3/files/scripts/TaskLogView new file mode 100644 index 000000000..7b34904dd --- /dev/null +++ b/topologies/training-level-1-3/files/scripts/TaskLogView @@ -0,0 +1,51 @@ +import requests +import json +import pprint + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + + +# Create an HTTP GET request to the CVP server + +getTasksURL = "/cvpservice/task/getTasks.do?" +getTasksParams = {'startIndex':'0','endIndex':'0'} +response = requests.get(url+getTasksURL,cookies=cookies, params=getTasksParams,verify=False) +assert response.ok +outputTasks = response.json() + +taskList = [ ] +for entry in outputTasks['data']: + if str(entry['createdBy']) == str(CVP_USER): + taskList.append(str(entry['workOrderId'])) + +getTaskLogURL = "/cvpservice/task/getLogsById.do?" +#getTaskLogParams = {'startIndex':'0','endIndex':'0','id':'0'} +getTaskLogParams = {'startIndex':'0','endIndex':'0','id':taskList[0]} +response = requests.get(url+getTaskLogURL,cookies=cookies, params=getTaskLogParams,verify=False) +assert response.ok +outputTaskLog = response.json() + +# Print TaskLog details +print "TaskLogOutput: %s" %outputTaskLog['data'] +print "\n" + diff --git a/topologies/training-level-1-3/files/scripts/TaskNote b/topologies/training-level-1-3/files/scripts/TaskNote new file mode 100644 index 000000000..6cd1d6cfd --- /dev/null +++ b/topologies/training-level-1-3/files/scripts/TaskNote @@ -0,0 +1,52 @@ +import requests +import json +import pprint + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + + +# Create an HTTP GET request to the CVP server + +getTasksURL = "/cvpservice/task/getTasks.do?" +getTasksParams = {'startIndex':'0','endIndex':'0'} +response = requests.get(url+getTasksURL,cookies=cookies, params=getTasksParams,verify=False) +assert response.ok +outputTasks = response.json() + +taskList = [ ] +for entry in outputTasks['data']: + if str(entry['createdBy']) == str(CVP_USER): + taskList.append(str(entry['workOrderId'])) + +headers = { 'Content-Type': 'application/json' } +postTaskNoteURL = "/cvpservice/task/addNoteToTask.do" +taskNoteData = json.dumps({"workOrderId": taskList[0],"note": "This is a test Change using the API"}) +response = requests.post(url+postTaskNoteURL, cookies=cookies, data=taskNoteData,headers=headers,verify=False) +assert response.ok +outputTaskNote = response.json() + +# Print Task details + +print "TaskNoteAmmend: %s"%outputTaskNote['data'] +print "\n" + diff --git a/topologies/training-level-1-3/labguides/.gitignore b/topologies/training-level-1-3/labguides/.gitignore new file mode 100644 index 000000000..ed86553f4 --- /dev/null +++ b/topologies/training-level-1-3/labguides/.gitignore @@ -0,0 +1,2 @@ +.DS_Store +build/ diff --git a/topologies/training-level-1-3/labguides/Makefile b/topologies/training-level-1-3/labguides/Makefile new file mode 100644 index 000000000..874ed2529 --- /dev/null +++ b/topologies/training-level-1-3/labguides/Makefile @@ -0,0 +1,20 @@ +# Minimal makefile for Sphinx documentation +# + +# You can set these variables from the command line. +SPHINXOPTS = +SPHINXBUILD = python -msphinx +SPHINXPROJ = ATD +SOURCEDIR = source +BUILDDIR = build + +# Put it first so that "make" without argument is like "make help". +help: + @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) + +.PHONY: help Makefile + +# Catch-all target: route all unknown targets to Sphinx using the new +# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). +%: Makefile + @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) \ No newline at end of file diff --git a/topologies/training-level-1-3/labguides/readme.md b/topologies/training-level-1-3/labguides/readme.md new file mode 100644 index 000000000..5a5369ecd --- /dev/null +++ b/topologies/training-level-1-3/labguides/readme.md @@ -0,0 +1,12 @@ +# Lab Guides +In this folder are rST (restructured text) formatted lab guides for the ATD event. + +## Building +To build the documentation, you will need to install Sphinx and sphinx_bootstrap_theme with `pip`: + +`pip install sphinx sphinx_bootstrap_theme` + +## Contributing +At some point, this section may expand, but for now please make sure to review existing files for formatting guidelines. + +Please see https://github.com/ralsina/rst-cheatsheet/blob/master/rst-cheatsheet.rst for a cheat sheet. \ No newline at end of file diff --git a/topologies/training-level-1-3/labguides/source/_static/arista_logo.png b/topologies/training-level-1-3/labguides/source/_static/arista_logo.png new file mode 100644 index 000000000..2376e72b9 Binary files /dev/null and b/topologies/training-level-1-3/labguides/source/_static/arista_logo.png differ diff --git a/topologies/training-level-1-3/labguides/source/_static/arista_logo_160by26.png b/topologies/training-level-1-3/labguides/source/_static/arista_logo_160by26.png new file mode 100644 index 000000000..d0d0cbeec Binary files /dev/null and b/topologies/training-level-1-3/labguides/source/_static/arista_logo_160by26.png differ diff --git a/topologies/training-level-1-3/labguides/source/_static/arista_logo_320by52.png b/topologies/training-level-1-3/labguides/source/_static/arista_logo_320by52.png new file mode 100644 index 000000000..43dfa7ed2 Binary files /dev/null and b/topologies/training-level-1-3/labguides/source/_static/arista_logo_320by52.png differ diff --git a/topologies/training-level-1-3/labguides/source/_static/cloudvision-icon.png b/topologies/training-level-1-3/labguides/source/_static/cloudvision-icon.png new file mode 100644 index 000000000..c309ed98e Binary files /dev/null and b/topologies/training-level-1-3/labguides/source/_static/cloudvision-icon.png differ diff --git a/topologies/training-level-1-3/labguides/source/_static/logo.jpg b/topologies/training-level-1-3/labguides/source/_static/logo.jpg new file mode 100644 index 000000000..6eda41f7e Binary files /dev/null and b/topologies/training-level-1-3/labguides/source/_static/logo.jpg differ diff --git a/topologies/training-level-1-3/labguides/source/_static/my-styles.css b/topologies/training-level-1-3/labguides/source/_static/my-styles.css new file mode 100644 index 000000000..1150528ee --- /dev/null +++ b/topologies/training-level-1-3/labguides/source/_static/my-styles.css @@ -0,0 +1,41 @@ +body { + background-color: #FFFFFF; + color: #002859 +} + +.navbar-inverse { + background-image: -webkit-linear-gradient(#6d94bf, #446e9b 50%, #002859); + background-image: -o-linear-gradient(#6d94bf, #446e9b 50%, #002859); + background-image: -webkit-gradient(linear, left top, left bottom, from(#6d94bf), color-stop(50%, #446e9b), to(#002859)); + background-image: linear-gradient(#6d94bf, #446e9b 50%, #002859); + background-repeat: no-repeat; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff6d94bf', endColorstr='#ff002859', GradientType=0); + -webkit-filter: none; + filter: none; + border: 1px solid #345578; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.3) +} + +.navbar-brand { + background: url("arista_logo_320by52.png") center / contain no-repeat; + display: inline-block; + width: 1px; + padding: 0 10px 0 60px; + margin-right: 30px; + margin-left: -30px; +} + +.navbar-brand>img { + display: inline-block; + padding: 0 100px 0 0px; + margin-right: 20px; +} +a.navbar-brand { + display: inline-block; + padding: 15px 0 0 120px; +} + +footer { + background-color: #002859; + color: #FFFFFF; +} diff --git a/topologies/training-level-1-3/labguides/source/conf.py b/topologies/training-level-1-3/labguides/source/conf.py new file mode 100644 index 000000000..afccec09c --- /dev/null +++ b/topologies/training-level-1-3/labguides/source/conf.py @@ -0,0 +1,247 @@ +# -*- coding: utf-8 -*- +# +# ATD documentation build configuration file, created by +# sphinx-quickstart on Tue Apr 17 10:00:04 2018. +# +# This file is execfile()d with the current directory set to its +# containing dir. +# +# Note that not all possible configuration values are present in this +# autogenerated file. +# +# All configuration values have a default; values that are commented out +# serve to show the default. + +# If extensions (or modules to document with autodoc) are in another directory, +# add these directories to sys.path here. If the directory is relative to the +# documentation root, use os.path.abspath to make it absolute, like shown here. +# +# import os +# import sys +# sys.path.insert(0, os.path.abspath('.')) + +import sphinx_bootstrap_theme + +# Importing datetime module to auto update copyright year +from datetime import date + +# -- General configuration ------------------------------------------------ + +# If your documentation needs a minimal Sphinx version, state it here. +# +# needs_sphinx = '1.0' + +# Add any Sphinx extension module names here, as strings. They can be +# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom +# ones. + +# Add any paths that contain templates here, relative to this directory. +templates_path = ['_templates'] + +# The suffix(es) of source filenames. +# You can specify multiple suffix as a list of string: +# +# source_suffix = ['.rst', '.md'] +source_suffix = '.rst' + +# The master toctree document. +master_doc = 'index' + +# General information about the project. +# Updating copyright var to auto update with current year +project = u'Arista ATD' +copyright = u'{0}, Arista Networks'.format(date.today().year) +author = u'Arista ATD atd-help@arista.com' + +# Show Source +html_show_sourcelink = False + +# The version info for the project you're documenting, acts as replacement for +# |version| and |release|, also used in various other places throughout the +# built documents. +# +# The short X.Y version. +version = u'Version 3.0' +# The full version, including alpha/beta/rc tags. +release = u'1' + +# The language for content autogenerated by Sphinx. Refer to documentation +# for a list of supported languages. +# +# This is also used if you do content translation via gettext catalogs. +# Usually you set "language" from the command line for these cases. +language = None + +# List of patterns, relative to source directory, that match files and +# directories to ignore when looking for source files. +# This patterns also effect to html_static_path and html_extra_path +exclude_patterns = [] + +# The name of the Pygments (syntax highlighting) style to use. +pygments_style = 'sphinx' + +# If true, `todo` and `todoList` produce output, else they produce nothing. +todo_include_todos = False + + +# -- Options for HTML output ---------------------------------------------- + +# The theme to use for HTML and HTML Help pages. See the documentation for +# a list of builtin themes. +# +#html_theme = 'alabaster' +html_theme = 'bootstrap' +html_theme_path = sphinx_bootstrap_theme.get_html_theme_path() + +# Add any paths that contain custom static files (such as style sheets) here, +# relative to this directory. They are copied after the builtin static files, +# so a file named "default.css" will overwrite the builtin "default.css". +html_static_path = ['_static'] + +# Theme options are theme-specific and customize the look and feel of a theme +# further. For a list of options available for each theme, see the +# documentation. +# +html_theme_options = { + # Navigation bar title. (Default: ``project`` value) + 'navbar_title': "ATD", + + # Tab name for entire site. (Default: "Site") + 'navbar_site_name': "Table of Contents", + + # A list of tuples containing pages or urls to link to. + # Valid tuples should be in the following forms: + # (name, page) # a link to a page + # (name, "/aa/bb", 1) # a link to an arbitrary relative url + # (name, "http://example.com", True) # arbitrary absolute url + # Note the "1" or "True" value above as the third argument to indicate + # an arbitrary url. + 'navbar_links': [ + ("Arista", "http://www.arista.com", True), + ], + + # Render the next and previous page links in navbar. (Default: true) + 'navbar_sidebarrel': True, + + # Render the current pages TOC in the navbar. (Default: true) + 'navbar_pagenav': False, + + # Tab name for the current pages TOC. (Default: "Page") + 'navbar_pagenav_name': "Page", + + # Global TOC depth for "site" navbar tab. (Default: 1) + # Switching to -1 shows all levels. + 'globaltoc_depth': 2, + + # Include hidden TOCs in Site navbar? + # + # Note: If this is "false", you cannot have mixed ``:hidden:`` and + # non-hidden ``toctree`` directives in the same page, or else the build + # will break. + # + # Values: "true" (default) or "false" + 'globaltoc_includehidden': "true", + + # HTML navbar class (Default: "navbar") to attach to
    element. + # For black navbar, do "navbar navbar-inverse" + #'navbar_class': "navbar navbar-inverse", + 'navbar_class': "navbar", + + # Fix navigation bar to top of page? + # Values: "true" (default) or "false" + 'navbar_fixed_top': "true", + + # Location of link to source. + # Options are "nav" (default), "footer" or anything else to exclude. + #'source_link_position': "nav", + + # Bootswatch (http://bootswatch.com/) theme. + # + # Options are nothing (default) or the name of a valid theme + # such as "cosmo" or "sandstone". + # + # The set of valid themes depend on the version of Bootstrap + # that's used (the next config option). + # + # Currently, the supported themes are: + # - Bootstrap 2: https://bootswatch.com/2 + # - Bootstrap 3: https://bootswatch.com/3 + 'bootswatch_theme': "spacelab", + + # Choose Bootstrap version. + # Values: "3" (default) or "2" (in quotes) + 'bootstrap_version': "3", +} + +# The name for this set of Sphinx documents. If None, it defaults to +# " v documentation". +#html_title = "AristaATD" + +# A shorter title for the navigation bar. Default is the same as html_title. +#html_short_title = "Demo" + +# (Optional) Logo. Should be small enough to fit the navbar (ideally 24x24). +# Path should be relative to the ``_static`` files directory. +#html_logo = "cloudvision-icon.png" + +# -- Options for HTMLHelp output ------------------------------------------ + +# Output file base name for HTML help builder. +htmlhelp_basename = 'AristaATD' + + +# -- Options for LaTeX output --------------------------------------------- + +latex_elements = { + # The paper size ('letterpaper' or 'a4paper'). + # + # 'papersize': 'letterpaper', + + # The font size ('10pt', '11pt' or '12pt'). + # + # 'pointsize': '10pt', + + # Additional stuff for the LaTeX preamble. + # + # 'preamble': '', + + # Latex figure (float) alignment + # + # 'figure_align': 'htbp', +} + +# Grouping the document tree into LaTeX files. List of tuples +# (source start file, target name, title, +# author, documentclass [howto, manual, or own class]). +latex_documents = [ + (master_doc, 'ATD.tex', u'ATD Lab Guide', + u'ATD Help (atd-help@arista.com)', 'manual'), +] + + +# -- Options for manual page output --------------------------------------- + +# One entry per manual page. List of tuples +# (source start file, name, description, authors, manual section). +man_pages = [ + (master_doc, 'atd', u'ATD Lab Guide', + [author], 1) +] + + +# -- Options for Texinfo output ------------------------------------------- + +# Grouping the document tree into Texinfo files. List of tuples +# (source start file, target name, title, author, +# dir menu entry, description, category) +texinfo_documents = [ + (master_doc, 'ATD', u'ATD Lab Guide', + author, 'ATD', 'Lab Documentation.', + 'Miscellaneous'), +] + + +def setup(app): + app.add_stylesheet("my-styles.css") # also can be a full URL + # app.add_stylesheet("ANOTHER.css") + # app.add_stylesheet("AND_ANOTHER.css") diff --git a/topologies/training-level-1-3/labguides/source/connecting.rst b/topologies/training-level-1-3/labguides/source/connecting.rst new file mode 100644 index 000000000..10ae589ef --- /dev/null +++ b/topologies/training-level-1-3/labguides/source/connecting.rst @@ -0,0 +1,28 @@ +Connecting +========== + +1. Log into the Arista Test Drive portal with your assigned URL. If you + don’t have one, please see your ATD staff. + +.. image:: images/connecting/nested_connecting_1.png + +2. SSH to the public address assigned to the LabAccess jumphost server (this is the Topology Address shown in the "Welcome to Arista's Test Drive!" picture above). The username is ``arista`` and the password is ``{REPLACE_PWD}``: + + .. code-block:: text + + ssh arista@{unique_address}.topo.testdrive.arista.com + +| + +.. image:: images/connecting/nested_connecting_2.png + :align: center + +| + +3. The LabAccess menu allows users to connect to each device and specify + lab topology. It is recommended to open multiple SSH sessions or use + the Screen option (under the SSH Menu) to jump between devices rapidly. + + You can also Access the LabAccess Menu from your browser by clicking on `Console Access` + +.. image:: images/connecting/nested_connecting_3.png diff --git a/topologies/training-level-1-3/labguides/source/images/connecting/nested_connecting_1.png b/topologies/training-level-1-3/labguides/source/images/connecting/nested_connecting_1.png new file mode 100644 index 000000000..aa76597b8 Binary files /dev/null and b/topologies/training-level-1-3/labguides/source/images/connecting/nested_connecting_1.png differ diff --git a/topologies/training-level-1-3/labguides/source/images/connecting/nested_connecting_2.png b/topologies/training-level-1-3/labguides/source/images/connecting/nested_connecting_2.png new file mode 100644 index 000000000..2c6b51a2b Binary files /dev/null and b/topologies/training-level-1-3/labguides/source/images/connecting/nested_connecting_2.png differ diff --git a/topologies/training-level-1-3/labguides/source/images/connecting/nested_connecting_3.png b/topologies/training-level-1-3/labguides/source/images/connecting/nested_connecting_3.png new file mode 100644 index 000000000..1cc7402a3 Binary files /dev/null and b/topologies/training-level-1-3/labguides/source/images/connecting/nested_connecting_3.png differ diff --git a/topologies/training-level-1-3/labguides/source/images/logo.jpg b/topologies/training-level-1-3/labguides/source/images/logo.jpg new file mode 100644 index 000000000..6eda41f7e Binary files /dev/null and b/topologies/training-level-1-3/labguides/source/images/logo.jpg differ diff --git a/topologies/training-level-1-3/labguides/source/index.rst b/topologies/training-level-1-3/labguides/source/index.rst new file mode 100644 index 000000000..bb76aaa2e --- /dev/null +++ b/topologies/training-level-1-3/labguides/source/index.rst @@ -0,0 +1,8 @@ +Welcome to the Arista Training documentation! +======================================== + +.. toctree:: + :maxdepth: 1 + :caption: EOS Configuration + + connecting.rst diff --git a/topologies/training-level-1-3/topo_build.yml b/topologies/training-level-1-3/topo_build.yml new file mode 100644 index 000000000..e7d0762c7 --- /dev/null +++ b/topologies/training-level-1-3/topo_build.yml @@ -0,0 +1,415 @@ +host_cpu: 4 +cvp_cpu: 24 +cvp_nodes: 1 +veos_cpu: 2 +nodes: + - spine1: + ip_addr: 192.168.0.11 + sys_mac: 00:1c:73:b1:c6:01 + neighbors: + - neighborDevice: spine2 + neighborPort: Ethernet1 + port: Ethernet1 + - neighborDevice: spine2 + neighborPort: Ethernet2 + port: Ethernet2 + - neighborDevice: leaf1 + neighborPort: Ethernet3 + port: Ethernet3 + - neighborDevice: leaf2 + neighborPort: Ethernet3 + port: Ethernet4 + - neighborDevice: leaf3 + neighborPort: Ethernet3 + port: Ethernet5 + - neighborDevice: leaf4 + neighborPort: Ethernet3 + port: Ethernet6 + - neighborDevice: borderleaf1 + neighborPort: Ethernet3 + port: Ethernet7 + - neighborDevice: borderleaf2 + neighborPort: Ethernet3 + port: Ethernet8 + - spine2: + ip_addr: 192.168.0.12 + sys_mac: 00:1c:73:b2:c6:01 + neighbors: + - neighborDevice: spine1 + neighborPort: Ethernet1 + port: Ethernet1 + - neighborDevice: spine1 + neighborPort: Ethernet2 + port: Ethernet2 + - neighborDevice: leaf1 + neighborPort: Ethernet4 + port: Ethernet3 + - neighborDevice: leaf2 + neighborPort: Ethernet4 + port: Ethernet4 + - neighborDevice: leaf3 + neighborPort: Ethernet4 + port: Ethernet5 + - neighborDevice: leaf4 + neighborPort: Ethernet4 + port: Ethernet6 + - neighborDevice: borderleaf1 + neighborPort: Ethernet4 + port: Ethernet7 + - neighborDevice: borderleaf2 + neighborPort: Ethernet4 + port: Ethernet8 + - spine3: + ip_addr: 192.168.0.13 + sys_mac: 00:1c:73:b3:c6:01 + neighbors: + - neighborDevice: spine4 + neighborPort: Ethernet1 + port: Ethernet1 + - neighborDevice: spine4 + neighborPort: Ethernet2 + port: Ethernet2 + - neighborDevice: leaf1 + neighborPort: Ethernet5 + port: Ethernet3 + - neighborDevice: leaf2 + neighborPort: Ethernet5 + port: Ethernet4 + - neighborDevice: leaf3 + neighborPort: Ethernet5 + port: Ethernet5 + - neighborDevice: leaf4 + neighborPort: Ethernet5 + port: Ethernet6 + - neighborDevice: borderleaf1 + neighborPort: Ethernet5 + port: Ethernet7 + - neighborDevice: borderleaf2 + neighborPort: Ethernet5 + port: Ethernet8 + - spine4: + ip_addr: 192.168.0.14 + sys_mac: 00:1c:73:b4:c6:01 + neighbors: + - neighborDevice: spine3 + neighborPort: Ethernet1 + port: Ethernet1 + - neighborDevice: spine3 + neighborPort: Ethernet2 + port: Ethernet2 + - neighborDevice: leaf1 + neighborPort: Ethernet6 + port: Ethernet3 + - neighborDevice: leaf2 + neighborPort: Ethernet6 + port: Ethernet4 + - neighborDevice: leaf3 + neighborPort: Ethernet6 + port: Ethernet5 + - neighborDevice: leaf4 + neighborPort: Ethernet6 + port: Ethernet6 + - neighborDevice: borderleaf1 + neighborPort: Ethernet6 + port: Ethernet7 + - neighborDevice: borderleaf2 + neighborPort: Ethernet6 + port: Ethernet8 + - leaf1: + ip_addr: 192.168.0.21 + sys_mac: 00:1c:73:c1:c6:01 + neighbors: + - neighborDevice: leaf2 + neighborPort: Ethernet1 + port: Ethernet1 + - neighborDevice: leaf2 + neighborPort: Ethernet2 + port: Ethernet2 + - neighborDevice: spine1 + neighborPort: Ethernet3 + port: Ethernet3 + - neighborDevice: spine2 + neighborPort: Ethernet3 + port: Ethernet4 + - neighborDevice: spine3 + neighborPort: Ethernet3 + port: Ethernet5 + - neighborDevice: spine4 + neighborPort: Ethernet3 + port: Ethernet6 + - neighborDevice: host1 + neighborPort: Ethernet1 + port: Ethernet7 + - neighborDevice: host1 + neighborPort: Ethernet3 + port: Ethernet8 + - neighborDevice: host2 + neighborPort: Ethernet1 + port: Ethernet9 + - neighborDevice: host2 + neighborPort: Ethernet3 + port: Ethernet10 + - leaf2: + ip_addr: 192.168.0.22 + sys_mac: 00:1c:73:c2:c6:01 + neighbors: + - neighborDevice: leaf1 + neighborPort: Ethernet1 + port: Ethernet1 + - neighborDevice: leaf1 + neighborPort: Ethernet2 + port: Ethernet2 + - neighborDevice: spine1 + neighborPort: Ethernet4 + port: Ethernet3 + - neighborDevice: spine2 + neighborPort: Ethernet4 + port: Ethernet4 + - neighborDevice: spine3 + neighborPort: Ethernet4 + port: Ethernet5 + - neighborDevice: spine4 + neighborPort: Ethernet4 + port: Ethernet6 + - neighborDevice: host1 + neighborPort: Ethernet2 + port: Ethernet7 + - neighborDevice: host1 + neighborPort: Ethernet4 + port: Ethernet8 + - neighborDevice: host2 + neighborPort: Ethernet2 + port: Ethernet9 + - neighborDevice: host2 + neighborPort: Ethernet4 + port: Ethernet10 + - leaf3: + ip_addr: 192.168.0.23 + sys_mac: 00:1c:73:c3:c6:01 + neighbors: + - neighborDevice: leaf4 + neighborPort: Ethernet1 + port: Ethernet1 + - neighborDevice: leaf4 + neighborPort: Ethernet2 + port: Ethernet2 + - neighborDevice: spine1 + neighborPort: Ethernet5 + port: Ethernet3 + - neighborDevice: spine2 + neighborPort: Ethernet5 + port: Ethernet4 + - neighborDevice: spine3 + neighborPort: Ethernet5 + port: Ethernet5 + - neighborDevice: spine4 + neighborPort: Ethernet5 + port: Ethernet6 + - neighborDevice: host3 + neighborPort: Ethernet1 + port: Ethernet7 + - neighborDevice: host3 + neighborPort: Ethernet3 + port: Ethernet8 + - neighborDevice: host4 + neighborPort: Ethernet1 + port: Ethernet9 + - neighborDevice: host4 + neighborPort: Ethernet3 + port: Ethernet10 + - leaf4: + ip_addr: 192.168.0.24 + sys_mac: 00:1c:73:c4:c6:01 + neighbors: + - neighborDevice: leaf3 + neighborPort: Ethernet1 + port: Ethernet1 + - neighborDevice: leaf3 + neighborPort: Ethernet2 + port: Ethernet2 + - neighborDevice: spine1 + neighborPort: Ethernet6 + port: Ethernet3 + - neighborDevice: spine2 + neighborPort: Ethernet6 + port: Ethernet4 + - neighborDevice: spine3 + neighborPort: Ethernet6 + port: Ethernet5 + - neighborDevice: spine4 + neighborPort: Ethernet6 + port: Ethernet6 + - neighborDevice: host3 + neighborPort: Ethernet2 + port: Ethernet7 + - neighborDevice: host3 + neighborPort: Ethernet4 + port: Ethernet8 + - neighborDevice: host4 + neighborPort: Ethernet2 + port: Ethernet9 + - neighborDevice: host4 + neighborPort: Ethernet4 + port: Ethernet10 + - borderleaf1: + ip_addr: 192.168.0.25 + sys_mac: 00:1c:73:c5:c6:01 + neighbors: + - neighborDevice: borderleaf2 + neighborPort: Ethernet1 + port: Ethernet1 + - neighborDevice: borderleaf2 + neighborPort: Ethernet2 + port: Ethernet2 + - neighborDevice: spine1 + neighborPort: Ethernet7 + port: Ethernet3 + - neighborDevice: spine2 + neighborPort: Ethernet7 + port: Ethernet4 + - neighborDevice: spine3 + neighborPort: Ethernet7 + port: Ethernet5 + - neighborDevice: spine4 + neighborPort: Ethernet7 + port: Ethernet6 + - borderleaf2: + ip_addr: 192.168.0.26 + sys_mac: 00:1c:73:c6:c6:01 + neighbors: + - neighborDevice: borderleaf1 + neighborPort: Ethernet1 + port: Ethernet1 + - neighborDevice: borderleaf1 + neighborPort: Ethernet2 + port: Ethernet2 + - neighborDevice: spine1 + neighborPort: Ethernet8 + port: Ethernet3 + - neighborDevice: spine2 + neighborPort: Ethernet8 + port: Ethernet4 + - neighborDevice: spine3 + neighborPort: Ethernet8 + port: Ethernet5 + - neighborDevice: spine4 + neighborPort: Ethernet8 + port: Ethernet6 + - host1: + ip_addr: 192.168.0.51 + sys_mac: 00:1c:73:f1:c6:01 + neighbors: + - neighborDevice: leaf1 + neighborPort: Ethernet7 + port: Ethernet1 + - neighborDevice: leaf2 + neighborPort: Ethernet7 + port: Ethernet2 + - neighborDevice: leaf1 + neighborPort: Ethernet8 + port: Ethernet3 + - neighborDevice: leaf2 + neighborPort: Ethernet8 + port: Ethernet4 + - host2: + ip_addr: 192.168.0.52 + sys_mac: 00:1c:73:f2:c6:01 + neighbors: + - neighborDevice: leaf1 + neighborPort: Ethernet9 + port: Ethernet1 + - neighborDevice: leaf2 + neighborPort: Ethernet9 + port: Ethernet2 + - neighborDevice: leaf1 + neighborPort: Ethernet10 + port: Ethernet3 + - neighborDevice: leaf2 + neighborPort: Ethernet10 + port: Ethernet4 + - host3: + ip_addr: 192.168.0.53 + sys_mac: 00:1c:73:f3:c6:01 + neighbors: + - neighborDevice: leaf3 + neighborPort: Ethernet7 + port: Ethernet1 + - neighborDevice: leaf4 + neighborPort: Ethernet7 + port: Ethernet2 + - neighborDevice: leaf3 + neighborPort: Ethernet8 + port: Ethernet3 + - neighborDevice: leaf4 + neighborPort: Ethernet8 + port: Ethernet4 + - host4: + ip_addr: 192.168.0.54 + sys_mac: 00:1c:73:f4:c6:01 + neighbors: + - neighborDevice: leaf3 + neighborPort: Ethernet9 + port: Ethernet1 + - neighborDevice: leaf4 + neighborPort: Ethernet9 + port: Ethernet2 + - neighborDevice: leaf3 + neighborPort: Ethernet10 + port: Ethernet3 + - neighborDevice: leaf4 + neighborPort: Ethernet10 + port: Ethernet4 +servers: + - server1: + ami_name: "cloud-deploy-generic-CentOS-8-8.2.2004" + size: "t2.medium" + type: generic + ip_addr: 192.168.0.41 + sys_mac: 00:1c:73:e1:c6:01 + neighbors: + - neighborDevice: leaf1 + neighborPort: Ethernet11 + port: Ethernet1 + - neighborDevice: leaf2 + neighborPort: Ethernet11 + port: Ethernet2 + - server2: + ami_name: "cloud-deploy-generic-CentOS-8-8.2.2004" + size: "t2.medium" + type: generic + ip_addr: 192.168.0.42 + sys_mac: 00:1c:73:e2:c6:01 + neighbors: + - neighborDevice: leaf1 + neighborPort: Ethernet12 + port: Ethernet2 + - neighborDevice: leaf2 + neighborPort: Ethernet12 + port: Ethernet1 + - server3: + ami_name: "cloud-deploy-generic-CentOS-8-8.2.2004" + size: "t2.medium" + type: generic + ip_addr: 192.168.0.43 + sys_mac: 00:1c:73:e3:c6:01 + neighbors: + - neighborDevice: leaf3 + neighborPort: Ethernet11 + port: Ethernet1 + - neighborDevice: leaf3 + neighborPort: Ethernet12 + port: Ethernet2 + - server4: + ami_name: "cloud-deploy-generic-CentOS-8-8.2.2004" + size: "t2.medium" + type: generic + ip_addr: 192.168.0.44 + sys_mac: 00:1c:73:e4:c6:01 + neighbors: + - neighborDevice: leaf4 + neighborPort: Ethernet11 + port: Ethernet1 + - neighborDevice: leaf4 + neighborPort: Ethernet12 + port: Ethernet2 +additional_ssh_nodes: diff --git a/topologies/training-level-1-cl/atd-topo-bkp-2.png b/topologies/training-level-1-cl/atd-topo-bkp-2.png new file mode 100644 index 000000000..ce621aec8 Binary files /dev/null and b/topologies/training-level-1-cl/atd-topo-bkp-2.png differ diff --git a/topologies/training-level-1-cl/atd-topo-bkp.png b/topologies/training-level-1-cl/atd-topo-bkp.png new file mode 100644 index 000000000..4cc023b85 Binary files /dev/null and b/topologies/training-level-1-cl/atd-topo-bkp.png differ diff --git a/topologies/training-level-1-cl/atd-topo.png b/topologies/training-level-1-cl/atd-topo.png new file mode 100644 index 000000000..53ba5d7d9 Binary files /dev/null and b/topologies/training-level-1-cl/atd-topo.png differ diff --git a/topologies/training-level-1-cl/configlets/ATD-INFRA b/topologies/training-level-1-cl/configlets/ATD-INFRA new file mode 100644 index 000000000..de87bc743 --- /dev/null +++ b/topologies/training-level-1-cl/configlets/ATD-INFRA @@ -0,0 +1,53 @@ +vrf instance MGMT +! +daemon TerminAttr + exec /usr/bin/TerminAttr -cvcompression=gzip -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent -cvaddr=192.168.0.5:9910 -cvauth=token,/tmp/token -cvvrf=MGMT -taillogs -disableaaa + no shutdown +! +alias mlag-reload bash /mnt/flash/shut_intfs && sudo shutdown now -r +alias conint sh interface | i connected +alias senz show interface counter error | nz +alias shmc show int | awk '/^[A-Z]/ { intf = $1 } /, address is/ { print intf, $6 }' +alias snz show interface counter | nz +alias spd show port-channel %1 detail all +alias sqnz show interface counter queue | nz +alias srnz show interface counter rate | nz +alias intdesc + !! Usage: intdesc interface-name description + 10 config + 20 int %1 + 30 desc %2 + 40 exit +! +dns domain arista.lab +! +service routing protocols model multi-agent +! +ntp server vrf MGMT 192.168.0.1 iburst source Management0 +! +radius-server host 192.168.0.1 vrf MGMT key 7 0207165218120E +! +aaa group server radius atds + server 192.168.0.1 vrf MGMT +! +aaa authentication login default group atds local +aaa authorization exec default group atds local +aaa authorization commands all default local +! +username Script secret sha512 $6$PNfpb9anSBQ5/aia$phaa3ar5pwkntenD9WHc6Ed5b96lbW0dc0bjtwPnFLaDiCK8D5Cjl6ewP/xdNbl4PtS6Paq.3SssN8pj05NQm. +username admin privilege 15 role network-admin secret 5 $1$5O85YVVn$HrXcfOivJEnISTMb6xrJc. +username arista privilege 15 role network-admin secret 5 $1$4VjIjfd1$XkUVulbNDESHFzcxDU.Tk1 +! +username arista ssh-key ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC+ERvV4GaPq3FzxY8T+5hMF/1T+l8wiPsVCtOrZU4Hy6NCNlAiDBdA/RUtX5/aOu5JvHyPTVHqWJ0qi9BqU3rxCNl/l2/5UZbm9RPzdZ1QCwoYwPB9/j/tYJV8lZdr6t0yGBfxgzD3oW/zF7a+ZtASaMAu7lkgoqPK2pVIGa+Y9ZCsA0Xq756XpLCw+d3pHKHvIkgWLCo9FoeIv8f/bu5u/ztzRE+Nvl+o5add6MxnjsXz3s7BnW2FX6JNjyp0Z+OXjupQc2gcfFvpd/dA2lCNuuaCHkRgyPwIZtWPmNqMRXPp37mlPwV43qDJRVPQkvh0xPxwS35BbzUxWdT+ZLZv +! +ip radius source-interface Management0 +! +ip routing vrf MGMT +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 +! +management api http-commands + no shutdown + vrf MGMT + no shutdown +! diff --git a/topologies/training-level-1-cl/configlets/Base-Builder.py b/topologies/training-level-1-cl/configlets/Base-Builder.py new file mode 100644 index 000000000..167d9c750 --- /dev/null +++ b/topologies/training-level-1-cl/configlets/Base-Builder.py @@ -0,0 +1,86 @@ +from cvplibrary import CVPGlobalVariables, GlobalVariableNames, Form + + + +# Get this devices Serial + + +serial = CVPGlobalVariables.getValue( GlobalVariableNames.CVP_SERIAL ) +mask = '24' +ServiceRouting = True + +#Create the IP address from the serial number + + +if serial == '4A7F6E96300132903A73A74CCF18B697': + IPaddress = '192.168.0.21' + hostname = 'leaf1' + + +elif serial == '3831DEFC364900BF9EEFC45FEE7794E7': + IPaddress = '192.168.0.22' + hostname = 'leaf2' + + +elif serial == 'ED469CFA13C4017B2D19BF7EBCAD50B1': + IPaddress = '192.168.0.23' + hostname = 'leaf3' + + +elif serial == '434653268ABA082A2FF6B52F1367CE80': + IPaddress = '192.168.0.24' + hostname = 'leaf4' + +elif serial == '8085B9640BC6D8FDC1FD23D242EBF433': + IPaddress = '192.168.0.11' + hostname = 'spine1' + +elif serial == 'D28D62E5729AB8BF44A0BC017DEB188A': + IPaddress = '192.168.0.12' + hostname = 'spine2' + +elif serial == 'F77703A62ADE220E689A41057AA56288': + IPaddress = '192.168.0.13' + hostname = 'spine3' + +elif serial == 'D763323F00C03738A8C824D2F1DA05E8': + IPaddress = '192.168.0.25' + hostname = 'borderleaf1' + +elif serial == '7C16136B7483F2E2FB002E8E0646F1F0': + IPaddress = '192.168.0.26' + hostname = 'borderleaf2' + +elif serial == '86342B780ED73BCB30E1DFE48E26AC38': + IPaddress = '192.168.0.51' + ServiceRouting = False + hostname = 'host1' + + +elif serial == 'CE0B31805130945E3CE40B060E9E636D': + IPaddress = '192.168.0.52' + ServiceRouting = False + hostname = 'host2' + + +# Generate and print config - Ignore the service routing command if not needed +print 'hostname %s' % hostname +print '!' +print 'interface Management 1' +print ' ip address %s/%s' % ( IPaddress, mask ) +print ' no lldp transmit' +print ' no lldp receive' +print '!' +if ServiceRouting: + print 'service routing protocols model multi-agent' + print '!' +print 'dns domain arista.lab' +print '!' +print 'ip route 0.0.0.0/0 192.168.0.1' +print '!' +print 'ip routing' +print '!' +print 'management api http-commands' +print ' no shutdown' +print ' protocol http' +print '!' \ No newline at end of file diff --git a/topologies/training-level-1-cl/configlets/borderleaf1-base b/topologies/training-level-1-cl/configlets/borderleaf1-base new file mode 100644 index 000000000..e274c6eb4 --- /dev/null +++ b/topologies/training-level-1-cl/configlets/borderleaf1-base @@ -0,0 +1,14 @@ +hostname borderleaf1 +! +interface Management 0 + vrf MGMT + ip address 192.168.0.25/24 +! +service routing protocols model multi-agent +! +dns domain arista.lab +! +ip routing vrf MGMT +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 +! diff --git a/topologies/training-level-1-cl/configlets/borderleaf2-base b/topologies/training-level-1-cl/configlets/borderleaf2-base new file mode 100644 index 000000000..a7778e0b4 --- /dev/null +++ b/topologies/training-level-1-cl/configlets/borderleaf2-base @@ -0,0 +1,14 @@ +hostname borderleaf2 +! +interface Management 0 + vrf MGMT + ip address 192.168.0.26/24 + +! +service routing protocols model multi-agent +! +dns domain arista.lab +! +ip routing vrf MGMT +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 diff --git a/topologies/training-level-1-cl/configlets/host1-base b/topologies/training-level-1-cl/configlets/host1-base new file mode 100644 index 000000000..915d58edb --- /dev/null +++ b/topologies/training-level-1-cl/configlets/host1-base @@ -0,0 +1,15 @@ +hostname host1 +! +spanning-tree mode none +! +interface Management 0 + vrf MGMT + ip address 192.168.0.51/24 + + +! +dns domain arista.lab +! +ip routing vrf MGMT +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 diff --git a/topologies/training-level-1-cl/configlets/host2-base b/topologies/training-level-1-cl/configlets/host2-base new file mode 100644 index 000000000..63f0c9c38 --- /dev/null +++ b/topologies/training-level-1-cl/configlets/host2-base @@ -0,0 +1,15 @@ +hostname host2 +! +spanning-tree mode none +! +interface Management 0 + vrf MGMT + ip address 192.168.0.52/24 + + +! +dns domain arista.lab +! +ip routing vrf MGMT +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 diff --git a/topologies/training-level-1-cl/configlets/host3-base b/topologies/training-level-1-cl/configlets/host3-base new file mode 100644 index 000000000..979a49b28 --- /dev/null +++ b/topologies/training-level-1-cl/configlets/host3-base @@ -0,0 +1,15 @@ +hostname host3 +! +spanning-tree mode none +! +interface Management 0 + vrf MGMT + ip address 192.168.0.53/24 + + +! +dns domain arista.lab +! +ip routing vrf MGMT +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 diff --git a/topologies/training-level-1-cl/configlets/host4-base b/topologies/training-level-1-cl/configlets/host4-base new file mode 100644 index 000000000..f85e77a77 --- /dev/null +++ b/topologies/training-level-1-cl/configlets/host4-base @@ -0,0 +1,15 @@ +hostname host4 +! +spanning-tree mode none +! +interface Management 0 + vrf MGMT + ip address 192.168.0.54/24 + +! +dns domain arista.lab +! +ip routing vrf MGMT +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 + diff --git a/topologies/training-level-1-cl/configlets/leaf1-base b/topologies/training-level-1-cl/configlets/leaf1-base new file mode 100644 index 000000000..7b316b33b --- /dev/null +++ b/topologies/training-level-1-cl/configlets/leaf1-base @@ -0,0 +1,13 @@ +hostname leaf1 +! +interface Management 0 + vrf MGMT + ip address 192.168.0.21/24 + +service routing protocols model multi-agent +! +dns domain arista.lab +! +ip routing vrf MGMT +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 diff --git a/topologies/training-level-1-cl/configlets/leaf2-base b/topologies/training-level-1-cl/configlets/leaf2-base new file mode 100644 index 000000000..22fffb444 --- /dev/null +++ b/topologies/training-level-1-cl/configlets/leaf2-base @@ -0,0 +1,15 @@ +hostname leaf2 +! +interface Management 0 + vrf MGMT + ip address 192.168.0.22/24 + + +! +service routing protocols model multi-agent +! +dns domain arista.lab +! +ip routing vrf MGMT +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 diff --git a/topologies/training-level-1-cl/configlets/leaf3-base b/topologies/training-level-1-cl/configlets/leaf3-base new file mode 100644 index 000000000..37e7bc8d3 --- /dev/null +++ b/topologies/training-level-1-cl/configlets/leaf3-base @@ -0,0 +1,13 @@ +hostname leaf3 +! +interface Management 0 + vrf MGMT + ip address 192.168.0.23/24 + +service routing protocols model multi-agent +! +dns domain arista.lab +! +ip routing vrf MGMT +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 diff --git a/topologies/training-level-1-cl/configlets/leaf4-base b/topologies/training-level-1-cl/configlets/leaf4-base new file mode 100644 index 000000000..f0cff7b25 --- /dev/null +++ b/topologies/training-level-1-cl/configlets/leaf4-base @@ -0,0 +1,13 @@ +hostname leaf4 +! +interface Management 0 + vrf MGMT + ip address 192.168.0.24/24 + +service routing protocols model multi-agent +! +dns domain arista.lab +! +ip routing vrf MGMT +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 diff --git a/topologies/training-level-1-cl/configlets/spine1-base b/topologies/training-level-1-cl/configlets/spine1-base new file mode 100644 index 000000000..5e9d072b1 --- /dev/null +++ b/topologies/training-level-1-cl/configlets/spine1-base @@ -0,0 +1,14 @@ +hostname spine1 +! +interface Management 0 + vrf MGMT + ip address 192.168.0.11/24 + +! +service routing protocols model multi-agent +! +dns domain arista.lab +! +ip routing vrf MGMT +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 diff --git a/topologies/training-level-1-cl/configlets/spine2-base b/topologies/training-level-1-cl/configlets/spine2-base new file mode 100644 index 000000000..cc9d0bef1 --- /dev/null +++ b/topologies/training-level-1-cl/configlets/spine2-base @@ -0,0 +1,13 @@ +hostname spine2 +! +interface Management 0 + vrf MGMT + ip address 192.168.0.12/24 + +service routing protocols model multi-agent +! +dns domain arista.lab +! +ip routing vrf MGMT +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 diff --git a/topologies/training-level-1-cl/configlets/spine3-base b/topologies/training-level-1-cl/configlets/spine3-base new file mode 100644 index 000000000..853f6564a --- /dev/null +++ b/topologies/training-level-1-cl/configlets/spine3-base @@ -0,0 +1,14 @@ +hostname spine3 +! +interface Management 0 + vrf MGMT + ip address 192.168.0.13/24 + +! +service routing protocols model multi-agent +! +dns domain arista.lab +! +ip routing vrf MGMT +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 diff --git a/topologies/training-level-1-cl/configlets/spine4-base b/topologies/training-level-1-cl/configlets/spine4-base new file mode 100644 index 000000000..240453581 --- /dev/null +++ b/topologies/training-level-1-cl/configlets/spine4-base @@ -0,0 +1,14 @@ +hostname spine4 +! +interface Management 0 + vrf MGMT + ip address 192.168.0.14/24 + +! +service routing protocols model multi-agent +! +dns domain arista.lab +! +ip routing vrf MGMT +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 diff --git a/topologies/training-level-1-cl/files/.ansible.cfg b/topologies/training-level-1-cl/files/.ansible.cfg new file mode 100644 index 000000000..14c806515 --- /dev/null +++ b/topologies/training-level-1-cl/files/.ansible.cfg @@ -0,0 +1,2 @@ +[defaults] +host_key_checking = False diff --git a/topologies/training-level-1-cl/files/.screenrc b/topologies/training-level-1-cl/files/.screenrc new file mode 100644 index 000000000..1d70f5e42 --- /dev/null +++ b/topologies/training-level-1-cl/files/.screenrc @@ -0,0 +1,23 @@ +# Turn off the startup message. +startup_message off +# Set the caption to the active windows. +caption always "%-Lw%{= BW}%50>%n%f* %t%{-}%+Lw%<" + +term screen-256color + +# New screens for various processes. +# Example: screen -t +# screen -t 7050SX-128 0 ssh aristaadmin@192.100.37.128 +screen 1 ssh 192.168.0.4 +screen -t CVP 2 ssh 192.168.0.5 +screen -t Spine1 3 ssh 192.168.0.11 +screen -t Spine2 4 ssh 192.168.0.12 +screen -t Spine3 5 ssh 192.168.0.13 +screen -t Leaf1 6 ssh 192.168.0.21 +screen -t Leaf2 7 ssh 192.168.0.22 +screen -t Leaf3 8 ssh 192.168.0.23 +screen -t Leaf4 9 ssh 192.168.0.24 +screen -t Borderleaf1 10 ssh 192.168.0.25 +screen -t Borderlead2 11 ssh 192.168.0.26 +screen -t Host1 15 ssh 192.168.0.51 +screen -t Host2 16 ssh 192.168.0.52 diff --git a/topologies/training-level-1-cl/files/MenuOptions.yaml b/topologies/training-level-1-cl/files/MenuOptions.yaml new file mode 100644 index 000000000..f68e2261d --- /dev/null +++ b/topologies/training-level-1-cl/files/MenuOptions.yaml @@ -0,0 +1,214 @@ +--- +options: + reset: + - command: "/usr/local/bin/ConfigureTopology.py && bash /home/arista/Broadcaster/pushHostDefaultConfig.sh" + description: "Reset All Devices to Base ATD (reset)" + vxlan: + - command: "/usr/local/bin/ConfigureTopology.py -t vxlan" + description: "VXLAN Lab (vxlan)" + l2evpn: + - command: "/usr/local/bin/ConfigureTopology.py -t l2evpn" + description: "L2-EVPN Lab (l2evpn)" + l3evpn: + - command: "/usr/local/bin/ConfigureTopology.py -t l3evpn" + description: "L3-EVPN Lab (l3evpn)" + aamh: + - command: "/usr/local/bin/ConfigureTopology.py -t aamh" + description: "Active-Active Multi Homing lab (aamh)" + pim: + - command: "/usr/local/bin/ConfigureTopology.py -t aamh" + description: "PIM Lab (pim)" +labconfiglets: + reset: + spine1: + - "spine1-base" + spine2: + - "spine2-base" + spine3: + - "spine3-base" + leaf1: + - "leaf1-base" + leaf2: + - "leaf2-base" + leaf3: + - "leaf3-base" + leaf4: + - "leaf4-base" + host1: + - "host1-base" + host2: + - "host2-base" + borderleaf1: + - "borderleaf1-base" + borderleaf2: + - "borderleaf2-base" + vxlan: + spine1: + - "spine1-base" + - "Spine-1-VXALN-Begin" + spine2: + - "spine2-base" + - "Spine-2-VXALN-Begin" + spine3: + - "spine3-base" + - "Spine-3-VXALN-Begin" + leaf1: + - "leaf1-base" + - "Leaf-1-VXALN-Begin" + leaf2: + - "leaf2-base" + - "Leaf-2-VXALN-Begin" + leaf3: + - "leaf3-base" + - "leaf-3-VXALN-Begin" + leaf4: + - "leaf4-base" + - "leaf-4-VXALN-Begin" + host1: + - "host1-base" + - "Host-1-VXALN-Begin" + host2: + - "host2-base" + - "Host-2-VXALN-Begin" + borderleaf1: + - "borderleaf1-base" + - "Borderleaf-1-VXALN-Begin" + borderleaf2: + - "borderleaf2-base" + - "Borderleaf-2-VXALN-Begin" + l2evpn: + spine1: + - "spine1-base" + - "Spine-1-L2EVPN-Begin" + spine2: + - "spine2-base" + - "Spine-2-L2EVPN-Begin" + spine3: + - "spine3-base" + - "Spine-3-L2EVPN-Begin" + leaf1: + - "leaf1-base" + - "Leaf-1-L2EVPN-Begin" + leaf2: + - "leaf2-base" + - "Leaf-2-L2EVPN-Begin" + leaf3: + - "leaf3-base" + - "Leaf-3-L2EVPN-Begin" + leaf4: + - "leaf4-base" + - "Leaf-4-L2EVPN-Begin" + host1: + - "host1-base" + - "Host-1-L2EVPN-Begin" + host2: + - "host2-base" + - "Host-2-L2EVPN-Begin" + borderleaf1: + - "borderleaf1-base" + - "Borderleaf-1-L2EVPN-Begin" + borderleaf2: + - "borderleaf2-base" + - "Borderleaf-2-L2EVPN-Begin" + l3evpn: + spine1: + - "spine1-base" + - "Spine-1-L3EVPN-Begin" + spine2: + - "spine2-base" + - "Spine-2-L3EVPN-Begin" + spine3: + - "spine3-base" + - "Spine-3-L3EVPN-Begin" + leaf1: + - "leaf1-base" + - "Leaf-1-L3EVPN-Begin" + leaf2: + - "leaf2-base" + - "Leaf-2-L3EVPN-Begin" + leaf3: + - "leaf3-base" + - "Leaf-3-L3EVPN-Begin" + leaf4: + - "leaf4-base" + - "Leaf-4-L3EVPN-Begin" + host1: + - "host1-base" + - "Host-1-L3EVPN-Begin" + host2: + - "host2-base" + - "Host-2-L3EVPN-Begin" + borderleaf1: + - "borderleaf1-base" + - "Borderleaf-1-L3EVPN-Begin" + borderleaf2: + - "borderleaf2-base" + - "Borderleaf-2-L3EVPN-Begin" + aamh: + spine1: + - "spine1-base" + - "Spine-1-AAMH-Begin" + spine2: + - "spine2-base" + - "Spine-2-AAMH-Begin" + spine3: + - "spine3-base" + - "Spine-3-AAMH-Begin" + leaf1: + - "leaf1-base" + - "Leaf-1-AAMH-Begin" + leaf2: + - "leaf2-base" + - "Leaf-2-AAMH-Begin" + leaf3: + - "leaf3-base" + - "Leaf-3-AAMH-Begin" + leaf4: + - "leaf4-base" + - "Leaf-4-AAMH-Begin" + host1: + - "host1-base" + - "Host-1-AAMH-Begin" + host2: + - "host2-base" + - "Host-2-AAMH-Begin" + borderleaf1: + - "borderleaf1-base" + - "Borderleaf-1-AAMH-Begin" + borderleaf2: + - "borderleaf2-base" + - "Borderleaf-2-AAMH-Begin" + pim: + spine1: + - "spine1-base" + - "Spine-1-PIM-Begin" + spine2: + - "spine2-base" + - "Spine-2-PIM-Begin" + spine3: + - "spine3-base" + - "Spine-3-PIM-Begin" + leaf1: + - "leaf1-base" + - "Leaf-1-PIM-Begin" + leaf2: + - "leaf2-base" + - "Leaf-2-PIM-Begin" + leaf3: + - "leaf3-base" + - "Leaf-3-PIM-Begin" + leaf4: + - "leaf4-base" + - "Leaf-4-PIM-Begin" + host1: + - "host1-base" + - "Host-1-PIM-Begin" + host2: + - "host2-base" + - "Host-2-PIM-Begin" + borderleaf1: + - "borderleaf1-base" + - "Borderleaf-1-PIM-Begin" + borderleaf2: + - "borderleaf2-base" + - "Borderleaf-2-PIM-Begin" \ No newline at end of file diff --git a/topologies/training-level-1-cl/files/apps/coder/coder.yaml b/topologies/training-level-1-cl/files/apps/coder/coder.yaml new file mode 100644 index 000000000..80cc852d1 --- /dev/null +++ b/topologies/training-level-1-cl/files/apps/coder/coder.yaml @@ -0,0 +1,4 @@ +bind-addr: 127.0.0.1:8080 +auth: password +password: {ARISTA_REPLACE} +cert: false \ No newline at end of file diff --git a/topologies/training-level-1-cl/files/apps/coder/labfiles/.placeholder b/topologies/training-level-1-cl/files/apps/coder/labfiles/.placeholder new file mode 100644 index 000000000..e69de29bb diff --git a/topologies/training-level-1-cl/files/apps/gui/host5/arista/host-startup.sh b/topologies/training-level-1-cl/files/apps/gui/host5/arista/host-startup.sh new file mode 100644 index 000000000..16eafb783 --- /dev/null +++ b/topologies/training-level-1-cl/files/apps/gui/host5/arista/host-startup.sh @@ -0,0 +1,17 @@ +sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 4EB27DB2A3B88B8B +sudo apt-get update +sudo apt install openssh-server -y +sudo service ssh start +sudo apt-get install ufw -y +sudo ufw enable +sudo ufw allow 22 +sudo ufw disable +useradd -rm -d /home/arista -s /bin/bash -g root -G sudo -u 1000 arista +echo 'arista:arista123' | chpasswd +service ssh start +sudo apt install ifenslave -y +sudo apt install iputils-ping -y +sudo add-apt-repository ppa:wireshark-dev/stable -y +sudo apt-get install filezilla -y +sudo apt-get install vsftpd -y +sudo service vsftpd restart \ No newline at end of file diff --git a/topologies/training-level-1-cl/files/apps/gui/host6/arista/host-startup.sh b/topologies/training-level-1-cl/files/apps/gui/host6/arista/host-startup.sh new file mode 100644 index 000000000..16eafb783 --- /dev/null +++ b/topologies/training-level-1-cl/files/apps/gui/host6/arista/host-startup.sh @@ -0,0 +1,17 @@ +sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 4EB27DB2A3B88B8B +sudo apt-get update +sudo apt install openssh-server -y +sudo service ssh start +sudo apt-get install ufw -y +sudo ufw enable +sudo ufw allow 22 +sudo ufw disable +useradd -rm -d /home/arista -s /bin/bash -g root -G sudo -u 1000 arista +echo 'arista:arista123' | chpasswd +service ssh start +sudo apt install ifenslave -y +sudo apt install iputils-ping -y +sudo add-apt-repository ppa:wireshark-dev/stable -y +sudo apt-get install filezilla -y +sudo apt-get install vsftpd -y +sudo service vsftpd restart \ No newline at end of file diff --git a/topologies/training-level-1-cl/files/apps/gui/host7/arista/host-startup.sh b/topologies/training-level-1-cl/files/apps/gui/host7/arista/host-startup.sh new file mode 100644 index 000000000..16eafb783 --- /dev/null +++ b/topologies/training-level-1-cl/files/apps/gui/host7/arista/host-startup.sh @@ -0,0 +1,17 @@ +sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 4EB27DB2A3B88B8B +sudo apt-get update +sudo apt install openssh-server -y +sudo service ssh start +sudo apt-get install ufw -y +sudo ufw enable +sudo ufw allow 22 +sudo ufw disable +useradd -rm -d /home/arista -s /bin/bash -g root -G sudo -u 1000 arista +echo 'arista:arista123' | chpasswd +service ssh start +sudo apt install ifenslave -y +sudo apt install iputils-ping -y +sudo add-apt-repository ppa:wireshark-dev/stable -y +sudo apt-get install filezilla -y +sudo apt-get install vsftpd -y +sudo service vsftpd restart \ No newline at end of file diff --git a/topologies/training-level-1-cl/files/apps/gui/host8/arista/host-startup.sh b/topologies/training-level-1-cl/files/apps/gui/host8/arista/host-startup.sh new file mode 100644 index 000000000..16eafb783 --- /dev/null +++ b/topologies/training-level-1-cl/files/apps/gui/host8/arista/host-startup.sh @@ -0,0 +1,17 @@ +sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 4EB27DB2A3B88B8B +sudo apt-get update +sudo apt install openssh-server -y +sudo service ssh start +sudo apt-get install ufw -y +sudo ufw enable +sudo ufw allow 22 +sudo ufw disable +useradd -rm -d /home/arista -s /bin/bash -g root -G sudo -u 1000 arista +echo 'arista:arista123' | chpasswd +service ssh start +sudo apt install ifenslave -y +sudo apt install iputils-ping -y +sudo add-apt-repository ppa:wireshark-dev/stable -y +sudo apt-get install filezilla -y +sudo apt-get install vsftpd -y +sudo service vsftpd restart \ No newline at end of file diff --git a/topologies/training-level-1-cl/files/apps/ssh/web.json b/topologies/training-level-1-cl/files/apps/ssh/web.json new file mode 100644 index 000000000..13fac47dd --- /dev/null +++ b/topologies/training-level-1-cl/files/apps/ssh/web.json @@ -0,0 +1,76 @@ +{ + "listen": { + "ip": "0.0.0.0", + "port": 2222 + }, + "user": { + "name": null, + "password": null, + "privatekey": null + }, + "ssh": { + "host": null, + "port": 22, + "localAddress": null, + "localPort": null, + "term": "xterm-color", + "readyTimeout": 20000, + "keepaliveInterval": 120000, + "keepaliveCountMax": 10, + "allowedSubnets": [ "192.168.0.0/16", "10.0.0.0/8", "172.16.0.0/12" ] + }, + "terminal": { + "cursorBlink": true, + "scrollback": 10000, + "tabStopWidth": 8, + "bellStyle": "sound" + }, + "header": { + "text": null, + "background": "green" + }, + "session": { + "name": "WebSSH2", + "secret": "mysecret" + }, + "options": { + "challengeButton": true, + "allowreauth": true + }, + "algorithms": { + "kex": [ + "ecdh-sha2-nistp256", + "ecdh-sha2-nistp384", + "ecdh-sha2-nistp521", + "diffie-hellman-group-exchange-sha256", + "diffie-hellman-group14-sha1" + ], + "cipher": [ + "aes128-ctr", + "aes192-ctr", + "aes256-ctr", + "aes128-gcm", + "aes128-gcm@openssh.com", + "aes256-gcm", + "aes256-gcm@openssh.com", + "aes256-cbc" + ], + "hmac": [ + "hmac-sha2-256", + "hmac-sha2-512", + "hmac-sha1" + ], + "compress": [ + "none", + "zlib@openssh.com", + "zlib" + ] + }, + "serverlog": { + "client": false, + "server": false + }, + "accesslog": false, + "verify": false, + "safeShutdownDuration": 300 + } \ No newline at end of file diff --git a/topologies/training-level-1-cl/files/apps/uilanding/modules.yaml b/topologies/training-level-1-cl/files/apps/uilanding/modules.yaml new file mode 100644 index 000000000..c983faac0 --- /dev/null +++ b/topologies/training-level-1-cl/files/apps/uilanding/modules.yaml @@ -0,0 +1,62 @@ +topology: + image: "atd-topo.png" + nodes: + Spine1: + coords: "22,218,167,296" + ip: "192.168.0.11" + Spine2: + coords: "356,215,517,300" + ip: "192.168.0.12" + Spine3: + coords: "555,214,724,294" + ip: "192.168.0.13" + Spine4: + coords: "925,218,1077,293" + ip: "192.168.0.14" + Leaf1: + coords: "16,424,165,501" + ip: "192.168.0.21" + Leaf2: + coords: "353,425,520,493" + ip: "192.168.0.22" + Leaf3: + coords: "569,430,714,499" + ip: "192.168.0.23" + Leaf4: + coords: "921,423,1074,502" + ip: "192.168.0.24" + BorderLeaf1: + coords: "370,57,511,138" + ip: "192.168.0.25" + BorderLeaf2: + coords: "561,65,726,145" + ip: "192.168.0.26" + Host1: + coords: "15,534,149,611" + ip: "192.168.0.51" + Host2: + coords: "365,539,504,619" + ip: "192.168.0.52" + Host3: + coords: "566,542,711,620" + ip: "192.168.0.53" + Host4: + coords: "929,542,1075,615" + ip: "192.168.0.54" + servers: + Host5: + coords: "182,545,307,636" + ip: "192.168.0.101" + port : 6001 + Host6: + coords: "183,650,312,744" + ip: "192.168.0.102" + port : 6002 + Host7: + coords: "747,545,875,636" + ip: "192.168.0.103" + port : 6003 + Host8: + coords: "752,645,877,731" + ip: "192.168.0.104" + port : 6004 diff --git a/topologies/training-level-1-cl/files/apps/webui/.vncpass_clear b/topologies/training-level-1-cl/files/apps/webui/.vncpass_clear new file mode 100644 index 000000000..cd09dd7a5 --- /dev/null +++ b/topologies/training-level-1-cl/files/apps/webui/.vncpass_clear @@ -0,0 +1 @@ +@rista1 \ No newline at end of file diff --git a/topologies/training-level-1-cl/files/cvp/cvp_info.yaml b/topologies/training-level-1-cl/files/cvp/cvp_info.yaml new file mode 100644 index 000000000..7e796e77f --- /dev/null +++ b/topologies/training-level-1-cl/files/cvp/cvp_info.yaml @@ -0,0 +1,64 @@ +cvp_info: + containers: + Tenant: + nodes: + Leaf: + parent: Tenant + nodes: + - leaf1 + - leaf2 + - leaf3 + - leaf4 + Borderleaf: + parent: Tenant + nodes: + - borderleaf1 + - borderleaf2 + Spine: + parent: Tenant + nodes: + - spine1 + - spine2 + - spine3 + - spine4 + Hosts: + parent: Tenant + nodes: + - host1 + - host2 + - host3 + - host4 + snapshots: + configlets: + containers: + Tenant: + - ATD-INFRA + netelements: + spine1: + - spine1-base + spine2: + - spine2-base + spine3: + - spine3-base + spine4: + - spine4-base + leaf1: + - leaf1-base + leaf2: + - leaf2-base + borderleaf1: + - borderleaf1-base + borderleaf2: + - borderleaf2-base + leaf3: + - leaf3-base + leaf4: + - leaf4-base + host3: + - host3-base + host4: + - host4-base + host1: + - host1-base + host2: + - host2-base \ No newline at end of file diff --git a/topologies/training-level-1-cl/files/hosts b/topologies/training-level-1-cl/files/hosts new file mode 100644 index 000000000..b01ba8483 --- /dev/null +++ b/topologies/training-level-1-cl/files/hosts @@ -0,0 +1,24 @@ +127.0.0.1 localhost +192.168.0.11 spine1 +192.168.0.12 spine2 +192.168.0.13 spine3 +192.168.0.14 spine4 +192.168.0.21 leaf1 +192.168.0.22 leaf2 +192.168.0.23 leaf3 +192.168.0.24 leaf4 +192.168.0.25 borderleaf1 +192.168.0.26 borderleaf2 +192.168.0.41 server1 +192.168.0.42 server2 +192.168.0.43 server3 +192.168.0.44 server4 +192.168.0.51 host1 +192.168.0.52 host2 +192.168.0.53 host3 +192.168.0.54 host4 +192.168.0.101 host5 +192.168.0.102 host6 +192.168.0.103 host7 +192.168.0.104 host8 +192.168.0.5 cvp diff --git a/topologies/training-level-1-cl/files/menus/default.yaml b/topologies/training-level-1-cl/files/menus/default.yaml new file mode 100644 index 000000000..7edae00fc --- /dev/null +++ b/topologies/training-level-1-cl/files/menus/default.yaml @@ -0,0 +1,2 @@ +--- +default_menu: training-l3.yaml \ No newline at end of file diff --git a/topologies/training-level-1-cl/files/menus/training-l3.yaml b/topologies/training-level-1-cl/files/menus/training-l3.yaml new file mode 100644 index 000000000..dc084582e --- /dev/null +++ b/topologies/training-level-1-cl/files/menus/training-l3.yaml @@ -0,0 +1,34 @@ +--- + lab_list: + reset: + description: "Reset All Devices to Base Lab (reset)" + labconfiglets: + reset: + spine1: + - "spine1-base" + spine2: + - "spine2-base" + spine3: + - "spine3-base" + spine4: + - "spine4-base" + leaf1: + - "leaf1-base" + leaf2: + - "leaf2-base" + leaf3: + - "leaf3-base" + leaf4: + - "leaf4-base" + host1: + - "host1-base" + host2: + - "host2-base" + host3: + - "host3-base" + host4: + - "host4-base" + borderleaf1: + - "borderleaf1-base" + borderleaf2: + - "borderleaf2-base" diff --git a/topologies/training-level-1-cl/files/scripts/Authenticate-CVP b/topologies/training-level-1-cl/files/scripts/Authenticate-CVP new file mode 100644 index 000000000..144bb13eb --- /dev/null +++ b/topologies/training-level-1-cl/files/scripts/Authenticate-CVP @@ -0,0 +1,32 @@ +import requests +import json + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + +# Print user details + +print "User Name:%s\n "%output['username'] +print "First Name: %s\n "%output['user']['firstName'] +print "Last Name: %s\n "%output['user']['lastName'] +print "User Permissions: %s\n "%output['permissionList'] +print "Cookie Jar: %s\n "%cookies diff --git a/topologies/training-level-1-cl/files/scripts/Authenticate-CVP2 b/topologies/training-level-1-cl/files/scripts/Authenticate-CVP2 new file mode 100644 index 000000000..3f6bf9190 --- /dev/null +++ b/topologies/training-level-1-cl/files/scripts/Authenticate-CVP2 @@ -0,0 +1,48 @@ +import requests +import json + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + +# Print user details + +print "User Name:%s\n "%output['username'] +print "First Name: %s\n "%output['user']['firstName'] +print "Last Name: %s\n "%output['user']['lastName'] +print "User Permissions: %s\n "%output['permissionList'] +print "Cookie Jar: %s\n "%cookies + +#Create an HTTP GET request to the CVP server + +getConfigletURL = "/cvpservice/configlet/getConfiglets.do?" +getConfigletParams = {'startIndex':'0','endIndex':'0','type':'Configlet'} +response = requests.get(url+getConfigletURL,cookies=cookies, params=getConfigletParams,verify=False) +assert response.ok +outputConfiglets = response.json() + +# Print Configlet details + +for configlet in outputConfiglets['data']: + print "ConfigletName: %s"%configlet['name'] + print "ConfigletKey: %s"%configlet['key'] + print "\n" + diff --git a/topologies/training-level-1-cl/files/scripts/Authenticate-CVP3 b/topologies/training-level-1-cl/files/scripts/Authenticate-CVP3 new file mode 100644 index 000000000..2445806ea --- /dev/null +++ b/topologies/training-level-1-cl/files/scripts/Authenticate-CVP3 @@ -0,0 +1,95 @@ +import requests +import json + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + +# Print user details + +print "User Name:%s\n "%output['username'] +print "First Name: %s\n "%output['user']['firstName'] +print "Last Name: %s\n "%output['user']['lastName'] +print "User Permissions: %s\n "%output['permissionList'] +print "Cookie Jar: %s\n "%cookies + +#Create an HTTP GET request to the CVP server + +getConfigletURL = "/cvpservice/configlet/getConfiglets.do?" +getConfigletParams = {'startIndex':'0','endIndex':'0','type':'Configlet'} +response = requests.get(url+getConfigletURL,cookies=cookies, params=getConfigletParams,verify=False) +assert response.ok +outputConfiglets = response.json() + +# Print Configlet details + +for configlet in outputConfiglets['data']: + print "ConfigletName: %s"%configlet['name'] + print "ConfigletKey: %s"%configlet['key'] + print "\n" +# Create an HTTP GET request to the CVP server + +getConfigletHistoryURL = "/cvpservice/configlet/getConfigletHistory.do?" +getConfigletParams = {'configletId':'configlet_32_438214998013','startIndex':'0','endIndex':'0'} +response = requests.get(url+getConfigletHistoryURL,cookies=cookies, params=getConfigletParams,verify=False) +assert response.ok +outputConfigletHistory = response.json() + +# Print Configlet details + +for entry in outputConfigletHistory['configletHistory']: + print "ConfigletKey: %s"%entry['key'] + print "ConfigletOldConfig: %s"%entry['oldConfig'] + print "ConfigletNewConfig: %s"%entry['newConfig'] + print "\n" + + +# Create an HTTP GET request to the CVP server + +getConfigletDetailURL = "/cvpservice/configlet/getConfigletByName.do?" +getConfigletParams = {'name':'VLANs'} +response = requests.get(url+getConfigletDetailURL,cookies=cookies, params=getConfigletParams,verify=False) +assert response.ok +outputConfigletDetail = response.json() + +# Print Configlet details + +print "ConfigletKey: %s"%outputConfigletDetail['key'] +print "ConfigletName: %s"%outputConfigletDetail['name'] +print "ConfigletConfig: %s"%outputConfigletDetail['config'] +print "ConfigletNote: %s"%outputConfigletDetail['note'] +print "\n" + + +# Create an HTTP POST request to the CVP server + +headers = { 'Content-Type': 'application/json' } +postConfigletChangeURL = "/cvpservice/configlet/updateConfiglet.do" +changeData = json.dumps({"config": "! some configuration here", "key": "configlet_32_438214998013", "name": "VLANs"}) +response = requests.post(url+postConfigletChangeURL, cookies=cookies, data=changeData,headers=headers,verify=False) +assert response.ok +outputConfigletChange = response.json() + +# Print Configlet details + +print "ConfigletChange: %s"%outputConfigletChange['data'] +print "\n" + diff --git a/topologies/training-level-1-cl/files/scripts/Configlet1 b/topologies/training-level-1-cl/files/scripts/Configlet1 new file mode 100644 index 000000000..3f6bf9190 --- /dev/null +++ b/topologies/training-level-1-cl/files/scripts/Configlet1 @@ -0,0 +1,48 @@ +import requests +import json + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + +# Print user details + +print "User Name:%s\n "%output['username'] +print "First Name: %s\n "%output['user']['firstName'] +print "Last Name: %s\n "%output['user']['lastName'] +print "User Permissions: %s\n "%output['permissionList'] +print "Cookie Jar: %s\n "%cookies + +#Create an HTTP GET request to the CVP server + +getConfigletURL = "/cvpservice/configlet/getConfiglets.do?" +getConfigletParams = {'startIndex':'0','endIndex':'0','type':'Configlet'} +response = requests.get(url+getConfigletURL,cookies=cookies, params=getConfigletParams,verify=False) +assert response.ok +outputConfiglets = response.json() + +# Print Configlet details + +for configlet in outputConfiglets['data']: + print "ConfigletName: %s"%configlet['name'] + print "ConfigletKey: %s"%configlet['key'] + print "\n" + diff --git a/topologies/training-level-1-cl/files/scripts/ConfigletChange b/topologies/training-level-1-cl/files/scripts/ConfigletChange new file mode 100644 index 000000000..691ff5864 --- /dev/null +++ b/topologies/training-level-1-cl/files/scripts/ConfigletChange @@ -0,0 +1,40 @@ +import requests +import json + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + + +# Create an HTTP POST request to the CVP server + +headers = { 'Content-Type': 'application/json' } +postConfigletChangeURL = "/cvpservice/configlet/addNoteToConfiglet.do" +changeData = json.dumps({"note": "Configlet Changed by API", "key": "configlet_516_7018635812307"}) +response = requests.post(url+postConfigletChangeURL, cookies=cookies, data=changeData,headers=headers,verify=False) +assert response.ok +outputConfigletChange = response.json() + +# Print Configlet details + +print "ConfigletChange: %s"%outputConfigletChange['data'] +print "\n" + diff --git a/topologies/training-level-1-cl/files/scripts/ConfigletDetail b/topologies/training-level-1-cl/files/scripts/ConfigletDetail new file mode 100644 index 000000000..eb2a85937 --- /dev/null +++ b/topologies/training-level-1-cl/files/scripts/ConfigletDetail @@ -0,0 +1,43 @@ +import requests +import json + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + +# Create an HTTP GET request to the CVP server + +getConfigletDetailURL = "/cvpservice/configlet/getConfigletByName.do?" +getConfigletParams = {'name':'VLANs'} +response = requests.get(url+getConfigletDetailURL,cookies=cookies, params=getConfigletParams,verify=False) +assert response.ok +outputConfigletDetail = response.json() + +# Print Configlet details + +print "ConfigletKey: %s"%outputConfigletDetail['key'] +print "ConfigletName: %s"%outputConfigletDetail['name'] +print "ConfigletConfig: %s"%outputConfigletDetail['config'] +print "ConfigletNote: %s"%outputConfigletDetail['note'] +print "\n" + + + diff --git a/topologies/training-level-1-cl/files/scripts/ConfigletHistory b/topologies/training-level-1-cl/files/scripts/ConfigletHistory new file mode 100644 index 000000000..71f1ac693 --- /dev/null +++ b/topologies/training-level-1-cl/files/scripts/ConfigletHistory @@ -0,0 +1,41 @@ +import requests +import json + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + +# Create an HTTP GET request to the CVP server + +getConfigletHistoryURL = "/cvpservice/configlet/getConfigletHistory.do?" +getConfigletParams = {'configletId':'configlet_344_7351420097365','startIndex':'0','endIndex':'0'} +response = requests.get(url+getConfigletHistoryURL,cookies=cookies, params=getConfigletParams,verify=False) +assert response.ok +outputConfigletHistory = response.json() + +# Print Configlet details + +for entry in outputConfigletHistory['configletHistory']: + print "ConfigletKey: %s"%entry['key'] + print "ConfigletOldConfig: \n%s"%entry['oldConfig'] + print "ConfigletNewConfig: \n%s"%entry['newConfig'] + print "\n" + diff --git a/topologies/training-level-1-cl/files/scripts/TaskBase b/topologies/training-level-1-cl/files/scripts/TaskBase new file mode 100644 index 000000000..6f8deccaf --- /dev/null +++ b/topologies/training-level-1-cl/files/scripts/TaskBase @@ -0,0 +1,59 @@ +import requests +import json + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + + +# Create an HTTP GET request to the CVP server + +getTasksURL = "/cvpservice/task/getTasks.do?" +getTasksParams = {'startIndex':'0','endIndex':'0','queryparam':'Pending'} +response = requests.get(url+getTasksURL,cookies=cookies, params=getTasksParams,verify=False) +assert response.ok +outputPendingTasks = response.json() + + +# Print Tasks Created by Current User +taskList = [ ] +for entry in outputPendingTasks['data']: + if str(entry['createdBy']) == str(CVP_USER): + print "TaskNumber: %s"%entry['workOrderId'] + taskList.append(str(entry['workOrderId'])) +print "TaskList: %s"%taskList + + + +# Create an HTTP POST request to the CVP server + +headers = { 'Content-Type': 'application/json' } +postTaskLogURL = "/cvpservice/workflow/addWorkOrderLog.do" +taskLogData = json.dumps({"taskId": taskList[1],"message": "This is a test Change","source": "CVP REST API"}) +response = requests.post(url+postTaskLogURL, cookies=cookies, data=taskLogData,headers=headers,verify=False) +assert response.ok +outputTaskLog = response.json() + +# Print Configlet details + +print "TaskLogAmmend: %s"%outputTaskLog['data'] +print "\n" + diff --git a/topologies/training-level-1-cl/files/scripts/TaskCVP1 b/topologies/training-level-1-cl/files/scripts/TaskCVP1 new file mode 100644 index 000000000..1ebd05764 --- /dev/null +++ b/topologies/training-level-1-cl/files/scripts/TaskCVP1 @@ -0,0 +1,48 @@ +import requests +import json + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + +# Print user details + +print "User Name:%s\n "%output['username'] +print "First Name: %s\n "%output['user']['firstName'] +print "Last Name: %s\n "%output['user']['lastName'] + + +getTasksURL = "/cvpservice/task/getTasks.do?" +getTasksParams = {'startIndex':'0','endIndex':'0'} +response = requests.get(url+getTasksURL,cookies=cookies, params=getTasksParams,verify=False) +assert response.ok +outputPendingTasks = response.json() + + +# Print Tasks Created by Current User +taskList = [ ] +for entry in outputPendingTasks['data']: + if str(entry['createdBy']) == str(CVP_USER): + print( "TaskNumber: %s Description: %s" %(entry['workOrderId'],entry['description'])) + taskList.append(str(entry['workOrderId'])) +#print "TaskList: %s"%taskList + + diff --git a/topologies/training-level-1-cl/files/scripts/TaskExecute b/topologies/training-level-1-cl/files/scripts/TaskExecute new file mode 100644 index 000000000..3db487284 --- /dev/null +++ b/topologies/training-level-1-cl/files/scripts/TaskExecute @@ -0,0 +1,56 @@ +import requests +import json + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + + +# Create an HTTP GET request to the CVP server + +getTasksURL = "/cvpservice/task/getTasks.do?" +getTasksParams = {'startIndex':'0','endIndex':'0','queryparam':'Pending'} +response = requests.get(url+getTasksURL,cookies=cookies, params=getTasksParams,verify=False) +assert response.ok +outputPendingTasks = response.json() + + +# Print Tasks Created by Current User +taskList = [ ] +for entry in outputPendingTasks['data']: + if str(entry['createdBy']) == str(CVP_USER): + print "TaskNumber: %s"%entry['workOrderId'] + taskList.append(str(entry['workOrderId'])) +print "TaskList: %s"%taskList + + + +headers = { 'Content-Type': 'application/json' } +postTaskExecuteURL = "/cvpservice/task/executeTask.do" +for taskNumber in taskList: + executeData = json.dumps({'data': [taskNumber]}) + response = requests.post(url+postTaskExecuteURL, cookies=cookies,data=executeData,headers=headers,verify=False) + assert response.ok + outputExecuteTask = response.json() + print (outputExecuteTask['data']) + print "Task: "+str(taskNumber)+" Execute: "+str(outputExecuteTask['data']) + print "\n" + diff --git a/topologies/training-level-1-cl/files/scripts/TaskLog b/topologies/training-level-1-cl/files/scripts/TaskLog new file mode 100644 index 000000000..c835008b8 --- /dev/null +++ b/topologies/training-level-1-cl/files/scripts/TaskLog @@ -0,0 +1,59 @@ +import requests +import json + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + + +# Create an HTTP GET request to the CVP server + +getTasksURL = "/cvpservice/task/getTasks.do?" +getTasksParams = {'startIndex':'0','endIndex':'0'} +response = requests.get(url+getTasksURL,cookies=cookies, params=getTasksParams,verify=False) +assert response.ok +outputTasks = response.json() + + +# Print Tasks Created by Current User +taskList = [ ] +for entry in outputTasks['data']: + if str(entry['createdBy']) == str(CVP_USER): + print "TaskNumber: %s"%entry['workOrderId'] + taskList.append(str(entry['workOrderId'])) +print "TaskList: %s"%taskList + + + +# Create an HTTP POST request to the CVP server + +headers = { 'Content-Type': 'application/json' } +postTaskLogURL = "/cvpservice/workflow/addWorkOrderLog.do" +taskLogData = json.dumps({"taskId": taskList[0],"message": "This is a test Change","source": "CVP REST API"}) +response = requests.post(url+postTaskLogURL, cookies=cookies, data=taskLogData,headers=headers,verify=False) +assert response.ok +outputTaskLog = response.json() + +# Print Configlet details + +print "TaskLogAmmend: %s"%outputTaskLog['data'] +print "\n" + diff --git a/topologies/training-level-1-cl/files/scripts/TaskLog1 b/topologies/training-level-1-cl/files/scripts/TaskLog1 new file mode 100644 index 000000000..c835008b8 --- /dev/null +++ b/topologies/training-level-1-cl/files/scripts/TaskLog1 @@ -0,0 +1,59 @@ +import requests +import json + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + + +# Create an HTTP GET request to the CVP server + +getTasksURL = "/cvpservice/task/getTasks.do?" +getTasksParams = {'startIndex':'0','endIndex':'0'} +response = requests.get(url+getTasksURL,cookies=cookies, params=getTasksParams,verify=False) +assert response.ok +outputTasks = response.json() + + +# Print Tasks Created by Current User +taskList = [ ] +for entry in outputTasks['data']: + if str(entry['createdBy']) == str(CVP_USER): + print "TaskNumber: %s"%entry['workOrderId'] + taskList.append(str(entry['workOrderId'])) +print "TaskList: %s"%taskList + + + +# Create an HTTP POST request to the CVP server + +headers = { 'Content-Type': 'application/json' } +postTaskLogURL = "/cvpservice/workflow/addWorkOrderLog.do" +taskLogData = json.dumps({"taskId": taskList[0],"message": "This is a test Change","source": "CVP REST API"}) +response = requests.post(url+postTaskLogURL, cookies=cookies, data=taskLogData,headers=headers,verify=False) +assert response.ok +outputTaskLog = response.json() + +# Print Configlet details + +print "TaskLogAmmend: %s"%outputTaskLog['data'] +print "\n" + diff --git a/topologies/training-level-1-cl/files/scripts/TaskLogView b/topologies/training-level-1-cl/files/scripts/TaskLogView new file mode 100644 index 000000000..7b34904dd --- /dev/null +++ b/topologies/training-level-1-cl/files/scripts/TaskLogView @@ -0,0 +1,51 @@ +import requests +import json +import pprint + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + + +# Create an HTTP GET request to the CVP server + +getTasksURL = "/cvpservice/task/getTasks.do?" +getTasksParams = {'startIndex':'0','endIndex':'0'} +response = requests.get(url+getTasksURL,cookies=cookies, params=getTasksParams,verify=False) +assert response.ok +outputTasks = response.json() + +taskList = [ ] +for entry in outputTasks['data']: + if str(entry['createdBy']) == str(CVP_USER): + taskList.append(str(entry['workOrderId'])) + +getTaskLogURL = "/cvpservice/task/getLogsById.do?" +#getTaskLogParams = {'startIndex':'0','endIndex':'0','id':'0'} +getTaskLogParams = {'startIndex':'0','endIndex':'0','id':taskList[0]} +response = requests.get(url+getTaskLogURL,cookies=cookies, params=getTaskLogParams,verify=False) +assert response.ok +outputTaskLog = response.json() + +# Print TaskLog details +print "TaskLogOutput: %s" %outputTaskLog['data'] +print "\n" + diff --git a/topologies/training-level-1-cl/files/scripts/TaskNote b/topologies/training-level-1-cl/files/scripts/TaskNote new file mode 100644 index 000000000..6cd1d6cfd --- /dev/null +++ b/topologies/training-level-1-cl/files/scripts/TaskNote @@ -0,0 +1,52 @@ +import requests +import json +import pprint + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + + +# Create an HTTP GET request to the CVP server + +getTasksURL = "/cvpservice/task/getTasks.do?" +getTasksParams = {'startIndex':'0','endIndex':'0'} +response = requests.get(url+getTasksURL,cookies=cookies, params=getTasksParams,verify=False) +assert response.ok +outputTasks = response.json() + +taskList = [ ] +for entry in outputTasks['data']: + if str(entry['createdBy']) == str(CVP_USER): + taskList.append(str(entry['workOrderId'])) + +headers = { 'Content-Type': 'application/json' } +postTaskNoteURL = "/cvpservice/task/addNoteToTask.do" +taskNoteData = json.dumps({"workOrderId": taskList[0],"note": "This is a test Change using the API"}) +response = requests.post(url+postTaskNoteURL, cookies=cookies, data=taskNoteData,headers=headers,verify=False) +assert response.ok +outputTaskNote = response.json() + +# Print Task details + +print "TaskNoteAmmend: %s"%outputTaskNote['data'] +print "\n" + diff --git a/topologies/training-level-1-cl/labguides/.gitignore b/topologies/training-level-1-cl/labguides/.gitignore new file mode 100644 index 000000000..ed86553f4 --- /dev/null +++ b/topologies/training-level-1-cl/labguides/.gitignore @@ -0,0 +1,2 @@ +.DS_Store +build/ diff --git a/topologies/training-level-1-cl/labguides/Makefile b/topologies/training-level-1-cl/labguides/Makefile new file mode 100644 index 000000000..874ed2529 --- /dev/null +++ b/topologies/training-level-1-cl/labguides/Makefile @@ -0,0 +1,20 @@ +# Minimal makefile for Sphinx documentation +# + +# You can set these variables from the command line. +SPHINXOPTS = +SPHINXBUILD = python -msphinx +SPHINXPROJ = ATD +SOURCEDIR = source +BUILDDIR = build + +# Put it first so that "make" without argument is like "make help". +help: + @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) + +.PHONY: help Makefile + +# Catch-all target: route all unknown targets to Sphinx using the new +# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). +%: Makefile + @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) \ No newline at end of file diff --git a/topologies/training-level-1-cl/labguides/readme.md b/topologies/training-level-1-cl/labguides/readme.md new file mode 100644 index 000000000..5a5369ecd --- /dev/null +++ b/topologies/training-level-1-cl/labguides/readme.md @@ -0,0 +1,12 @@ +# Lab Guides +In this folder are rST (restructured text) formatted lab guides for the ATD event. + +## Building +To build the documentation, you will need to install Sphinx and sphinx_bootstrap_theme with `pip`: + +`pip install sphinx sphinx_bootstrap_theme` + +## Contributing +At some point, this section may expand, but for now please make sure to review existing files for formatting guidelines. + +Please see https://github.com/ralsina/rst-cheatsheet/blob/master/rst-cheatsheet.rst for a cheat sheet. \ No newline at end of file diff --git a/topologies/training-level-1-cl/labguides/source/_static/arista_logo.png b/topologies/training-level-1-cl/labguides/source/_static/arista_logo.png new file mode 100644 index 000000000..2376e72b9 Binary files /dev/null and b/topologies/training-level-1-cl/labguides/source/_static/arista_logo.png differ diff --git a/topologies/training-level-1-cl/labguides/source/_static/arista_logo_160by26.png b/topologies/training-level-1-cl/labguides/source/_static/arista_logo_160by26.png new file mode 100644 index 000000000..d0d0cbeec Binary files /dev/null and b/topologies/training-level-1-cl/labguides/source/_static/arista_logo_160by26.png differ diff --git a/topologies/training-level-1-cl/labguides/source/_static/arista_logo_320by52.png b/topologies/training-level-1-cl/labguides/source/_static/arista_logo_320by52.png new file mode 100644 index 000000000..43dfa7ed2 Binary files /dev/null and b/topologies/training-level-1-cl/labguides/source/_static/arista_logo_320by52.png differ diff --git a/topologies/training-level-1-cl/labguides/source/_static/cloudvision-icon.png b/topologies/training-level-1-cl/labguides/source/_static/cloudvision-icon.png new file mode 100644 index 000000000..c309ed98e Binary files /dev/null and b/topologies/training-level-1-cl/labguides/source/_static/cloudvision-icon.png differ diff --git a/topologies/training-level-1-cl/labguides/source/_static/logo.jpg b/topologies/training-level-1-cl/labguides/source/_static/logo.jpg new file mode 100644 index 000000000..6eda41f7e Binary files /dev/null and b/topologies/training-level-1-cl/labguides/source/_static/logo.jpg differ diff --git a/topologies/training-level-1-cl/labguides/source/_static/my-styles.css b/topologies/training-level-1-cl/labguides/source/_static/my-styles.css new file mode 100644 index 000000000..1150528ee --- /dev/null +++ b/topologies/training-level-1-cl/labguides/source/_static/my-styles.css @@ -0,0 +1,41 @@ +body { + background-color: #FFFFFF; + color: #002859 +} + +.navbar-inverse { + background-image: -webkit-linear-gradient(#6d94bf, #446e9b 50%, #002859); + background-image: -o-linear-gradient(#6d94bf, #446e9b 50%, #002859); + background-image: -webkit-gradient(linear, left top, left bottom, from(#6d94bf), color-stop(50%, #446e9b), to(#002859)); + background-image: linear-gradient(#6d94bf, #446e9b 50%, #002859); + background-repeat: no-repeat; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff6d94bf', endColorstr='#ff002859', GradientType=0); + -webkit-filter: none; + filter: none; + border: 1px solid #345578; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.3) +} + +.navbar-brand { + background: url("arista_logo_320by52.png") center / contain no-repeat; + display: inline-block; + width: 1px; + padding: 0 10px 0 60px; + margin-right: 30px; + margin-left: -30px; +} + +.navbar-brand>img { + display: inline-block; + padding: 0 100px 0 0px; + margin-right: 20px; +} +a.navbar-brand { + display: inline-block; + padding: 15px 0 0 120px; +} + +footer { + background-color: #002859; + color: #FFFFFF; +} diff --git a/topologies/training-level-1-cl/labguides/source/conf.py b/topologies/training-level-1-cl/labguides/source/conf.py new file mode 100644 index 000000000..afccec09c --- /dev/null +++ b/topologies/training-level-1-cl/labguides/source/conf.py @@ -0,0 +1,247 @@ +# -*- coding: utf-8 -*- +# +# ATD documentation build configuration file, created by +# sphinx-quickstart on Tue Apr 17 10:00:04 2018. +# +# This file is execfile()d with the current directory set to its +# containing dir. +# +# Note that not all possible configuration values are present in this +# autogenerated file. +# +# All configuration values have a default; values that are commented out +# serve to show the default. + +# If extensions (or modules to document with autodoc) are in another directory, +# add these directories to sys.path here. If the directory is relative to the +# documentation root, use os.path.abspath to make it absolute, like shown here. +# +# import os +# import sys +# sys.path.insert(0, os.path.abspath('.')) + +import sphinx_bootstrap_theme + +# Importing datetime module to auto update copyright year +from datetime import date + +# -- General configuration ------------------------------------------------ + +# If your documentation needs a minimal Sphinx version, state it here. +# +# needs_sphinx = '1.0' + +# Add any Sphinx extension module names here, as strings. They can be +# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom +# ones. + +# Add any paths that contain templates here, relative to this directory. +templates_path = ['_templates'] + +# The suffix(es) of source filenames. +# You can specify multiple suffix as a list of string: +# +# source_suffix = ['.rst', '.md'] +source_suffix = '.rst' + +# The master toctree document. +master_doc = 'index' + +# General information about the project. +# Updating copyright var to auto update with current year +project = u'Arista ATD' +copyright = u'{0}, Arista Networks'.format(date.today().year) +author = u'Arista ATD atd-help@arista.com' + +# Show Source +html_show_sourcelink = False + +# The version info for the project you're documenting, acts as replacement for +# |version| and |release|, also used in various other places throughout the +# built documents. +# +# The short X.Y version. +version = u'Version 3.0' +# The full version, including alpha/beta/rc tags. +release = u'1' + +# The language for content autogenerated by Sphinx. Refer to documentation +# for a list of supported languages. +# +# This is also used if you do content translation via gettext catalogs. +# Usually you set "language" from the command line for these cases. +language = None + +# List of patterns, relative to source directory, that match files and +# directories to ignore when looking for source files. +# This patterns also effect to html_static_path and html_extra_path +exclude_patterns = [] + +# The name of the Pygments (syntax highlighting) style to use. +pygments_style = 'sphinx' + +# If true, `todo` and `todoList` produce output, else they produce nothing. +todo_include_todos = False + + +# -- Options for HTML output ---------------------------------------------- + +# The theme to use for HTML and HTML Help pages. See the documentation for +# a list of builtin themes. +# +#html_theme = 'alabaster' +html_theme = 'bootstrap' +html_theme_path = sphinx_bootstrap_theme.get_html_theme_path() + +# Add any paths that contain custom static files (such as style sheets) here, +# relative to this directory. They are copied after the builtin static files, +# so a file named "default.css" will overwrite the builtin "default.css". +html_static_path = ['_static'] + +# Theme options are theme-specific and customize the look and feel of a theme +# further. For a list of options available for each theme, see the +# documentation. +# +html_theme_options = { + # Navigation bar title. (Default: ``project`` value) + 'navbar_title': "ATD", + + # Tab name for entire site. (Default: "Site") + 'navbar_site_name': "Table of Contents", + + # A list of tuples containing pages or urls to link to. + # Valid tuples should be in the following forms: + # (name, page) # a link to a page + # (name, "/aa/bb", 1) # a link to an arbitrary relative url + # (name, "http://example.com", True) # arbitrary absolute url + # Note the "1" or "True" value above as the third argument to indicate + # an arbitrary url. + 'navbar_links': [ + ("Arista", "http://www.arista.com", True), + ], + + # Render the next and previous page links in navbar. (Default: true) + 'navbar_sidebarrel': True, + + # Render the current pages TOC in the navbar. (Default: true) + 'navbar_pagenav': False, + + # Tab name for the current pages TOC. (Default: "Page") + 'navbar_pagenav_name': "Page", + + # Global TOC depth for "site" navbar tab. (Default: 1) + # Switching to -1 shows all levels. + 'globaltoc_depth': 2, + + # Include hidden TOCs in Site navbar? + # + # Note: If this is "false", you cannot have mixed ``:hidden:`` and + # non-hidden ``toctree`` directives in the same page, or else the build + # will break. + # + # Values: "true" (default) or "false" + 'globaltoc_includehidden': "true", + + # HTML navbar class (Default: "navbar") to attach to
    element. + # For black navbar, do "navbar navbar-inverse" + #'navbar_class': "navbar navbar-inverse", + 'navbar_class': "navbar", + + # Fix navigation bar to top of page? + # Values: "true" (default) or "false" + 'navbar_fixed_top': "true", + + # Location of link to source. + # Options are "nav" (default), "footer" or anything else to exclude. + #'source_link_position': "nav", + + # Bootswatch (http://bootswatch.com/) theme. + # + # Options are nothing (default) or the name of a valid theme + # such as "cosmo" or "sandstone". + # + # The set of valid themes depend on the version of Bootstrap + # that's used (the next config option). + # + # Currently, the supported themes are: + # - Bootstrap 2: https://bootswatch.com/2 + # - Bootstrap 3: https://bootswatch.com/3 + 'bootswatch_theme': "spacelab", + + # Choose Bootstrap version. + # Values: "3" (default) or "2" (in quotes) + 'bootstrap_version': "3", +} + +# The name for this set of Sphinx documents. If None, it defaults to +# " v documentation". +#html_title = "AristaATD" + +# A shorter title for the navigation bar. Default is the same as html_title. +#html_short_title = "Demo" + +# (Optional) Logo. Should be small enough to fit the navbar (ideally 24x24). +# Path should be relative to the ``_static`` files directory. +#html_logo = "cloudvision-icon.png" + +# -- Options for HTMLHelp output ------------------------------------------ + +# Output file base name for HTML help builder. +htmlhelp_basename = 'AristaATD' + + +# -- Options for LaTeX output --------------------------------------------- + +latex_elements = { + # The paper size ('letterpaper' or 'a4paper'). + # + # 'papersize': 'letterpaper', + + # The font size ('10pt', '11pt' or '12pt'). + # + # 'pointsize': '10pt', + + # Additional stuff for the LaTeX preamble. + # + # 'preamble': '', + + # Latex figure (float) alignment + # + # 'figure_align': 'htbp', +} + +# Grouping the document tree into LaTeX files. List of tuples +# (source start file, target name, title, +# author, documentclass [howto, manual, or own class]). +latex_documents = [ + (master_doc, 'ATD.tex', u'ATD Lab Guide', + u'ATD Help (atd-help@arista.com)', 'manual'), +] + + +# -- Options for manual page output --------------------------------------- + +# One entry per manual page. List of tuples +# (source start file, name, description, authors, manual section). +man_pages = [ + (master_doc, 'atd', u'ATD Lab Guide', + [author], 1) +] + + +# -- Options for Texinfo output ------------------------------------------- + +# Grouping the document tree into Texinfo files. List of tuples +# (source start file, target name, title, author, +# dir menu entry, description, category) +texinfo_documents = [ + (master_doc, 'ATD', u'ATD Lab Guide', + author, 'ATD', 'Lab Documentation.', + 'Miscellaneous'), +] + + +def setup(app): + app.add_stylesheet("my-styles.css") # also can be a full URL + # app.add_stylesheet("ANOTHER.css") + # app.add_stylesheet("AND_ANOTHER.css") diff --git a/topologies/training-level-1-cl/labguides/source/connecting.rst b/topologies/training-level-1-cl/labguides/source/connecting.rst new file mode 100644 index 000000000..10ae589ef --- /dev/null +++ b/topologies/training-level-1-cl/labguides/source/connecting.rst @@ -0,0 +1,28 @@ +Connecting +========== + +1. Log into the Arista Test Drive portal with your assigned URL. If you + don’t have one, please see your ATD staff. + +.. image:: images/connecting/nested_connecting_1.png + +2. SSH to the public address assigned to the LabAccess jumphost server (this is the Topology Address shown in the "Welcome to Arista's Test Drive!" picture above). The username is ``arista`` and the password is ``{REPLACE_PWD}``: + + .. code-block:: text + + ssh arista@{unique_address}.topo.testdrive.arista.com + +| + +.. image:: images/connecting/nested_connecting_2.png + :align: center + +| + +3. The LabAccess menu allows users to connect to each device and specify + lab topology. It is recommended to open multiple SSH sessions or use + the Screen option (under the SSH Menu) to jump between devices rapidly. + + You can also Access the LabAccess Menu from your browser by clicking on `Console Access` + +.. image:: images/connecting/nested_connecting_3.png diff --git a/topologies/training-level-1-cl/labguides/source/images/connecting/nested_connecting_1.png b/topologies/training-level-1-cl/labguides/source/images/connecting/nested_connecting_1.png new file mode 100644 index 000000000..aa76597b8 Binary files /dev/null and b/topologies/training-level-1-cl/labguides/source/images/connecting/nested_connecting_1.png differ diff --git a/topologies/training-level-1-cl/labguides/source/images/connecting/nested_connecting_2.png b/topologies/training-level-1-cl/labguides/source/images/connecting/nested_connecting_2.png new file mode 100644 index 000000000..2c6b51a2b Binary files /dev/null and b/topologies/training-level-1-cl/labguides/source/images/connecting/nested_connecting_2.png differ diff --git a/topologies/training-level-1-cl/labguides/source/images/connecting/nested_connecting_3.png b/topologies/training-level-1-cl/labguides/source/images/connecting/nested_connecting_3.png new file mode 100644 index 000000000..1cc7402a3 Binary files /dev/null and b/topologies/training-level-1-cl/labguides/source/images/connecting/nested_connecting_3.png differ diff --git a/topologies/training-level-1-cl/labguides/source/images/logo.jpg b/topologies/training-level-1-cl/labguides/source/images/logo.jpg new file mode 100644 index 000000000..6eda41f7e Binary files /dev/null and b/topologies/training-level-1-cl/labguides/source/images/logo.jpg differ diff --git a/topologies/training-level-1-cl/labguides/source/index.rst b/topologies/training-level-1-cl/labguides/source/index.rst new file mode 100644 index 000000000..bb76aaa2e --- /dev/null +++ b/topologies/training-level-1-cl/labguides/source/index.rst @@ -0,0 +1,8 @@ +Welcome to the Arista Training documentation! +======================================== + +.. toctree:: + :maxdepth: 1 + :caption: EOS Configuration + + connecting.rst diff --git a/topologies/training-level-1-cl/topo_build.yml b/topologies/training-level-1-cl/topo_build.yml new file mode 100644 index 000000000..9ccba5edb --- /dev/null +++ b/topologies/training-level-1-cl/topo_build.yml @@ -0,0 +1,385 @@ +host_cpu: 4 +cvp_cpu: 32 +cvp_ram: 42 +cvp_nodes: 1 +veos_cpu: 2 +nodes: + - spine1: + ip_addr: 192.168.0.11 + sys_mac: 00:1c:73:b1:c6:01 + neighbors: + - neighborDevice: spine2 + neighborPort: Ethernet1 + port: Ethernet1 + - neighborDevice: spine2 + neighborPort: Ethernet2 + port: Ethernet2 + - neighborDevice: leaf1 + neighborPort: Ethernet3 + port: Ethernet3 + - neighborDevice: leaf2 + neighborPort: Ethernet3 + port: Ethernet4 + - neighborDevice: leaf3 + neighborPort: Ethernet3 + port: Ethernet5 + - neighborDevice: leaf4 + neighborPort: Ethernet3 + port: Ethernet6 + - neighborDevice: borderleaf1 + neighborPort: Ethernet3 + port: Ethernet7 + - neighborDevice: borderleaf2 + neighborPort: Ethernet3 + port: Ethernet8 + - spine2: + ip_addr: 192.168.0.12 + sys_mac: 00:1c:73:b2:c6:01 + neighbors: + - neighborDevice: spine1 + neighborPort: Ethernet1 + port: Ethernet1 + - neighborDevice: spine1 + neighborPort: Ethernet2 + port: Ethernet2 + - neighborDevice: leaf1 + neighborPort: Ethernet4 + port: Ethernet3 + - neighborDevice: leaf2 + neighborPort: Ethernet4 + port: Ethernet4 + - neighborDevice: leaf3 + neighborPort: Ethernet4 + port: Ethernet5 + - neighborDevice: leaf4 + neighborPort: Ethernet4 + port: Ethernet6 + - neighborDevice: borderleaf1 + neighborPort: Ethernet4 + port: Ethernet7 + - neighborDevice: borderleaf2 + neighborPort: Ethernet4 + port: Ethernet8 + - spine3: + ip_addr: 192.168.0.13 + sys_mac: 00:1c:73:b3:c6:01 + neighbors: + - neighborDevice: spine4 + neighborPort: Ethernet1 + port: Ethernet1 + - neighborDevice: spine4 + neighborPort: Ethernet2 + port: Ethernet2 + - neighborDevice: leaf1 + neighborPort: Ethernet5 + port: Ethernet3 + - neighborDevice: leaf2 + neighborPort: Ethernet5 + port: Ethernet4 + - neighborDevice: leaf3 + neighborPort: Ethernet5 + port: Ethernet5 + - neighborDevice: leaf4 + neighborPort: Ethernet5 + port: Ethernet6 + - neighborDevice: borderleaf1 + neighborPort: Ethernet5 + port: Ethernet7 + - neighborDevice: borderleaf2 + neighborPort: Ethernet5 + port: Ethernet8 + - spine4: + ip_addr: 192.168.0.14 + sys_mac: 00:1c:73:b4:c6:01 + neighbors: + - neighborDevice: spine3 + neighborPort: Ethernet1 + port: Ethernet1 + - neighborDevice: spine3 + neighborPort: Ethernet2 + port: Ethernet2 + - neighborDevice: leaf1 + neighborPort: Ethernet6 + port: Ethernet3 + - neighborDevice: leaf2 + neighborPort: Ethernet6 + port: Ethernet4 + - neighborDevice: leaf3 + neighborPort: Ethernet6 + port: Ethernet5 + - neighborDevice: leaf4 + neighborPort: Ethernet6 + port: Ethernet6 + - neighborDevice: borderleaf1 + neighborPort: Ethernet6 + port: Ethernet7 + - neighborDevice: borderleaf2 + neighborPort: Ethernet6 + port: Ethernet8 + - leaf1: + ip_addr: 192.168.0.21 + sys_mac: 00:1c:73:c1:c6:01 + neighbors: + - neighborDevice: leaf2 + neighborPort: Ethernet1 + port: Ethernet1 + - neighborDevice: leaf2 + neighborPort: Ethernet2 + port: Ethernet2 + - neighborDevice: spine1 + neighborPort: Ethernet3 + port: Ethernet3 + - neighborDevice: spine2 + neighborPort: Ethernet3 + port: Ethernet4 + - neighborDevice: spine3 + neighborPort: Ethernet3 + port: Ethernet5 + - neighborDevice: spine4 + neighborPort: Ethernet3 + port: Ethernet6 + - neighborDevice: host1 + neighborPort: Ethernet1 + port: Ethernet7 + - neighborDevice: host5 + neighborPort: Ethernet1 + port: Ethernet8 + - neighborDevice: host2 + neighborPort: Ethernet1 + port: Ethernet9 + - neighborDevice: host6 + neighborPort: Ethernet1 + port: Ethernet10 + - leaf2: + ip_addr: 192.168.0.22 + sys_mac: 00:1c:73:c2:c6:01 + neighbors: + - neighborDevice: leaf1 + neighborPort: Ethernet1 + port: Ethernet1 + - neighborDevice: leaf1 + neighborPort: Ethernet2 + port: Ethernet2 + - neighborDevice: spine1 + neighborPort: Ethernet4 + port: Ethernet3 + - neighborDevice: spine2 + neighborPort: Ethernet4 + port: Ethernet4 + - neighborDevice: spine3 + neighborPort: Ethernet4 + port: Ethernet5 + - neighborDevice: spine4 + neighborPort: Ethernet4 + port: Ethernet6 + - neighborDevice: host1 + neighborPort: Ethernet2 + port: Ethernet7 + - neighborDevice: host5 + neighborPort: Ethernet2 + port: Ethernet8 + - neighborDevice: host2 + neighborPort: Ethernet2 + port: Ethernet9 + - neighborDevice: host6 + neighborPort: Ethernet2 + port: Ethernet10 + - leaf3: + ip_addr: 192.168.0.23 + sys_mac: 00:1c:73:c3:c6:01 + neighbors: + - neighborDevice: leaf4 + neighborPort: Ethernet1 + port: Ethernet1 + - neighborDevice: leaf4 + neighborPort: Ethernet2 + port: Ethernet2 + - neighborDevice: spine1 + neighborPort: Ethernet5 + port: Ethernet3 + - neighborDevice: spine2 + neighborPort: Ethernet5 + port: Ethernet4 + - neighborDevice: spine3 + neighborPort: Ethernet5 + port: Ethernet5 + - neighborDevice: spine4 + neighborPort: Ethernet5 + port: Ethernet6 + - neighborDevice: host3 + neighborPort: Ethernet1 + port: Ethernet7 + - neighborDevice: host7 + neighborPort: Ethernet1 + port: Ethernet8 + - neighborDevice: host4 + neighborPort: Ethernet1 + port: Ethernet9 + - neighborDevice: host8 + neighborPort: Ethernet1 + port: Ethernet10 + - leaf4: + ip_addr: 192.168.0.24 + sys_mac: 00:1c:73:c4:c6:01 + neighbors: + - neighborDevice: leaf3 + neighborPort: Ethernet1 + port: Ethernet1 + - neighborDevice: leaf3 + neighborPort: Ethernet2 + port: Ethernet2 + - neighborDevice: spine1 + neighborPort: Ethernet6 + port: Ethernet3 + - neighborDevice: spine2 + neighborPort: Ethernet6 + port: Ethernet4 + - neighborDevice: spine3 + neighborPort: Ethernet6 + port: Ethernet5 + - neighborDevice: spine4 + neighborPort: Ethernet6 + port: Ethernet6 + - neighborDevice: host3 + neighborPort: Ethernet2 + port: Ethernet7 + - neighborDevice: host7 + neighborPort: Ethernet2 + port: Ethernet8 + - neighborDevice: host4 + neighborPort: Ethernet2 + port: Ethernet9 + - neighborDevice: host8 + neighborPort: Ethernet2 + port: Ethernet10 + - borderleaf1: + ip_addr: 192.168.0.25 + sys_mac: 00:1c:73:c5:c6:01 + neighbors: + - neighborDevice: borderleaf2 + neighborPort: Ethernet1 + port: Ethernet1 + - neighborDevice: borderleaf2 + neighborPort: Ethernet2 + port: Ethernet2 + - neighborDevice: spine1 + neighborPort: Ethernet7 + port: Ethernet3 + - neighborDevice: spine2 + neighborPort: Ethernet7 + port: Ethernet4 + - neighborDevice: spine3 + neighborPort: Ethernet7 + port: Ethernet5 + - neighborDevice: spine4 + neighborPort: Ethernet7 + port: Ethernet6 + - borderleaf2: + ip_addr: 192.168.0.26 + sys_mac: 00:1c:73:c6:c6:01 + neighbors: + - neighborDevice: borderleaf1 + neighborPort: Ethernet1 + port: Ethernet1 + - neighborDevice: borderleaf1 + neighborPort: Ethernet2 + port: Ethernet2 + - neighborDevice: spine1 + neighborPort: Ethernet8 + port: Ethernet3 + - neighborDevice: spine2 + neighborPort: Ethernet8 + port: Ethernet4 + - neighborDevice: spine3 + neighborPort: Ethernet8 + port: Ethernet5 + - neighborDevice: spine4 + neighborPort: Ethernet8 + port: Ethernet6 + - host1: + ip_addr: 192.168.0.51 + sys_mac: 00:1c:73:f1:c6:01 + neighbors: + - neighborDevice: leaf1 + neighborPort: Ethernet7 + port: Ethernet1 + - neighborDevice: leaf2 + neighborPort: Ethernet7 + port: Ethernet2 + - host2: + ip_addr: 192.168.0.52 + sys_mac: 00:1c:73:f2:c6:01 + neighbors: + - neighborDevice: leaf1 + neighborPort: Ethernet9 + port: Ethernet1 + - neighborDevice: leaf2 + neighborPort: Ethernet9 + port: Ethernet2 + - host3: + ip_addr: 192.168.0.53 + sys_mac: 00:1c:73:f3:c6:01 + neighbors: + - neighborDevice: leaf3 + neighborPort: Ethernet7 + port: Ethernet1 + - neighborDevice: leaf4 + neighborPort: Ethernet7 + port: Ethernet2 + - host4: + ip_addr: 192.168.0.54 + sys_mac: 00:1c:73:f4:c6:01 + neighbors: + - neighborDevice: leaf3 + neighborPort: Ethernet9 + port: Ethernet1 + - neighborDevice: leaf4 + neighborPort: Ethernet9 + port: Ethernet2 +servers: + - host5: + image_name: "gcr.io/atd-testdrivetraining-dev/hosts-gui/host1:latest" + ip_addr: 192.168.0.101 + port : 6001 + neighbors: + - neighborDevice: leaf1 + neighborPort: Ethernet8 + port: Ethernet1 + - neighborDevice: leaf2 + neighborPort: Ethernet8 + port: Ethernet2 + - host6: + image_name: "gcr.io/atd-testdrivetraining-dev/hosts-gui/host1:latest" + ip_addr: 192.168.0.102 + port : 6002 + neighbors: + - neighborDevice: leaf1 + neighborPort: Ethernet10 + port: Ethernet1 + - neighborDevice: leaf2 + neighborPort: Ethernet10 + port: Ethernet2 + - host7: + image_name: "gcr.io/atd-testdrivetraining-dev/hosts-gui/host1:latest" + ip_addr: 192.168.0.103 + port : 6003 + neighbors: + - neighborDevice: leaf3 + neighborPort: Ethernet8 + port: Ethernet1 + - neighborDevice: leaf4 + neighborPort: Ethernet8 + port: Ethernet2 + - host8: + image_name: "gcr.io/atd-testdrivetraining-dev/hosts-gui/host1:latest" + ip_addr: 192.168.0.104 + port : 6004 + neighbors: + - neighborDevice: leaf3 + neighborPort: Ethernet10 + port: Ethernet1 + - neighborDevice: leaf4 + neighborPort: Ethernet10 + port: Ethernet2 +additional_ssh_nodes: +additional_clab_nodes: diff --git a/topologies/training-level-2-cl/atd-topo-bkp-2.png b/topologies/training-level-2-cl/atd-topo-bkp-2.png new file mode 100644 index 000000000..ce621aec8 Binary files /dev/null and b/topologies/training-level-2-cl/atd-topo-bkp-2.png differ diff --git a/topologies/training-level-2-cl/atd-topo-bkp.png b/topologies/training-level-2-cl/atd-topo-bkp.png new file mode 100644 index 000000000..4cc023b85 Binary files /dev/null and b/topologies/training-level-2-cl/atd-topo-bkp.png differ diff --git a/topologies/training-level-2-cl/atd-topo.png b/topologies/training-level-2-cl/atd-topo.png new file mode 100644 index 000000000..53ba5d7d9 Binary files /dev/null and b/topologies/training-level-2-cl/atd-topo.png differ diff --git a/topologies/training-level-2-cl/configlets/ACL-Start-BorderLeaf1 b/topologies/training-level-2-cl/configlets/ACL-Start-BorderLeaf1 new file mode 100644 index 000000000..a81da3e50 --- /dev/null +++ b/topologies/training-level-2-cl/configlets/ACL-Start-BorderLeaf1 @@ -0,0 +1,26 @@ + +int e1,2 + shutdown + +int e3 + no switchport + ip address 10.10.5.1/30 + no shutdown + +int e4 + no switchport + ip address 10.10.5.5/30 + no shutdown + +int e5 + no switchport + ip address 10.10.5.9/30 + no shutdown + +int e6 + no switchport + ip address 10.10.5.13/30 + no shutdown + +int lo0 + ip address 10.51.51.51/32 \ No newline at end of file diff --git a/topologies/training-level-2-cl/configlets/ACL-Start-BorderLeaf2 b/topologies/training-level-2-cl/configlets/ACL-Start-BorderLeaf2 new file mode 100644 index 000000000..76a5a1feb --- /dev/null +++ b/topologies/training-level-2-cl/configlets/ACL-Start-BorderLeaf2 @@ -0,0 +1,25 @@ +int e1,2 + shutdown + +int e3 + no switchport + ip address 10.10.6.1/30 + no shutdown + +int e4 + no switchport + ip address 10.10.6.5/30 + no shutdown + +int e5 + no switchport + ip address 10.10.6.9/30 + no shutdown + +int e6 + no switchport + ip address 10.10.6.13/30 + no shutdown + +int lo0 + ip address 10.52.52.52/32 \ No newline at end of file diff --git a/topologies/training-level-2-cl/configlets/ACL-Start-Leaf1 b/topologies/training-level-2-cl/configlets/ACL-Start-Leaf1 new file mode 100644 index 000000000..a3e834bb0 --- /dev/null +++ b/topologies/training-level-2-cl/configlets/ACL-Start-Leaf1 @@ -0,0 +1,26 @@ +int e1,2 + shutdown + +int e3 + no switchport + ip address 10.10.1.2/30 + no shutdown + +int e4 + no switchport + ip address 10.10.2.2/30 + no shutdown + +int e5 + no switchport + ip address 10.10.3.2/30 + no shutdown + + +int e6 + no switchport + ip address 10.10.4.2/30 + no shutdown + +int lo0 + ip address 10.11.11.11/32 diff --git a/topologies/training-level-2-cl/configlets/ACL-Start-Leaf2 b/topologies/training-level-2-cl/configlets/ACL-Start-Leaf2 new file mode 100644 index 000000000..ddbf8ae61 --- /dev/null +++ b/topologies/training-level-2-cl/configlets/ACL-Start-Leaf2 @@ -0,0 +1,26 @@ +int e1,2 + shutdown + +int e3 + no switchport + ip address 10.10.1.6/30 + no shutdown + +int e4 + no switchport + ip address 10.10.2.6/30 + no shutdown + +int e5 + no switchport + ip address 10.10.3.6/30 + no shutdown + + +int e6 + no switchport + ip address 10.10.4.6/30 + no shutdown + +int lo0 + ip address 10.12.12.12/32 \ No newline at end of file diff --git a/topologies/training-level-2-cl/configlets/ACL-Start-Leaf3 b/topologies/training-level-2-cl/configlets/ACL-Start-Leaf3 new file mode 100644 index 000000000..c41dbf772 --- /dev/null +++ b/topologies/training-level-2-cl/configlets/ACL-Start-Leaf3 @@ -0,0 +1,26 @@ +int e1,2 + shutdown + +int e3 + no switchport + ip address 10.10.1.10/30 + no shutdown + +int e4 + no switchport + ip address 10.10.2.10/30 + no shutdown + +int e5 + no switchport + ip address 10.10.3.10/30 + no shutdown + + +int e6 + no switchport + ip address 10.10.4.10/30 + no shutdown + +int lo0 + ip address 10.13.13.13/32 \ No newline at end of file diff --git a/topologies/training-level-2-cl/configlets/ACL-Start-Leaf4 b/topologies/training-level-2-cl/configlets/ACL-Start-Leaf4 new file mode 100644 index 000000000..4a6f65cc0 --- /dev/null +++ b/topologies/training-level-2-cl/configlets/ACL-Start-Leaf4 @@ -0,0 +1,26 @@ +int e1,2 + shutdown + +int e3 + no switchport + ip address 10.10.1.14/30 + no shutdown + +int e4 + no switchport + ip address 10.10.2.14/30 + no shutdown + +int e5 + no switchport + ip address 10.10.3.14/30 + no shutdown + + +int e6 + no switchport + ip address 10.10.4.14/30 + no shutdown + +int lo0 + ip address 10.14.14.14/32 \ No newline at end of file diff --git a/topologies/training-level-2-cl/configlets/ACL-Start-Spine1 b/topologies/training-level-2-cl/configlets/ACL-Start-Spine1 new file mode 100644 index 000000000..5d4bdbdc0 --- /dev/null +++ b/topologies/training-level-2-cl/configlets/ACL-Start-Spine1 @@ -0,0 +1,36 @@ +int e1,2 + shutdown + +int e3 + no switchport + ip address 10.10.1.1/30 + no shutdown + +int e4 + no switchport + ip address 10.10.1.5/30 + no shutdown + +int e5 + no switchport + ip address 10.10.1.9/30 + no shutdown + + +int e6 + no switchport + ip address 10.10.1.13/30 + no shutdown + +int e7 + no switchport + ip address 10.10.5.2/30 + no shutdown + +int e8 + no switchport + ip address 10.10.6.2/30 + no shutdown + +int lo0 + ip address 10.21.21.21/32 \ No newline at end of file diff --git a/topologies/training-level-2-cl/configlets/ACL-Start-Spine2 b/topologies/training-level-2-cl/configlets/ACL-Start-Spine2 new file mode 100644 index 000000000..813e00769 --- /dev/null +++ b/topologies/training-level-2-cl/configlets/ACL-Start-Spine2 @@ -0,0 +1,36 @@ +int e1,2 + shutdown + +int e3 + no switchport + ip address 10.10.2.1/30 + no shutdown + +int e4 + no switchport + ip address 10.10.2.5/30 + no shutdown + +int e5 + no switchport + ip address 10.10.2.9/30 + no shutdown + + +int e6 + no switchport + ip address 10.10.2.13/30 + no shutdown + +int e7 + no switchport + ip address 10.10.5.6/30 + no shutdown + +int e8 + no switchport + ip address 10.10.6.6/30 + no shutdown + +int lo0 + ip address 10.22.22.22/32 \ No newline at end of file diff --git a/topologies/training-level-2-cl/configlets/ACL-Start-Spine3 b/topologies/training-level-2-cl/configlets/ACL-Start-Spine3 new file mode 100644 index 000000000..c626a1a48 --- /dev/null +++ b/topologies/training-level-2-cl/configlets/ACL-Start-Spine3 @@ -0,0 +1,36 @@ +int e1,2 + shutdown + +int e3 + no switchport + ip address 10.10.3.1/30 + no shutdown + +int e4 + no switchport + ip address 10.10.3.5/30 + no shutdown + +int e5 + no switchport + ip address 10.10.3.9/30 + no shutdown + + +int e6 + no switchport + ip address 10.10.3.13/30 + no shutdown + +int e7 + no switchport + ip address 10.10.5.10/30 + no shutdown + +int e8 + no switchport + ip address 10.10.6.10/30 + no shutdown + +int lo0 + ip address 10.23.23.23/32 \ No newline at end of file diff --git a/topologies/training-level-2-cl/configlets/ACL-Start-Spine4 b/topologies/training-level-2-cl/configlets/ACL-Start-Spine4 new file mode 100644 index 000000000..a82f28e11 --- /dev/null +++ b/topologies/training-level-2-cl/configlets/ACL-Start-Spine4 @@ -0,0 +1,36 @@ +int e1,2 + shutdown + +int e3 + no switchport + ip address 10.10.4.1/30 + no shutdown + +int e4 + no switchport + ip address 10.10.4.5/30 + no shutdown + +int e5 + no switchport + ip address 10.10.4.9/30 + no shutdown + + +int e6 + no switchport + ip address 10.10.4.13/30 + no shutdown + +int e7 + no switchport + ip address 10.10.5.14/30 + no shutdown + +int e8 + no switchport + ip address 10.10.6.14/30 + no shutdown + +int lo0 + ip address 10.24.24.24/32 \ No newline at end of file diff --git a/topologies/training-level-2-cl/configlets/ATD-INFRA b/topologies/training-level-2-cl/configlets/ATD-INFRA new file mode 100644 index 000000000..de87bc743 --- /dev/null +++ b/topologies/training-level-2-cl/configlets/ATD-INFRA @@ -0,0 +1,53 @@ +vrf instance MGMT +! +daemon TerminAttr + exec /usr/bin/TerminAttr -cvcompression=gzip -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent -cvaddr=192.168.0.5:9910 -cvauth=token,/tmp/token -cvvrf=MGMT -taillogs -disableaaa + no shutdown +! +alias mlag-reload bash /mnt/flash/shut_intfs && sudo shutdown now -r +alias conint sh interface | i connected +alias senz show interface counter error | nz +alias shmc show int | awk '/^[A-Z]/ { intf = $1 } /, address is/ { print intf, $6 }' +alias snz show interface counter | nz +alias spd show port-channel %1 detail all +alias sqnz show interface counter queue | nz +alias srnz show interface counter rate | nz +alias intdesc + !! Usage: intdesc interface-name description + 10 config + 20 int %1 + 30 desc %2 + 40 exit +! +dns domain arista.lab +! +service routing protocols model multi-agent +! +ntp server vrf MGMT 192.168.0.1 iburst source Management0 +! +radius-server host 192.168.0.1 vrf MGMT key 7 0207165218120E +! +aaa group server radius atds + server 192.168.0.1 vrf MGMT +! +aaa authentication login default group atds local +aaa authorization exec default group atds local +aaa authorization commands all default local +! +username Script secret sha512 $6$PNfpb9anSBQ5/aia$phaa3ar5pwkntenD9WHc6Ed5b96lbW0dc0bjtwPnFLaDiCK8D5Cjl6ewP/xdNbl4PtS6Paq.3SssN8pj05NQm. +username admin privilege 15 role network-admin secret 5 $1$5O85YVVn$HrXcfOivJEnISTMb6xrJc. +username arista privilege 15 role network-admin secret 5 $1$4VjIjfd1$XkUVulbNDESHFzcxDU.Tk1 +! +username arista ssh-key ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC+ERvV4GaPq3FzxY8T+5hMF/1T+l8wiPsVCtOrZU4Hy6NCNlAiDBdA/RUtX5/aOu5JvHyPTVHqWJ0qi9BqU3rxCNl/l2/5UZbm9RPzdZ1QCwoYwPB9/j/tYJV8lZdr6t0yGBfxgzD3oW/zF7a+ZtASaMAu7lkgoqPK2pVIGa+Y9ZCsA0Xq756XpLCw+d3pHKHvIkgWLCo9FoeIv8f/bu5u/ztzRE+Nvl+o5add6MxnjsXz3s7BnW2FX6JNjyp0Z+OXjupQc2gcfFvpd/dA2lCNuuaCHkRgyPwIZtWPmNqMRXPp37mlPwV43qDJRVPQkvh0xPxwS35BbzUxWdT+ZLZv +! +ip radius source-interface Management0 +! +ip routing vrf MGMT +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 +! +management api http-commands + no shutdown + vrf MGMT + no shutdown +! diff --git a/topologies/training-level-2-cl/configlets/Base-Builder.py b/topologies/training-level-2-cl/configlets/Base-Builder.py new file mode 100644 index 000000000..167d9c750 --- /dev/null +++ b/topologies/training-level-2-cl/configlets/Base-Builder.py @@ -0,0 +1,86 @@ +from cvplibrary import CVPGlobalVariables, GlobalVariableNames, Form + + + +# Get this devices Serial + + +serial = CVPGlobalVariables.getValue( GlobalVariableNames.CVP_SERIAL ) +mask = '24' +ServiceRouting = True + +#Create the IP address from the serial number + + +if serial == '4A7F6E96300132903A73A74CCF18B697': + IPaddress = '192.168.0.21' + hostname = 'leaf1' + + +elif serial == '3831DEFC364900BF9EEFC45FEE7794E7': + IPaddress = '192.168.0.22' + hostname = 'leaf2' + + +elif serial == 'ED469CFA13C4017B2D19BF7EBCAD50B1': + IPaddress = '192.168.0.23' + hostname = 'leaf3' + + +elif serial == '434653268ABA082A2FF6B52F1367CE80': + IPaddress = '192.168.0.24' + hostname = 'leaf4' + +elif serial == '8085B9640BC6D8FDC1FD23D242EBF433': + IPaddress = '192.168.0.11' + hostname = 'spine1' + +elif serial == 'D28D62E5729AB8BF44A0BC017DEB188A': + IPaddress = '192.168.0.12' + hostname = 'spine2' + +elif serial == 'F77703A62ADE220E689A41057AA56288': + IPaddress = '192.168.0.13' + hostname = 'spine3' + +elif serial == 'D763323F00C03738A8C824D2F1DA05E8': + IPaddress = '192.168.0.25' + hostname = 'borderleaf1' + +elif serial == '7C16136B7483F2E2FB002E8E0646F1F0': + IPaddress = '192.168.0.26' + hostname = 'borderleaf2' + +elif serial == '86342B780ED73BCB30E1DFE48E26AC38': + IPaddress = '192.168.0.51' + ServiceRouting = False + hostname = 'host1' + + +elif serial == 'CE0B31805130945E3CE40B060E9E636D': + IPaddress = '192.168.0.52' + ServiceRouting = False + hostname = 'host2' + + +# Generate and print config - Ignore the service routing command if not needed +print 'hostname %s' % hostname +print '!' +print 'interface Management 1' +print ' ip address %s/%s' % ( IPaddress, mask ) +print ' no lldp transmit' +print ' no lldp receive' +print '!' +if ServiceRouting: + print 'service routing protocols model multi-agent' + print '!' +print 'dns domain arista.lab' +print '!' +print 'ip route 0.0.0.0/0 192.168.0.1' +print '!' +print 'ip routing' +print '!' +print 'management api http-commands' +print ' no shutdown' +print ' protocol http' +print '!' \ No newline at end of file diff --git a/topologies/training-level-2-cl/configlets/BorderLeaf1-OSPFMultiArea-Start b/topologies/training-level-2-cl/configlets/BorderLeaf1-OSPFMultiArea-Start new file mode 100644 index 000000000..3aa7a825d --- /dev/null +++ b/topologies/training-level-2-cl/configlets/BorderLeaf1-OSPFMultiArea-Start @@ -0,0 +1,38 @@ +int e1,2 + shutdown + +int e3 + no switchport + ip address 10.10.5.1/30 + no shutdown + +int e4 + no switchport + ip address 10.10.5.5/30 + no shutdown + +int e5 + no switchport + ip address 10.10.5.9/30 + no shutdown + +int e6 + no switchport + ip address 10.10.5.13/30 + no shutdown + +int lo0 + ip address 10.51.51.51/32 + + ip routing + + router ospf 1 + router-id 10.51.51.51 + passive-interface default + no passive-interface Ethernet 3-6 + network 0.0.0.0/0 area 0 + + +interface Ethernet 3-6 + ip ospf network point-to-point + no shut \ No newline at end of file diff --git a/topologies/training-level-2-cl/configlets/BorderLeaf2-OSPFMultiArea-Start b/topologies/training-level-2-cl/configlets/BorderLeaf2-OSPFMultiArea-Start new file mode 100644 index 000000000..ae068e8be --- /dev/null +++ b/topologies/training-level-2-cl/configlets/BorderLeaf2-OSPFMultiArea-Start @@ -0,0 +1,39 @@ +int e1,2 + shutdown + +int e3 + no switchport + ip address 10.10.6.1/30 + no shutdown + +int e4 + no switchport + ip address 10.10.6.5/30 + no shutdown + +int e5 + no switchport + ip address 10.10.6.9/30 + no shutdown + +int e6 + no switchport + ip address 10.10.6.13/30 + no shutdown + +int lo0 + ip address 10.52.52.52/32 + + + ip routing + + router ospf 1 + router-id 10.51.51.51 + passive-interface default + no passive-interface Ethernet 3-6 + network 0.0.0.0/0 area 0 + + +interface Ethernet 3-6 + ip ospf network point-to-point + no shut \ No newline at end of file diff --git a/topologies/training-level-2-cl/configlets/Leaf1-OSPFMultiaArea-Start b/topologies/training-level-2-cl/configlets/Leaf1-OSPFMultiaArea-Start new file mode 100644 index 000000000..6442ec8b5 --- /dev/null +++ b/topologies/training-level-2-cl/configlets/Leaf1-OSPFMultiaArea-Start @@ -0,0 +1,32 @@ +interface Ethernet1 +shutdown +! +interface Ethernet2 +shutdown +! +interface Ethernet3 +no switchport +ip address 10.10.1.2/30 +! +interface Ethernet4 +no switchport +ip address 10.10.2.2/30 +! +interface Ethernet5 +no switchport +ip address 10.10.3.2/30 +! +interface Ethernet6 +no switchport +ip address 10.10.4.2/30 +! +interface Ethernet7 +! +interface Ethernet8 +! +interface Ethernet9 +! +interface Ethernet10 +! +interface Loopback0 +ip address 10.11.11.11/32 diff --git a/topologies/training-level-2-cl/configlets/Leaf2-OSPFMultiArea-Start b/topologies/training-level-2-cl/configlets/Leaf2-OSPFMultiArea-Start new file mode 100644 index 000000000..90a6d187f --- /dev/null +++ b/topologies/training-level-2-cl/configlets/Leaf2-OSPFMultiArea-Start @@ -0,0 +1,30 @@ +interface Ethernet1 +shutdown +! +interface Ethernet2 +shutdown +! +interface Ethernet3 +no switchport +ip address 10.10.1.6/30 +! +interface Ethernet4 +no switchport +ip address 10.10.2.6/30 +! +interface Ethernet5 +no switchport +ip address 10.10.3.6/30 +! +interface Ethernet6 +no switchport +ip address 10.10.4.6/30 +! +interface Ethernet7 +! +interface Ethernet8 +! +interface Ethernet9 +! +interface Ethernet10 +! \ No newline at end of file diff --git a/topologies/training-level-2-cl/configlets/Leaf3-OSPFMultiArea-Start b/topologies/training-level-2-cl/configlets/Leaf3-OSPFMultiArea-Start new file mode 100644 index 000000000..b5165633f --- /dev/null +++ b/topologies/training-level-2-cl/configlets/Leaf3-OSPFMultiArea-Start @@ -0,0 +1,49 @@ +interface Ethernet1 +shutdown +! +interface Ethernet2 +shutdown +! +interface Ethernet3 +no switchport +ip address 10.10.1.10/30 +ip ospf network point-to-point +! +interface Ethernet4 +no switchport +ip address 10.10.2.10/30 +ip ospf network point-to-point +! +interface Ethernet5 +no switchport +ip address 10.10.3.10/30 +ip ospf network point-to-point +! +interface Ethernet6 +no switchport +ip address 10.10.4.10/30 +ip ospf network point-to-point +! +interface Ethernet7 +! +interface Ethernet8 +! +interface Ethernet9 +! +interface Ethernet10 +! +interface Loopback0 +ip address 10.13.13.13/32 +! +! +ip routing +! +router ospf 1 +router-id 10.13.13.13 +passive-interface default +no passive-interface Ethernet3 +no passive-interface Ethernet4 +no passive-interface Ethernet5 +no passive-interface Ethernet6 +network 0.0.0.0/0 area 0.0.0.0 +max-lsa 12000 \ No newline at end of file diff --git a/topologies/training-level-2-cl/configlets/Leaf4-OSPFMultiArea-Start b/topologies/training-level-2-cl/configlets/Leaf4-OSPFMultiArea-Start new file mode 100644 index 000000000..38ea117f3 --- /dev/null +++ b/topologies/training-level-2-cl/configlets/Leaf4-OSPFMultiArea-Start @@ -0,0 +1,40 @@ + +int e1,2 + shutdown + +int e3 + no switchport + ip address 10.10.1.14/30 + no shutdown + +int e4 + no switchport + ip address 10.10.2.14/30 + no shutdown + +int e5 + no switchport + ip address 10.10.3.14/30 + no shutdown + + +int e6 + no switchport + ip address 10.10.4.14/30 + no shutdown + +int lo0 + ip address 10.14.14.14/32 + +ip routing + + router ospf 1 + router-id 10.14.14.14 + passive-interface default + no passive-interface Ethernet 3-6 + network 0.0.0.0/0 area 0 + + +interface Ethernet 3-6 + ip ospf network point-to-point + no shut \ No newline at end of file diff --git a/topologies/training-level-2-cl/configlets/NSSA-Start-BorderLeaf1 b/topologies/training-level-2-cl/configlets/NSSA-Start-BorderLeaf1 new file mode 100644 index 000000000..3f328e044 --- /dev/null +++ b/topologies/training-level-2-cl/configlets/NSSA-Start-BorderLeaf1 @@ -0,0 +1,38 @@ +int e1,2 + shutdown + +int e3 + no switchport + ip address 10.10.5.1/30 + no shutdown + +int e4 + no switchport + ip address 10.10.5.5/30 + no shutdown + +int e5 + no switchport + ip address 10.10.5.9/30 + no shutdown + +int e6 + no switchport + ip address 10.10.5.13/30 + no shutdown + +int lo0 + ip address 10.51.51.51/32 + + + ip routing + + router ospf 1 + router-id 10.51.51.51 + passive-interface default + no passive-interface Ethernet 3-6 + network 0.0.0.0/0 area 0 + +interface Ethernet 3-6 + ip ospf network point-to-point + no shut \ No newline at end of file diff --git a/topologies/training-level-2-cl/configlets/NSSA-Start-BorderLeaf2 b/topologies/training-level-2-cl/configlets/NSSA-Start-BorderLeaf2 new file mode 100644 index 000000000..eb8a5d200 --- /dev/null +++ b/topologies/training-level-2-cl/configlets/NSSA-Start-BorderLeaf2 @@ -0,0 +1,39 @@ +int e1,2 + shutdown + +int e3 + no switchport + ip address 10.10.6.1/30 + no shutdown + +int e4 + no switchport + ip address 10.10.6.5/30 + no shutdown + +int e5 + no switchport + ip address 10.10.6.9/30 + no shutdown + +int e6 + no switchport + ip address 10.10.6.13/30 + no shutdown + +int lo0 + ip address 10.52.52.52/32 + + + ip routing + + router ospf 1 + router-id 10.52.52.52 + passive-interface default + no passive-interface Ethernet 3-6 + network 0.0.0.0/0 area 0 + + +interface Ethernet 3-6 + ip ospf network point-to-point + no shut \ No newline at end of file diff --git a/topologies/training-level-2-cl/configlets/NSSA-Start-Leaf1 b/topologies/training-level-2-cl/configlets/NSSA-Start-Leaf1 new file mode 100644 index 000000000..a717dd8f5 --- /dev/null +++ b/topologies/training-level-2-cl/configlets/NSSA-Start-Leaf1 @@ -0,0 +1,26 @@ +int e1,2 + shutdown + +int e3 + no switchport + ip address 10.10.1.2/30 + no shutdown + +int e4 + no switchport + ip address 10.10.2.2/30 + no shutdown + +int e5 + no switchport + ip address 10.10.3.2/30 + no shutdown + + +int e6 + no switchport + ip address 10.10.4.2/30 + no shutdown + +int lo0 + ip address 10.11.11.11/32 \ No newline at end of file diff --git a/topologies/training-level-2-cl/configlets/NSSA-Start-Leaf2 b/topologies/training-level-2-cl/configlets/NSSA-Start-Leaf2 new file mode 100644 index 000000000..b88633af6 --- /dev/null +++ b/topologies/training-level-2-cl/configlets/NSSA-Start-Leaf2 @@ -0,0 +1,39 @@ +int e1,2 + shutdown + +int e3 + no switchport + ip address 10.10.1.6/30 + no shutdown + +int e4 + no switchport + ip address 10.10.2.6/30 + no shutdown + +int e5 + no switchport + ip address 10.10.3.6/30 + no shutdown + + +int e6 + no switchport + ip address 10.10.4.6/30 + no shutdown + +int lo0 + ip address 10.12.12.12/32 + +ip routing + +router ospf 1 + router-id 10.13.13.13 + passive-interface default + no passive-interface Ethernet 3-6 + network 0.0.0.0/0 area 0 + + +interface Ethernet 3-6 +ip ospf network point-to-point +no shut \ No newline at end of file diff --git a/topologies/training-level-2-cl/configlets/NSSA-Start-Leaf3 b/topologies/training-level-2-cl/configlets/NSSA-Start-Leaf3 new file mode 100644 index 000000000..a758d383d --- /dev/null +++ b/topologies/training-level-2-cl/configlets/NSSA-Start-Leaf3 @@ -0,0 +1,43 @@ + +int e1,2 + shutdown + +int e3 + no switchport + ip address 10.10.1.2/30 + no shutdown + +int e4 + no switchport + ip address 10.10.2.2/30 + no shutdown + +int e5 + no switchport + ip address 10.10.3.2/30 + no shutdown + + +int e6 + no switchport + ip address 10.10.4.2/30 + no shutdown + +int e7,8,9,10 + shutdown + +int lo0 + ip address 10.11.11.11/32 + +ip routing + +router ospf 1 + router-id 10.13.13.13 + passive-interface default + no passive-interface Ethernet 3-6 + network 0.0.0.0/0 area 0 + + +interface Ethernet 3-6 +ip ospf network point-to-point +no shut \ No newline at end of file diff --git a/topologies/training-level-2-cl/configlets/NSSA-Start-Leaf4 b/topologies/training-level-2-cl/configlets/NSSA-Start-Leaf4 new file mode 100644 index 000000000..117c5085e --- /dev/null +++ b/topologies/training-level-2-cl/configlets/NSSA-Start-Leaf4 @@ -0,0 +1,39 @@ +int e1,2 + shutdown + +int e3 + no switchport + ip address 10.10.1.14/30 + no shutdown + +int e4 + no switchport + ip address 10.10.2.14/30 + no shutdown + +int e5 + no switchport + ip address 10.10.3.14/30 + no shutdown + + +int e6 + no switchport + ip address 10.10.4.14/30 + no shutdown + +int lo0 + ip address 10.14.14.14/32 + + ip routing + + router ospf 1 + router-id 10.14.14.14 + passive-interface default + no passive-interface Ethernet 3-6 + network 0.0.0.0/0 area 0 + + +interface Ethernet 3-6 + ip ospf network point-to-point + no shut \ No newline at end of file diff --git a/topologies/training-level-2-cl/configlets/NSSA-Start-Spine1 b/topologies/training-level-2-cl/configlets/NSSA-Start-Spine1 new file mode 100644 index 000000000..591bd11ac --- /dev/null +++ b/topologies/training-level-2-cl/configlets/NSSA-Start-Spine1 @@ -0,0 +1,49 @@ +int e1,2 + shutdown + +int e3 + no switchport + ip address 10.10.1.1/30 + no shutdown + +int e4 + no switchport + ip address 10.10.1.5/30 + no shutdown + +int e5 + no switchport + ip address 10.10.1.9/30 + no shutdown + + +int e6 + no switchport + ip address 10.10.1.13/30 + no shutdown + +int e7 + no switchport + ip address 10.10.5.2/30 + no shutdown + +int e8 + no switchport + ip address 10.10.6.2/30 + no shutdown + +int lo0 + ip address 10.21.21.21/32 + + + ip routing + + router ospf 1 + router-id 10.21.21.21 + passive-interface default + no passive-interface Ethernet 3-8 + network 0.0.0.0/0 area 0 + +interface Ethernet 3-8 + ip ospf network point-to-point + no shut \ No newline at end of file diff --git a/topologies/training-level-2-cl/configlets/NSSA-Start-Spine2 b/topologies/training-level-2-cl/configlets/NSSA-Start-Spine2 new file mode 100644 index 000000000..641e07d03 --- /dev/null +++ b/topologies/training-level-2-cl/configlets/NSSA-Start-Spine2 @@ -0,0 +1,49 @@ +int e1,2 + shutdown + +int e3 + no switchport + ip address 10.10.2.1/30 + no shutdown + +int e4 + no switchport + ip address 10.10.2.5/30 + no shutdown + +int e5 + no switchport + ip address 10.10.2.9/30 + no shutdown + + +int e6 + no switchport + ip address 10.10.2.13/30 + no shutdown + +int e7 + no switchport + ip address 10.10.5.6/30 + no shutdown + +int e8 + no switchport + ip address 10.10.6.6/30 + no shutdown + +int lo0 + ip address 10.22.22.22/32 + + ip routing + + router ospf 1 + router-id 10.22.22.22 + passive-interface default + no passive-interface Ethernet 3-8 + network 0.0.0.0/0 area 0 + + +interface Ethernet 3-8 + ip ospf network point-to-point + no shut \ No newline at end of file diff --git a/topologies/training-level-2-cl/configlets/NSSA-Start-Spine3 b/topologies/training-level-2-cl/configlets/NSSA-Start-Spine3 new file mode 100644 index 000000000..3b4c694c3 --- /dev/null +++ b/topologies/training-level-2-cl/configlets/NSSA-Start-Spine3 @@ -0,0 +1,49 @@ +int e1,2 + shutdown + +int e3 + no switchport + ip address 10.10.3.1/30 + no shutdown + +int e4 + no switchport + ip address 10.10.3.5/30 + no shutdown + +int e5 + no switchport + ip address 10.10.3.9/30 + no shutdown + + +int e6 + no switchport + ip address 10.10.3.13/30 + no shutdown + +int e7 + no switchport + ip address 10.10.5.10/30 + no shutdown + +int e8 + no switchport + ip address 10.10.6.10/30 + no shutdown + +int lo0 + ip address 10.23.23.23/32 + + ip routing + + router ospf 1 + router-id 10.23.23.23 + passive-interface default + no passive-interface Ethernet 3-8 + network 0.0.0.0/0 area 0 + + +interface Ethernet 3-8 + ip ospf network point-to-point + no shut diff --git a/topologies/training-level-2-cl/configlets/NSSA-Start-Spine4 b/topologies/training-level-2-cl/configlets/NSSA-Start-Spine4 new file mode 100644 index 000000000..c05ddea23 --- /dev/null +++ b/topologies/training-level-2-cl/configlets/NSSA-Start-Spine4 @@ -0,0 +1,49 @@ +int e1,2 + shutdown + +int e3 + no switchport + ip address 10.10.4.1/30 + no shutdown + +int e4 + no switchport + ip address 10.10.4.5/30 + no shutdown + +int e5 + no switchport + ip address 10.10.4.9/30 + no shutdown + + +int e6 + no switchport + ip address 10.10.4.13/30 + no shutdown + +int e7 + no switchport + ip address 10.10.5.14/30 + no shutdown + +int e8 + no switchport + ip address 10.10.6.14/30 + no shutdown + +int lo0 + ip address 10.24.24.24/32 + + ip routing + + router ospf 1 + router-id 10.24.24.24 + passive-interface default + no passive-interface Ethernet 3-8 + network 0.0.0.0/0 area 0 + + +interface Ethernet 3-8 + ip ospf network point-to-point + no shut \ No newline at end of file diff --git a/topologies/training-level-2-cl/configlets/Spine1-OSPFMultiArea-Start b/topologies/training-level-2-cl/configlets/Spine1-OSPFMultiArea-Start new file mode 100644 index 000000000..26a8c1eb0 --- /dev/null +++ b/topologies/training-level-2-cl/configlets/Spine1-OSPFMultiArea-Start @@ -0,0 +1,49 @@ + +int e1,2 + shutdown + +int e3 + no switchport + ip address 10.10.1.1/30 + no shutdown + +int e4 + no switchport + ip address 10.10.1.5/30 + no shutdown + +int e5 + no switchport + ip address 10.10.1.9/30 + no shutdown + + +int e6 + no switchport + ip address 10.10.1.13/30 + no shutdown + +int e7 + no switchport + ip address 10.10.5.2/30 + no shutdown + +int e8 + no switchport + ip address 10.10.6.2/30 + no shutdown + +int lo0 + ip address 10.21.21.21/32 + +ip routing + + router ospf 1 + router-id 10.21.21.21 + passive-interface default + no passive-interface Ethernet 3-8 + network 0.0.0.0/0 area 0 + +interface Ethernet 3-8 + ip ospf network point-to-point + no shut \ No newline at end of file diff --git a/topologies/training-level-2-cl/configlets/Spine2-OSPFMultiArea-Start b/topologies/training-level-2-cl/configlets/Spine2-OSPFMultiArea-Start new file mode 100644 index 000000000..641e07d03 --- /dev/null +++ b/topologies/training-level-2-cl/configlets/Spine2-OSPFMultiArea-Start @@ -0,0 +1,49 @@ +int e1,2 + shutdown + +int e3 + no switchport + ip address 10.10.2.1/30 + no shutdown + +int e4 + no switchport + ip address 10.10.2.5/30 + no shutdown + +int e5 + no switchport + ip address 10.10.2.9/30 + no shutdown + + +int e6 + no switchport + ip address 10.10.2.13/30 + no shutdown + +int e7 + no switchport + ip address 10.10.5.6/30 + no shutdown + +int e8 + no switchport + ip address 10.10.6.6/30 + no shutdown + +int lo0 + ip address 10.22.22.22/32 + + ip routing + + router ospf 1 + router-id 10.22.22.22 + passive-interface default + no passive-interface Ethernet 3-8 + network 0.0.0.0/0 area 0 + + +interface Ethernet 3-8 + ip ospf network point-to-point + no shut \ No newline at end of file diff --git a/topologies/training-level-2-cl/configlets/Spine3-OSPFMultiArea-Start b/topologies/training-level-2-cl/configlets/Spine3-OSPFMultiArea-Start new file mode 100644 index 000000000..ac3708ce9 --- /dev/null +++ b/topologies/training-level-2-cl/configlets/Spine3-OSPFMultiArea-Start @@ -0,0 +1,49 @@ +int e1,2 + shutdown + +int e3 + no switchport + ip address 10.10.3.1/30 + no shutdown + +int e4 + no switchport + ip address 10.10.3.5/30 + no shutdown + +int e5 + no switchport + ip address 10.10.3.9/30 + no shutdown + + +int e6 + no switchport + ip address 10.10.3.13/30 + no shutdown + +int e7 + no switchport + ip address 10.10.5.10/30 + no shutdown + +int e8 + no switchport + ip address 10.10.6.10/30 + no shutdown + +int lo0 + ip address 10.23.23.23/32 + + ip routing + + router ospf 1 + router-id 10.23.23.23 + passive-interface default + no passive-interface Ethernet 3-8 + network 0.0.0.0/0 area 0 + + +interface Ethernet 3-8 + ip ospf network point-to-point + no shut \ No newline at end of file diff --git a/topologies/training-level-2-cl/configlets/Spine4-OSPFMultiArea-Start b/topologies/training-level-2-cl/configlets/Spine4-OSPFMultiArea-Start new file mode 100644 index 000000000..0cafd6461 --- /dev/null +++ b/topologies/training-level-2-cl/configlets/Spine4-OSPFMultiArea-Start @@ -0,0 +1,50 @@ + +int e1,2 + shutdown + +int e3 + no switchport + ip address 10.10.4.1/30 + no shutdown + +int e4 + no switchport + ip address 10.10.4.5/30 + no shutdown + +int e5 + no switchport + ip address 10.10.4.9/30 + no shutdown + + +int e6 + no switchport + ip address 10.10.4.13/30 + no shutdown + +int e7 + no switchport + ip address 10.10.5.14/30 + no shutdown + +int e8 + no switchport + ip address 10.10.6.14/30 + no shutdown + +int lo0 + ip address 10.24.24.24/32 + + ip routing + + router ospf 1 + router-id 10.24.24.24 + passive-interface default + no passive-interface Ethernet 3-8 + network 0.0.0.0/0 area 0 + + +interface Ethernet 3-8 + ip ospf network point-to-point + no shut \ No newline at end of file diff --git a/topologies/training-level-2-cl/configlets/TroubleACL-Start-BorderLeaf1 b/topologies/training-level-2-cl/configlets/TroubleACL-Start-BorderLeaf1 new file mode 100644 index 000000000..a81da3e50 --- /dev/null +++ b/topologies/training-level-2-cl/configlets/TroubleACL-Start-BorderLeaf1 @@ -0,0 +1,26 @@ + +int e1,2 + shutdown + +int e3 + no switchport + ip address 10.10.5.1/30 + no shutdown + +int e4 + no switchport + ip address 10.10.5.5/30 + no shutdown + +int e5 + no switchport + ip address 10.10.5.9/30 + no shutdown + +int e6 + no switchport + ip address 10.10.5.13/30 + no shutdown + +int lo0 + ip address 10.51.51.51/32 \ No newline at end of file diff --git a/topologies/training-level-2-cl/configlets/TroubleACL-Start-BorderLeaf2 b/topologies/training-level-2-cl/configlets/TroubleACL-Start-BorderLeaf2 new file mode 100644 index 000000000..76a5a1feb --- /dev/null +++ b/topologies/training-level-2-cl/configlets/TroubleACL-Start-BorderLeaf2 @@ -0,0 +1,25 @@ +int e1,2 + shutdown + +int e3 + no switchport + ip address 10.10.6.1/30 + no shutdown + +int e4 + no switchport + ip address 10.10.6.5/30 + no shutdown + +int e5 + no switchport + ip address 10.10.6.9/30 + no shutdown + +int e6 + no switchport + ip address 10.10.6.13/30 + no shutdown + +int lo0 + ip address 10.52.52.52/32 \ No newline at end of file diff --git a/topologies/training-level-2-cl/configlets/TroubleACL-Start-Leaf1 b/topologies/training-level-2-cl/configlets/TroubleACL-Start-Leaf1 new file mode 100644 index 000000000..e5d0d0a60 --- /dev/null +++ b/topologies/training-level-2-cl/configlets/TroubleACL-Start-Leaf1 @@ -0,0 +1,30 @@ + +int e1,2 + shutdown + +int e3 + no switchport + ip address 10.10.1.2/30 + no shutdown + +int e4 + no switchport + ip address 10.10.2.2/30 + no shutdown + +int e5 + no switchport + ip address 10.10.3.2/30 + no shutdown + + +int e6 + no switchport + ip address 10.10.4.2/30 + no shutdown + +int e7,8,9,10 + shutdown + +int lo0 + ip address 10.11.11.11/32 \ No newline at end of file diff --git a/topologies/training-level-2-cl/configlets/TroubleACL-Start-Leaf2 b/topologies/training-level-2-cl/configlets/TroubleACL-Start-Leaf2 new file mode 100644 index 000000000..ddbf8ae61 --- /dev/null +++ b/topologies/training-level-2-cl/configlets/TroubleACL-Start-Leaf2 @@ -0,0 +1,26 @@ +int e1,2 + shutdown + +int e3 + no switchport + ip address 10.10.1.6/30 + no shutdown + +int e4 + no switchport + ip address 10.10.2.6/30 + no shutdown + +int e5 + no switchport + ip address 10.10.3.6/30 + no shutdown + + +int e6 + no switchport + ip address 10.10.4.6/30 + no shutdown + +int lo0 + ip address 10.12.12.12/32 \ No newline at end of file diff --git a/topologies/training-level-2-cl/configlets/TroubleACL-Start-Leaf3 b/topologies/training-level-2-cl/configlets/TroubleACL-Start-Leaf3 new file mode 100644 index 000000000..c41dbf772 --- /dev/null +++ b/topologies/training-level-2-cl/configlets/TroubleACL-Start-Leaf3 @@ -0,0 +1,26 @@ +int e1,2 + shutdown + +int e3 + no switchport + ip address 10.10.1.10/30 + no shutdown + +int e4 + no switchport + ip address 10.10.2.10/30 + no shutdown + +int e5 + no switchport + ip address 10.10.3.10/30 + no shutdown + + +int e6 + no switchport + ip address 10.10.4.10/30 + no shutdown + +int lo0 + ip address 10.13.13.13/32 \ No newline at end of file diff --git a/topologies/training-level-2-cl/configlets/TroubleACL-Start-Leaf4 b/topologies/training-level-2-cl/configlets/TroubleACL-Start-Leaf4 new file mode 100644 index 000000000..4a6f65cc0 --- /dev/null +++ b/topologies/training-level-2-cl/configlets/TroubleACL-Start-Leaf4 @@ -0,0 +1,26 @@ +int e1,2 + shutdown + +int e3 + no switchport + ip address 10.10.1.14/30 + no shutdown + +int e4 + no switchport + ip address 10.10.2.14/30 + no shutdown + +int e5 + no switchport + ip address 10.10.3.14/30 + no shutdown + + +int e6 + no switchport + ip address 10.10.4.14/30 + no shutdown + +int lo0 + ip address 10.14.14.14/32 \ No newline at end of file diff --git a/topologies/training-level-2-cl/configlets/TroubleACL-Start-Spine1 b/topologies/training-level-2-cl/configlets/TroubleACL-Start-Spine1 new file mode 100644 index 000000000..fe955e2c6 --- /dev/null +++ b/topologies/training-level-2-cl/configlets/TroubleACL-Start-Spine1 @@ -0,0 +1,43 @@ + +int e1,2 +shutdown + +int e3 +no switchport +ip address 10.10.1.1/30 +no shutdown + +int e4 + no switchport + ip address 10.10.1.5/30 + no shutdown + +int e5 + no switchport + ip address 10.10.1.9/30 + no shutdown + + +int e6 + no switchport + ip address 10.10.1.13/30 + no shutdown + +int e7 + no switchport + ip address 10.10.5.2/30 + no shutdown + +int e8 + no switchport + ip address 10.10.6.2/30 + no shutdown + +int lo0 + ip address 10.21.21.21/32 + +ip access-list ServiceControl + 10 deny ip host 10.10.1.2 host 10.10.1.1 log + +management ssh + ip access-group ServiceControl in \ No newline at end of file diff --git a/topologies/training-level-2-cl/configlets/TroubleACL-Start-Spine2 b/topologies/training-level-2-cl/configlets/TroubleACL-Start-Spine2 new file mode 100644 index 000000000..813e00769 --- /dev/null +++ b/topologies/training-level-2-cl/configlets/TroubleACL-Start-Spine2 @@ -0,0 +1,36 @@ +int e1,2 + shutdown + +int e3 + no switchport + ip address 10.10.2.1/30 + no shutdown + +int e4 + no switchport + ip address 10.10.2.5/30 + no shutdown + +int e5 + no switchport + ip address 10.10.2.9/30 + no shutdown + + +int e6 + no switchport + ip address 10.10.2.13/30 + no shutdown + +int e7 + no switchport + ip address 10.10.5.6/30 + no shutdown + +int e8 + no switchport + ip address 10.10.6.6/30 + no shutdown + +int lo0 + ip address 10.22.22.22/32 \ No newline at end of file diff --git a/topologies/training-level-2-cl/configlets/TroubleACL-Start-Spine3 b/topologies/training-level-2-cl/configlets/TroubleACL-Start-Spine3 new file mode 100644 index 000000000..c626a1a48 --- /dev/null +++ b/topologies/training-level-2-cl/configlets/TroubleACL-Start-Spine3 @@ -0,0 +1,36 @@ +int e1,2 + shutdown + +int e3 + no switchport + ip address 10.10.3.1/30 + no shutdown + +int e4 + no switchport + ip address 10.10.3.5/30 + no shutdown + +int e5 + no switchport + ip address 10.10.3.9/30 + no shutdown + + +int e6 + no switchport + ip address 10.10.3.13/30 + no shutdown + +int e7 + no switchport + ip address 10.10.5.10/30 + no shutdown + +int e8 + no switchport + ip address 10.10.6.10/30 + no shutdown + +int lo0 + ip address 10.23.23.23/32 \ No newline at end of file diff --git a/topologies/training-level-2-cl/configlets/TroubleACL-Start-Spine4 b/topologies/training-level-2-cl/configlets/TroubleACL-Start-Spine4 new file mode 100644 index 000000000..a82f28e11 --- /dev/null +++ b/topologies/training-level-2-cl/configlets/TroubleACL-Start-Spine4 @@ -0,0 +1,36 @@ +int e1,2 + shutdown + +int e3 + no switchport + ip address 10.10.4.1/30 + no shutdown + +int e4 + no switchport + ip address 10.10.4.5/30 + no shutdown + +int e5 + no switchport + ip address 10.10.4.9/30 + no shutdown + + +int e6 + no switchport + ip address 10.10.4.13/30 + no shutdown + +int e7 + no switchport + ip address 10.10.5.14/30 + no shutdown + +int e8 + no switchport + ip address 10.10.6.14/30 + no shutdown + +int lo0 + ip address 10.24.24.24/32 \ No newline at end of file diff --git a/topologies/training-level-2-cl/configlets/TroubleBGP-BorderLeaf1 b/topologies/training-level-2-cl/configlets/TroubleBGP-BorderLeaf1 new file mode 100644 index 000000000..33c1963cb --- /dev/null +++ b/topologies/training-level-2-cl/configlets/TroubleBGP-BorderLeaf1 @@ -0,0 +1,48 @@ +int e1,2 + shutdown + +int e3 + no switchport + ip address 10.10.5.1/30 + no shutdown + +int e4 + no switchport + ip address 10.10.5.5/30 + no shutdown + +int e5 + no switchport + ip address 10.10.5.9/30 + no shutdown + +int e6 + no switchport + ip address 10.10.5.13/30 + no shutdown + +int lo0 + ip address 10.51.51.51/32 + + +ip routing + +router bgp 65500 + + router-id 10.51.51.51 + maximum-paths 4 ecmp 4 + neighbor Spines peer group + neighbor Spines remote-as 65100 + neighbor Spines allowas-in 1 + neighbor 10.10.5.2 peer group Spines + neighbor 10.10.5.6 peer group Spines + neighbor 10.10.5.10 peer group Spines + neighbor 10.10.5.14 peer group Spines + + neighbor 10.10.5.2 description Spine1 + neighbor 10.10.5.6 description Spine2 + neighbor 10.10.5.10 description Spine3 + neighbor 10.10.5.14 description Spine4 + + network 10.51.51.51/32 + redistribute connected \ No newline at end of file diff --git a/topologies/training-level-2-cl/configlets/TroubleBGP-BorderLeaf2 b/topologies/training-level-2-cl/configlets/TroubleBGP-BorderLeaf2 new file mode 100644 index 000000000..e59c76002 --- /dev/null +++ b/topologies/training-level-2-cl/configlets/TroubleBGP-BorderLeaf2 @@ -0,0 +1,48 @@ + +int e1,2 + shutdown + +int e3 + no switchport + ip address 10.10.6.1/30 + no shutdown + +int e4 + no switchport + ip address 10.10.6.5/30 + no shutdown + +int e5 + no switchport + ip address 10.10.6.9/30 + no shutdown + +int e6 + no switchport + ip address 10.10.6.13/30 + no shutdown + +int lo0 + ip address 10.52.52.52/32 + +ip routing + +router bgp 65500 + + router-id 10.52.52.52 + maximum-paths 4 ecmp 4 + neighbor Spines peer group + neighbor Spines remote-as 65100 + neighbor Spines allowas-in 1 + neighbor 10.10.6.2 peer group Spines + neighbor 10.10.6.6 peer group Spines + neighbor 10.10.6.10 peer group Spines + neighbor 10.10.6.14 peer group Spines + + neighbor 10.10.6.2 description Spine1 + neighbor 10.10.6.6 description Spine2 + neighbor 10.10.6.10 description Spine3 + neighbor 10.10.6.14 description Spine4 + + network 10.52.52.52/32 + redistribute connected \ No newline at end of file diff --git a/topologies/training-level-2-cl/configlets/TroubleBGP-Leaf4 b/topologies/training-level-2-cl/configlets/TroubleBGP-Leaf4 new file mode 100644 index 000000000..c7ce728e5 --- /dev/null +++ b/topologies/training-level-2-cl/configlets/TroubleBGP-Leaf4 @@ -0,0 +1,61 @@ + +vlan 104 +! +interface Ethernet1 + shutdown +! +interface Ethernet2 + shutdown +! +interface Ethernet3 + no switchport + ip address 10.10.1.14/30 +! +interface Ethernet4 + no switchport + ip address 10.10.2.14/30 +! +interface Ethernet5 + no switchport + ip address 10.10.3.14/30 +! +interface Ethernet6 + no switchport + ip address 10.10.4.14/30 +! +interface Ethernet7 +! +interface Ethernet8 +! +interface Ethernet9 +! +interface Ethernet10 +! +interface Loopback0 + ip address 10.14.14.14/32 + +! +interface Vlan104 + no autostate + ip address 172.16.104.1/24 +! +ip routing + + +! +router bgp 65004 + router-id 10.14.14.14 + maximum-paths 4 ecmp 4 + neighbor Spines peer group + neighbor Spines remote-as 65100 + neighbor 10.10.1.13 peer group Spines + neighbor 10.10.1.13 description Spine1 + neighbor 10.10.2.13 peer group Spines + neighbor 10.10.2.13 description Spine2 + neighbor 10.10.3.13 peer group Spines + neighbor 10.10.3.13 description Spine3 + neighbor 10.10.4.13 peer group Spines + neighbor 10.10.4.13 description Spine4 + network 10.14.14.14/32 + redistribute connected +! diff --git a/topologies/training-level-2-cl/configlets/TroubleBGP-Spine1 b/topologies/training-level-2-cl/configlets/TroubleBGP-Spine1 new file mode 100644 index 000000000..546dff4e0 --- /dev/null +++ b/topologies/training-level-2-cl/configlets/TroubleBGP-Spine1 @@ -0,0 +1,58 @@ + +int e1,2 + shutdown + +int e3 + no switchport + ip address 10.10.1.1/30 + no shutdown + +int e4 + no switchport + ip address 10.10.1.5/30 + no shutdown + +int e5 + no switchport + ip address 10.10.1.9/30 + no shutdown + + +int e6 + no switchport + ip address 10.10.1.13/30 + no shutdown + +int e7 + no switchport + ip address 10.10.5.2/30 + no shutdown + +int e8 + no switchport + ip address 10.10.6.2/30 + no shutdown + +int lo0 + ip address 10.21.21.21/32 + +ip routing + +router bgp 65100 + router-id 10.21.21.21 + bgp log-neighbor-changes + neighbor 10.10.1.2 remote-as 65000 + neighbor 10.10.1.2 description Leaf1 + neighbor 10.10.1.6 remote-as 65002 + neighbor 10.10.1.6 description Leaf2 + neighbor 10.10.1.10 remote-as 65003 + neighbor 10.10.1.10 description Leaf3 + neighbor 10.10.1.14 remote-as 65004 + neighbor 10.10.1.14 description Leaf4 + neighbor 10.10.5.1 remote-as 65500 + neighbor 10.10.5.1 description BorderLeaf1 + neighbor 10.10.6.1 remote-as 65500 + neighbor 10.10.6.1 description BorderLeaf2 + network 10.21.21.21/32 + redistribute connected +! \ No newline at end of file diff --git a/topologies/training-level-2-cl/configlets/TroubleBGP-Spine2 b/topologies/training-level-2-cl/configlets/TroubleBGP-Spine2 new file mode 100644 index 000000000..a19beff83 --- /dev/null +++ b/topologies/training-level-2-cl/configlets/TroubleBGP-Spine2 @@ -0,0 +1,57 @@ + +int e1,2 + shutdown + +int e3 + no switchport + ip address 10.10.2.1/30 + no shutdown + +int e4 + no switchport + ip address 10.10.2.5/30 + no shutdown + +int e5 + no switchport + ip address 10.10.2.9/30 + no shutdown + + +int e6 + no switchport + ip address 10.10.2.13/30 + no shutdown + +int e7 + no switchport + ip address 10.10.5.6/30 + no shutdown + +int e8 + no switchport + ip address 10.10.6.6/30 + no shutdown + +int lo0 + ip address 10.22.22.22/32 + +ip routing + +router bgp 65100 + bgp log-neighbor-changes + router-id 10.22.22.22 + neighbor 10.10.2.2 remote-as 65001 + neighbor 10.10.2.2 description Leaf1 + neighbor 10.10.2.2 update-source Loopback0 + neighbor 10.10.2.6 remote-as 65002 + neighbor 10.10.2.6 description Leaf2 + neighbor 10.10.2.10 remote-as 65003 + neighbor 10.10.2.10 description Leaf3 + neighbor 10.10.2.14 remote-as 65004 + neighbor 10.10.2.14 description Leaf4 + neighbor 10.10.5.5 remote-as 65500 + neighbor 10.10.5.5 description BorderLeaf1 + neighbor 10.10.6.5 remote-as 65500 + neighbor 10.10.6.5 description BorderLeaf2 + network 10.22.22.22/32 \ No newline at end of file diff --git a/topologies/training-level-2-cl/configlets/TroubleBGP-Spine3 b/topologies/training-level-2-cl/configlets/TroubleBGP-Spine3 new file mode 100644 index 000000000..d9f2a5412 --- /dev/null +++ b/topologies/training-level-2-cl/configlets/TroubleBGP-Spine3 @@ -0,0 +1,64 @@ +int e1,2 + shutdown + +int e3 + no switchport + ip address 10.10.3.1/30 + no shutdown + +int e4 + no switchport + ip address 10.10.3.5/30 + no shutdown + +int e5 + no switchport + ip address 10.10.3.9/30 + no shutdown + + +int e6 + no switchport + ip address 10.10.3.13/30 + no shutdown + +int e7 + no switchport + ip address 10.10.5.10/30 + no shutdown + +int e8 + no switchport + ip address 10.10.6.10/30 + no shutdown + +int lo0 + ip address 10.23.23.23/32 + + + +ip routing + +router bgp 65100 + router-id 10.23.23.23 + + neighbor 10.10.3.2 description Leaf1 + neighbor 10.10.3.2 remote-as 65001 + + neighbor 10.10.3.6 description Leaf2 + neighbor 10.10.3.6 remote-as 65002 + + neighbor 10.10.3.10 description Leaf3 + neighbor 10.10.3.10 remote-as 65003 + + neighbor 10.10.3.14 description Leaf4 + neighbor 10.10.3.14 remote-as 65004 + + neighbor 10.10.5.9 description BorderLeaf1 + neighbor 10.10.5.9 remote-as 65500 + + neighbor 10.10.6.9 description BorderLeaf2 + neighbor 10.10.6.9 remote-as 65500 + + network 10.23.23.23/32 + redistribute connected \ No newline at end of file diff --git a/topologies/training-level-2-cl/configlets/TroubleBGP-Spine4 b/topologies/training-level-2-cl/configlets/TroubleBGP-Spine4 new file mode 100644 index 000000000..8ae59a38c --- /dev/null +++ b/topologies/training-level-2-cl/configlets/TroubleBGP-Spine4 @@ -0,0 +1,63 @@ +int e1,2 + shutdown + +int e3 + no switchport + ip address 10.10.4.1/30 + no shutdown + +int e4 + no switchport + ip address 10.10.4.5/30 + no shutdown + +int e5 + no switchport + ip address 10.10.4.9/30 + no shutdown + + +int e6 + no switchport + ip address 10.10.4.13/30 + no shutdown + +int e7 + no switchport + ip address 10.10.5.14/30 + no shutdown + +int e8 + no switchport + ip address 10.10.6.14/30 + no shutdown + +int lo0 + ip address 10.24.24.24/32 + +ip routing + +router bgp 65100 + router-id 10.24.24.24 + + neighbor 10.10.4.2 description Leaf1 + neighbor 10.10.4.2 remote-as 65001 + + neighbor 10.10.4.6 description Leaf2 + neighbor 10.10.4.6 remote-as 65002 + + neighbor 10.10.4.10 description Leaf3 + neighbor 10.10.4.10 remote-as 65003 + + neighbor 10.10.4.14 description Leaf4 + neighbor 10.10.4.14 remote-as 65004 + + neighbor 10.10.5.13 description BorderLeaf1 + neighbor 10.10.5.13 remote-as 65500 + + neighbor 10.10.6.13 description BorderLeaf2 + neighbor 10.10.6.13 remote-as 65500 + + + network 10.24.24.24/32 + redistribute connected \ No newline at end of file diff --git a/topologies/training-level-2-cl/configlets/TroubleBGP-Start-Leaf1 b/topologies/training-level-2-cl/configlets/TroubleBGP-Start-Leaf1 new file mode 100644 index 000000000..43c278bc5 --- /dev/null +++ b/topologies/training-level-2-cl/configlets/TroubleBGP-Start-Leaf1 @@ -0,0 +1,57 @@ +vlan 101 + +interface Ethernet1 + shutdown +! +interface Ethernet2 + shutdown +! +interface Ethernet3 + no switchport + ip address 10.10.1.2/30 +! +interface Ethernet4 + no switchport + ip address 10.10.2.2/30 +! +interface Ethernet5 + no switchport + ip address 10.10.3.2/30 +! +interface Ethernet6 + no switchport + ip address 10.10.4.2/30 +! +interface Ethernet7 +! +interface Ethernet8 +! +interface Ethernet9 +! +interface Ethernet10 +! +interface Loopback0 + ip address 10.11.11.11/32 +! +interface Vlan101 + no autostate + ip address 172.16.101.1/24 +! +ip routing +! +router bgp 65001 + router-id 10.11.11.11 + maximum-paths 4 ecmp 4 + neighbor Spines peer group + neighbor Spines remote-as 65100 + neighbor 10.10.1.1 peer group Spines + neighbor 10.10.1.1 description Spine1 + neighbor 10.10.3.1 peer group Spines + neighbor 10.10.3.1 description Spine3 + neighbor 10.10.4.1 peer group Spines + neighbor 10.10.4.1 description Spine4 + neighbor 10.10.20.1 peer group Spines + neighbor 10.10.20.1 update-source Loopback0 + neighbor 10.10.20.1 description Spine2 + network 10.11.11.11/32 +! \ No newline at end of file diff --git a/topologies/training-level-2-cl/configlets/TroubleBGP-Start-Leaf2 b/topologies/training-level-2-cl/configlets/TroubleBGP-Start-Leaf2 new file mode 100644 index 000000000..60de2742c --- /dev/null +++ b/topologies/training-level-2-cl/configlets/TroubleBGP-Start-Leaf2 @@ -0,0 +1,50 @@ +vlan 102 + +int e1,2 + shutdown + +int e3 + no switchport + ip address 10.10.1.6/30 + no shutdown + +int e4 + no switchport + ip address 10.10.2.6/30 + no shutdown + +int e5 + no switchport + ip address 10.10.3.6/30 + no shutdown + + +int e6 + no switchport + ip address 10.10.4.6/30 + no shutdown +! +int lo0 + ip address 10.12.12.12/32 +! +interface Vlan102 + no autostate + ip address 172.16.102.1/24 +! +ip routing +! +router bgp 65002 + router-id 10.12.12.12 + maximum-paths 4 ecmp 4 + neighbor Spines peer group + neighbor Spines remote-as 65100 + neighbor 10.10.1.5 peer group Spines + neighbor 10.10.1.5 description Spine1 + neighbor 10.10.2.5 peer group Spines + neighbor 10.10.2.5 description Spine2 + neighbor 10.10.3.5 peer group Spines + neighbor 10.10.3.5 description Spine3 + neighbor 10.10.4.5 peer group Spines + neighbor 10.10.4.5 description Spine4 + network 10.12.12.12/32 + redistribute connected \ No newline at end of file diff --git a/topologies/training-level-2-cl/configlets/TroubleBGP-Start-Leaf3 b/topologies/training-level-2-cl/configlets/TroubleBGP-Start-Leaf3 new file mode 100644 index 000000000..dac22a1d7 --- /dev/null +++ b/topologies/training-level-2-cl/configlets/TroubleBGP-Start-Leaf3 @@ -0,0 +1,57 @@ + + + + +vlan 103 + +int vlan 103 + ip address 172.16.103.1/24 + no autostate + +int e1,2 + shutdown + +int e3 + no switchport + ip address 10.10.1.10/30 + no shutdown + +int e4 + no switchport + ip address 10.10.2.10/30 + no shutdown + +int e5 + no switchport + ip address 10.10.3.10/30 + no shutdown + + +int e6 + no switchport + ip address 10.10.4.10/30 + no shutdown + +int lo0 + ip address 10.13.13.13/32 + +ip routing + +ip route 172.16.101.0/24 10.11.11.11 + + + router bgp 65003 + router-id 10.13.13.13 + maximum-paths 4 ecmp 4 + neighbor Spines peer group + neighbor Spines remote-as 65100 + neighbor 10.10.1.9 peer group Spines + neighbor 10.10.1.9 description Spine1 + neighbor 10.10.2.9 peer group Spines + neighbor 10.10.2.9 description Spine2 + neighbor 10.10.3.9 peer group Spines + neighbor 10.10.3.9 description Spine3 + neighbor 10.10.4.9 peer group Spines + neighbor 10.10.4.9 description Spine4 + network 10.13.13.13/32 + redistribute connected \ No newline at end of file diff --git a/topologies/training-level-2-cl/configlets/TroubleMLAG-Host1 b/topologies/training-level-2-cl/configlets/TroubleMLAG-Host1 new file mode 100644 index 000000000..3238c399d --- /dev/null +++ b/topologies/training-level-2-cl/configlets/TroubleMLAG-Host1 @@ -0,0 +1,30 @@ + + vlan 10 + +interface Vlan10 + ip address 192.168.10.10/24 + no autostate + +interface Port-Channel1 + description Connection to MLAG Leaf1-Leaf2 + switchport + switchport mode access + switchport access vlan 10 + no shut + +interface Ethernet1 + description Connection to MLAG Leaf1 + channel-group 1 mode active + + + +interface Ethernet2 + description Connection to MLAG Leaf2 + channel-group 1 mode active + + +ip route 192.168.10.0/24 192.168.10.254 +ip route 192.168.10.0/24 192.168.10.254 +ip route 192.168.20.0/24 192.168.10.254 +ip route 192.168.30.0/24 192.168.10.254 +ip route 192.168.40.0/24 192.168.10.254 \ No newline at end of file diff --git a/topologies/training-level-2-cl/configlets/TroubleMLAG-Host2 b/topologies/training-level-2-cl/configlets/TroubleMLAG-Host2 new file mode 100644 index 000000000..5a4212e2f --- /dev/null +++ b/topologies/training-level-2-cl/configlets/TroubleMLAG-Host2 @@ -0,0 +1,28 @@ + + vlan 20 + +interface Vlan20 + ip address 192.168.20.10/24 + no autostate + +interface Port-Channel2 + description Connection to MLAG Leaf1-Leaf2 + switchport + switchport mode access + switchport access vlan 20 + no shut + +interface Ethernet1 + description Connection to MLAG Leaf1 + channel-group 2 mode active + + +interface Ethernet2 + description Connection to MLAG Leaf2 + channel-group 2 mode active + +ip route 192.168.20.0/24 192.168.20.254 +ip route 192.168.10.0/24 192.168.20.254 +ip route 192.168.20.0/24 192.168.20.254 +ip route 192.168.30.0/24 192.168.20.254 +ip route 192.168.40.0/24 192.168.20.254 \ No newline at end of file diff --git a/topologies/training-level-2-cl/configlets/TroubleMLAG-Host3 b/topologies/training-level-2-cl/configlets/TroubleMLAG-Host3 new file mode 100644 index 000000000..d6084e4fc --- /dev/null +++ b/topologies/training-level-2-cl/configlets/TroubleMLAG-Host3 @@ -0,0 +1,28 @@ + + vlan 30 + +interface Vlan30 + ip address 192.168.30.10/24 + no autostate + +interface Port-Channel1 + description Connection to MLAG Leaf3-Leaf4 + switchport + switchport mode access + switchport access vlan 30 + no shut + +interface Ethernet1 + description Connection to MLAG Leaf3 + channel-group 1 mode active + + +interface Ethernet2 + description Connection to MLAG Leaf4 + channel-group 1 mode active + + +ip route 192.168.10.0/24 192.168.30.254 +ip route 192.168.20.0/24 192.168.30.254 +ip route 192.168.30.0/24 192.168.30.254 +ip route 192.168.40.0/24 192.168.30.254 \ No newline at end of file diff --git a/topologies/training-level-2-cl/configlets/TroubleMLAG-Host4 b/topologies/training-level-2-cl/configlets/TroubleMLAG-Host4 new file mode 100644 index 000000000..d79eeb0d9 --- /dev/null +++ b/topologies/training-level-2-cl/configlets/TroubleMLAG-Host4 @@ -0,0 +1,29 @@ + + vlan 40 + +interface Vlan40 + ip address 192.168.40.10/24 + no autostate + +interface Port-Channel2 + description Connection to MLAG Leaf3-Leaf4 + switchport + switchport mode access + switchport access vlan 40 + no shut + +interface Ethernet1 + description Connection to MLAG Leaf3 + channel-group 2 mode active + + +interface Ethernet2 + description Connection to MLAG Leaf4 + channel-group 2 mode active + + + +ip route 192.168.10.0/24 192.168.40.254 +ip route 192.168.20.0/24 192.168.40.254 +ip route 192.168.30.0/24 192.168.40.254 +ip route 192.168.40.0/24 192.168.40.254 diff --git a/topologies/training-level-2-cl/configlets/TroubleMLAG-Leaf1 b/topologies/training-level-2-cl/configlets/TroubleMLAG-Leaf1 new file mode 100644 index 000000000..35881bff3 --- /dev/null +++ b/topologies/training-level-2-cl/configlets/TroubleMLAG-Leaf1 @@ -0,0 +1,125 @@ + ! + vlan 10 + vlan 20 + + ! +interface Port-Channel20 + description Leaf 1 and Leaf 2 MLAG PortChannel 20 to Spine MLAG + switchport + switchport mode trunk + switchport trunk allowed vlan 10,20 + mlag 20 + no shut + + +interface Ethernet3 + channel-group 20 mode active + + +interface Ethernet4 + channel-group 20 mode active + + + vlan 4094 + name MLAG + trunk group MLAGVLAN + + spanning-tree mode mstp + + + ip virtual-router mac-address 001c.7300.0098 + + interface Vlan4094 + ip address 172.16.40.1/24 + no autostate + + interface Port-Channel200 + description MLAG Peer Link + switchport + switchport mode trunk + switchport trunk group MLAGVLAN + + interface Ethernet1 + description MLAG Peer Link Member + channel-group 200 mode active + + + interface Ethernet2 + description MLAG Peer Link Member + channel-group 200 mode active + + + mlag configuration + domain-id MLAGLeaf1 + local-interface Vlan4094 + peer-address 172.16.40.2 + peer-link Port-Channel200 + primary-priority 10 + + heartbeat-interval 2500 + + + + ip access-list default-control-plane-acl-new + 10 permit icmp any any + 20 permit ip any any tracked + 30 permit udp any any eq bfd ttl eq 255 + 40 permit udp any any eq bfd-echo ttl eq 254 + 50 permit udp any any eq multihop-bfd micro-bfd sbfd + 60 permit udp any eq sbfd any eq sbfd-initiator + 70 permit ospf any any + 80 permit tcp any any eq ssh telnet www snmp bgp https msdp ldp netconf-ssh gnmi + 90 permit udp any any eq bootps bootpc ntp snmp ptp-event ptp-general rip ldp + 120 permit vrrp any any + 130 permit ahp any any + 140 permit pim any any + 150 permit igmp any any + 160 permit tcp any any range 5900 5910 + 170 permit tcp any any range 50000 50100 + 180 permit udp any any range 51000 51100 + 190 permit tcp any any eq 3333 + 200 permit tcp any any eq nat ttl eq 255 + 210 permit tcp any eq bgp any + 220 permit rsvp any any + 230 permit tcp any any eq 9340 + 240 permit tcp any any eq 9559 + 250 permit udp any any eq 8503 + 260 permit udp any any eq lsp-ping + 270 permit udp any eq lsp-ping any + + +system control-plane + ip access-group default-control-plane-acl-new in + ip access-group default-control-plane-acl-new vrf MGMT in + + + +vlan 10 + +interface Port-Channel1 + description MLAG Connection to Host1 + switchport + switchport mode access + switchport access vlan 10 + mlag 1 + no shut + +interface Ethernet7 + description LACP Connection to Host 1 + channel-group 1 mode active + + +vlan 20 + +interface Port-Channel2 + description MLAG Connection to Host2 + switchport + switchport mode access + switchport access vlan 20 + mlag 2 + no shut + +interface Ethernet9 + description LACP Connection to Host 2 + channel-group 2 mode active + diff --git a/topologies/training-level-2-cl/configlets/TroubleMLAG-Leaf2 b/topologies/training-level-2-cl/configlets/TroubleMLAG-Leaf2 new file mode 100644 index 000000000..4c8d6b183 --- /dev/null +++ b/topologies/training-level-2-cl/configlets/TroubleMLAG-Leaf2 @@ -0,0 +1,118 @@ + ! + vlan 10 + vlan 20 + + ! +interface Port-Channel20 + description Leaf 1 and Leaf 2 MLAG PortChannel 20 to Spine MLAG + switchport + switchport mode trunk + switchport trunk allowed vlan 10,20 + mlag 20 + no shut + + +interface Ethernet3 + channel-group 20 mode active + + +interface Ethernet4 + channel-group 20 mode active + +vlan 4094 +name MLAG +trunk group MLAGVLAN + +spanning-tree mode mstp +no spanning-tree vlan-id 4094 + +ip virtual-router mac-address 001c.7300.0098 + +interface Vlan4094 +ip address 172.16.40.2/24 +no autostate + +interface Port-Channel200 +description MLAG Peer Link +switchport +switchport mode trunk +switchport trunk group MLAGVLAN +no shut + +interface Ethernet1 +description MLAG Peer Link Member +channel-group 200 mode active + + +interface Ethernet2 +description MLAG Peer Link Member +channel-group 200 mode active + + +mlag configuration +domain-id MLAGLeaf1Leaf2 +local-interface Vlan4094 +peer-address 172.16.40.1 +peer-link Port-Channel200 +primary-priority 20 +heartbeat-interval 2500 + +ip access-list default-control-plane-acl-new + 10 permit icmp any any + 20 permit ip any any tracked + 30 permit udp any any eq bfd ttl eq 255 + 40 permit udp any any eq bfd-echo ttl eq 254 + 50 permit udp any any eq multihop-bfd micro-bfd sbfd + 60 permit udp any eq sbfd any eq sbfd-initiator + 70 permit ospf any any + 80 permit tcp any any eq ssh telnet www snmp bgp https msdp ldp netconf-ssh gnmi + 90 permit udp any any eq bootps bootpc ntp snmp ptp-event ptp-general rip ldp + 120 permit vrrp any any + 130 permit ahp any any + 140 permit pim any any + 150 permit igmp any any + 160 permit tcp any any range 5900 5910 + 170 permit tcp any any range 50000 50100 + 180 permit udp any any range 51000 51100 + 190 permit tcp any any eq 3333 + 200 permit tcp any any eq nat ttl eq 255 + 210 permit tcp any eq bgp any + 220 permit rsvp any any + 230 permit tcp any any eq 9340 + 240 permit tcp any any eq 9559 + 250 permit udp any any eq 8503 + 260 permit udp any any eq lsp-ping + 270 permit udp any eq lsp-ping any + + +system control-plane + ip access-group default-control-plane-acl-new in + ip access-group default-control-plane-acl-new vrf MGMT in + + vlan 10 + +interface Port-Channel1 + description MLAG Connection to Host1 + switchport + switchport mode access + switchport access vlan 10 + mlag 1 + no shut + +interface Ethernet7 + description LACP Connection to Host 1 + channel-group 1 mode active + + vlan 20 + ! +interface Port-Channel2 + description MLAG Connection to Host2 + switchport + switchport mode access + switchport access vlan 20 + mlag 2 + no shut + +interface Ethernet9 + description LACP Connection to Host 2 + channel-group 2 mode active \ No newline at end of file diff --git a/topologies/training-level-2-cl/configlets/TroubleMLAG-Leaf3 b/topologies/training-level-2-cl/configlets/TroubleMLAG-Leaf3 new file mode 100644 index 000000000..c70f7452e --- /dev/null +++ b/topologies/training-level-2-cl/configlets/TroubleMLAG-Leaf3 @@ -0,0 +1,124 @@ + vlan 30 + vlan 40 + +interface Port-Channel40 + description Leaf 3 and Leaf 4 MLAG PortChannel 40 to Spine MLAG + switchport + switchport mode trunk + switchport trunk allowed vlan 30,40 + mlag 40 + no shut + + +interface Ethernet3 + channel-group 40 mode active + + + +interface Ethernet4 + channel-group 40 mode active + +vlan 40 + +interface Port-Channel2 + description MLAG Connection to Host4 + switchport + switchport mode access + switchport access vlan 40 + mlag 2 + no shut + + +interface Ethernet9 + description LACP Connection to Host 4 + channel-group 2 mode active + +vlan 30 + +interface Port-Channel1 + description MLAG Connection to Host3 + switchport + switchport mode access + switchport access vlan 30 + mlag 1 + no shut + +interface Ethernet7 + description LACP Connection to Host 3 + channel-group 1 mode active + + vlan 4094 + name MLAG + trunk group MLAGVLAN + + spanning-tree mode mstp + no spanning-tree vlan-id 4094 + + ip virtual-router mac-address 001c.7300.0097 + +interface Vlan4094 + ip address 172.16.50.1/30 + no autostate + +interface Port-Channel200 + description MLAG Peer Link + switchport + switchport mode trunk + switchport trunk group MLAGVLAN + +interface Ethernet1 + description MLAG Peer Link Member + channel-group 200 mode active + + + vlan 4094 + name MLAG + trunk group MLAGVLAN + + spanning-tree mode mstp + no spanning-tree vlan-id 4094 + + ip virtual-router mac-address 001c.7300.0097 + +interface Vlan4094 + ip address 172.16.50.1/30 + no autostate + +interface Port-Channel200 + description MLAG Peer Link + switchport + switchport mode trunk + switchport trunk group MLAGVLAN + +interface Ethernet1 + description MLAG Peer Link Member + channel-group 200 mode active + + +interface Ethernet2 + description MLAG Peer Link Member + channel-group 200 mode active + + +mlag configuration + domain-id MLAGLeaf3Leaf4 + local-interface Vlan4094 + peer-address 172.16.50.2 + peer-link Port-Channel200 + primary-priority 10 + heartbeat-interval 2500 + +interface Ethernet2 + description MLAG Peer Link Member + channel-group 200 mode active + + +mlag configuration + domain-id MLAGLeaf3Leaf4 + local-interface Vlan4094 + peer-address 172.16.50.2 + peer-link Port-Channel200 + primary-priority 10 + heartbeat-interval 2500 + + diff --git a/topologies/training-level-2-cl/configlets/TroubleMLAG-Leaf4 b/topologies/training-level-2-cl/configlets/TroubleMLAG-Leaf4 new file mode 100644 index 000000000..42eceb525 --- /dev/null +++ b/topologies/training-level-2-cl/configlets/TroubleMLAG-Leaf4 @@ -0,0 +1,88 @@ + vlan 30 + vlan 40 + +interface Port-Channel40 + description Leaf 3 and Leaf 4 MLAG PortChannel 40 to Spine MLAG + switchport + switchport mode trunk + switchport trunk allowed vlan 30,40 + mlag 40 + no shut + + +interface Ethernet3 + channel-group 40 mode active + + + +interface Ethernet4 + channel-group 40 mode active + + + vlan 40 + +interface Port-Channel2 + description MLAG Connection to Host4 + switchport + switchport mode access + switchport access vlan 40 + mlag 2 + no shut + + + +interface Ethernet9 + description LACP Connection to Host 4 + channel-group 2 mode active + + vlan 30 + +interface Port-Channel1 + description MLAG Connection to Host3 + switchport + switchport mode access + switchport access vlan 30 + mlag 1 + no shut + +interface Ethernet7 + description LACP Connection to Host 3 + channel-group 1 mode active + + vlan 4094 + name MLAG + trunk group MLAGVLAN + + spanning-tree mode mstp + no spanning-tree vlan-id 4094 + + ip virtual-router mac-address 001c.7300.0097 + +interface Vlan4094 + ip address 172.16.50.2/30 + no autostate + +interface Port-Channel200 + description MLAG Peer Link + switchport + switchport mode trunk + switchport trunk group MLAGVLAN + no shut + +interface Ethernet1 + description MLAG Peer Link Member + channel-group 200 mode active + + +interface Ethernet2 + description MLAG Peer Link Member + channel-group 200 mode active + + +mlag configuration + domain-id MLAGLeaf3Leaf4 + local-interface Vlan4094 + peer-address 172.16.50.1 + peer-link Port-Channel200 + primary-priority 20 + heartbeat-interval 2500 \ No newline at end of file diff --git a/topologies/training-level-2-cl/configlets/TroubleMLAG-Spine1 b/topologies/training-level-2-cl/configlets/TroubleMLAG-Spine1 new file mode 100644 index 000000000..5cd115436 --- /dev/null +++ b/topologies/training-level-2-cl/configlets/TroubleMLAG-Spine1 @@ -0,0 +1,117 @@ +! +spanning-tree mode mst + +spanning-tree mst configuration + instance 0 vlan 1-4094 + spanning-tree mst 0 root primary + +vlan 10 +vlan 20 +vlan 30 +vlan 40 + +interface Port-Channel10 + description Spine 1 and Spine 2 MLAG PortChannel 10 to Leaf 1 and Leaf 2 MLAG + switchport + switchport mode trunk + switchport trunk allowed vlan 10,20 + mlag 10 + no shut + +interface Ethernet3 + channel-group 10 mode active + + +interface Ethernet4 + channel-group 10 mode active + + +interface Ethernet7 + shutdown + +interface Ethernet8 + shutdown + + +interface Port-Channel30 + description Spine 1 and SPine 2 MLAG PortChannel 30 to Leaf 3 and Leaf 4 MLAG + switchport + switchport mode trunk + switchport trunk allowed vlan 30,40 + mlag 30 + no shut + +interface Ethernet5 + channel-group 30 mode active + + +interface Ethernet6 + channel-group 30 mode active + + + + + vlan 4094 + name MLAG + trunk group MLAGVLAN + + spanning-tree mode mstp + no spanning-tree vlan-id 4094 + + ip virtual-router mac-address 001c.7300.0099 + +interface Vlan4094 + ip address 172.16.30.1/30 + no autostate + +interface Port-Channel200 + description MLAG Peer Link + switchport + switchport mode trunk + switchport trunk group MLAGVLAN + +interface Ethernet1 + description MLAG Peer Link Member + channel-group 200 mode active + + +interface Ethernet2 + description MLAG Peer Link Member + channel-group 200 mode active + + +mlag configuration + domain-id MLAGSpine1Spine2 + local-interface Vlan4094 + peer-address 172.16.30.2 + peer-link Port-Channel200 + primary-priority 10 + +vlan 10 +vlan 20 +vlan 30 +vlan 40 + +ip routing + +ip virtual-router mac-address 001c.7300.0099 + +interface vlan 10 + ip address 192.168.10.1/24 + ip virtual-router address 192.168.10.254 + no autostate + +interface vlan 20 + ip address 192.168.20.1/24 + ip virtual-router address 192.168.20.254 + no autostate + +interface vlan 30 + ip address 192.168.30.1/24 + ip virtual-router address 192.168.30.254 + no autostate + +interface vlan 40 + ip address 192.168.40.1/24 + ip virtual-router address 192.168.40.254 + no autostate \ No newline at end of file diff --git a/topologies/training-level-2-cl/configlets/TroubleMLAG-Spine2 b/topologies/training-level-2-cl/configlets/TroubleMLAG-Spine2 new file mode 100644 index 000000000..52fb30005 --- /dev/null +++ b/topologies/training-level-2-cl/configlets/TroubleMLAG-Spine2 @@ -0,0 +1,115 @@ +! +spanning-tree mode mst + +spanning-tree mst configuration + instance 0 vlan 1-4094 + spanning-tree mst 0 root primary + +vlan 10 +vlan 20 +vlan 30 +vlan 40 + +interface Port-Channel10 + description Spine 1 and Spine 2 MLAG PortChannel 10 to Leaf 1 and Leaf 2 MLAG + switchport + switchport mode trunk + switchport trunk allowed vlan 10,20 + mlag 10 + no shut + +interface Ethernet3 + channel-group 10 mode active + + +interface Ethernet4 + channel-group 10 mode active + + +interface Ethernet7 + shutdown + +interface Ethernet8 + shutdown + + interface Port-Channel30 + description Spine 1 and Spine 2 MLAG PortChannel 30 to Leaf 3 and Leaf 4 MLAG + switchport + switchport mode trunk + switchport trunk allowed vlan 30,40 + mlag 30 + no shut + +interface Ethernet5 + channel-group 30 mode active + + +interface Ethernet6 + channel-group 30 mode active + +vlan 4094 + name MLAG + trunk group MLAGVLAN + + spanning-tree mode mstp + no spanning-tree vlan-id 4094 + + ip virtual-router mac-address 001c.7300.0099 + +interface Vlan4094 + ip address 172.16.30.2/30 + no autostate + +interface Port-Channel200 + description MLAG Peer Link + switchport + switchport mode trunk + switchport trunk group MLAGVLAN + no shut + +interface Ethernet1 + description MLAG Peer Link Member + channel-group 200 mode active + + +interface Ethernet2 + description MLAG Peer Link Member + channel-group 200 mode active + + +mlag configuration + domain-id MLAGSpine1Spine2 + local-interface Vlan4094 + peer-address 172.16.30.1 + peer-link Port-Channel200 + primary-priority 20 + + +vlan 10 +vlan 20 +vlan 30 +vlan 40 + +ip routing + +ip virtual-router mac-address 001c.7300.0099 + +interface vlan 10 + ip address 192.168.10.2/24 + ip virtual-router address 192.168.10.254 + no autostate + +interface vlan 20 + ip address 192.168.20.2/24 + ip virtual-router address 192.168.20.254 + no autostate + +interface vlan 30 + ip address 192.168.30.2/24 + ip virtual-router address 192.168.30.254 + no autostate + +interface vlan 40 + ip address 192.168.40.2/24 + ip virtual-router address 192.168.40.254 + no autostate \ No newline at end of file diff --git a/topologies/training-level-2-cl/configlets/TroubleSTP-Start-Leaf1 b/topologies/training-level-2-cl/configlets/TroubleSTP-Start-Leaf1 new file mode 100644 index 000000000..f8127525d --- /dev/null +++ b/topologies/training-level-2-cl/configlets/TroubleSTP-Start-Leaf1 @@ -0,0 +1,22 @@ +vlan 10 +name VLAN10 + +interface eth 3,4,5,6 + switchport + switchport mode trunk + switchport trunk allowed vlan 10 + no shutdown + +interface eth 1,2 + shutdown + interface eth 7-10 + shutdown + +interface Ethernet7 + switchport + switchport mode access + switchport access vlan 10 + spanning-tree portfast + spanning-tree bpduguard enable + spanning-tree guard root + no shut \ No newline at end of file diff --git a/topologies/training-level-2-cl/configlets/TroubleSTP-Start-Leaf2 b/topologies/training-level-2-cl/configlets/TroubleSTP-Start-Leaf2 new file mode 100644 index 000000000..c04fe5505 --- /dev/null +++ b/topologies/training-level-2-cl/configlets/TroubleSTP-Start-Leaf2 @@ -0,0 +1,14 @@ +vlan 10 + name VLAN10 + + +interface eth 3,4,5,6 + switchport + switchport mode trunk + switchport trunk allowed vlan 10 + no shutdown + +interface eth 1,2 + shutdown +interface eth 7-10 + shutdown \ No newline at end of file diff --git a/topologies/training-level-2-cl/configlets/TroubleSTP-Start-Leaf3 b/topologies/training-level-2-cl/configlets/TroubleSTP-Start-Leaf3 new file mode 100644 index 000000000..c04fe5505 --- /dev/null +++ b/topologies/training-level-2-cl/configlets/TroubleSTP-Start-Leaf3 @@ -0,0 +1,14 @@ +vlan 10 + name VLAN10 + + +interface eth 3,4,5,6 + switchport + switchport mode trunk + switchport trunk allowed vlan 10 + no shutdown + +interface eth 1,2 + shutdown +interface eth 7-10 + shutdown \ No newline at end of file diff --git a/topologies/training-level-2-cl/configlets/TroubleSTP-Start-Leaf4 b/topologies/training-level-2-cl/configlets/TroubleSTP-Start-Leaf4 new file mode 100644 index 000000000..c04fe5505 --- /dev/null +++ b/topologies/training-level-2-cl/configlets/TroubleSTP-Start-Leaf4 @@ -0,0 +1,14 @@ +vlan 10 + name VLAN10 + + +interface eth 3,4,5,6 + switchport + switchport mode trunk + switchport trunk allowed vlan 10 + no shutdown + +interface eth 1,2 + shutdown +interface eth 7-10 + shutdown \ No newline at end of file diff --git a/topologies/training-level-2-cl/configlets/TroubleSTP-Start-Spine1 b/topologies/training-level-2-cl/configlets/TroubleSTP-Start-Spine1 new file mode 100644 index 000000000..f9afc3c4e --- /dev/null +++ b/topologies/training-level-2-cl/configlets/TroubleSTP-Start-Spine1 @@ -0,0 +1,12 @@ +vlan 10 + name VLAN10 + + +interface eth 3,4,5,6 + switchport + switchport mode trunk + switchport trunk allowed vlan 10 + no shutdown + +interface eth 1,2,7,8 + shutdown \ No newline at end of file diff --git a/topologies/training-level-2-cl/configlets/TroubleSTP-Start-Spine2 b/topologies/training-level-2-cl/configlets/TroubleSTP-Start-Spine2 new file mode 100644 index 000000000..f9afc3c4e --- /dev/null +++ b/topologies/training-level-2-cl/configlets/TroubleSTP-Start-Spine2 @@ -0,0 +1,12 @@ +vlan 10 + name VLAN10 + + +interface eth 3,4,5,6 + switchport + switchport mode trunk + switchport trunk allowed vlan 10 + no shutdown + +interface eth 1,2,7,8 + shutdown \ No newline at end of file diff --git a/topologies/training-level-2-cl/configlets/TroubleSTP-Start-Spine3 b/topologies/training-level-2-cl/configlets/TroubleSTP-Start-Spine3 new file mode 100644 index 000000000..f9afc3c4e --- /dev/null +++ b/topologies/training-level-2-cl/configlets/TroubleSTP-Start-Spine3 @@ -0,0 +1,12 @@ +vlan 10 + name VLAN10 + + +interface eth 3,4,5,6 + switchport + switchport mode trunk + switchport trunk allowed vlan 10 + no shutdown + +interface eth 1,2,7,8 + shutdown \ No newline at end of file diff --git a/topologies/training-level-2-cl/configlets/TroubleSTP-Start-Spine4 b/topologies/training-level-2-cl/configlets/TroubleSTP-Start-Spine4 new file mode 100644 index 000000000..f9afc3c4e --- /dev/null +++ b/topologies/training-level-2-cl/configlets/TroubleSTP-Start-Spine4 @@ -0,0 +1,12 @@ +vlan 10 + name VLAN10 + + +interface eth 3,4,5,6 + switchport + switchport mode trunk + switchport trunk allowed vlan 10 + no shutdown + +interface eth 1,2,7,8 + shutdown \ No newline at end of file diff --git a/topologies/training-level-2-cl/configlets/borderleaf1-base b/topologies/training-level-2-cl/configlets/borderleaf1-base new file mode 100644 index 000000000..e274c6eb4 --- /dev/null +++ b/topologies/training-level-2-cl/configlets/borderleaf1-base @@ -0,0 +1,14 @@ +hostname borderleaf1 +! +interface Management 0 + vrf MGMT + ip address 192.168.0.25/24 +! +service routing protocols model multi-agent +! +dns domain arista.lab +! +ip routing vrf MGMT +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 +! diff --git a/topologies/training-level-2-cl/configlets/borderleaf2-base b/topologies/training-level-2-cl/configlets/borderleaf2-base new file mode 100644 index 000000000..a7778e0b4 --- /dev/null +++ b/topologies/training-level-2-cl/configlets/borderleaf2-base @@ -0,0 +1,14 @@ +hostname borderleaf2 +! +interface Management 0 + vrf MGMT + ip address 192.168.0.26/24 + +! +service routing protocols model multi-agent +! +dns domain arista.lab +! +ip routing vrf MGMT +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 diff --git a/topologies/training-level-2-cl/configlets/host1-base b/topologies/training-level-2-cl/configlets/host1-base new file mode 100644 index 000000000..915d58edb --- /dev/null +++ b/topologies/training-level-2-cl/configlets/host1-base @@ -0,0 +1,15 @@ +hostname host1 +! +spanning-tree mode none +! +interface Management 0 + vrf MGMT + ip address 192.168.0.51/24 + + +! +dns domain arista.lab +! +ip routing vrf MGMT +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 diff --git a/topologies/training-level-2-cl/configlets/host2-base b/topologies/training-level-2-cl/configlets/host2-base new file mode 100644 index 000000000..63f0c9c38 --- /dev/null +++ b/topologies/training-level-2-cl/configlets/host2-base @@ -0,0 +1,15 @@ +hostname host2 +! +spanning-tree mode none +! +interface Management 0 + vrf MGMT + ip address 192.168.0.52/24 + + +! +dns domain arista.lab +! +ip routing vrf MGMT +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 diff --git a/topologies/training-level-2-cl/configlets/host3-base b/topologies/training-level-2-cl/configlets/host3-base new file mode 100644 index 000000000..979a49b28 --- /dev/null +++ b/topologies/training-level-2-cl/configlets/host3-base @@ -0,0 +1,15 @@ +hostname host3 +! +spanning-tree mode none +! +interface Management 0 + vrf MGMT + ip address 192.168.0.53/24 + + +! +dns domain arista.lab +! +ip routing vrf MGMT +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 diff --git a/topologies/training-level-2-cl/configlets/host4-base b/topologies/training-level-2-cl/configlets/host4-base new file mode 100644 index 000000000..f85e77a77 --- /dev/null +++ b/topologies/training-level-2-cl/configlets/host4-base @@ -0,0 +1,15 @@ +hostname host4 +! +spanning-tree mode none +! +interface Management 0 + vrf MGMT + ip address 192.168.0.54/24 + +! +dns domain arista.lab +! +ip routing vrf MGMT +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 + diff --git a/topologies/training-level-2-cl/configlets/leaf1-base b/topologies/training-level-2-cl/configlets/leaf1-base new file mode 100644 index 000000000..7b316b33b --- /dev/null +++ b/topologies/training-level-2-cl/configlets/leaf1-base @@ -0,0 +1,13 @@ +hostname leaf1 +! +interface Management 0 + vrf MGMT + ip address 192.168.0.21/24 + +service routing protocols model multi-agent +! +dns domain arista.lab +! +ip routing vrf MGMT +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 diff --git a/topologies/training-level-2-cl/configlets/leaf2-base b/topologies/training-level-2-cl/configlets/leaf2-base new file mode 100644 index 000000000..22fffb444 --- /dev/null +++ b/topologies/training-level-2-cl/configlets/leaf2-base @@ -0,0 +1,15 @@ +hostname leaf2 +! +interface Management 0 + vrf MGMT + ip address 192.168.0.22/24 + + +! +service routing protocols model multi-agent +! +dns domain arista.lab +! +ip routing vrf MGMT +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 diff --git a/topologies/training-level-2-cl/configlets/leaf3-base b/topologies/training-level-2-cl/configlets/leaf3-base new file mode 100644 index 000000000..37e7bc8d3 --- /dev/null +++ b/topologies/training-level-2-cl/configlets/leaf3-base @@ -0,0 +1,13 @@ +hostname leaf3 +! +interface Management 0 + vrf MGMT + ip address 192.168.0.23/24 + +service routing protocols model multi-agent +! +dns domain arista.lab +! +ip routing vrf MGMT +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 diff --git a/topologies/training-level-2-cl/configlets/leaf4-base b/topologies/training-level-2-cl/configlets/leaf4-base new file mode 100644 index 000000000..f0cff7b25 --- /dev/null +++ b/topologies/training-level-2-cl/configlets/leaf4-base @@ -0,0 +1,13 @@ +hostname leaf4 +! +interface Management 0 + vrf MGMT + ip address 192.168.0.24/24 + +service routing protocols model multi-agent +! +dns domain arista.lab +! +ip routing vrf MGMT +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 diff --git a/topologies/training-level-2-cl/configlets/spine1-base b/topologies/training-level-2-cl/configlets/spine1-base new file mode 100644 index 000000000..5e9d072b1 --- /dev/null +++ b/topologies/training-level-2-cl/configlets/spine1-base @@ -0,0 +1,14 @@ +hostname spine1 +! +interface Management 0 + vrf MGMT + ip address 192.168.0.11/24 + +! +service routing protocols model multi-agent +! +dns domain arista.lab +! +ip routing vrf MGMT +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 diff --git a/topologies/training-level-2-cl/configlets/spine2-base b/topologies/training-level-2-cl/configlets/spine2-base new file mode 100644 index 000000000..cc9d0bef1 --- /dev/null +++ b/topologies/training-level-2-cl/configlets/spine2-base @@ -0,0 +1,13 @@ +hostname spine2 +! +interface Management 0 + vrf MGMT + ip address 192.168.0.12/24 + +service routing protocols model multi-agent +! +dns domain arista.lab +! +ip routing vrf MGMT +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 diff --git a/topologies/training-level-2-cl/configlets/spine3-base b/topologies/training-level-2-cl/configlets/spine3-base new file mode 100644 index 000000000..853f6564a --- /dev/null +++ b/topologies/training-level-2-cl/configlets/spine3-base @@ -0,0 +1,14 @@ +hostname spine3 +! +interface Management 0 + vrf MGMT + ip address 192.168.0.13/24 + +! +service routing protocols model multi-agent +! +dns domain arista.lab +! +ip routing vrf MGMT +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 diff --git a/topologies/training-level-2-cl/configlets/spine4-base b/topologies/training-level-2-cl/configlets/spine4-base new file mode 100644 index 000000000..240453581 --- /dev/null +++ b/topologies/training-level-2-cl/configlets/spine4-base @@ -0,0 +1,14 @@ +hostname spine4 +! +interface Management 0 + vrf MGMT + ip address 192.168.0.14/24 + +! +service routing protocols model multi-agent +! +dns domain arista.lab +! +ip routing vrf MGMT +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 diff --git a/topologies/training-level-2-cl/files/.ansible.cfg b/topologies/training-level-2-cl/files/.ansible.cfg new file mode 100644 index 000000000..14c806515 --- /dev/null +++ b/topologies/training-level-2-cl/files/.ansible.cfg @@ -0,0 +1,2 @@ +[defaults] +host_key_checking = False diff --git a/topologies/training-level-2-cl/files/.screenrc b/topologies/training-level-2-cl/files/.screenrc new file mode 100644 index 000000000..1d70f5e42 --- /dev/null +++ b/topologies/training-level-2-cl/files/.screenrc @@ -0,0 +1,23 @@ +# Turn off the startup message. +startup_message off +# Set the caption to the active windows. +caption always "%-Lw%{= BW}%50>%n%f* %t%{-}%+Lw%<" + +term screen-256color + +# New screens for various processes. +# Example: screen -t +# screen -t 7050SX-128 0 ssh aristaadmin@192.100.37.128 +screen 1 ssh 192.168.0.4 +screen -t CVP 2 ssh 192.168.0.5 +screen -t Spine1 3 ssh 192.168.0.11 +screen -t Spine2 4 ssh 192.168.0.12 +screen -t Spine3 5 ssh 192.168.0.13 +screen -t Leaf1 6 ssh 192.168.0.21 +screen -t Leaf2 7 ssh 192.168.0.22 +screen -t Leaf3 8 ssh 192.168.0.23 +screen -t Leaf4 9 ssh 192.168.0.24 +screen -t Borderleaf1 10 ssh 192.168.0.25 +screen -t Borderlead2 11 ssh 192.168.0.26 +screen -t Host1 15 ssh 192.168.0.51 +screen -t Host2 16 ssh 192.168.0.52 diff --git a/topologies/training-level-2-cl/files/MenuOptions.yaml b/topologies/training-level-2-cl/files/MenuOptions.yaml new file mode 100644 index 000000000..f68e2261d --- /dev/null +++ b/topologies/training-level-2-cl/files/MenuOptions.yaml @@ -0,0 +1,214 @@ +--- +options: + reset: + - command: "/usr/local/bin/ConfigureTopology.py && bash /home/arista/Broadcaster/pushHostDefaultConfig.sh" + description: "Reset All Devices to Base ATD (reset)" + vxlan: + - command: "/usr/local/bin/ConfigureTopology.py -t vxlan" + description: "VXLAN Lab (vxlan)" + l2evpn: + - command: "/usr/local/bin/ConfigureTopology.py -t l2evpn" + description: "L2-EVPN Lab (l2evpn)" + l3evpn: + - command: "/usr/local/bin/ConfigureTopology.py -t l3evpn" + description: "L3-EVPN Lab (l3evpn)" + aamh: + - command: "/usr/local/bin/ConfigureTopology.py -t aamh" + description: "Active-Active Multi Homing lab (aamh)" + pim: + - command: "/usr/local/bin/ConfigureTopology.py -t aamh" + description: "PIM Lab (pim)" +labconfiglets: + reset: + spine1: + - "spine1-base" + spine2: + - "spine2-base" + spine3: + - "spine3-base" + leaf1: + - "leaf1-base" + leaf2: + - "leaf2-base" + leaf3: + - "leaf3-base" + leaf4: + - "leaf4-base" + host1: + - "host1-base" + host2: + - "host2-base" + borderleaf1: + - "borderleaf1-base" + borderleaf2: + - "borderleaf2-base" + vxlan: + spine1: + - "spine1-base" + - "Spine-1-VXALN-Begin" + spine2: + - "spine2-base" + - "Spine-2-VXALN-Begin" + spine3: + - "spine3-base" + - "Spine-3-VXALN-Begin" + leaf1: + - "leaf1-base" + - "Leaf-1-VXALN-Begin" + leaf2: + - "leaf2-base" + - "Leaf-2-VXALN-Begin" + leaf3: + - "leaf3-base" + - "leaf-3-VXALN-Begin" + leaf4: + - "leaf4-base" + - "leaf-4-VXALN-Begin" + host1: + - "host1-base" + - "Host-1-VXALN-Begin" + host2: + - "host2-base" + - "Host-2-VXALN-Begin" + borderleaf1: + - "borderleaf1-base" + - "Borderleaf-1-VXALN-Begin" + borderleaf2: + - "borderleaf2-base" + - "Borderleaf-2-VXALN-Begin" + l2evpn: + spine1: + - "spine1-base" + - "Spine-1-L2EVPN-Begin" + spine2: + - "spine2-base" + - "Spine-2-L2EVPN-Begin" + spine3: + - "spine3-base" + - "Spine-3-L2EVPN-Begin" + leaf1: + - "leaf1-base" + - "Leaf-1-L2EVPN-Begin" + leaf2: + - "leaf2-base" + - "Leaf-2-L2EVPN-Begin" + leaf3: + - "leaf3-base" + - "Leaf-3-L2EVPN-Begin" + leaf4: + - "leaf4-base" + - "Leaf-4-L2EVPN-Begin" + host1: + - "host1-base" + - "Host-1-L2EVPN-Begin" + host2: + - "host2-base" + - "Host-2-L2EVPN-Begin" + borderleaf1: + - "borderleaf1-base" + - "Borderleaf-1-L2EVPN-Begin" + borderleaf2: + - "borderleaf2-base" + - "Borderleaf-2-L2EVPN-Begin" + l3evpn: + spine1: + - "spine1-base" + - "Spine-1-L3EVPN-Begin" + spine2: + - "spine2-base" + - "Spine-2-L3EVPN-Begin" + spine3: + - "spine3-base" + - "Spine-3-L3EVPN-Begin" + leaf1: + - "leaf1-base" + - "Leaf-1-L3EVPN-Begin" + leaf2: + - "leaf2-base" + - "Leaf-2-L3EVPN-Begin" + leaf3: + - "leaf3-base" + - "Leaf-3-L3EVPN-Begin" + leaf4: + - "leaf4-base" + - "Leaf-4-L3EVPN-Begin" + host1: + - "host1-base" + - "Host-1-L3EVPN-Begin" + host2: + - "host2-base" + - "Host-2-L3EVPN-Begin" + borderleaf1: + - "borderleaf1-base" + - "Borderleaf-1-L3EVPN-Begin" + borderleaf2: + - "borderleaf2-base" + - "Borderleaf-2-L3EVPN-Begin" + aamh: + spine1: + - "spine1-base" + - "Spine-1-AAMH-Begin" + spine2: + - "spine2-base" + - "Spine-2-AAMH-Begin" + spine3: + - "spine3-base" + - "Spine-3-AAMH-Begin" + leaf1: + - "leaf1-base" + - "Leaf-1-AAMH-Begin" + leaf2: + - "leaf2-base" + - "Leaf-2-AAMH-Begin" + leaf3: + - "leaf3-base" + - "Leaf-3-AAMH-Begin" + leaf4: + - "leaf4-base" + - "Leaf-4-AAMH-Begin" + host1: + - "host1-base" + - "Host-1-AAMH-Begin" + host2: + - "host2-base" + - "Host-2-AAMH-Begin" + borderleaf1: + - "borderleaf1-base" + - "Borderleaf-1-AAMH-Begin" + borderleaf2: + - "borderleaf2-base" + - "Borderleaf-2-AAMH-Begin" + pim: + spine1: + - "spine1-base" + - "Spine-1-PIM-Begin" + spine2: + - "spine2-base" + - "Spine-2-PIM-Begin" + spine3: + - "spine3-base" + - "Spine-3-PIM-Begin" + leaf1: + - "leaf1-base" + - "Leaf-1-PIM-Begin" + leaf2: + - "leaf2-base" + - "Leaf-2-PIM-Begin" + leaf3: + - "leaf3-base" + - "Leaf-3-PIM-Begin" + leaf4: + - "leaf4-base" + - "Leaf-4-PIM-Begin" + host1: + - "host1-base" + - "Host-1-PIM-Begin" + host2: + - "host2-base" + - "Host-2-PIM-Begin" + borderleaf1: + - "borderleaf1-base" + - "Borderleaf-1-PIM-Begin" + borderleaf2: + - "borderleaf2-base" + - "Borderleaf-2-PIM-Begin" \ No newline at end of file diff --git a/topologies/training-level-2-cl/files/apps/coder/coder.yaml b/topologies/training-level-2-cl/files/apps/coder/coder.yaml new file mode 100644 index 000000000..80cc852d1 --- /dev/null +++ b/topologies/training-level-2-cl/files/apps/coder/coder.yaml @@ -0,0 +1,4 @@ +bind-addr: 127.0.0.1:8080 +auth: password +password: {ARISTA_REPLACE} +cert: false \ No newline at end of file diff --git a/topologies/training-level-2-cl/files/apps/coder/labfiles/.placeholder b/topologies/training-level-2-cl/files/apps/coder/labfiles/.placeholder new file mode 100644 index 000000000..e69de29bb diff --git a/topologies/training-level-2-cl/files/apps/gui/host5/arista/host-startup.sh b/topologies/training-level-2-cl/files/apps/gui/host5/arista/host-startup.sh new file mode 100644 index 000000000..16eafb783 --- /dev/null +++ b/topologies/training-level-2-cl/files/apps/gui/host5/arista/host-startup.sh @@ -0,0 +1,17 @@ +sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 4EB27DB2A3B88B8B +sudo apt-get update +sudo apt install openssh-server -y +sudo service ssh start +sudo apt-get install ufw -y +sudo ufw enable +sudo ufw allow 22 +sudo ufw disable +useradd -rm -d /home/arista -s /bin/bash -g root -G sudo -u 1000 arista +echo 'arista:arista123' | chpasswd +service ssh start +sudo apt install ifenslave -y +sudo apt install iputils-ping -y +sudo add-apt-repository ppa:wireshark-dev/stable -y +sudo apt-get install filezilla -y +sudo apt-get install vsftpd -y +sudo service vsftpd restart \ No newline at end of file diff --git a/topologies/training-level-2-cl/files/apps/gui/host6/arista/host-startup.sh b/topologies/training-level-2-cl/files/apps/gui/host6/arista/host-startup.sh new file mode 100644 index 000000000..16eafb783 --- /dev/null +++ b/topologies/training-level-2-cl/files/apps/gui/host6/arista/host-startup.sh @@ -0,0 +1,17 @@ +sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 4EB27DB2A3B88B8B +sudo apt-get update +sudo apt install openssh-server -y +sudo service ssh start +sudo apt-get install ufw -y +sudo ufw enable +sudo ufw allow 22 +sudo ufw disable +useradd -rm -d /home/arista -s /bin/bash -g root -G sudo -u 1000 arista +echo 'arista:arista123' | chpasswd +service ssh start +sudo apt install ifenslave -y +sudo apt install iputils-ping -y +sudo add-apt-repository ppa:wireshark-dev/stable -y +sudo apt-get install filezilla -y +sudo apt-get install vsftpd -y +sudo service vsftpd restart \ No newline at end of file diff --git a/topologies/training-level-2-cl/files/apps/gui/host7/arista/host-startup.sh b/topologies/training-level-2-cl/files/apps/gui/host7/arista/host-startup.sh new file mode 100644 index 000000000..16eafb783 --- /dev/null +++ b/topologies/training-level-2-cl/files/apps/gui/host7/arista/host-startup.sh @@ -0,0 +1,17 @@ +sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 4EB27DB2A3B88B8B +sudo apt-get update +sudo apt install openssh-server -y +sudo service ssh start +sudo apt-get install ufw -y +sudo ufw enable +sudo ufw allow 22 +sudo ufw disable +useradd -rm -d /home/arista -s /bin/bash -g root -G sudo -u 1000 arista +echo 'arista:arista123' | chpasswd +service ssh start +sudo apt install ifenslave -y +sudo apt install iputils-ping -y +sudo add-apt-repository ppa:wireshark-dev/stable -y +sudo apt-get install filezilla -y +sudo apt-get install vsftpd -y +sudo service vsftpd restart \ No newline at end of file diff --git a/topologies/training-level-2-cl/files/apps/gui/host8/arista/host-startup.sh b/topologies/training-level-2-cl/files/apps/gui/host8/arista/host-startup.sh new file mode 100644 index 000000000..16eafb783 --- /dev/null +++ b/topologies/training-level-2-cl/files/apps/gui/host8/arista/host-startup.sh @@ -0,0 +1,17 @@ +sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 4EB27DB2A3B88B8B +sudo apt-get update +sudo apt install openssh-server -y +sudo service ssh start +sudo apt-get install ufw -y +sudo ufw enable +sudo ufw allow 22 +sudo ufw disable +useradd -rm -d /home/arista -s /bin/bash -g root -G sudo -u 1000 arista +echo 'arista:arista123' | chpasswd +service ssh start +sudo apt install ifenslave -y +sudo apt install iputils-ping -y +sudo add-apt-repository ppa:wireshark-dev/stable -y +sudo apt-get install filezilla -y +sudo apt-get install vsftpd -y +sudo service vsftpd restart \ No newline at end of file diff --git a/topologies/training-level-2-cl/files/apps/ssh/web.json b/topologies/training-level-2-cl/files/apps/ssh/web.json new file mode 100644 index 000000000..13fac47dd --- /dev/null +++ b/topologies/training-level-2-cl/files/apps/ssh/web.json @@ -0,0 +1,76 @@ +{ + "listen": { + "ip": "0.0.0.0", + "port": 2222 + }, + "user": { + "name": null, + "password": null, + "privatekey": null + }, + "ssh": { + "host": null, + "port": 22, + "localAddress": null, + "localPort": null, + "term": "xterm-color", + "readyTimeout": 20000, + "keepaliveInterval": 120000, + "keepaliveCountMax": 10, + "allowedSubnets": [ "192.168.0.0/16", "10.0.0.0/8", "172.16.0.0/12" ] + }, + "terminal": { + "cursorBlink": true, + "scrollback": 10000, + "tabStopWidth": 8, + "bellStyle": "sound" + }, + "header": { + "text": null, + "background": "green" + }, + "session": { + "name": "WebSSH2", + "secret": "mysecret" + }, + "options": { + "challengeButton": true, + "allowreauth": true + }, + "algorithms": { + "kex": [ + "ecdh-sha2-nistp256", + "ecdh-sha2-nistp384", + "ecdh-sha2-nistp521", + "diffie-hellman-group-exchange-sha256", + "diffie-hellman-group14-sha1" + ], + "cipher": [ + "aes128-ctr", + "aes192-ctr", + "aes256-ctr", + "aes128-gcm", + "aes128-gcm@openssh.com", + "aes256-gcm", + "aes256-gcm@openssh.com", + "aes256-cbc" + ], + "hmac": [ + "hmac-sha2-256", + "hmac-sha2-512", + "hmac-sha1" + ], + "compress": [ + "none", + "zlib@openssh.com", + "zlib" + ] + }, + "serverlog": { + "client": false, + "server": false + }, + "accesslog": false, + "verify": false, + "safeShutdownDuration": 300 + } \ No newline at end of file diff --git a/topologies/training-level-2-cl/files/apps/uilanding/modules.yaml b/topologies/training-level-2-cl/files/apps/uilanding/modules.yaml new file mode 100644 index 000000000..c983faac0 --- /dev/null +++ b/topologies/training-level-2-cl/files/apps/uilanding/modules.yaml @@ -0,0 +1,62 @@ +topology: + image: "atd-topo.png" + nodes: + Spine1: + coords: "22,218,167,296" + ip: "192.168.0.11" + Spine2: + coords: "356,215,517,300" + ip: "192.168.0.12" + Spine3: + coords: "555,214,724,294" + ip: "192.168.0.13" + Spine4: + coords: "925,218,1077,293" + ip: "192.168.0.14" + Leaf1: + coords: "16,424,165,501" + ip: "192.168.0.21" + Leaf2: + coords: "353,425,520,493" + ip: "192.168.0.22" + Leaf3: + coords: "569,430,714,499" + ip: "192.168.0.23" + Leaf4: + coords: "921,423,1074,502" + ip: "192.168.0.24" + BorderLeaf1: + coords: "370,57,511,138" + ip: "192.168.0.25" + BorderLeaf2: + coords: "561,65,726,145" + ip: "192.168.0.26" + Host1: + coords: "15,534,149,611" + ip: "192.168.0.51" + Host2: + coords: "365,539,504,619" + ip: "192.168.0.52" + Host3: + coords: "566,542,711,620" + ip: "192.168.0.53" + Host4: + coords: "929,542,1075,615" + ip: "192.168.0.54" + servers: + Host5: + coords: "182,545,307,636" + ip: "192.168.0.101" + port : 6001 + Host6: + coords: "183,650,312,744" + ip: "192.168.0.102" + port : 6002 + Host7: + coords: "747,545,875,636" + ip: "192.168.0.103" + port : 6003 + Host8: + coords: "752,645,877,731" + ip: "192.168.0.104" + port : 6004 diff --git a/topologies/training-level-2-cl/files/apps/webui/.vncpass_clear b/topologies/training-level-2-cl/files/apps/webui/.vncpass_clear new file mode 100644 index 000000000..cd09dd7a5 --- /dev/null +++ b/topologies/training-level-2-cl/files/apps/webui/.vncpass_clear @@ -0,0 +1 @@ +@rista1 \ No newline at end of file diff --git a/topologies/training-level-2-cl/files/cvp/cvp_info.yaml b/topologies/training-level-2-cl/files/cvp/cvp_info.yaml new file mode 100644 index 000000000..7e796e77f --- /dev/null +++ b/topologies/training-level-2-cl/files/cvp/cvp_info.yaml @@ -0,0 +1,64 @@ +cvp_info: + containers: + Tenant: + nodes: + Leaf: + parent: Tenant + nodes: + - leaf1 + - leaf2 + - leaf3 + - leaf4 + Borderleaf: + parent: Tenant + nodes: + - borderleaf1 + - borderleaf2 + Spine: + parent: Tenant + nodes: + - spine1 + - spine2 + - spine3 + - spine4 + Hosts: + parent: Tenant + nodes: + - host1 + - host2 + - host3 + - host4 + snapshots: + configlets: + containers: + Tenant: + - ATD-INFRA + netelements: + spine1: + - spine1-base + spine2: + - spine2-base + spine3: + - spine3-base + spine4: + - spine4-base + leaf1: + - leaf1-base + leaf2: + - leaf2-base + borderleaf1: + - borderleaf1-base + borderleaf2: + - borderleaf2-base + leaf3: + - leaf3-base + leaf4: + - leaf4-base + host3: + - host3-base + host4: + - host4-base + host1: + - host1-base + host2: + - host2-base \ No newline at end of file diff --git a/topologies/training-level-2-cl/files/hosts b/topologies/training-level-2-cl/files/hosts new file mode 100644 index 000000000..b01ba8483 --- /dev/null +++ b/topologies/training-level-2-cl/files/hosts @@ -0,0 +1,24 @@ +127.0.0.1 localhost +192.168.0.11 spine1 +192.168.0.12 spine2 +192.168.0.13 spine3 +192.168.0.14 spine4 +192.168.0.21 leaf1 +192.168.0.22 leaf2 +192.168.0.23 leaf3 +192.168.0.24 leaf4 +192.168.0.25 borderleaf1 +192.168.0.26 borderleaf2 +192.168.0.41 server1 +192.168.0.42 server2 +192.168.0.43 server3 +192.168.0.44 server4 +192.168.0.51 host1 +192.168.0.52 host2 +192.168.0.53 host3 +192.168.0.54 host4 +192.168.0.101 host5 +192.168.0.102 host6 +192.168.0.103 host7 +192.168.0.104 host8 +192.168.0.5 cvp diff --git a/topologies/training-level-2-cl/files/menus/default.yaml b/topologies/training-level-2-cl/files/menus/default.yaml new file mode 100644 index 000000000..ea5255267 --- /dev/null +++ b/topologies/training-level-2-cl/files/menus/default.yaml @@ -0,0 +1,2 @@ +--- +default_menu: training-l2.yaml \ No newline at end of file diff --git a/topologies/training-level-2-cl/files/menus/training-l2.yaml b/topologies/training-level-2-cl/files/menus/training-l2.yaml new file mode 100644 index 000000000..530b8d433 --- /dev/null +++ b/topologies/training-level-2-cl/files/menus/training-l2.yaml @@ -0,0 +1,443 @@ +--- + lab_list: + reset: + description: "Reset All Devices to Base Lab (reset)" + STP-Start: + description: "Start STP LAB" + STP-Troubleshooting: + description: "Start TROUBLESHOOTING STP LAB" + MLAG-Start: + description: "Start MLAG BOWTIE LAB" + MLAG-Troubleshooting: + description: "Start TROUBLESHOOTING MLAG LAB" + Routing-Start: + description: "Start ROUTING BGP LAB" + routing-troubleshooting: + description: "Start TROUBLESHOOTING ROUTING BGP LAB" + OSPF-Start: + description: "Start ROUTING OSPF LAB" + OSPF-MA-Start: + description: "Start ROUTING MULTIAREA OSPF LAB" + ACL-Start: + description: "Start ACL LAB" + ACL-Troubleshoot: + description: "Start TROUBLESHOOTING ACL LAB" + NSSA-Start: + description: "Start BONUS LAB OSPF NSSA" + labconfiglets: + reset: + spine1: + - "spine1-base" + spine2: + - "spine2-base" + spine3: + - "spine3-base" + spine4: + - "spine4-base" + leaf1: + - "leaf1-base" + leaf2: + - "leaf2-base" + leaf3: + - "leaf3-base" + leaf4: + - "leaf4-base" + host1: + - "host1-base" + host2: + - "host2-base" + host3: + - "host3-base" + host4: + - "host4-base" + borderleaf1: + - "borderleaf1-base" + borderleaf2: + - "borderleaf2-base" + STP-Start: + spine1: + - "spine1-base" + spine2: + - "spine2-base" + spine3: + - "spine3-base" + spine4: + - "spine4-base" + leaf1: + - "leaf1-base" + leaf2: + - "leaf2-base" + leaf3: + - "leaf3-base" + leaf4: + - "leaf4-base" + host1: + - "host1-base" + host2: + - "host2-base" + host3: + - "host3-base" + host4: + - "host4-base" + borderleaf1: + - "borderleaf1-base" + borderleaf2: + - "borderleaf2-base" + STP-Troubleshooting: + spine1: + - "spine1-base" + - "TroubleSTP-Start-Spine1" + spine2: + - "spine2-base" + - "TroubleSTP-Start-Spine2" + spine3: + - "spine3-base" + - "TroubleSTP-Start-Spine3" + spine4: + - "spine4-base" + - "TroubleSTP-Start-Spine4" + leaf1: + - "leaf1-base" + - "TroubleSTP-Start-Leaf1" + leaf2: + - "leaf2-base" + - "TroubleSTP-Start-Leaf2" + leaf3: + - "leaf3-base" + - "TroubleSTP-Start-Leaf3" + leaf4: + - "leaf4-base" + - "TroubleSTP-Start-Leaf4" + host1: + - "host1-base" + host2: + - "host2-base" + host3: + - "host3-base" + host4: + - "host4-base" + borderleaf1: + - "borderleaf1-base" + borderleaf2: + - "borderleaf2-base" + MLAG-Start: + spine1: + - "spine1-base" + spine2: + - "spine2-base" + spine3: + - "spine3-base" + spine4: + - "spine4-base" + leaf1: + - "leaf1-base" + leaf2: + - "leaf2-base" + leaf3: + - "leaf3-base" + leaf4: + - "leaf4-base" + host1: + - "host1-base" + host2: + - "host2-base" + host3: + - "host3-base" + host4: + - "host4-base" + borderleaf1: + - "borderleaf1-base" + borderleaf2: + - "borderleaf2-base" + MLAG-Troubleshooting: + spine1: + - "spine1-base" + - "TroubleMLAG-Spine1" + spine2: + - "spine2-base" + - "TroubleMLAG-Spine2" + spine3: + - "spine3-base" + spine4: + - "spine4-base" + leaf1: + - "leaf1-base" + - "TroubleMLAG-Leaf1" + leaf2: + - "leaf2-base" + - "TroubleMLAG-Leaf2" + leaf3: + - "leaf3-base" + - "TroubleMLAG-Leaf3" + leaf4: + - "leaf4-base" + - "TroubleMLAG-Leaf4" + host1: + - "host1-base" + - "TroubleMLAG-Host1" + host2: + - "host2-base" + - "TroubleMLAG-Host2" + host3: + - "host3-base" + - "TroubleMLAG-Host3" + host4: + - "host4-base" + - "TroubleMLAG-Host4" + borderleaf1: + - "borderleaf1-base" + borderleaf2: + - "borderleaf2-base" + Routing-Start: + spine1: + - "spine1-base" + spine2: + - "spine2-base" + spine3: + - "spine3-base" + spine4: + - "spine4-base" + leaf1: + - "leaf1-base" + leaf2: + - "leaf2-base" + leaf3: + - "leaf3-base" + leaf4: + - "leaf4-base" + host1: + - "host1-base" + host2: + - "host2-base" + host3: + - "host3-base" + host4: + - "host4-base" + borderleaf1: + - "borderleaf1-base" + borderleaf2: + - "borderleaf2-base" + OSPF-Start: + spine1: + - "spine1-base" + spine2: + - "spine2-base" + spine3: + - "spine3-base" + spine4: + - "spine4-base" + leaf1: + - "leaf1-base" + leaf2: + - "leaf2-base" + leaf3: + - "leaf3-base" + leaf4: + - "leaf4-base" + host1: + - "host1-base" + host2: + - "host2-base" + host3: + - "host3-base" + host4: + - "host4-base" + borderleaf1: + - "borderleaf1-base" + borderleaf2: + - "borderleaf2-base" + NSSA-Start: + spine1: + - "spine1-base" + - "NSSA-Start-Spine1" + spine2: + - "spine2-base" + - "NSSA-Start-Spine2" + spine3: + - "spine3-base" + - "NSSA-Start-Spine3" + spine4: + - "spine4-base" + - "NSSA-Start-Spine4" + leaf1: + - "leaf1-base" + - "NSSA-Start-Leaf1" + leaf2: + - "leaf2-base" + - "NSSA-Start-Leaf2" + leaf3: + - "leaf3-base" + - "NSSA-Start-Leaf3" + leaf4: + - "leaf4-base" + - "NSSA-Start-Leaf4" + host1: + - "host1-base" + host2: + - "host2-base" + host3: + - "host3-base" + host4: + - "host4-base" + borderleaf1: + - "borderleaf1-base" + - "NSSA-Start-BorderLeaf1" + borderleaf2: + - "borderleaf2-base" + - "NSSA-Start-BorderLeaf2" + ACL-Start: + spine1: + - "spine1-base" + - "ACL-Start-Spine1" + spine2: + - "spine2-base" + - "ACL-Start-Spine2" + spine3: + - "spine3-base" + - "ACL-Start-Spine3" + spine4: + - "spine4-base" + - "ACL-Start-Spine4" + leaf1: + - "leaf1-base" + - "ACL-Start-Leaf1" + leaf2: + - "leaf2-base" + - "ACL-Start-Leaf2" + leaf3: + - "leaf3-base" + - "ACL-Start-Leaf3" + leaf4: + - "leaf4-base" + - "ACL-Start-Leaf4" + host1: + - "host1-base" + host2: + - "host2-base" + host3: + - "host3-base" + host4: + - "host4-base" + borderleaf1: + - "borderleaf1-base" + - "ACL-Start-BorderLeaf1" + borderleaf2: + - "borderleaf2-base" + - "ACL-Start-BorderLeaf2" + ACL-Troubleshoot: + spine1: + - "spine1-base" + - "TroubleACL-Start-Spine1" + spine2: + - "spine2-base" + - "TroubleACL-Start-Spine2" + spine3: + - "spine3-base" + - "TroubleACL-Start-Spine3" + spine4: + - "spine4-base" + - "TroubleACL-Start-Spine4" + leaf1: + - "leaf1-base" + - "TroubleACL-Start-Leaf1" + leaf2: + - "leaf2-base" + - "TroubleACL-Start-Leaf2" + leaf3: + - "leaf3-base" + - "TroubleACL-Start-Leaf3" + leaf4: + - "leaf4-base" + - "TroubleACL-Start-Leaf4" + host1: + - "host1-base" + host2: + - "host2-base" + host3: + - "host3-base" + host4: + - "host4-base" + borderleaf1: + - "borderleaf1-base" + - "TroubleACL-Start-BorderLeaf1" + borderleaf2: + - "borderleaf2-base" + - "TroubleACL-Start-BorderLeaf2" + routing-troubleshooting: + spine1: + - "spine1-base" + - "TroubleBGP-Spine1" + spine2: + - "spine2-base" + - "TroubleBGP-Spine2" + spine3: + - "spine3-base" + - "TroubleBGP-Spine3" + spine4: + - "spine4-base" + - "TroubleBGP-Spine4" + leaf1: + - "leaf1-base" + - "TroubleBGP-Start-Leaf1" + leaf2: + - "leaf2-base" + - "TroubleBGP-Start-Leaf2" + leaf3: + - "leaf3-base" + - "TroubleBGP-Start-Leaf3" + leaf4: + - "leaf4-base" + - "TroubleBGP-Leaf4" + host1: + - "host1-base" + host2: + - "host2-base" + host3: + - "host3-base" + host4: + - "host4-base" + borderleaf1: + - "borderleaf1-base" + - "TroubleBGP-BorderLeaf1" + borderleaf2: + - "borderleaf2-base" + - "TroubleBGP-BorderLeaf2" + OSPF-MA-Start: + spine1: + - "spine1-base" + - "Spine1-OSPFMultiArea-Start" + spine2: + - "spine2-base" + - "Spine2-OSPFMultiArea-Start" + spine3: + - "spine3-base" + - "Spine3-OSPFMultiArea-Start" + spine4: + - "spine4-base" + - "Spine4-OSPFMultiArea-Start" + leaf1: + - "leaf1-base" + - "Leaf1-OSPFMultiaArea-Start" + leaf2: + - "leaf2-base" + - "Leaf2-OSPFMultiaArea-Start" + leaf3: + - "leaf3-base" + - "Leaf3-OSPFMultiaArea-Start" + leaf4: + - "leaf4-base" + - "Leaf4-OSPFMultiaArea-Start" + host1: + - "host1-base" + host2: + - "host2-base" + host3: + - "host3-base" + host4: + - "host4-base" + borderleaf1: + - "borderleaf1-base" + - "BorderLeaf1-OSPFMultiArea-Start" + borderleaf2: + - "borderleaf2-base" + - "BorderLeaf2-OSPFMultiArea-Start" \ No newline at end of file diff --git a/topologies/training-level-2-cl/files/scripts/Authenticate-CVP b/topologies/training-level-2-cl/files/scripts/Authenticate-CVP new file mode 100644 index 000000000..144bb13eb --- /dev/null +++ b/topologies/training-level-2-cl/files/scripts/Authenticate-CVP @@ -0,0 +1,32 @@ +import requests +import json + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + +# Print user details + +print "User Name:%s\n "%output['username'] +print "First Name: %s\n "%output['user']['firstName'] +print "Last Name: %s\n "%output['user']['lastName'] +print "User Permissions: %s\n "%output['permissionList'] +print "Cookie Jar: %s\n "%cookies diff --git a/topologies/training-level-2-cl/files/scripts/Authenticate-CVP2 b/topologies/training-level-2-cl/files/scripts/Authenticate-CVP2 new file mode 100644 index 000000000..3f6bf9190 --- /dev/null +++ b/topologies/training-level-2-cl/files/scripts/Authenticate-CVP2 @@ -0,0 +1,48 @@ +import requests +import json + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + +# Print user details + +print "User Name:%s\n "%output['username'] +print "First Name: %s\n "%output['user']['firstName'] +print "Last Name: %s\n "%output['user']['lastName'] +print "User Permissions: %s\n "%output['permissionList'] +print "Cookie Jar: %s\n "%cookies + +#Create an HTTP GET request to the CVP server + +getConfigletURL = "/cvpservice/configlet/getConfiglets.do?" +getConfigletParams = {'startIndex':'0','endIndex':'0','type':'Configlet'} +response = requests.get(url+getConfigletURL,cookies=cookies, params=getConfigletParams,verify=False) +assert response.ok +outputConfiglets = response.json() + +# Print Configlet details + +for configlet in outputConfiglets['data']: + print "ConfigletName: %s"%configlet['name'] + print "ConfigletKey: %s"%configlet['key'] + print "\n" + diff --git a/topologies/training-level-2-cl/files/scripts/Authenticate-CVP3 b/topologies/training-level-2-cl/files/scripts/Authenticate-CVP3 new file mode 100644 index 000000000..2445806ea --- /dev/null +++ b/topologies/training-level-2-cl/files/scripts/Authenticate-CVP3 @@ -0,0 +1,95 @@ +import requests +import json + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + +# Print user details + +print "User Name:%s\n "%output['username'] +print "First Name: %s\n "%output['user']['firstName'] +print "Last Name: %s\n "%output['user']['lastName'] +print "User Permissions: %s\n "%output['permissionList'] +print "Cookie Jar: %s\n "%cookies + +#Create an HTTP GET request to the CVP server + +getConfigletURL = "/cvpservice/configlet/getConfiglets.do?" +getConfigletParams = {'startIndex':'0','endIndex':'0','type':'Configlet'} +response = requests.get(url+getConfigletURL,cookies=cookies, params=getConfigletParams,verify=False) +assert response.ok +outputConfiglets = response.json() + +# Print Configlet details + +for configlet in outputConfiglets['data']: + print "ConfigletName: %s"%configlet['name'] + print "ConfigletKey: %s"%configlet['key'] + print "\n" +# Create an HTTP GET request to the CVP server + +getConfigletHistoryURL = "/cvpservice/configlet/getConfigletHistory.do?" +getConfigletParams = {'configletId':'configlet_32_438214998013','startIndex':'0','endIndex':'0'} +response = requests.get(url+getConfigletHistoryURL,cookies=cookies, params=getConfigletParams,verify=False) +assert response.ok +outputConfigletHistory = response.json() + +# Print Configlet details + +for entry in outputConfigletHistory['configletHistory']: + print "ConfigletKey: %s"%entry['key'] + print "ConfigletOldConfig: %s"%entry['oldConfig'] + print "ConfigletNewConfig: %s"%entry['newConfig'] + print "\n" + + +# Create an HTTP GET request to the CVP server + +getConfigletDetailURL = "/cvpservice/configlet/getConfigletByName.do?" +getConfigletParams = {'name':'VLANs'} +response = requests.get(url+getConfigletDetailURL,cookies=cookies, params=getConfigletParams,verify=False) +assert response.ok +outputConfigletDetail = response.json() + +# Print Configlet details + +print "ConfigletKey: %s"%outputConfigletDetail['key'] +print "ConfigletName: %s"%outputConfigletDetail['name'] +print "ConfigletConfig: %s"%outputConfigletDetail['config'] +print "ConfigletNote: %s"%outputConfigletDetail['note'] +print "\n" + + +# Create an HTTP POST request to the CVP server + +headers = { 'Content-Type': 'application/json' } +postConfigletChangeURL = "/cvpservice/configlet/updateConfiglet.do" +changeData = json.dumps({"config": "! some configuration here", "key": "configlet_32_438214998013", "name": "VLANs"}) +response = requests.post(url+postConfigletChangeURL, cookies=cookies, data=changeData,headers=headers,verify=False) +assert response.ok +outputConfigletChange = response.json() + +# Print Configlet details + +print "ConfigletChange: %s"%outputConfigletChange['data'] +print "\n" + diff --git a/topologies/training-level-2-cl/files/scripts/Configlet1 b/topologies/training-level-2-cl/files/scripts/Configlet1 new file mode 100644 index 000000000..3f6bf9190 --- /dev/null +++ b/topologies/training-level-2-cl/files/scripts/Configlet1 @@ -0,0 +1,48 @@ +import requests +import json + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + +# Print user details + +print "User Name:%s\n "%output['username'] +print "First Name: %s\n "%output['user']['firstName'] +print "Last Name: %s\n "%output['user']['lastName'] +print "User Permissions: %s\n "%output['permissionList'] +print "Cookie Jar: %s\n "%cookies + +#Create an HTTP GET request to the CVP server + +getConfigletURL = "/cvpservice/configlet/getConfiglets.do?" +getConfigletParams = {'startIndex':'0','endIndex':'0','type':'Configlet'} +response = requests.get(url+getConfigletURL,cookies=cookies, params=getConfigletParams,verify=False) +assert response.ok +outputConfiglets = response.json() + +# Print Configlet details + +for configlet in outputConfiglets['data']: + print "ConfigletName: %s"%configlet['name'] + print "ConfigletKey: %s"%configlet['key'] + print "\n" + diff --git a/topologies/training-level-2-cl/files/scripts/ConfigletChange b/topologies/training-level-2-cl/files/scripts/ConfigletChange new file mode 100644 index 000000000..691ff5864 --- /dev/null +++ b/topologies/training-level-2-cl/files/scripts/ConfigletChange @@ -0,0 +1,40 @@ +import requests +import json + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + + +# Create an HTTP POST request to the CVP server + +headers = { 'Content-Type': 'application/json' } +postConfigletChangeURL = "/cvpservice/configlet/addNoteToConfiglet.do" +changeData = json.dumps({"note": "Configlet Changed by API", "key": "configlet_516_7018635812307"}) +response = requests.post(url+postConfigletChangeURL, cookies=cookies, data=changeData,headers=headers,verify=False) +assert response.ok +outputConfigletChange = response.json() + +# Print Configlet details + +print "ConfigletChange: %s"%outputConfigletChange['data'] +print "\n" + diff --git a/topologies/training-level-2-cl/files/scripts/ConfigletDetail b/topologies/training-level-2-cl/files/scripts/ConfigletDetail new file mode 100644 index 000000000..eb2a85937 --- /dev/null +++ b/topologies/training-level-2-cl/files/scripts/ConfigletDetail @@ -0,0 +1,43 @@ +import requests +import json + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + +# Create an HTTP GET request to the CVP server + +getConfigletDetailURL = "/cvpservice/configlet/getConfigletByName.do?" +getConfigletParams = {'name':'VLANs'} +response = requests.get(url+getConfigletDetailURL,cookies=cookies, params=getConfigletParams,verify=False) +assert response.ok +outputConfigletDetail = response.json() + +# Print Configlet details + +print "ConfigletKey: %s"%outputConfigletDetail['key'] +print "ConfigletName: %s"%outputConfigletDetail['name'] +print "ConfigletConfig: %s"%outputConfigletDetail['config'] +print "ConfigletNote: %s"%outputConfigletDetail['note'] +print "\n" + + + diff --git a/topologies/training-level-2-cl/files/scripts/ConfigletHistory b/topologies/training-level-2-cl/files/scripts/ConfigletHistory new file mode 100644 index 000000000..71f1ac693 --- /dev/null +++ b/topologies/training-level-2-cl/files/scripts/ConfigletHistory @@ -0,0 +1,41 @@ +import requests +import json + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + +# Create an HTTP GET request to the CVP server + +getConfigletHistoryURL = "/cvpservice/configlet/getConfigletHistory.do?" +getConfigletParams = {'configletId':'configlet_344_7351420097365','startIndex':'0','endIndex':'0'} +response = requests.get(url+getConfigletHistoryURL,cookies=cookies, params=getConfigletParams,verify=False) +assert response.ok +outputConfigletHistory = response.json() + +# Print Configlet details + +for entry in outputConfigletHistory['configletHistory']: + print "ConfigletKey: %s"%entry['key'] + print "ConfigletOldConfig: \n%s"%entry['oldConfig'] + print "ConfigletNewConfig: \n%s"%entry['newConfig'] + print "\n" + diff --git a/topologies/training-level-2-cl/files/scripts/TaskBase b/topologies/training-level-2-cl/files/scripts/TaskBase new file mode 100644 index 000000000..6f8deccaf --- /dev/null +++ b/topologies/training-level-2-cl/files/scripts/TaskBase @@ -0,0 +1,59 @@ +import requests +import json + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + + +# Create an HTTP GET request to the CVP server + +getTasksURL = "/cvpservice/task/getTasks.do?" +getTasksParams = {'startIndex':'0','endIndex':'0','queryparam':'Pending'} +response = requests.get(url+getTasksURL,cookies=cookies, params=getTasksParams,verify=False) +assert response.ok +outputPendingTasks = response.json() + + +# Print Tasks Created by Current User +taskList = [ ] +for entry in outputPendingTasks['data']: + if str(entry['createdBy']) == str(CVP_USER): + print "TaskNumber: %s"%entry['workOrderId'] + taskList.append(str(entry['workOrderId'])) +print "TaskList: %s"%taskList + + + +# Create an HTTP POST request to the CVP server + +headers = { 'Content-Type': 'application/json' } +postTaskLogURL = "/cvpservice/workflow/addWorkOrderLog.do" +taskLogData = json.dumps({"taskId": taskList[1],"message": "This is a test Change","source": "CVP REST API"}) +response = requests.post(url+postTaskLogURL, cookies=cookies, data=taskLogData,headers=headers,verify=False) +assert response.ok +outputTaskLog = response.json() + +# Print Configlet details + +print "TaskLogAmmend: %s"%outputTaskLog['data'] +print "\n" + diff --git a/topologies/training-level-2-cl/files/scripts/TaskCVP1 b/topologies/training-level-2-cl/files/scripts/TaskCVP1 new file mode 100644 index 000000000..1ebd05764 --- /dev/null +++ b/topologies/training-level-2-cl/files/scripts/TaskCVP1 @@ -0,0 +1,48 @@ +import requests +import json + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + +# Print user details + +print "User Name:%s\n "%output['username'] +print "First Name: %s\n "%output['user']['firstName'] +print "Last Name: %s\n "%output['user']['lastName'] + + +getTasksURL = "/cvpservice/task/getTasks.do?" +getTasksParams = {'startIndex':'0','endIndex':'0'} +response = requests.get(url+getTasksURL,cookies=cookies, params=getTasksParams,verify=False) +assert response.ok +outputPendingTasks = response.json() + + +# Print Tasks Created by Current User +taskList = [ ] +for entry in outputPendingTasks['data']: + if str(entry['createdBy']) == str(CVP_USER): + print( "TaskNumber: %s Description: %s" %(entry['workOrderId'],entry['description'])) + taskList.append(str(entry['workOrderId'])) +#print "TaskList: %s"%taskList + + diff --git a/topologies/training-level-2-cl/files/scripts/TaskExecute b/topologies/training-level-2-cl/files/scripts/TaskExecute new file mode 100644 index 000000000..3db487284 --- /dev/null +++ b/topologies/training-level-2-cl/files/scripts/TaskExecute @@ -0,0 +1,56 @@ +import requests +import json + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + + +# Create an HTTP GET request to the CVP server + +getTasksURL = "/cvpservice/task/getTasks.do?" +getTasksParams = {'startIndex':'0','endIndex':'0','queryparam':'Pending'} +response = requests.get(url+getTasksURL,cookies=cookies, params=getTasksParams,verify=False) +assert response.ok +outputPendingTasks = response.json() + + +# Print Tasks Created by Current User +taskList = [ ] +for entry in outputPendingTasks['data']: + if str(entry['createdBy']) == str(CVP_USER): + print "TaskNumber: %s"%entry['workOrderId'] + taskList.append(str(entry['workOrderId'])) +print "TaskList: %s"%taskList + + + +headers = { 'Content-Type': 'application/json' } +postTaskExecuteURL = "/cvpservice/task/executeTask.do" +for taskNumber in taskList: + executeData = json.dumps({'data': [taskNumber]}) + response = requests.post(url+postTaskExecuteURL, cookies=cookies,data=executeData,headers=headers,verify=False) + assert response.ok + outputExecuteTask = response.json() + print (outputExecuteTask['data']) + print "Task: "+str(taskNumber)+" Execute: "+str(outputExecuteTask['data']) + print "\n" + diff --git a/topologies/training-level-2-cl/files/scripts/TaskLog b/topologies/training-level-2-cl/files/scripts/TaskLog new file mode 100644 index 000000000..c835008b8 --- /dev/null +++ b/topologies/training-level-2-cl/files/scripts/TaskLog @@ -0,0 +1,59 @@ +import requests +import json + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + + +# Create an HTTP GET request to the CVP server + +getTasksURL = "/cvpservice/task/getTasks.do?" +getTasksParams = {'startIndex':'0','endIndex':'0'} +response = requests.get(url+getTasksURL,cookies=cookies, params=getTasksParams,verify=False) +assert response.ok +outputTasks = response.json() + + +# Print Tasks Created by Current User +taskList = [ ] +for entry in outputTasks['data']: + if str(entry['createdBy']) == str(CVP_USER): + print "TaskNumber: %s"%entry['workOrderId'] + taskList.append(str(entry['workOrderId'])) +print "TaskList: %s"%taskList + + + +# Create an HTTP POST request to the CVP server + +headers = { 'Content-Type': 'application/json' } +postTaskLogURL = "/cvpservice/workflow/addWorkOrderLog.do" +taskLogData = json.dumps({"taskId": taskList[0],"message": "This is a test Change","source": "CVP REST API"}) +response = requests.post(url+postTaskLogURL, cookies=cookies, data=taskLogData,headers=headers,verify=False) +assert response.ok +outputTaskLog = response.json() + +# Print Configlet details + +print "TaskLogAmmend: %s"%outputTaskLog['data'] +print "\n" + diff --git a/topologies/training-level-2-cl/files/scripts/TaskLog1 b/topologies/training-level-2-cl/files/scripts/TaskLog1 new file mode 100644 index 000000000..c835008b8 --- /dev/null +++ b/topologies/training-level-2-cl/files/scripts/TaskLog1 @@ -0,0 +1,59 @@ +import requests +import json + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + + +# Create an HTTP GET request to the CVP server + +getTasksURL = "/cvpservice/task/getTasks.do?" +getTasksParams = {'startIndex':'0','endIndex':'0'} +response = requests.get(url+getTasksURL,cookies=cookies, params=getTasksParams,verify=False) +assert response.ok +outputTasks = response.json() + + +# Print Tasks Created by Current User +taskList = [ ] +for entry in outputTasks['data']: + if str(entry['createdBy']) == str(CVP_USER): + print "TaskNumber: %s"%entry['workOrderId'] + taskList.append(str(entry['workOrderId'])) +print "TaskList: %s"%taskList + + + +# Create an HTTP POST request to the CVP server + +headers = { 'Content-Type': 'application/json' } +postTaskLogURL = "/cvpservice/workflow/addWorkOrderLog.do" +taskLogData = json.dumps({"taskId": taskList[0],"message": "This is a test Change","source": "CVP REST API"}) +response = requests.post(url+postTaskLogURL, cookies=cookies, data=taskLogData,headers=headers,verify=False) +assert response.ok +outputTaskLog = response.json() + +# Print Configlet details + +print "TaskLogAmmend: %s"%outputTaskLog['data'] +print "\n" + diff --git a/topologies/training-level-2-cl/files/scripts/TaskLogView b/topologies/training-level-2-cl/files/scripts/TaskLogView new file mode 100644 index 000000000..7b34904dd --- /dev/null +++ b/topologies/training-level-2-cl/files/scripts/TaskLogView @@ -0,0 +1,51 @@ +import requests +import json +import pprint + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + + +# Create an HTTP GET request to the CVP server + +getTasksURL = "/cvpservice/task/getTasks.do?" +getTasksParams = {'startIndex':'0','endIndex':'0'} +response = requests.get(url+getTasksURL,cookies=cookies, params=getTasksParams,verify=False) +assert response.ok +outputTasks = response.json() + +taskList = [ ] +for entry in outputTasks['data']: + if str(entry['createdBy']) == str(CVP_USER): + taskList.append(str(entry['workOrderId'])) + +getTaskLogURL = "/cvpservice/task/getLogsById.do?" +#getTaskLogParams = {'startIndex':'0','endIndex':'0','id':'0'} +getTaskLogParams = {'startIndex':'0','endIndex':'0','id':taskList[0]} +response = requests.get(url+getTaskLogURL,cookies=cookies, params=getTaskLogParams,verify=False) +assert response.ok +outputTaskLog = response.json() + +# Print TaskLog details +print "TaskLogOutput: %s" %outputTaskLog['data'] +print "\n" + diff --git a/topologies/training-level-2-cl/files/scripts/TaskNote b/topologies/training-level-2-cl/files/scripts/TaskNote new file mode 100644 index 000000000..6cd1d6cfd --- /dev/null +++ b/topologies/training-level-2-cl/files/scripts/TaskNote @@ -0,0 +1,52 @@ +import requests +import json +import pprint + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + + +# Create an HTTP GET request to the CVP server + +getTasksURL = "/cvpservice/task/getTasks.do?" +getTasksParams = {'startIndex':'0','endIndex':'0'} +response = requests.get(url+getTasksURL,cookies=cookies, params=getTasksParams,verify=False) +assert response.ok +outputTasks = response.json() + +taskList = [ ] +for entry in outputTasks['data']: + if str(entry['createdBy']) == str(CVP_USER): + taskList.append(str(entry['workOrderId'])) + +headers = { 'Content-Type': 'application/json' } +postTaskNoteURL = "/cvpservice/task/addNoteToTask.do" +taskNoteData = json.dumps({"workOrderId": taskList[0],"note": "This is a test Change using the API"}) +response = requests.post(url+postTaskNoteURL, cookies=cookies, data=taskNoteData,headers=headers,verify=False) +assert response.ok +outputTaskNote = response.json() + +# Print Task details + +print "TaskNoteAmmend: %s"%outputTaskNote['data'] +print "\n" + diff --git a/topologies/training-level-2-cl/labguides/.gitignore b/topologies/training-level-2-cl/labguides/.gitignore new file mode 100644 index 000000000..ed86553f4 --- /dev/null +++ b/topologies/training-level-2-cl/labguides/.gitignore @@ -0,0 +1,2 @@ +.DS_Store +build/ diff --git a/topologies/training-level-2-cl/labguides/Makefile b/topologies/training-level-2-cl/labguides/Makefile new file mode 100644 index 000000000..874ed2529 --- /dev/null +++ b/topologies/training-level-2-cl/labguides/Makefile @@ -0,0 +1,20 @@ +# Minimal makefile for Sphinx documentation +# + +# You can set these variables from the command line. +SPHINXOPTS = +SPHINXBUILD = python -msphinx +SPHINXPROJ = ATD +SOURCEDIR = source +BUILDDIR = build + +# Put it first so that "make" without argument is like "make help". +help: + @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) + +.PHONY: help Makefile + +# Catch-all target: route all unknown targets to Sphinx using the new +# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). +%: Makefile + @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) \ No newline at end of file diff --git a/topologies/training-level-2-cl/labguides/readme.md b/topologies/training-level-2-cl/labguides/readme.md new file mode 100644 index 000000000..5a5369ecd --- /dev/null +++ b/topologies/training-level-2-cl/labguides/readme.md @@ -0,0 +1,12 @@ +# Lab Guides +In this folder are rST (restructured text) formatted lab guides for the ATD event. + +## Building +To build the documentation, you will need to install Sphinx and sphinx_bootstrap_theme with `pip`: + +`pip install sphinx sphinx_bootstrap_theme` + +## Contributing +At some point, this section may expand, but for now please make sure to review existing files for formatting guidelines. + +Please see https://github.com/ralsina/rst-cheatsheet/blob/master/rst-cheatsheet.rst for a cheat sheet. \ No newline at end of file diff --git a/topologies/training-level-2-cl/labguides/source/_static/arista_logo.png b/topologies/training-level-2-cl/labguides/source/_static/arista_logo.png new file mode 100644 index 000000000..2376e72b9 Binary files /dev/null and b/topologies/training-level-2-cl/labguides/source/_static/arista_logo.png differ diff --git a/topologies/training-level-2-cl/labguides/source/_static/arista_logo_160by26.png b/topologies/training-level-2-cl/labguides/source/_static/arista_logo_160by26.png new file mode 100644 index 000000000..d0d0cbeec Binary files /dev/null and b/topologies/training-level-2-cl/labguides/source/_static/arista_logo_160by26.png differ diff --git a/topologies/training-level-2-cl/labguides/source/_static/arista_logo_320by52.png b/topologies/training-level-2-cl/labguides/source/_static/arista_logo_320by52.png new file mode 100644 index 000000000..43dfa7ed2 Binary files /dev/null and b/topologies/training-level-2-cl/labguides/source/_static/arista_logo_320by52.png differ diff --git a/topologies/training-level-2-cl/labguides/source/_static/cloudvision-icon.png b/topologies/training-level-2-cl/labguides/source/_static/cloudvision-icon.png new file mode 100644 index 000000000..c309ed98e Binary files /dev/null and b/topologies/training-level-2-cl/labguides/source/_static/cloudvision-icon.png differ diff --git a/topologies/training-level-2-cl/labguides/source/_static/logo.jpg b/topologies/training-level-2-cl/labguides/source/_static/logo.jpg new file mode 100644 index 000000000..6eda41f7e Binary files /dev/null and b/topologies/training-level-2-cl/labguides/source/_static/logo.jpg differ diff --git a/topologies/training-level-2-cl/labguides/source/_static/my-styles.css b/topologies/training-level-2-cl/labguides/source/_static/my-styles.css new file mode 100644 index 000000000..1150528ee --- /dev/null +++ b/topologies/training-level-2-cl/labguides/source/_static/my-styles.css @@ -0,0 +1,41 @@ +body { + background-color: #FFFFFF; + color: #002859 +} + +.navbar-inverse { + background-image: -webkit-linear-gradient(#6d94bf, #446e9b 50%, #002859); + background-image: -o-linear-gradient(#6d94bf, #446e9b 50%, #002859); + background-image: -webkit-gradient(linear, left top, left bottom, from(#6d94bf), color-stop(50%, #446e9b), to(#002859)); + background-image: linear-gradient(#6d94bf, #446e9b 50%, #002859); + background-repeat: no-repeat; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff6d94bf', endColorstr='#ff002859', GradientType=0); + -webkit-filter: none; + filter: none; + border: 1px solid #345578; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.3) +} + +.navbar-brand { + background: url("arista_logo_320by52.png") center / contain no-repeat; + display: inline-block; + width: 1px; + padding: 0 10px 0 60px; + margin-right: 30px; + margin-left: -30px; +} + +.navbar-brand>img { + display: inline-block; + padding: 0 100px 0 0px; + margin-right: 20px; +} +a.navbar-brand { + display: inline-block; + padding: 15px 0 0 120px; +} + +footer { + background-color: #002859; + color: #FFFFFF; +} diff --git a/topologies/training-level-2-cl/labguides/source/conf.py b/topologies/training-level-2-cl/labguides/source/conf.py new file mode 100644 index 000000000..afccec09c --- /dev/null +++ b/topologies/training-level-2-cl/labguides/source/conf.py @@ -0,0 +1,247 @@ +# -*- coding: utf-8 -*- +# +# ATD documentation build configuration file, created by +# sphinx-quickstart on Tue Apr 17 10:00:04 2018. +# +# This file is execfile()d with the current directory set to its +# containing dir. +# +# Note that not all possible configuration values are present in this +# autogenerated file. +# +# All configuration values have a default; values that are commented out +# serve to show the default. + +# If extensions (or modules to document with autodoc) are in another directory, +# add these directories to sys.path here. If the directory is relative to the +# documentation root, use os.path.abspath to make it absolute, like shown here. +# +# import os +# import sys +# sys.path.insert(0, os.path.abspath('.')) + +import sphinx_bootstrap_theme + +# Importing datetime module to auto update copyright year +from datetime import date + +# -- General configuration ------------------------------------------------ + +# If your documentation needs a minimal Sphinx version, state it here. +# +# needs_sphinx = '1.0' + +# Add any Sphinx extension module names here, as strings. They can be +# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom +# ones. + +# Add any paths that contain templates here, relative to this directory. +templates_path = ['_templates'] + +# The suffix(es) of source filenames. +# You can specify multiple suffix as a list of string: +# +# source_suffix = ['.rst', '.md'] +source_suffix = '.rst' + +# The master toctree document. +master_doc = 'index' + +# General information about the project. +# Updating copyright var to auto update with current year +project = u'Arista ATD' +copyright = u'{0}, Arista Networks'.format(date.today().year) +author = u'Arista ATD atd-help@arista.com' + +# Show Source +html_show_sourcelink = False + +# The version info for the project you're documenting, acts as replacement for +# |version| and |release|, also used in various other places throughout the +# built documents. +# +# The short X.Y version. +version = u'Version 3.0' +# The full version, including alpha/beta/rc tags. +release = u'1' + +# The language for content autogenerated by Sphinx. Refer to documentation +# for a list of supported languages. +# +# This is also used if you do content translation via gettext catalogs. +# Usually you set "language" from the command line for these cases. +language = None + +# List of patterns, relative to source directory, that match files and +# directories to ignore when looking for source files. +# This patterns also effect to html_static_path and html_extra_path +exclude_patterns = [] + +# The name of the Pygments (syntax highlighting) style to use. +pygments_style = 'sphinx' + +# If true, `todo` and `todoList` produce output, else they produce nothing. +todo_include_todos = False + + +# -- Options for HTML output ---------------------------------------------- + +# The theme to use for HTML and HTML Help pages. See the documentation for +# a list of builtin themes. +# +#html_theme = 'alabaster' +html_theme = 'bootstrap' +html_theme_path = sphinx_bootstrap_theme.get_html_theme_path() + +# Add any paths that contain custom static files (such as style sheets) here, +# relative to this directory. They are copied after the builtin static files, +# so a file named "default.css" will overwrite the builtin "default.css". +html_static_path = ['_static'] + +# Theme options are theme-specific and customize the look and feel of a theme +# further. For a list of options available for each theme, see the +# documentation. +# +html_theme_options = { + # Navigation bar title. (Default: ``project`` value) + 'navbar_title': "ATD", + + # Tab name for entire site. (Default: "Site") + 'navbar_site_name': "Table of Contents", + + # A list of tuples containing pages or urls to link to. + # Valid tuples should be in the following forms: + # (name, page) # a link to a page + # (name, "/aa/bb", 1) # a link to an arbitrary relative url + # (name, "http://example.com", True) # arbitrary absolute url + # Note the "1" or "True" value above as the third argument to indicate + # an arbitrary url. + 'navbar_links': [ + ("Arista", "http://www.arista.com", True), + ], + + # Render the next and previous page links in navbar. (Default: true) + 'navbar_sidebarrel': True, + + # Render the current pages TOC in the navbar. (Default: true) + 'navbar_pagenav': False, + + # Tab name for the current pages TOC. (Default: "Page") + 'navbar_pagenav_name': "Page", + + # Global TOC depth for "site" navbar tab. (Default: 1) + # Switching to -1 shows all levels. + 'globaltoc_depth': 2, + + # Include hidden TOCs in Site navbar? + # + # Note: If this is "false", you cannot have mixed ``:hidden:`` and + # non-hidden ``toctree`` directives in the same page, or else the build + # will break. + # + # Values: "true" (default) or "false" + 'globaltoc_includehidden': "true", + + # HTML navbar class (Default: "navbar") to attach to
    element. + # For black navbar, do "navbar navbar-inverse" + #'navbar_class': "navbar navbar-inverse", + 'navbar_class': "navbar", + + # Fix navigation bar to top of page? + # Values: "true" (default) or "false" + 'navbar_fixed_top': "true", + + # Location of link to source. + # Options are "nav" (default), "footer" or anything else to exclude. + #'source_link_position': "nav", + + # Bootswatch (http://bootswatch.com/) theme. + # + # Options are nothing (default) or the name of a valid theme + # such as "cosmo" or "sandstone". + # + # The set of valid themes depend on the version of Bootstrap + # that's used (the next config option). + # + # Currently, the supported themes are: + # - Bootstrap 2: https://bootswatch.com/2 + # - Bootstrap 3: https://bootswatch.com/3 + 'bootswatch_theme': "spacelab", + + # Choose Bootstrap version. + # Values: "3" (default) or "2" (in quotes) + 'bootstrap_version': "3", +} + +# The name for this set of Sphinx documents. If None, it defaults to +# " v documentation". +#html_title = "AristaATD" + +# A shorter title for the navigation bar. Default is the same as html_title. +#html_short_title = "Demo" + +# (Optional) Logo. Should be small enough to fit the navbar (ideally 24x24). +# Path should be relative to the ``_static`` files directory. +#html_logo = "cloudvision-icon.png" + +# -- Options for HTMLHelp output ------------------------------------------ + +# Output file base name for HTML help builder. +htmlhelp_basename = 'AristaATD' + + +# -- Options for LaTeX output --------------------------------------------- + +latex_elements = { + # The paper size ('letterpaper' or 'a4paper'). + # + # 'papersize': 'letterpaper', + + # The font size ('10pt', '11pt' or '12pt'). + # + # 'pointsize': '10pt', + + # Additional stuff for the LaTeX preamble. + # + # 'preamble': '', + + # Latex figure (float) alignment + # + # 'figure_align': 'htbp', +} + +# Grouping the document tree into LaTeX files. List of tuples +# (source start file, target name, title, +# author, documentclass [howto, manual, or own class]). +latex_documents = [ + (master_doc, 'ATD.tex', u'ATD Lab Guide', + u'ATD Help (atd-help@arista.com)', 'manual'), +] + + +# -- Options for manual page output --------------------------------------- + +# One entry per manual page. List of tuples +# (source start file, name, description, authors, manual section). +man_pages = [ + (master_doc, 'atd', u'ATD Lab Guide', + [author], 1) +] + + +# -- Options for Texinfo output ------------------------------------------- + +# Grouping the document tree into Texinfo files. List of tuples +# (source start file, target name, title, author, +# dir menu entry, description, category) +texinfo_documents = [ + (master_doc, 'ATD', u'ATD Lab Guide', + author, 'ATD', 'Lab Documentation.', + 'Miscellaneous'), +] + + +def setup(app): + app.add_stylesheet("my-styles.css") # also can be a full URL + # app.add_stylesheet("ANOTHER.css") + # app.add_stylesheet("AND_ANOTHER.css") diff --git a/topologies/training-level-2-cl/labguides/source/connecting.rst b/topologies/training-level-2-cl/labguides/source/connecting.rst new file mode 100644 index 000000000..10ae589ef --- /dev/null +++ b/topologies/training-level-2-cl/labguides/source/connecting.rst @@ -0,0 +1,28 @@ +Connecting +========== + +1. Log into the Arista Test Drive portal with your assigned URL. If you + don’t have one, please see your ATD staff. + +.. image:: images/connecting/nested_connecting_1.png + +2. SSH to the public address assigned to the LabAccess jumphost server (this is the Topology Address shown in the "Welcome to Arista's Test Drive!" picture above). The username is ``arista`` and the password is ``{REPLACE_PWD}``: + + .. code-block:: text + + ssh arista@{unique_address}.topo.testdrive.arista.com + +| + +.. image:: images/connecting/nested_connecting_2.png + :align: center + +| + +3. The LabAccess menu allows users to connect to each device and specify + lab topology. It is recommended to open multiple SSH sessions or use + the Screen option (under the SSH Menu) to jump between devices rapidly. + + You can also Access the LabAccess Menu from your browser by clicking on `Console Access` + +.. image:: images/connecting/nested_connecting_3.png diff --git a/topologies/training-level-2-cl/labguides/source/images/connecting/nested_connecting_1.png b/topologies/training-level-2-cl/labguides/source/images/connecting/nested_connecting_1.png new file mode 100644 index 000000000..aa76597b8 Binary files /dev/null and b/topologies/training-level-2-cl/labguides/source/images/connecting/nested_connecting_1.png differ diff --git a/topologies/training-level-2-cl/labguides/source/images/connecting/nested_connecting_2.png b/topologies/training-level-2-cl/labguides/source/images/connecting/nested_connecting_2.png new file mode 100644 index 000000000..2c6b51a2b Binary files /dev/null and b/topologies/training-level-2-cl/labguides/source/images/connecting/nested_connecting_2.png differ diff --git a/topologies/training-level-2-cl/labguides/source/images/connecting/nested_connecting_3.png b/topologies/training-level-2-cl/labguides/source/images/connecting/nested_connecting_3.png new file mode 100644 index 000000000..1cc7402a3 Binary files /dev/null and b/topologies/training-level-2-cl/labguides/source/images/connecting/nested_connecting_3.png differ diff --git a/topologies/training-level-2-cl/labguides/source/images/logo.jpg b/topologies/training-level-2-cl/labguides/source/images/logo.jpg new file mode 100644 index 000000000..6eda41f7e Binary files /dev/null and b/topologies/training-level-2-cl/labguides/source/images/logo.jpg differ diff --git a/topologies/training-level-2-cl/labguides/source/index.rst b/topologies/training-level-2-cl/labguides/source/index.rst new file mode 100644 index 000000000..bb76aaa2e --- /dev/null +++ b/topologies/training-level-2-cl/labguides/source/index.rst @@ -0,0 +1,8 @@ +Welcome to the Arista Training documentation! +======================================== + +.. toctree:: + :maxdepth: 1 + :caption: EOS Configuration + + connecting.rst diff --git a/topologies/training-level-2-cl/topo_build.yml b/topologies/training-level-2-cl/topo_build.yml new file mode 100644 index 000000000..9ccba5edb --- /dev/null +++ b/topologies/training-level-2-cl/topo_build.yml @@ -0,0 +1,385 @@ +host_cpu: 4 +cvp_cpu: 32 +cvp_ram: 42 +cvp_nodes: 1 +veos_cpu: 2 +nodes: + - spine1: + ip_addr: 192.168.0.11 + sys_mac: 00:1c:73:b1:c6:01 + neighbors: + - neighborDevice: spine2 + neighborPort: Ethernet1 + port: Ethernet1 + - neighborDevice: spine2 + neighborPort: Ethernet2 + port: Ethernet2 + - neighborDevice: leaf1 + neighborPort: Ethernet3 + port: Ethernet3 + - neighborDevice: leaf2 + neighborPort: Ethernet3 + port: Ethernet4 + - neighborDevice: leaf3 + neighborPort: Ethernet3 + port: Ethernet5 + - neighborDevice: leaf4 + neighborPort: Ethernet3 + port: Ethernet6 + - neighborDevice: borderleaf1 + neighborPort: Ethernet3 + port: Ethernet7 + - neighborDevice: borderleaf2 + neighborPort: Ethernet3 + port: Ethernet8 + - spine2: + ip_addr: 192.168.0.12 + sys_mac: 00:1c:73:b2:c6:01 + neighbors: + - neighborDevice: spine1 + neighborPort: Ethernet1 + port: Ethernet1 + - neighborDevice: spine1 + neighborPort: Ethernet2 + port: Ethernet2 + - neighborDevice: leaf1 + neighborPort: Ethernet4 + port: Ethernet3 + - neighborDevice: leaf2 + neighborPort: Ethernet4 + port: Ethernet4 + - neighborDevice: leaf3 + neighborPort: Ethernet4 + port: Ethernet5 + - neighborDevice: leaf4 + neighborPort: Ethernet4 + port: Ethernet6 + - neighborDevice: borderleaf1 + neighborPort: Ethernet4 + port: Ethernet7 + - neighborDevice: borderleaf2 + neighborPort: Ethernet4 + port: Ethernet8 + - spine3: + ip_addr: 192.168.0.13 + sys_mac: 00:1c:73:b3:c6:01 + neighbors: + - neighborDevice: spine4 + neighborPort: Ethernet1 + port: Ethernet1 + - neighborDevice: spine4 + neighborPort: Ethernet2 + port: Ethernet2 + - neighborDevice: leaf1 + neighborPort: Ethernet5 + port: Ethernet3 + - neighborDevice: leaf2 + neighborPort: Ethernet5 + port: Ethernet4 + - neighborDevice: leaf3 + neighborPort: Ethernet5 + port: Ethernet5 + - neighborDevice: leaf4 + neighborPort: Ethernet5 + port: Ethernet6 + - neighborDevice: borderleaf1 + neighborPort: Ethernet5 + port: Ethernet7 + - neighborDevice: borderleaf2 + neighborPort: Ethernet5 + port: Ethernet8 + - spine4: + ip_addr: 192.168.0.14 + sys_mac: 00:1c:73:b4:c6:01 + neighbors: + - neighborDevice: spine3 + neighborPort: Ethernet1 + port: Ethernet1 + - neighborDevice: spine3 + neighborPort: Ethernet2 + port: Ethernet2 + - neighborDevice: leaf1 + neighborPort: Ethernet6 + port: Ethernet3 + - neighborDevice: leaf2 + neighborPort: Ethernet6 + port: Ethernet4 + - neighborDevice: leaf3 + neighborPort: Ethernet6 + port: Ethernet5 + - neighborDevice: leaf4 + neighborPort: Ethernet6 + port: Ethernet6 + - neighborDevice: borderleaf1 + neighborPort: Ethernet6 + port: Ethernet7 + - neighborDevice: borderleaf2 + neighborPort: Ethernet6 + port: Ethernet8 + - leaf1: + ip_addr: 192.168.0.21 + sys_mac: 00:1c:73:c1:c6:01 + neighbors: + - neighborDevice: leaf2 + neighborPort: Ethernet1 + port: Ethernet1 + - neighborDevice: leaf2 + neighborPort: Ethernet2 + port: Ethernet2 + - neighborDevice: spine1 + neighborPort: Ethernet3 + port: Ethernet3 + - neighborDevice: spine2 + neighborPort: Ethernet3 + port: Ethernet4 + - neighborDevice: spine3 + neighborPort: Ethernet3 + port: Ethernet5 + - neighborDevice: spine4 + neighborPort: Ethernet3 + port: Ethernet6 + - neighborDevice: host1 + neighborPort: Ethernet1 + port: Ethernet7 + - neighborDevice: host5 + neighborPort: Ethernet1 + port: Ethernet8 + - neighborDevice: host2 + neighborPort: Ethernet1 + port: Ethernet9 + - neighborDevice: host6 + neighborPort: Ethernet1 + port: Ethernet10 + - leaf2: + ip_addr: 192.168.0.22 + sys_mac: 00:1c:73:c2:c6:01 + neighbors: + - neighborDevice: leaf1 + neighborPort: Ethernet1 + port: Ethernet1 + - neighborDevice: leaf1 + neighborPort: Ethernet2 + port: Ethernet2 + - neighborDevice: spine1 + neighborPort: Ethernet4 + port: Ethernet3 + - neighborDevice: spine2 + neighborPort: Ethernet4 + port: Ethernet4 + - neighborDevice: spine3 + neighborPort: Ethernet4 + port: Ethernet5 + - neighborDevice: spine4 + neighborPort: Ethernet4 + port: Ethernet6 + - neighborDevice: host1 + neighborPort: Ethernet2 + port: Ethernet7 + - neighborDevice: host5 + neighborPort: Ethernet2 + port: Ethernet8 + - neighborDevice: host2 + neighborPort: Ethernet2 + port: Ethernet9 + - neighborDevice: host6 + neighborPort: Ethernet2 + port: Ethernet10 + - leaf3: + ip_addr: 192.168.0.23 + sys_mac: 00:1c:73:c3:c6:01 + neighbors: + - neighborDevice: leaf4 + neighborPort: Ethernet1 + port: Ethernet1 + - neighborDevice: leaf4 + neighborPort: Ethernet2 + port: Ethernet2 + - neighborDevice: spine1 + neighborPort: Ethernet5 + port: Ethernet3 + - neighborDevice: spine2 + neighborPort: Ethernet5 + port: Ethernet4 + - neighborDevice: spine3 + neighborPort: Ethernet5 + port: Ethernet5 + - neighborDevice: spine4 + neighborPort: Ethernet5 + port: Ethernet6 + - neighborDevice: host3 + neighborPort: Ethernet1 + port: Ethernet7 + - neighborDevice: host7 + neighborPort: Ethernet1 + port: Ethernet8 + - neighborDevice: host4 + neighborPort: Ethernet1 + port: Ethernet9 + - neighborDevice: host8 + neighborPort: Ethernet1 + port: Ethernet10 + - leaf4: + ip_addr: 192.168.0.24 + sys_mac: 00:1c:73:c4:c6:01 + neighbors: + - neighborDevice: leaf3 + neighborPort: Ethernet1 + port: Ethernet1 + - neighborDevice: leaf3 + neighborPort: Ethernet2 + port: Ethernet2 + - neighborDevice: spine1 + neighborPort: Ethernet6 + port: Ethernet3 + - neighborDevice: spine2 + neighborPort: Ethernet6 + port: Ethernet4 + - neighborDevice: spine3 + neighborPort: Ethernet6 + port: Ethernet5 + - neighborDevice: spine4 + neighborPort: Ethernet6 + port: Ethernet6 + - neighborDevice: host3 + neighborPort: Ethernet2 + port: Ethernet7 + - neighborDevice: host7 + neighborPort: Ethernet2 + port: Ethernet8 + - neighborDevice: host4 + neighborPort: Ethernet2 + port: Ethernet9 + - neighborDevice: host8 + neighborPort: Ethernet2 + port: Ethernet10 + - borderleaf1: + ip_addr: 192.168.0.25 + sys_mac: 00:1c:73:c5:c6:01 + neighbors: + - neighborDevice: borderleaf2 + neighborPort: Ethernet1 + port: Ethernet1 + - neighborDevice: borderleaf2 + neighborPort: Ethernet2 + port: Ethernet2 + - neighborDevice: spine1 + neighborPort: Ethernet7 + port: Ethernet3 + - neighborDevice: spine2 + neighborPort: Ethernet7 + port: Ethernet4 + - neighborDevice: spine3 + neighborPort: Ethernet7 + port: Ethernet5 + - neighborDevice: spine4 + neighborPort: Ethernet7 + port: Ethernet6 + - borderleaf2: + ip_addr: 192.168.0.26 + sys_mac: 00:1c:73:c6:c6:01 + neighbors: + - neighborDevice: borderleaf1 + neighborPort: Ethernet1 + port: Ethernet1 + - neighborDevice: borderleaf1 + neighborPort: Ethernet2 + port: Ethernet2 + - neighborDevice: spine1 + neighborPort: Ethernet8 + port: Ethernet3 + - neighborDevice: spine2 + neighborPort: Ethernet8 + port: Ethernet4 + - neighborDevice: spine3 + neighborPort: Ethernet8 + port: Ethernet5 + - neighborDevice: spine4 + neighborPort: Ethernet8 + port: Ethernet6 + - host1: + ip_addr: 192.168.0.51 + sys_mac: 00:1c:73:f1:c6:01 + neighbors: + - neighborDevice: leaf1 + neighborPort: Ethernet7 + port: Ethernet1 + - neighborDevice: leaf2 + neighborPort: Ethernet7 + port: Ethernet2 + - host2: + ip_addr: 192.168.0.52 + sys_mac: 00:1c:73:f2:c6:01 + neighbors: + - neighborDevice: leaf1 + neighborPort: Ethernet9 + port: Ethernet1 + - neighborDevice: leaf2 + neighborPort: Ethernet9 + port: Ethernet2 + - host3: + ip_addr: 192.168.0.53 + sys_mac: 00:1c:73:f3:c6:01 + neighbors: + - neighborDevice: leaf3 + neighborPort: Ethernet7 + port: Ethernet1 + - neighborDevice: leaf4 + neighborPort: Ethernet7 + port: Ethernet2 + - host4: + ip_addr: 192.168.0.54 + sys_mac: 00:1c:73:f4:c6:01 + neighbors: + - neighborDevice: leaf3 + neighborPort: Ethernet9 + port: Ethernet1 + - neighborDevice: leaf4 + neighborPort: Ethernet9 + port: Ethernet2 +servers: + - host5: + image_name: "gcr.io/atd-testdrivetraining-dev/hosts-gui/host1:latest" + ip_addr: 192.168.0.101 + port : 6001 + neighbors: + - neighborDevice: leaf1 + neighborPort: Ethernet8 + port: Ethernet1 + - neighborDevice: leaf2 + neighborPort: Ethernet8 + port: Ethernet2 + - host6: + image_name: "gcr.io/atd-testdrivetraining-dev/hosts-gui/host1:latest" + ip_addr: 192.168.0.102 + port : 6002 + neighbors: + - neighborDevice: leaf1 + neighborPort: Ethernet10 + port: Ethernet1 + - neighborDevice: leaf2 + neighborPort: Ethernet10 + port: Ethernet2 + - host7: + image_name: "gcr.io/atd-testdrivetraining-dev/hosts-gui/host1:latest" + ip_addr: 192.168.0.103 + port : 6003 + neighbors: + - neighborDevice: leaf3 + neighborPort: Ethernet8 + port: Ethernet1 + - neighborDevice: leaf4 + neighborPort: Ethernet8 + port: Ethernet2 + - host8: + image_name: "gcr.io/atd-testdrivetraining-dev/hosts-gui/host1:latest" + ip_addr: 192.168.0.104 + port : 6004 + neighbors: + - neighborDevice: leaf3 + neighborPort: Ethernet10 + port: Ethernet1 + - neighborDevice: leaf4 + neighborPort: Ethernet10 + port: Ethernet2 +additional_ssh_nodes: +additional_clab_nodes: diff --git a/topologies/training-level-3-cl/atd-topo-bkp-2.png b/topologies/training-level-3-cl/atd-topo-bkp-2.png new file mode 100644 index 000000000..ce621aec8 Binary files /dev/null and b/topologies/training-level-3-cl/atd-topo-bkp-2.png differ diff --git a/topologies/training-level-3-cl/atd-topo-bkp.png b/topologies/training-level-3-cl/atd-topo-bkp.png new file mode 100644 index 000000000..4cc023b85 Binary files /dev/null and b/topologies/training-level-3-cl/atd-topo-bkp.png differ diff --git a/topologies/training-level-3-cl/atd-topo.png b/topologies/training-level-3-cl/atd-topo.png new file mode 100644 index 000000000..53ba5d7d9 Binary files /dev/null and b/topologies/training-level-3-cl/atd-topo.png differ diff --git a/topologies/training-level-3-cl/configlets/ATD-INFRA b/topologies/training-level-3-cl/configlets/ATD-INFRA new file mode 100644 index 000000000..de87bc743 --- /dev/null +++ b/topologies/training-level-3-cl/configlets/ATD-INFRA @@ -0,0 +1,53 @@ +vrf instance MGMT +! +daemon TerminAttr + exec /usr/bin/TerminAttr -cvcompression=gzip -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent -cvaddr=192.168.0.5:9910 -cvauth=token,/tmp/token -cvvrf=MGMT -taillogs -disableaaa + no shutdown +! +alias mlag-reload bash /mnt/flash/shut_intfs && sudo shutdown now -r +alias conint sh interface | i connected +alias senz show interface counter error | nz +alias shmc show int | awk '/^[A-Z]/ { intf = $1 } /, address is/ { print intf, $6 }' +alias snz show interface counter | nz +alias spd show port-channel %1 detail all +alias sqnz show interface counter queue | nz +alias srnz show interface counter rate | nz +alias intdesc + !! Usage: intdesc interface-name description + 10 config + 20 int %1 + 30 desc %2 + 40 exit +! +dns domain arista.lab +! +service routing protocols model multi-agent +! +ntp server vrf MGMT 192.168.0.1 iburst source Management0 +! +radius-server host 192.168.0.1 vrf MGMT key 7 0207165218120E +! +aaa group server radius atds + server 192.168.0.1 vrf MGMT +! +aaa authentication login default group atds local +aaa authorization exec default group atds local +aaa authorization commands all default local +! +username Script secret sha512 $6$PNfpb9anSBQ5/aia$phaa3ar5pwkntenD9WHc6Ed5b96lbW0dc0bjtwPnFLaDiCK8D5Cjl6ewP/xdNbl4PtS6Paq.3SssN8pj05NQm. +username admin privilege 15 role network-admin secret 5 $1$5O85YVVn$HrXcfOivJEnISTMb6xrJc. +username arista privilege 15 role network-admin secret 5 $1$4VjIjfd1$XkUVulbNDESHFzcxDU.Tk1 +! +username arista ssh-key ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC+ERvV4GaPq3FzxY8T+5hMF/1T+l8wiPsVCtOrZU4Hy6NCNlAiDBdA/RUtX5/aOu5JvHyPTVHqWJ0qi9BqU3rxCNl/l2/5UZbm9RPzdZ1QCwoYwPB9/j/tYJV8lZdr6t0yGBfxgzD3oW/zF7a+ZtASaMAu7lkgoqPK2pVIGa+Y9ZCsA0Xq756XpLCw+d3pHKHvIkgWLCo9FoeIv8f/bu5u/ztzRE+Nvl+o5add6MxnjsXz3s7BnW2FX6JNjyp0Z+OXjupQc2gcfFvpd/dA2lCNuuaCHkRgyPwIZtWPmNqMRXPp37mlPwV43qDJRVPQkvh0xPxwS35BbzUxWdT+ZLZv +! +ip radius source-interface Management0 +! +ip routing vrf MGMT +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 +! +management api http-commands + no shutdown + vrf MGMT + no shutdown +! diff --git a/topologies/training-level-3-cl/configlets/Base-Builder.py b/topologies/training-level-3-cl/configlets/Base-Builder.py new file mode 100644 index 000000000..167d9c750 --- /dev/null +++ b/topologies/training-level-3-cl/configlets/Base-Builder.py @@ -0,0 +1,86 @@ +from cvplibrary import CVPGlobalVariables, GlobalVariableNames, Form + + + +# Get this devices Serial + + +serial = CVPGlobalVariables.getValue( GlobalVariableNames.CVP_SERIAL ) +mask = '24' +ServiceRouting = True + +#Create the IP address from the serial number + + +if serial == '4A7F6E96300132903A73A74CCF18B697': + IPaddress = '192.168.0.21' + hostname = 'leaf1' + + +elif serial == '3831DEFC364900BF9EEFC45FEE7794E7': + IPaddress = '192.168.0.22' + hostname = 'leaf2' + + +elif serial == 'ED469CFA13C4017B2D19BF7EBCAD50B1': + IPaddress = '192.168.0.23' + hostname = 'leaf3' + + +elif serial == '434653268ABA082A2FF6B52F1367CE80': + IPaddress = '192.168.0.24' + hostname = 'leaf4' + +elif serial == '8085B9640BC6D8FDC1FD23D242EBF433': + IPaddress = '192.168.0.11' + hostname = 'spine1' + +elif serial == 'D28D62E5729AB8BF44A0BC017DEB188A': + IPaddress = '192.168.0.12' + hostname = 'spine2' + +elif serial == 'F77703A62ADE220E689A41057AA56288': + IPaddress = '192.168.0.13' + hostname = 'spine3' + +elif serial == 'D763323F00C03738A8C824D2F1DA05E8': + IPaddress = '192.168.0.25' + hostname = 'borderleaf1' + +elif serial == '7C16136B7483F2E2FB002E8E0646F1F0': + IPaddress = '192.168.0.26' + hostname = 'borderleaf2' + +elif serial == '86342B780ED73BCB30E1DFE48E26AC38': + IPaddress = '192.168.0.51' + ServiceRouting = False + hostname = 'host1' + + +elif serial == 'CE0B31805130945E3CE40B060E9E636D': + IPaddress = '192.168.0.52' + ServiceRouting = False + hostname = 'host2' + + +# Generate and print config - Ignore the service routing command if not needed +print 'hostname %s' % hostname +print '!' +print 'interface Management 1' +print ' ip address %s/%s' % ( IPaddress, mask ) +print ' no lldp transmit' +print ' no lldp receive' +print '!' +if ServiceRouting: + print 'service routing protocols model multi-agent' + print '!' +print 'dns domain arista.lab' +print '!' +print 'ip route 0.0.0.0/0 192.168.0.1' +print '!' +print 'ip routing' +print '!' +print 'management api http-commands' +print ' no shutdown' +print ' protocol http' +print '!' \ No newline at end of file diff --git a/topologies/training-level-3-cl/configlets/BorderLeaf1-Multicast-Start b/topologies/training-level-3-cl/configlets/BorderLeaf1-Multicast-Start new file mode 100644 index 000000000..cb538eb71 --- /dev/null +++ b/topologies/training-level-3-cl/configlets/BorderLeaf1-Multicast-Start @@ -0,0 +1,54 @@ +! +interface Ethernet1 + shutdown +interface Ethernet2 + shutdown +interface Ethernet3 + no switchport + ip address 10.10.5.1/30 +interface Ethernet4 + no switchport + ip address 10.10.5.5/30 +interface Ethernet5 + no switchport + ip address 10.10.5.9/30 +interface Ethernet6 + no switchport + ip address 10.10.5.13/30 + +interface Loopback0 + ip address 10.31.31.31/32 +! +service routing protocols model multi-agent +! +ip routing +! +router bgp 65500 + router-id 10.31.31.31 + maximum-paths 4 ecmp 4 + no bgp default ipv4-unicast + bgp log-neighbor-changes + + + neighbor 10.10.5.2 peer group SpineUnderlay + neighbor 10.10.5.6 peer group SpineUnderlay + neighbor 10.10.5.10 peer group SpineUnderlay + neighbor 10.10.5.14 peer group SpineUnderlay + + neighbor 10.10.5.2 description Spine1 + neighbor 10.10.5.6 description Spine2 + neighbor 10.10.5.10 description Spine3 + neighbor 10.10.5.14 description Spine4 + + neighbor SpineUnderlay remote-as 65100 + neighbor SpineUnderlay maximum-routes 12000 + + + address-family ipv4 + network 10.31.31.31/32 + neighbor 10.10.5.2 activate + neighbor 10.10.5.6 activate + neighbor 10.10.5.10 activate + neighbor 10.10.5.12 activate + neighbor SpineUnderlay activate + redistribute connected \ No newline at end of file diff --git a/topologies/training-level-3-cl/configlets/BorderLeaf2-Multicast-Start b/topologies/training-level-3-cl/configlets/BorderLeaf2-Multicast-Start new file mode 100644 index 000000000..804e70667 --- /dev/null +++ b/topologies/training-level-3-cl/configlets/BorderLeaf2-Multicast-Start @@ -0,0 +1,54 @@ +! +interface Ethernet1 + shutdown +interface Ethernet2 + shutdown +interface Ethernet3 + no switchport + ip address 10.10.6.1/30 +interface Ethernet4 + no switchport + ip address 10.10.6.5/30 +interface Ethernet5 + no switchport + ip address 10.10.6.9/30 +interface Ethernet6 + no switchport + ip address 10.10.6.13/30 + +interface Loopback0 + ip address 10.32.32.32/32 +! +! +service routing protocols model multi-agent +! +ip routing +! +router bgp 65500 + router-id 10.32.32.32 + maximum-paths 4 ecmp 4 + no bgp default ipv4-unicast + bgp log-neighbor-changes + + + neighbor 10.10.6.2 peer group SpineUnderlay + neighbor 10.10.6.6 peer group SpineUnderlay + neighbor 10.10.6.10 peer group SpineUnderlay + neighbor 10.10.6.14 peer group SpineUnderlay + + neighbor 10.10.6.2 description Spine1 + neighbor 10.10.6.6 description Spine2 + neighbor 10.10.6.10 description Spine3 + neighbor 10.10.6.14 description Spine4 + + neighbor SpineUnderlay remote-as 65100 + neighbor SpineUnderlay maximum-routes 12000 + + address-family ipv4 + network 10.32.32.32/32 + neighbor 10.10.6.2 activate + neighbor 10.10.6.6 activate + neighbor 10.10.6.10 activate + neighbor 10.10.6.14 activate + neighbor SpineUnderlay activate + redistribute connected \ No newline at end of file diff --git a/topologies/training-level-3-cl/configlets/Leaf1-Multicast-Start b/topologies/training-level-3-cl/configlets/Leaf1-Multicast-Start new file mode 100644 index 000000000..3894a55c2 --- /dev/null +++ b/topologies/training-level-3-cl/configlets/Leaf1-Multicast-Start @@ -0,0 +1,50 @@ +! +interface Ethernet1 + shutdown +interface Ethernet2 + shutdown +interface Ethernet3 + no switchport + ip address 10.10.1.2/30 +interface Ethernet4 + no switchport + ip address 10.10.2.2/30 +interface Ethernet5 + no switchport + ip address 10.10.3.2/30 +interface Ethernet6 + no switchport + ip address 10.10.4.2/30 + +interface Loopback0 + ip address 10.11.11.11/32 +! +! +service routing protocols model multi-agent +! +ip routing +! +router bgp 65001 + router-id 10.11.11.11 + maximum-paths 4 ecmp 4 + no bgp default ipv4-unicast + bgp log-neighbor-changes + + + neighbor 10.10.1.1 peer group SpineUnderlay + neighbor 10.10.2.1 peer group SpineUnderlay + neighbor 10.10.3.1 peer group SpineUnderlay + neighbor 10.10.4.1 peer group SpineUnderlay + + neighbor 10.10.1.1 description Spine1 + neighbor 10.10.2.1 description Spine2 + neighbor 10.10.3.1 description Spine3 + neighbor 10.10.4.1 description Spine4 + + neighbor SpineUnderlay remote-as 65100 + neighbor SpineUnderlay maximum-routes 12000 + + address-family ipv4 + network 10.11.11.11/32 + neighbor SpineUnderlay activate + redistribute connected \ No newline at end of file diff --git a/topologies/training-level-3-cl/configlets/Leaf2-Multicast-Start b/topologies/training-level-3-cl/configlets/Leaf2-Multicast-Start new file mode 100644 index 000000000..f8654840f --- /dev/null +++ b/topologies/training-level-3-cl/configlets/Leaf2-Multicast-Start @@ -0,0 +1,51 @@ +! +interface Ethernet1 + shutdown +interface Ethernet2 + shutdown +interface Ethernet3 + no switchport + ip address 10.10.1.6/30 +interface Ethernet4 + no switchport + ip address 10.10.2.6/30 +interface Ethernet5 + no switchport + ip address 10.10.3.6/30 +interface Ethernet6 + no switchport + ip address 10.10.4.6/30 + +interface Loopback0 + ip address 10.12.12.12/32 +! +! +service routing protocols model multi-agent +! +ip routing +! +router bgp 65002 + router-id 10.12.12.12 + maximum-paths 4 ecmp 4 + no bgp default ipv4-unicast + bgp log-neighbor-changes + + + neighbor 10.10.1.5 peer group SpineUnderlay + neighbor 10.10.2.5 peer group SpineUnderlay + neighbor 10.10.3.5 peer group SpineUnderlay + neighbor 10.10.4.5 peer group SpineUnderlay + + neighbor 10.10.1.5 description Spine1 + neighbor 10.10.2.5 description Spine2 + neighbor 10.10.3.5 description Spine3 + neighbor 10.10.4.5 description Spine4 + + + neighbor SpineUnderlay remote-as 65100 + neighbor SpineUnderlay maximum-routes 12000 + +address-family ipv4 + network 10.12.12.12/32 + neighbor SpineUnderlay activate + redistribute connected \ No newline at end of file diff --git a/topologies/training-level-3-cl/configlets/Leaf3-Multicast-Start b/topologies/training-level-3-cl/configlets/Leaf3-Multicast-Start new file mode 100644 index 000000000..2e1e7e2be --- /dev/null +++ b/topologies/training-level-3-cl/configlets/Leaf3-Multicast-Start @@ -0,0 +1,50 @@ +! +interface Ethernet1 + shutdown +interface Ethernet2 + shutdown +interface Ethernet3 + no switchport + ip address 10.10.1.10/30 +interface Ethernet4 + no switchport + ip address 10.10.2.10/30 +interface Ethernet5 + no switchport + ip address 10.10.3.10/30 +interface Ethernet6 + no switchport + ip address 10.10.4.10/30 + +interface Loopback0 + ip address 10.13.13.13/32 +! +! +service routing protocols model multi-agent +! +ip routing +! +router bgp 65003 + router-id 10.13.13.13 + maximum-paths 4 ecmp 4 + no bgp default ipv4-unicast + bgp log-neighbor-changes + + + neighbor 10.10.1.9 peer group SpineUnderlay + neighbor 10.10.2.9 peer group SpineUnderlay + neighbor 10.10.3.9 peer group SpineUnderlay + neighbor 10.10.4.9 peer group SpineUnderlay + + neighbor 10.10.1.9 description Spine1 + neighbor 10.10.2.9 description Spine2 + neighbor 10.10.3.9 description Spine3 + neighbor 10.10.4.9 description Spine4 + + neighbor SpineUnderlay remote-as 65100 + neighbor SpineUnderlay maximum-routes 12000 + +address-family ipv4 + network 10.13.13.13/32 + neighbor SpineUnderlay activate + redistribute connected \ No newline at end of file diff --git a/topologies/training-level-3-cl/configlets/Leaf4-Multicast-Start b/topologies/training-level-3-cl/configlets/Leaf4-Multicast-Start new file mode 100644 index 000000000..e441170ff --- /dev/null +++ b/topologies/training-level-3-cl/configlets/Leaf4-Multicast-Start @@ -0,0 +1,51 @@ + +! +interface Ethernet1 + shutdown +interface Ethernet2 + shutdown +interface Ethernet3 + no switchport + ip address 10.10.1.14/30 +interface Ethernet4 + no switchport + ip address 10.10.2.14/30 +interface Ethernet5 + no switchport + ip address 10.10.3.14/30 +interface Ethernet6 + no switchport + ip address 10.10.4.14/30 + +interface Loopback0 + ip address 10.14.14.14/32 +! +! +service routing protocols model multi-agent +! +ip routing +! +router bgp 65004 +router-id 10.14.14.14 + maximum-paths 4 ecmp 4 + no bgp default ipv4-unicast + bgp log-neighbor-changes + + + neighbor 10.10.1.13 peer group SpineUnderlay + neighbor 10.10.2.13 peer group SpineUnderlay + neighbor 10.10.3.13 peer group SpineUnderlay + neighbor 10.10.4.13 peer group SpineUnderlay + + neighbor 10.10.1.13 description Spine1 + neighbor 10.10.2.13 description Spine2 + neighbor 10.10.3.13 description Spine3 + neighbor 10.10.4.13 description Spine4 + + neighbor SpineUnderlay remote-as 65100 + neighbor SpineUnderlay maximum-routes 12000 + +address-family ipv4 + network 10.14.14.14/32 + neighbor SpineUnderlay activate + redistribute connected \ No newline at end of file diff --git a/topologies/training-level-3-cl/configlets/Spine1-Multicast-Start b/topologies/training-level-3-cl/configlets/Spine1-Multicast-Start new file mode 100644 index 000000000..186853976 --- /dev/null +++ b/topologies/training-level-3-cl/configlets/Spine1-Multicast-Start @@ -0,0 +1,76 @@ +! +interface Ethernet1 + shutdown +interface Ethernet2 + shutdown +interface Ethernet3 + no switchport + ip address 10.10.1.1/30 +interface Ethernet4 + no switchport + ip address 10.10.1.5/30 +interface Ethernet5 + no switchport + ip address 10.10.1.9/30 +interface Ethernet6 + no switchport + ip address 10.10.1.13/30 +interface Ethernet7 + no switchport + ip address 10.10.5.2/30 +interface Ethernet8 + no switchport + ip address 10.10.6.2/30 +interface Loopback0 + ip address 10.21.21.21/32 +! + +service routing protocols model multi-agent +! +ip routing +! +router bgp 65100 + router-id 10.21.21.21 + maximum-paths 4 ecmp 4 + no bgp default ipv4-unicast + bgp log-neighbor-changes + + neighbor 10.10.1.2 description Leaf1 + neighbor 10.10.1.2 remote-as 65001 + neighbor 10.10.1.2 maximum-routes 12000 + + + neighbor 10.10.1.6 description Leaf2 + neighbor 10.10.1.6 remote-as 65002 + neighbor 10.10.1.6 maximum-routes 12000 + + + neighbor 10.10.1.10 description Leaf3 + neighbor 10.10.1.10 remote-as 65003 + neighbor 10.10.1.10 maximum-routes 12000 + + + neighbor 10.10.1.14 description Leaf4 + neighbor 10.10.1.14 remote-as 65004 + neighbor 10.10.1.14 maximum-routes 12000 + + neighbor BorderleafUnderlay peer group + neighbor BorderleafUnderlay maximum-routes 12000 + neighbor BorderleafUnderlay remote-as 65500 + + + neighbor 10.10.5.1 peer group BorderleafUnderlay + neighbor 10.10.5.1 description Borderleaf1 + neighbor 10.10.6.1 peer group BorderleafUnderlay + neighbor 10.10.6.1 description Borderleaf2 + + ! + ! + address-family ipv4 + network 10.21.21.21/32 + neighbor 10.10.1.2 activate + neighbor 10.10.1.6 activate + neighbor 10.10.1.10 activate + neighbor 10.10.1.14 activate + neighbor BorderleafUnderlay activate + redistribute connected \ No newline at end of file diff --git a/topologies/training-level-3-cl/configlets/Spine2-Multicast-Start b/topologies/training-level-3-cl/configlets/Spine2-Multicast-Start new file mode 100644 index 000000000..0161e765b --- /dev/null +++ b/topologies/training-level-3-cl/configlets/Spine2-Multicast-Start @@ -0,0 +1,78 @@ +! +interface Ethernet1 + shutdown +interface Ethernet2 + shutdown +interface Ethernet3 + no switchport + ip address 10.10.2.1/30 +interface Ethernet4 + no switchport + ip address 10.10.2.5/30 +interface Ethernet5 + no switchport + ip address 10.10.2.9/30 +interface Ethernet6 + no switchport + ip address 10.10.2.13/30 +interface Ethernet7 + no switchport + ip address 10.10.5.6/30 +interface Ethernet8 + no switchport + ip address 10.10.6.6/30 +interface Loopback0 + ip address 10.22.22.22/32 +! + +service routing protocols model multi-agent +! +ip routing +! +router bgp 65100 + router-id 10.22.22.22 + maximum-paths 4 ecmp 4 + no bgp default ipv4-unicast + bgp log-neighbor-changes + + +neighbor 10.10.2.2 description Leaf1 +neighbor 10.10.2.2 remote-as 65001 +neighbor 10.10.2.2 maximum-routes 12000 + + + +neighbor 10.10.2.6 description Leaf2 +neighbor 10.10.2.6 remote-as 65002 +neighbor 10.10.2.6 maximum-routes 12000 + + +neighbor 10.10.2.10 description Leaf3 +neighbor 10.10.2.10 remote-as 65003 +neighbor 10.10.2.10 maximum-routes 12000 + + +neighbor 10.10.2.14 description Leaf4 +neighbor 10.10.2.14 remote-as 65004 +neighbor 10.10.2.14 maximum-routes 12000 + +neighbor BorderleafUnderlay peer group +neighbor BorderleafUnderlay maximum-routes 12000 +neighbor BorderleafUnderlay remote-as 65500 + + +neighbor 10.10.5.5 peer group BorderleafUnderlay +neighbor 10.10.5.5 description Borderleaf1 +neighbor 10.10.6.5 peer group BorderleafUnderlay +neighbor 10.10.6.5 description Borderleaf2 + +! +! +address-family ipv4 + network 10.22.22.22/32 + neighbor 10.10.2.2 activate + neighbor 10.10.2.6 activate + neighbor 10.10.2.10 activate + neighbor 10.10.2.14 activate + neighbor BorderleafUnderlay activate + redistribute connected \ No newline at end of file diff --git a/topologies/training-level-3-cl/configlets/Spine3-Multicast-Start b/topologies/training-level-3-cl/configlets/Spine3-Multicast-Start new file mode 100644 index 000000000..6c9e3afc2 --- /dev/null +++ b/topologies/training-level-3-cl/configlets/Spine3-Multicast-Start @@ -0,0 +1,78 @@ +! +interface Ethernet1 + shutdown +interface Ethernet2 + shutdown +interface Ethernet3 + no switchport + ip address 10.10.3.1/30 +interface Ethernet4 + no switchport + ip address 10.10.3.5/30 +interface Ethernet5 + no switchport + ip address 10.10.3.9/30 +interface Ethernet6 + no switchport + ip address 10.10.3.13/30 +interface Ethernet7 + no switchport + ip address 10.10.5.10/30 +interface Ethernet8 + no switchport + ip address 10.10.6.10/30 +interface Loopback0 + ip address 10.23.23.23/32 +! +! +service routing protocols model multi-agent +! +ip routing +! +router bgp 65100 + router-id 10.23.23.23 + maximum-paths 4 ecmp 4 + no bgp default ipv4-unicast + bgp log-neighbor-changes + + neighbor 10.10.3.2 description Leaf + neighbor 10.10.3.2 remote-as 65001 + neighbor 10.10.3.2 maximum-routes 12000 + + + + neighbor 10.10.3.6 description Leaf2 + neighbor 10.10.3.6 remote-as 65002 + neighbor 10.10.3.6 maximum-routes 12000 + + + neighbor 10.10.3.10 description Leaf3 + neighbor 10.10.3.10 remote-as 65003 + neighbor 10.10.3.10 maximum-routes 12000 + + + neighbor 10.10.3.14 description Leaf4 + neighbor 10.10.3.14 remote-as 65004 + neighbor 10.10.3.14 maximum-routes 12000 + + + neighbor BorderleafUnderlay peer group + neighbor BorderleafUnderlay maximum-routes 12000 + neighbor BorderleafUnderlay remote-as 65500 + + + neighbor 10.10.5.9 peer group BorderleafUnderlay + neighbor 10.10.5.9 description Borderleaf1 + neighbor 10.10.6.9 peer group BorderleafUnderlay + neighbor 10.10.6.9 description Borderleaf2 + ! + ! + address-family ipv4 + network 10.23.23.23/32 + neighbor 10.10.3.2 activate + neighbor 10.10.3.6 activate + neighbor 10.10.3.10 activate + neighbor 10.10.3.14 activate + neighbor BorderleafUnderlay activate + redistribute connected + ! \ No newline at end of file diff --git a/topologies/training-level-3-cl/configlets/Spine4-Multicast-Start b/topologies/training-level-3-cl/configlets/Spine4-Multicast-Start new file mode 100644 index 000000000..91c0fa705 --- /dev/null +++ b/topologies/training-level-3-cl/configlets/Spine4-Multicast-Start @@ -0,0 +1,72 @@ +! +interface Ethernet1 + shutdown +interface Ethernet2 + shutdown +interface Ethernet3 + no switchport + ip address 10.10.4.1/30 +interface Ethernet4 + no switchport + ip address 10.10.4.5/30 +interface Ethernet5 + no switchport + ip address 10.10.4.9/30 +interface Ethernet6 + no switchport + ip address 10.10.4.13/30 +interface Ethernet7 + no switchport + ip address 10.10.5.14/30 +interface Ethernet8 + no switchport + ip address 10.10.6.14/30 +interface Loopback0 + ip address 10.24.24.24/32 +! +! +service routing protocols model multi-agent +! +ip routing +! +router bgp 65100 + router-id 10.24.24.24 + maximum-paths 4 ecmp 4 + no bgp default ipv4-unicast + bgp log-neighbor-changes + + neighbor 10.10.4.2 description Leaf1 + neighbor 10.10.4.2 remote-as 65001 + neighbor 10.10.4.2 maximum-routes 12000 + + neighbor 10.10.4.6 description Leaf2 + neighbor 10.10.4.6 remote-as 65002 + neighbor 10.10.4.6 maximum-routes 12000 + + neighbor 10.10.4.10 description Leaf3 + neighbor 10.10.4.10 remote-as 65003 + neighbor 10.10.4.10 maximum-routes 12000 + + neighbor 10.10.4.14 description Leaf4 + neighbor 10.10.4.14 remote-as 65004 + neighbor 10.10.4.14 maximum-routes 12000 + + neighbor BorderleafUnderlay peer group + neighbor BorderleafUnderlay maximum-routes 12000 + neighbor BorderleafUnderlay remote-as 65500 + + neighbor 10.10.5.13 peer group BorderleafUnderlay + neighbor 10.10.5.13 description Borderleaf1 + neighbor 10.10.6.13 peer group BorderleafUnderlay + neighbor 10.10.6.13 description Borderleaf2 + ! + ! + address-family ipv4 + network 10.24.24.24/32 + neighbor 10.10.4.2 activate + neighbor 10.10.4.6 activate + neighbor 10.10.4.10 activate + neighbor 10.10.4.14 activate + neighbor BorderleafUnderlay activate + redistribute connected + ! \ No newline at end of file diff --git a/topologies/training-level-3-cl/configlets/borderleaf1-base b/topologies/training-level-3-cl/configlets/borderleaf1-base new file mode 100644 index 000000000..e274c6eb4 --- /dev/null +++ b/topologies/training-level-3-cl/configlets/borderleaf1-base @@ -0,0 +1,14 @@ +hostname borderleaf1 +! +interface Management 0 + vrf MGMT + ip address 192.168.0.25/24 +! +service routing protocols model multi-agent +! +dns domain arista.lab +! +ip routing vrf MGMT +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 +! diff --git a/topologies/training-level-3-cl/configlets/borderleaf2-base b/topologies/training-level-3-cl/configlets/borderleaf2-base new file mode 100644 index 000000000..a7778e0b4 --- /dev/null +++ b/topologies/training-level-3-cl/configlets/borderleaf2-base @@ -0,0 +1,14 @@ +hostname borderleaf2 +! +interface Management 0 + vrf MGMT + ip address 192.168.0.26/24 + +! +service routing protocols model multi-agent +! +dns domain arista.lab +! +ip routing vrf MGMT +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 diff --git a/topologies/training-level-3-cl/configlets/host1-base b/topologies/training-level-3-cl/configlets/host1-base new file mode 100644 index 000000000..915d58edb --- /dev/null +++ b/topologies/training-level-3-cl/configlets/host1-base @@ -0,0 +1,15 @@ +hostname host1 +! +spanning-tree mode none +! +interface Management 0 + vrf MGMT + ip address 192.168.0.51/24 + + +! +dns domain arista.lab +! +ip routing vrf MGMT +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 diff --git a/topologies/training-level-3-cl/configlets/host2-base b/topologies/training-level-3-cl/configlets/host2-base new file mode 100644 index 000000000..63f0c9c38 --- /dev/null +++ b/topologies/training-level-3-cl/configlets/host2-base @@ -0,0 +1,15 @@ +hostname host2 +! +spanning-tree mode none +! +interface Management 0 + vrf MGMT + ip address 192.168.0.52/24 + + +! +dns domain arista.lab +! +ip routing vrf MGMT +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 diff --git a/topologies/training-level-3-cl/configlets/host3-base b/topologies/training-level-3-cl/configlets/host3-base new file mode 100644 index 000000000..979a49b28 --- /dev/null +++ b/topologies/training-level-3-cl/configlets/host3-base @@ -0,0 +1,15 @@ +hostname host3 +! +spanning-tree mode none +! +interface Management 0 + vrf MGMT + ip address 192.168.0.53/24 + + +! +dns domain arista.lab +! +ip routing vrf MGMT +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 diff --git a/topologies/training-level-3-cl/configlets/host4-base b/topologies/training-level-3-cl/configlets/host4-base new file mode 100644 index 000000000..f85e77a77 --- /dev/null +++ b/topologies/training-level-3-cl/configlets/host4-base @@ -0,0 +1,15 @@ +hostname host4 +! +spanning-tree mode none +! +interface Management 0 + vrf MGMT + ip address 192.168.0.54/24 + +! +dns domain arista.lab +! +ip routing vrf MGMT +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 + diff --git a/topologies/training-level-3-cl/configlets/leaf1-base b/topologies/training-level-3-cl/configlets/leaf1-base new file mode 100644 index 000000000..7b316b33b --- /dev/null +++ b/topologies/training-level-3-cl/configlets/leaf1-base @@ -0,0 +1,13 @@ +hostname leaf1 +! +interface Management 0 + vrf MGMT + ip address 192.168.0.21/24 + +service routing protocols model multi-agent +! +dns domain arista.lab +! +ip routing vrf MGMT +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 diff --git a/topologies/training-level-3-cl/configlets/leaf2-base b/topologies/training-level-3-cl/configlets/leaf2-base new file mode 100644 index 000000000..22fffb444 --- /dev/null +++ b/topologies/training-level-3-cl/configlets/leaf2-base @@ -0,0 +1,15 @@ +hostname leaf2 +! +interface Management 0 + vrf MGMT + ip address 192.168.0.22/24 + + +! +service routing protocols model multi-agent +! +dns domain arista.lab +! +ip routing vrf MGMT +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 diff --git a/topologies/training-level-3-cl/configlets/leaf3-base b/topologies/training-level-3-cl/configlets/leaf3-base new file mode 100644 index 000000000..37e7bc8d3 --- /dev/null +++ b/topologies/training-level-3-cl/configlets/leaf3-base @@ -0,0 +1,13 @@ +hostname leaf3 +! +interface Management 0 + vrf MGMT + ip address 192.168.0.23/24 + +service routing protocols model multi-agent +! +dns domain arista.lab +! +ip routing vrf MGMT +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 diff --git a/topologies/training-level-3-cl/configlets/leaf4-base b/topologies/training-level-3-cl/configlets/leaf4-base new file mode 100644 index 000000000..f0cff7b25 --- /dev/null +++ b/topologies/training-level-3-cl/configlets/leaf4-base @@ -0,0 +1,13 @@ +hostname leaf4 +! +interface Management 0 + vrf MGMT + ip address 192.168.0.24/24 + +service routing protocols model multi-agent +! +dns domain arista.lab +! +ip routing vrf MGMT +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 diff --git a/topologies/training-level-3-cl/configlets/spine1-base b/topologies/training-level-3-cl/configlets/spine1-base new file mode 100644 index 000000000..5e9d072b1 --- /dev/null +++ b/topologies/training-level-3-cl/configlets/spine1-base @@ -0,0 +1,14 @@ +hostname spine1 +! +interface Management 0 + vrf MGMT + ip address 192.168.0.11/24 + +! +service routing protocols model multi-agent +! +dns domain arista.lab +! +ip routing vrf MGMT +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 diff --git a/topologies/training-level-3-cl/configlets/spine2-base b/topologies/training-level-3-cl/configlets/spine2-base new file mode 100644 index 000000000..cc9d0bef1 --- /dev/null +++ b/topologies/training-level-3-cl/configlets/spine2-base @@ -0,0 +1,13 @@ +hostname spine2 +! +interface Management 0 + vrf MGMT + ip address 192.168.0.12/24 + +service routing protocols model multi-agent +! +dns domain arista.lab +! +ip routing vrf MGMT +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 diff --git a/topologies/training-level-3-cl/configlets/spine3-base b/topologies/training-level-3-cl/configlets/spine3-base new file mode 100644 index 000000000..853f6564a --- /dev/null +++ b/topologies/training-level-3-cl/configlets/spine3-base @@ -0,0 +1,14 @@ +hostname spine3 +! +interface Management 0 + vrf MGMT + ip address 192.168.0.13/24 + +! +service routing protocols model multi-agent +! +dns domain arista.lab +! +ip routing vrf MGMT +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 diff --git a/topologies/training-level-3-cl/configlets/spine4-base b/topologies/training-level-3-cl/configlets/spine4-base new file mode 100644 index 000000000..240453581 --- /dev/null +++ b/topologies/training-level-3-cl/configlets/spine4-base @@ -0,0 +1,14 @@ +hostname spine4 +! +interface Management 0 + vrf MGMT + ip address 192.168.0.14/24 + +! +service routing protocols model multi-agent +! +dns domain arista.lab +! +ip routing vrf MGMT +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 diff --git a/topologies/training-level-3-cl/files/.ansible.cfg b/topologies/training-level-3-cl/files/.ansible.cfg new file mode 100644 index 000000000..14c806515 --- /dev/null +++ b/topologies/training-level-3-cl/files/.ansible.cfg @@ -0,0 +1,2 @@ +[defaults] +host_key_checking = False diff --git a/topologies/training-level-3-cl/files/.screenrc b/topologies/training-level-3-cl/files/.screenrc new file mode 100644 index 000000000..1d70f5e42 --- /dev/null +++ b/topologies/training-level-3-cl/files/.screenrc @@ -0,0 +1,23 @@ +# Turn off the startup message. +startup_message off +# Set the caption to the active windows. +caption always "%-Lw%{= BW}%50>%n%f* %t%{-}%+Lw%<" + +term screen-256color + +# New screens for various processes. +# Example: screen -t +# screen -t 7050SX-128 0 ssh aristaadmin@192.100.37.128 +screen 1 ssh 192.168.0.4 +screen -t CVP 2 ssh 192.168.0.5 +screen -t Spine1 3 ssh 192.168.0.11 +screen -t Spine2 4 ssh 192.168.0.12 +screen -t Spine3 5 ssh 192.168.0.13 +screen -t Leaf1 6 ssh 192.168.0.21 +screen -t Leaf2 7 ssh 192.168.0.22 +screen -t Leaf3 8 ssh 192.168.0.23 +screen -t Leaf4 9 ssh 192.168.0.24 +screen -t Borderleaf1 10 ssh 192.168.0.25 +screen -t Borderlead2 11 ssh 192.168.0.26 +screen -t Host1 15 ssh 192.168.0.51 +screen -t Host2 16 ssh 192.168.0.52 diff --git a/topologies/training-level-3-cl/files/MenuOptions.yaml b/topologies/training-level-3-cl/files/MenuOptions.yaml new file mode 100644 index 000000000..f68e2261d --- /dev/null +++ b/topologies/training-level-3-cl/files/MenuOptions.yaml @@ -0,0 +1,214 @@ +--- +options: + reset: + - command: "/usr/local/bin/ConfigureTopology.py && bash /home/arista/Broadcaster/pushHostDefaultConfig.sh" + description: "Reset All Devices to Base ATD (reset)" + vxlan: + - command: "/usr/local/bin/ConfigureTopology.py -t vxlan" + description: "VXLAN Lab (vxlan)" + l2evpn: + - command: "/usr/local/bin/ConfigureTopology.py -t l2evpn" + description: "L2-EVPN Lab (l2evpn)" + l3evpn: + - command: "/usr/local/bin/ConfigureTopology.py -t l3evpn" + description: "L3-EVPN Lab (l3evpn)" + aamh: + - command: "/usr/local/bin/ConfigureTopology.py -t aamh" + description: "Active-Active Multi Homing lab (aamh)" + pim: + - command: "/usr/local/bin/ConfigureTopology.py -t aamh" + description: "PIM Lab (pim)" +labconfiglets: + reset: + spine1: + - "spine1-base" + spine2: + - "spine2-base" + spine3: + - "spine3-base" + leaf1: + - "leaf1-base" + leaf2: + - "leaf2-base" + leaf3: + - "leaf3-base" + leaf4: + - "leaf4-base" + host1: + - "host1-base" + host2: + - "host2-base" + borderleaf1: + - "borderleaf1-base" + borderleaf2: + - "borderleaf2-base" + vxlan: + spine1: + - "spine1-base" + - "Spine-1-VXALN-Begin" + spine2: + - "spine2-base" + - "Spine-2-VXALN-Begin" + spine3: + - "spine3-base" + - "Spine-3-VXALN-Begin" + leaf1: + - "leaf1-base" + - "Leaf-1-VXALN-Begin" + leaf2: + - "leaf2-base" + - "Leaf-2-VXALN-Begin" + leaf3: + - "leaf3-base" + - "leaf-3-VXALN-Begin" + leaf4: + - "leaf4-base" + - "leaf-4-VXALN-Begin" + host1: + - "host1-base" + - "Host-1-VXALN-Begin" + host2: + - "host2-base" + - "Host-2-VXALN-Begin" + borderleaf1: + - "borderleaf1-base" + - "Borderleaf-1-VXALN-Begin" + borderleaf2: + - "borderleaf2-base" + - "Borderleaf-2-VXALN-Begin" + l2evpn: + spine1: + - "spine1-base" + - "Spine-1-L2EVPN-Begin" + spine2: + - "spine2-base" + - "Spine-2-L2EVPN-Begin" + spine3: + - "spine3-base" + - "Spine-3-L2EVPN-Begin" + leaf1: + - "leaf1-base" + - "Leaf-1-L2EVPN-Begin" + leaf2: + - "leaf2-base" + - "Leaf-2-L2EVPN-Begin" + leaf3: + - "leaf3-base" + - "Leaf-3-L2EVPN-Begin" + leaf4: + - "leaf4-base" + - "Leaf-4-L2EVPN-Begin" + host1: + - "host1-base" + - "Host-1-L2EVPN-Begin" + host2: + - "host2-base" + - "Host-2-L2EVPN-Begin" + borderleaf1: + - "borderleaf1-base" + - "Borderleaf-1-L2EVPN-Begin" + borderleaf2: + - "borderleaf2-base" + - "Borderleaf-2-L2EVPN-Begin" + l3evpn: + spine1: + - "spine1-base" + - "Spine-1-L3EVPN-Begin" + spine2: + - "spine2-base" + - "Spine-2-L3EVPN-Begin" + spine3: + - "spine3-base" + - "Spine-3-L3EVPN-Begin" + leaf1: + - "leaf1-base" + - "Leaf-1-L3EVPN-Begin" + leaf2: + - "leaf2-base" + - "Leaf-2-L3EVPN-Begin" + leaf3: + - "leaf3-base" + - "Leaf-3-L3EVPN-Begin" + leaf4: + - "leaf4-base" + - "Leaf-4-L3EVPN-Begin" + host1: + - "host1-base" + - "Host-1-L3EVPN-Begin" + host2: + - "host2-base" + - "Host-2-L3EVPN-Begin" + borderleaf1: + - "borderleaf1-base" + - "Borderleaf-1-L3EVPN-Begin" + borderleaf2: + - "borderleaf2-base" + - "Borderleaf-2-L3EVPN-Begin" + aamh: + spine1: + - "spine1-base" + - "Spine-1-AAMH-Begin" + spine2: + - "spine2-base" + - "Spine-2-AAMH-Begin" + spine3: + - "spine3-base" + - "Spine-3-AAMH-Begin" + leaf1: + - "leaf1-base" + - "Leaf-1-AAMH-Begin" + leaf2: + - "leaf2-base" + - "Leaf-2-AAMH-Begin" + leaf3: + - "leaf3-base" + - "Leaf-3-AAMH-Begin" + leaf4: + - "leaf4-base" + - "Leaf-4-AAMH-Begin" + host1: + - "host1-base" + - "Host-1-AAMH-Begin" + host2: + - "host2-base" + - "Host-2-AAMH-Begin" + borderleaf1: + - "borderleaf1-base" + - "Borderleaf-1-AAMH-Begin" + borderleaf2: + - "borderleaf2-base" + - "Borderleaf-2-AAMH-Begin" + pim: + spine1: + - "spine1-base" + - "Spine-1-PIM-Begin" + spine2: + - "spine2-base" + - "Spine-2-PIM-Begin" + spine3: + - "spine3-base" + - "Spine-3-PIM-Begin" + leaf1: + - "leaf1-base" + - "Leaf-1-PIM-Begin" + leaf2: + - "leaf2-base" + - "Leaf-2-PIM-Begin" + leaf3: + - "leaf3-base" + - "Leaf-3-PIM-Begin" + leaf4: + - "leaf4-base" + - "Leaf-4-PIM-Begin" + host1: + - "host1-base" + - "Host-1-PIM-Begin" + host2: + - "host2-base" + - "Host-2-PIM-Begin" + borderleaf1: + - "borderleaf1-base" + - "Borderleaf-1-PIM-Begin" + borderleaf2: + - "borderleaf2-base" + - "Borderleaf-2-PIM-Begin" \ No newline at end of file diff --git a/topologies/training-level-3-cl/files/apps/coder/coder.yaml b/topologies/training-level-3-cl/files/apps/coder/coder.yaml new file mode 100644 index 000000000..80cc852d1 --- /dev/null +++ b/topologies/training-level-3-cl/files/apps/coder/coder.yaml @@ -0,0 +1,4 @@ +bind-addr: 127.0.0.1:8080 +auth: password +password: {ARISTA_REPLACE} +cert: false \ No newline at end of file diff --git a/topologies/training-level-3-cl/files/apps/coder/labfiles/.placeholder b/topologies/training-level-3-cl/files/apps/coder/labfiles/.placeholder new file mode 100644 index 000000000..e69de29bb diff --git a/topologies/training-level-3-cl/files/apps/gui/host5/arista/host-startup.sh b/topologies/training-level-3-cl/files/apps/gui/host5/arista/host-startup.sh new file mode 100644 index 000000000..16eafb783 --- /dev/null +++ b/topologies/training-level-3-cl/files/apps/gui/host5/arista/host-startup.sh @@ -0,0 +1,17 @@ +sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 4EB27DB2A3B88B8B +sudo apt-get update +sudo apt install openssh-server -y +sudo service ssh start +sudo apt-get install ufw -y +sudo ufw enable +sudo ufw allow 22 +sudo ufw disable +useradd -rm -d /home/arista -s /bin/bash -g root -G sudo -u 1000 arista +echo 'arista:arista123' | chpasswd +service ssh start +sudo apt install ifenslave -y +sudo apt install iputils-ping -y +sudo add-apt-repository ppa:wireshark-dev/stable -y +sudo apt-get install filezilla -y +sudo apt-get install vsftpd -y +sudo service vsftpd restart \ No newline at end of file diff --git a/topologies/training-level-3-cl/files/apps/gui/host6/arista/host-startup.sh b/topologies/training-level-3-cl/files/apps/gui/host6/arista/host-startup.sh new file mode 100644 index 000000000..16eafb783 --- /dev/null +++ b/topologies/training-level-3-cl/files/apps/gui/host6/arista/host-startup.sh @@ -0,0 +1,17 @@ +sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 4EB27DB2A3B88B8B +sudo apt-get update +sudo apt install openssh-server -y +sudo service ssh start +sudo apt-get install ufw -y +sudo ufw enable +sudo ufw allow 22 +sudo ufw disable +useradd -rm -d /home/arista -s /bin/bash -g root -G sudo -u 1000 arista +echo 'arista:arista123' | chpasswd +service ssh start +sudo apt install ifenslave -y +sudo apt install iputils-ping -y +sudo add-apt-repository ppa:wireshark-dev/stable -y +sudo apt-get install filezilla -y +sudo apt-get install vsftpd -y +sudo service vsftpd restart \ No newline at end of file diff --git a/topologies/training-level-3-cl/files/apps/gui/host7/arista/host-startup.sh b/topologies/training-level-3-cl/files/apps/gui/host7/arista/host-startup.sh new file mode 100644 index 000000000..16eafb783 --- /dev/null +++ b/topologies/training-level-3-cl/files/apps/gui/host7/arista/host-startup.sh @@ -0,0 +1,17 @@ +sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 4EB27DB2A3B88B8B +sudo apt-get update +sudo apt install openssh-server -y +sudo service ssh start +sudo apt-get install ufw -y +sudo ufw enable +sudo ufw allow 22 +sudo ufw disable +useradd -rm -d /home/arista -s /bin/bash -g root -G sudo -u 1000 arista +echo 'arista:arista123' | chpasswd +service ssh start +sudo apt install ifenslave -y +sudo apt install iputils-ping -y +sudo add-apt-repository ppa:wireshark-dev/stable -y +sudo apt-get install filezilla -y +sudo apt-get install vsftpd -y +sudo service vsftpd restart \ No newline at end of file diff --git a/topologies/training-level-3-cl/files/apps/gui/host8/arista/host-startup.sh b/topologies/training-level-3-cl/files/apps/gui/host8/arista/host-startup.sh new file mode 100644 index 000000000..16eafb783 --- /dev/null +++ b/topologies/training-level-3-cl/files/apps/gui/host8/arista/host-startup.sh @@ -0,0 +1,17 @@ +sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 4EB27DB2A3B88B8B +sudo apt-get update +sudo apt install openssh-server -y +sudo service ssh start +sudo apt-get install ufw -y +sudo ufw enable +sudo ufw allow 22 +sudo ufw disable +useradd -rm -d /home/arista -s /bin/bash -g root -G sudo -u 1000 arista +echo 'arista:arista123' | chpasswd +service ssh start +sudo apt install ifenslave -y +sudo apt install iputils-ping -y +sudo add-apt-repository ppa:wireshark-dev/stable -y +sudo apt-get install filezilla -y +sudo apt-get install vsftpd -y +sudo service vsftpd restart \ No newline at end of file diff --git a/topologies/training-level-3-cl/files/apps/ssh/web.json b/topologies/training-level-3-cl/files/apps/ssh/web.json new file mode 100644 index 000000000..13fac47dd --- /dev/null +++ b/topologies/training-level-3-cl/files/apps/ssh/web.json @@ -0,0 +1,76 @@ +{ + "listen": { + "ip": "0.0.0.0", + "port": 2222 + }, + "user": { + "name": null, + "password": null, + "privatekey": null + }, + "ssh": { + "host": null, + "port": 22, + "localAddress": null, + "localPort": null, + "term": "xterm-color", + "readyTimeout": 20000, + "keepaliveInterval": 120000, + "keepaliveCountMax": 10, + "allowedSubnets": [ "192.168.0.0/16", "10.0.0.0/8", "172.16.0.0/12" ] + }, + "terminal": { + "cursorBlink": true, + "scrollback": 10000, + "tabStopWidth": 8, + "bellStyle": "sound" + }, + "header": { + "text": null, + "background": "green" + }, + "session": { + "name": "WebSSH2", + "secret": "mysecret" + }, + "options": { + "challengeButton": true, + "allowreauth": true + }, + "algorithms": { + "kex": [ + "ecdh-sha2-nistp256", + "ecdh-sha2-nistp384", + "ecdh-sha2-nistp521", + "diffie-hellman-group-exchange-sha256", + "diffie-hellman-group14-sha1" + ], + "cipher": [ + "aes128-ctr", + "aes192-ctr", + "aes256-ctr", + "aes128-gcm", + "aes128-gcm@openssh.com", + "aes256-gcm", + "aes256-gcm@openssh.com", + "aes256-cbc" + ], + "hmac": [ + "hmac-sha2-256", + "hmac-sha2-512", + "hmac-sha1" + ], + "compress": [ + "none", + "zlib@openssh.com", + "zlib" + ] + }, + "serverlog": { + "client": false, + "server": false + }, + "accesslog": false, + "verify": false, + "safeShutdownDuration": 300 + } \ No newline at end of file diff --git a/topologies/training-level-3-cl/files/apps/uilanding/modules.yaml b/topologies/training-level-3-cl/files/apps/uilanding/modules.yaml new file mode 100644 index 000000000..c983faac0 --- /dev/null +++ b/topologies/training-level-3-cl/files/apps/uilanding/modules.yaml @@ -0,0 +1,62 @@ +topology: + image: "atd-topo.png" + nodes: + Spine1: + coords: "22,218,167,296" + ip: "192.168.0.11" + Spine2: + coords: "356,215,517,300" + ip: "192.168.0.12" + Spine3: + coords: "555,214,724,294" + ip: "192.168.0.13" + Spine4: + coords: "925,218,1077,293" + ip: "192.168.0.14" + Leaf1: + coords: "16,424,165,501" + ip: "192.168.0.21" + Leaf2: + coords: "353,425,520,493" + ip: "192.168.0.22" + Leaf3: + coords: "569,430,714,499" + ip: "192.168.0.23" + Leaf4: + coords: "921,423,1074,502" + ip: "192.168.0.24" + BorderLeaf1: + coords: "370,57,511,138" + ip: "192.168.0.25" + BorderLeaf2: + coords: "561,65,726,145" + ip: "192.168.0.26" + Host1: + coords: "15,534,149,611" + ip: "192.168.0.51" + Host2: + coords: "365,539,504,619" + ip: "192.168.0.52" + Host3: + coords: "566,542,711,620" + ip: "192.168.0.53" + Host4: + coords: "929,542,1075,615" + ip: "192.168.0.54" + servers: + Host5: + coords: "182,545,307,636" + ip: "192.168.0.101" + port : 6001 + Host6: + coords: "183,650,312,744" + ip: "192.168.0.102" + port : 6002 + Host7: + coords: "747,545,875,636" + ip: "192.168.0.103" + port : 6003 + Host8: + coords: "752,645,877,731" + ip: "192.168.0.104" + port : 6004 diff --git a/topologies/training-level-3-cl/files/apps/webui/.vncpass_clear b/topologies/training-level-3-cl/files/apps/webui/.vncpass_clear new file mode 100644 index 000000000..cd09dd7a5 --- /dev/null +++ b/topologies/training-level-3-cl/files/apps/webui/.vncpass_clear @@ -0,0 +1 @@ +@rista1 \ No newline at end of file diff --git a/topologies/training-level-3-cl/files/cvp/cvp_info.yaml b/topologies/training-level-3-cl/files/cvp/cvp_info.yaml new file mode 100644 index 000000000..7e796e77f --- /dev/null +++ b/topologies/training-level-3-cl/files/cvp/cvp_info.yaml @@ -0,0 +1,64 @@ +cvp_info: + containers: + Tenant: + nodes: + Leaf: + parent: Tenant + nodes: + - leaf1 + - leaf2 + - leaf3 + - leaf4 + Borderleaf: + parent: Tenant + nodes: + - borderleaf1 + - borderleaf2 + Spine: + parent: Tenant + nodes: + - spine1 + - spine2 + - spine3 + - spine4 + Hosts: + parent: Tenant + nodes: + - host1 + - host2 + - host3 + - host4 + snapshots: + configlets: + containers: + Tenant: + - ATD-INFRA + netelements: + spine1: + - spine1-base + spine2: + - spine2-base + spine3: + - spine3-base + spine4: + - spine4-base + leaf1: + - leaf1-base + leaf2: + - leaf2-base + borderleaf1: + - borderleaf1-base + borderleaf2: + - borderleaf2-base + leaf3: + - leaf3-base + leaf4: + - leaf4-base + host3: + - host3-base + host4: + - host4-base + host1: + - host1-base + host2: + - host2-base \ No newline at end of file diff --git a/topologies/training-level-3-cl/files/hosts b/topologies/training-level-3-cl/files/hosts new file mode 100644 index 000000000..b01ba8483 --- /dev/null +++ b/topologies/training-level-3-cl/files/hosts @@ -0,0 +1,24 @@ +127.0.0.1 localhost +192.168.0.11 spine1 +192.168.0.12 spine2 +192.168.0.13 spine3 +192.168.0.14 spine4 +192.168.0.21 leaf1 +192.168.0.22 leaf2 +192.168.0.23 leaf3 +192.168.0.24 leaf4 +192.168.0.25 borderleaf1 +192.168.0.26 borderleaf2 +192.168.0.41 server1 +192.168.0.42 server2 +192.168.0.43 server3 +192.168.0.44 server4 +192.168.0.51 host1 +192.168.0.52 host2 +192.168.0.53 host3 +192.168.0.54 host4 +192.168.0.101 host5 +192.168.0.102 host6 +192.168.0.103 host7 +192.168.0.104 host8 +192.168.0.5 cvp diff --git a/topologies/training-level-3-cl/files/menus/default.yaml b/topologies/training-level-3-cl/files/menus/default.yaml new file mode 100644 index 000000000..7edae00fc --- /dev/null +++ b/topologies/training-level-3-cl/files/menus/default.yaml @@ -0,0 +1,2 @@ +--- +default_menu: training-l3.yaml \ No newline at end of file diff --git a/topologies/training-level-3-cl/files/menus/training-l3.yaml b/topologies/training-level-3-cl/files/menus/training-l3.yaml new file mode 100644 index 000000000..0b24a5ed6 --- /dev/null +++ b/topologies/training-level-3-cl/files/menus/training-l3.yaml @@ -0,0 +1,137 @@ +--- + lab_list: + reset: + description: "Reset All Devices to Base Lab (reset)" + l2evpn: + description: "Start L2EVPN LAB" + l3evpn: + description: "Start L3EVPN LAB" + multicast: + description: "Start MULTICAST LAB" + labconfiglets: + reset: + spine1: + - "spine1-base" + spine2: + - "spine2-base" + spine3: + - "spine3-base" + spine4: + - "spine4-base" + leaf1: + - "leaf1-base" + leaf2: + - "leaf2-base" + leaf3: + - "leaf3-base" + leaf4: + - "leaf4-base" + host1: + - "host1-base" + host2: + - "host2-base" + host3: + - "host3-base" + host4: + - "host4-base" + borderleaf1: + - "borderleaf1-base" + borderleaf2: + - "borderleaf2-base" + l2evpn: + spine1: + - "spine1-base" + spine2: + - "spine2-base" + spine3: + - "spine3-base" + spine4: + - "spine4-base" + leaf1: + - "leaf1-base" + leaf2: + - "leaf2-base" + leaf3: + - "leaf3-base" + leaf4: + - "leaf4-base" + host1: + - "host1-base" + host2: + - "host2-base" + host3: + - "host3-base" + host4: + - "host4-base" + borderleaf1: + - "borderleaf1-base" + borderleaf2: + - "borderleaf2-base" + l3evpn: + spine1: + - "spine1-base" + spine2: + - "spine2-base" + spine3: + - "spine3-base" + spine4: + - "spine4-base" + leaf1: + - "leaf1-base" + leaf2: + - "leaf2-base" + leaf3: + - "leaf3-base" + leaf4: + - "leaf4-base" + host1: + - "host1-base" + host2: + - "host2-base" + host3: + - "host3-base" + host4: + - "host4-base" + borderleaf1: + - "borderleaf1-base" + borderleaf2: + - "borderleaf2-base" + multicast: + spine1: + - "spine1-base" + - "Spine1-Multicast-Start" + spine2: + - "spine2-base" + - "Spine2-Multicast-Start" + spine3: + - "spine3-base" + - "Spine3-Multicast-Start" + spine4: + - "spine4-base" + - "Spine4-Multicast-Start" + leaf1: + - "leaf1-base" + - "Leaf1-Multicast-Start" + leaf2: + - "leaf2-base" + - "Leaf2-Multicast-Start" + leaf3: + - "leaf3-base" + - "Leaf3-Multicast-Start" + leaf4: + - "leaf4-base" + - "Leaf4-Multicast-Start" + host1: + - "host1-base" + host2: + - "host2-base" + host3: + - "host3-base" + host4: + - "host4-base" + borderleaf1: + - "borderleaf1-base" + - "BorderLeaf1-Multicast-Start" + borderleaf2: + - "borderleaf2-base" + - "BorderLeaf2-Multicast-Start" diff --git a/topologies/training-level-3-cl/files/scripts/Authenticate-CVP b/topologies/training-level-3-cl/files/scripts/Authenticate-CVP new file mode 100644 index 000000000..144bb13eb --- /dev/null +++ b/topologies/training-level-3-cl/files/scripts/Authenticate-CVP @@ -0,0 +1,32 @@ +import requests +import json + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + +# Print user details + +print "User Name:%s\n "%output['username'] +print "First Name: %s\n "%output['user']['firstName'] +print "Last Name: %s\n "%output['user']['lastName'] +print "User Permissions: %s\n "%output['permissionList'] +print "Cookie Jar: %s\n "%cookies diff --git a/topologies/training-level-3-cl/files/scripts/Authenticate-CVP2 b/topologies/training-level-3-cl/files/scripts/Authenticate-CVP2 new file mode 100644 index 000000000..3f6bf9190 --- /dev/null +++ b/topologies/training-level-3-cl/files/scripts/Authenticate-CVP2 @@ -0,0 +1,48 @@ +import requests +import json + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + +# Print user details + +print "User Name:%s\n "%output['username'] +print "First Name: %s\n "%output['user']['firstName'] +print "Last Name: %s\n "%output['user']['lastName'] +print "User Permissions: %s\n "%output['permissionList'] +print "Cookie Jar: %s\n "%cookies + +#Create an HTTP GET request to the CVP server + +getConfigletURL = "/cvpservice/configlet/getConfiglets.do?" +getConfigletParams = {'startIndex':'0','endIndex':'0','type':'Configlet'} +response = requests.get(url+getConfigletURL,cookies=cookies, params=getConfigletParams,verify=False) +assert response.ok +outputConfiglets = response.json() + +# Print Configlet details + +for configlet in outputConfiglets['data']: + print "ConfigletName: %s"%configlet['name'] + print "ConfigletKey: %s"%configlet['key'] + print "\n" + diff --git a/topologies/training-level-3-cl/files/scripts/Authenticate-CVP3 b/topologies/training-level-3-cl/files/scripts/Authenticate-CVP3 new file mode 100644 index 000000000..2445806ea --- /dev/null +++ b/topologies/training-level-3-cl/files/scripts/Authenticate-CVP3 @@ -0,0 +1,95 @@ +import requests +import json + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + +# Print user details + +print "User Name:%s\n "%output['username'] +print "First Name: %s\n "%output['user']['firstName'] +print "Last Name: %s\n "%output['user']['lastName'] +print "User Permissions: %s\n "%output['permissionList'] +print "Cookie Jar: %s\n "%cookies + +#Create an HTTP GET request to the CVP server + +getConfigletURL = "/cvpservice/configlet/getConfiglets.do?" +getConfigletParams = {'startIndex':'0','endIndex':'0','type':'Configlet'} +response = requests.get(url+getConfigletURL,cookies=cookies, params=getConfigletParams,verify=False) +assert response.ok +outputConfiglets = response.json() + +# Print Configlet details + +for configlet in outputConfiglets['data']: + print "ConfigletName: %s"%configlet['name'] + print "ConfigletKey: %s"%configlet['key'] + print "\n" +# Create an HTTP GET request to the CVP server + +getConfigletHistoryURL = "/cvpservice/configlet/getConfigletHistory.do?" +getConfigletParams = {'configletId':'configlet_32_438214998013','startIndex':'0','endIndex':'0'} +response = requests.get(url+getConfigletHistoryURL,cookies=cookies, params=getConfigletParams,verify=False) +assert response.ok +outputConfigletHistory = response.json() + +# Print Configlet details + +for entry in outputConfigletHistory['configletHistory']: + print "ConfigletKey: %s"%entry['key'] + print "ConfigletOldConfig: %s"%entry['oldConfig'] + print "ConfigletNewConfig: %s"%entry['newConfig'] + print "\n" + + +# Create an HTTP GET request to the CVP server + +getConfigletDetailURL = "/cvpservice/configlet/getConfigletByName.do?" +getConfigletParams = {'name':'VLANs'} +response = requests.get(url+getConfigletDetailURL,cookies=cookies, params=getConfigletParams,verify=False) +assert response.ok +outputConfigletDetail = response.json() + +# Print Configlet details + +print "ConfigletKey: %s"%outputConfigletDetail['key'] +print "ConfigletName: %s"%outputConfigletDetail['name'] +print "ConfigletConfig: %s"%outputConfigletDetail['config'] +print "ConfigletNote: %s"%outputConfigletDetail['note'] +print "\n" + + +# Create an HTTP POST request to the CVP server + +headers = { 'Content-Type': 'application/json' } +postConfigletChangeURL = "/cvpservice/configlet/updateConfiglet.do" +changeData = json.dumps({"config": "! some configuration here", "key": "configlet_32_438214998013", "name": "VLANs"}) +response = requests.post(url+postConfigletChangeURL, cookies=cookies, data=changeData,headers=headers,verify=False) +assert response.ok +outputConfigletChange = response.json() + +# Print Configlet details + +print "ConfigletChange: %s"%outputConfigletChange['data'] +print "\n" + diff --git a/topologies/training-level-3-cl/files/scripts/Configlet1 b/topologies/training-level-3-cl/files/scripts/Configlet1 new file mode 100644 index 000000000..3f6bf9190 --- /dev/null +++ b/topologies/training-level-3-cl/files/scripts/Configlet1 @@ -0,0 +1,48 @@ +import requests +import json + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + +# Print user details + +print "User Name:%s\n "%output['username'] +print "First Name: %s\n "%output['user']['firstName'] +print "Last Name: %s\n "%output['user']['lastName'] +print "User Permissions: %s\n "%output['permissionList'] +print "Cookie Jar: %s\n "%cookies + +#Create an HTTP GET request to the CVP server + +getConfigletURL = "/cvpservice/configlet/getConfiglets.do?" +getConfigletParams = {'startIndex':'0','endIndex':'0','type':'Configlet'} +response = requests.get(url+getConfigletURL,cookies=cookies, params=getConfigletParams,verify=False) +assert response.ok +outputConfiglets = response.json() + +# Print Configlet details + +for configlet in outputConfiglets['data']: + print "ConfigletName: %s"%configlet['name'] + print "ConfigletKey: %s"%configlet['key'] + print "\n" + diff --git a/topologies/training-level-3-cl/files/scripts/ConfigletChange b/topologies/training-level-3-cl/files/scripts/ConfigletChange new file mode 100644 index 000000000..691ff5864 --- /dev/null +++ b/topologies/training-level-3-cl/files/scripts/ConfigletChange @@ -0,0 +1,40 @@ +import requests +import json + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + + +# Create an HTTP POST request to the CVP server + +headers = { 'Content-Type': 'application/json' } +postConfigletChangeURL = "/cvpservice/configlet/addNoteToConfiglet.do" +changeData = json.dumps({"note": "Configlet Changed by API", "key": "configlet_516_7018635812307"}) +response = requests.post(url+postConfigletChangeURL, cookies=cookies, data=changeData,headers=headers,verify=False) +assert response.ok +outputConfigletChange = response.json() + +# Print Configlet details + +print "ConfigletChange: %s"%outputConfigletChange['data'] +print "\n" + diff --git a/topologies/training-level-3-cl/files/scripts/ConfigletDetail b/topologies/training-level-3-cl/files/scripts/ConfigletDetail new file mode 100644 index 000000000..eb2a85937 --- /dev/null +++ b/topologies/training-level-3-cl/files/scripts/ConfigletDetail @@ -0,0 +1,43 @@ +import requests +import json + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + +# Create an HTTP GET request to the CVP server + +getConfigletDetailURL = "/cvpservice/configlet/getConfigletByName.do?" +getConfigletParams = {'name':'VLANs'} +response = requests.get(url+getConfigletDetailURL,cookies=cookies, params=getConfigletParams,verify=False) +assert response.ok +outputConfigletDetail = response.json() + +# Print Configlet details + +print "ConfigletKey: %s"%outputConfigletDetail['key'] +print "ConfigletName: %s"%outputConfigletDetail['name'] +print "ConfigletConfig: %s"%outputConfigletDetail['config'] +print "ConfigletNote: %s"%outputConfigletDetail['note'] +print "\n" + + + diff --git a/topologies/training-level-3-cl/files/scripts/ConfigletHistory b/topologies/training-level-3-cl/files/scripts/ConfigletHistory new file mode 100644 index 000000000..71f1ac693 --- /dev/null +++ b/topologies/training-level-3-cl/files/scripts/ConfigletHistory @@ -0,0 +1,41 @@ +import requests +import json + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + +# Create an HTTP GET request to the CVP server + +getConfigletHistoryURL = "/cvpservice/configlet/getConfigletHistory.do?" +getConfigletParams = {'configletId':'configlet_344_7351420097365','startIndex':'0','endIndex':'0'} +response = requests.get(url+getConfigletHistoryURL,cookies=cookies, params=getConfigletParams,verify=False) +assert response.ok +outputConfigletHistory = response.json() + +# Print Configlet details + +for entry in outputConfigletHistory['configletHistory']: + print "ConfigletKey: %s"%entry['key'] + print "ConfigletOldConfig: \n%s"%entry['oldConfig'] + print "ConfigletNewConfig: \n%s"%entry['newConfig'] + print "\n" + diff --git a/topologies/training-level-3-cl/files/scripts/TaskBase b/topologies/training-level-3-cl/files/scripts/TaskBase new file mode 100644 index 000000000..6f8deccaf --- /dev/null +++ b/topologies/training-level-3-cl/files/scripts/TaskBase @@ -0,0 +1,59 @@ +import requests +import json + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + + +# Create an HTTP GET request to the CVP server + +getTasksURL = "/cvpservice/task/getTasks.do?" +getTasksParams = {'startIndex':'0','endIndex':'0','queryparam':'Pending'} +response = requests.get(url+getTasksURL,cookies=cookies, params=getTasksParams,verify=False) +assert response.ok +outputPendingTasks = response.json() + + +# Print Tasks Created by Current User +taskList = [ ] +for entry in outputPendingTasks['data']: + if str(entry['createdBy']) == str(CVP_USER): + print "TaskNumber: %s"%entry['workOrderId'] + taskList.append(str(entry['workOrderId'])) +print "TaskList: %s"%taskList + + + +# Create an HTTP POST request to the CVP server + +headers = { 'Content-Type': 'application/json' } +postTaskLogURL = "/cvpservice/workflow/addWorkOrderLog.do" +taskLogData = json.dumps({"taskId": taskList[1],"message": "This is a test Change","source": "CVP REST API"}) +response = requests.post(url+postTaskLogURL, cookies=cookies, data=taskLogData,headers=headers,verify=False) +assert response.ok +outputTaskLog = response.json() + +# Print Configlet details + +print "TaskLogAmmend: %s"%outputTaskLog['data'] +print "\n" + diff --git a/topologies/training-level-3-cl/files/scripts/TaskCVP1 b/topologies/training-level-3-cl/files/scripts/TaskCVP1 new file mode 100644 index 000000000..1ebd05764 --- /dev/null +++ b/topologies/training-level-3-cl/files/scripts/TaskCVP1 @@ -0,0 +1,48 @@ +import requests +import json + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + +# Print user details + +print "User Name:%s\n "%output['username'] +print "First Name: %s\n "%output['user']['firstName'] +print "Last Name: %s\n "%output['user']['lastName'] + + +getTasksURL = "/cvpservice/task/getTasks.do?" +getTasksParams = {'startIndex':'0','endIndex':'0'} +response = requests.get(url+getTasksURL,cookies=cookies, params=getTasksParams,verify=False) +assert response.ok +outputPendingTasks = response.json() + + +# Print Tasks Created by Current User +taskList = [ ] +for entry in outputPendingTasks['data']: + if str(entry['createdBy']) == str(CVP_USER): + print( "TaskNumber: %s Description: %s" %(entry['workOrderId'],entry['description'])) + taskList.append(str(entry['workOrderId'])) +#print "TaskList: %s"%taskList + + diff --git a/topologies/training-level-3-cl/files/scripts/TaskExecute b/topologies/training-level-3-cl/files/scripts/TaskExecute new file mode 100644 index 000000000..3db487284 --- /dev/null +++ b/topologies/training-level-3-cl/files/scripts/TaskExecute @@ -0,0 +1,56 @@ +import requests +import json + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + + +# Create an HTTP GET request to the CVP server + +getTasksURL = "/cvpservice/task/getTasks.do?" +getTasksParams = {'startIndex':'0','endIndex':'0','queryparam':'Pending'} +response = requests.get(url+getTasksURL,cookies=cookies, params=getTasksParams,verify=False) +assert response.ok +outputPendingTasks = response.json() + + +# Print Tasks Created by Current User +taskList = [ ] +for entry in outputPendingTasks['data']: + if str(entry['createdBy']) == str(CVP_USER): + print "TaskNumber: %s"%entry['workOrderId'] + taskList.append(str(entry['workOrderId'])) +print "TaskList: %s"%taskList + + + +headers = { 'Content-Type': 'application/json' } +postTaskExecuteURL = "/cvpservice/task/executeTask.do" +for taskNumber in taskList: + executeData = json.dumps({'data': [taskNumber]}) + response = requests.post(url+postTaskExecuteURL, cookies=cookies,data=executeData,headers=headers,verify=False) + assert response.ok + outputExecuteTask = response.json() + print (outputExecuteTask['data']) + print "Task: "+str(taskNumber)+" Execute: "+str(outputExecuteTask['data']) + print "\n" + diff --git a/topologies/training-level-3-cl/files/scripts/TaskLog b/topologies/training-level-3-cl/files/scripts/TaskLog new file mode 100644 index 000000000..c835008b8 --- /dev/null +++ b/topologies/training-level-3-cl/files/scripts/TaskLog @@ -0,0 +1,59 @@ +import requests +import json + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + + +# Create an HTTP GET request to the CVP server + +getTasksURL = "/cvpservice/task/getTasks.do?" +getTasksParams = {'startIndex':'0','endIndex':'0'} +response = requests.get(url+getTasksURL,cookies=cookies, params=getTasksParams,verify=False) +assert response.ok +outputTasks = response.json() + + +# Print Tasks Created by Current User +taskList = [ ] +for entry in outputTasks['data']: + if str(entry['createdBy']) == str(CVP_USER): + print "TaskNumber: %s"%entry['workOrderId'] + taskList.append(str(entry['workOrderId'])) +print "TaskList: %s"%taskList + + + +# Create an HTTP POST request to the CVP server + +headers = { 'Content-Type': 'application/json' } +postTaskLogURL = "/cvpservice/workflow/addWorkOrderLog.do" +taskLogData = json.dumps({"taskId": taskList[0],"message": "This is a test Change","source": "CVP REST API"}) +response = requests.post(url+postTaskLogURL, cookies=cookies, data=taskLogData,headers=headers,verify=False) +assert response.ok +outputTaskLog = response.json() + +# Print Configlet details + +print "TaskLogAmmend: %s"%outputTaskLog['data'] +print "\n" + diff --git a/topologies/training-level-3-cl/files/scripts/TaskLog1 b/topologies/training-level-3-cl/files/scripts/TaskLog1 new file mode 100644 index 000000000..c835008b8 --- /dev/null +++ b/topologies/training-level-3-cl/files/scripts/TaskLog1 @@ -0,0 +1,59 @@ +import requests +import json + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + + +# Create an HTTP GET request to the CVP server + +getTasksURL = "/cvpservice/task/getTasks.do?" +getTasksParams = {'startIndex':'0','endIndex':'0'} +response = requests.get(url+getTasksURL,cookies=cookies, params=getTasksParams,verify=False) +assert response.ok +outputTasks = response.json() + + +# Print Tasks Created by Current User +taskList = [ ] +for entry in outputTasks['data']: + if str(entry['createdBy']) == str(CVP_USER): + print "TaskNumber: %s"%entry['workOrderId'] + taskList.append(str(entry['workOrderId'])) +print "TaskList: %s"%taskList + + + +# Create an HTTP POST request to the CVP server + +headers = { 'Content-Type': 'application/json' } +postTaskLogURL = "/cvpservice/workflow/addWorkOrderLog.do" +taskLogData = json.dumps({"taskId": taskList[0],"message": "This is a test Change","source": "CVP REST API"}) +response = requests.post(url+postTaskLogURL, cookies=cookies, data=taskLogData,headers=headers,verify=False) +assert response.ok +outputTaskLog = response.json() + +# Print Configlet details + +print "TaskLogAmmend: %s"%outputTaskLog['data'] +print "\n" + diff --git a/topologies/training-level-3-cl/files/scripts/TaskLogView b/topologies/training-level-3-cl/files/scripts/TaskLogView new file mode 100644 index 000000000..7b34904dd --- /dev/null +++ b/topologies/training-level-3-cl/files/scripts/TaskLogView @@ -0,0 +1,51 @@ +import requests +import json +import pprint + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + + +# Create an HTTP GET request to the CVP server + +getTasksURL = "/cvpservice/task/getTasks.do?" +getTasksParams = {'startIndex':'0','endIndex':'0'} +response = requests.get(url+getTasksURL,cookies=cookies, params=getTasksParams,verify=False) +assert response.ok +outputTasks = response.json() + +taskList = [ ] +for entry in outputTasks['data']: + if str(entry['createdBy']) == str(CVP_USER): + taskList.append(str(entry['workOrderId'])) + +getTaskLogURL = "/cvpservice/task/getLogsById.do?" +#getTaskLogParams = {'startIndex':'0','endIndex':'0','id':'0'} +getTaskLogParams = {'startIndex':'0','endIndex':'0','id':taskList[0]} +response = requests.get(url+getTaskLogURL,cookies=cookies, params=getTaskLogParams,verify=False) +assert response.ok +outputTaskLog = response.json() + +# Print TaskLog details +print "TaskLogOutput: %s" %outputTaskLog['data'] +print "\n" + diff --git a/topologies/training-level-3-cl/files/scripts/TaskNote b/topologies/training-level-3-cl/files/scripts/TaskNote new file mode 100644 index 000000000..6cd1d6cfd --- /dev/null +++ b/topologies/training-level-3-cl/files/scripts/TaskNote @@ -0,0 +1,52 @@ +import requests +import json +import pprint + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + + +# Create an HTTP GET request to the CVP server + +getTasksURL = "/cvpservice/task/getTasks.do?" +getTasksParams = {'startIndex':'0','endIndex':'0'} +response = requests.get(url+getTasksURL,cookies=cookies, params=getTasksParams,verify=False) +assert response.ok +outputTasks = response.json() + +taskList = [ ] +for entry in outputTasks['data']: + if str(entry['createdBy']) == str(CVP_USER): + taskList.append(str(entry['workOrderId'])) + +headers = { 'Content-Type': 'application/json' } +postTaskNoteURL = "/cvpservice/task/addNoteToTask.do" +taskNoteData = json.dumps({"workOrderId": taskList[0],"note": "This is a test Change using the API"}) +response = requests.post(url+postTaskNoteURL, cookies=cookies, data=taskNoteData,headers=headers,verify=False) +assert response.ok +outputTaskNote = response.json() + +# Print Task details + +print "TaskNoteAmmend: %s"%outputTaskNote['data'] +print "\n" + diff --git a/topologies/training-level-3-cl/labguides/.gitignore b/topologies/training-level-3-cl/labguides/.gitignore new file mode 100644 index 000000000..ed86553f4 --- /dev/null +++ b/topologies/training-level-3-cl/labguides/.gitignore @@ -0,0 +1,2 @@ +.DS_Store +build/ diff --git a/topologies/training-level-3-cl/labguides/Makefile b/topologies/training-level-3-cl/labguides/Makefile new file mode 100644 index 000000000..874ed2529 --- /dev/null +++ b/topologies/training-level-3-cl/labguides/Makefile @@ -0,0 +1,20 @@ +# Minimal makefile for Sphinx documentation +# + +# You can set these variables from the command line. +SPHINXOPTS = +SPHINXBUILD = python -msphinx +SPHINXPROJ = ATD +SOURCEDIR = source +BUILDDIR = build + +# Put it first so that "make" without argument is like "make help". +help: + @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) + +.PHONY: help Makefile + +# Catch-all target: route all unknown targets to Sphinx using the new +# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). +%: Makefile + @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) \ No newline at end of file diff --git a/topologies/training-level-3-cl/labguides/readme.md b/topologies/training-level-3-cl/labguides/readme.md new file mode 100644 index 000000000..5a5369ecd --- /dev/null +++ b/topologies/training-level-3-cl/labguides/readme.md @@ -0,0 +1,12 @@ +# Lab Guides +In this folder are rST (restructured text) formatted lab guides for the ATD event. + +## Building +To build the documentation, you will need to install Sphinx and sphinx_bootstrap_theme with `pip`: + +`pip install sphinx sphinx_bootstrap_theme` + +## Contributing +At some point, this section may expand, but for now please make sure to review existing files for formatting guidelines. + +Please see https://github.com/ralsina/rst-cheatsheet/blob/master/rst-cheatsheet.rst for a cheat sheet. \ No newline at end of file diff --git a/topologies/training-level-3-cl/labguides/source/_static/arista_logo.png b/topologies/training-level-3-cl/labguides/source/_static/arista_logo.png new file mode 100644 index 000000000..2376e72b9 Binary files /dev/null and b/topologies/training-level-3-cl/labguides/source/_static/arista_logo.png differ diff --git a/topologies/training-level-3-cl/labguides/source/_static/arista_logo_160by26.png b/topologies/training-level-3-cl/labguides/source/_static/arista_logo_160by26.png new file mode 100644 index 000000000..d0d0cbeec Binary files /dev/null and b/topologies/training-level-3-cl/labguides/source/_static/arista_logo_160by26.png differ diff --git a/topologies/training-level-3-cl/labguides/source/_static/arista_logo_320by52.png b/topologies/training-level-3-cl/labguides/source/_static/arista_logo_320by52.png new file mode 100644 index 000000000..43dfa7ed2 Binary files /dev/null and b/topologies/training-level-3-cl/labguides/source/_static/arista_logo_320by52.png differ diff --git a/topologies/training-level-3-cl/labguides/source/_static/cloudvision-icon.png b/topologies/training-level-3-cl/labguides/source/_static/cloudvision-icon.png new file mode 100644 index 000000000..c309ed98e Binary files /dev/null and b/topologies/training-level-3-cl/labguides/source/_static/cloudvision-icon.png differ diff --git a/topologies/training-level-3-cl/labguides/source/_static/logo.jpg b/topologies/training-level-3-cl/labguides/source/_static/logo.jpg new file mode 100644 index 000000000..6eda41f7e Binary files /dev/null and b/topologies/training-level-3-cl/labguides/source/_static/logo.jpg differ diff --git a/topologies/training-level-3-cl/labguides/source/_static/my-styles.css b/topologies/training-level-3-cl/labguides/source/_static/my-styles.css new file mode 100644 index 000000000..1150528ee --- /dev/null +++ b/topologies/training-level-3-cl/labguides/source/_static/my-styles.css @@ -0,0 +1,41 @@ +body { + background-color: #FFFFFF; + color: #002859 +} + +.navbar-inverse { + background-image: -webkit-linear-gradient(#6d94bf, #446e9b 50%, #002859); + background-image: -o-linear-gradient(#6d94bf, #446e9b 50%, #002859); + background-image: -webkit-gradient(linear, left top, left bottom, from(#6d94bf), color-stop(50%, #446e9b), to(#002859)); + background-image: linear-gradient(#6d94bf, #446e9b 50%, #002859); + background-repeat: no-repeat; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff6d94bf', endColorstr='#ff002859', GradientType=0); + -webkit-filter: none; + filter: none; + border: 1px solid #345578; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.3) +} + +.navbar-brand { + background: url("arista_logo_320by52.png") center / contain no-repeat; + display: inline-block; + width: 1px; + padding: 0 10px 0 60px; + margin-right: 30px; + margin-left: -30px; +} + +.navbar-brand>img { + display: inline-block; + padding: 0 100px 0 0px; + margin-right: 20px; +} +a.navbar-brand { + display: inline-block; + padding: 15px 0 0 120px; +} + +footer { + background-color: #002859; + color: #FFFFFF; +} diff --git a/topologies/training-level-3-cl/labguides/source/conf.py b/topologies/training-level-3-cl/labguides/source/conf.py new file mode 100644 index 000000000..afccec09c --- /dev/null +++ b/topologies/training-level-3-cl/labguides/source/conf.py @@ -0,0 +1,247 @@ +# -*- coding: utf-8 -*- +# +# ATD documentation build configuration file, created by +# sphinx-quickstart on Tue Apr 17 10:00:04 2018. +# +# This file is execfile()d with the current directory set to its +# containing dir. +# +# Note that not all possible configuration values are present in this +# autogenerated file. +# +# All configuration values have a default; values that are commented out +# serve to show the default. + +# If extensions (or modules to document with autodoc) are in another directory, +# add these directories to sys.path here. If the directory is relative to the +# documentation root, use os.path.abspath to make it absolute, like shown here. +# +# import os +# import sys +# sys.path.insert(0, os.path.abspath('.')) + +import sphinx_bootstrap_theme + +# Importing datetime module to auto update copyright year +from datetime import date + +# -- General configuration ------------------------------------------------ + +# If your documentation needs a minimal Sphinx version, state it here. +# +# needs_sphinx = '1.0' + +# Add any Sphinx extension module names here, as strings. They can be +# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom +# ones. + +# Add any paths that contain templates here, relative to this directory. +templates_path = ['_templates'] + +# The suffix(es) of source filenames. +# You can specify multiple suffix as a list of string: +# +# source_suffix = ['.rst', '.md'] +source_suffix = '.rst' + +# The master toctree document. +master_doc = 'index' + +# General information about the project. +# Updating copyright var to auto update with current year +project = u'Arista ATD' +copyright = u'{0}, Arista Networks'.format(date.today().year) +author = u'Arista ATD atd-help@arista.com' + +# Show Source +html_show_sourcelink = False + +# The version info for the project you're documenting, acts as replacement for +# |version| and |release|, also used in various other places throughout the +# built documents. +# +# The short X.Y version. +version = u'Version 3.0' +# The full version, including alpha/beta/rc tags. +release = u'1' + +# The language for content autogenerated by Sphinx. Refer to documentation +# for a list of supported languages. +# +# This is also used if you do content translation via gettext catalogs. +# Usually you set "language" from the command line for these cases. +language = None + +# List of patterns, relative to source directory, that match files and +# directories to ignore when looking for source files. +# This patterns also effect to html_static_path and html_extra_path +exclude_patterns = [] + +# The name of the Pygments (syntax highlighting) style to use. +pygments_style = 'sphinx' + +# If true, `todo` and `todoList` produce output, else they produce nothing. +todo_include_todos = False + + +# -- Options for HTML output ---------------------------------------------- + +# The theme to use for HTML and HTML Help pages. See the documentation for +# a list of builtin themes. +# +#html_theme = 'alabaster' +html_theme = 'bootstrap' +html_theme_path = sphinx_bootstrap_theme.get_html_theme_path() + +# Add any paths that contain custom static files (such as style sheets) here, +# relative to this directory. They are copied after the builtin static files, +# so a file named "default.css" will overwrite the builtin "default.css". +html_static_path = ['_static'] + +# Theme options are theme-specific and customize the look and feel of a theme +# further. For a list of options available for each theme, see the +# documentation. +# +html_theme_options = { + # Navigation bar title. (Default: ``project`` value) + 'navbar_title': "ATD", + + # Tab name for entire site. (Default: "Site") + 'navbar_site_name': "Table of Contents", + + # A list of tuples containing pages or urls to link to. + # Valid tuples should be in the following forms: + # (name, page) # a link to a page + # (name, "/aa/bb", 1) # a link to an arbitrary relative url + # (name, "http://example.com", True) # arbitrary absolute url + # Note the "1" or "True" value above as the third argument to indicate + # an arbitrary url. + 'navbar_links': [ + ("Arista", "http://www.arista.com", True), + ], + + # Render the next and previous page links in navbar. (Default: true) + 'navbar_sidebarrel': True, + + # Render the current pages TOC in the navbar. (Default: true) + 'navbar_pagenav': False, + + # Tab name for the current pages TOC. (Default: "Page") + 'navbar_pagenav_name': "Page", + + # Global TOC depth for "site" navbar tab. (Default: 1) + # Switching to -1 shows all levels. + 'globaltoc_depth': 2, + + # Include hidden TOCs in Site navbar? + # + # Note: If this is "false", you cannot have mixed ``:hidden:`` and + # non-hidden ``toctree`` directives in the same page, or else the build + # will break. + # + # Values: "true" (default) or "false" + 'globaltoc_includehidden': "true", + + # HTML navbar class (Default: "navbar") to attach to
    element. + # For black navbar, do "navbar navbar-inverse" + #'navbar_class': "navbar navbar-inverse", + 'navbar_class': "navbar", + + # Fix navigation bar to top of page? + # Values: "true" (default) or "false" + 'navbar_fixed_top': "true", + + # Location of link to source. + # Options are "nav" (default), "footer" or anything else to exclude. + #'source_link_position': "nav", + + # Bootswatch (http://bootswatch.com/) theme. + # + # Options are nothing (default) or the name of a valid theme + # such as "cosmo" or "sandstone". + # + # The set of valid themes depend on the version of Bootstrap + # that's used (the next config option). + # + # Currently, the supported themes are: + # - Bootstrap 2: https://bootswatch.com/2 + # - Bootstrap 3: https://bootswatch.com/3 + 'bootswatch_theme': "spacelab", + + # Choose Bootstrap version. + # Values: "3" (default) or "2" (in quotes) + 'bootstrap_version': "3", +} + +# The name for this set of Sphinx documents. If None, it defaults to +# " v documentation". +#html_title = "AristaATD" + +# A shorter title for the navigation bar. Default is the same as html_title. +#html_short_title = "Demo" + +# (Optional) Logo. Should be small enough to fit the navbar (ideally 24x24). +# Path should be relative to the ``_static`` files directory. +#html_logo = "cloudvision-icon.png" + +# -- Options for HTMLHelp output ------------------------------------------ + +# Output file base name for HTML help builder. +htmlhelp_basename = 'AristaATD' + + +# -- Options for LaTeX output --------------------------------------------- + +latex_elements = { + # The paper size ('letterpaper' or 'a4paper'). + # + # 'papersize': 'letterpaper', + + # The font size ('10pt', '11pt' or '12pt'). + # + # 'pointsize': '10pt', + + # Additional stuff for the LaTeX preamble. + # + # 'preamble': '', + + # Latex figure (float) alignment + # + # 'figure_align': 'htbp', +} + +# Grouping the document tree into LaTeX files. List of tuples +# (source start file, target name, title, +# author, documentclass [howto, manual, or own class]). +latex_documents = [ + (master_doc, 'ATD.tex', u'ATD Lab Guide', + u'ATD Help (atd-help@arista.com)', 'manual'), +] + + +# -- Options for manual page output --------------------------------------- + +# One entry per manual page. List of tuples +# (source start file, name, description, authors, manual section). +man_pages = [ + (master_doc, 'atd', u'ATD Lab Guide', + [author], 1) +] + + +# -- Options for Texinfo output ------------------------------------------- + +# Grouping the document tree into Texinfo files. List of tuples +# (source start file, target name, title, author, +# dir menu entry, description, category) +texinfo_documents = [ + (master_doc, 'ATD', u'ATD Lab Guide', + author, 'ATD', 'Lab Documentation.', + 'Miscellaneous'), +] + + +def setup(app): + app.add_stylesheet("my-styles.css") # also can be a full URL + # app.add_stylesheet("ANOTHER.css") + # app.add_stylesheet("AND_ANOTHER.css") diff --git a/topologies/training-level-3-cl/labguides/source/connecting.rst b/topologies/training-level-3-cl/labguides/source/connecting.rst new file mode 100644 index 000000000..10ae589ef --- /dev/null +++ b/topologies/training-level-3-cl/labguides/source/connecting.rst @@ -0,0 +1,28 @@ +Connecting +========== + +1. Log into the Arista Test Drive portal with your assigned URL. If you + don’t have one, please see your ATD staff. + +.. image:: images/connecting/nested_connecting_1.png + +2. SSH to the public address assigned to the LabAccess jumphost server (this is the Topology Address shown in the "Welcome to Arista's Test Drive!" picture above). The username is ``arista`` and the password is ``{REPLACE_PWD}``: + + .. code-block:: text + + ssh arista@{unique_address}.topo.testdrive.arista.com + +| + +.. image:: images/connecting/nested_connecting_2.png + :align: center + +| + +3. The LabAccess menu allows users to connect to each device and specify + lab topology. It is recommended to open multiple SSH sessions or use + the Screen option (under the SSH Menu) to jump between devices rapidly. + + You can also Access the LabAccess Menu from your browser by clicking on `Console Access` + +.. image:: images/connecting/nested_connecting_3.png diff --git a/topologies/training-level-3-cl/labguides/source/images/connecting/nested_connecting_1.png b/topologies/training-level-3-cl/labguides/source/images/connecting/nested_connecting_1.png new file mode 100644 index 000000000..aa76597b8 Binary files /dev/null and b/topologies/training-level-3-cl/labguides/source/images/connecting/nested_connecting_1.png differ diff --git a/topologies/training-level-3-cl/labguides/source/images/connecting/nested_connecting_2.png b/topologies/training-level-3-cl/labguides/source/images/connecting/nested_connecting_2.png new file mode 100644 index 000000000..2c6b51a2b Binary files /dev/null and b/topologies/training-level-3-cl/labguides/source/images/connecting/nested_connecting_2.png differ diff --git a/topologies/training-level-3-cl/labguides/source/images/connecting/nested_connecting_3.png b/topologies/training-level-3-cl/labguides/source/images/connecting/nested_connecting_3.png new file mode 100644 index 000000000..1cc7402a3 Binary files /dev/null and b/topologies/training-level-3-cl/labguides/source/images/connecting/nested_connecting_3.png differ diff --git a/topologies/training-level-3-cl/labguides/source/images/logo.jpg b/topologies/training-level-3-cl/labguides/source/images/logo.jpg new file mode 100644 index 000000000..6eda41f7e Binary files /dev/null and b/topologies/training-level-3-cl/labguides/source/images/logo.jpg differ diff --git a/topologies/training-level-3-cl/labguides/source/index.rst b/topologies/training-level-3-cl/labguides/source/index.rst new file mode 100644 index 000000000..bb76aaa2e --- /dev/null +++ b/topologies/training-level-3-cl/labguides/source/index.rst @@ -0,0 +1,8 @@ +Welcome to the Arista Training documentation! +======================================== + +.. toctree:: + :maxdepth: 1 + :caption: EOS Configuration + + connecting.rst diff --git a/topologies/training-level-3-cl/topo_build.yml b/topologies/training-level-3-cl/topo_build.yml new file mode 100644 index 000000000..9ccba5edb --- /dev/null +++ b/topologies/training-level-3-cl/topo_build.yml @@ -0,0 +1,385 @@ +host_cpu: 4 +cvp_cpu: 32 +cvp_ram: 42 +cvp_nodes: 1 +veos_cpu: 2 +nodes: + - spine1: + ip_addr: 192.168.0.11 + sys_mac: 00:1c:73:b1:c6:01 + neighbors: + - neighborDevice: spine2 + neighborPort: Ethernet1 + port: Ethernet1 + - neighborDevice: spine2 + neighborPort: Ethernet2 + port: Ethernet2 + - neighborDevice: leaf1 + neighborPort: Ethernet3 + port: Ethernet3 + - neighborDevice: leaf2 + neighborPort: Ethernet3 + port: Ethernet4 + - neighborDevice: leaf3 + neighborPort: Ethernet3 + port: Ethernet5 + - neighborDevice: leaf4 + neighborPort: Ethernet3 + port: Ethernet6 + - neighborDevice: borderleaf1 + neighborPort: Ethernet3 + port: Ethernet7 + - neighborDevice: borderleaf2 + neighborPort: Ethernet3 + port: Ethernet8 + - spine2: + ip_addr: 192.168.0.12 + sys_mac: 00:1c:73:b2:c6:01 + neighbors: + - neighborDevice: spine1 + neighborPort: Ethernet1 + port: Ethernet1 + - neighborDevice: spine1 + neighborPort: Ethernet2 + port: Ethernet2 + - neighborDevice: leaf1 + neighborPort: Ethernet4 + port: Ethernet3 + - neighborDevice: leaf2 + neighborPort: Ethernet4 + port: Ethernet4 + - neighborDevice: leaf3 + neighborPort: Ethernet4 + port: Ethernet5 + - neighborDevice: leaf4 + neighborPort: Ethernet4 + port: Ethernet6 + - neighborDevice: borderleaf1 + neighborPort: Ethernet4 + port: Ethernet7 + - neighborDevice: borderleaf2 + neighborPort: Ethernet4 + port: Ethernet8 + - spine3: + ip_addr: 192.168.0.13 + sys_mac: 00:1c:73:b3:c6:01 + neighbors: + - neighborDevice: spine4 + neighborPort: Ethernet1 + port: Ethernet1 + - neighborDevice: spine4 + neighborPort: Ethernet2 + port: Ethernet2 + - neighborDevice: leaf1 + neighborPort: Ethernet5 + port: Ethernet3 + - neighborDevice: leaf2 + neighborPort: Ethernet5 + port: Ethernet4 + - neighborDevice: leaf3 + neighborPort: Ethernet5 + port: Ethernet5 + - neighborDevice: leaf4 + neighborPort: Ethernet5 + port: Ethernet6 + - neighborDevice: borderleaf1 + neighborPort: Ethernet5 + port: Ethernet7 + - neighborDevice: borderleaf2 + neighborPort: Ethernet5 + port: Ethernet8 + - spine4: + ip_addr: 192.168.0.14 + sys_mac: 00:1c:73:b4:c6:01 + neighbors: + - neighborDevice: spine3 + neighborPort: Ethernet1 + port: Ethernet1 + - neighborDevice: spine3 + neighborPort: Ethernet2 + port: Ethernet2 + - neighborDevice: leaf1 + neighborPort: Ethernet6 + port: Ethernet3 + - neighborDevice: leaf2 + neighborPort: Ethernet6 + port: Ethernet4 + - neighborDevice: leaf3 + neighborPort: Ethernet6 + port: Ethernet5 + - neighborDevice: leaf4 + neighborPort: Ethernet6 + port: Ethernet6 + - neighborDevice: borderleaf1 + neighborPort: Ethernet6 + port: Ethernet7 + - neighborDevice: borderleaf2 + neighborPort: Ethernet6 + port: Ethernet8 + - leaf1: + ip_addr: 192.168.0.21 + sys_mac: 00:1c:73:c1:c6:01 + neighbors: + - neighborDevice: leaf2 + neighborPort: Ethernet1 + port: Ethernet1 + - neighborDevice: leaf2 + neighborPort: Ethernet2 + port: Ethernet2 + - neighborDevice: spine1 + neighborPort: Ethernet3 + port: Ethernet3 + - neighborDevice: spine2 + neighborPort: Ethernet3 + port: Ethernet4 + - neighborDevice: spine3 + neighborPort: Ethernet3 + port: Ethernet5 + - neighborDevice: spine4 + neighborPort: Ethernet3 + port: Ethernet6 + - neighborDevice: host1 + neighborPort: Ethernet1 + port: Ethernet7 + - neighborDevice: host5 + neighborPort: Ethernet1 + port: Ethernet8 + - neighborDevice: host2 + neighborPort: Ethernet1 + port: Ethernet9 + - neighborDevice: host6 + neighborPort: Ethernet1 + port: Ethernet10 + - leaf2: + ip_addr: 192.168.0.22 + sys_mac: 00:1c:73:c2:c6:01 + neighbors: + - neighborDevice: leaf1 + neighborPort: Ethernet1 + port: Ethernet1 + - neighborDevice: leaf1 + neighborPort: Ethernet2 + port: Ethernet2 + - neighborDevice: spine1 + neighborPort: Ethernet4 + port: Ethernet3 + - neighborDevice: spine2 + neighborPort: Ethernet4 + port: Ethernet4 + - neighborDevice: spine3 + neighborPort: Ethernet4 + port: Ethernet5 + - neighborDevice: spine4 + neighborPort: Ethernet4 + port: Ethernet6 + - neighborDevice: host1 + neighborPort: Ethernet2 + port: Ethernet7 + - neighborDevice: host5 + neighborPort: Ethernet2 + port: Ethernet8 + - neighborDevice: host2 + neighborPort: Ethernet2 + port: Ethernet9 + - neighborDevice: host6 + neighborPort: Ethernet2 + port: Ethernet10 + - leaf3: + ip_addr: 192.168.0.23 + sys_mac: 00:1c:73:c3:c6:01 + neighbors: + - neighborDevice: leaf4 + neighborPort: Ethernet1 + port: Ethernet1 + - neighborDevice: leaf4 + neighborPort: Ethernet2 + port: Ethernet2 + - neighborDevice: spine1 + neighborPort: Ethernet5 + port: Ethernet3 + - neighborDevice: spine2 + neighborPort: Ethernet5 + port: Ethernet4 + - neighborDevice: spine3 + neighborPort: Ethernet5 + port: Ethernet5 + - neighborDevice: spine4 + neighborPort: Ethernet5 + port: Ethernet6 + - neighborDevice: host3 + neighborPort: Ethernet1 + port: Ethernet7 + - neighborDevice: host7 + neighborPort: Ethernet1 + port: Ethernet8 + - neighborDevice: host4 + neighborPort: Ethernet1 + port: Ethernet9 + - neighborDevice: host8 + neighborPort: Ethernet1 + port: Ethernet10 + - leaf4: + ip_addr: 192.168.0.24 + sys_mac: 00:1c:73:c4:c6:01 + neighbors: + - neighborDevice: leaf3 + neighborPort: Ethernet1 + port: Ethernet1 + - neighborDevice: leaf3 + neighborPort: Ethernet2 + port: Ethernet2 + - neighborDevice: spine1 + neighborPort: Ethernet6 + port: Ethernet3 + - neighborDevice: spine2 + neighborPort: Ethernet6 + port: Ethernet4 + - neighborDevice: spine3 + neighborPort: Ethernet6 + port: Ethernet5 + - neighborDevice: spine4 + neighborPort: Ethernet6 + port: Ethernet6 + - neighborDevice: host3 + neighborPort: Ethernet2 + port: Ethernet7 + - neighborDevice: host7 + neighborPort: Ethernet2 + port: Ethernet8 + - neighborDevice: host4 + neighborPort: Ethernet2 + port: Ethernet9 + - neighborDevice: host8 + neighborPort: Ethernet2 + port: Ethernet10 + - borderleaf1: + ip_addr: 192.168.0.25 + sys_mac: 00:1c:73:c5:c6:01 + neighbors: + - neighborDevice: borderleaf2 + neighborPort: Ethernet1 + port: Ethernet1 + - neighborDevice: borderleaf2 + neighborPort: Ethernet2 + port: Ethernet2 + - neighborDevice: spine1 + neighborPort: Ethernet7 + port: Ethernet3 + - neighborDevice: spine2 + neighborPort: Ethernet7 + port: Ethernet4 + - neighborDevice: spine3 + neighborPort: Ethernet7 + port: Ethernet5 + - neighborDevice: spine4 + neighborPort: Ethernet7 + port: Ethernet6 + - borderleaf2: + ip_addr: 192.168.0.26 + sys_mac: 00:1c:73:c6:c6:01 + neighbors: + - neighborDevice: borderleaf1 + neighborPort: Ethernet1 + port: Ethernet1 + - neighborDevice: borderleaf1 + neighborPort: Ethernet2 + port: Ethernet2 + - neighborDevice: spine1 + neighborPort: Ethernet8 + port: Ethernet3 + - neighborDevice: spine2 + neighborPort: Ethernet8 + port: Ethernet4 + - neighborDevice: spine3 + neighborPort: Ethernet8 + port: Ethernet5 + - neighborDevice: spine4 + neighborPort: Ethernet8 + port: Ethernet6 + - host1: + ip_addr: 192.168.0.51 + sys_mac: 00:1c:73:f1:c6:01 + neighbors: + - neighborDevice: leaf1 + neighborPort: Ethernet7 + port: Ethernet1 + - neighborDevice: leaf2 + neighborPort: Ethernet7 + port: Ethernet2 + - host2: + ip_addr: 192.168.0.52 + sys_mac: 00:1c:73:f2:c6:01 + neighbors: + - neighborDevice: leaf1 + neighborPort: Ethernet9 + port: Ethernet1 + - neighborDevice: leaf2 + neighborPort: Ethernet9 + port: Ethernet2 + - host3: + ip_addr: 192.168.0.53 + sys_mac: 00:1c:73:f3:c6:01 + neighbors: + - neighborDevice: leaf3 + neighborPort: Ethernet7 + port: Ethernet1 + - neighborDevice: leaf4 + neighborPort: Ethernet7 + port: Ethernet2 + - host4: + ip_addr: 192.168.0.54 + sys_mac: 00:1c:73:f4:c6:01 + neighbors: + - neighborDevice: leaf3 + neighborPort: Ethernet9 + port: Ethernet1 + - neighborDevice: leaf4 + neighborPort: Ethernet9 + port: Ethernet2 +servers: + - host5: + image_name: "gcr.io/atd-testdrivetraining-dev/hosts-gui/host1:latest" + ip_addr: 192.168.0.101 + port : 6001 + neighbors: + - neighborDevice: leaf1 + neighborPort: Ethernet8 + port: Ethernet1 + - neighborDevice: leaf2 + neighborPort: Ethernet8 + port: Ethernet2 + - host6: + image_name: "gcr.io/atd-testdrivetraining-dev/hosts-gui/host1:latest" + ip_addr: 192.168.0.102 + port : 6002 + neighbors: + - neighborDevice: leaf1 + neighborPort: Ethernet10 + port: Ethernet1 + - neighborDevice: leaf2 + neighborPort: Ethernet10 + port: Ethernet2 + - host7: + image_name: "gcr.io/atd-testdrivetraining-dev/hosts-gui/host1:latest" + ip_addr: 192.168.0.103 + port : 6003 + neighbors: + - neighborDevice: leaf3 + neighborPort: Ethernet8 + port: Ethernet1 + - neighborDevice: leaf4 + neighborPort: Ethernet8 + port: Ethernet2 + - host8: + image_name: "gcr.io/atd-testdrivetraining-dev/hosts-gui/host1:latest" + ip_addr: 192.168.0.104 + port : 6004 + neighbors: + - neighborDevice: leaf3 + neighborPort: Ethernet10 + port: Ethernet1 + - neighborDevice: leaf4 + neighborPort: Ethernet10 + port: Ethernet2 +additional_ssh_nodes: +additional_clab_nodes: diff --git a/topologies/training-level-avd/atd-topo.png b/topologies/training-level-avd/atd-topo.png new file mode 100644 index 000000000..53ba5d7d9 Binary files /dev/null and b/topologies/training-level-avd/atd-topo.png differ diff --git a/topologies/training-level-avd/configlets/ATD-INFRA b/topologies/training-level-avd/configlets/ATD-INFRA new file mode 100644 index 000000000..de87bc743 --- /dev/null +++ b/topologies/training-level-avd/configlets/ATD-INFRA @@ -0,0 +1,53 @@ +vrf instance MGMT +! +daemon TerminAttr + exec /usr/bin/TerminAttr -cvcompression=gzip -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent -cvaddr=192.168.0.5:9910 -cvauth=token,/tmp/token -cvvrf=MGMT -taillogs -disableaaa + no shutdown +! +alias mlag-reload bash /mnt/flash/shut_intfs && sudo shutdown now -r +alias conint sh interface | i connected +alias senz show interface counter error | nz +alias shmc show int | awk '/^[A-Z]/ { intf = $1 } /, address is/ { print intf, $6 }' +alias snz show interface counter | nz +alias spd show port-channel %1 detail all +alias sqnz show interface counter queue | nz +alias srnz show interface counter rate | nz +alias intdesc + !! Usage: intdesc interface-name description + 10 config + 20 int %1 + 30 desc %2 + 40 exit +! +dns domain arista.lab +! +service routing protocols model multi-agent +! +ntp server vrf MGMT 192.168.0.1 iburst source Management0 +! +radius-server host 192.168.0.1 vrf MGMT key 7 0207165218120E +! +aaa group server radius atds + server 192.168.0.1 vrf MGMT +! +aaa authentication login default group atds local +aaa authorization exec default group atds local +aaa authorization commands all default local +! +username Script secret sha512 $6$PNfpb9anSBQ5/aia$phaa3ar5pwkntenD9WHc6Ed5b96lbW0dc0bjtwPnFLaDiCK8D5Cjl6ewP/xdNbl4PtS6Paq.3SssN8pj05NQm. +username admin privilege 15 role network-admin secret 5 $1$5O85YVVn$HrXcfOivJEnISTMb6xrJc. +username arista privilege 15 role network-admin secret 5 $1$4VjIjfd1$XkUVulbNDESHFzcxDU.Tk1 +! +username arista ssh-key ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC+ERvV4GaPq3FzxY8T+5hMF/1T+l8wiPsVCtOrZU4Hy6NCNlAiDBdA/RUtX5/aOu5JvHyPTVHqWJ0qi9BqU3rxCNl/l2/5UZbm9RPzdZ1QCwoYwPB9/j/tYJV8lZdr6t0yGBfxgzD3oW/zF7a+ZtASaMAu7lkgoqPK2pVIGa+Y9ZCsA0Xq756XpLCw+d3pHKHvIkgWLCo9FoeIv8f/bu5u/ztzRE+Nvl+o5add6MxnjsXz3s7BnW2FX6JNjyp0Z+OXjupQc2gcfFvpd/dA2lCNuuaCHkRgyPwIZtWPmNqMRXPp37mlPwV43qDJRVPQkvh0xPxwS35BbzUxWdT+ZLZv +! +ip radius source-interface Management0 +! +ip routing vrf MGMT +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 +! +management api http-commands + no shutdown + vrf MGMT + no shutdown +! diff --git a/topologies/training-level-avd/configlets/Base-Builder.py b/topologies/training-level-avd/configlets/Base-Builder.py new file mode 100644 index 000000000..167d9c750 --- /dev/null +++ b/topologies/training-level-avd/configlets/Base-Builder.py @@ -0,0 +1,86 @@ +from cvplibrary import CVPGlobalVariables, GlobalVariableNames, Form + + + +# Get this devices Serial + + +serial = CVPGlobalVariables.getValue( GlobalVariableNames.CVP_SERIAL ) +mask = '24' +ServiceRouting = True + +#Create the IP address from the serial number + + +if serial == '4A7F6E96300132903A73A74CCF18B697': + IPaddress = '192.168.0.21' + hostname = 'leaf1' + + +elif serial == '3831DEFC364900BF9EEFC45FEE7794E7': + IPaddress = '192.168.0.22' + hostname = 'leaf2' + + +elif serial == 'ED469CFA13C4017B2D19BF7EBCAD50B1': + IPaddress = '192.168.0.23' + hostname = 'leaf3' + + +elif serial == '434653268ABA082A2FF6B52F1367CE80': + IPaddress = '192.168.0.24' + hostname = 'leaf4' + +elif serial == '8085B9640BC6D8FDC1FD23D242EBF433': + IPaddress = '192.168.0.11' + hostname = 'spine1' + +elif serial == 'D28D62E5729AB8BF44A0BC017DEB188A': + IPaddress = '192.168.0.12' + hostname = 'spine2' + +elif serial == 'F77703A62ADE220E689A41057AA56288': + IPaddress = '192.168.0.13' + hostname = 'spine3' + +elif serial == 'D763323F00C03738A8C824D2F1DA05E8': + IPaddress = '192.168.0.25' + hostname = 'borderleaf1' + +elif serial == '7C16136B7483F2E2FB002E8E0646F1F0': + IPaddress = '192.168.0.26' + hostname = 'borderleaf2' + +elif serial == '86342B780ED73BCB30E1DFE48E26AC38': + IPaddress = '192.168.0.51' + ServiceRouting = False + hostname = 'host1' + + +elif serial == 'CE0B31805130945E3CE40B060E9E636D': + IPaddress = '192.168.0.52' + ServiceRouting = False + hostname = 'host2' + + +# Generate and print config - Ignore the service routing command if not needed +print 'hostname %s' % hostname +print '!' +print 'interface Management 1' +print ' ip address %s/%s' % ( IPaddress, mask ) +print ' no lldp transmit' +print ' no lldp receive' +print '!' +if ServiceRouting: + print 'service routing protocols model multi-agent' + print '!' +print 'dns domain arista.lab' +print '!' +print 'ip route 0.0.0.0/0 192.168.0.1' +print '!' +print 'ip routing' +print '!' +print 'management api http-commands' +print ' no shutdown' +print ' protocol http' +print '!' \ No newline at end of file diff --git a/topologies/training-level-avd/configlets/borderleaf1-base b/topologies/training-level-avd/configlets/borderleaf1-base new file mode 100644 index 000000000..e274c6eb4 --- /dev/null +++ b/topologies/training-level-avd/configlets/borderleaf1-base @@ -0,0 +1,14 @@ +hostname borderleaf1 +! +interface Management 0 + vrf MGMT + ip address 192.168.0.25/24 +! +service routing protocols model multi-agent +! +dns domain arista.lab +! +ip routing vrf MGMT +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 +! diff --git a/topologies/training-level-avd/configlets/borderleaf2-base b/topologies/training-level-avd/configlets/borderleaf2-base new file mode 100644 index 000000000..a7778e0b4 --- /dev/null +++ b/topologies/training-level-avd/configlets/borderleaf2-base @@ -0,0 +1,14 @@ +hostname borderleaf2 +! +interface Management 0 + vrf MGMT + ip address 192.168.0.26/24 + +! +service routing protocols model multi-agent +! +dns domain arista.lab +! +ip routing vrf MGMT +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 diff --git a/topologies/training-level-avd/configlets/host1-base b/topologies/training-level-avd/configlets/host1-base new file mode 100644 index 000000000..915d58edb --- /dev/null +++ b/topologies/training-level-avd/configlets/host1-base @@ -0,0 +1,15 @@ +hostname host1 +! +spanning-tree mode none +! +interface Management 0 + vrf MGMT + ip address 192.168.0.51/24 + + +! +dns domain arista.lab +! +ip routing vrf MGMT +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 diff --git a/topologies/training-level-avd/configlets/host2-base b/topologies/training-level-avd/configlets/host2-base new file mode 100644 index 000000000..63f0c9c38 --- /dev/null +++ b/topologies/training-level-avd/configlets/host2-base @@ -0,0 +1,15 @@ +hostname host2 +! +spanning-tree mode none +! +interface Management 0 + vrf MGMT + ip address 192.168.0.52/24 + + +! +dns domain arista.lab +! +ip routing vrf MGMT +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 diff --git a/topologies/training-level-avd/configlets/host3-base b/topologies/training-level-avd/configlets/host3-base new file mode 100644 index 000000000..979a49b28 --- /dev/null +++ b/topologies/training-level-avd/configlets/host3-base @@ -0,0 +1,15 @@ +hostname host3 +! +spanning-tree mode none +! +interface Management 0 + vrf MGMT + ip address 192.168.0.53/24 + + +! +dns domain arista.lab +! +ip routing vrf MGMT +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 diff --git a/topologies/training-level-avd/configlets/host4-base b/topologies/training-level-avd/configlets/host4-base new file mode 100644 index 000000000..f85e77a77 --- /dev/null +++ b/topologies/training-level-avd/configlets/host4-base @@ -0,0 +1,15 @@ +hostname host4 +! +spanning-tree mode none +! +interface Management 0 + vrf MGMT + ip address 192.168.0.54/24 + +! +dns domain arista.lab +! +ip routing vrf MGMT +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 + diff --git a/topologies/training-level-avd/configlets/leaf1-base b/topologies/training-level-avd/configlets/leaf1-base new file mode 100644 index 000000000..7b316b33b --- /dev/null +++ b/topologies/training-level-avd/configlets/leaf1-base @@ -0,0 +1,13 @@ +hostname leaf1 +! +interface Management 0 + vrf MGMT + ip address 192.168.0.21/24 + +service routing protocols model multi-agent +! +dns domain arista.lab +! +ip routing vrf MGMT +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 diff --git a/topologies/training-level-avd/configlets/leaf2-base b/topologies/training-level-avd/configlets/leaf2-base new file mode 100644 index 000000000..22fffb444 --- /dev/null +++ b/topologies/training-level-avd/configlets/leaf2-base @@ -0,0 +1,15 @@ +hostname leaf2 +! +interface Management 0 + vrf MGMT + ip address 192.168.0.22/24 + + +! +service routing protocols model multi-agent +! +dns domain arista.lab +! +ip routing vrf MGMT +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 diff --git a/topologies/training-level-avd/configlets/leaf3-base b/topologies/training-level-avd/configlets/leaf3-base new file mode 100644 index 000000000..37e7bc8d3 --- /dev/null +++ b/topologies/training-level-avd/configlets/leaf3-base @@ -0,0 +1,13 @@ +hostname leaf3 +! +interface Management 0 + vrf MGMT + ip address 192.168.0.23/24 + +service routing protocols model multi-agent +! +dns domain arista.lab +! +ip routing vrf MGMT +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 diff --git a/topologies/training-level-avd/configlets/leaf4-base b/topologies/training-level-avd/configlets/leaf4-base new file mode 100644 index 000000000..f0cff7b25 --- /dev/null +++ b/topologies/training-level-avd/configlets/leaf4-base @@ -0,0 +1,13 @@ +hostname leaf4 +! +interface Management 0 + vrf MGMT + ip address 192.168.0.24/24 + +service routing protocols model multi-agent +! +dns domain arista.lab +! +ip routing vrf MGMT +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 diff --git a/topologies/training-level-avd/configlets/spine1-base b/topologies/training-level-avd/configlets/spine1-base new file mode 100644 index 000000000..5e9d072b1 --- /dev/null +++ b/topologies/training-level-avd/configlets/spine1-base @@ -0,0 +1,14 @@ +hostname spine1 +! +interface Management 0 + vrf MGMT + ip address 192.168.0.11/24 + +! +service routing protocols model multi-agent +! +dns domain arista.lab +! +ip routing vrf MGMT +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 diff --git a/topologies/training-level-avd/configlets/spine2-base b/topologies/training-level-avd/configlets/spine2-base new file mode 100644 index 000000000..cc9d0bef1 --- /dev/null +++ b/topologies/training-level-avd/configlets/spine2-base @@ -0,0 +1,13 @@ +hostname spine2 +! +interface Management 0 + vrf MGMT + ip address 192.168.0.12/24 + +service routing protocols model multi-agent +! +dns domain arista.lab +! +ip routing vrf MGMT +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 diff --git a/topologies/training-level-avd/configlets/spine3-base b/topologies/training-level-avd/configlets/spine3-base new file mode 100644 index 000000000..853f6564a --- /dev/null +++ b/topologies/training-level-avd/configlets/spine3-base @@ -0,0 +1,14 @@ +hostname spine3 +! +interface Management 0 + vrf MGMT + ip address 192.168.0.13/24 + +! +service routing protocols model multi-agent +! +dns domain arista.lab +! +ip routing vrf MGMT +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 diff --git a/topologies/training-level-avd/configlets/spine4-base b/topologies/training-level-avd/configlets/spine4-base new file mode 100644 index 000000000..240453581 --- /dev/null +++ b/topologies/training-level-avd/configlets/spine4-base @@ -0,0 +1,14 @@ +hostname spine4 +! +interface Management 0 + vrf MGMT + ip address 192.168.0.14/24 + +! +service routing protocols model multi-agent +! +dns domain arista.lab +! +ip routing vrf MGMT +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 diff --git a/topologies/training-level-avd/files/.ansible.cfg b/topologies/training-level-avd/files/.ansible.cfg new file mode 100644 index 000000000..14c806515 --- /dev/null +++ b/topologies/training-level-avd/files/.ansible.cfg @@ -0,0 +1,2 @@ +[defaults] +host_key_checking = False diff --git a/topologies/training-level-avd/files/.screenrc b/topologies/training-level-avd/files/.screenrc new file mode 100644 index 000000000..1d70f5e42 --- /dev/null +++ b/topologies/training-level-avd/files/.screenrc @@ -0,0 +1,23 @@ +# Turn off the startup message. +startup_message off +# Set the caption to the active windows. +caption always "%-Lw%{= BW}%50>%n%f* %t%{-}%+Lw%<" + +term screen-256color + +# New screens for various processes. +# Example: screen -t +# screen -t 7050SX-128 0 ssh aristaadmin@192.100.37.128 +screen 1 ssh 192.168.0.4 +screen -t CVP 2 ssh 192.168.0.5 +screen -t Spine1 3 ssh 192.168.0.11 +screen -t Spine2 4 ssh 192.168.0.12 +screen -t Spine3 5 ssh 192.168.0.13 +screen -t Leaf1 6 ssh 192.168.0.21 +screen -t Leaf2 7 ssh 192.168.0.22 +screen -t Leaf3 8 ssh 192.168.0.23 +screen -t Leaf4 9 ssh 192.168.0.24 +screen -t Borderleaf1 10 ssh 192.168.0.25 +screen -t Borderlead2 11 ssh 192.168.0.26 +screen -t Host1 15 ssh 192.168.0.51 +screen -t Host2 16 ssh 192.168.0.52 diff --git a/topologies/training-level-avd/files/MenuOptions.yaml b/topologies/training-level-avd/files/MenuOptions.yaml new file mode 100644 index 000000000..f68e2261d --- /dev/null +++ b/topologies/training-level-avd/files/MenuOptions.yaml @@ -0,0 +1,214 @@ +--- +options: + reset: + - command: "/usr/local/bin/ConfigureTopology.py && bash /home/arista/Broadcaster/pushHostDefaultConfig.sh" + description: "Reset All Devices to Base ATD (reset)" + vxlan: + - command: "/usr/local/bin/ConfigureTopology.py -t vxlan" + description: "VXLAN Lab (vxlan)" + l2evpn: + - command: "/usr/local/bin/ConfigureTopology.py -t l2evpn" + description: "L2-EVPN Lab (l2evpn)" + l3evpn: + - command: "/usr/local/bin/ConfigureTopology.py -t l3evpn" + description: "L3-EVPN Lab (l3evpn)" + aamh: + - command: "/usr/local/bin/ConfigureTopology.py -t aamh" + description: "Active-Active Multi Homing lab (aamh)" + pim: + - command: "/usr/local/bin/ConfigureTopology.py -t aamh" + description: "PIM Lab (pim)" +labconfiglets: + reset: + spine1: + - "spine1-base" + spine2: + - "spine2-base" + spine3: + - "spine3-base" + leaf1: + - "leaf1-base" + leaf2: + - "leaf2-base" + leaf3: + - "leaf3-base" + leaf4: + - "leaf4-base" + host1: + - "host1-base" + host2: + - "host2-base" + borderleaf1: + - "borderleaf1-base" + borderleaf2: + - "borderleaf2-base" + vxlan: + spine1: + - "spine1-base" + - "Spine-1-VXALN-Begin" + spine2: + - "spine2-base" + - "Spine-2-VXALN-Begin" + spine3: + - "spine3-base" + - "Spine-3-VXALN-Begin" + leaf1: + - "leaf1-base" + - "Leaf-1-VXALN-Begin" + leaf2: + - "leaf2-base" + - "Leaf-2-VXALN-Begin" + leaf3: + - "leaf3-base" + - "leaf-3-VXALN-Begin" + leaf4: + - "leaf4-base" + - "leaf-4-VXALN-Begin" + host1: + - "host1-base" + - "Host-1-VXALN-Begin" + host2: + - "host2-base" + - "Host-2-VXALN-Begin" + borderleaf1: + - "borderleaf1-base" + - "Borderleaf-1-VXALN-Begin" + borderleaf2: + - "borderleaf2-base" + - "Borderleaf-2-VXALN-Begin" + l2evpn: + spine1: + - "spine1-base" + - "Spine-1-L2EVPN-Begin" + spine2: + - "spine2-base" + - "Spine-2-L2EVPN-Begin" + spine3: + - "spine3-base" + - "Spine-3-L2EVPN-Begin" + leaf1: + - "leaf1-base" + - "Leaf-1-L2EVPN-Begin" + leaf2: + - "leaf2-base" + - "Leaf-2-L2EVPN-Begin" + leaf3: + - "leaf3-base" + - "Leaf-3-L2EVPN-Begin" + leaf4: + - "leaf4-base" + - "Leaf-4-L2EVPN-Begin" + host1: + - "host1-base" + - "Host-1-L2EVPN-Begin" + host2: + - "host2-base" + - "Host-2-L2EVPN-Begin" + borderleaf1: + - "borderleaf1-base" + - "Borderleaf-1-L2EVPN-Begin" + borderleaf2: + - "borderleaf2-base" + - "Borderleaf-2-L2EVPN-Begin" + l3evpn: + spine1: + - "spine1-base" + - "Spine-1-L3EVPN-Begin" + spine2: + - "spine2-base" + - "Spine-2-L3EVPN-Begin" + spine3: + - "spine3-base" + - "Spine-3-L3EVPN-Begin" + leaf1: + - "leaf1-base" + - "Leaf-1-L3EVPN-Begin" + leaf2: + - "leaf2-base" + - "Leaf-2-L3EVPN-Begin" + leaf3: + - "leaf3-base" + - "Leaf-3-L3EVPN-Begin" + leaf4: + - "leaf4-base" + - "Leaf-4-L3EVPN-Begin" + host1: + - "host1-base" + - "Host-1-L3EVPN-Begin" + host2: + - "host2-base" + - "Host-2-L3EVPN-Begin" + borderleaf1: + - "borderleaf1-base" + - "Borderleaf-1-L3EVPN-Begin" + borderleaf2: + - "borderleaf2-base" + - "Borderleaf-2-L3EVPN-Begin" + aamh: + spine1: + - "spine1-base" + - "Spine-1-AAMH-Begin" + spine2: + - "spine2-base" + - "Spine-2-AAMH-Begin" + spine3: + - "spine3-base" + - "Spine-3-AAMH-Begin" + leaf1: + - "leaf1-base" + - "Leaf-1-AAMH-Begin" + leaf2: + - "leaf2-base" + - "Leaf-2-AAMH-Begin" + leaf3: + - "leaf3-base" + - "Leaf-3-AAMH-Begin" + leaf4: + - "leaf4-base" + - "Leaf-4-AAMH-Begin" + host1: + - "host1-base" + - "Host-1-AAMH-Begin" + host2: + - "host2-base" + - "Host-2-AAMH-Begin" + borderleaf1: + - "borderleaf1-base" + - "Borderleaf-1-AAMH-Begin" + borderleaf2: + - "borderleaf2-base" + - "Borderleaf-2-AAMH-Begin" + pim: + spine1: + - "spine1-base" + - "Spine-1-PIM-Begin" + spine2: + - "spine2-base" + - "Spine-2-PIM-Begin" + spine3: + - "spine3-base" + - "Spine-3-PIM-Begin" + leaf1: + - "leaf1-base" + - "Leaf-1-PIM-Begin" + leaf2: + - "leaf2-base" + - "Leaf-2-PIM-Begin" + leaf3: + - "leaf3-base" + - "Leaf-3-PIM-Begin" + leaf4: + - "leaf4-base" + - "Leaf-4-PIM-Begin" + host1: + - "host1-base" + - "Host-1-PIM-Begin" + host2: + - "host2-base" + - "Host-2-PIM-Begin" + borderleaf1: + - "borderleaf1-base" + - "Borderleaf-1-PIM-Begin" + borderleaf2: + - "borderleaf2-base" + - "Borderleaf-2-PIM-Begin" \ No newline at end of file diff --git a/topologies/training-level-avd/files/apps/coder/coder.yaml b/topologies/training-level-avd/files/apps/coder/coder.yaml new file mode 100644 index 000000000..80cc852d1 --- /dev/null +++ b/topologies/training-level-avd/files/apps/coder/coder.yaml @@ -0,0 +1,4 @@ +bind-addr: 127.0.0.1:8080 +auth: password +password: {ARISTA_REPLACE} +cert: false \ No newline at end of file diff --git a/topologies/training-level-avd/files/apps/coder/labfiles/.placeholder b/topologies/training-level-avd/files/apps/coder/labfiles/.placeholder new file mode 100644 index 000000000..e69de29bb diff --git a/topologies/training-level-avd/files/apps/gui/host5/arista/host-startup.sh b/topologies/training-level-avd/files/apps/gui/host5/arista/host-startup.sh new file mode 100644 index 000000000..16eafb783 --- /dev/null +++ b/topologies/training-level-avd/files/apps/gui/host5/arista/host-startup.sh @@ -0,0 +1,17 @@ +sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 4EB27DB2A3B88B8B +sudo apt-get update +sudo apt install openssh-server -y +sudo service ssh start +sudo apt-get install ufw -y +sudo ufw enable +sudo ufw allow 22 +sudo ufw disable +useradd -rm -d /home/arista -s /bin/bash -g root -G sudo -u 1000 arista +echo 'arista:arista123' | chpasswd +service ssh start +sudo apt install ifenslave -y +sudo apt install iputils-ping -y +sudo add-apt-repository ppa:wireshark-dev/stable -y +sudo apt-get install filezilla -y +sudo apt-get install vsftpd -y +sudo service vsftpd restart \ No newline at end of file diff --git a/topologies/training-level-avd/files/apps/gui/host6/arista/host-startup.sh b/topologies/training-level-avd/files/apps/gui/host6/arista/host-startup.sh new file mode 100644 index 000000000..16eafb783 --- /dev/null +++ b/topologies/training-level-avd/files/apps/gui/host6/arista/host-startup.sh @@ -0,0 +1,17 @@ +sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 4EB27DB2A3B88B8B +sudo apt-get update +sudo apt install openssh-server -y +sudo service ssh start +sudo apt-get install ufw -y +sudo ufw enable +sudo ufw allow 22 +sudo ufw disable +useradd -rm -d /home/arista -s /bin/bash -g root -G sudo -u 1000 arista +echo 'arista:arista123' | chpasswd +service ssh start +sudo apt install ifenslave -y +sudo apt install iputils-ping -y +sudo add-apt-repository ppa:wireshark-dev/stable -y +sudo apt-get install filezilla -y +sudo apt-get install vsftpd -y +sudo service vsftpd restart \ No newline at end of file diff --git a/topologies/training-level-avd/files/apps/gui/host7/arista/host-startup.sh b/topologies/training-level-avd/files/apps/gui/host7/arista/host-startup.sh new file mode 100644 index 000000000..16eafb783 --- /dev/null +++ b/topologies/training-level-avd/files/apps/gui/host7/arista/host-startup.sh @@ -0,0 +1,17 @@ +sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 4EB27DB2A3B88B8B +sudo apt-get update +sudo apt install openssh-server -y +sudo service ssh start +sudo apt-get install ufw -y +sudo ufw enable +sudo ufw allow 22 +sudo ufw disable +useradd -rm -d /home/arista -s /bin/bash -g root -G sudo -u 1000 arista +echo 'arista:arista123' | chpasswd +service ssh start +sudo apt install ifenslave -y +sudo apt install iputils-ping -y +sudo add-apt-repository ppa:wireshark-dev/stable -y +sudo apt-get install filezilla -y +sudo apt-get install vsftpd -y +sudo service vsftpd restart \ No newline at end of file diff --git a/topologies/training-level-avd/files/apps/gui/host8/arista/host-startup.sh b/topologies/training-level-avd/files/apps/gui/host8/arista/host-startup.sh new file mode 100644 index 000000000..16eafb783 --- /dev/null +++ b/topologies/training-level-avd/files/apps/gui/host8/arista/host-startup.sh @@ -0,0 +1,17 @@ +sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 4EB27DB2A3B88B8B +sudo apt-get update +sudo apt install openssh-server -y +sudo service ssh start +sudo apt-get install ufw -y +sudo ufw enable +sudo ufw allow 22 +sudo ufw disable +useradd -rm -d /home/arista -s /bin/bash -g root -G sudo -u 1000 arista +echo 'arista:arista123' | chpasswd +service ssh start +sudo apt install ifenslave -y +sudo apt install iputils-ping -y +sudo add-apt-repository ppa:wireshark-dev/stable -y +sudo apt-get install filezilla -y +sudo apt-get install vsftpd -y +sudo service vsftpd restart \ No newline at end of file diff --git a/topologies/training-level-avd/files/apps/ssh/web.json b/topologies/training-level-avd/files/apps/ssh/web.json new file mode 100644 index 000000000..13fac47dd --- /dev/null +++ b/topologies/training-level-avd/files/apps/ssh/web.json @@ -0,0 +1,76 @@ +{ + "listen": { + "ip": "0.0.0.0", + "port": 2222 + }, + "user": { + "name": null, + "password": null, + "privatekey": null + }, + "ssh": { + "host": null, + "port": 22, + "localAddress": null, + "localPort": null, + "term": "xterm-color", + "readyTimeout": 20000, + "keepaliveInterval": 120000, + "keepaliveCountMax": 10, + "allowedSubnets": [ "192.168.0.0/16", "10.0.0.0/8", "172.16.0.0/12" ] + }, + "terminal": { + "cursorBlink": true, + "scrollback": 10000, + "tabStopWidth": 8, + "bellStyle": "sound" + }, + "header": { + "text": null, + "background": "green" + }, + "session": { + "name": "WebSSH2", + "secret": "mysecret" + }, + "options": { + "challengeButton": true, + "allowreauth": true + }, + "algorithms": { + "kex": [ + "ecdh-sha2-nistp256", + "ecdh-sha2-nistp384", + "ecdh-sha2-nistp521", + "diffie-hellman-group-exchange-sha256", + "diffie-hellman-group14-sha1" + ], + "cipher": [ + "aes128-ctr", + "aes192-ctr", + "aes256-ctr", + "aes128-gcm", + "aes128-gcm@openssh.com", + "aes256-gcm", + "aes256-gcm@openssh.com", + "aes256-cbc" + ], + "hmac": [ + "hmac-sha2-256", + "hmac-sha2-512", + "hmac-sha1" + ], + "compress": [ + "none", + "zlib@openssh.com", + "zlib" + ] + }, + "serverlog": { + "client": false, + "server": false + }, + "accesslog": false, + "verify": false, + "safeShutdownDuration": 300 + } \ No newline at end of file diff --git a/topologies/training-level-avd/files/apps/uilanding/modules.yaml b/topologies/training-level-avd/files/apps/uilanding/modules.yaml new file mode 100644 index 000000000..c983faac0 --- /dev/null +++ b/topologies/training-level-avd/files/apps/uilanding/modules.yaml @@ -0,0 +1,62 @@ +topology: + image: "atd-topo.png" + nodes: + Spine1: + coords: "22,218,167,296" + ip: "192.168.0.11" + Spine2: + coords: "356,215,517,300" + ip: "192.168.0.12" + Spine3: + coords: "555,214,724,294" + ip: "192.168.0.13" + Spine4: + coords: "925,218,1077,293" + ip: "192.168.0.14" + Leaf1: + coords: "16,424,165,501" + ip: "192.168.0.21" + Leaf2: + coords: "353,425,520,493" + ip: "192.168.0.22" + Leaf3: + coords: "569,430,714,499" + ip: "192.168.0.23" + Leaf4: + coords: "921,423,1074,502" + ip: "192.168.0.24" + BorderLeaf1: + coords: "370,57,511,138" + ip: "192.168.0.25" + BorderLeaf2: + coords: "561,65,726,145" + ip: "192.168.0.26" + Host1: + coords: "15,534,149,611" + ip: "192.168.0.51" + Host2: + coords: "365,539,504,619" + ip: "192.168.0.52" + Host3: + coords: "566,542,711,620" + ip: "192.168.0.53" + Host4: + coords: "929,542,1075,615" + ip: "192.168.0.54" + servers: + Host5: + coords: "182,545,307,636" + ip: "192.168.0.101" + port : 6001 + Host6: + coords: "183,650,312,744" + ip: "192.168.0.102" + port : 6002 + Host7: + coords: "747,545,875,636" + ip: "192.168.0.103" + port : 6003 + Host8: + coords: "752,645,877,731" + ip: "192.168.0.104" + port : 6004 diff --git a/topologies/training-level-avd/files/apps/webui/.vncpass_clear b/topologies/training-level-avd/files/apps/webui/.vncpass_clear new file mode 100644 index 000000000..cd09dd7a5 --- /dev/null +++ b/topologies/training-level-avd/files/apps/webui/.vncpass_clear @@ -0,0 +1 @@ +@rista1 \ No newline at end of file diff --git a/topologies/training-level-avd/files/cvp/cvp_info.yaml b/topologies/training-level-avd/files/cvp/cvp_info.yaml new file mode 100644 index 000000000..7e796e77f --- /dev/null +++ b/topologies/training-level-avd/files/cvp/cvp_info.yaml @@ -0,0 +1,64 @@ +cvp_info: + containers: + Tenant: + nodes: + Leaf: + parent: Tenant + nodes: + - leaf1 + - leaf2 + - leaf3 + - leaf4 + Borderleaf: + parent: Tenant + nodes: + - borderleaf1 + - borderleaf2 + Spine: + parent: Tenant + nodes: + - spine1 + - spine2 + - spine3 + - spine4 + Hosts: + parent: Tenant + nodes: + - host1 + - host2 + - host3 + - host4 + snapshots: + configlets: + containers: + Tenant: + - ATD-INFRA + netelements: + spine1: + - spine1-base + spine2: + - spine2-base + spine3: + - spine3-base + spine4: + - spine4-base + leaf1: + - leaf1-base + leaf2: + - leaf2-base + borderleaf1: + - borderleaf1-base + borderleaf2: + - borderleaf2-base + leaf3: + - leaf3-base + leaf4: + - leaf4-base + host3: + - host3-base + host4: + - host4-base + host1: + - host1-base + host2: + - host2-base \ No newline at end of file diff --git a/topologies/training-level-avd/files/hosts b/topologies/training-level-avd/files/hosts new file mode 100644 index 000000000..b01ba8483 --- /dev/null +++ b/topologies/training-level-avd/files/hosts @@ -0,0 +1,24 @@ +127.0.0.1 localhost +192.168.0.11 spine1 +192.168.0.12 spine2 +192.168.0.13 spine3 +192.168.0.14 spine4 +192.168.0.21 leaf1 +192.168.0.22 leaf2 +192.168.0.23 leaf3 +192.168.0.24 leaf4 +192.168.0.25 borderleaf1 +192.168.0.26 borderleaf2 +192.168.0.41 server1 +192.168.0.42 server2 +192.168.0.43 server3 +192.168.0.44 server4 +192.168.0.51 host1 +192.168.0.52 host2 +192.168.0.53 host3 +192.168.0.54 host4 +192.168.0.101 host5 +192.168.0.102 host6 +192.168.0.103 host7 +192.168.0.104 host8 +192.168.0.5 cvp diff --git a/topologies/training-level-avd/files/menus/default.yaml b/topologies/training-level-avd/files/menus/default.yaml new file mode 100644 index 000000000..7edae00fc --- /dev/null +++ b/topologies/training-level-avd/files/menus/default.yaml @@ -0,0 +1,2 @@ +--- +default_menu: training-l3.yaml \ No newline at end of file diff --git a/topologies/training-level-avd/files/menus/training-l3.yaml b/topologies/training-level-avd/files/menus/training-l3.yaml new file mode 100644 index 000000000..d0365b554 --- /dev/null +++ b/topologies/training-level-avd/files/menus/training-l3.yaml @@ -0,0 +1,34 @@ +--- + lab_list: + reset: + description: "Reset All Devices to Base Lab (reset)" + labconfiglets: + reset: + spine1: + - "spine1-base" + spine2: + - "spine2-base" + spine3: + - "spine3-base" + spine4: + - "spine4-base" + leaf1: + - "leaf1-base" + leaf2: + - "leaf2-base" + leaf3: + - "leaf3-base" + leaf4: + - "leaf4-base" + host1: + - "host1-base" + host2: + - "host2-base" + host3: + - "host3-base" + host4: + - "host4-base" + borderleaf1: + - "borderleaf1-base" + borderleaf2: + - "borderleaf2-base" \ No newline at end of file diff --git a/topologies/training-level-avd/files/scripts/Authenticate-CVP b/topologies/training-level-avd/files/scripts/Authenticate-CVP new file mode 100644 index 000000000..144bb13eb --- /dev/null +++ b/topologies/training-level-avd/files/scripts/Authenticate-CVP @@ -0,0 +1,32 @@ +import requests +import json + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + +# Print user details + +print "User Name:%s\n "%output['username'] +print "First Name: %s\n "%output['user']['firstName'] +print "Last Name: %s\n "%output['user']['lastName'] +print "User Permissions: %s\n "%output['permissionList'] +print "Cookie Jar: %s\n "%cookies diff --git a/topologies/training-level-avd/files/scripts/Authenticate-CVP2 b/topologies/training-level-avd/files/scripts/Authenticate-CVP2 new file mode 100644 index 000000000..3f6bf9190 --- /dev/null +++ b/topologies/training-level-avd/files/scripts/Authenticate-CVP2 @@ -0,0 +1,48 @@ +import requests +import json + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + +# Print user details + +print "User Name:%s\n "%output['username'] +print "First Name: %s\n "%output['user']['firstName'] +print "Last Name: %s\n "%output['user']['lastName'] +print "User Permissions: %s\n "%output['permissionList'] +print "Cookie Jar: %s\n "%cookies + +#Create an HTTP GET request to the CVP server + +getConfigletURL = "/cvpservice/configlet/getConfiglets.do?" +getConfigletParams = {'startIndex':'0','endIndex':'0','type':'Configlet'} +response = requests.get(url+getConfigletURL,cookies=cookies, params=getConfigletParams,verify=False) +assert response.ok +outputConfiglets = response.json() + +# Print Configlet details + +for configlet in outputConfiglets['data']: + print "ConfigletName: %s"%configlet['name'] + print "ConfigletKey: %s"%configlet['key'] + print "\n" + diff --git a/topologies/training-level-avd/files/scripts/Authenticate-CVP3 b/topologies/training-level-avd/files/scripts/Authenticate-CVP3 new file mode 100644 index 000000000..2445806ea --- /dev/null +++ b/topologies/training-level-avd/files/scripts/Authenticate-CVP3 @@ -0,0 +1,95 @@ +import requests +import json + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + +# Print user details + +print "User Name:%s\n "%output['username'] +print "First Name: %s\n "%output['user']['firstName'] +print "Last Name: %s\n "%output['user']['lastName'] +print "User Permissions: %s\n "%output['permissionList'] +print "Cookie Jar: %s\n "%cookies + +#Create an HTTP GET request to the CVP server + +getConfigletURL = "/cvpservice/configlet/getConfiglets.do?" +getConfigletParams = {'startIndex':'0','endIndex':'0','type':'Configlet'} +response = requests.get(url+getConfigletURL,cookies=cookies, params=getConfigletParams,verify=False) +assert response.ok +outputConfiglets = response.json() + +# Print Configlet details + +for configlet in outputConfiglets['data']: + print "ConfigletName: %s"%configlet['name'] + print "ConfigletKey: %s"%configlet['key'] + print "\n" +# Create an HTTP GET request to the CVP server + +getConfigletHistoryURL = "/cvpservice/configlet/getConfigletHistory.do?" +getConfigletParams = {'configletId':'configlet_32_438214998013','startIndex':'0','endIndex':'0'} +response = requests.get(url+getConfigletHistoryURL,cookies=cookies, params=getConfigletParams,verify=False) +assert response.ok +outputConfigletHistory = response.json() + +# Print Configlet details + +for entry in outputConfigletHistory['configletHistory']: + print "ConfigletKey: %s"%entry['key'] + print "ConfigletOldConfig: %s"%entry['oldConfig'] + print "ConfigletNewConfig: %s"%entry['newConfig'] + print "\n" + + +# Create an HTTP GET request to the CVP server + +getConfigletDetailURL = "/cvpservice/configlet/getConfigletByName.do?" +getConfigletParams = {'name':'VLANs'} +response = requests.get(url+getConfigletDetailURL,cookies=cookies, params=getConfigletParams,verify=False) +assert response.ok +outputConfigletDetail = response.json() + +# Print Configlet details + +print "ConfigletKey: %s"%outputConfigletDetail['key'] +print "ConfigletName: %s"%outputConfigletDetail['name'] +print "ConfigletConfig: %s"%outputConfigletDetail['config'] +print "ConfigletNote: %s"%outputConfigletDetail['note'] +print "\n" + + +# Create an HTTP POST request to the CVP server + +headers = { 'Content-Type': 'application/json' } +postConfigletChangeURL = "/cvpservice/configlet/updateConfiglet.do" +changeData = json.dumps({"config": "! some configuration here", "key": "configlet_32_438214998013", "name": "VLANs"}) +response = requests.post(url+postConfigletChangeURL, cookies=cookies, data=changeData,headers=headers,verify=False) +assert response.ok +outputConfigletChange = response.json() + +# Print Configlet details + +print "ConfigletChange: %s"%outputConfigletChange['data'] +print "\n" + diff --git a/topologies/training-level-avd/files/scripts/Configlet1 b/topologies/training-level-avd/files/scripts/Configlet1 new file mode 100644 index 000000000..3f6bf9190 --- /dev/null +++ b/topologies/training-level-avd/files/scripts/Configlet1 @@ -0,0 +1,48 @@ +import requests +import json + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + +# Print user details + +print "User Name:%s\n "%output['username'] +print "First Name: %s\n "%output['user']['firstName'] +print "Last Name: %s\n "%output['user']['lastName'] +print "User Permissions: %s\n "%output['permissionList'] +print "Cookie Jar: %s\n "%cookies + +#Create an HTTP GET request to the CVP server + +getConfigletURL = "/cvpservice/configlet/getConfiglets.do?" +getConfigletParams = {'startIndex':'0','endIndex':'0','type':'Configlet'} +response = requests.get(url+getConfigletURL,cookies=cookies, params=getConfigletParams,verify=False) +assert response.ok +outputConfiglets = response.json() + +# Print Configlet details + +for configlet in outputConfiglets['data']: + print "ConfigletName: %s"%configlet['name'] + print "ConfigletKey: %s"%configlet['key'] + print "\n" + diff --git a/topologies/training-level-avd/files/scripts/ConfigletChange b/topologies/training-level-avd/files/scripts/ConfigletChange new file mode 100644 index 000000000..691ff5864 --- /dev/null +++ b/topologies/training-level-avd/files/scripts/ConfigletChange @@ -0,0 +1,40 @@ +import requests +import json + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + + +# Create an HTTP POST request to the CVP server + +headers = { 'Content-Type': 'application/json' } +postConfigletChangeURL = "/cvpservice/configlet/addNoteToConfiglet.do" +changeData = json.dumps({"note": "Configlet Changed by API", "key": "configlet_516_7018635812307"}) +response = requests.post(url+postConfigletChangeURL, cookies=cookies, data=changeData,headers=headers,verify=False) +assert response.ok +outputConfigletChange = response.json() + +# Print Configlet details + +print "ConfigletChange: %s"%outputConfigletChange['data'] +print "\n" + diff --git a/topologies/training-level-avd/files/scripts/ConfigletDetail b/topologies/training-level-avd/files/scripts/ConfigletDetail new file mode 100644 index 000000000..eb2a85937 --- /dev/null +++ b/topologies/training-level-avd/files/scripts/ConfigletDetail @@ -0,0 +1,43 @@ +import requests +import json + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + +# Create an HTTP GET request to the CVP server + +getConfigletDetailURL = "/cvpservice/configlet/getConfigletByName.do?" +getConfigletParams = {'name':'VLANs'} +response = requests.get(url+getConfigletDetailURL,cookies=cookies, params=getConfigletParams,verify=False) +assert response.ok +outputConfigletDetail = response.json() + +# Print Configlet details + +print "ConfigletKey: %s"%outputConfigletDetail['key'] +print "ConfigletName: %s"%outputConfigletDetail['name'] +print "ConfigletConfig: %s"%outputConfigletDetail['config'] +print "ConfigletNote: %s"%outputConfigletDetail['note'] +print "\n" + + + diff --git a/topologies/training-level-avd/files/scripts/ConfigletHistory b/topologies/training-level-avd/files/scripts/ConfigletHistory new file mode 100644 index 000000000..71f1ac693 --- /dev/null +++ b/topologies/training-level-avd/files/scripts/ConfigletHistory @@ -0,0 +1,41 @@ +import requests +import json + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + +# Create an HTTP GET request to the CVP server + +getConfigletHistoryURL = "/cvpservice/configlet/getConfigletHistory.do?" +getConfigletParams = {'configletId':'configlet_344_7351420097365','startIndex':'0','endIndex':'0'} +response = requests.get(url+getConfigletHistoryURL,cookies=cookies, params=getConfigletParams,verify=False) +assert response.ok +outputConfigletHistory = response.json() + +# Print Configlet details + +for entry in outputConfigletHistory['configletHistory']: + print "ConfigletKey: %s"%entry['key'] + print "ConfigletOldConfig: \n%s"%entry['oldConfig'] + print "ConfigletNewConfig: \n%s"%entry['newConfig'] + print "\n" + diff --git a/topologies/training-level-avd/files/scripts/TaskBase b/topologies/training-level-avd/files/scripts/TaskBase new file mode 100644 index 000000000..6f8deccaf --- /dev/null +++ b/topologies/training-level-avd/files/scripts/TaskBase @@ -0,0 +1,59 @@ +import requests +import json + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + + +# Create an HTTP GET request to the CVP server + +getTasksURL = "/cvpservice/task/getTasks.do?" +getTasksParams = {'startIndex':'0','endIndex':'0','queryparam':'Pending'} +response = requests.get(url+getTasksURL,cookies=cookies, params=getTasksParams,verify=False) +assert response.ok +outputPendingTasks = response.json() + + +# Print Tasks Created by Current User +taskList = [ ] +for entry in outputPendingTasks['data']: + if str(entry['createdBy']) == str(CVP_USER): + print "TaskNumber: %s"%entry['workOrderId'] + taskList.append(str(entry['workOrderId'])) +print "TaskList: %s"%taskList + + + +# Create an HTTP POST request to the CVP server + +headers = { 'Content-Type': 'application/json' } +postTaskLogURL = "/cvpservice/workflow/addWorkOrderLog.do" +taskLogData = json.dumps({"taskId": taskList[1],"message": "This is a test Change","source": "CVP REST API"}) +response = requests.post(url+postTaskLogURL, cookies=cookies, data=taskLogData,headers=headers,verify=False) +assert response.ok +outputTaskLog = response.json() + +# Print Configlet details + +print "TaskLogAmmend: %s"%outputTaskLog['data'] +print "\n" + diff --git a/topologies/training-level-avd/files/scripts/TaskCVP1 b/topologies/training-level-avd/files/scripts/TaskCVP1 new file mode 100644 index 000000000..1ebd05764 --- /dev/null +++ b/topologies/training-level-avd/files/scripts/TaskCVP1 @@ -0,0 +1,48 @@ +import requests +import json + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + +# Print user details + +print "User Name:%s\n "%output['username'] +print "First Name: %s\n "%output['user']['firstName'] +print "Last Name: %s\n "%output['user']['lastName'] + + +getTasksURL = "/cvpservice/task/getTasks.do?" +getTasksParams = {'startIndex':'0','endIndex':'0'} +response = requests.get(url+getTasksURL,cookies=cookies, params=getTasksParams,verify=False) +assert response.ok +outputPendingTasks = response.json() + + +# Print Tasks Created by Current User +taskList = [ ] +for entry in outputPendingTasks['data']: + if str(entry['createdBy']) == str(CVP_USER): + print( "TaskNumber: %s Description: %s" %(entry['workOrderId'],entry['description'])) + taskList.append(str(entry['workOrderId'])) +#print "TaskList: %s"%taskList + + diff --git a/topologies/training-level-avd/files/scripts/TaskExecute b/topologies/training-level-avd/files/scripts/TaskExecute new file mode 100644 index 000000000..3db487284 --- /dev/null +++ b/topologies/training-level-avd/files/scripts/TaskExecute @@ -0,0 +1,56 @@ +import requests +import json + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + + +# Create an HTTP GET request to the CVP server + +getTasksURL = "/cvpservice/task/getTasks.do?" +getTasksParams = {'startIndex':'0','endIndex':'0','queryparam':'Pending'} +response = requests.get(url+getTasksURL,cookies=cookies, params=getTasksParams,verify=False) +assert response.ok +outputPendingTasks = response.json() + + +# Print Tasks Created by Current User +taskList = [ ] +for entry in outputPendingTasks['data']: + if str(entry['createdBy']) == str(CVP_USER): + print "TaskNumber: %s"%entry['workOrderId'] + taskList.append(str(entry['workOrderId'])) +print "TaskList: %s"%taskList + + + +headers = { 'Content-Type': 'application/json' } +postTaskExecuteURL = "/cvpservice/task/executeTask.do" +for taskNumber in taskList: + executeData = json.dumps({'data': [taskNumber]}) + response = requests.post(url+postTaskExecuteURL, cookies=cookies,data=executeData,headers=headers,verify=False) + assert response.ok + outputExecuteTask = response.json() + print (outputExecuteTask['data']) + print "Task: "+str(taskNumber)+" Execute: "+str(outputExecuteTask['data']) + print "\n" + diff --git a/topologies/training-level-avd/files/scripts/TaskLog b/topologies/training-level-avd/files/scripts/TaskLog new file mode 100644 index 000000000..c835008b8 --- /dev/null +++ b/topologies/training-level-avd/files/scripts/TaskLog @@ -0,0 +1,59 @@ +import requests +import json + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + + +# Create an HTTP GET request to the CVP server + +getTasksURL = "/cvpservice/task/getTasks.do?" +getTasksParams = {'startIndex':'0','endIndex':'0'} +response = requests.get(url+getTasksURL,cookies=cookies, params=getTasksParams,verify=False) +assert response.ok +outputTasks = response.json() + + +# Print Tasks Created by Current User +taskList = [ ] +for entry in outputTasks['data']: + if str(entry['createdBy']) == str(CVP_USER): + print "TaskNumber: %s"%entry['workOrderId'] + taskList.append(str(entry['workOrderId'])) +print "TaskList: %s"%taskList + + + +# Create an HTTP POST request to the CVP server + +headers = { 'Content-Type': 'application/json' } +postTaskLogURL = "/cvpservice/workflow/addWorkOrderLog.do" +taskLogData = json.dumps({"taskId": taskList[0],"message": "This is a test Change","source": "CVP REST API"}) +response = requests.post(url+postTaskLogURL, cookies=cookies, data=taskLogData,headers=headers,verify=False) +assert response.ok +outputTaskLog = response.json() + +# Print Configlet details + +print "TaskLogAmmend: %s"%outputTaskLog['data'] +print "\n" + diff --git a/topologies/training-level-avd/files/scripts/TaskLog1 b/topologies/training-level-avd/files/scripts/TaskLog1 new file mode 100644 index 000000000..c835008b8 --- /dev/null +++ b/topologies/training-level-avd/files/scripts/TaskLog1 @@ -0,0 +1,59 @@ +import requests +import json + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + + +# Create an HTTP GET request to the CVP server + +getTasksURL = "/cvpservice/task/getTasks.do?" +getTasksParams = {'startIndex':'0','endIndex':'0'} +response = requests.get(url+getTasksURL,cookies=cookies, params=getTasksParams,verify=False) +assert response.ok +outputTasks = response.json() + + +# Print Tasks Created by Current User +taskList = [ ] +for entry in outputTasks['data']: + if str(entry['createdBy']) == str(CVP_USER): + print "TaskNumber: %s"%entry['workOrderId'] + taskList.append(str(entry['workOrderId'])) +print "TaskList: %s"%taskList + + + +# Create an HTTP POST request to the CVP server + +headers = { 'Content-Type': 'application/json' } +postTaskLogURL = "/cvpservice/workflow/addWorkOrderLog.do" +taskLogData = json.dumps({"taskId": taskList[0],"message": "This is a test Change","source": "CVP REST API"}) +response = requests.post(url+postTaskLogURL, cookies=cookies, data=taskLogData,headers=headers,verify=False) +assert response.ok +outputTaskLog = response.json() + +# Print Configlet details + +print "TaskLogAmmend: %s"%outputTaskLog['data'] +print "\n" + diff --git a/topologies/training-level-avd/files/scripts/TaskLogView b/topologies/training-level-avd/files/scripts/TaskLogView new file mode 100644 index 000000000..7b34904dd --- /dev/null +++ b/topologies/training-level-avd/files/scripts/TaskLogView @@ -0,0 +1,51 @@ +import requests +import json +import pprint + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + + +# Create an HTTP GET request to the CVP server + +getTasksURL = "/cvpservice/task/getTasks.do?" +getTasksParams = {'startIndex':'0','endIndex':'0'} +response = requests.get(url+getTasksURL,cookies=cookies, params=getTasksParams,verify=False) +assert response.ok +outputTasks = response.json() + +taskList = [ ] +for entry in outputTasks['data']: + if str(entry['createdBy']) == str(CVP_USER): + taskList.append(str(entry['workOrderId'])) + +getTaskLogURL = "/cvpservice/task/getLogsById.do?" +#getTaskLogParams = {'startIndex':'0','endIndex':'0','id':'0'} +getTaskLogParams = {'startIndex':'0','endIndex':'0','id':taskList[0]} +response = requests.get(url+getTaskLogURL,cookies=cookies, params=getTaskLogParams,verify=False) +assert response.ok +outputTaskLog = response.json() + +# Print TaskLog details +print "TaskLogOutput: %s" %outputTaskLog['data'] +print "\n" + diff --git a/topologies/training-level-avd/files/scripts/TaskNote b/topologies/training-level-avd/files/scripts/TaskNote new file mode 100644 index 000000000..6cd1d6cfd --- /dev/null +++ b/topologies/training-level-avd/files/scripts/TaskNote @@ -0,0 +1,52 @@ +import requests +import json +import pprint + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + + +# Create an HTTP GET request to the CVP server + +getTasksURL = "/cvpservice/task/getTasks.do?" +getTasksParams = {'startIndex':'0','endIndex':'0'} +response = requests.get(url+getTasksURL,cookies=cookies, params=getTasksParams,verify=False) +assert response.ok +outputTasks = response.json() + +taskList = [ ] +for entry in outputTasks['data']: + if str(entry['createdBy']) == str(CVP_USER): + taskList.append(str(entry['workOrderId'])) + +headers = { 'Content-Type': 'application/json' } +postTaskNoteURL = "/cvpservice/task/addNoteToTask.do" +taskNoteData = json.dumps({"workOrderId": taskList[0],"note": "This is a test Change using the API"}) +response = requests.post(url+postTaskNoteURL, cookies=cookies, data=taskNoteData,headers=headers,verify=False) +assert response.ok +outputTaskNote = response.json() + +# Print Task details + +print "TaskNoteAmmend: %s"%outputTaskNote['data'] +print "\n" + diff --git a/topologies/training-level-avd/labguides/.gitignore b/topologies/training-level-avd/labguides/.gitignore new file mode 100644 index 000000000..ed86553f4 --- /dev/null +++ b/topologies/training-level-avd/labguides/.gitignore @@ -0,0 +1,2 @@ +.DS_Store +build/ diff --git a/topologies/training-level-avd/labguides/Makefile b/topologies/training-level-avd/labguides/Makefile new file mode 100644 index 000000000..874ed2529 --- /dev/null +++ b/topologies/training-level-avd/labguides/Makefile @@ -0,0 +1,20 @@ +# Minimal makefile for Sphinx documentation +# + +# You can set these variables from the command line. +SPHINXOPTS = +SPHINXBUILD = python -msphinx +SPHINXPROJ = ATD +SOURCEDIR = source +BUILDDIR = build + +# Put it first so that "make" without argument is like "make help". +help: + @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) + +.PHONY: help Makefile + +# Catch-all target: route all unknown targets to Sphinx using the new +# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). +%: Makefile + @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) \ No newline at end of file diff --git a/topologies/training-level-avd/labguides/readme.md b/topologies/training-level-avd/labguides/readme.md new file mode 100644 index 000000000..5a5369ecd --- /dev/null +++ b/topologies/training-level-avd/labguides/readme.md @@ -0,0 +1,12 @@ +# Lab Guides +In this folder are rST (restructured text) formatted lab guides for the ATD event. + +## Building +To build the documentation, you will need to install Sphinx and sphinx_bootstrap_theme with `pip`: + +`pip install sphinx sphinx_bootstrap_theme` + +## Contributing +At some point, this section may expand, but for now please make sure to review existing files for formatting guidelines. + +Please see https://github.com/ralsina/rst-cheatsheet/blob/master/rst-cheatsheet.rst for a cheat sheet. \ No newline at end of file diff --git a/topologies/training-level-avd/labguides/source/_static/arista_logo.png b/topologies/training-level-avd/labguides/source/_static/arista_logo.png new file mode 100644 index 000000000..2376e72b9 Binary files /dev/null and b/topologies/training-level-avd/labguides/source/_static/arista_logo.png differ diff --git a/topologies/training-level-avd/labguides/source/_static/arista_logo_160by26.png b/topologies/training-level-avd/labguides/source/_static/arista_logo_160by26.png new file mode 100644 index 000000000..d0d0cbeec Binary files /dev/null and b/topologies/training-level-avd/labguides/source/_static/arista_logo_160by26.png differ diff --git a/topologies/training-level-avd/labguides/source/_static/arista_logo_320by52.png b/topologies/training-level-avd/labguides/source/_static/arista_logo_320by52.png new file mode 100644 index 000000000..43dfa7ed2 Binary files /dev/null and b/topologies/training-level-avd/labguides/source/_static/arista_logo_320by52.png differ diff --git a/topologies/training-level-avd/labguides/source/_static/cloudvision-icon.png b/topologies/training-level-avd/labguides/source/_static/cloudvision-icon.png new file mode 100644 index 000000000..c309ed98e Binary files /dev/null and b/topologies/training-level-avd/labguides/source/_static/cloudvision-icon.png differ diff --git a/topologies/training-level-avd/labguides/source/_static/logo.jpg b/topologies/training-level-avd/labguides/source/_static/logo.jpg new file mode 100644 index 000000000..6eda41f7e Binary files /dev/null and b/topologies/training-level-avd/labguides/source/_static/logo.jpg differ diff --git a/topologies/training-level-avd/labguides/source/_static/my-styles.css b/topologies/training-level-avd/labguides/source/_static/my-styles.css new file mode 100644 index 000000000..1150528ee --- /dev/null +++ b/topologies/training-level-avd/labguides/source/_static/my-styles.css @@ -0,0 +1,41 @@ +body { + background-color: #FFFFFF; + color: #002859 +} + +.navbar-inverse { + background-image: -webkit-linear-gradient(#6d94bf, #446e9b 50%, #002859); + background-image: -o-linear-gradient(#6d94bf, #446e9b 50%, #002859); + background-image: -webkit-gradient(linear, left top, left bottom, from(#6d94bf), color-stop(50%, #446e9b), to(#002859)); + background-image: linear-gradient(#6d94bf, #446e9b 50%, #002859); + background-repeat: no-repeat; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff6d94bf', endColorstr='#ff002859', GradientType=0); + -webkit-filter: none; + filter: none; + border: 1px solid #345578; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.3) +} + +.navbar-brand { + background: url("arista_logo_320by52.png") center / contain no-repeat; + display: inline-block; + width: 1px; + padding: 0 10px 0 60px; + margin-right: 30px; + margin-left: -30px; +} + +.navbar-brand>img { + display: inline-block; + padding: 0 100px 0 0px; + margin-right: 20px; +} +a.navbar-brand { + display: inline-block; + padding: 15px 0 0 120px; +} + +footer { + background-color: #002859; + color: #FFFFFF; +} diff --git a/topologies/training-level-avd/labguides/source/conf.py b/topologies/training-level-avd/labguides/source/conf.py new file mode 100644 index 000000000..afccec09c --- /dev/null +++ b/topologies/training-level-avd/labguides/source/conf.py @@ -0,0 +1,247 @@ +# -*- coding: utf-8 -*- +# +# ATD documentation build configuration file, created by +# sphinx-quickstart on Tue Apr 17 10:00:04 2018. +# +# This file is execfile()d with the current directory set to its +# containing dir. +# +# Note that not all possible configuration values are present in this +# autogenerated file. +# +# All configuration values have a default; values that are commented out +# serve to show the default. + +# If extensions (or modules to document with autodoc) are in another directory, +# add these directories to sys.path here. If the directory is relative to the +# documentation root, use os.path.abspath to make it absolute, like shown here. +# +# import os +# import sys +# sys.path.insert(0, os.path.abspath('.')) + +import sphinx_bootstrap_theme + +# Importing datetime module to auto update copyright year +from datetime import date + +# -- General configuration ------------------------------------------------ + +# If your documentation needs a minimal Sphinx version, state it here. +# +# needs_sphinx = '1.0' + +# Add any Sphinx extension module names here, as strings. They can be +# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom +# ones. + +# Add any paths that contain templates here, relative to this directory. +templates_path = ['_templates'] + +# The suffix(es) of source filenames. +# You can specify multiple suffix as a list of string: +# +# source_suffix = ['.rst', '.md'] +source_suffix = '.rst' + +# The master toctree document. +master_doc = 'index' + +# General information about the project. +# Updating copyright var to auto update with current year +project = u'Arista ATD' +copyright = u'{0}, Arista Networks'.format(date.today().year) +author = u'Arista ATD atd-help@arista.com' + +# Show Source +html_show_sourcelink = False + +# The version info for the project you're documenting, acts as replacement for +# |version| and |release|, also used in various other places throughout the +# built documents. +# +# The short X.Y version. +version = u'Version 3.0' +# The full version, including alpha/beta/rc tags. +release = u'1' + +# The language for content autogenerated by Sphinx. Refer to documentation +# for a list of supported languages. +# +# This is also used if you do content translation via gettext catalogs. +# Usually you set "language" from the command line for these cases. +language = None + +# List of patterns, relative to source directory, that match files and +# directories to ignore when looking for source files. +# This patterns also effect to html_static_path and html_extra_path +exclude_patterns = [] + +# The name of the Pygments (syntax highlighting) style to use. +pygments_style = 'sphinx' + +# If true, `todo` and `todoList` produce output, else they produce nothing. +todo_include_todos = False + + +# -- Options for HTML output ---------------------------------------------- + +# The theme to use for HTML and HTML Help pages. See the documentation for +# a list of builtin themes. +# +#html_theme = 'alabaster' +html_theme = 'bootstrap' +html_theme_path = sphinx_bootstrap_theme.get_html_theme_path() + +# Add any paths that contain custom static files (such as style sheets) here, +# relative to this directory. They are copied after the builtin static files, +# so a file named "default.css" will overwrite the builtin "default.css". +html_static_path = ['_static'] + +# Theme options are theme-specific and customize the look and feel of a theme +# further. For a list of options available for each theme, see the +# documentation. +# +html_theme_options = { + # Navigation bar title. (Default: ``project`` value) + 'navbar_title': "ATD", + + # Tab name for entire site. (Default: "Site") + 'navbar_site_name': "Table of Contents", + + # A list of tuples containing pages or urls to link to. + # Valid tuples should be in the following forms: + # (name, page) # a link to a page + # (name, "/aa/bb", 1) # a link to an arbitrary relative url + # (name, "http://example.com", True) # arbitrary absolute url + # Note the "1" or "True" value above as the third argument to indicate + # an arbitrary url. + 'navbar_links': [ + ("Arista", "http://www.arista.com", True), + ], + + # Render the next and previous page links in navbar. (Default: true) + 'navbar_sidebarrel': True, + + # Render the current pages TOC in the navbar. (Default: true) + 'navbar_pagenav': False, + + # Tab name for the current pages TOC. (Default: "Page") + 'navbar_pagenav_name': "Page", + + # Global TOC depth for "site" navbar tab. (Default: 1) + # Switching to -1 shows all levels. + 'globaltoc_depth': 2, + + # Include hidden TOCs in Site navbar? + # + # Note: If this is "false", you cannot have mixed ``:hidden:`` and + # non-hidden ``toctree`` directives in the same page, or else the build + # will break. + # + # Values: "true" (default) or "false" + 'globaltoc_includehidden': "true", + + # HTML navbar class (Default: "navbar") to attach to
    element. + # For black navbar, do "navbar navbar-inverse" + #'navbar_class': "navbar navbar-inverse", + 'navbar_class': "navbar", + + # Fix navigation bar to top of page? + # Values: "true" (default) or "false" + 'navbar_fixed_top': "true", + + # Location of link to source. + # Options are "nav" (default), "footer" or anything else to exclude. + #'source_link_position': "nav", + + # Bootswatch (http://bootswatch.com/) theme. + # + # Options are nothing (default) or the name of a valid theme + # such as "cosmo" or "sandstone". + # + # The set of valid themes depend on the version of Bootstrap + # that's used (the next config option). + # + # Currently, the supported themes are: + # - Bootstrap 2: https://bootswatch.com/2 + # - Bootstrap 3: https://bootswatch.com/3 + 'bootswatch_theme': "spacelab", + + # Choose Bootstrap version. + # Values: "3" (default) or "2" (in quotes) + 'bootstrap_version': "3", +} + +# The name for this set of Sphinx documents. If None, it defaults to +# " v documentation". +#html_title = "AristaATD" + +# A shorter title for the navigation bar. Default is the same as html_title. +#html_short_title = "Demo" + +# (Optional) Logo. Should be small enough to fit the navbar (ideally 24x24). +# Path should be relative to the ``_static`` files directory. +#html_logo = "cloudvision-icon.png" + +# -- Options for HTMLHelp output ------------------------------------------ + +# Output file base name for HTML help builder. +htmlhelp_basename = 'AristaATD' + + +# -- Options for LaTeX output --------------------------------------------- + +latex_elements = { + # The paper size ('letterpaper' or 'a4paper'). + # + # 'papersize': 'letterpaper', + + # The font size ('10pt', '11pt' or '12pt'). + # + # 'pointsize': '10pt', + + # Additional stuff for the LaTeX preamble. + # + # 'preamble': '', + + # Latex figure (float) alignment + # + # 'figure_align': 'htbp', +} + +# Grouping the document tree into LaTeX files. List of tuples +# (source start file, target name, title, +# author, documentclass [howto, manual, or own class]). +latex_documents = [ + (master_doc, 'ATD.tex', u'ATD Lab Guide', + u'ATD Help (atd-help@arista.com)', 'manual'), +] + + +# -- Options for manual page output --------------------------------------- + +# One entry per manual page. List of tuples +# (source start file, name, description, authors, manual section). +man_pages = [ + (master_doc, 'atd', u'ATD Lab Guide', + [author], 1) +] + + +# -- Options for Texinfo output ------------------------------------------- + +# Grouping the document tree into Texinfo files. List of tuples +# (source start file, target name, title, author, +# dir menu entry, description, category) +texinfo_documents = [ + (master_doc, 'ATD', u'ATD Lab Guide', + author, 'ATD', 'Lab Documentation.', + 'Miscellaneous'), +] + + +def setup(app): + app.add_stylesheet("my-styles.css") # also can be a full URL + # app.add_stylesheet("ANOTHER.css") + # app.add_stylesheet("AND_ANOTHER.css") diff --git a/topologies/training-level-avd/labguides/source/connecting.rst b/topologies/training-level-avd/labguides/source/connecting.rst new file mode 100644 index 000000000..10ae589ef --- /dev/null +++ b/topologies/training-level-avd/labguides/source/connecting.rst @@ -0,0 +1,28 @@ +Connecting +========== + +1. Log into the Arista Test Drive portal with your assigned URL. If you + don’t have one, please see your ATD staff. + +.. image:: images/connecting/nested_connecting_1.png + +2. SSH to the public address assigned to the LabAccess jumphost server (this is the Topology Address shown in the "Welcome to Arista's Test Drive!" picture above). The username is ``arista`` and the password is ``{REPLACE_PWD}``: + + .. code-block:: text + + ssh arista@{unique_address}.topo.testdrive.arista.com + +| + +.. image:: images/connecting/nested_connecting_2.png + :align: center + +| + +3. The LabAccess menu allows users to connect to each device and specify + lab topology. It is recommended to open multiple SSH sessions or use + the Screen option (under the SSH Menu) to jump between devices rapidly. + + You can also Access the LabAccess Menu from your browser by clicking on `Console Access` + +.. image:: images/connecting/nested_connecting_3.png diff --git a/topologies/training-level-avd/labguides/source/images/connecting/nested_connecting_1.png b/topologies/training-level-avd/labguides/source/images/connecting/nested_connecting_1.png new file mode 100644 index 000000000..aa76597b8 Binary files /dev/null and b/topologies/training-level-avd/labguides/source/images/connecting/nested_connecting_1.png differ diff --git a/topologies/training-level-avd/labguides/source/images/connecting/nested_connecting_2.png b/topologies/training-level-avd/labguides/source/images/connecting/nested_connecting_2.png new file mode 100644 index 000000000..2c6b51a2b Binary files /dev/null and b/topologies/training-level-avd/labguides/source/images/connecting/nested_connecting_2.png differ diff --git a/topologies/training-level-avd/labguides/source/images/connecting/nested_connecting_3.png b/topologies/training-level-avd/labguides/source/images/connecting/nested_connecting_3.png new file mode 100644 index 000000000..1cc7402a3 Binary files /dev/null and b/topologies/training-level-avd/labguides/source/images/connecting/nested_connecting_3.png differ diff --git a/topologies/training-level-avd/labguides/source/images/logo.jpg b/topologies/training-level-avd/labguides/source/images/logo.jpg new file mode 100644 index 000000000..6eda41f7e Binary files /dev/null and b/topologies/training-level-avd/labguides/source/images/logo.jpg differ diff --git a/topologies/training-level-avd/labguides/source/index.rst b/topologies/training-level-avd/labguides/source/index.rst new file mode 100644 index 000000000..bb76aaa2e --- /dev/null +++ b/topologies/training-level-avd/labguides/source/index.rst @@ -0,0 +1,8 @@ +Welcome to the Arista Training documentation! +======================================== + +.. toctree:: + :maxdepth: 1 + :caption: EOS Configuration + + connecting.rst diff --git a/topologies/training-level-avd/topo_build.yml b/topologies/training-level-avd/topo_build.yml new file mode 100644 index 000000000..9ccba5edb --- /dev/null +++ b/topologies/training-level-avd/topo_build.yml @@ -0,0 +1,385 @@ +host_cpu: 4 +cvp_cpu: 32 +cvp_ram: 42 +cvp_nodes: 1 +veos_cpu: 2 +nodes: + - spine1: + ip_addr: 192.168.0.11 + sys_mac: 00:1c:73:b1:c6:01 + neighbors: + - neighborDevice: spine2 + neighborPort: Ethernet1 + port: Ethernet1 + - neighborDevice: spine2 + neighborPort: Ethernet2 + port: Ethernet2 + - neighborDevice: leaf1 + neighborPort: Ethernet3 + port: Ethernet3 + - neighborDevice: leaf2 + neighborPort: Ethernet3 + port: Ethernet4 + - neighborDevice: leaf3 + neighborPort: Ethernet3 + port: Ethernet5 + - neighborDevice: leaf4 + neighborPort: Ethernet3 + port: Ethernet6 + - neighborDevice: borderleaf1 + neighborPort: Ethernet3 + port: Ethernet7 + - neighborDevice: borderleaf2 + neighborPort: Ethernet3 + port: Ethernet8 + - spine2: + ip_addr: 192.168.0.12 + sys_mac: 00:1c:73:b2:c6:01 + neighbors: + - neighborDevice: spine1 + neighborPort: Ethernet1 + port: Ethernet1 + - neighborDevice: spine1 + neighborPort: Ethernet2 + port: Ethernet2 + - neighborDevice: leaf1 + neighborPort: Ethernet4 + port: Ethernet3 + - neighborDevice: leaf2 + neighborPort: Ethernet4 + port: Ethernet4 + - neighborDevice: leaf3 + neighborPort: Ethernet4 + port: Ethernet5 + - neighborDevice: leaf4 + neighborPort: Ethernet4 + port: Ethernet6 + - neighborDevice: borderleaf1 + neighborPort: Ethernet4 + port: Ethernet7 + - neighborDevice: borderleaf2 + neighborPort: Ethernet4 + port: Ethernet8 + - spine3: + ip_addr: 192.168.0.13 + sys_mac: 00:1c:73:b3:c6:01 + neighbors: + - neighborDevice: spine4 + neighborPort: Ethernet1 + port: Ethernet1 + - neighborDevice: spine4 + neighborPort: Ethernet2 + port: Ethernet2 + - neighborDevice: leaf1 + neighborPort: Ethernet5 + port: Ethernet3 + - neighborDevice: leaf2 + neighborPort: Ethernet5 + port: Ethernet4 + - neighborDevice: leaf3 + neighborPort: Ethernet5 + port: Ethernet5 + - neighborDevice: leaf4 + neighborPort: Ethernet5 + port: Ethernet6 + - neighborDevice: borderleaf1 + neighborPort: Ethernet5 + port: Ethernet7 + - neighborDevice: borderleaf2 + neighborPort: Ethernet5 + port: Ethernet8 + - spine4: + ip_addr: 192.168.0.14 + sys_mac: 00:1c:73:b4:c6:01 + neighbors: + - neighborDevice: spine3 + neighborPort: Ethernet1 + port: Ethernet1 + - neighborDevice: spine3 + neighborPort: Ethernet2 + port: Ethernet2 + - neighborDevice: leaf1 + neighborPort: Ethernet6 + port: Ethernet3 + - neighborDevice: leaf2 + neighborPort: Ethernet6 + port: Ethernet4 + - neighborDevice: leaf3 + neighborPort: Ethernet6 + port: Ethernet5 + - neighborDevice: leaf4 + neighborPort: Ethernet6 + port: Ethernet6 + - neighborDevice: borderleaf1 + neighborPort: Ethernet6 + port: Ethernet7 + - neighborDevice: borderleaf2 + neighborPort: Ethernet6 + port: Ethernet8 + - leaf1: + ip_addr: 192.168.0.21 + sys_mac: 00:1c:73:c1:c6:01 + neighbors: + - neighborDevice: leaf2 + neighborPort: Ethernet1 + port: Ethernet1 + - neighborDevice: leaf2 + neighborPort: Ethernet2 + port: Ethernet2 + - neighborDevice: spine1 + neighborPort: Ethernet3 + port: Ethernet3 + - neighborDevice: spine2 + neighborPort: Ethernet3 + port: Ethernet4 + - neighborDevice: spine3 + neighborPort: Ethernet3 + port: Ethernet5 + - neighborDevice: spine4 + neighborPort: Ethernet3 + port: Ethernet6 + - neighborDevice: host1 + neighborPort: Ethernet1 + port: Ethernet7 + - neighborDevice: host5 + neighborPort: Ethernet1 + port: Ethernet8 + - neighborDevice: host2 + neighborPort: Ethernet1 + port: Ethernet9 + - neighborDevice: host6 + neighborPort: Ethernet1 + port: Ethernet10 + - leaf2: + ip_addr: 192.168.0.22 + sys_mac: 00:1c:73:c2:c6:01 + neighbors: + - neighborDevice: leaf1 + neighborPort: Ethernet1 + port: Ethernet1 + - neighborDevice: leaf1 + neighborPort: Ethernet2 + port: Ethernet2 + - neighborDevice: spine1 + neighborPort: Ethernet4 + port: Ethernet3 + - neighborDevice: spine2 + neighborPort: Ethernet4 + port: Ethernet4 + - neighborDevice: spine3 + neighborPort: Ethernet4 + port: Ethernet5 + - neighborDevice: spine4 + neighborPort: Ethernet4 + port: Ethernet6 + - neighborDevice: host1 + neighborPort: Ethernet2 + port: Ethernet7 + - neighborDevice: host5 + neighborPort: Ethernet2 + port: Ethernet8 + - neighborDevice: host2 + neighborPort: Ethernet2 + port: Ethernet9 + - neighborDevice: host6 + neighborPort: Ethernet2 + port: Ethernet10 + - leaf3: + ip_addr: 192.168.0.23 + sys_mac: 00:1c:73:c3:c6:01 + neighbors: + - neighborDevice: leaf4 + neighborPort: Ethernet1 + port: Ethernet1 + - neighborDevice: leaf4 + neighborPort: Ethernet2 + port: Ethernet2 + - neighborDevice: spine1 + neighborPort: Ethernet5 + port: Ethernet3 + - neighborDevice: spine2 + neighborPort: Ethernet5 + port: Ethernet4 + - neighborDevice: spine3 + neighborPort: Ethernet5 + port: Ethernet5 + - neighborDevice: spine4 + neighborPort: Ethernet5 + port: Ethernet6 + - neighborDevice: host3 + neighborPort: Ethernet1 + port: Ethernet7 + - neighborDevice: host7 + neighborPort: Ethernet1 + port: Ethernet8 + - neighborDevice: host4 + neighborPort: Ethernet1 + port: Ethernet9 + - neighborDevice: host8 + neighborPort: Ethernet1 + port: Ethernet10 + - leaf4: + ip_addr: 192.168.0.24 + sys_mac: 00:1c:73:c4:c6:01 + neighbors: + - neighborDevice: leaf3 + neighborPort: Ethernet1 + port: Ethernet1 + - neighborDevice: leaf3 + neighborPort: Ethernet2 + port: Ethernet2 + - neighborDevice: spine1 + neighborPort: Ethernet6 + port: Ethernet3 + - neighborDevice: spine2 + neighborPort: Ethernet6 + port: Ethernet4 + - neighborDevice: spine3 + neighborPort: Ethernet6 + port: Ethernet5 + - neighborDevice: spine4 + neighborPort: Ethernet6 + port: Ethernet6 + - neighborDevice: host3 + neighborPort: Ethernet2 + port: Ethernet7 + - neighborDevice: host7 + neighborPort: Ethernet2 + port: Ethernet8 + - neighborDevice: host4 + neighborPort: Ethernet2 + port: Ethernet9 + - neighborDevice: host8 + neighborPort: Ethernet2 + port: Ethernet10 + - borderleaf1: + ip_addr: 192.168.0.25 + sys_mac: 00:1c:73:c5:c6:01 + neighbors: + - neighborDevice: borderleaf2 + neighborPort: Ethernet1 + port: Ethernet1 + - neighborDevice: borderleaf2 + neighborPort: Ethernet2 + port: Ethernet2 + - neighborDevice: spine1 + neighborPort: Ethernet7 + port: Ethernet3 + - neighborDevice: spine2 + neighborPort: Ethernet7 + port: Ethernet4 + - neighborDevice: spine3 + neighborPort: Ethernet7 + port: Ethernet5 + - neighborDevice: spine4 + neighborPort: Ethernet7 + port: Ethernet6 + - borderleaf2: + ip_addr: 192.168.0.26 + sys_mac: 00:1c:73:c6:c6:01 + neighbors: + - neighborDevice: borderleaf1 + neighborPort: Ethernet1 + port: Ethernet1 + - neighborDevice: borderleaf1 + neighborPort: Ethernet2 + port: Ethernet2 + - neighborDevice: spine1 + neighborPort: Ethernet8 + port: Ethernet3 + - neighborDevice: spine2 + neighborPort: Ethernet8 + port: Ethernet4 + - neighborDevice: spine3 + neighborPort: Ethernet8 + port: Ethernet5 + - neighborDevice: spine4 + neighborPort: Ethernet8 + port: Ethernet6 + - host1: + ip_addr: 192.168.0.51 + sys_mac: 00:1c:73:f1:c6:01 + neighbors: + - neighborDevice: leaf1 + neighborPort: Ethernet7 + port: Ethernet1 + - neighborDevice: leaf2 + neighborPort: Ethernet7 + port: Ethernet2 + - host2: + ip_addr: 192.168.0.52 + sys_mac: 00:1c:73:f2:c6:01 + neighbors: + - neighborDevice: leaf1 + neighborPort: Ethernet9 + port: Ethernet1 + - neighborDevice: leaf2 + neighborPort: Ethernet9 + port: Ethernet2 + - host3: + ip_addr: 192.168.0.53 + sys_mac: 00:1c:73:f3:c6:01 + neighbors: + - neighborDevice: leaf3 + neighborPort: Ethernet7 + port: Ethernet1 + - neighborDevice: leaf4 + neighborPort: Ethernet7 + port: Ethernet2 + - host4: + ip_addr: 192.168.0.54 + sys_mac: 00:1c:73:f4:c6:01 + neighbors: + - neighborDevice: leaf3 + neighborPort: Ethernet9 + port: Ethernet1 + - neighborDevice: leaf4 + neighborPort: Ethernet9 + port: Ethernet2 +servers: + - host5: + image_name: "gcr.io/atd-testdrivetraining-dev/hosts-gui/host1:latest" + ip_addr: 192.168.0.101 + port : 6001 + neighbors: + - neighborDevice: leaf1 + neighborPort: Ethernet8 + port: Ethernet1 + - neighborDevice: leaf2 + neighborPort: Ethernet8 + port: Ethernet2 + - host6: + image_name: "gcr.io/atd-testdrivetraining-dev/hosts-gui/host1:latest" + ip_addr: 192.168.0.102 + port : 6002 + neighbors: + - neighborDevice: leaf1 + neighborPort: Ethernet10 + port: Ethernet1 + - neighborDevice: leaf2 + neighborPort: Ethernet10 + port: Ethernet2 + - host7: + image_name: "gcr.io/atd-testdrivetraining-dev/hosts-gui/host1:latest" + ip_addr: 192.168.0.103 + port : 6003 + neighbors: + - neighborDevice: leaf3 + neighborPort: Ethernet8 + port: Ethernet1 + - neighborDevice: leaf4 + neighborPort: Ethernet8 + port: Ethernet2 + - host8: + image_name: "gcr.io/atd-testdrivetraining-dev/hosts-gui/host1:latest" + ip_addr: 192.168.0.104 + port : 6004 + neighbors: + - neighborDevice: leaf3 + neighborPort: Ethernet10 + port: Ethernet1 + - neighborDevice: leaf4 + neighborPort: Ethernet10 + port: Ethernet2 +additional_ssh_nodes: +additional_clab_nodes: diff --git a/topologies/training-level1-exam-2/atd-topo.png b/topologies/training-level1-exam-2/atd-topo.png new file mode 100644 index 000000000..fd3348b82 Binary files /dev/null and b/topologies/training-level1-exam-2/atd-topo.png differ diff --git a/topologies/training-level1-exam-2/atd-topo.png-OLD b/topologies/training-level1-exam-2/atd-topo.png-OLD new file mode 100644 index 000000000..66e36d4d5 Binary files /dev/null and b/topologies/training-level1-exam-2/atd-topo.png-OLD differ diff --git a/topologies/training-level1-exam-2/configlets/ATD-INFRA b/topologies/training-level1-exam-2/configlets/ATD-INFRA new file mode 100644 index 000000000..6a88951d1 --- /dev/null +++ b/topologies/training-level1-exam-2/configlets/ATD-INFRA @@ -0,0 +1,45 @@ +daemon TerminAttr + exec /usr/bin/TerminAttr -cvcompression=gzip -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent -cvaddr=192.168.0.5:9910 -cvauth=token,/tmp/token -cvvrf=default -taillogs -disableaaa + no shutdown +! +alias mlag-reload bash /mnt/flash/shut_intfs && sudo shutdown now -r +alias conint sh interface | i connected +alias senz show interface counter error | nz +alias shmc show int | awk '/^[A-Z]/ { intf = $1 } /, address is/ { print intf, $6 }' +alias snz show interface counter | nz +alias spd show port-channel %1 detail all +alias sqnz show interface counter queue | nz +alias srnz show interface counter rate | nz +alias intdesc + !! Usage: intdesc interface-name description + 10 config + 20 int %1 + 30 desc %2 + 40 exit +! +dns domain arista.lab +! +service routing protocols model multi-agent +! +ntp server 192.168.0.1 iburst source Management1 +! +radius-server host 192.168.0.1 key 7 0207165218120E +! +aaa group server radius atds + server 192.168.0.1 +! +aaa authentication login default group atds local +aaa authorization exec default group atds local +aaa authorization commands all default local +! +username Script secret sha512 $6$PNfpb9anSBQ5/aia$phaa3ar5pwkntenD9WHc6Ed5b96lbW0dc0bjtwPnFLaDiCK8D5Cjl6ewP/xdNbl4PtS6Paq.3SssN8pj05NQm. +username admin privilege 15 role network-admin secret 5 $1$5O85YVVn$HrXcfOivJEnISTMb6xrJc. +username arista privilege 15 role network-admin secret 5 $1$4VjIjfd1$XkUVulbNDESHFzcxDU.Tk1 +! +username arista ssh-key ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC+ERvV4GaPq3FzxY8T+5hMF/1T+l8wiPsVCtOrZU4Hy6NCNlAiDBdA/RUtX5/aOu5JvHyPTVHqWJ0qi9BqU3rxCNl/l2/5UZbm9RPzdZ1QCwoYwPB9/j/tYJV8lZdr6t0yGBfxgzD3oW/zF7a+ZtASaMAu7lkgoqPK2pVIGa+Y9ZCsA0Xq756XpLCw+d3pHKHvIkgWLCo9FoeIv8f/bu5u/ztzRE+Nvl+o5add6MxnjsXz3s7BnW2FX6JNjyp0Z+OXjupQc2gcfFvpd/dA2lCNuuaCHkRgyPwIZtWPmNqMRXPp37mlPwV43qDJRVPQkvh0xPxwS35BbzUxWdT+ZLZv +! +ip radius source-interface Management1 +! +management api http-commands + no shutdown +! diff --git a/topologies/training-level1-exam-2/configlets/Base-Builder.py b/topologies/training-level1-exam-2/configlets/Base-Builder.py new file mode 100644 index 000000000..2b3cd2db8 --- /dev/null +++ b/topologies/training-level1-exam-2/configlets/Base-Builder.py @@ -0,0 +1,76 @@ +from cvplibrary import CVPGlobalVariables, GlobalVariableNames, Form + + + +# Get this devices Serial + + +serial = CVPGlobalVariables.getValue( GlobalVariableNames.CVP_SERIAL ) +mask = '24' +ServiceRouting = True + +#Create the IP address from the serial number + +IPaddress = '192.168.0.66' + +if serial == '9BD9FE8B8A0EB6F43910F5F583A9CF40': + IPaddress = '192.168.0.21' + hostname = 'leaf1' + + +elif serial == '8823F318C30617010F15E56A40D3AE14': + IPaddress = '192.168.0.22' + hostname = 'leaf2' + + +elif serial == '5356CC64EE6812A82D43E42F3BC0F3C5': + IPaddress = '192.168.0.23' + hostname = 'leaf3' + + +elif serial == '04DADEBA6B3D1548218141BC827D02A5': + IPaddress = '192.168.0.24' + hostname = 'leaf4' + +elif serial == '329874C0FD77D12A30D571B6B79E9195': + IPaddress = '192.168.0.11' + hostname = 'spine1' + +elif serial == '4B49885915FFE471AB899ACDEE5B803D': + IPaddress = '192.168.0.12' + hostname = 'spine2' + + +elif serial == 'FF5D15D80D0D3E6B8D1D060DE545627D': + IPaddress = '192.168.0.51' + ServiceRouting = False + hostname = 'host1' + + +elif serial == '94910C4142FA2F7B76DFEC1D3C761E28': + IPaddress = '192.168.0.52' + ServiceRouting = False + hostname = 'host2' + + +# Generate and print config - Ignore the service routing command if not needed +print 'hostname %s' % hostname +print '!' +print 'interface Management 1' +print ' ip address %s/%s' % ( IPaddress, mask ) +print ' no lldp transmit' +print ' no lldp receive' +print '!' +if ServiceRouting: + print 'service routing protocols model multi-agent' + print '!' +print 'dns domain arista.lab' +print '!' +print 'ip route 0.0.0.0/0 192.168.0.1' +print '!' +print 'ip routing' +print '!' +print 'management api http-commands' +print ' no shutdown' +print ' protocol http' +print '!' \ No newline at end of file diff --git a/topologies/training-level1-exam-2/configlets/borderleaf1-base b/topologies/training-level1-exam-2/configlets/borderleaf1-base new file mode 100644 index 000000000..01861c0ef --- /dev/null +++ b/topologies/training-level1-exam-2/configlets/borderleaf1-base @@ -0,0 +1,15 @@ +hostname borderleaf1 +! +interface Management 1 + ip address 192.168.0.15/24 + no lldp transmit + no lldp receive +! +service routing protocols model multi-agent +! +dns domain arista.lab +! +ip route 0.0.0.0/0 192.168.0.1 +! +ip routing +! diff --git a/topologies/training-level1-exam-2/configlets/host1-base b/topologies/training-level1-exam-2/configlets/host1-base new file mode 100644 index 000000000..b2241fae2 --- /dev/null +++ b/topologies/training-level1-exam-2/configlets/host1-base @@ -0,0 +1,13 @@ +hostname host1 +! +interface Management 1 + ip address 192.168.0.51/24 + no lldp transmit + no lldp receive +! +dns domain arista.lab +! +ip route 0.0.0.0/0 192.168.0.1 +! +ip routing +! diff --git a/topologies/training-level1-exam-2/configlets/host2-base b/topologies/training-level1-exam-2/configlets/host2-base new file mode 100644 index 000000000..60efc468e --- /dev/null +++ b/topologies/training-level1-exam-2/configlets/host2-base @@ -0,0 +1,13 @@ +hostname host2 +! +interface Management 1 + ip address 192.168.0.52/24 + no lldp transmit + no lldp receive +! +dns domain arista.lab +! +ip route 0.0.0.0/0 192.168.0.1 +! +ip routing +! diff --git a/topologies/training-level1-exam-2/configlets/host3-base b/topologies/training-level1-exam-2/configlets/host3-base new file mode 100644 index 000000000..f5be2b0a7 --- /dev/null +++ b/topologies/training-level1-exam-2/configlets/host3-base @@ -0,0 +1,13 @@ +hostname host3 +! +interface Management 1 + ip address 192.168.0.53/24 + no lldp transmit + no lldp receive +! +dns domain arista.lab +! +ip route 0.0.0.0/0 192.168.0.1 +! +ip routing +! diff --git a/topologies/training-level1-exam-2/configlets/leaf1-base b/topologies/training-level1-exam-2/configlets/leaf1-base new file mode 100644 index 000000000..47e0ce3f6 --- /dev/null +++ b/topologies/training-level1-exam-2/configlets/leaf1-base @@ -0,0 +1,15 @@ +hostname leaf1 +! +interface Management 1 + ip address 192.168.0.21/24 + no lldp transmit + no lldp receive +! +service routing protocols model multi-agent +! +dns domain arista.lab +! +ip route 0.0.0.0/0 192.168.0.1 +! +ip routing +! diff --git a/topologies/training-level1-exam-2/configlets/leaf2-base b/topologies/training-level1-exam-2/configlets/leaf2-base new file mode 100644 index 000000000..72fae64c3 --- /dev/null +++ b/topologies/training-level1-exam-2/configlets/leaf2-base @@ -0,0 +1,15 @@ +hostname leaf2 +! +interface Management 1 + ip address 192.168.0.22/24 + no lldp transmit + no lldp receive +! +service routing protocols model multi-agent +! +dns domain arista.lab +! +ip route 0.0.0.0/0 192.168.0.1 +! +ip routing +! diff --git a/topologies/training-level1-exam-2/configlets/leaf3-base b/topologies/training-level1-exam-2/configlets/leaf3-base new file mode 100644 index 000000000..ab93834f4 --- /dev/null +++ b/topologies/training-level1-exam-2/configlets/leaf3-base @@ -0,0 +1,15 @@ +hostname leaf3 +! +interface Management 1 + ip address 192.168.0.23/24 + no lldp transmit + no lldp receive +! +service routing protocols model multi-agent +! +dns domain arista.lab +! +ip route 0.0.0.0/0 192.168.0.1 +! +ip routing +! diff --git a/topologies/training-level1-exam-2/configlets/leaf4-base b/topologies/training-level1-exam-2/configlets/leaf4-base new file mode 100644 index 000000000..a3b808c25 --- /dev/null +++ b/topologies/training-level1-exam-2/configlets/leaf4-base @@ -0,0 +1,15 @@ +hostname leaf4 +! +interface Management 1 + ip address 192.168.0.24/24 + no lldp transmit + no lldp receive +! +service routing protocols model multi-agent +! +dns domain arista.lab +! +ip route 0.0.0.0/0 192.168.0.1 +! +ip routing +! diff --git a/topologies/training-level1-exam-2/configlets/spine1-base b/topologies/training-level1-exam-2/configlets/spine1-base new file mode 100644 index 000000000..322102842 --- /dev/null +++ b/topologies/training-level1-exam-2/configlets/spine1-base @@ -0,0 +1,15 @@ +hostname spine1 +! +interface Management 1 + ip address 192.168.0.11/24 + no lldp transmit + no lldp receive +! +service routing protocols model multi-agent +! +dns domain arista.lab +! +ip route 0.0.0.0/0 192.168.0.1 +! +ip routing +! diff --git a/topologies/training-level1-exam-2/configlets/spine2-base b/topologies/training-level1-exam-2/configlets/spine2-base new file mode 100644 index 000000000..c664c14cc --- /dev/null +++ b/topologies/training-level1-exam-2/configlets/spine2-base @@ -0,0 +1,15 @@ +hostname spine2 +! +interface Management 1 + ip address 192.168.0.12/24 + no lldp transmit + no lldp receive +! +service routing protocols model multi-agent +! +dns domain arista.lab +! +ip route 0.0.0.0/0 192.168.0.1 +! +ip routing +! diff --git a/topologies/training-level1-exam-2/files/.ansible.cfg b/topologies/training-level1-exam-2/files/.ansible.cfg new file mode 100644 index 000000000..14c806515 --- /dev/null +++ b/topologies/training-level1-exam-2/files/.ansible.cfg @@ -0,0 +1,2 @@ +[defaults] +host_key_checking = False diff --git a/topologies/training-level1-exam-2/files/.screenrc b/topologies/training-level1-exam-2/files/.screenrc new file mode 100644 index 000000000..76c394214 --- /dev/null +++ b/topologies/training-level1-exam-2/files/.screenrc @@ -0,0 +1,19 @@ +# Turn off the startup message. +startup_message off +# Set the caption to the active windows. +caption always "%-Lw%{= BW}%50>%n%f* %t%{-}%+Lw%<" + +term screen-256color + +# New screens for various processes. +# Example: screen -t +# screen -t 7050SX-128 0 ssh aristaadmin@192.100.37.128 +screen -t CVP 1 ssh 192.168.0.5 +screen -t Spine1 2 ssh 192.168.0.11 +screen -t Spine2 3 ssh 192.168.0.12 +screen -t Leaf1 4 ssh 192.168.0.21 +screen -t Leaf2 5 ssh 192.168.0.22 +screen -t Leaf3 6 ssh 192.168.0.23 +screen -t Leaf4 7 ssh 192.168.0.24 +screen -t Host1 8 ssh 192.168.0.51 +screen -t Host2 9 ssh 192.168.0.52 diff --git a/topologies/training-level1-exam-2/files/MenuOptions.yaml b/topologies/training-level1-exam-2/files/MenuOptions.yaml new file mode 100644 index 000000000..8c0bf20bb --- /dev/null +++ b/topologies/training-level1-exam-2/files/MenuOptions.yaml @@ -0,0 +1,255 @@ +--- +options: + reset: + - command: "/usr/local/bin/ConfigureTopology.py && bash /home/arista/Broadcaster/pushHostDefaultConfig.sh" + description: "Reset All Devices to Base ATD (reset)" + mlag: + - command: "/usr/local/bin/ConfigureTopology.py -t mlag" + description: "MLAG Lab (mlag)" + bgp: + - command: "/usr/local/bin/ConfigureTopology.py -t bgp" + description: "BGP Lab (bgp)" + vxlan: + - command: "/usr/local/bin/ConfigureTopology.py -t vxlan" + description: "VXLAN Lab (vxlan) excludes leaf3 instead of leaf4" + l2evpn: + - command: "/usr/local/bin/ConfigureTopology.py -t l2evpn" + description: "EVPN Type 2 Lab (l2evpn) excludes leaf3 instead of leaf4" + l3evpn: + - command: "/usr/local/bin/ConfigureTopology.py -t l3evpn" + description: "EVPN Type 5 Lab (l3evpn) excludes leaf3 instead of leaf4" + cvp: + - command: "/usr/local/bin/ConfigureTopology.py -t cvp" + description: "CVP lab (cvp)" + media: + - command: "bash /home/arista/Broadcaster/pushHostMediaConfig.sh && login.py" + description: "Broadcast Engineer Training (media)" +labconfiglets: + mlag: + spine1: + - "Spine1-MLAG-Lab" + - "VLANs" + spine2: + - "Spine2-MLAG-Lab" + - "VLANs" + leaf1: + - "Leaf1-MLAG-Lab" + - "VLANs" + leaf2: + - "Leaf2-MLAG-Lab" + - "VLANs" + leaf3: + - "Leaf3-MLAG-Lab" + - "VLANs" + leaf4: + - "VLANs" + cvx01: + - "cvx01-Controller" + host1: + - "Host1-ATD" + host2: + - "Host2-ATD" + bgp: + spine1: + - "Spine1-BGP-Lab" + spine2: + - "Spine2-BGP-Lab" + leaf1: + - "Leaf1-BGP-Lab" + leaf2: + - "Leaf2-BGP-Lab" + leaf3: + - "Leaf3-BGP-Lab" + leaf4: + - "Leaf4-BGP-Lab" + cvx01: + - "cvx01-Controller" + host1: + - "Host1-ATD" + host2: + - "Host2-ATD" + vxlan: + spine1: + - "Spine1-BGP-Lab" + spine2: + - "Spine2-BGP-Lab" + leaf1: + - "Leaf1-VXLAN-Lab" + - "VLANs" + leaf2: + - "Leaf2-VXLAN-Lab" + - "VLANs" + leaf3: + - "Leaf3-VXLAN-Lab" + - "VLANs" + leaf4: + - "Leaf4-VXLAN-Lab" + - "VLANs" + cvx01: + - "cvx01-Controller" + host1: + - "Host1-ATD" + host2: + - "Host2-ATD" + l2evpn: + spine1: + - "Spine1-L2EVPN-Lab" + spine2: + - "Spine2-L2EVPN-Lab" + leaf1: + - "Leaf1-L2EVPN-Lab" + - "VLANs" + leaf2: + - "Leaf2-L2EVPN-Lab" + - "VLANs" + leaf3: + - "VLANs" + leaf4: + - "Leaf4-L2EVPN-Lab" + - "VLANs" + cvx01: + - "cvx01-Controller" + host1: + - "Host1-ATD" + host2: + - "Host2-ATD" + l3evpn: + spine1: + - "Spine1-L3EVPN-Lab" + spine2: + - "Spine2-L3EVPN-Lab" + leaf1: + - "Leaf1-L3EVPN-Lab" + leaf2: + - "Leaf2-L3EVPN-Lab" + leaf3: + - "VLANs" + leaf4: + - "Leaf4-L3EVPN-Lab" + cvx01: + - "cvx01-Controller" + host1: + - "Host1-ATD" + host2: + - "Host2-ATD" + cvp: + spine1: + - "Spine1-BGP-Lab" + spine2: + - "Spine2-BGP-Lab" + leaf1: + - "Leaf1-BGP-Lab" + leaf2: + - "Leaf2-BGP-Lab" + leaf3: + - "Leaf3-BGP-Lab" + leaf4: + - "Leaf4-BGP-Lab-Full" + cvx01: + - "cvx01-Controller" + host1: + - "Host1-ATD" + host2: + - "Host2-ATD" + media-reset: + spine1: + - "media-spine1-IP-Intro-start" + spine2: + - "media-spine2-IP-Intro-start" + leaf1: + - "media-leaf1-IP-Intro-start" + leaf2: + - "media-leaf2-IP-Intro-start" + leaf3: + - "media-leaf3-IP-Intro-start" + leaf4: + - "media-leaf4-IP-Intro-start" + host1: + - "Host1-Media" + host2: + - "Host2-Media" + media-intro: + spine1: + - "media-spine1-IP-Intro-start" + spine2: + - "media-spine2-IP-Intro-start" + leaf1: + - "media-leaf1-IP-Intro-start" + leaf2: + - "media-leaf2-IP-Intro-start" + leaf3: + - "media-leaf3-IP-Intro-start" + leaf4: + - "media-leaf4-IP-Intro-start" + host1: + - "Host1-Media" + host2: + - "Host2-Media" + media-vlan: + spine1: + - "media-spine1-VLAN-STP-start" + spine2: + - "media-spine2-VLAN-STP-start" + leaf1: + - "media-leaf1-VLAN-STP-start" + leaf2: + - "media-leaf2-VLAN-STP-start" + leaf3: + - "media-leaf3-VLAN-STP-start" + leaf4: + - "media-leaf4-VLAN-STP-start" + host1: + - "Host1-Media" + host2: + - "Host2-Media" + media-ospf: + spine1: + - "media-spine1-OSPF-start" + spine2: + - "media-spine2-OSPF-start" + leaf1: + - "media-leaf1-OSPF-start" + leaf2: + - "media-leaf2-OSPF-start" + leaf3: + - "media-leaf3-OSPF-start" + leaf4: + - "media-leaf4-OSPF-start" + host1: + - "Host1-Media" + host2: + - "Host2-Media" + media-bgp: + spine1: + - "media-spine1-BGP-start" + spine2: + - "media-spine2-BGP-start" + leaf1: + - "media-leaf1-BGP-start" + leaf2: + - "media-leaf2-BGP-start" + leaf3: + - "media-leaf3-BGP-start" + leaf4: + - "media-leaf4-BGP-start" + host1: + - "Host1-Media" + host2: + - "Host2-Media" + media-mcast: + spine1: + - "media-spine1-Multicast-lab" + spine2: + - "media-spine2-Multicast-lab" + leaf1: + - "media-leaf1-Multicast-lab" + leaf2: + - "media-leaf2-Multicast-lab" + leaf3: + - "media-leaf3-Multicast-lab" + leaf4: + - "media-leaf4-Multicast-lab" + host1: + - "Host1-Media" + host2: + - "Host2-Media" diff --git a/topologies/training-level1-exam-2/files/apps/coder/coder.yaml b/topologies/training-level1-exam-2/files/apps/coder/coder.yaml new file mode 100644 index 000000000..80cc852d1 --- /dev/null +++ b/topologies/training-level1-exam-2/files/apps/coder/coder.yaml @@ -0,0 +1,4 @@ +bind-addr: 127.0.0.1:8080 +auth: password +password: {ARISTA_REPLACE} +cert: false \ No newline at end of file diff --git a/topologies/training-level1-exam-2/files/apps/coder/labfiles/.placeholder b/topologies/training-level1-exam-2/files/apps/coder/labfiles/.placeholder new file mode 100644 index 000000000..e69de29bb diff --git a/topologies/training-level1-exam-2/files/apps/ssh/web.json b/topologies/training-level1-exam-2/files/apps/ssh/web.json new file mode 100644 index 000000000..13fac47dd --- /dev/null +++ b/topologies/training-level1-exam-2/files/apps/ssh/web.json @@ -0,0 +1,76 @@ +{ + "listen": { + "ip": "0.0.0.0", + "port": 2222 + }, + "user": { + "name": null, + "password": null, + "privatekey": null + }, + "ssh": { + "host": null, + "port": 22, + "localAddress": null, + "localPort": null, + "term": "xterm-color", + "readyTimeout": 20000, + "keepaliveInterval": 120000, + "keepaliveCountMax": 10, + "allowedSubnets": [ "192.168.0.0/16", "10.0.0.0/8", "172.16.0.0/12" ] + }, + "terminal": { + "cursorBlink": true, + "scrollback": 10000, + "tabStopWidth": 8, + "bellStyle": "sound" + }, + "header": { + "text": null, + "background": "green" + }, + "session": { + "name": "WebSSH2", + "secret": "mysecret" + }, + "options": { + "challengeButton": true, + "allowreauth": true + }, + "algorithms": { + "kex": [ + "ecdh-sha2-nistp256", + "ecdh-sha2-nistp384", + "ecdh-sha2-nistp521", + "diffie-hellman-group-exchange-sha256", + "diffie-hellman-group14-sha1" + ], + "cipher": [ + "aes128-ctr", + "aes192-ctr", + "aes256-ctr", + "aes128-gcm", + "aes128-gcm@openssh.com", + "aes256-gcm", + "aes256-gcm@openssh.com", + "aes256-cbc" + ], + "hmac": [ + "hmac-sha2-256", + "hmac-sha2-512", + "hmac-sha1" + ], + "compress": [ + "none", + "zlib@openssh.com", + "zlib" + ] + }, + "serverlog": { + "client": false, + "server": false + }, + "accesslog": false, + "verify": false, + "safeShutdownDuration": 300 + } \ No newline at end of file diff --git a/topologies/training-level1-exam-2/files/apps/uilanding/modules.yaml b/topologies/training-level1-exam-2/files/apps/uilanding/modules.yaml new file mode 100644 index 000000000..fb504a967 --- /dev/null +++ b/topologies/training-level1-exam-2/files/apps/uilanding/modules.yaml @@ -0,0 +1,27 @@ +topology: + image: "atd-topo.png" + nodes: + Spine1: + coords: "208,22,392,106" + ip: "192.168.0.11" + Spine2: + coords: "505,21,687,106" + ip: "192.168.0.12" + Leaf1: + coords: "24,317,207,402" + ip: "192.168.0.21" + Leaf2: + coords: "248,317,431,403" + ip: "192.168.0.22" + Leaf3: + coords: "472,317,654,401" + ip: "192.168.0.23" + Leaf4: + coords: "697,317,879,401" + ip: "192.168.0.24" + Host1: + coords: "139,472,323,557" + ip: "192.168.0.51" + Host2: + coords: "588,473,772,557" + ip: "192.168.0.52" diff --git a/topologies/training-level1-exam-2/files/apps/webui/.vncpass_clear b/topologies/training-level1-exam-2/files/apps/webui/.vncpass_clear new file mode 100644 index 000000000..cd09dd7a5 --- /dev/null +++ b/topologies/training-level1-exam-2/files/apps/webui/.vncpass_clear @@ -0,0 +1 @@ +@rista1 \ No newline at end of file diff --git a/topologies/training-level1-exam-2/files/cvp/cvp_info.yaml b/topologies/training-level1-exam-2/files/cvp/cvp_info.yaml new file mode 100644 index 000000000..0bfba5c16 --- /dev/null +++ b/topologies/training-level1-exam-2/files/cvp/cvp_info.yaml @@ -0,0 +1,53 @@ +cvp_info: + containers: + Tenant: + nodes: + Leaf: + parent: Tenant + nodes: + - leaf1 + - leaf2 + - leaf3 + - leaf4 + Spine: + parent: Tenant + nodes: + - spine1 + - spine2 + Hosts: + parent: Tenant + nodes: + - host1 + - host2 + - host3 + borderleaf1: + parent: Tenant + nodes: + - borderleaf1 + snapshots: + configlets: + containers: + Tenant: + - ATD-INFRA + netelements: + spine1: + - spine1-base + spine2: + - spine2-base + leaf1: + - leaf1-base + leaf2: + - leaf2-base + leaf3: + - leaf3-base + leaf4: + - leaf4-base + host1: + - host1-base + host2: + - host2-base + host3: + - host3-base + borderleaf1: + - borderleaf1-base + \ No newline at end of file diff --git a/topologies/training-level1-exam-2/files/hosts b/topologies/training-level1-exam-2/files/hosts new file mode 100644 index 000000000..a299812df --- /dev/null +++ b/topologies/training-level1-exam-2/files/hosts @@ -0,0 +1,18 @@ +127.0.0.1 localhost +192.168.0.11 spine1 +192.168.0.12 spine2 +192.168.0.13 spine3 +192.168.0.14 spine4 +192.168.0.21 leaf1 +192.168.0.22 leaf2 +192.168.0.23 leaf3 +192.168.0.24 leaf4 +192.168.0.41 server1 +192.168.0.42 server2 +192.168.0.43 server3 +192.168.0.44 server4 +192.168.0.51 host1 +192.168.0.52 host2 +192.168.0.53 host3 +192.168.0.54 host4 +192.168.0.5 cvp diff --git a/topologies/training-level1-exam-2/files/menus/default.yaml b/topologies/training-level1-exam-2/files/menus/default.yaml new file mode 100644 index 000000000..88e29c3e2 --- /dev/null +++ b/topologies/training-level1-exam-2/files/menus/default.yaml @@ -0,0 +1,2 @@ +--- +default_menu: ssh \ No newline at end of file diff --git a/topologies/training-level1-exam-2/files/menus/training-l2.yaml b/topologies/training-level1-exam-2/files/menus/training-l2.yaml new file mode 100644 index 000000000..12b6c959a --- /dev/null +++ b/topologies/training-level1-exam-2/files/menus/training-l2.yaml @@ -0,0 +1,26 @@ +--- + lab_list: + reset: + description: "Reset All Devices to Base Lab (reset)" + labconfiglets: + reset: + spine1: + - "spine1-base" + spine2: + - "spine2-base" + leaf1: + - "leaf1-base" + leaf2: + - "leaf2-base" + leaf3: + - "leaf3-base" + leaf4: + - "leaf4-base" + host1: + - "host1-base" + host2: + - "host2-base" + host3: + - "host3-base" + borderleaf1: + - "borderleaf1-base" \ No newline at end of file diff --git a/topologies/training-level1-exam-2/files/scripts/Authenticate-CVP b/topologies/training-level1-exam-2/files/scripts/Authenticate-CVP new file mode 100644 index 000000000..144bb13eb --- /dev/null +++ b/topologies/training-level1-exam-2/files/scripts/Authenticate-CVP @@ -0,0 +1,32 @@ +import requests +import json + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + +# Print user details + +print "User Name:%s\n "%output['username'] +print "First Name: %s\n "%output['user']['firstName'] +print "Last Name: %s\n "%output['user']['lastName'] +print "User Permissions: %s\n "%output['permissionList'] +print "Cookie Jar: %s\n "%cookies diff --git a/topologies/training-level1-exam-2/files/scripts/Authenticate-CVP2 b/topologies/training-level1-exam-2/files/scripts/Authenticate-CVP2 new file mode 100644 index 000000000..3f6bf9190 --- /dev/null +++ b/topologies/training-level1-exam-2/files/scripts/Authenticate-CVP2 @@ -0,0 +1,48 @@ +import requests +import json + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + +# Print user details + +print "User Name:%s\n "%output['username'] +print "First Name: %s\n "%output['user']['firstName'] +print "Last Name: %s\n "%output['user']['lastName'] +print "User Permissions: %s\n "%output['permissionList'] +print "Cookie Jar: %s\n "%cookies + +#Create an HTTP GET request to the CVP server + +getConfigletURL = "/cvpservice/configlet/getConfiglets.do?" +getConfigletParams = {'startIndex':'0','endIndex':'0','type':'Configlet'} +response = requests.get(url+getConfigletURL,cookies=cookies, params=getConfigletParams,verify=False) +assert response.ok +outputConfiglets = response.json() + +# Print Configlet details + +for configlet in outputConfiglets['data']: + print "ConfigletName: %s"%configlet['name'] + print "ConfigletKey: %s"%configlet['key'] + print "\n" + diff --git a/topologies/training-level1-exam-2/files/scripts/Authenticate-CVP3 b/topologies/training-level1-exam-2/files/scripts/Authenticate-CVP3 new file mode 100644 index 000000000..2445806ea --- /dev/null +++ b/topologies/training-level1-exam-2/files/scripts/Authenticate-CVP3 @@ -0,0 +1,95 @@ +import requests +import json + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + +# Print user details + +print "User Name:%s\n "%output['username'] +print "First Name: %s\n "%output['user']['firstName'] +print "Last Name: %s\n "%output['user']['lastName'] +print "User Permissions: %s\n "%output['permissionList'] +print "Cookie Jar: %s\n "%cookies + +#Create an HTTP GET request to the CVP server + +getConfigletURL = "/cvpservice/configlet/getConfiglets.do?" +getConfigletParams = {'startIndex':'0','endIndex':'0','type':'Configlet'} +response = requests.get(url+getConfigletURL,cookies=cookies, params=getConfigletParams,verify=False) +assert response.ok +outputConfiglets = response.json() + +# Print Configlet details + +for configlet in outputConfiglets['data']: + print "ConfigletName: %s"%configlet['name'] + print "ConfigletKey: %s"%configlet['key'] + print "\n" +# Create an HTTP GET request to the CVP server + +getConfigletHistoryURL = "/cvpservice/configlet/getConfigletHistory.do?" +getConfigletParams = {'configletId':'configlet_32_438214998013','startIndex':'0','endIndex':'0'} +response = requests.get(url+getConfigletHistoryURL,cookies=cookies, params=getConfigletParams,verify=False) +assert response.ok +outputConfigletHistory = response.json() + +# Print Configlet details + +for entry in outputConfigletHistory['configletHistory']: + print "ConfigletKey: %s"%entry['key'] + print "ConfigletOldConfig: %s"%entry['oldConfig'] + print "ConfigletNewConfig: %s"%entry['newConfig'] + print "\n" + + +# Create an HTTP GET request to the CVP server + +getConfigletDetailURL = "/cvpservice/configlet/getConfigletByName.do?" +getConfigletParams = {'name':'VLANs'} +response = requests.get(url+getConfigletDetailURL,cookies=cookies, params=getConfigletParams,verify=False) +assert response.ok +outputConfigletDetail = response.json() + +# Print Configlet details + +print "ConfigletKey: %s"%outputConfigletDetail['key'] +print "ConfigletName: %s"%outputConfigletDetail['name'] +print "ConfigletConfig: %s"%outputConfigletDetail['config'] +print "ConfigletNote: %s"%outputConfigletDetail['note'] +print "\n" + + +# Create an HTTP POST request to the CVP server + +headers = { 'Content-Type': 'application/json' } +postConfigletChangeURL = "/cvpservice/configlet/updateConfiglet.do" +changeData = json.dumps({"config": "! some configuration here", "key": "configlet_32_438214998013", "name": "VLANs"}) +response = requests.post(url+postConfigletChangeURL, cookies=cookies, data=changeData,headers=headers,verify=False) +assert response.ok +outputConfigletChange = response.json() + +# Print Configlet details + +print "ConfigletChange: %s"%outputConfigletChange['data'] +print "\n" + diff --git a/topologies/training-level1-exam-2/files/scripts/Configlet1 b/topologies/training-level1-exam-2/files/scripts/Configlet1 new file mode 100644 index 000000000..3f6bf9190 --- /dev/null +++ b/topologies/training-level1-exam-2/files/scripts/Configlet1 @@ -0,0 +1,48 @@ +import requests +import json + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + +# Print user details + +print "User Name:%s\n "%output['username'] +print "First Name: %s\n "%output['user']['firstName'] +print "Last Name: %s\n "%output['user']['lastName'] +print "User Permissions: %s\n "%output['permissionList'] +print "Cookie Jar: %s\n "%cookies + +#Create an HTTP GET request to the CVP server + +getConfigletURL = "/cvpservice/configlet/getConfiglets.do?" +getConfigletParams = {'startIndex':'0','endIndex':'0','type':'Configlet'} +response = requests.get(url+getConfigletURL,cookies=cookies, params=getConfigletParams,verify=False) +assert response.ok +outputConfiglets = response.json() + +# Print Configlet details + +for configlet in outputConfiglets['data']: + print "ConfigletName: %s"%configlet['name'] + print "ConfigletKey: %s"%configlet['key'] + print "\n" + diff --git a/topologies/training-level1-exam-2/files/scripts/ConfigletChange b/topologies/training-level1-exam-2/files/scripts/ConfigletChange new file mode 100644 index 000000000..691ff5864 --- /dev/null +++ b/topologies/training-level1-exam-2/files/scripts/ConfigletChange @@ -0,0 +1,40 @@ +import requests +import json + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + + +# Create an HTTP POST request to the CVP server + +headers = { 'Content-Type': 'application/json' } +postConfigletChangeURL = "/cvpservice/configlet/addNoteToConfiglet.do" +changeData = json.dumps({"note": "Configlet Changed by API", "key": "configlet_516_7018635812307"}) +response = requests.post(url+postConfigletChangeURL, cookies=cookies, data=changeData,headers=headers,verify=False) +assert response.ok +outputConfigletChange = response.json() + +# Print Configlet details + +print "ConfigletChange: %s"%outputConfigletChange['data'] +print "\n" + diff --git a/topologies/training-level1-exam-2/files/scripts/ConfigletDetail b/topologies/training-level1-exam-2/files/scripts/ConfigletDetail new file mode 100644 index 000000000..eb2a85937 --- /dev/null +++ b/topologies/training-level1-exam-2/files/scripts/ConfigletDetail @@ -0,0 +1,43 @@ +import requests +import json + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + +# Create an HTTP GET request to the CVP server + +getConfigletDetailURL = "/cvpservice/configlet/getConfigletByName.do?" +getConfigletParams = {'name':'VLANs'} +response = requests.get(url+getConfigletDetailURL,cookies=cookies, params=getConfigletParams,verify=False) +assert response.ok +outputConfigletDetail = response.json() + +# Print Configlet details + +print "ConfigletKey: %s"%outputConfigletDetail['key'] +print "ConfigletName: %s"%outputConfigletDetail['name'] +print "ConfigletConfig: %s"%outputConfigletDetail['config'] +print "ConfigletNote: %s"%outputConfigletDetail['note'] +print "\n" + + + diff --git a/topologies/training-level1-exam-2/files/scripts/ConfigletHistory b/topologies/training-level1-exam-2/files/scripts/ConfigletHistory new file mode 100644 index 000000000..71f1ac693 --- /dev/null +++ b/topologies/training-level1-exam-2/files/scripts/ConfigletHistory @@ -0,0 +1,41 @@ +import requests +import json + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + +# Create an HTTP GET request to the CVP server + +getConfigletHistoryURL = "/cvpservice/configlet/getConfigletHistory.do?" +getConfigletParams = {'configletId':'configlet_344_7351420097365','startIndex':'0','endIndex':'0'} +response = requests.get(url+getConfigletHistoryURL,cookies=cookies, params=getConfigletParams,verify=False) +assert response.ok +outputConfigletHistory = response.json() + +# Print Configlet details + +for entry in outputConfigletHistory['configletHistory']: + print "ConfigletKey: %s"%entry['key'] + print "ConfigletOldConfig: \n%s"%entry['oldConfig'] + print "ConfigletNewConfig: \n%s"%entry['newConfig'] + print "\n" + diff --git a/topologies/training-level1-exam-2/files/scripts/TaskBase b/topologies/training-level1-exam-2/files/scripts/TaskBase new file mode 100644 index 000000000..6f8deccaf --- /dev/null +++ b/topologies/training-level1-exam-2/files/scripts/TaskBase @@ -0,0 +1,59 @@ +import requests +import json + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + + +# Create an HTTP GET request to the CVP server + +getTasksURL = "/cvpservice/task/getTasks.do?" +getTasksParams = {'startIndex':'0','endIndex':'0','queryparam':'Pending'} +response = requests.get(url+getTasksURL,cookies=cookies, params=getTasksParams,verify=False) +assert response.ok +outputPendingTasks = response.json() + + +# Print Tasks Created by Current User +taskList = [ ] +for entry in outputPendingTasks['data']: + if str(entry['createdBy']) == str(CVP_USER): + print "TaskNumber: %s"%entry['workOrderId'] + taskList.append(str(entry['workOrderId'])) +print "TaskList: %s"%taskList + + + +# Create an HTTP POST request to the CVP server + +headers = { 'Content-Type': 'application/json' } +postTaskLogURL = "/cvpservice/workflow/addWorkOrderLog.do" +taskLogData = json.dumps({"taskId": taskList[1],"message": "This is a test Change","source": "CVP REST API"}) +response = requests.post(url+postTaskLogURL, cookies=cookies, data=taskLogData,headers=headers,verify=False) +assert response.ok +outputTaskLog = response.json() + +# Print Configlet details + +print "TaskLogAmmend: %s"%outputTaskLog['data'] +print "\n" + diff --git a/topologies/training-level1-exam-2/files/scripts/TaskCVP1 b/topologies/training-level1-exam-2/files/scripts/TaskCVP1 new file mode 100644 index 000000000..1ebd05764 --- /dev/null +++ b/topologies/training-level1-exam-2/files/scripts/TaskCVP1 @@ -0,0 +1,48 @@ +import requests +import json + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + +# Print user details + +print "User Name:%s\n "%output['username'] +print "First Name: %s\n "%output['user']['firstName'] +print "Last Name: %s\n "%output['user']['lastName'] + + +getTasksURL = "/cvpservice/task/getTasks.do?" +getTasksParams = {'startIndex':'0','endIndex':'0'} +response = requests.get(url+getTasksURL,cookies=cookies, params=getTasksParams,verify=False) +assert response.ok +outputPendingTasks = response.json() + + +# Print Tasks Created by Current User +taskList = [ ] +for entry in outputPendingTasks['data']: + if str(entry['createdBy']) == str(CVP_USER): + print( "TaskNumber: %s Description: %s" %(entry['workOrderId'],entry['description'])) + taskList.append(str(entry['workOrderId'])) +#print "TaskList: %s"%taskList + + diff --git a/topologies/training-level1-exam-2/files/scripts/TaskExecute b/topologies/training-level1-exam-2/files/scripts/TaskExecute new file mode 100644 index 000000000..3db487284 --- /dev/null +++ b/topologies/training-level1-exam-2/files/scripts/TaskExecute @@ -0,0 +1,56 @@ +import requests +import json + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + + +# Create an HTTP GET request to the CVP server + +getTasksURL = "/cvpservice/task/getTasks.do?" +getTasksParams = {'startIndex':'0','endIndex':'0','queryparam':'Pending'} +response = requests.get(url+getTasksURL,cookies=cookies, params=getTasksParams,verify=False) +assert response.ok +outputPendingTasks = response.json() + + +# Print Tasks Created by Current User +taskList = [ ] +for entry in outputPendingTasks['data']: + if str(entry['createdBy']) == str(CVP_USER): + print "TaskNumber: %s"%entry['workOrderId'] + taskList.append(str(entry['workOrderId'])) +print "TaskList: %s"%taskList + + + +headers = { 'Content-Type': 'application/json' } +postTaskExecuteURL = "/cvpservice/task/executeTask.do" +for taskNumber in taskList: + executeData = json.dumps({'data': [taskNumber]}) + response = requests.post(url+postTaskExecuteURL, cookies=cookies,data=executeData,headers=headers,verify=False) + assert response.ok + outputExecuteTask = response.json() + print (outputExecuteTask['data']) + print "Task: "+str(taskNumber)+" Execute: "+str(outputExecuteTask['data']) + print "\n" + diff --git a/topologies/training-level1-exam-2/files/scripts/TaskLog b/topologies/training-level1-exam-2/files/scripts/TaskLog new file mode 100644 index 000000000..c835008b8 --- /dev/null +++ b/topologies/training-level1-exam-2/files/scripts/TaskLog @@ -0,0 +1,59 @@ +import requests +import json + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + + +# Create an HTTP GET request to the CVP server + +getTasksURL = "/cvpservice/task/getTasks.do?" +getTasksParams = {'startIndex':'0','endIndex':'0'} +response = requests.get(url+getTasksURL,cookies=cookies, params=getTasksParams,verify=False) +assert response.ok +outputTasks = response.json() + + +# Print Tasks Created by Current User +taskList = [ ] +for entry in outputTasks['data']: + if str(entry['createdBy']) == str(CVP_USER): + print "TaskNumber: %s"%entry['workOrderId'] + taskList.append(str(entry['workOrderId'])) +print "TaskList: %s"%taskList + + + +# Create an HTTP POST request to the CVP server + +headers = { 'Content-Type': 'application/json' } +postTaskLogURL = "/cvpservice/workflow/addWorkOrderLog.do" +taskLogData = json.dumps({"taskId": taskList[0],"message": "This is a test Change","source": "CVP REST API"}) +response = requests.post(url+postTaskLogURL, cookies=cookies, data=taskLogData,headers=headers,verify=False) +assert response.ok +outputTaskLog = response.json() + +# Print Configlet details + +print "TaskLogAmmend: %s"%outputTaskLog['data'] +print "\n" + diff --git a/topologies/training-level1-exam-2/files/scripts/TaskLog1 b/topologies/training-level1-exam-2/files/scripts/TaskLog1 new file mode 100644 index 000000000..c835008b8 --- /dev/null +++ b/topologies/training-level1-exam-2/files/scripts/TaskLog1 @@ -0,0 +1,59 @@ +import requests +import json + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + + +# Create an HTTP GET request to the CVP server + +getTasksURL = "/cvpservice/task/getTasks.do?" +getTasksParams = {'startIndex':'0','endIndex':'0'} +response = requests.get(url+getTasksURL,cookies=cookies, params=getTasksParams,verify=False) +assert response.ok +outputTasks = response.json() + + +# Print Tasks Created by Current User +taskList = [ ] +for entry in outputTasks['data']: + if str(entry['createdBy']) == str(CVP_USER): + print "TaskNumber: %s"%entry['workOrderId'] + taskList.append(str(entry['workOrderId'])) +print "TaskList: %s"%taskList + + + +# Create an HTTP POST request to the CVP server + +headers = { 'Content-Type': 'application/json' } +postTaskLogURL = "/cvpservice/workflow/addWorkOrderLog.do" +taskLogData = json.dumps({"taskId": taskList[0],"message": "This is a test Change","source": "CVP REST API"}) +response = requests.post(url+postTaskLogURL, cookies=cookies, data=taskLogData,headers=headers,verify=False) +assert response.ok +outputTaskLog = response.json() + +# Print Configlet details + +print "TaskLogAmmend: %s"%outputTaskLog['data'] +print "\n" + diff --git a/topologies/training-level1-exam-2/files/scripts/TaskLogView b/topologies/training-level1-exam-2/files/scripts/TaskLogView new file mode 100644 index 000000000..7b34904dd --- /dev/null +++ b/topologies/training-level1-exam-2/files/scripts/TaskLogView @@ -0,0 +1,51 @@ +import requests +import json +import pprint + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + + +# Create an HTTP GET request to the CVP server + +getTasksURL = "/cvpservice/task/getTasks.do?" +getTasksParams = {'startIndex':'0','endIndex':'0'} +response = requests.get(url+getTasksURL,cookies=cookies, params=getTasksParams,verify=False) +assert response.ok +outputTasks = response.json() + +taskList = [ ] +for entry in outputTasks['data']: + if str(entry['createdBy']) == str(CVP_USER): + taskList.append(str(entry['workOrderId'])) + +getTaskLogURL = "/cvpservice/task/getLogsById.do?" +#getTaskLogParams = {'startIndex':'0','endIndex':'0','id':'0'} +getTaskLogParams = {'startIndex':'0','endIndex':'0','id':taskList[0]} +response = requests.get(url+getTaskLogURL,cookies=cookies, params=getTaskLogParams,verify=False) +assert response.ok +outputTaskLog = response.json() + +# Print TaskLog details +print "TaskLogOutput: %s" %outputTaskLog['data'] +print "\n" + diff --git a/topologies/training-level1-exam-2/files/scripts/TaskNote b/topologies/training-level1-exam-2/files/scripts/TaskNote new file mode 100644 index 000000000..6cd1d6cfd --- /dev/null +++ b/topologies/training-level1-exam-2/files/scripts/TaskNote @@ -0,0 +1,52 @@ +import requests +import json +import pprint + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + + +# Create an HTTP GET request to the CVP server + +getTasksURL = "/cvpservice/task/getTasks.do?" +getTasksParams = {'startIndex':'0','endIndex':'0'} +response = requests.get(url+getTasksURL,cookies=cookies, params=getTasksParams,verify=False) +assert response.ok +outputTasks = response.json() + +taskList = [ ] +for entry in outputTasks['data']: + if str(entry['createdBy']) == str(CVP_USER): + taskList.append(str(entry['workOrderId'])) + +headers = { 'Content-Type': 'application/json' } +postTaskNoteURL = "/cvpservice/task/addNoteToTask.do" +taskNoteData = json.dumps({"workOrderId": taskList[0],"note": "This is a test Change using the API"}) +response = requests.post(url+postTaskNoteURL, cookies=cookies, data=taskNoteData,headers=headers,verify=False) +assert response.ok +outputTaskNote = response.json() + +# Print Task details + +print "TaskNoteAmmend: %s"%outputTaskNote['data'] +print "\n" + diff --git a/topologies/training-level1-exam-2/labguides/.gitignore b/topologies/training-level1-exam-2/labguides/.gitignore new file mode 100644 index 000000000..ed86553f4 --- /dev/null +++ b/topologies/training-level1-exam-2/labguides/.gitignore @@ -0,0 +1,2 @@ +.DS_Store +build/ diff --git a/topologies/training-level1-exam-2/labguides/Makefile b/topologies/training-level1-exam-2/labguides/Makefile new file mode 100644 index 000000000..874ed2529 --- /dev/null +++ b/topologies/training-level1-exam-2/labguides/Makefile @@ -0,0 +1,20 @@ +# Minimal makefile for Sphinx documentation +# + +# You can set these variables from the command line. +SPHINXOPTS = +SPHINXBUILD = python -msphinx +SPHINXPROJ = ATD +SOURCEDIR = source +BUILDDIR = build + +# Put it first so that "make" without argument is like "make help". +help: + @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) + +.PHONY: help Makefile + +# Catch-all target: route all unknown targets to Sphinx using the new +# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). +%: Makefile + @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) \ No newline at end of file diff --git a/topologies/training-level1-exam-2/labguides/readme.md b/topologies/training-level1-exam-2/labguides/readme.md new file mode 100644 index 000000000..5a5369ecd --- /dev/null +++ b/topologies/training-level1-exam-2/labguides/readme.md @@ -0,0 +1,12 @@ +# Lab Guides +In this folder are rST (restructured text) formatted lab guides for the ATD event. + +## Building +To build the documentation, you will need to install Sphinx and sphinx_bootstrap_theme with `pip`: + +`pip install sphinx sphinx_bootstrap_theme` + +## Contributing +At some point, this section may expand, but for now please make sure to review existing files for formatting guidelines. + +Please see https://github.com/ralsina/rst-cheatsheet/blob/master/rst-cheatsheet.rst for a cheat sheet. \ No newline at end of file diff --git a/topologies/training-level1-exam-2/labguides/source/_static/arista_logo.png b/topologies/training-level1-exam-2/labguides/source/_static/arista_logo.png new file mode 100644 index 000000000..2376e72b9 Binary files /dev/null and b/topologies/training-level1-exam-2/labguides/source/_static/arista_logo.png differ diff --git a/topologies/training-level1-exam-2/labguides/source/_static/arista_logo_160by26.png b/topologies/training-level1-exam-2/labguides/source/_static/arista_logo_160by26.png new file mode 100644 index 000000000..d0d0cbeec Binary files /dev/null and b/topologies/training-level1-exam-2/labguides/source/_static/arista_logo_160by26.png differ diff --git a/topologies/training-level1-exam-2/labguides/source/_static/arista_logo_320by52.png b/topologies/training-level1-exam-2/labguides/source/_static/arista_logo_320by52.png new file mode 100644 index 000000000..43dfa7ed2 Binary files /dev/null and b/topologies/training-level1-exam-2/labguides/source/_static/arista_logo_320by52.png differ diff --git a/topologies/training-level1-exam-2/labguides/source/_static/cloudvision-icon.png b/topologies/training-level1-exam-2/labguides/source/_static/cloudvision-icon.png new file mode 100644 index 000000000..c309ed98e Binary files /dev/null and b/topologies/training-level1-exam-2/labguides/source/_static/cloudvision-icon.png differ diff --git a/topologies/training-level1-exam-2/labguides/source/_static/logo.jpg b/topologies/training-level1-exam-2/labguides/source/_static/logo.jpg new file mode 100644 index 000000000..6eda41f7e Binary files /dev/null and b/topologies/training-level1-exam-2/labguides/source/_static/logo.jpg differ diff --git a/topologies/training-level1-exam-2/labguides/source/_static/my-styles.css b/topologies/training-level1-exam-2/labguides/source/_static/my-styles.css new file mode 100644 index 000000000..1150528ee --- /dev/null +++ b/topologies/training-level1-exam-2/labguides/source/_static/my-styles.css @@ -0,0 +1,41 @@ +body { + background-color: #FFFFFF; + color: #002859 +} + +.navbar-inverse { + background-image: -webkit-linear-gradient(#6d94bf, #446e9b 50%, #002859); + background-image: -o-linear-gradient(#6d94bf, #446e9b 50%, #002859); + background-image: -webkit-gradient(linear, left top, left bottom, from(#6d94bf), color-stop(50%, #446e9b), to(#002859)); + background-image: linear-gradient(#6d94bf, #446e9b 50%, #002859); + background-repeat: no-repeat; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff6d94bf', endColorstr='#ff002859', GradientType=0); + -webkit-filter: none; + filter: none; + border: 1px solid #345578; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.3) +} + +.navbar-brand { + background: url("arista_logo_320by52.png") center / contain no-repeat; + display: inline-block; + width: 1px; + padding: 0 10px 0 60px; + margin-right: 30px; + margin-left: -30px; +} + +.navbar-brand>img { + display: inline-block; + padding: 0 100px 0 0px; + margin-right: 20px; +} +a.navbar-brand { + display: inline-block; + padding: 15px 0 0 120px; +} + +footer { + background-color: #002859; + color: #FFFFFF; +} diff --git a/topologies/training-level1-exam-2/labguides/source/conf.py b/topologies/training-level1-exam-2/labguides/source/conf.py new file mode 100644 index 000000000..afccec09c --- /dev/null +++ b/topologies/training-level1-exam-2/labguides/source/conf.py @@ -0,0 +1,247 @@ +# -*- coding: utf-8 -*- +# +# ATD documentation build configuration file, created by +# sphinx-quickstart on Tue Apr 17 10:00:04 2018. +# +# This file is execfile()d with the current directory set to its +# containing dir. +# +# Note that not all possible configuration values are present in this +# autogenerated file. +# +# All configuration values have a default; values that are commented out +# serve to show the default. + +# If extensions (or modules to document with autodoc) are in another directory, +# add these directories to sys.path here. If the directory is relative to the +# documentation root, use os.path.abspath to make it absolute, like shown here. +# +# import os +# import sys +# sys.path.insert(0, os.path.abspath('.')) + +import sphinx_bootstrap_theme + +# Importing datetime module to auto update copyright year +from datetime import date + +# -- General configuration ------------------------------------------------ + +# If your documentation needs a minimal Sphinx version, state it here. +# +# needs_sphinx = '1.0' + +# Add any Sphinx extension module names here, as strings. They can be +# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom +# ones. + +# Add any paths that contain templates here, relative to this directory. +templates_path = ['_templates'] + +# The suffix(es) of source filenames. +# You can specify multiple suffix as a list of string: +# +# source_suffix = ['.rst', '.md'] +source_suffix = '.rst' + +# The master toctree document. +master_doc = 'index' + +# General information about the project. +# Updating copyright var to auto update with current year +project = u'Arista ATD' +copyright = u'{0}, Arista Networks'.format(date.today().year) +author = u'Arista ATD atd-help@arista.com' + +# Show Source +html_show_sourcelink = False + +# The version info for the project you're documenting, acts as replacement for +# |version| and |release|, also used in various other places throughout the +# built documents. +# +# The short X.Y version. +version = u'Version 3.0' +# The full version, including alpha/beta/rc tags. +release = u'1' + +# The language for content autogenerated by Sphinx. Refer to documentation +# for a list of supported languages. +# +# This is also used if you do content translation via gettext catalogs. +# Usually you set "language" from the command line for these cases. +language = None + +# List of patterns, relative to source directory, that match files and +# directories to ignore when looking for source files. +# This patterns also effect to html_static_path and html_extra_path +exclude_patterns = [] + +# The name of the Pygments (syntax highlighting) style to use. +pygments_style = 'sphinx' + +# If true, `todo` and `todoList` produce output, else they produce nothing. +todo_include_todos = False + + +# -- Options for HTML output ---------------------------------------------- + +# The theme to use for HTML and HTML Help pages. See the documentation for +# a list of builtin themes. +# +#html_theme = 'alabaster' +html_theme = 'bootstrap' +html_theme_path = sphinx_bootstrap_theme.get_html_theme_path() + +# Add any paths that contain custom static files (such as style sheets) here, +# relative to this directory. They are copied after the builtin static files, +# so a file named "default.css" will overwrite the builtin "default.css". +html_static_path = ['_static'] + +# Theme options are theme-specific and customize the look and feel of a theme +# further. For a list of options available for each theme, see the +# documentation. +# +html_theme_options = { + # Navigation bar title. (Default: ``project`` value) + 'navbar_title': "ATD", + + # Tab name for entire site. (Default: "Site") + 'navbar_site_name': "Table of Contents", + + # A list of tuples containing pages or urls to link to. + # Valid tuples should be in the following forms: + # (name, page) # a link to a page + # (name, "/aa/bb", 1) # a link to an arbitrary relative url + # (name, "http://example.com", True) # arbitrary absolute url + # Note the "1" or "True" value above as the third argument to indicate + # an arbitrary url. + 'navbar_links': [ + ("Arista", "http://www.arista.com", True), + ], + + # Render the next and previous page links in navbar. (Default: true) + 'navbar_sidebarrel': True, + + # Render the current pages TOC in the navbar. (Default: true) + 'navbar_pagenav': False, + + # Tab name for the current pages TOC. (Default: "Page") + 'navbar_pagenav_name': "Page", + + # Global TOC depth for "site" navbar tab. (Default: 1) + # Switching to -1 shows all levels. + 'globaltoc_depth': 2, + + # Include hidden TOCs in Site navbar? + # + # Note: If this is "false", you cannot have mixed ``:hidden:`` and + # non-hidden ``toctree`` directives in the same page, or else the build + # will break. + # + # Values: "true" (default) or "false" + 'globaltoc_includehidden': "true", + + # HTML navbar class (Default: "navbar") to attach to
    element. + # For black navbar, do "navbar navbar-inverse" + #'navbar_class': "navbar navbar-inverse", + 'navbar_class': "navbar", + + # Fix navigation bar to top of page? + # Values: "true" (default) or "false" + 'navbar_fixed_top': "true", + + # Location of link to source. + # Options are "nav" (default), "footer" or anything else to exclude. + #'source_link_position': "nav", + + # Bootswatch (http://bootswatch.com/) theme. + # + # Options are nothing (default) or the name of a valid theme + # such as "cosmo" or "sandstone". + # + # The set of valid themes depend on the version of Bootstrap + # that's used (the next config option). + # + # Currently, the supported themes are: + # - Bootstrap 2: https://bootswatch.com/2 + # - Bootstrap 3: https://bootswatch.com/3 + 'bootswatch_theme': "spacelab", + + # Choose Bootstrap version. + # Values: "3" (default) or "2" (in quotes) + 'bootstrap_version': "3", +} + +# The name for this set of Sphinx documents. If None, it defaults to +# " v documentation". +#html_title = "AristaATD" + +# A shorter title for the navigation bar. Default is the same as html_title. +#html_short_title = "Demo" + +# (Optional) Logo. Should be small enough to fit the navbar (ideally 24x24). +# Path should be relative to the ``_static`` files directory. +#html_logo = "cloudvision-icon.png" + +# -- Options for HTMLHelp output ------------------------------------------ + +# Output file base name for HTML help builder. +htmlhelp_basename = 'AristaATD' + + +# -- Options for LaTeX output --------------------------------------------- + +latex_elements = { + # The paper size ('letterpaper' or 'a4paper'). + # + # 'papersize': 'letterpaper', + + # The font size ('10pt', '11pt' or '12pt'). + # + # 'pointsize': '10pt', + + # Additional stuff for the LaTeX preamble. + # + # 'preamble': '', + + # Latex figure (float) alignment + # + # 'figure_align': 'htbp', +} + +# Grouping the document tree into LaTeX files. List of tuples +# (source start file, target name, title, +# author, documentclass [howto, manual, or own class]). +latex_documents = [ + (master_doc, 'ATD.tex', u'ATD Lab Guide', + u'ATD Help (atd-help@arista.com)', 'manual'), +] + + +# -- Options for manual page output --------------------------------------- + +# One entry per manual page. List of tuples +# (source start file, name, description, authors, manual section). +man_pages = [ + (master_doc, 'atd', u'ATD Lab Guide', + [author], 1) +] + + +# -- Options for Texinfo output ------------------------------------------- + +# Grouping the document tree into Texinfo files. List of tuples +# (source start file, target name, title, author, +# dir menu entry, description, category) +texinfo_documents = [ + (master_doc, 'ATD', u'ATD Lab Guide', + author, 'ATD', 'Lab Documentation.', + 'Miscellaneous'), +] + + +def setup(app): + app.add_stylesheet("my-styles.css") # also can be a full URL + # app.add_stylesheet("ANOTHER.css") + # app.add_stylesheet("AND_ANOTHER.css") diff --git a/topologies/training-level1-exam-2/labguides/source/connecting.rst b/topologies/training-level1-exam-2/labguides/source/connecting.rst new file mode 100644 index 000000000..10ae589ef --- /dev/null +++ b/topologies/training-level1-exam-2/labguides/source/connecting.rst @@ -0,0 +1,28 @@ +Connecting +========== + +1. Log into the Arista Test Drive portal with your assigned URL. If you + don’t have one, please see your ATD staff. + +.. image:: images/connecting/nested_connecting_1.png + +2. SSH to the public address assigned to the LabAccess jumphost server (this is the Topology Address shown in the "Welcome to Arista's Test Drive!" picture above). The username is ``arista`` and the password is ``{REPLACE_PWD}``: + + .. code-block:: text + + ssh arista@{unique_address}.topo.testdrive.arista.com + +| + +.. image:: images/connecting/nested_connecting_2.png + :align: center + +| + +3. The LabAccess menu allows users to connect to each device and specify + lab topology. It is recommended to open multiple SSH sessions or use + the Screen option (under the SSH Menu) to jump between devices rapidly. + + You can also Access the LabAccess Menu from your browser by clicking on `Console Access` + +.. image:: images/connecting/nested_connecting_3.png diff --git a/topologies/training-level1-exam-2/labguides/source/images/connecting/nested_connecting_1.png b/topologies/training-level1-exam-2/labguides/source/images/connecting/nested_connecting_1.png new file mode 100644 index 000000000..aa76597b8 Binary files /dev/null and b/topologies/training-level1-exam-2/labguides/source/images/connecting/nested_connecting_1.png differ diff --git a/topologies/training-level1-exam-2/labguides/source/images/connecting/nested_connecting_2.png b/topologies/training-level1-exam-2/labguides/source/images/connecting/nested_connecting_2.png new file mode 100644 index 000000000..2c6b51a2b Binary files /dev/null and b/topologies/training-level1-exam-2/labguides/source/images/connecting/nested_connecting_2.png differ diff --git a/topologies/training-level1-exam-2/labguides/source/images/connecting/nested_connecting_3.png b/topologies/training-level1-exam-2/labguides/source/images/connecting/nested_connecting_3.png new file mode 100644 index 000000000..1cc7402a3 Binary files /dev/null and b/topologies/training-level1-exam-2/labguides/source/images/connecting/nested_connecting_3.png differ diff --git a/topologies/training-level1-exam-2/labguides/source/images/logo.jpg b/topologies/training-level1-exam-2/labguides/source/images/logo.jpg new file mode 100644 index 000000000..6eda41f7e Binary files /dev/null and b/topologies/training-level1-exam-2/labguides/source/images/logo.jpg differ diff --git a/topologies/training-level1-exam-2/labguides/source/index.rst b/topologies/training-level1-exam-2/labguides/source/index.rst new file mode 100644 index 000000000..bb76aaa2e --- /dev/null +++ b/topologies/training-level1-exam-2/labguides/source/index.rst @@ -0,0 +1,8 @@ +Welcome to the Arista Training documentation! +======================================== + +.. toctree:: + :maxdepth: 1 + :caption: EOS Configuration + + connecting.rst diff --git a/topologies/training-level1-exam-2/topo_build.yml b/topologies/training-level1-exam-2/topo_build.yml new file mode 100644 index 000000000..c6c79a643 --- /dev/null +++ b/topologies/training-level1-exam-2/topo_build.yml @@ -0,0 +1,142 @@ +host_cpu: 4 +cvp_cpu: 24 +cvp_nodes: 1 +veos_cpu: 2 +nodes: + - borderleaf1: + ip_addr: 192.168.0.15 + sys_mac: 00:1c:73:b5:c6:01 + neighbors: + - neighborDevice: spine1 + neighborPort: Ethernet5 + port: Ethernet1 + - neighborDevice: spine2 + neighborPort: Ethernet5 + port: Ethernet2 + - spine1: + ip_addr: 192.168.0.11 + sys_mac: 00:1c:73:b1:c6:01 + neighbors: + - neighborDevice: leaf1 + neighborPort: Ethernet3 + port: Ethernet1 + - neighborDevice: leaf2 + neighborPort: Ethernet3 + port: Ethernet2 + - neighborDevice: leaf3 + neighborPort: Ethernet1 + port: Ethernet3 + - neighborDevice: leaf4 + neighborPort: Ethernet1 + port: Ethernet4 + - neighborDevice: borderleaf1 + neighborPort: Ethernet1 + port: Ethernet5 + - spine2: + ip_addr: 192.168.0.12 + sys_mac: 00:1c:73:b2:c6:01 + neighbors: + - neighborDevice: leaf1 + neighborPort: Ethernet4 + port: Ethernet1 + - neighborDevice: leaf2 + neighborPort: Ethernet4 + port: Ethernet2 + - neighborDevice: leaf3 + neighborPort: Ethernet2 + port: Ethernet3 + - neighborDevice: leaf4 + neighborPort: Ethernet2 + port: Ethernet4 + - neighborDevice: borderleaf1 + neighborPort: Ethernet2 + port: Ethernet5 + - leaf1: + ip_addr: 192.168.0.21 + sys_mac: 00:1c:73:c1:c6:01 + neighbors: + - neighborDevice: leaf2 + neighborPort: Ethernet1 + port: Ethernet1 + - neighborDevice: leaf2 + neighborPort: Ethernet2 + port: Ethernet2 + - neighborDevice: spine1 + neighborPort: Ethernet1 + port: Ethernet3 + - neighborDevice: spine2 + neighborPort: Ethernet1 + port: Ethernet4 + - neighborDevice: host1 + neighborPort: Ethernet1 + port: Ethernet5 + - leaf2: + ip_addr: 192.168.0.22 + sys_mac: 00:1c:73:c2:c6:01 + neighbors: + - neighborDevice: leaf1 + neighborPort: Ethernet1 + port: Ethernet1 + - neighborDevice: leaf1 + neighborPort: Ethernet2 + port: Ethernet2 + - neighborDevice: spine1 + neighborPort: Ethernet2 + port: Ethernet3 + - neighborDevice: spine2 + neighborPort: Ethernet2 + port: Ethernet4 + - neighborDevice: host1 + neighborPort: Ethernet2 + port: Ethernet5 + - leaf3: + ip_addr: 192.168.0.23 + sys_mac: 00:1c:73:c3:c6:01 + neighbors: + - neighborDevice: spine1 + neighborPort: Ethernet3 + port: Ethernet1 + - neighborDevice: spine2 + neighborPort: Ethernet3 + port: Ethernet2 + - neighborDevice: host2 + neighborPort: Ethernet1 + port: Ethernet3 + - leaf4: + ip_addr: 192.168.0.24 + sys_mac: 00:1c:73:c4:c6:01 + neighbors: + - neighborDevice: spine1 + neighborPort: Ethernet4 + port: Ethernet1 + - neighborDevice: spine2 + neighborPort: Ethernet4 + port: Ethernet2 + - neighborDevice: host3 + neighborPort: Ethernet1 + port: Ethernet3 + - host1: + ip_addr: 192.168.0.51 + sys_mac: 00:1c:73:f1:c6:01 + neighbors: + - neighborDevice: leaf1 + neighborPort: Ethernet5 + port: Ethernet1 + - neighborDevice: leaf2 + neighborPort: Ethernet5 + port: Ethernet2 + - host2: + ip_addr: 192.168.0.52 + sys_mac: 00:1c:73:f2:c6:01 + neighbors: + - neighborDevice: leaf3 + neighborPort: Ethernet3 + port: Ethernet1 + - host3: + ip_addr: 192.168.0.53 + sys_mac: 00:1c:73:f3:c6:01 + neighbors: + - neighborDevice: leaf4 + neighborPort: Ethernet3 + port: Ethernet1 +additional_ssh_nodes: diff --git a/topologies/training-level1-exam/configlets/ATD-INFRA b/topologies/training-level1-exam/configlets/ATD-INFRA index fc0192036..6a88951d1 100644 --- a/topologies/training-level1-exam/configlets/ATD-INFRA +++ b/topologies/training-level1-exam/configlets/ATD-INFRA @@ -1,5 +1,5 @@ daemon TerminAttr - exec /usr/bin/TerminAttr -ingestgrpcurl=192.168.0.5:9910 -taillogs -ingestauth=key,atd-lab -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent + exec /usr/bin/TerminAttr -cvcompression=gzip -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent -cvaddr=192.168.0.5:9910 -cvauth=token,/tmp/token -cvvrf=default -taillogs -disableaaa no shutdown ! alias mlag-reload bash /mnt/flash/shut_intfs && sudo shutdown now -r diff --git a/topologies/training-level1/configlets/ATD-INFRA b/topologies/training-level1/configlets/ATD-INFRA index fc0192036..6a88951d1 100644 --- a/topologies/training-level1/configlets/ATD-INFRA +++ b/topologies/training-level1/configlets/ATD-INFRA @@ -1,5 +1,5 @@ daemon TerminAttr - exec /usr/bin/TerminAttr -ingestgrpcurl=192.168.0.5:9910 -taillogs -ingestauth=key,atd-lab -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent + exec /usr/bin/TerminAttr -cvcompression=gzip -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent -cvaddr=192.168.0.5:9910 -cvauth=token,/tmp/token -cvvrf=default -taillogs -disableaaa no shutdown ! alias mlag-reload bash /mnt/flash/shut_intfs && sudo shutdown now -r diff --git a/topologies/training-level2-exam-2/atd-topo.png b/topologies/training-level2-exam-2/atd-topo.png new file mode 100644 index 000000000..fd3348b82 Binary files /dev/null and b/topologies/training-level2-exam-2/atd-topo.png differ diff --git a/topologies/training-level2-exam-2/atd-topo.png-OLD b/topologies/training-level2-exam-2/atd-topo.png-OLD new file mode 100644 index 000000000..66e36d4d5 Binary files /dev/null and b/topologies/training-level2-exam-2/atd-topo.png-OLD differ diff --git a/topologies/training-level2-exam-2/configlets/ATD-INFRA b/topologies/training-level2-exam-2/configlets/ATD-INFRA new file mode 100644 index 000000000..6a88951d1 --- /dev/null +++ b/topologies/training-level2-exam-2/configlets/ATD-INFRA @@ -0,0 +1,45 @@ +daemon TerminAttr + exec /usr/bin/TerminAttr -cvcompression=gzip -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent -cvaddr=192.168.0.5:9910 -cvauth=token,/tmp/token -cvvrf=default -taillogs -disableaaa + no shutdown +! +alias mlag-reload bash /mnt/flash/shut_intfs && sudo shutdown now -r +alias conint sh interface | i connected +alias senz show interface counter error | nz +alias shmc show int | awk '/^[A-Z]/ { intf = $1 } /, address is/ { print intf, $6 }' +alias snz show interface counter | nz +alias spd show port-channel %1 detail all +alias sqnz show interface counter queue | nz +alias srnz show interface counter rate | nz +alias intdesc + !! Usage: intdesc interface-name description + 10 config + 20 int %1 + 30 desc %2 + 40 exit +! +dns domain arista.lab +! +service routing protocols model multi-agent +! +ntp server 192.168.0.1 iburst source Management1 +! +radius-server host 192.168.0.1 key 7 0207165218120E +! +aaa group server radius atds + server 192.168.0.1 +! +aaa authentication login default group atds local +aaa authorization exec default group atds local +aaa authorization commands all default local +! +username Script secret sha512 $6$PNfpb9anSBQ5/aia$phaa3ar5pwkntenD9WHc6Ed5b96lbW0dc0bjtwPnFLaDiCK8D5Cjl6ewP/xdNbl4PtS6Paq.3SssN8pj05NQm. +username admin privilege 15 role network-admin secret 5 $1$5O85YVVn$HrXcfOivJEnISTMb6xrJc. +username arista privilege 15 role network-admin secret 5 $1$4VjIjfd1$XkUVulbNDESHFzcxDU.Tk1 +! +username arista ssh-key ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC+ERvV4GaPq3FzxY8T+5hMF/1T+l8wiPsVCtOrZU4Hy6NCNlAiDBdA/RUtX5/aOu5JvHyPTVHqWJ0qi9BqU3rxCNl/l2/5UZbm9RPzdZ1QCwoYwPB9/j/tYJV8lZdr6t0yGBfxgzD3oW/zF7a+ZtASaMAu7lkgoqPK2pVIGa+Y9ZCsA0Xq756XpLCw+d3pHKHvIkgWLCo9FoeIv8f/bu5u/ztzRE+Nvl+o5add6MxnjsXz3s7BnW2FX6JNjyp0Z+OXjupQc2gcfFvpd/dA2lCNuuaCHkRgyPwIZtWPmNqMRXPp37mlPwV43qDJRVPQkvh0xPxwS35BbzUxWdT+ZLZv +! +ip radius source-interface Management1 +! +management api http-commands + no shutdown +! diff --git a/topologies/training-level2-exam-2/configlets/Base-Builder.py b/topologies/training-level2-exam-2/configlets/Base-Builder.py new file mode 100644 index 000000000..2b3cd2db8 --- /dev/null +++ b/topologies/training-level2-exam-2/configlets/Base-Builder.py @@ -0,0 +1,76 @@ +from cvplibrary import CVPGlobalVariables, GlobalVariableNames, Form + + + +# Get this devices Serial + + +serial = CVPGlobalVariables.getValue( GlobalVariableNames.CVP_SERIAL ) +mask = '24' +ServiceRouting = True + +#Create the IP address from the serial number + +IPaddress = '192.168.0.66' + +if serial == '9BD9FE8B8A0EB6F43910F5F583A9CF40': + IPaddress = '192.168.0.21' + hostname = 'leaf1' + + +elif serial == '8823F318C30617010F15E56A40D3AE14': + IPaddress = '192.168.0.22' + hostname = 'leaf2' + + +elif serial == '5356CC64EE6812A82D43E42F3BC0F3C5': + IPaddress = '192.168.0.23' + hostname = 'leaf3' + + +elif serial == '04DADEBA6B3D1548218141BC827D02A5': + IPaddress = '192.168.0.24' + hostname = 'leaf4' + +elif serial == '329874C0FD77D12A30D571B6B79E9195': + IPaddress = '192.168.0.11' + hostname = 'spine1' + +elif serial == '4B49885915FFE471AB899ACDEE5B803D': + IPaddress = '192.168.0.12' + hostname = 'spine2' + + +elif serial == 'FF5D15D80D0D3E6B8D1D060DE545627D': + IPaddress = '192.168.0.51' + ServiceRouting = False + hostname = 'host1' + + +elif serial == '94910C4142FA2F7B76DFEC1D3C761E28': + IPaddress = '192.168.0.52' + ServiceRouting = False + hostname = 'host2' + + +# Generate and print config - Ignore the service routing command if not needed +print 'hostname %s' % hostname +print '!' +print 'interface Management 1' +print ' ip address %s/%s' % ( IPaddress, mask ) +print ' no lldp transmit' +print ' no lldp receive' +print '!' +if ServiceRouting: + print 'service routing protocols model multi-agent' + print '!' +print 'dns domain arista.lab' +print '!' +print 'ip route 0.0.0.0/0 192.168.0.1' +print '!' +print 'ip routing' +print '!' +print 'management api http-commands' +print ' no shutdown' +print ' protocol http' +print '!' \ No newline at end of file diff --git a/topologies/training-level2-exam-2/configlets/borderleaf1-base b/topologies/training-level2-exam-2/configlets/borderleaf1-base new file mode 100644 index 000000000..01861c0ef --- /dev/null +++ b/topologies/training-level2-exam-2/configlets/borderleaf1-base @@ -0,0 +1,15 @@ +hostname borderleaf1 +! +interface Management 1 + ip address 192.168.0.15/24 + no lldp transmit + no lldp receive +! +service routing protocols model multi-agent +! +dns domain arista.lab +! +ip route 0.0.0.0/0 192.168.0.1 +! +ip routing +! diff --git a/topologies/training-level2-exam-2/configlets/host1-base b/topologies/training-level2-exam-2/configlets/host1-base new file mode 100644 index 000000000..b2241fae2 --- /dev/null +++ b/topologies/training-level2-exam-2/configlets/host1-base @@ -0,0 +1,13 @@ +hostname host1 +! +interface Management 1 + ip address 192.168.0.51/24 + no lldp transmit + no lldp receive +! +dns domain arista.lab +! +ip route 0.0.0.0/0 192.168.0.1 +! +ip routing +! diff --git a/topologies/training-level2-exam-2/configlets/host2-base b/topologies/training-level2-exam-2/configlets/host2-base new file mode 100644 index 000000000..60efc468e --- /dev/null +++ b/topologies/training-level2-exam-2/configlets/host2-base @@ -0,0 +1,13 @@ +hostname host2 +! +interface Management 1 + ip address 192.168.0.52/24 + no lldp transmit + no lldp receive +! +dns domain arista.lab +! +ip route 0.0.0.0/0 192.168.0.1 +! +ip routing +! diff --git a/topologies/training-level2-exam-2/configlets/host3-base b/topologies/training-level2-exam-2/configlets/host3-base new file mode 100644 index 000000000..f5be2b0a7 --- /dev/null +++ b/topologies/training-level2-exam-2/configlets/host3-base @@ -0,0 +1,13 @@ +hostname host3 +! +interface Management 1 + ip address 192.168.0.53/24 + no lldp transmit + no lldp receive +! +dns domain arista.lab +! +ip route 0.0.0.0/0 192.168.0.1 +! +ip routing +! diff --git a/topologies/training-level2-exam-2/configlets/leaf1-base b/topologies/training-level2-exam-2/configlets/leaf1-base new file mode 100644 index 000000000..47e0ce3f6 --- /dev/null +++ b/topologies/training-level2-exam-2/configlets/leaf1-base @@ -0,0 +1,15 @@ +hostname leaf1 +! +interface Management 1 + ip address 192.168.0.21/24 + no lldp transmit + no lldp receive +! +service routing protocols model multi-agent +! +dns domain arista.lab +! +ip route 0.0.0.0/0 192.168.0.1 +! +ip routing +! diff --git a/topologies/training-level2-exam-2/configlets/leaf2-base b/topologies/training-level2-exam-2/configlets/leaf2-base new file mode 100644 index 000000000..72fae64c3 --- /dev/null +++ b/topologies/training-level2-exam-2/configlets/leaf2-base @@ -0,0 +1,15 @@ +hostname leaf2 +! +interface Management 1 + ip address 192.168.0.22/24 + no lldp transmit + no lldp receive +! +service routing protocols model multi-agent +! +dns domain arista.lab +! +ip route 0.0.0.0/0 192.168.0.1 +! +ip routing +! diff --git a/topologies/training-level2-exam-2/configlets/leaf3-base b/topologies/training-level2-exam-2/configlets/leaf3-base new file mode 100644 index 000000000..ab93834f4 --- /dev/null +++ b/topologies/training-level2-exam-2/configlets/leaf3-base @@ -0,0 +1,15 @@ +hostname leaf3 +! +interface Management 1 + ip address 192.168.0.23/24 + no lldp transmit + no lldp receive +! +service routing protocols model multi-agent +! +dns domain arista.lab +! +ip route 0.0.0.0/0 192.168.0.1 +! +ip routing +! diff --git a/topologies/training-level2-exam-2/configlets/leaf4-base b/topologies/training-level2-exam-2/configlets/leaf4-base new file mode 100644 index 000000000..a3b808c25 --- /dev/null +++ b/topologies/training-level2-exam-2/configlets/leaf4-base @@ -0,0 +1,15 @@ +hostname leaf4 +! +interface Management 1 + ip address 192.168.0.24/24 + no lldp transmit + no lldp receive +! +service routing protocols model multi-agent +! +dns domain arista.lab +! +ip route 0.0.0.0/0 192.168.0.1 +! +ip routing +! diff --git a/topologies/training-level2-exam-2/configlets/spine1-base b/topologies/training-level2-exam-2/configlets/spine1-base new file mode 100644 index 000000000..322102842 --- /dev/null +++ b/topologies/training-level2-exam-2/configlets/spine1-base @@ -0,0 +1,15 @@ +hostname spine1 +! +interface Management 1 + ip address 192.168.0.11/24 + no lldp transmit + no lldp receive +! +service routing protocols model multi-agent +! +dns domain arista.lab +! +ip route 0.0.0.0/0 192.168.0.1 +! +ip routing +! diff --git a/topologies/training-level2-exam-2/configlets/spine2-base b/topologies/training-level2-exam-2/configlets/spine2-base new file mode 100644 index 000000000..c664c14cc --- /dev/null +++ b/topologies/training-level2-exam-2/configlets/spine2-base @@ -0,0 +1,15 @@ +hostname spine2 +! +interface Management 1 + ip address 192.168.0.12/24 + no lldp transmit + no lldp receive +! +service routing protocols model multi-agent +! +dns domain arista.lab +! +ip route 0.0.0.0/0 192.168.0.1 +! +ip routing +! diff --git a/topologies/training-level2-exam-2/files/.ansible.cfg b/topologies/training-level2-exam-2/files/.ansible.cfg new file mode 100644 index 000000000..14c806515 --- /dev/null +++ b/topologies/training-level2-exam-2/files/.ansible.cfg @@ -0,0 +1,2 @@ +[defaults] +host_key_checking = False diff --git a/topologies/training-level2-exam-2/files/.screenrc b/topologies/training-level2-exam-2/files/.screenrc new file mode 100644 index 000000000..76c394214 --- /dev/null +++ b/topologies/training-level2-exam-2/files/.screenrc @@ -0,0 +1,19 @@ +# Turn off the startup message. +startup_message off +# Set the caption to the active windows. +caption always "%-Lw%{= BW}%50>%n%f* %t%{-}%+Lw%<" + +term screen-256color + +# New screens for various processes. +# Example: screen -t +# screen -t 7050SX-128 0 ssh aristaadmin@192.100.37.128 +screen -t CVP 1 ssh 192.168.0.5 +screen -t Spine1 2 ssh 192.168.0.11 +screen -t Spine2 3 ssh 192.168.0.12 +screen -t Leaf1 4 ssh 192.168.0.21 +screen -t Leaf2 5 ssh 192.168.0.22 +screen -t Leaf3 6 ssh 192.168.0.23 +screen -t Leaf4 7 ssh 192.168.0.24 +screen -t Host1 8 ssh 192.168.0.51 +screen -t Host2 9 ssh 192.168.0.52 diff --git a/topologies/training-level2-exam-2/files/MenuOptions.yaml b/topologies/training-level2-exam-2/files/MenuOptions.yaml new file mode 100644 index 000000000..8c0bf20bb --- /dev/null +++ b/topologies/training-level2-exam-2/files/MenuOptions.yaml @@ -0,0 +1,255 @@ +--- +options: + reset: + - command: "/usr/local/bin/ConfigureTopology.py && bash /home/arista/Broadcaster/pushHostDefaultConfig.sh" + description: "Reset All Devices to Base ATD (reset)" + mlag: + - command: "/usr/local/bin/ConfigureTopology.py -t mlag" + description: "MLAG Lab (mlag)" + bgp: + - command: "/usr/local/bin/ConfigureTopology.py -t bgp" + description: "BGP Lab (bgp)" + vxlan: + - command: "/usr/local/bin/ConfigureTopology.py -t vxlan" + description: "VXLAN Lab (vxlan) excludes leaf3 instead of leaf4" + l2evpn: + - command: "/usr/local/bin/ConfigureTopology.py -t l2evpn" + description: "EVPN Type 2 Lab (l2evpn) excludes leaf3 instead of leaf4" + l3evpn: + - command: "/usr/local/bin/ConfigureTopology.py -t l3evpn" + description: "EVPN Type 5 Lab (l3evpn) excludes leaf3 instead of leaf4" + cvp: + - command: "/usr/local/bin/ConfigureTopology.py -t cvp" + description: "CVP lab (cvp)" + media: + - command: "bash /home/arista/Broadcaster/pushHostMediaConfig.sh && login.py" + description: "Broadcast Engineer Training (media)" +labconfiglets: + mlag: + spine1: + - "Spine1-MLAG-Lab" + - "VLANs" + spine2: + - "Spine2-MLAG-Lab" + - "VLANs" + leaf1: + - "Leaf1-MLAG-Lab" + - "VLANs" + leaf2: + - "Leaf2-MLAG-Lab" + - "VLANs" + leaf3: + - "Leaf3-MLAG-Lab" + - "VLANs" + leaf4: + - "VLANs" + cvx01: + - "cvx01-Controller" + host1: + - "Host1-ATD" + host2: + - "Host2-ATD" + bgp: + spine1: + - "Spine1-BGP-Lab" + spine2: + - "Spine2-BGP-Lab" + leaf1: + - "Leaf1-BGP-Lab" + leaf2: + - "Leaf2-BGP-Lab" + leaf3: + - "Leaf3-BGP-Lab" + leaf4: + - "Leaf4-BGP-Lab" + cvx01: + - "cvx01-Controller" + host1: + - "Host1-ATD" + host2: + - "Host2-ATD" + vxlan: + spine1: + - "Spine1-BGP-Lab" + spine2: + - "Spine2-BGP-Lab" + leaf1: + - "Leaf1-VXLAN-Lab" + - "VLANs" + leaf2: + - "Leaf2-VXLAN-Lab" + - "VLANs" + leaf3: + - "Leaf3-VXLAN-Lab" + - "VLANs" + leaf4: + - "Leaf4-VXLAN-Lab" + - "VLANs" + cvx01: + - "cvx01-Controller" + host1: + - "Host1-ATD" + host2: + - "Host2-ATD" + l2evpn: + spine1: + - "Spine1-L2EVPN-Lab" + spine2: + - "Spine2-L2EVPN-Lab" + leaf1: + - "Leaf1-L2EVPN-Lab" + - "VLANs" + leaf2: + - "Leaf2-L2EVPN-Lab" + - "VLANs" + leaf3: + - "VLANs" + leaf4: + - "Leaf4-L2EVPN-Lab" + - "VLANs" + cvx01: + - "cvx01-Controller" + host1: + - "Host1-ATD" + host2: + - "Host2-ATD" + l3evpn: + spine1: + - "Spine1-L3EVPN-Lab" + spine2: + - "Spine2-L3EVPN-Lab" + leaf1: + - "Leaf1-L3EVPN-Lab" + leaf2: + - "Leaf2-L3EVPN-Lab" + leaf3: + - "VLANs" + leaf4: + - "Leaf4-L3EVPN-Lab" + cvx01: + - "cvx01-Controller" + host1: + - "Host1-ATD" + host2: + - "Host2-ATD" + cvp: + spine1: + - "Spine1-BGP-Lab" + spine2: + - "Spine2-BGP-Lab" + leaf1: + - "Leaf1-BGP-Lab" + leaf2: + - "Leaf2-BGP-Lab" + leaf3: + - "Leaf3-BGP-Lab" + leaf4: + - "Leaf4-BGP-Lab-Full" + cvx01: + - "cvx01-Controller" + host1: + - "Host1-ATD" + host2: + - "Host2-ATD" + media-reset: + spine1: + - "media-spine1-IP-Intro-start" + spine2: + - "media-spine2-IP-Intro-start" + leaf1: + - "media-leaf1-IP-Intro-start" + leaf2: + - "media-leaf2-IP-Intro-start" + leaf3: + - "media-leaf3-IP-Intro-start" + leaf4: + - "media-leaf4-IP-Intro-start" + host1: + - "Host1-Media" + host2: + - "Host2-Media" + media-intro: + spine1: + - "media-spine1-IP-Intro-start" + spine2: + - "media-spine2-IP-Intro-start" + leaf1: + - "media-leaf1-IP-Intro-start" + leaf2: + - "media-leaf2-IP-Intro-start" + leaf3: + - "media-leaf3-IP-Intro-start" + leaf4: + - "media-leaf4-IP-Intro-start" + host1: + - "Host1-Media" + host2: + - "Host2-Media" + media-vlan: + spine1: + - "media-spine1-VLAN-STP-start" + spine2: + - "media-spine2-VLAN-STP-start" + leaf1: + - "media-leaf1-VLAN-STP-start" + leaf2: + - "media-leaf2-VLAN-STP-start" + leaf3: + - "media-leaf3-VLAN-STP-start" + leaf4: + - "media-leaf4-VLAN-STP-start" + host1: + - "Host1-Media" + host2: + - "Host2-Media" + media-ospf: + spine1: + - "media-spine1-OSPF-start" + spine2: + - "media-spine2-OSPF-start" + leaf1: + - "media-leaf1-OSPF-start" + leaf2: + - "media-leaf2-OSPF-start" + leaf3: + - "media-leaf3-OSPF-start" + leaf4: + - "media-leaf4-OSPF-start" + host1: + - "Host1-Media" + host2: + - "Host2-Media" + media-bgp: + spine1: + - "media-spine1-BGP-start" + spine2: + - "media-spine2-BGP-start" + leaf1: + - "media-leaf1-BGP-start" + leaf2: + - "media-leaf2-BGP-start" + leaf3: + - "media-leaf3-BGP-start" + leaf4: + - "media-leaf4-BGP-start" + host1: + - "Host1-Media" + host2: + - "Host2-Media" + media-mcast: + spine1: + - "media-spine1-Multicast-lab" + spine2: + - "media-spine2-Multicast-lab" + leaf1: + - "media-leaf1-Multicast-lab" + leaf2: + - "media-leaf2-Multicast-lab" + leaf3: + - "media-leaf3-Multicast-lab" + leaf4: + - "media-leaf4-Multicast-lab" + host1: + - "Host1-Media" + host2: + - "Host2-Media" diff --git a/topologies/training-level2-exam-2/files/apps/coder/coder.yaml b/topologies/training-level2-exam-2/files/apps/coder/coder.yaml new file mode 100644 index 000000000..80cc852d1 --- /dev/null +++ b/topologies/training-level2-exam-2/files/apps/coder/coder.yaml @@ -0,0 +1,4 @@ +bind-addr: 127.0.0.1:8080 +auth: password +password: {ARISTA_REPLACE} +cert: false \ No newline at end of file diff --git a/topologies/training-level2-exam-2/files/apps/coder/labfiles/.placeholder b/topologies/training-level2-exam-2/files/apps/coder/labfiles/.placeholder new file mode 100644 index 000000000..e69de29bb diff --git a/topologies/training-level2-exam-2/files/apps/ssh/web.json b/topologies/training-level2-exam-2/files/apps/ssh/web.json new file mode 100644 index 000000000..13fac47dd --- /dev/null +++ b/topologies/training-level2-exam-2/files/apps/ssh/web.json @@ -0,0 +1,76 @@ +{ + "listen": { + "ip": "0.0.0.0", + "port": 2222 + }, + "user": { + "name": null, + "password": null, + "privatekey": null + }, + "ssh": { + "host": null, + "port": 22, + "localAddress": null, + "localPort": null, + "term": "xterm-color", + "readyTimeout": 20000, + "keepaliveInterval": 120000, + "keepaliveCountMax": 10, + "allowedSubnets": [ "192.168.0.0/16", "10.0.0.0/8", "172.16.0.0/12" ] + }, + "terminal": { + "cursorBlink": true, + "scrollback": 10000, + "tabStopWidth": 8, + "bellStyle": "sound" + }, + "header": { + "text": null, + "background": "green" + }, + "session": { + "name": "WebSSH2", + "secret": "mysecret" + }, + "options": { + "challengeButton": true, + "allowreauth": true + }, + "algorithms": { + "kex": [ + "ecdh-sha2-nistp256", + "ecdh-sha2-nistp384", + "ecdh-sha2-nistp521", + "diffie-hellman-group-exchange-sha256", + "diffie-hellman-group14-sha1" + ], + "cipher": [ + "aes128-ctr", + "aes192-ctr", + "aes256-ctr", + "aes128-gcm", + "aes128-gcm@openssh.com", + "aes256-gcm", + "aes256-gcm@openssh.com", + "aes256-cbc" + ], + "hmac": [ + "hmac-sha2-256", + "hmac-sha2-512", + "hmac-sha1" + ], + "compress": [ + "none", + "zlib@openssh.com", + "zlib" + ] + }, + "serverlog": { + "client": false, + "server": false + }, + "accesslog": false, + "verify": false, + "safeShutdownDuration": 300 + } \ No newline at end of file diff --git a/topologies/training-level2-exam-2/files/apps/uilanding/modules.yaml b/topologies/training-level2-exam-2/files/apps/uilanding/modules.yaml new file mode 100644 index 000000000..fb504a967 --- /dev/null +++ b/topologies/training-level2-exam-2/files/apps/uilanding/modules.yaml @@ -0,0 +1,27 @@ +topology: + image: "atd-topo.png" + nodes: + Spine1: + coords: "208,22,392,106" + ip: "192.168.0.11" + Spine2: + coords: "505,21,687,106" + ip: "192.168.0.12" + Leaf1: + coords: "24,317,207,402" + ip: "192.168.0.21" + Leaf2: + coords: "248,317,431,403" + ip: "192.168.0.22" + Leaf3: + coords: "472,317,654,401" + ip: "192.168.0.23" + Leaf4: + coords: "697,317,879,401" + ip: "192.168.0.24" + Host1: + coords: "139,472,323,557" + ip: "192.168.0.51" + Host2: + coords: "588,473,772,557" + ip: "192.168.0.52" diff --git a/topologies/training-level2-exam-2/files/apps/webui/.vncpass_clear b/topologies/training-level2-exam-2/files/apps/webui/.vncpass_clear new file mode 100644 index 000000000..cd09dd7a5 --- /dev/null +++ b/topologies/training-level2-exam-2/files/apps/webui/.vncpass_clear @@ -0,0 +1 @@ +@rista1 \ No newline at end of file diff --git a/topologies/training-level2-exam-2/files/cvp/cvp_info.yaml b/topologies/training-level2-exam-2/files/cvp/cvp_info.yaml new file mode 100644 index 000000000..0bfba5c16 --- /dev/null +++ b/topologies/training-level2-exam-2/files/cvp/cvp_info.yaml @@ -0,0 +1,53 @@ +cvp_info: + containers: + Tenant: + nodes: + Leaf: + parent: Tenant + nodes: + - leaf1 + - leaf2 + - leaf3 + - leaf4 + Spine: + parent: Tenant + nodes: + - spine1 + - spine2 + Hosts: + parent: Tenant + nodes: + - host1 + - host2 + - host3 + borderleaf1: + parent: Tenant + nodes: + - borderleaf1 + snapshots: + configlets: + containers: + Tenant: + - ATD-INFRA + netelements: + spine1: + - spine1-base + spine2: + - spine2-base + leaf1: + - leaf1-base + leaf2: + - leaf2-base + leaf3: + - leaf3-base + leaf4: + - leaf4-base + host1: + - host1-base + host2: + - host2-base + host3: + - host3-base + borderleaf1: + - borderleaf1-base + \ No newline at end of file diff --git a/topologies/training-level2-exam-2/files/hosts b/topologies/training-level2-exam-2/files/hosts new file mode 100644 index 000000000..a299812df --- /dev/null +++ b/topologies/training-level2-exam-2/files/hosts @@ -0,0 +1,18 @@ +127.0.0.1 localhost +192.168.0.11 spine1 +192.168.0.12 spine2 +192.168.0.13 spine3 +192.168.0.14 spine4 +192.168.0.21 leaf1 +192.168.0.22 leaf2 +192.168.0.23 leaf3 +192.168.0.24 leaf4 +192.168.0.41 server1 +192.168.0.42 server2 +192.168.0.43 server3 +192.168.0.44 server4 +192.168.0.51 host1 +192.168.0.52 host2 +192.168.0.53 host3 +192.168.0.54 host4 +192.168.0.5 cvp diff --git a/topologies/training-level2-exam-2/files/menus/default.yaml b/topologies/training-level2-exam-2/files/menus/default.yaml new file mode 100644 index 000000000..88e29c3e2 --- /dev/null +++ b/topologies/training-level2-exam-2/files/menus/default.yaml @@ -0,0 +1,2 @@ +--- +default_menu: ssh \ No newline at end of file diff --git a/topologies/training-level2-exam-2/files/menus/training-l2.yaml b/topologies/training-level2-exam-2/files/menus/training-l2.yaml new file mode 100644 index 000000000..12b6c959a --- /dev/null +++ b/topologies/training-level2-exam-2/files/menus/training-l2.yaml @@ -0,0 +1,26 @@ +--- + lab_list: + reset: + description: "Reset All Devices to Base Lab (reset)" + labconfiglets: + reset: + spine1: + - "spine1-base" + spine2: + - "spine2-base" + leaf1: + - "leaf1-base" + leaf2: + - "leaf2-base" + leaf3: + - "leaf3-base" + leaf4: + - "leaf4-base" + host1: + - "host1-base" + host2: + - "host2-base" + host3: + - "host3-base" + borderleaf1: + - "borderleaf1-base" \ No newline at end of file diff --git a/topologies/training-level2-exam-2/files/scripts/Authenticate-CVP b/topologies/training-level2-exam-2/files/scripts/Authenticate-CVP new file mode 100644 index 000000000..144bb13eb --- /dev/null +++ b/topologies/training-level2-exam-2/files/scripts/Authenticate-CVP @@ -0,0 +1,32 @@ +import requests +import json + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + +# Print user details + +print "User Name:%s\n "%output['username'] +print "First Name: %s\n "%output['user']['firstName'] +print "Last Name: %s\n "%output['user']['lastName'] +print "User Permissions: %s\n "%output['permissionList'] +print "Cookie Jar: %s\n "%cookies diff --git a/topologies/training-level2-exam-2/files/scripts/Authenticate-CVP2 b/topologies/training-level2-exam-2/files/scripts/Authenticate-CVP2 new file mode 100644 index 000000000..3f6bf9190 --- /dev/null +++ b/topologies/training-level2-exam-2/files/scripts/Authenticate-CVP2 @@ -0,0 +1,48 @@ +import requests +import json + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + +# Print user details + +print "User Name:%s\n "%output['username'] +print "First Name: %s\n "%output['user']['firstName'] +print "Last Name: %s\n "%output['user']['lastName'] +print "User Permissions: %s\n "%output['permissionList'] +print "Cookie Jar: %s\n "%cookies + +#Create an HTTP GET request to the CVP server + +getConfigletURL = "/cvpservice/configlet/getConfiglets.do?" +getConfigletParams = {'startIndex':'0','endIndex':'0','type':'Configlet'} +response = requests.get(url+getConfigletURL,cookies=cookies, params=getConfigletParams,verify=False) +assert response.ok +outputConfiglets = response.json() + +# Print Configlet details + +for configlet in outputConfiglets['data']: + print "ConfigletName: %s"%configlet['name'] + print "ConfigletKey: %s"%configlet['key'] + print "\n" + diff --git a/topologies/training-level2-exam-2/files/scripts/Authenticate-CVP3 b/topologies/training-level2-exam-2/files/scripts/Authenticate-CVP3 new file mode 100644 index 000000000..2445806ea --- /dev/null +++ b/topologies/training-level2-exam-2/files/scripts/Authenticate-CVP3 @@ -0,0 +1,95 @@ +import requests +import json + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + +# Print user details + +print "User Name:%s\n "%output['username'] +print "First Name: %s\n "%output['user']['firstName'] +print "Last Name: %s\n "%output['user']['lastName'] +print "User Permissions: %s\n "%output['permissionList'] +print "Cookie Jar: %s\n "%cookies + +#Create an HTTP GET request to the CVP server + +getConfigletURL = "/cvpservice/configlet/getConfiglets.do?" +getConfigletParams = {'startIndex':'0','endIndex':'0','type':'Configlet'} +response = requests.get(url+getConfigletURL,cookies=cookies, params=getConfigletParams,verify=False) +assert response.ok +outputConfiglets = response.json() + +# Print Configlet details + +for configlet in outputConfiglets['data']: + print "ConfigletName: %s"%configlet['name'] + print "ConfigletKey: %s"%configlet['key'] + print "\n" +# Create an HTTP GET request to the CVP server + +getConfigletHistoryURL = "/cvpservice/configlet/getConfigletHistory.do?" +getConfigletParams = {'configletId':'configlet_32_438214998013','startIndex':'0','endIndex':'0'} +response = requests.get(url+getConfigletHistoryURL,cookies=cookies, params=getConfigletParams,verify=False) +assert response.ok +outputConfigletHistory = response.json() + +# Print Configlet details + +for entry in outputConfigletHistory['configletHistory']: + print "ConfigletKey: %s"%entry['key'] + print "ConfigletOldConfig: %s"%entry['oldConfig'] + print "ConfigletNewConfig: %s"%entry['newConfig'] + print "\n" + + +# Create an HTTP GET request to the CVP server + +getConfigletDetailURL = "/cvpservice/configlet/getConfigletByName.do?" +getConfigletParams = {'name':'VLANs'} +response = requests.get(url+getConfigletDetailURL,cookies=cookies, params=getConfigletParams,verify=False) +assert response.ok +outputConfigletDetail = response.json() + +# Print Configlet details + +print "ConfigletKey: %s"%outputConfigletDetail['key'] +print "ConfigletName: %s"%outputConfigletDetail['name'] +print "ConfigletConfig: %s"%outputConfigletDetail['config'] +print "ConfigletNote: %s"%outputConfigletDetail['note'] +print "\n" + + +# Create an HTTP POST request to the CVP server + +headers = { 'Content-Type': 'application/json' } +postConfigletChangeURL = "/cvpservice/configlet/updateConfiglet.do" +changeData = json.dumps({"config": "! some configuration here", "key": "configlet_32_438214998013", "name": "VLANs"}) +response = requests.post(url+postConfigletChangeURL, cookies=cookies, data=changeData,headers=headers,verify=False) +assert response.ok +outputConfigletChange = response.json() + +# Print Configlet details + +print "ConfigletChange: %s"%outputConfigletChange['data'] +print "\n" + diff --git a/topologies/training-level2-exam-2/files/scripts/Configlet1 b/topologies/training-level2-exam-2/files/scripts/Configlet1 new file mode 100644 index 000000000..3f6bf9190 --- /dev/null +++ b/topologies/training-level2-exam-2/files/scripts/Configlet1 @@ -0,0 +1,48 @@ +import requests +import json + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + +# Print user details + +print "User Name:%s\n "%output['username'] +print "First Name: %s\n "%output['user']['firstName'] +print "Last Name: %s\n "%output['user']['lastName'] +print "User Permissions: %s\n "%output['permissionList'] +print "Cookie Jar: %s\n "%cookies + +#Create an HTTP GET request to the CVP server + +getConfigletURL = "/cvpservice/configlet/getConfiglets.do?" +getConfigletParams = {'startIndex':'0','endIndex':'0','type':'Configlet'} +response = requests.get(url+getConfigletURL,cookies=cookies, params=getConfigletParams,verify=False) +assert response.ok +outputConfiglets = response.json() + +# Print Configlet details + +for configlet in outputConfiglets['data']: + print "ConfigletName: %s"%configlet['name'] + print "ConfigletKey: %s"%configlet['key'] + print "\n" + diff --git a/topologies/training-level2-exam-2/files/scripts/ConfigletChange b/topologies/training-level2-exam-2/files/scripts/ConfigletChange new file mode 100644 index 000000000..691ff5864 --- /dev/null +++ b/topologies/training-level2-exam-2/files/scripts/ConfigletChange @@ -0,0 +1,40 @@ +import requests +import json + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + + +# Create an HTTP POST request to the CVP server + +headers = { 'Content-Type': 'application/json' } +postConfigletChangeURL = "/cvpservice/configlet/addNoteToConfiglet.do" +changeData = json.dumps({"note": "Configlet Changed by API", "key": "configlet_516_7018635812307"}) +response = requests.post(url+postConfigletChangeURL, cookies=cookies, data=changeData,headers=headers,verify=False) +assert response.ok +outputConfigletChange = response.json() + +# Print Configlet details + +print "ConfigletChange: %s"%outputConfigletChange['data'] +print "\n" + diff --git a/topologies/training-level2-exam-2/files/scripts/ConfigletDetail b/topologies/training-level2-exam-2/files/scripts/ConfigletDetail new file mode 100644 index 000000000..eb2a85937 --- /dev/null +++ b/topologies/training-level2-exam-2/files/scripts/ConfigletDetail @@ -0,0 +1,43 @@ +import requests +import json + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + +# Create an HTTP GET request to the CVP server + +getConfigletDetailURL = "/cvpservice/configlet/getConfigletByName.do?" +getConfigletParams = {'name':'VLANs'} +response = requests.get(url+getConfigletDetailURL,cookies=cookies, params=getConfigletParams,verify=False) +assert response.ok +outputConfigletDetail = response.json() + +# Print Configlet details + +print "ConfigletKey: %s"%outputConfigletDetail['key'] +print "ConfigletName: %s"%outputConfigletDetail['name'] +print "ConfigletConfig: %s"%outputConfigletDetail['config'] +print "ConfigletNote: %s"%outputConfigletDetail['note'] +print "\n" + + + diff --git a/topologies/training-level2-exam-2/files/scripts/ConfigletHistory b/topologies/training-level2-exam-2/files/scripts/ConfigletHistory new file mode 100644 index 000000000..71f1ac693 --- /dev/null +++ b/topologies/training-level2-exam-2/files/scripts/ConfigletHistory @@ -0,0 +1,41 @@ +import requests +import json + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + +# Create an HTTP GET request to the CVP server + +getConfigletHistoryURL = "/cvpservice/configlet/getConfigletHistory.do?" +getConfigletParams = {'configletId':'configlet_344_7351420097365','startIndex':'0','endIndex':'0'} +response = requests.get(url+getConfigletHistoryURL,cookies=cookies, params=getConfigletParams,verify=False) +assert response.ok +outputConfigletHistory = response.json() + +# Print Configlet details + +for entry in outputConfigletHistory['configletHistory']: + print "ConfigletKey: %s"%entry['key'] + print "ConfigletOldConfig: \n%s"%entry['oldConfig'] + print "ConfigletNewConfig: \n%s"%entry['newConfig'] + print "\n" + diff --git a/topologies/training-level2-exam-2/files/scripts/TaskBase b/topologies/training-level2-exam-2/files/scripts/TaskBase new file mode 100644 index 000000000..6f8deccaf --- /dev/null +++ b/topologies/training-level2-exam-2/files/scripts/TaskBase @@ -0,0 +1,59 @@ +import requests +import json + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + + +# Create an HTTP GET request to the CVP server + +getTasksURL = "/cvpservice/task/getTasks.do?" +getTasksParams = {'startIndex':'0','endIndex':'0','queryparam':'Pending'} +response = requests.get(url+getTasksURL,cookies=cookies, params=getTasksParams,verify=False) +assert response.ok +outputPendingTasks = response.json() + + +# Print Tasks Created by Current User +taskList = [ ] +for entry in outputPendingTasks['data']: + if str(entry['createdBy']) == str(CVP_USER): + print "TaskNumber: %s"%entry['workOrderId'] + taskList.append(str(entry['workOrderId'])) +print "TaskList: %s"%taskList + + + +# Create an HTTP POST request to the CVP server + +headers = { 'Content-Type': 'application/json' } +postTaskLogURL = "/cvpservice/workflow/addWorkOrderLog.do" +taskLogData = json.dumps({"taskId": taskList[1],"message": "This is a test Change","source": "CVP REST API"}) +response = requests.post(url+postTaskLogURL, cookies=cookies, data=taskLogData,headers=headers,verify=False) +assert response.ok +outputTaskLog = response.json() + +# Print Configlet details + +print "TaskLogAmmend: %s"%outputTaskLog['data'] +print "\n" + diff --git a/topologies/training-level2-exam-2/files/scripts/TaskCVP1 b/topologies/training-level2-exam-2/files/scripts/TaskCVP1 new file mode 100644 index 000000000..1ebd05764 --- /dev/null +++ b/topologies/training-level2-exam-2/files/scripts/TaskCVP1 @@ -0,0 +1,48 @@ +import requests +import json + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + +# Print user details + +print "User Name:%s\n "%output['username'] +print "First Name: %s\n "%output['user']['firstName'] +print "Last Name: %s\n "%output['user']['lastName'] + + +getTasksURL = "/cvpservice/task/getTasks.do?" +getTasksParams = {'startIndex':'0','endIndex':'0'} +response = requests.get(url+getTasksURL,cookies=cookies, params=getTasksParams,verify=False) +assert response.ok +outputPendingTasks = response.json() + + +# Print Tasks Created by Current User +taskList = [ ] +for entry in outputPendingTasks['data']: + if str(entry['createdBy']) == str(CVP_USER): + print( "TaskNumber: %s Description: %s" %(entry['workOrderId'],entry['description'])) + taskList.append(str(entry['workOrderId'])) +#print "TaskList: %s"%taskList + + diff --git a/topologies/training-level2-exam-2/files/scripts/TaskExecute b/topologies/training-level2-exam-2/files/scripts/TaskExecute new file mode 100644 index 000000000..3db487284 --- /dev/null +++ b/topologies/training-level2-exam-2/files/scripts/TaskExecute @@ -0,0 +1,56 @@ +import requests +import json + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + + +# Create an HTTP GET request to the CVP server + +getTasksURL = "/cvpservice/task/getTasks.do?" +getTasksParams = {'startIndex':'0','endIndex':'0','queryparam':'Pending'} +response = requests.get(url+getTasksURL,cookies=cookies, params=getTasksParams,verify=False) +assert response.ok +outputPendingTasks = response.json() + + +# Print Tasks Created by Current User +taskList = [ ] +for entry in outputPendingTasks['data']: + if str(entry['createdBy']) == str(CVP_USER): + print "TaskNumber: %s"%entry['workOrderId'] + taskList.append(str(entry['workOrderId'])) +print "TaskList: %s"%taskList + + + +headers = { 'Content-Type': 'application/json' } +postTaskExecuteURL = "/cvpservice/task/executeTask.do" +for taskNumber in taskList: + executeData = json.dumps({'data': [taskNumber]}) + response = requests.post(url+postTaskExecuteURL, cookies=cookies,data=executeData,headers=headers,verify=False) + assert response.ok + outputExecuteTask = response.json() + print (outputExecuteTask['data']) + print "Task: "+str(taskNumber)+" Execute: "+str(outputExecuteTask['data']) + print "\n" + diff --git a/topologies/training-level2-exam-2/files/scripts/TaskLog b/topologies/training-level2-exam-2/files/scripts/TaskLog new file mode 100644 index 000000000..c835008b8 --- /dev/null +++ b/topologies/training-level2-exam-2/files/scripts/TaskLog @@ -0,0 +1,59 @@ +import requests +import json + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + + +# Create an HTTP GET request to the CVP server + +getTasksURL = "/cvpservice/task/getTasks.do?" +getTasksParams = {'startIndex':'0','endIndex':'0'} +response = requests.get(url+getTasksURL,cookies=cookies, params=getTasksParams,verify=False) +assert response.ok +outputTasks = response.json() + + +# Print Tasks Created by Current User +taskList = [ ] +for entry in outputTasks['data']: + if str(entry['createdBy']) == str(CVP_USER): + print "TaskNumber: %s"%entry['workOrderId'] + taskList.append(str(entry['workOrderId'])) +print "TaskList: %s"%taskList + + + +# Create an HTTP POST request to the CVP server + +headers = { 'Content-Type': 'application/json' } +postTaskLogURL = "/cvpservice/workflow/addWorkOrderLog.do" +taskLogData = json.dumps({"taskId": taskList[0],"message": "This is a test Change","source": "CVP REST API"}) +response = requests.post(url+postTaskLogURL, cookies=cookies, data=taskLogData,headers=headers,verify=False) +assert response.ok +outputTaskLog = response.json() + +# Print Configlet details + +print "TaskLogAmmend: %s"%outputTaskLog['data'] +print "\n" + diff --git a/topologies/training-level2-exam-2/files/scripts/TaskLog1 b/topologies/training-level2-exam-2/files/scripts/TaskLog1 new file mode 100644 index 000000000..c835008b8 --- /dev/null +++ b/topologies/training-level2-exam-2/files/scripts/TaskLog1 @@ -0,0 +1,59 @@ +import requests +import json + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + + +# Create an HTTP GET request to the CVP server + +getTasksURL = "/cvpservice/task/getTasks.do?" +getTasksParams = {'startIndex':'0','endIndex':'0'} +response = requests.get(url+getTasksURL,cookies=cookies, params=getTasksParams,verify=False) +assert response.ok +outputTasks = response.json() + + +# Print Tasks Created by Current User +taskList = [ ] +for entry in outputTasks['data']: + if str(entry['createdBy']) == str(CVP_USER): + print "TaskNumber: %s"%entry['workOrderId'] + taskList.append(str(entry['workOrderId'])) +print "TaskList: %s"%taskList + + + +# Create an HTTP POST request to the CVP server + +headers = { 'Content-Type': 'application/json' } +postTaskLogURL = "/cvpservice/workflow/addWorkOrderLog.do" +taskLogData = json.dumps({"taskId": taskList[0],"message": "This is a test Change","source": "CVP REST API"}) +response = requests.post(url+postTaskLogURL, cookies=cookies, data=taskLogData,headers=headers,verify=False) +assert response.ok +outputTaskLog = response.json() + +# Print Configlet details + +print "TaskLogAmmend: %s"%outputTaskLog['data'] +print "\n" + diff --git a/topologies/training-level2-exam-2/files/scripts/TaskLogView b/topologies/training-level2-exam-2/files/scripts/TaskLogView new file mode 100644 index 000000000..7b34904dd --- /dev/null +++ b/topologies/training-level2-exam-2/files/scripts/TaskLogView @@ -0,0 +1,51 @@ +import requests +import json +import pprint + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + + +# Create an HTTP GET request to the CVP server + +getTasksURL = "/cvpservice/task/getTasks.do?" +getTasksParams = {'startIndex':'0','endIndex':'0'} +response = requests.get(url+getTasksURL,cookies=cookies, params=getTasksParams,verify=False) +assert response.ok +outputTasks = response.json() + +taskList = [ ] +for entry in outputTasks['data']: + if str(entry['createdBy']) == str(CVP_USER): + taskList.append(str(entry['workOrderId'])) + +getTaskLogURL = "/cvpservice/task/getLogsById.do?" +#getTaskLogParams = {'startIndex':'0','endIndex':'0','id':'0'} +getTaskLogParams = {'startIndex':'0','endIndex':'0','id':taskList[0]} +response = requests.get(url+getTaskLogURL,cookies=cookies, params=getTaskLogParams,verify=False) +assert response.ok +outputTaskLog = response.json() + +# Print TaskLog details +print "TaskLogOutput: %s" %outputTaskLog['data'] +print "\n" + diff --git a/topologies/training-level2-exam-2/files/scripts/TaskNote b/topologies/training-level2-exam-2/files/scripts/TaskNote new file mode 100644 index 000000000..6cd1d6cfd --- /dev/null +++ b/topologies/training-level2-exam-2/files/scripts/TaskNote @@ -0,0 +1,52 @@ +import requests +import json +import pprint + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + + +# Create an HTTP GET request to the CVP server + +getTasksURL = "/cvpservice/task/getTasks.do?" +getTasksParams = {'startIndex':'0','endIndex':'0'} +response = requests.get(url+getTasksURL,cookies=cookies, params=getTasksParams,verify=False) +assert response.ok +outputTasks = response.json() + +taskList = [ ] +for entry in outputTasks['data']: + if str(entry['createdBy']) == str(CVP_USER): + taskList.append(str(entry['workOrderId'])) + +headers = { 'Content-Type': 'application/json' } +postTaskNoteURL = "/cvpservice/task/addNoteToTask.do" +taskNoteData = json.dumps({"workOrderId": taskList[0],"note": "This is a test Change using the API"}) +response = requests.post(url+postTaskNoteURL, cookies=cookies, data=taskNoteData,headers=headers,verify=False) +assert response.ok +outputTaskNote = response.json() + +# Print Task details + +print "TaskNoteAmmend: %s"%outputTaskNote['data'] +print "\n" + diff --git a/topologies/training-level2-exam-2/labguides/.gitignore b/topologies/training-level2-exam-2/labguides/.gitignore new file mode 100644 index 000000000..ed86553f4 --- /dev/null +++ b/topologies/training-level2-exam-2/labguides/.gitignore @@ -0,0 +1,2 @@ +.DS_Store +build/ diff --git a/topologies/training-level2-exam-2/labguides/Makefile b/topologies/training-level2-exam-2/labguides/Makefile new file mode 100644 index 000000000..874ed2529 --- /dev/null +++ b/topologies/training-level2-exam-2/labguides/Makefile @@ -0,0 +1,20 @@ +# Minimal makefile for Sphinx documentation +# + +# You can set these variables from the command line. +SPHINXOPTS = +SPHINXBUILD = python -msphinx +SPHINXPROJ = ATD +SOURCEDIR = source +BUILDDIR = build + +# Put it first so that "make" without argument is like "make help". +help: + @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) + +.PHONY: help Makefile + +# Catch-all target: route all unknown targets to Sphinx using the new +# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). +%: Makefile + @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) \ No newline at end of file diff --git a/topologies/training-level2-exam-2/labguides/readme.md b/topologies/training-level2-exam-2/labguides/readme.md new file mode 100644 index 000000000..5a5369ecd --- /dev/null +++ b/topologies/training-level2-exam-2/labguides/readme.md @@ -0,0 +1,12 @@ +# Lab Guides +In this folder are rST (restructured text) formatted lab guides for the ATD event. + +## Building +To build the documentation, you will need to install Sphinx and sphinx_bootstrap_theme with `pip`: + +`pip install sphinx sphinx_bootstrap_theme` + +## Contributing +At some point, this section may expand, but for now please make sure to review existing files for formatting guidelines. + +Please see https://github.com/ralsina/rst-cheatsheet/blob/master/rst-cheatsheet.rst for a cheat sheet. \ No newline at end of file diff --git a/topologies/training-level2-exam-2/labguides/source/_static/arista_logo.png b/topologies/training-level2-exam-2/labguides/source/_static/arista_logo.png new file mode 100644 index 000000000..2376e72b9 Binary files /dev/null and b/topologies/training-level2-exam-2/labguides/source/_static/arista_logo.png differ diff --git a/topologies/training-level2-exam-2/labguides/source/_static/arista_logo_160by26.png b/topologies/training-level2-exam-2/labguides/source/_static/arista_logo_160by26.png new file mode 100644 index 000000000..d0d0cbeec Binary files /dev/null and b/topologies/training-level2-exam-2/labguides/source/_static/arista_logo_160by26.png differ diff --git a/topologies/training-level2-exam-2/labguides/source/_static/arista_logo_320by52.png b/topologies/training-level2-exam-2/labguides/source/_static/arista_logo_320by52.png new file mode 100644 index 000000000..43dfa7ed2 Binary files /dev/null and b/topologies/training-level2-exam-2/labguides/source/_static/arista_logo_320by52.png differ diff --git a/topologies/training-level2-exam-2/labguides/source/_static/cloudvision-icon.png b/topologies/training-level2-exam-2/labguides/source/_static/cloudvision-icon.png new file mode 100644 index 000000000..c309ed98e Binary files /dev/null and b/topologies/training-level2-exam-2/labguides/source/_static/cloudvision-icon.png differ diff --git a/topologies/training-level2-exam-2/labguides/source/_static/logo.jpg b/topologies/training-level2-exam-2/labguides/source/_static/logo.jpg new file mode 100644 index 000000000..6eda41f7e Binary files /dev/null and b/topologies/training-level2-exam-2/labguides/source/_static/logo.jpg differ diff --git a/topologies/training-level2-exam-2/labguides/source/_static/my-styles.css b/topologies/training-level2-exam-2/labguides/source/_static/my-styles.css new file mode 100644 index 000000000..1150528ee --- /dev/null +++ b/topologies/training-level2-exam-2/labguides/source/_static/my-styles.css @@ -0,0 +1,41 @@ +body { + background-color: #FFFFFF; + color: #002859 +} + +.navbar-inverse { + background-image: -webkit-linear-gradient(#6d94bf, #446e9b 50%, #002859); + background-image: -o-linear-gradient(#6d94bf, #446e9b 50%, #002859); + background-image: -webkit-gradient(linear, left top, left bottom, from(#6d94bf), color-stop(50%, #446e9b), to(#002859)); + background-image: linear-gradient(#6d94bf, #446e9b 50%, #002859); + background-repeat: no-repeat; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff6d94bf', endColorstr='#ff002859', GradientType=0); + -webkit-filter: none; + filter: none; + border: 1px solid #345578; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.3) +} + +.navbar-brand { + background: url("arista_logo_320by52.png") center / contain no-repeat; + display: inline-block; + width: 1px; + padding: 0 10px 0 60px; + margin-right: 30px; + margin-left: -30px; +} + +.navbar-brand>img { + display: inline-block; + padding: 0 100px 0 0px; + margin-right: 20px; +} +a.navbar-brand { + display: inline-block; + padding: 15px 0 0 120px; +} + +footer { + background-color: #002859; + color: #FFFFFF; +} diff --git a/topologies/training-level2-exam-2/labguides/source/conf.py b/topologies/training-level2-exam-2/labguides/source/conf.py new file mode 100644 index 000000000..afccec09c --- /dev/null +++ b/topologies/training-level2-exam-2/labguides/source/conf.py @@ -0,0 +1,247 @@ +# -*- coding: utf-8 -*- +# +# ATD documentation build configuration file, created by +# sphinx-quickstart on Tue Apr 17 10:00:04 2018. +# +# This file is execfile()d with the current directory set to its +# containing dir. +# +# Note that not all possible configuration values are present in this +# autogenerated file. +# +# All configuration values have a default; values that are commented out +# serve to show the default. + +# If extensions (or modules to document with autodoc) are in another directory, +# add these directories to sys.path here. If the directory is relative to the +# documentation root, use os.path.abspath to make it absolute, like shown here. +# +# import os +# import sys +# sys.path.insert(0, os.path.abspath('.')) + +import sphinx_bootstrap_theme + +# Importing datetime module to auto update copyright year +from datetime import date + +# -- General configuration ------------------------------------------------ + +# If your documentation needs a minimal Sphinx version, state it here. +# +# needs_sphinx = '1.0' + +# Add any Sphinx extension module names here, as strings. They can be +# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom +# ones. + +# Add any paths that contain templates here, relative to this directory. +templates_path = ['_templates'] + +# The suffix(es) of source filenames. +# You can specify multiple suffix as a list of string: +# +# source_suffix = ['.rst', '.md'] +source_suffix = '.rst' + +# The master toctree document. +master_doc = 'index' + +# General information about the project. +# Updating copyright var to auto update with current year +project = u'Arista ATD' +copyright = u'{0}, Arista Networks'.format(date.today().year) +author = u'Arista ATD atd-help@arista.com' + +# Show Source +html_show_sourcelink = False + +# The version info for the project you're documenting, acts as replacement for +# |version| and |release|, also used in various other places throughout the +# built documents. +# +# The short X.Y version. +version = u'Version 3.0' +# The full version, including alpha/beta/rc tags. +release = u'1' + +# The language for content autogenerated by Sphinx. Refer to documentation +# for a list of supported languages. +# +# This is also used if you do content translation via gettext catalogs. +# Usually you set "language" from the command line for these cases. +language = None + +# List of patterns, relative to source directory, that match files and +# directories to ignore when looking for source files. +# This patterns also effect to html_static_path and html_extra_path +exclude_patterns = [] + +# The name of the Pygments (syntax highlighting) style to use. +pygments_style = 'sphinx' + +# If true, `todo` and `todoList` produce output, else they produce nothing. +todo_include_todos = False + + +# -- Options for HTML output ---------------------------------------------- + +# The theme to use for HTML and HTML Help pages. See the documentation for +# a list of builtin themes. +# +#html_theme = 'alabaster' +html_theme = 'bootstrap' +html_theme_path = sphinx_bootstrap_theme.get_html_theme_path() + +# Add any paths that contain custom static files (such as style sheets) here, +# relative to this directory. They are copied after the builtin static files, +# so a file named "default.css" will overwrite the builtin "default.css". +html_static_path = ['_static'] + +# Theme options are theme-specific and customize the look and feel of a theme +# further. For a list of options available for each theme, see the +# documentation. +# +html_theme_options = { + # Navigation bar title. (Default: ``project`` value) + 'navbar_title': "ATD", + + # Tab name for entire site. (Default: "Site") + 'navbar_site_name': "Table of Contents", + + # A list of tuples containing pages or urls to link to. + # Valid tuples should be in the following forms: + # (name, page) # a link to a page + # (name, "/aa/bb", 1) # a link to an arbitrary relative url + # (name, "http://example.com", True) # arbitrary absolute url + # Note the "1" or "True" value above as the third argument to indicate + # an arbitrary url. + 'navbar_links': [ + ("Arista", "http://www.arista.com", True), + ], + + # Render the next and previous page links in navbar. (Default: true) + 'navbar_sidebarrel': True, + + # Render the current pages TOC in the navbar. (Default: true) + 'navbar_pagenav': False, + + # Tab name for the current pages TOC. (Default: "Page") + 'navbar_pagenav_name': "Page", + + # Global TOC depth for "site" navbar tab. (Default: 1) + # Switching to -1 shows all levels. + 'globaltoc_depth': 2, + + # Include hidden TOCs in Site navbar? + # + # Note: If this is "false", you cannot have mixed ``:hidden:`` and + # non-hidden ``toctree`` directives in the same page, or else the build + # will break. + # + # Values: "true" (default) or "false" + 'globaltoc_includehidden': "true", + + # HTML navbar class (Default: "navbar") to attach to
    element. + # For black navbar, do "navbar navbar-inverse" + #'navbar_class': "navbar navbar-inverse", + 'navbar_class': "navbar", + + # Fix navigation bar to top of page? + # Values: "true" (default) or "false" + 'navbar_fixed_top': "true", + + # Location of link to source. + # Options are "nav" (default), "footer" or anything else to exclude. + #'source_link_position': "nav", + + # Bootswatch (http://bootswatch.com/) theme. + # + # Options are nothing (default) or the name of a valid theme + # such as "cosmo" or "sandstone". + # + # The set of valid themes depend on the version of Bootstrap + # that's used (the next config option). + # + # Currently, the supported themes are: + # - Bootstrap 2: https://bootswatch.com/2 + # - Bootstrap 3: https://bootswatch.com/3 + 'bootswatch_theme': "spacelab", + + # Choose Bootstrap version. + # Values: "3" (default) or "2" (in quotes) + 'bootstrap_version': "3", +} + +# The name for this set of Sphinx documents. If None, it defaults to +# " v documentation". +#html_title = "AristaATD" + +# A shorter title for the navigation bar. Default is the same as html_title. +#html_short_title = "Demo" + +# (Optional) Logo. Should be small enough to fit the navbar (ideally 24x24). +# Path should be relative to the ``_static`` files directory. +#html_logo = "cloudvision-icon.png" + +# -- Options for HTMLHelp output ------------------------------------------ + +# Output file base name for HTML help builder. +htmlhelp_basename = 'AristaATD' + + +# -- Options for LaTeX output --------------------------------------------- + +latex_elements = { + # The paper size ('letterpaper' or 'a4paper'). + # + # 'papersize': 'letterpaper', + + # The font size ('10pt', '11pt' or '12pt'). + # + # 'pointsize': '10pt', + + # Additional stuff for the LaTeX preamble. + # + # 'preamble': '', + + # Latex figure (float) alignment + # + # 'figure_align': 'htbp', +} + +# Grouping the document tree into LaTeX files. List of tuples +# (source start file, target name, title, +# author, documentclass [howto, manual, or own class]). +latex_documents = [ + (master_doc, 'ATD.tex', u'ATD Lab Guide', + u'ATD Help (atd-help@arista.com)', 'manual'), +] + + +# -- Options for manual page output --------------------------------------- + +# One entry per manual page. List of tuples +# (source start file, name, description, authors, manual section). +man_pages = [ + (master_doc, 'atd', u'ATD Lab Guide', + [author], 1) +] + + +# -- Options for Texinfo output ------------------------------------------- + +# Grouping the document tree into Texinfo files. List of tuples +# (source start file, target name, title, author, +# dir menu entry, description, category) +texinfo_documents = [ + (master_doc, 'ATD', u'ATD Lab Guide', + author, 'ATD', 'Lab Documentation.', + 'Miscellaneous'), +] + + +def setup(app): + app.add_stylesheet("my-styles.css") # also can be a full URL + # app.add_stylesheet("ANOTHER.css") + # app.add_stylesheet("AND_ANOTHER.css") diff --git a/topologies/training-level2-exam-2/labguides/source/connecting.rst b/topologies/training-level2-exam-2/labguides/source/connecting.rst new file mode 100644 index 000000000..10ae589ef --- /dev/null +++ b/topologies/training-level2-exam-2/labguides/source/connecting.rst @@ -0,0 +1,28 @@ +Connecting +========== + +1. Log into the Arista Test Drive portal with your assigned URL. If you + don’t have one, please see your ATD staff. + +.. image:: images/connecting/nested_connecting_1.png + +2. SSH to the public address assigned to the LabAccess jumphost server (this is the Topology Address shown in the "Welcome to Arista's Test Drive!" picture above). The username is ``arista`` and the password is ``{REPLACE_PWD}``: + + .. code-block:: text + + ssh arista@{unique_address}.topo.testdrive.arista.com + +| + +.. image:: images/connecting/nested_connecting_2.png + :align: center + +| + +3. The LabAccess menu allows users to connect to each device and specify + lab topology. It is recommended to open multiple SSH sessions or use + the Screen option (under the SSH Menu) to jump between devices rapidly. + + You can also Access the LabAccess Menu from your browser by clicking on `Console Access` + +.. image:: images/connecting/nested_connecting_3.png diff --git a/topologies/training-level2-exam-2/labguides/source/images/connecting/nested_connecting_1.png b/topologies/training-level2-exam-2/labguides/source/images/connecting/nested_connecting_1.png new file mode 100644 index 000000000..aa76597b8 Binary files /dev/null and b/topologies/training-level2-exam-2/labguides/source/images/connecting/nested_connecting_1.png differ diff --git a/topologies/training-level2-exam-2/labguides/source/images/connecting/nested_connecting_2.png b/topologies/training-level2-exam-2/labguides/source/images/connecting/nested_connecting_2.png new file mode 100644 index 000000000..2c6b51a2b Binary files /dev/null and b/topologies/training-level2-exam-2/labguides/source/images/connecting/nested_connecting_2.png differ diff --git a/topologies/training-level2-exam-2/labguides/source/images/connecting/nested_connecting_3.png b/topologies/training-level2-exam-2/labguides/source/images/connecting/nested_connecting_3.png new file mode 100644 index 000000000..1cc7402a3 Binary files /dev/null and b/topologies/training-level2-exam-2/labguides/source/images/connecting/nested_connecting_3.png differ diff --git a/topologies/training-level2-exam-2/labguides/source/images/logo.jpg b/topologies/training-level2-exam-2/labguides/source/images/logo.jpg new file mode 100644 index 000000000..6eda41f7e Binary files /dev/null and b/topologies/training-level2-exam-2/labguides/source/images/logo.jpg differ diff --git a/topologies/training-level2-exam-2/labguides/source/index.rst b/topologies/training-level2-exam-2/labguides/source/index.rst new file mode 100644 index 000000000..bb76aaa2e --- /dev/null +++ b/topologies/training-level2-exam-2/labguides/source/index.rst @@ -0,0 +1,8 @@ +Welcome to the Arista Training documentation! +======================================== + +.. toctree:: + :maxdepth: 1 + :caption: EOS Configuration + + connecting.rst diff --git a/topologies/training-level2-exam-2/topo_build.yml b/topologies/training-level2-exam-2/topo_build.yml new file mode 100644 index 000000000..c6c79a643 --- /dev/null +++ b/topologies/training-level2-exam-2/topo_build.yml @@ -0,0 +1,142 @@ +host_cpu: 4 +cvp_cpu: 24 +cvp_nodes: 1 +veos_cpu: 2 +nodes: + - borderleaf1: + ip_addr: 192.168.0.15 + sys_mac: 00:1c:73:b5:c6:01 + neighbors: + - neighborDevice: spine1 + neighborPort: Ethernet5 + port: Ethernet1 + - neighborDevice: spine2 + neighborPort: Ethernet5 + port: Ethernet2 + - spine1: + ip_addr: 192.168.0.11 + sys_mac: 00:1c:73:b1:c6:01 + neighbors: + - neighborDevice: leaf1 + neighborPort: Ethernet3 + port: Ethernet1 + - neighborDevice: leaf2 + neighborPort: Ethernet3 + port: Ethernet2 + - neighborDevice: leaf3 + neighborPort: Ethernet1 + port: Ethernet3 + - neighborDevice: leaf4 + neighborPort: Ethernet1 + port: Ethernet4 + - neighborDevice: borderleaf1 + neighborPort: Ethernet1 + port: Ethernet5 + - spine2: + ip_addr: 192.168.0.12 + sys_mac: 00:1c:73:b2:c6:01 + neighbors: + - neighborDevice: leaf1 + neighborPort: Ethernet4 + port: Ethernet1 + - neighborDevice: leaf2 + neighborPort: Ethernet4 + port: Ethernet2 + - neighborDevice: leaf3 + neighborPort: Ethernet2 + port: Ethernet3 + - neighborDevice: leaf4 + neighborPort: Ethernet2 + port: Ethernet4 + - neighborDevice: borderleaf1 + neighborPort: Ethernet2 + port: Ethernet5 + - leaf1: + ip_addr: 192.168.0.21 + sys_mac: 00:1c:73:c1:c6:01 + neighbors: + - neighborDevice: leaf2 + neighborPort: Ethernet1 + port: Ethernet1 + - neighborDevice: leaf2 + neighborPort: Ethernet2 + port: Ethernet2 + - neighborDevice: spine1 + neighborPort: Ethernet1 + port: Ethernet3 + - neighborDevice: spine2 + neighborPort: Ethernet1 + port: Ethernet4 + - neighborDevice: host1 + neighborPort: Ethernet1 + port: Ethernet5 + - leaf2: + ip_addr: 192.168.0.22 + sys_mac: 00:1c:73:c2:c6:01 + neighbors: + - neighborDevice: leaf1 + neighborPort: Ethernet1 + port: Ethernet1 + - neighborDevice: leaf1 + neighborPort: Ethernet2 + port: Ethernet2 + - neighborDevice: spine1 + neighborPort: Ethernet2 + port: Ethernet3 + - neighborDevice: spine2 + neighborPort: Ethernet2 + port: Ethernet4 + - neighborDevice: host1 + neighborPort: Ethernet2 + port: Ethernet5 + - leaf3: + ip_addr: 192.168.0.23 + sys_mac: 00:1c:73:c3:c6:01 + neighbors: + - neighborDevice: spine1 + neighborPort: Ethernet3 + port: Ethernet1 + - neighborDevice: spine2 + neighborPort: Ethernet3 + port: Ethernet2 + - neighborDevice: host2 + neighborPort: Ethernet1 + port: Ethernet3 + - leaf4: + ip_addr: 192.168.0.24 + sys_mac: 00:1c:73:c4:c6:01 + neighbors: + - neighborDevice: spine1 + neighborPort: Ethernet4 + port: Ethernet1 + - neighborDevice: spine2 + neighborPort: Ethernet4 + port: Ethernet2 + - neighborDevice: host3 + neighborPort: Ethernet1 + port: Ethernet3 + - host1: + ip_addr: 192.168.0.51 + sys_mac: 00:1c:73:f1:c6:01 + neighbors: + - neighborDevice: leaf1 + neighborPort: Ethernet5 + port: Ethernet1 + - neighborDevice: leaf2 + neighborPort: Ethernet5 + port: Ethernet2 + - host2: + ip_addr: 192.168.0.52 + sys_mac: 00:1c:73:f2:c6:01 + neighbors: + - neighborDevice: leaf3 + neighborPort: Ethernet3 + port: Ethernet1 + - host3: + ip_addr: 192.168.0.53 + sys_mac: 00:1c:73:f3:c6:01 + neighbors: + - neighborDevice: leaf4 + neighborPort: Ethernet3 + port: Ethernet1 +additional_ssh_nodes: diff --git a/topologies/training-level2-exam/configlets/ATD-INFRA b/topologies/training-level2-exam/configlets/ATD-INFRA index fc0192036..6a88951d1 100644 --- a/topologies/training-level2-exam/configlets/ATD-INFRA +++ b/topologies/training-level2-exam/configlets/ATD-INFRA @@ -1,5 +1,5 @@ daemon TerminAttr - exec /usr/bin/TerminAttr -ingestgrpcurl=192.168.0.5:9910 -taillogs -ingestauth=key,atd-lab -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent + exec /usr/bin/TerminAttr -cvcompression=gzip -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent -cvaddr=192.168.0.5:9910 -cvauth=token,/tmp/token -cvvrf=default -taillogs -disableaaa no shutdown ! alias mlag-reload bash /mnt/flash/shut_intfs && sudo shutdown now -r diff --git a/topologies/training-level2/configlets/ATD-INFRA b/topologies/training-level2/configlets/ATD-INFRA index fc0192036..6a88951d1 100644 --- a/topologies/training-level2/configlets/ATD-INFRA +++ b/topologies/training-level2/configlets/ATD-INFRA @@ -1,5 +1,5 @@ daemon TerminAttr - exec /usr/bin/TerminAttr -ingestgrpcurl=192.168.0.5:9910 -taillogs -ingestauth=key,atd-lab -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent + exec /usr/bin/TerminAttr -cvcompression=gzip -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent -cvaddr=192.168.0.5:9910 -cvauth=token,/tmp/token -cvvrf=default -taillogs -disableaaa no shutdown ! alias mlag-reload bash /mnt/flash/shut_intfs && sudo shutdown now -r diff --git a/topologies/training-level2/configlets/host1-MLAG-end b/topologies/training-level2/configlets/host1-MLAG-end index 370ae1d30..f07730c81 100644 --- a/topologies/training-level2/configlets/host1-MLAG-end +++ b/topologies/training-level2/configlets/host1-MLAG-end @@ -26,10 +26,6 @@ alias intdesc 30 desc %2 40 exit ! -daemon TerminAttr - exec /usr/bin/TerminAttr -ingestgrpcurl=192.168.0.5:9910 -taillogs -ingestauth=key,atd-lab -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent - no shutdown -! transceiver qsfp default-mode 4x10G ! service routing protocols model multi-agent diff --git a/topologies/training-level2/configlets/host1-base-config-end b/topologies/training-level2/configlets/host1-base-config-end index 9ee696847..9ac66b942 100644 --- a/topologies/training-level2/configlets/host1-base-config-end +++ b/topologies/training-level2/configlets/host1-base-config-end @@ -26,10 +26,6 @@ alias intdesc 30 desc %2 40 exit ! -daemon TerminAttr - exec /usr/bin/TerminAttr -ingestgrpcurl=192.168.0.5:9910 -taillogs -ingestauth=key,atd-lab -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent - no shutdown -! transceiver qsfp default-mode 4x10G ! service routing protocols model multi-agent diff --git a/topologies/training-level2/configlets/host1-routing-part2-end b/topologies/training-level2/configlets/host1-routing-part2-end index d4faff853..b1a2d38a5 100644 --- a/topologies/training-level2/configlets/host1-routing-part2-end +++ b/topologies/training-level2/configlets/host1-routing-part2-end @@ -26,10 +26,6 @@ alias intdesc 30 desc %2 40 exit ! -daemon TerminAttr - exec /usr/bin/TerminAttr -ingestgrpcurl=192.168.0.5:9910 -taillogs -ingestauth=key,atd-lab -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent - no shutdown -! transceiver qsfp default-mode 4x10G ! service routing protocols model multi-agent diff --git a/topologies/training-level2/configlets/host2-MLAG-end b/topologies/training-level2/configlets/host2-MLAG-end index 9aa98af1d..307fc338a 100644 --- a/topologies/training-level2/configlets/host2-MLAG-end +++ b/topologies/training-level2/configlets/host2-MLAG-end @@ -26,10 +26,6 @@ alias intdesc 30 desc %2 40 exit ! -daemon TerminAttr - exec /usr/bin/TerminAttr -ingestgrpcurl=192.168.0.5:9910 -taillogs -ingestauth=key,atd-lab -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent - no shutdown -! transceiver qsfp default-mode 4x10G ! service routing protocols model multi-agent diff --git a/topologies/training-level2/configlets/host2-base-config-end b/topologies/training-level2/configlets/host2-base-config-end index 93c7f5151..b9fa3259c 100644 --- a/topologies/training-level2/configlets/host2-base-config-end +++ b/topologies/training-level2/configlets/host2-base-config-end @@ -26,10 +26,6 @@ alias intdesc 30 desc %2 40 exit ! -daemon TerminAttr - exec /usr/bin/TerminAttr -ingestgrpcurl=192.168.0.5:9910 -taillogs -ingestauth=key,atd-lab -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent - no shutdown -! transceiver qsfp default-mode 4x10G ! service routing protocols model multi-agent diff --git a/topologies/training-level2/configlets/host2-routing-part2-end b/topologies/training-level2/configlets/host2-routing-part2-end index 163bfc8a6..0344477cc 100644 --- a/topologies/training-level2/configlets/host2-routing-part2-end +++ b/topologies/training-level2/configlets/host2-routing-part2-end @@ -26,10 +26,6 @@ alias intdesc 30 desc %2 40 exit ! -daemon TerminAttr - exec /usr/bin/TerminAttr -ingestgrpcurl=192.168.0.5:9910 -taillogs -ingestauth=key,atd-lab -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent - no shutdown -! transceiver qsfp default-mode 4x10G ! service routing protocols model multi-agent diff --git a/topologies/training-level2/configlets/leaf1-STP-end b/topologies/training-level2/configlets/leaf1-STP-end index 8ae667658..eb31d20b3 100644 --- a/topologies/training-level2/configlets/leaf1-STP-end +++ b/topologies/training-level2/configlets/leaf1-STP-end @@ -26,10 +26,6 @@ alias intdesc 30 desc %2 40 exit ! -daemon TerminAttr - exec /usr/bin/TerminAttr -ingestgrpcurl=192.168.0.5:9910 -taillogs -ingestauth=key,atd-lab -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent - no shutdown -! transceiver qsfp default-mode 4x10G ! service routing protocols model multi-agent diff --git a/topologies/training-level2/configlets/leaf1-base-config-end b/topologies/training-level2/configlets/leaf1-base-config-end index a72b4720a..ced81fd37 100644 --- a/topologies/training-level2/configlets/leaf1-base-config-end +++ b/topologies/training-level2/configlets/leaf1-base-config-end @@ -26,10 +26,6 @@ alias intdesc 30 desc %2 40 exit ! -daemon TerminAttr - exec /usr/bin/TerminAttr -ingestgrpcurl=192.168.0.5:9910 -taillogs -ingestauth=key,atd-lab -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent - no shutdown -! transceiver qsfp default-mode 4x10G ! service routing protocols model multi-agent diff --git a/topologies/training-level2/configlets/leaf1-routing-part1-end b/topologies/training-level2/configlets/leaf1-routing-part1-end index 80dac8907..4a4df7281 100644 --- a/topologies/training-level2/configlets/leaf1-routing-part1-end +++ b/topologies/training-level2/configlets/leaf1-routing-part1-end @@ -26,10 +26,6 @@ alias intdesc 30 desc %2 40 exit ! -daemon TerminAttr - exec /usr/bin/TerminAttr -ingestgrpcurl=192.168.0.5:9910 -taillogs -ingestauth=key,atd-lab -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent - no shutdown -! transceiver qsfp default-mode 4x10G ! service routing protocols model multi-agent diff --git a/topologies/training-level2/configlets/leaf1-routing-part2-end b/topologies/training-level2/configlets/leaf1-routing-part2-end index 55dcf978c..0ad75cb21 100644 --- a/topologies/training-level2/configlets/leaf1-routing-part2-end +++ b/topologies/training-level2/configlets/leaf1-routing-part2-end @@ -26,10 +26,6 @@ alias intdesc 30 desc %2 40 exit ! -daemon TerminAttr - exec /usr/bin/TerminAttr -ingestgrpcurl=192.168.0.5:9910 -taillogs -ingestauth=key,atd-lab -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent - no shutdown -! transceiver qsfp default-mode 4x10G ! service routing protocols model multi-agent diff --git a/topologies/training-level2/configlets/leaf2-AEM-end b/topologies/training-level2/configlets/leaf2-AEM-end index 439ce9064..f832eefdb 100644 --- a/topologies/training-level2/configlets/leaf2-AEM-end +++ b/topologies/training-level2/configlets/leaf2-AEM-end @@ -28,10 +28,6 @@ alias intdesc ! schedule interfacestatus interval 2 timeout 1 max-log-files 30 command show int status ! -daemon TerminAttr - exec /usr/bin/TerminAttr -ingestgrpcurl=192.168.0.5:9910 -taillogs -ingestauth=key,atd-lab -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent - no shutdown -! event-monitor ! transceiver qsfp default-mode 4x10G diff --git a/topologies/training-level2/configlets/leaf2-MLAG-end b/topologies/training-level2/configlets/leaf2-MLAG-end index 6d9e77016..e3f94eba9 100644 --- a/topologies/training-level2/configlets/leaf2-MLAG-end +++ b/topologies/training-level2/configlets/leaf2-MLAG-end @@ -26,10 +26,6 @@ alias intdesc 30 desc %2 40 exit ! -daemon TerminAttr - exec /usr/bin/TerminAttr -ingestgrpcurl=192.168.0.5:9910 -taillogs -ingestauth=key,atd-lab -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent - no shutdown -! transceiver qsfp default-mode 4x10G ! service routing protocols model multi-agent diff --git a/topologies/training-level2/configlets/leaf2-STP-end b/topologies/training-level2/configlets/leaf2-STP-end index 45ea03d72..2ab8cc706 100644 --- a/topologies/training-level2/configlets/leaf2-STP-end +++ b/topologies/training-level2/configlets/leaf2-STP-end @@ -26,10 +26,6 @@ alias intdesc 30 desc %2 40 exit ! -daemon TerminAttr - exec /usr/bin/TerminAttr -ingestgrpcurl=192.168.0.5:9910 -taillogs -ingestauth=key,atd-lab -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent - no shutdown -! transceiver qsfp default-mode 4x10G ! service routing protocols model multi-agent diff --git a/topologies/training-level2/configlets/leaf2-base-config-end b/topologies/training-level2/configlets/leaf2-base-config-end index a2ef7819c..f088c1bc6 100644 --- a/topologies/training-level2/configlets/leaf2-base-config-end +++ b/topologies/training-level2/configlets/leaf2-base-config-end @@ -26,10 +26,6 @@ alias intdesc 30 desc %2 40 exit ! -daemon TerminAttr - exec /usr/bin/TerminAttr -ingestgrpcurl=192.168.0.5:9910 -taillogs -ingestauth=key,atd-lab -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent - no shutdown -! transceiver qsfp default-mode 4x10G ! service routing protocols model multi-agent diff --git a/topologies/training-level2/configlets/leaf2-routing-part1-end b/topologies/training-level2/configlets/leaf2-routing-part1-end index 7c2c5cec6..352825b8d 100644 --- a/topologies/training-level2/configlets/leaf2-routing-part1-end +++ b/topologies/training-level2/configlets/leaf2-routing-part1-end @@ -26,10 +26,6 @@ alias intdesc 30 desc %2 40 exit ! -daemon TerminAttr - exec /usr/bin/TerminAttr -ingestgrpcurl=192.168.0.5:9910 -taillogs -ingestauth=key,atd-lab -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent - no shutdown -! transceiver qsfp default-mode 4x10G ! service routing protocols model multi-agent diff --git a/topologies/training-level2/configlets/leaf2-routing-part2-end b/topologies/training-level2/configlets/leaf2-routing-part2-end index da2dca280..8ac7cef12 100644 --- a/topologies/training-level2/configlets/leaf2-routing-part2-end +++ b/topologies/training-level2/configlets/leaf2-routing-part2-end @@ -26,10 +26,6 @@ alias intdesc 30 desc %2 40 exit ! -daemon TerminAttr - exec /usr/bin/TerminAttr -ingestgrpcurl=192.168.0.5:9910 -taillogs -ingestauth=key,atd-lab -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent - no shutdown -! transceiver qsfp default-mode 4x10G ! service routing protocols model multi-agent diff --git a/topologies/training-level2/configlets/leaf3-MLAG-end b/topologies/training-level2/configlets/leaf3-MLAG-end index 7607dff39..57f506764 100644 --- a/topologies/training-level2/configlets/leaf3-MLAG-end +++ b/topologies/training-level2/configlets/leaf3-MLAG-end @@ -26,10 +26,6 @@ alias intdesc 30 desc %2 40 exit ! -daemon TerminAttr - exec /usr/bin/TerminAttr -ingestgrpcurl=192.168.0.5:9910 -taillogs -ingestauth=key,atd-lab -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent - no shutdown -! transceiver qsfp default-mode 4x10G ! service routing protocols model multi-agent diff --git a/topologies/training-level2/configlets/leaf3-STP-end b/topologies/training-level2/configlets/leaf3-STP-end index b500f750c..36a2ee1fc 100644 --- a/topologies/training-level2/configlets/leaf3-STP-end +++ b/topologies/training-level2/configlets/leaf3-STP-end @@ -26,10 +26,6 @@ alias intdesc 30 desc %2 40 exit ! -daemon TerminAttr - exec /usr/bin/TerminAttr -ingestgrpcurl=192.168.0.5:9910 -taillogs -ingestauth=key,atd-lab -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent - no shutdown -! transceiver qsfp default-mode 4x10G ! service routing protocols model multi-agent diff --git a/topologies/training-level2/configlets/leaf3-base-config-end b/topologies/training-level2/configlets/leaf3-base-config-end index c83aceeb3..432457dbe 100644 --- a/topologies/training-level2/configlets/leaf3-base-config-end +++ b/topologies/training-level2/configlets/leaf3-base-config-end @@ -26,10 +26,6 @@ alias intdesc 30 desc %2 40 exit ! -daemon TerminAttr - exec /usr/bin/TerminAttr -ingestgrpcurl=192.168.0.5:9910 -taillogs -ingestauth=key,atd-lab -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent - no shutdown -! transceiver qsfp default-mode 4x10G ! service routing protocols model multi-agent diff --git a/topologies/training-level2/configlets/leaf3-routing-part1-end b/topologies/training-level2/configlets/leaf3-routing-part1-end index a9321e544..3b8f53846 100644 --- a/topologies/training-level2/configlets/leaf3-routing-part1-end +++ b/topologies/training-level2/configlets/leaf3-routing-part1-end @@ -26,10 +26,6 @@ alias intdesc 30 desc %2 40 exit ! -daemon TerminAttr - exec /usr/bin/TerminAttr -ingestgrpcurl=192.168.0.5:9910 -taillogs -ingestauth=key,atd-lab -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent - no shutdown -! transceiver qsfp default-mode 4x10G ! service routing protocols model multi-agent diff --git a/topologies/training-level2/configlets/leaf3-routing-part2-end b/topologies/training-level2/configlets/leaf3-routing-part2-end index 297552308..638d22ad0 100644 --- a/topologies/training-level2/configlets/leaf3-routing-part2-end +++ b/topologies/training-level2/configlets/leaf3-routing-part2-end @@ -26,10 +26,6 @@ alias intdesc 30 desc %2 40 exit ! -daemon TerminAttr - exec /usr/bin/TerminAttr -ingestgrpcurl=192.168.0.5:9910 -taillogs -ingestauth=key,atd-lab -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent - no shutdown -! transceiver qsfp default-mode 4x10G ! service routing protocols model multi-agent diff --git a/topologies/training-level2/configlets/leaf4-MLAG-end b/topologies/training-level2/configlets/leaf4-MLAG-end index fcf0b0a84..4e0da112e 100644 --- a/topologies/training-level2/configlets/leaf4-MLAG-end +++ b/topologies/training-level2/configlets/leaf4-MLAG-end @@ -26,10 +26,6 @@ alias intdesc 30 desc %2 40 exit ! -daemon TerminAttr - exec /usr/bin/TerminAttr -ingestgrpcurl=192.168.0.5:9910 -taillogs -ingestauth=key,atd-lab -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent - no shutdown -! transceiver qsfp default-mode 4x10G ! service routing protocols model multi-agent diff --git a/topologies/training-level2/configlets/leaf4-STP-end b/topologies/training-level2/configlets/leaf4-STP-end index 7da2da1ae..488652f1f 100644 --- a/topologies/training-level2/configlets/leaf4-STP-end +++ b/topologies/training-level2/configlets/leaf4-STP-end @@ -26,10 +26,6 @@ alias intdesc 30 desc %2 40 exit ! -daemon TerminAttr - exec /usr/bin/TerminAttr -ingestgrpcurl=192.168.0.5:9910 -taillogs -ingestauth=key,atd-lab -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent - no shutdown -! transceiver qsfp default-mode 4x10G ! service routing protocols model multi-agent diff --git a/topologies/training-level2/configlets/leaf4-base-config-end b/topologies/training-level2/configlets/leaf4-base-config-end index a0494ffe6..000e90260 100644 --- a/topologies/training-level2/configlets/leaf4-base-config-end +++ b/topologies/training-level2/configlets/leaf4-base-config-end @@ -26,10 +26,7 @@ alias intdesc 30 desc %2 40 exit ! -daemon TerminAttr - exec /usr/bin/TerminAttr -ingestgrpcurl=192.168.0.5:9910 -taillogs -ingestauth=key,atd-lab -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent - no shutdown -! + transceiver qsfp default-mode 4x10G ! service routing protocols model multi-agent diff --git a/topologies/training-level2/configlets/leaf4-routing-part1-end b/topologies/training-level2/configlets/leaf4-routing-part1-end index e72cbcc9e..533feb5b1 100644 --- a/topologies/training-level2/configlets/leaf4-routing-part1-end +++ b/topologies/training-level2/configlets/leaf4-routing-part1-end @@ -26,10 +26,6 @@ alias intdesc 30 desc %2 40 exit ! -daemon TerminAttr - exec /usr/bin/TerminAttr -ingestgrpcurl=192.168.0.5:9910 -taillogs -ingestauth=key,atd-lab -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent - no shutdown -! transceiver qsfp default-mode 4x10G ! service routing protocols model multi-agent diff --git a/topologies/training-level2/configlets/leaf4-routing-part2-end b/topologies/training-level2/configlets/leaf4-routing-part2-end index f8f1a26e8..964091b99 100644 --- a/topologies/training-level2/configlets/leaf4-routing-part2-end +++ b/topologies/training-level2/configlets/leaf4-routing-part2-end @@ -26,10 +26,6 @@ alias intdesc 30 desc %2 40 exit ! -daemon TerminAttr - exec /usr/bin/TerminAttr -ingestgrpcurl=192.168.0.5:9910 -taillogs -ingestauth=key,atd-lab -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent - no shutdown -! transceiver qsfp default-mode 4x10G ! service routing protocols model multi-agent diff --git a/topologies/training-level2/configlets/spine-routing-part2-end b/topologies/training-level2/configlets/spine-routing-part2-end index 3d91903b9..a959cb30a 100644 --- a/topologies/training-level2/configlets/spine-routing-part2-end +++ b/topologies/training-level2/configlets/spine-routing-part2-end @@ -26,10 +26,6 @@ alias intdesc 30 desc %2 40 exit ! -daemon TerminAttr - exec /usr/bin/TerminAttr -ingestgrpcurl=192.168.0.5:9910 -taillogs -ingestauth=key,atd-lab -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent - no shutdown -! transceiver qsfp default-mode 4x10G ! service routing protocols model multi-agent diff --git a/topologies/training-level2/configlets/spine1-MLAG-end b/topologies/training-level2/configlets/spine1-MLAG-end index 3f088ffd3..a5deb5146 100644 --- a/topologies/training-level2/configlets/spine1-MLAG-end +++ b/topologies/training-level2/configlets/spine1-MLAG-end @@ -26,10 +26,6 @@ alias intdesc 30 desc %2 40 exit ! -daemon TerminAttr - exec /usr/bin/TerminAttr -ingestgrpcurl=192.168.0.5:9910 -taillogs -ingestauth=key,atd-lab -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent - no shutdown -! transceiver qsfp default-mode 4x10G ! service routing protocols model multi-agent diff --git a/topologies/training-level2/configlets/spine1-STP-end b/topologies/training-level2/configlets/spine1-STP-end index fdd48f595..e74e78253 100644 --- a/topologies/training-level2/configlets/spine1-STP-end +++ b/topologies/training-level2/configlets/spine1-STP-end @@ -26,10 +26,6 @@ alias intdesc 30 desc %2 40 exit ! -daemon TerminAttr - exec /usr/bin/TerminAttr -ingestgrpcurl=192.168.0.5:9910 -taillogs -ingestauth=key,atd-lab -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent - no shutdown -! transceiver qsfp default-mode 4x10G ! service routing protocols model multi-agent diff --git a/topologies/training-level2/configlets/spine1-base-config-end b/topologies/training-level2/configlets/spine1-base-config-end index a251a2fc1..0e79143cc 100644 --- a/topologies/training-level2/configlets/spine1-base-config-end +++ b/topologies/training-level2/configlets/spine1-base-config-end @@ -26,10 +26,6 @@ alias intdesc 30 desc %2 40 exit ! -daemon TerminAttr - exec /usr/bin/TerminAttr -ingestgrpcurl=192.168.0.5:9910 -taillogs -ingestauth=key,atd-lab -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent - no shutdown -! transceiver qsfp default-mode 4x10G ! service routing protocols model multi-agent diff --git a/topologies/training-level2/configlets/spine1-end-lab13 b/topologies/training-level2/configlets/spine1-end-lab13 index 313086262..8783fbc6b 100644 --- a/topologies/training-level2/configlets/spine1-end-lab13 +++ b/topologies/training-level2/configlets/spine1-end-lab13 @@ -26,10 +26,6 @@ alias intdesc 30 desc %2 40 exit ! -daemon TerminAttr - exec /usr/bin/TerminAttr -ingestgrpcurl=192.168.0.5:9910 -taillogs -ingestauth=key,atd-lab -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent - no shutdown -! transceiver qsfp default-mode 4x10G ! service routing protocols model multi-agent diff --git a/topologies/training-level2/configlets/spine1-routing-part1-end b/topologies/training-level2/configlets/spine1-routing-part1-end index 4d9f16a60..a721de6b3 100644 --- a/topologies/training-level2/configlets/spine1-routing-part1-end +++ b/topologies/training-level2/configlets/spine1-routing-part1-end @@ -26,10 +26,6 @@ alias intdesc 30 desc %2 40 exit ! -daemon TerminAttr - exec /usr/bin/TerminAttr -ingestgrpcurl=192.168.0.5:9910 -taillogs -ingestauth=key,atd-lab -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent - no shutdown -! transceiver qsfp default-mode 4x10G ! service routing protocols model multi-agent diff --git a/topologies/training-level2/configlets/spine2-MLAG-end b/topologies/training-level2/configlets/spine2-MLAG-end index 58362fdb7..39d87c5ed 100644 --- a/topologies/training-level2/configlets/spine2-MLAG-end +++ b/topologies/training-level2/configlets/spine2-MLAG-end @@ -26,10 +26,6 @@ alias intdesc 30 desc %2 40 exit ! -daemon TerminAttr - exec /usr/bin/TerminAttr -ingestgrpcurl=192.168.0.5:9910 -taillogs -ingestauth=key,atd-lab -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent - no shutdown -! transceiver qsfp default-mode 4x10G ! service routing protocols model multi-agent diff --git a/topologies/training-level2/configlets/spine2-STP-end b/topologies/training-level2/configlets/spine2-STP-end index 3ed471cc8..64808652a 100644 --- a/topologies/training-level2/configlets/spine2-STP-end +++ b/topologies/training-level2/configlets/spine2-STP-end @@ -26,10 +26,6 @@ alias intdesc 30 desc %2 40 exit ! -daemon TerminAttr - exec /usr/bin/TerminAttr -ingestgrpcurl=192.168.0.5:9910 -taillogs -ingestauth=key,atd-lab -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent - no shutdown -! transceiver qsfp default-mode 4x10G ! service routing protocols model multi-agent diff --git a/topologies/training-level2/configlets/spine2-base-config-end b/topologies/training-level2/configlets/spine2-base-config-end index 7f19b0b89..50440bfae 100644 --- a/topologies/training-level2/configlets/spine2-base-config-end +++ b/topologies/training-level2/configlets/spine2-base-config-end @@ -26,10 +26,6 @@ alias intdesc 30 desc %2 40 exit ! -daemon TerminAttr - exec /usr/bin/TerminAttr -ingestgrpcurl=192.168.0.5:9910 -taillogs -ingestauth=key,atd-lab -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent - no shutdown -! transceiver qsfp default-mode 4x10G ! service routing protocols model multi-agent diff --git a/topologies/training-level2/configlets/spine2-routing-part1-end b/topologies/training-level2/configlets/spine2-routing-part1-end index 316ac5681..8792e9f1b 100644 --- a/topologies/training-level2/configlets/spine2-routing-part1-end +++ b/topologies/training-level2/configlets/spine2-routing-part1-end @@ -26,10 +26,6 @@ alias intdesc 30 desc %2 40 exit ! -daemon TerminAttr - exec /usr/bin/TerminAttr -ingestgrpcurl=192.168.0.5:9910 -taillogs -ingestauth=key,atd-lab -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent - no shutdown -! transceiver qsfp default-mode 4x10G ! service routing protocols model multi-agent diff --git a/topologies/training-level2/configlets/spine2-routing-part2-end b/topologies/training-level2/configlets/spine2-routing-part2-end index a4a59c396..427ab59e2 100644 --- a/topologies/training-level2/configlets/spine2-routing-part2-end +++ b/topologies/training-level2/configlets/spine2-routing-part2-end @@ -26,10 +26,6 @@ alias intdesc 30 desc %2 40 exit ! -daemon TerminAttr - exec /usr/bin/TerminAttr -ingestgrpcurl=192.168.0.5:9910 -taillogs -ingestauth=key,atd-lab -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent - no shutdown -! transceiver qsfp default-mode 4x10G ! service routing protocols model multi-agent diff --git a/topologies/training-level3-2/configlets/ATD-INFRA b/topologies/training-level3-2/configlets/ATD-INFRA index fc0192036..6a88951d1 100644 --- a/topologies/training-level3-2/configlets/ATD-INFRA +++ b/topologies/training-level3-2/configlets/ATD-INFRA @@ -1,5 +1,5 @@ daemon TerminAttr - exec /usr/bin/TerminAttr -ingestgrpcurl=192.168.0.5:9910 -taillogs -ingestauth=key,atd-lab -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent + exec /usr/bin/TerminAttr -cvcompression=gzip -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent -cvaddr=192.168.0.5:9910 -cvauth=token,/tmp/token -cvvrf=default -taillogs -disableaaa no shutdown ! alias mlag-reload bash /mnt/flash/shut_intfs && sudo shutdown now -r diff --git a/topologies/training-level3-exam/configlets/ATD-INFRA b/topologies/training-level3-exam/configlets/ATD-INFRA index fc0192036..6a88951d1 100644 --- a/topologies/training-level3-exam/configlets/ATD-INFRA +++ b/topologies/training-level3-exam/configlets/ATD-INFRA @@ -1,5 +1,5 @@ daemon TerminAttr - exec /usr/bin/TerminAttr -ingestgrpcurl=192.168.0.5:9910 -taillogs -ingestauth=key,atd-lab -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent + exec /usr/bin/TerminAttr -cvcompression=gzip -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent -cvaddr=192.168.0.5:9910 -cvauth=token,/tmp/token -cvvrf=default -taillogs -disableaaa no shutdown ! alias mlag-reload bash /mnt/flash/shut_intfs && sudo shutdown now -r diff --git a/topologies/training-level3/configlets/ATD-INFRA b/topologies/training-level3/configlets/ATD-INFRA index fc0192036..6a88951d1 100644 --- a/topologies/training-level3/configlets/ATD-INFRA +++ b/topologies/training-level3/configlets/ATD-INFRA @@ -1,5 +1,5 @@ daemon TerminAttr - exec /usr/bin/TerminAttr -ingestgrpcurl=192.168.0.5:9910 -taillogs -ingestauth=key,atd-lab -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent + exec /usr/bin/TerminAttr -cvcompression=gzip -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent -cvaddr=192.168.0.5:9910 -cvauth=token,/tmp/token -cvvrf=default -taillogs -disableaaa no shutdown ! alias mlag-reload bash /mnt/flash/shut_intfs && sudo shutdown now -r diff --git a/topologies/training-level3/configlets/BorderLeaf-1-AAMH-Begin b/topologies/training-level3/configlets/BorderLeaf-1-AAMH-Begin new file mode 100644 index 000000000..059ae8ee1 --- /dev/null +++ b/topologies/training-level3/configlets/BorderLeaf-1-AAMH-Begin @@ -0,0 +1,345 @@ +! +interface Ethernet1 + no switchport + ip address 172.17.2.1/30 +! +interface Ethernet2 + no switchport + ip address 172.17.2.5/30 +! +interface Ethernet3 + no switchport + ip address 172.16.1.1/30 +! +interface Ethernet4 + no switchport + ip address 172.16.1.5/30 +! +interface Ethernet5 + no switchport + ip address 172.16.1.9/30 +! +interface Loopback0 + ip address 10.31.31.31/32 +! +interface Loopback100 + ip address 172.10.1.100/32 +! +interface Loopback101 + ip address 172.10.1.101/32 +! +interface Loopback102 + ip address 172.10.1.102/32 +! +interface Loopback103 + ip address 172.10.1.103/32 +! +interface Loopback104 + ip address 172.10.1.104/32 +! +interface Loopback105 + ip address 172.10.1.105/32 +! +interface Loopback106 + ip address 172.10.1.106/32 +! +interface Loopback107 + ip address 172.10.1.107/32 +! +interface Loopback108 + ip address 172.10.1.108/32 +! +interface Loopback109 + ip address 172.10.1.109/32 +! +interface Loopback110 + ip address 172.10.1.110/32 +! +interface Loopback111 + ip address 172.10.1.111/32 +! +interface Loopback112 + ip address 172.10.1.112/32 +! +interface Loopback113 + ip address 172.10.1.113/32 +! +interface Loopback114 + ip address 172.10.1.114/32 +! +interface Loopback115 + ip address 172.10.1.115/32 +! +interface Loopback116 + ip address 172.10.1.116/32 +! +interface Loopback117 + ip address 172.10.1.117/32 +! +interface Loopback118 + ip address 172.10.1.118/32 +! +interface Loopback119 + ip address 172.10.1.119/32 +! +interface Loopback120 + ip address 172.10.1.120/32 +! +interface Loopback121 + ip address 172.10.1.121/32 +! +interface Loopback122 + ip address 172.10.1.122/32 +! +interface Loopback123 + ip address 172.10.1.123/32 +! +interface Loopback124 + ip address 172.10.1.124/32 +! +interface Loopback125 + ip address 172.10.1.125/32 +! +interface Loopback126 + ip address 172.10.1.126/32 +! +interface Loopback127 + ip address 172.10.1.127/32 +! +interface Loopback128 + ip address 172.10.1.128/32 +! +interface Loopback129 + ip address 172.10.1.129/32 +! +interface Loopback130 + ip address 172.10.1.130/32 +! +interface Loopback131 + ip address 172.10.1.131/32 +! +interface Loopback132 + ip address 172.10.1.132/32 +! +interface Loopback133 + ip address 172.10.1.133/32 +! +interface Loopback134 + ip address 172.10.1.134/32 +! +interface Loopback135 + ip address 172.10.1.135/32 +! +interface Loopback136 + ip address 172.10.1.136/32 +! +interface Loopback137 + ip address 172.10.1.137/32 +! +interface Loopback138 + ip address 172.10.1.138/32 +! +interface Loopback139 + ip address 172.10.1.139/32 +! +interface Loopback140 + ip address 172.10.1.140/32 +! +interface Loopback141 + ip address 172.10.1.141/32 +! +interface Loopback142 + ip address 172.10.1.142/32 +! +interface Loopback143 + ip address 172.10.1.143/32 +! +interface Loopback144 + ip address 172.10.1.144/32 +! +interface Loopback145 + ip address 172.10.1.145/32 +! +interface Loopback146 + ip address 172.10.1.146/32 +! +interface Loopback147 + ip address 172.10.1.147/32 +! +interface Loopback148 + ip address 172.10.1.148/32 +! +interface Loopback149 + ip address 172.10.1.149/32 +! +interface Loopback150 + ip address 172.10.1.150/32 +! +interface Loopback151 + ip address 172.10.1.151/32 +! +interface Loopback152 + ip address 172.10.1.152/32 +! +interface Loopback153 + ip address 172.10.1.153/32 +! +interface Loopback154 + ip address 172.10.1.154/32 +! +interface Loopback155 + ip address 172.10.1.155/32 +! +interface Loopback156 + ip address 172.10.1.156/32 +! +interface Loopback157 + ip address 172.10.1.157/32 +! +interface Loopback158 + ip address 172.10.1.158/32 +! +interface Loopback159 + ip address 172.10.1.159/32 +! +interface Loopback160 + ip address 172.10.1.160/32 +! +interface Loopback161 + ip address 172.10.1.161/32 +! +interface Loopback162 + ip address 172.10.1.162/32 +! +interface Loopback163 + ip address 172.10.1.163/32 +! +interface Loopback164 + ip address 172.10.1.164/32 +! +interface Loopback165 + ip address 172.10.1.165/32 +! +interface Loopback166 + ip address 172.10.1.166/32 +! +interface Loopback167 + ip address 172.10.1.167/32 +! +interface Loopback168 + ip address 172.10.1.168/32 +! +interface Loopback169 + ip address 172.10.1.169/32 +! +interface Loopback170 + ip address 172.10.1.170/32 +! +interface Loopback171 + ip address 172.10.1.171/32 +! +interface Loopback172 + ip address 172.10.1.172/32 +! +interface Loopback173 + ip address 172.10.1.173/32 +! +interface Loopback174 + ip address 172.10.1.174/32 +! +interface Loopback175 + ip address 172.10.1.175/32 +! +interface Loopback176 + ip address 172.10.1.176/32 +! +interface Loopback177 + ip address 172.10.1.177/32 +! +interface Loopback178 + ip address 172.10.1.178/32 +! +interface Loopback179 + ip address 172.10.1.179/32 +! +interface Loopback180 + ip address 172.10.1.180/32 +! +interface Loopback181 + ip address 172.10.1.181/32 +! +interface Loopback182 + ip address 172.10.1.182/32 +! +interface Loopback183 + ip address 172.10.1.183/32 +! +interface Loopback184 + ip address 172.10.1.184/32 +! +interface Loopback185 + ip address 172.10.1.185/32 +! +interface Loopback186 + ip address 172.10.1.186/32 +! +interface Loopback187 + ip address 172.10.1.187/32 +! +interface Loopback188 + ip address 172.10.1.188/32 +! +interface Loopback189 + ip address 172.10.1.189/32 +! +interface Loopback190 + ip address 172.10.1.190/32 +! +interface Loopback191 + ip address 172.10.1.191/32 +! +interface Loopback192 + ip address 172.10.1.192/32 +! +interface Loopback193 + ip address 172.10.1.193/32 +! +interface Loopback194 + ip address 172.10.1.194/32 +! +interface Loopback195 + ip address 172.10.1.195/32 +! +interface Loopback196 + ip address 172.10.1.196/32 +! +interface Loopback197 + ip address 172.10.1.197/32 +! +interface Loopback198 + ip address 172.10.1.198/32 +! +interface Loopback199 + ip address 172.10.1.199/32 +! +ip prefix-list local-LOOP + seq 10 permit 172.10.1.0/24 ge 32 + seq 20 permit 10.31.31.31/32 ge 32 +! +route-map prepend permit 10 + set as-path prepend 10 10 10 +! +route-map redist-LOOP permit 10 + match ip address prefix-list local-LOOP +! +router bgp 65500 + router-id 10.31.31.31 + maximum-paths 4 ecmp 4 + neighbor spines peer group + neighbor spines remote-as 65100 + neighbor 172.16.1.2 peer group spines + neighbor 172.16.1.6 peer group spines + neighbor 172.16.1.10 peer group spines + aggregate-address 172.10.1.0/24 summary-only attribute-map prepend + redistribute connected route-map redist-LOOP +! diff --git a/topologies/training-level3/configlets/BorderLeaf-1-IP-Address b/topologies/training-level3/configlets/BorderLeaf-1-IP-Address new file mode 100644 index 000000000..dc355d922 --- /dev/null +++ b/topologies/training-level3/configlets/BorderLeaf-1-IP-Address @@ -0,0 +1,324 @@ +! +interface Ethernet1 + no switchport + ip address 172.17.2.1/30 +! +interface Ethernet2 + no switchport + ip address 172.17.2.5/30 +! +interface Ethernet3 + no switchport + ip address 172.16.1.1/30 +! +interface Ethernet4 + no switchport + ip address 172.16.1.5/30 +! +interface Ethernet5 + no switchport + ip address 172.16.1.9/30 +! +interface Loopback0 + ip address 10.31.31.31/32 +! +interface Loopback100 + ip address 172.10.1.100/32 +! +interface Loopback101 + ip address 172.10.1.101/32 +! +interface Loopback102 + ip address 172.10.1.102/32 +! +interface Loopback103 + ip address 172.10.1.103/32 +! +interface Loopback104 + ip address 172.10.1.104/32 +! +interface Loopback105 + ip address 172.10.1.105/32 +! +interface Loopback106 + ip address 172.10.1.106/32 +! +interface Loopback107 + ip address 172.10.1.107/32 +! +interface Loopback108 + ip address 172.10.1.108/32 +! +interface Loopback109 + ip address 172.10.1.109/32 +! +interface Loopback110 + ip address 172.10.1.110/32 +! +interface Loopback111 + ip address 172.10.1.111/32 +! +interface Loopback112 + ip address 172.10.1.112/32 +! +interface Loopback113 + ip address 172.10.1.113/32 +! +interface Loopback114 + ip address 172.10.1.114/32 +! +interface Loopback115 + ip address 172.10.1.115/32 +! +interface Loopback116 + ip address 172.10.1.116/32 +! +interface Loopback117 + ip address 172.10.1.117/32 +! +interface Loopback118 + ip address 172.10.1.118/32 +! +interface Loopback119 + ip address 172.10.1.119/32 +! +interface Loopback120 + ip address 172.10.1.120/32 +! +interface Loopback121 + ip address 172.10.1.121/32 +! +interface Loopback122 + ip address 172.10.1.122/32 +! +interface Loopback123 + ip address 172.10.1.123/32 +! +interface Loopback124 + ip address 172.10.1.124/32 +! +interface Loopback125 + ip address 172.10.1.125/32 +! +interface Loopback126 + ip address 172.10.1.126/32 +! +interface Loopback127 + ip address 172.10.1.127/32 +! +interface Loopback128 + ip address 172.10.1.128/32 +! +interface Loopback129 + ip address 172.10.1.129/32 +! +interface Loopback130 + ip address 172.10.1.130/32 +! +interface Loopback131 + ip address 172.10.1.131/32 +! +interface Loopback132 + ip address 172.10.1.132/32 +! +interface Loopback133 + ip address 172.10.1.133/32 +! +interface Loopback134 + ip address 172.10.1.134/32 +! +interface Loopback135 + ip address 172.10.1.135/32 +! +interface Loopback136 + ip address 172.10.1.136/32 +! +interface Loopback137 + ip address 172.10.1.137/32 +! +interface Loopback138 + ip address 172.10.1.138/32 +! +interface Loopback139 + ip address 172.10.1.139/32 +! +interface Loopback140 + ip address 172.10.1.140/32 +! +interface Loopback141 + ip address 172.10.1.141/32 +! +interface Loopback142 + ip address 172.10.1.142/32 +! +interface Loopback143 + ip address 172.10.1.143/32 +! +interface Loopback144 + ip address 172.10.1.144/32 +! +interface Loopback145 + ip address 172.10.1.145/32 +! +interface Loopback146 + ip address 172.10.1.146/32 +! +interface Loopback147 + ip address 172.10.1.147/32 +! +interface Loopback148 + ip address 172.10.1.148/32 +! +interface Loopback149 + ip address 172.10.1.149/32 +! +interface Loopback150 + ip address 172.10.1.150/32 +! +interface Loopback151 + ip address 172.10.1.151/32 +! +interface Loopback152 + ip address 172.10.1.152/32 +! +interface Loopback153 + ip address 172.10.1.153/32 +! +interface Loopback154 + ip address 172.10.1.154/32 +! +interface Loopback155 + ip address 172.10.1.155/32 +! +interface Loopback156 + ip address 172.10.1.156/32 +! +interface Loopback157 + ip address 172.10.1.157/32 +! +interface Loopback158 + ip address 172.10.1.158/32 +! +interface Loopback159 + ip address 172.10.1.159/32 +! +interface Loopback160 + ip address 172.10.1.160/32 +! +interface Loopback161 + ip address 172.10.1.161/32 +! +interface Loopback162 + ip address 172.10.1.162/32 +! +interface Loopback163 + ip address 172.10.1.163/32 +! +interface Loopback164 + ip address 172.10.1.164/32 +! +interface Loopback165 + ip address 172.10.1.165/32 +! +interface Loopback166 + ip address 172.10.1.166/32 +! +interface Loopback167 + ip address 172.10.1.167/32 +! +interface Loopback168 + ip address 172.10.1.168/32 +! +interface Loopback169 + ip address 172.10.1.169/32 +! +interface Loopback170 + ip address 172.10.1.170/32 +! +interface Loopback171 + ip address 172.10.1.171/32 +! +interface Loopback172 + ip address 172.10.1.172/32 +! +interface Loopback173 + ip address 172.10.1.173/32 +! +interface Loopback174 + ip address 172.10.1.174/32 +! +interface Loopback175 + ip address 172.10.1.175/32 +! +interface Loopback176 + ip address 172.10.1.176/32 +! +interface Loopback177 + ip address 172.10.1.177/32 +! +interface Loopback178 + ip address 172.10.1.178/32 +! +interface Loopback179 + ip address 172.10.1.179/32 +! +interface Loopback180 + ip address 172.10.1.180/32 +! +interface Loopback181 + ip address 172.10.1.181/32 +! +interface Loopback182 + ip address 172.10.1.182/32 +! +interface Loopback183 + ip address 172.10.1.183/32 +! +interface Loopback184 + ip address 172.10.1.184/32 +! +interface Loopback185 + ip address 172.10.1.185/32 +! +interface Loopback186 + ip address 172.10.1.186/32 +! +interface Loopback187 + ip address 172.10.1.187/32 +! +interface Loopback188 + ip address 172.10.1.188/32 +! +interface Loopback189 + ip address 172.10.1.189/32 +! +interface Loopback190 + ip address 172.10.1.190/32 +! +interface Loopback191 + ip address 172.10.1.191/32 +! +interface Loopback192 + ip address 172.10.1.192/32 +! +interface Loopback193 + ip address 172.10.1.193/32 +! +interface Loopback194 + ip address 172.10.1.194/32 +! +interface Loopback195 + ip address 172.10.1.195/32 +! +interface Loopback196 + ip address 172.10.1.196/32 +! +interface Loopback197 + ip address 172.10.1.197/32 +! +interface Loopback198 + ip address 172.10.1.198/32 +! +interface Loopback199 + ip address 172.10.1.199/32 +! diff --git a/topologies/training-level3/configlets/BorderLeaf-1-L2EVPN-Begin b/topologies/training-level3/configlets/BorderLeaf-1-L2EVPN-Begin new file mode 100644 index 000000000..df4777823 --- /dev/null +++ b/topologies/training-level3/configlets/BorderLeaf-1-L2EVPN-Begin @@ -0,0 +1,345 @@ +! +interface Ethernet1 + no switchport + ip address 172.17.2.1/30 +! +interface Ethernet2 + no switchport + ip address 172.17.2.5/30 +! +interface Ethernet3 + no switchport + ip address 172.16.1.1/30 +! +interface Ethernet4 + no switchport + ip address 172.16.1.5/30 +! +interface Ethernet5 + no switchport + ip address 172.16.1.9/30 +! +interface Loopback0 + ip address 10.31.31.31/32 +! +interface Loopback100 + ip address 172.10.1.100/32 +! +interface Loopback101 + ip address 172.10.1.101/32 +! +interface Loopback102 + ip address 172.10.1.102/32 +! +interface Loopback103 + ip address 172.10.1.103/32 +! +interface Loopback104 + ip address 172.10.1.104/32 +! +interface Loopback105 + ip address 172.10.1.105/32 +! +interface Loopback106 + ip address 172.10.1.106/32 +! +interface Loopback107 + ip address 172.10.1.107/32 +! +interface Loopback108 + ip address 172.10.1.108/32 +! +interface Loopback109 + ip address 172.10.1.109/32 +! +interface Loopback110 + ip address 172.10.1.110/32 +! +interface Loopback111 + ip address 172.10.1.111/32 +! +interface Loopback112 + ip address 172.10.1.112/32 +! +interface Loopback113 + ip address 172.10.1.113/32 +! +interface Loopback114 + ip address 172.10.1.114/32 +! +interface Loopback115 + ip address 172.10.1.115/32 +! +interface Loopback116 + ip address 172.10.1.116/32 +! +interface Loopback117 + ip address 172.10.1.117/32 +! +interface Loopback118 + ip address 172.10.1.118/32 +! +interface Loopback119 + ip address 172.10.1.119/32 +! +interface Loopback120 + ip address 172.10.1.120/32 +! +interface Loopback121 + ip address 172.10.1.121/32 +! +interface Loopback122 + ip address 172.10.1.122/32 +! +interface Loopback123 + ip address 172.10.1.123/32 +! +interface Loopback124 + ip address 172.10.1.124/32 +! +interface Loopback125 + ip address 172.10.1.125/32 +! +interface Loopback126 + ip address 172.10.1.126/32 +! +interface Loopback127 + ip address 172.10.1.127/32 +! +interface Loopback128 + ip address 172.10.1.128/32 +! +interface Loopback129 + ip address 172.10.1.129/32 +! +interface Loopback130 + ip address 172.10.1.130/32 +! +interface Loopback131 + ip address 172.10.1.131/32 +! +interface Loopback132 + ip address 172.10.1.132/32 +! +interface Loopback133 + ip address 172.10.1.133/32 +! +interface Loopback134 + ip address 172.10.1.134/32 +! +interface Loopback135 + ip address 172.10.1.135/32 +! +interface Loopback136 + ip address 172.10.1.136/32 +! +interface Loopback137 + ip address 172.10.1.137/32 +! +interface Loopback138 + ip address 172.10.1.138/32 +! +interface Loopback139 + ip address 172.10.1.139/32 +! +interface Loopback140 + ip address 172.10.1.140/32 +! +interface Loopback141 + ip address 172.10.1.141/32 +! +interface Loopback142 + ip address 172.10.1.142/32 +! +interface Loopback143 + ip address 172.10.1.143/32 +! +interface Loopback144 + ip address 172.10.1.144/32 +! +interface Loopback145 + ip address 172.10.1.145/32 +! +interface Loopback146 + ip address 172.10.1.146/32 +! +interface Loopback147 + ip address 172.10.1.147/32 +! +interface Loopback148 + ip address 172.10.1.148/32 +! +interface Loopback149 + ip address 172.10.1.149/32 +! +interface Loopback150 + ip address 172.10.1.150/32 +! +interface Loopback151 + ip address 172.10.1.151/32 +! +interface Loopback152 + ip address 172.10.1.152/32 +! +interface Loopback153 + ip address 172.10.1.153/32 +! +interface Loopback154 + ip address 172.10.1.154/32 +! +interface Loopback155 + ip address 172.10.1.155/32 +! +interface Loopback156 + ip address 172.10.1.156/32 +! +interface Loopback157 + ip address 172.10.1.157/32 +! +interface Loopback158 + ip address 172.10.1.158/32 +! +interface Loopback159 + ip address 172.10.1.159/32 +! +interface Loopback160 + ip address 172.10.1.160/32 +! +interface Loopback161 + ip address 172.10.1.161/32 +! +interface Loopback162 + ip address 172.10.1.162/32 +! +interface Loopback163 + ip address 172.10.1.163/32 +! +interface Loopback164 + ip address 172.10.1.164/32 +! +interface Loopback165 + ip address 172.10.1.165/32 +! +interface Loopback166 + ip address 172.10.1.166/32 +! +interface Loopback167 + ip address 172.10.1.167/32 +! +interface Loopback168 + ip address 172.10.1.168/32 +! +interface Loopback169 + ip address 172.10.1.169/32 +! +interface Loopback170 + ip address 172.10.1.170/32 +! +interface Loopback171 + ip address 172.10.1.171/32 +! +interface Loopback172 + ip address 172.10.1.172/32 +! +interface Loopback173 + ip address 172.10.1.173/32 +! +interface Loopback174 + ip address 172.10.1.174/32 +! +interface Loopback175 + ip address 172.10.1.175/32 +! +interface Loopback176 + ip address 172.10.1.176/32 +! +interface Loopback177 + ip address 172.10.1.177/32 +! +interface Loopback178 + ip address 172.10.1.178/32 +! +interface Loopback179 + ip address 172.10.1.179/32 +! +interface Loopback180 + ip address 172.10.1.180/32 +! +interface Loopback181 + ip address 172.10.1.181/32 +! +interface Loopback182 + ip address 172.10.1.182/32 +! +interface Loopback183 + ip address 172.10.1.183/32 +! +interface Loopback184 + ip address 172.10.1.184/32 +! +interface Loopback185 + ip address 172.10.1.185/32 +! +interface Loopback186 + ip address 172.10.1.186/32 +! +interface Loopback187 + ip address 172.10.1.187/32 +! +interface Loopback188 + ip address 172.10.1.188/32 +! +interface Loopback189 + ip address 172.10.1.189/32 +! +interface Loopback190 + ip address 172.10.1.190/32 +! +interface Loopback191 + ip address 172.10.1.191/32 +! +interface Loopback192 + ip address 172.10.1.192/32 +! +interface Loopback193 + ip address 172.10.1.193/32 +! +interface Loopback194 + ip address 172.10.1.194/32 +! +interface Loopback195 + ip address 172.10.1.195/32 +! +interface Loopback196 + ip address 172.10.1.196/32 +! +interface Loopback197 + ip address 172.10.1.197/32 +! +interface Loopback198 + ip address 172.10.1.198/32 +! +interface Loopback199 + ip address 172.10.1.199/32 +! +ip prefix-list local-LOOP + seq 10 permit 172.10.1.0/24 ge 32 + seq 20 permit 10.31.31.31/32 ge 32 +! +route-map prepend permit 10 + set as-path prepend 10 10 10 +! +route-map redist-LOOP permit 10 + match ip address prefix-list local-LOOP +! +router bgp 65500 + router-id 10.31.31.31 + maximum-paths 4 ecmp 4 + neighbor spines peer group + neighbor spines remote-as 65100 + neighbor 172.16.1.2 peer group spines + neighbor 172.16.1.6 peer group spines + neighbor 172.16.1.10 peer group spines + aggregate-address 172.10.1.0/24 summary-only attribute-map prepend + redistribute connected route-map redist-LOOP +! \ No newline at end of file diff --git a/topologies/training-level3/configlets/BorderLeaf-1-L3EVPN-Begin b/topologies/training-level3/configlets/BorderLeaf-1-L3EVPN-Begin new file mode 100644 index 000000000..df4777823 --- /dev/null +++ b/topologies/training-level3/configlets/BorderLeaf-1-L3EVPN-Begin @@ -0,0 +1,345 @@ +! +interface Ethernet1 + no switchport + ip address 172.17.2.1/30 +! +interface Ethernet2 + no switchport + ip address 172.17.2.5/30 +! +interface Ethernet3 + no switchport + ip address 172.16.1.1/30 +! +interface Ethernet4 + no switchport + ip address 172.16.1.5/30 +! +interface Ethernet5 + no switchport + ip address 172.16.1.9/30 +! +interface Loopback0 + ip address 10.31.31.31/32 +! +interface Loopback100 + ip address 172.10.1.100/32 +! +interface Loopback101 + ip address 172.10.1.101/32 +! +interface Loopback102 + ip address 172.10.1.102/32 +! +interface Loopback103 + ip address 172.10.1.103/32 +! +interface Loopback104 + ip address 172.10.1.104/32 +! +interface Loopback105 + ip address 172.10.1.105/32 +! +interface Loopback106 + ip address 172.10.1.106/32 +! +interface Loopback107 + ip address 172.10.1.107/32 +! +interface Loopback108 + ip address 172.10.1.108/32 +! +interface Loopback109 + ip address 172.10.1.109/32 +! +interface Loopback110 + ip address 172.10.1.110/32 +! +interface Loopback111 + ip address 172.10.1.111/32 +! +interface Loopback112 + ip address 172.10.1.112/32 +! +interface Loopback113 + ip address 172.10.1.113/32 +! +interface Loopback114 + ip address 172.10.1.114/32 +! +interface Loopback115 + ip address 172.10.1.115/32 +! +interface Loopback116 + ip address 172.10.1.116/32 +! +interface Loopback117 + ip address 172.10.1.117/32 +! +interface Loopback118 + ip address 172.10.1.118/32 +! +interface Loopback119 + ip address 172.10.1.119/32 +! +interface Loopback120 + ip address 172.10.1.120/32 +! +interface Loopback121 + ip address 172.10.1.121/32 +! +interface Loopback122 + ip address 172.10.1.122/32 +! +interface Loopback123 + ip address 172.10.1.123/32 +! +interface Loopback124 + ip address 172.10.1.124/32 +! +interface Loopback125 + ip address 172.10.1.125/32 +! +interface Loopback126 + ip address 172.10.1.126/32 +! +interface Loopback127 + ip address 172.10.1.127/32 +! +interface Loopback128 + ip address 172.10.1.128/32 +! +interface Loopback129 + ip address 172.10.1.129/32 +! +interface Loopback130 + ip address 172.10.1.130/32 +! +interface Loopback131 + ip address 172.10.1.131/32 +! +interface Loopback132 + ip address 172.10.1.132/32 +! +interface Loopback133 + ip address 172.10.1.133/32 +! +interface Loopback134 + ip address 172.10.1.134/32 +! +interface Loopback135 + ip address 172.10.1.135/32 +! +interface Loopback136 + ip address 172.10.1.136/32 +! +interface Loopback137 + ip address 172.10.1.137/32 +! +interface Loopback138 + ip address 172.10.1.138/32 +! +interface Loopback139 + ip address 172.10.1.139/32 +! +interface Loopback140 + ip address 172.10.1.140/32 +! +interface Loopback141 + ip address 172.10.1.141/32 +! +interface Loopback142 + ip address 172.10.1.142/32 +! +interface Loopback143 + ip address 172.10.1.143/32 +! +interface Loopback144 + ip address 172.10.1.144/32 +! +interface Loopback145 + ip address 172.10.1.145/32 +! +interface Loopback146 + ip address 172.10.1.146/32 +! +interface Loopback147 + ip address 172.10.1.147/32 +! +interface Loopback148 + ip address 172.10.1.148/32 +! +interface Loopback149 + ip address 172.10.1.149/32 +! +interface Loopback150 + ip address 172.10.1.150/32 +! +interface Loopback151 + ip address 172.10.1.151/32 +! +interface Loopback152 + ip address 172.10.1.152/32 +! +interface Loopback153 + ip address 172.10.1.153/32 +! +interface Loopback154 + ip address 172.10.1.154/32 +! +interface Loopback155 + ip address 172.10.1.155/32 +! +interface Loopback156 + ip address 172.10.1.156/32 +! +interface Loopback157 + ip address 172.10.1.157/32 +! +interface Loopback158 + ip address 172.10.1.158/32 +! +interface Loopback159 + ip address 172.10.1.159/32 +! +interface Loopback160 + ip address 172.10.1.160/32 +! +interface Loopback161 + ip address 172.10.1.161/32 +! +interface Loopback162 + ip address 172.10.1.162/32 +! +interface Loopback163 + ip address 172.10.1.163/32 +! +interface Loopback164 + ip address 172.10.1.164/32 +! +interface Loopback165 + ip address 172.10.1.165/32 +! +interface Loopback166 + ip address 172.10.1.166/32 +! +interface Loopback167 + ip address 172.10.1.167/32 +! +interface Loopback168 + ip address 172.10.1.168/32 +! +interface Loopback169 + ip address 172.10.1.169/32 +! +interface Loopback170 + ip address 172.10.1.170/32 +! +interface Loopback171 + ip address 172.10.1.171/32 +! +interface Loopback172 + ip address 172.10.1.172/32 +! +interface Loopback173 + ip address 172.10.1.173/32 +! +interface Loopback174 + ip address 172.10.1.174/32 +! +interface Loopback175 + ip address 172.10.1.175/32 +! +interface Loopback176 + ip address 172.10.1.176/32 +! +interface Loopback177 + ip address 172.10.1.177/32 +! +interface Loopback178 + ip address 172.10.1.178/32 +! +interface Loopback179 + ip address 172.10.1.179/32 +! +interface Loopback180 + ip address 172.10.1.180/32 +! +interface Loopback181 + ip address 172.10.1.181/32 +! +interface Loopback182 + ip address 172.10.1.182/32 +! +interface Loopback183 + ip address 172.10.1.183/32 +! +interface Loopback184 + ip address 172.10.1.184/32 +! +interface Loopback185 + ip address 172.10.1.185/32 +! +interface Loopback186 + ip address 172.10.1.186/32 +! +interface Loopback187 + ip address 172.10.1.187/32 +! +interface Loopback188 + ip address 172.10.1.188/32 +! +interface Loopback189 + ip address 172.10.1.189/32 +! +interface Loopback190 + ip address 172.10.1.190/32 +! +interface Loopback191 + ip address 172.10.1.191/32 +! +interface Loopback192 + ip address 172.10.1.192/32 +! +interface Loopback193 + ip address 172.10.1.193/32 +! +interface Loopback194 + ip address 172.10.1.194/32 +! +interface Loopback195 + ip address 172.10.1.195/32 +! +interface Loopback196 + ip address 172.10.1.196/32 +! +interface Loopback197 + ip address 172.10.1.197/32 +! +interface Loopback198 + ip address 172.10.1.198/32 +! +interface Loopback199 + ip address 172.10.1.199/32 +! +ip prefix-list local-LOOP + seq 10 permit 172.10.1.0/24 ge 32 + seq 20 permit 10.31.31.31/32 ge 32 +! +route-map prepend permit 10 + set as-path prepend 10 10 10 +! +route-map redist-LOOP permit 10 + match ip address prefix-list local-LOOP +! +router bgp 65500 + router-id 10.31.31.31 + maximum-paths 4 ecmp 4 + neighbor spines peer group + neighbor spines remote-as 65100 + neighbor 172.16.1.2 peer group spines + neighbor 172.16.1.6 peer group spines + neighbor 172.16.1.10 peer group spines + aggregate-address 172.10.1.0/24 summary-only attribute-map prepend + redistribute connected route-map redist-LOOP +! \ No newline at end of file diff --git a/topologies/training-level3/configlets/BorderLeaf-1-PIM-Begin b/topologies/training-level3/configlets/BorderLeaf-1-PIM-Begin new file mode 100644 index 000000000..df4777823 --- /dev/null +++ b/topologies/training-level3/configlets/BorderLeaf-1-PIM-Begin @@ -0,0 +1,345 @@ +! +interface Ethernet1 + no switchport + ip address 172.17.2.1/30 +! +interface Ethernet2 + no switchport + ip address 172.17.2.5/30 +! +interface Ethernet3 + no switchport + ip address 172.16.1.1/30 +! +interface Ethernet4 + no switchport + ip address 172.16.1.5/30 +! +interface Ethernet5 + no switchport + ip address 172.16.1.9/30 +! +interface Loopback0 + ip address 10.31.31.31/32 +! +interface Loopback100 + ip address 172.10.1.100/32 +! +interface Loopback101 + ip address 172.10.1.101/32 +! +interface Loopback102 + ip address 172.10.1.102/32 +! +interface Loopback103 + ip address 172.10.1.103/32 +! +interface Loopback104 + ip address 172.10.1.104/32 +! +interface Loopback105 + ip address 172.10.1.105/32 +! +interface Loopback106 + ip address 172.10.1.106/32 +! +interface Loopback107 + ip address 172.10.1.107/32 +! +interface Loopback108 + ip address 172.10.1.108/32 +! +interface Loopback109 + ip address 172.10.1.109/32 +! +interface Loopback110 + ip address 172.10.1.110/32 +! +interface Loopback111 + ip address 172.10.1.111/32 +! +interface Loopback112 + ip address 172.10.1.112/32 +! +interface Loopback113 + ip address 172.10.1.113/32 +! +interface Loopback114 + ip address 172.10.1.114/32 +! +interface Loopback115 + ip address 172.10.1.115/32 +! +interface Loopback116 + ip address 172.10.1.116/32 +! +interface Loopback117 + ip address 172.10.1.117/32 +! +interface Loopback118 + ip address 172.10.1.118/32 +! +interface Loopback119 + ip address 172.10.1.119/32 +! +interface Loopback120 + ip address 172.10.1.120/32 +! +interface Loopback121 + ip address 172.10.1.121/32 +! +interface Loopback122 + ip address 172.10.1.122/32 +! +interface Loopback123 + ip address 172.10.1.123/32 +! +interface Loopback124 + ip address 172.10.1.124/32 +! +interface Loopback125 + ip address 172.10.1.125/32 +! +interface Loopback126 + ip address 172.10.1.126/32 +! +interface Loopback127 + ip address 172.10.1.127/32 +! +interface Loopback128 + ip address 172.10.1.128/32 +! +interface Loopback129 + ip address 172.10.1.129/32 +! +interface Loopback130 + ip address 172.10.1.130/32 +! +interface Loopback131 + ip address 172.10.1.131/32 +! +interface Loopback132 + ip address 172.10.1.132/32 +! +interface Loopback133 + ip address 172.10.1.133/32 +! +interface Loopback134 + ip address 172.10.1.134/32 +! +interface Loopback135 + ip address 172.10.1.135/32 +! +interface Loopback136 + ip address 172.10.1.136/32 +! +interface Loopback137 + ip address 172.10.1.137/32 +! +interface Loopback138 + ip address 172.10.1.138/32 +! +interface Loopback139 + ip address 172.10.1.139/32 +! +interface Loopback140 + ip address 172.10.1.140/32 +! +interface Loopback141 + ip address 172.10.1.141/32 +! +interface Loopback142 + ip address 172.10.1.142/32 +! +interface Loopback143 + ip address 172.10.1.143/32 +! +interface Loopback144 + ip address 172.10.1.144/32 +! +interface Loopback145 + ip address 172.10.1.145/32 +! +interface Loopback146 + ip address 172.10.1.146/32 +! +interface Loopback147 + ip address 172.10.1.147/32 +! +interface Loopback148 + ip address 172.10.1.148/32 +! +interface Loopback149 + ip address 172.10.1.149/32 +! +interface Loopback150 + ip address 172.10.1.150/32 +! +interface Loopback151 + ip address 172.10.1.151/32 +! +interface Loopback152 + ip address 172.10.1.152/32 +! +interface Loopback153 + ip address 172.10.1.153/32 +! +interface Loopback154 + ip address 172.10.1.154/32 +! +interface Loopback155 + ip address 172.10.1.155/32 +! +interface Loopback156 + ip address 172.10.1.156/32 +! +interface Loopback157 + ip address 172.10.1.157/32 +! +interface Loopback158 + ip address 172.10.1.158/32 +! +interface Loopback159 + ip address 172.10.1.159/32 +! +interface Loopback160 + ip address 172.10.1.160/32 +! +interface Loopback161 + ip address 172.10.1.161/32 +! +interface Loopback162 + ip address 172.10.1.162/32 +! +interface Loopback163 + ip address 172.10.1.163/32 +! +interface Loopback164 + ip address 172.10.1.164/32 +! +interface Loopback165 + ip address 172.10.1.165/32 +! +interface Loopback166 + ip address 172.10.1.166/32 +! +interface Loopback167 + ip address 172.10.1.167/32 +! +interface Loopback168 + ip address 172.10.1.168/32 +! +interface Loopback169 + ip address 172.10.1.169/32 +! +interface Loopback170 + ip address 172.10.1.170/32 +! +interface Loopback171 + ip address 172.10.1.171/32 +! +interface Loopback172 + ip address 172.10.1.172/32 +! +interface Loopback173 + ip address 172.10.1.173/32 +! +interface Loopback174 + ip address 172.10.1.174/32 +! +interface Loopback175 + ip address 172.10.1.175/32 +! +interface Loopback176 + ip address 172.10.1.176/32 +! +interface Loopback177 + ip address 172.10.1.177/32 +! +interface Loopback178 + ip address 172.10.1.178/32 +! +interface Loopback179 + ip address 172.10.1.179/32 +! +interface Loopback180 + ip address 172.10.1.180/32 +! +interface Loopback181 + ip address 172.10.1.181/32 +! +interface Loopback182 + ip address 172.10.1.182/32 +! +interface Loopback183 + ip address 172.10.1.183/32 +! +interface Loopback184 + ip address 172.10.1.184/32 +! +interface Loopback185 + ip address 172.10.1.185/32 +! +interface Loopback186 + ip address 172.10.1.186/32 +! +interface Loopback187 + ip address 172.10.1.187/32 +! +interface Loopback188 + ip address 172.10.1.188/32 +! +interface Loopback189 + ip address 172.10.1.189/32 +! +interface Loopback190 + ip address 172.10.1.190/32 +! +interface Loopback191 + ip address 172.10.1.191/32 +! +interface Loopback192 + ip address 172.10.1.192/32 +! +interface Loopback193 + ip address 172.10.1.193/32 +! +interface Loopback194 + ip address 172.10.1.194/32 +! +interface Loopback195 + ip address 172.10.1.195/32 +! +interface Loopback196 + ip address 172.10.1.196/32 +! +interface Loopback197 + ip address 172.10.1.197/32 +! +interface Loopback198 + ip address 172.10.1.198/32 +! +interface Loopback199 + ip address 172.10.1.199/32 +! +ip prefix-list local-LOOP + seq 10 permit 172.10.1.0/24 ge 32 + seq 20 permit 10.31.31.31/32 ge 32 +! +route-map prepend permit 10 + set as-path prepend 10 10 10 +! +route-map redist-LOOP permit 10 + match ip address prefix-list local-LOOP +! +router bgp 65500 + router-id 10.31.31.31 + maximum-paths 4 ecmp 4 + neighbor spines peer group + neighbor spines remote-as 65100 + neighbor 172.16.1.2 peer group spines + neighbor 172.16.1.6 peer group spines + neighbor 172.16.1.10 peer group spines + aggregate-address 172.10.1.0/24 summary-only attribute-map prepend + redistribute connected route-map redist-LOOP +! \ No newline at end of file diff --git a/topologies/training-level3/configlets/BorderLeaf-1-VXLAN-Begin b/topologies/training-level3/configlets/BorderLeaf-1-VXLAN-Begin new file mode 100644 index 000000000..df4777823 --- /dev/null +++ b/topologies/training-level3/configlets/BorderLeaf-1-VXLAN-Begin @@ -0,0 +1,345 @@ +! +interface Ethernet1 + no switchport + ip address 172.17.2.1/30 +! +interface Ethernet2 + no switchport + ip address 172.17.2.5/30 +! +interface Ethernet3 + no switchport + ip address 172.16.1.1/30 +! +interface Ethernet4 + no switchport + ip address 172.16.1.5/30 +! +interface Ethernet5 + no switchport + ip address 172.16.1.9/30 +! +interface Loopback0 + ip address 10.31.31.31/32 +! +interface Loopback100 + ip address 172.10.1.100/32 +! +interface Loopback101 + ip address 172.10.1.101/32 +! +interface Loopback102 + ip address 172.10.1.102/32 +! +interface Loopback103 + ip address 172.10.1.103/32 +! +interface Loopback104 + ip address 172.10.1.104/32 +! +interface Loopback105 + ip address 172.10.1.105/32 +! +interface Loopback106 + ip address 172.10.1.106/32 +! +interface Loopback107 + ip address 172.10.1.107/32 +! +interface Loopback108 + ip address 172.10.1.108/32 +! +interface Loopback109 + ip address 172.10.1.109/32 +! +interface Loopback110 + ip address 172.10.1.110/32 +! +interface Loopback111 + ip address 172.10.1.111/32 +! +interface Loopback112 + ip address 172.10.1.112/32 +! +interface Loopback113 + ip address 172.10.1.113/32 +! +interface Loopback114 + ip address 172.10.1.114/32 +! +interface Loopback115 + ip address 172.10.1.115/32 +! +interface Loopback116 + ip address 172.10.1.116/32 +! +interface Loopback117 + ip address 172.10.1.117/32 +! +interface Loopback118 + ip address 172.10.1.118/32 +! +interface Loopback119 + ip address 172.10.1.119/32 +! +interface Loopback120 + ip address 172.10.1.120/32 +! +interface Loopback121 + ip address 172.10.1.121/32 +! +interface Loopback122 + ip address 172.10.1.122/32 +! +interface Loopback123 + ip address 172.10.1.123/32 +! +interface Loopback124 + ip address 172.10.1.124/32 +! +interface Loopback125 + ip address 172.10.1.125/32 +! +interface Loopback126 + ip address 172.10.1.126/32 +! +interface Loopback127 + ip address 172.10.1.127/32 +! +interface Loopback128 + ip address 172.10.1.128/32 +! +interface Loopback129 + ip address 172.10.1.129/32 +! +interface Loopback130 + ip address 172.10.1.130/32 +! +interface Loopback131 + ip address 172.10.1.131/32 +! +interface Loopback132 + ip address 172.10.1.132/32 +! +interface Loopback133 + ip address 172.10.1.133/32 +! +interface Loopback134 + ip address 172.10.1.134/32 +! +interface Loopback135 + ip address 172.10.1.135/32 +! +interface Loopback136 + ip address 172.10.1.136/32 +! +interface Loopback137 + ip address 172.10.1.137/32 +! +interface Loopback138 + ip address 172.10.1.138/32 +! +interface Loopback139 + ip address 172.10.1.139/32 +! +interface Loopback140 + ip address 172.10.1.140/32 +! +interface Loopback141 + ip address 172.10.1.141/32 +! +interface Loopback142 + ip address 172.10.1.142/32 +! +interface Loopback143 + ip address 172.10.1.143/32 +! +interface Loopback144 + ip address 172.10.1.144/32 +! +interface Loopback145 + ip address 172.10.1.145/32 +! +interface Loopback146 + ip address 172.10.1.146/32 +! +interface Loopback147 + ip address 172.10.1.147/32 +! +interface Loopback148 + ip address 172.10.1.148/32 +! +interface Loopback149 + ip address 172.10.1.149/32 +! +interface Loopback150 + ip address 172.10.1.150/32 +! +interface Loopback151 + ip address 172.10.1.151/32 +! +interface Loopback152 + ip address 172.10.1.152/32 +! +interface Loopback153 + ip address 172.10.1.153/32 +! +interface Loopback154 + ip address 172.10.1.154/32 +! +interface Loopback155 + ip address 172.10.1.155/32 +! +interface Loopback156 + ip address 172.10.1.156/32 +! +interface Loopback157 + ip address 172.10.1.157/32 +! +interface Loopback158 + ip address 172.10.1.158/32 +! +interface Loopback159 + ip address 172.10.1.159/32 +! +interface Loopback160 + ip address 172.10.1.160/32 +! +interface Loopback161 + ip address 172.10.1.161/32 +! +interface Loopback162 + ip address 172.10.1.162/32 +! +interface Loopback163 + ip address 172.10.1.163/32 +! +interface Loopback164 + ip address 172.10.1.164/32 +! +interface Loopback165 + ip address 172.10.1.165/32 +! +interface Loopback166 + ip address 172.10.1.166/32 +! +interface Loopback167 + ip address 172.10.1.167/32 +! +interface Loopback168 + ip address 172.10.1.168/32 +! +interface Loopback169 + ip address 172.10.1.169/32 +! +interface Loopback170 + ip address 172.10.1.170/32 +! +interface Loopback171 + ip address 172.10.1.171/32 +! +interface Loopback172 + ip address 172.10.1.172/32 +! +interface Loopback173 + ip address 172.10.1.173/32 +! +interface Loopback174 + ip address 172.10.1.174/32 +! +interface Loopback175 + ip address 172.10.1.175/32 +! +interface Loopback176 + ip address 172.10.1.176/32 +! +interface Loopback177 + ip address 172.10.1.177/32 +! +interface Loopback178 + ip address 172.10.1.178/32 +! +interface Loopback179 + ip address 172.10.1.179/32 +! +interface Loopback180 + ip address 172.10.1.180/32 +! +interface Loopback181 + ip address 172.10.1.181/32 +! +interface Loopback182 + ip address 172.10.1.182/32 +! +interface Loopback183 + ip address 172.10.1.183/32 +! +interface Loopback184 + ip address 172.10.1.184/32 +! +interface Loopback185 + ip address 172.10.1.185/32 +! +interface Loopback186 + ip address 172.10.1.186/32 +! +interface Loopback187 + ip address 172.10.1.187/32 +! +interface Loopback188 + ip address 172.10.1.188/32 +! +interface Loopback189 + ip address 172.10.1.189/32 +! +interface Loopback190 + ip address 172.10.1.190/32 +! +interface Loopback191 + ip address 172.10.1.191/32 +! +interface Loopback192 + ip address 172.10.1.192/32 +! +interface Loopback193 + ip address 172.10.1.193/32 +! +interface Loopback194 + ip address 172.10.1.194/32 +! +interface Loopback195 + ip address 172.10.1.195/32 +! +interface Loopback196 + ip address 172.10.1.196/32 +! +interface Loopback197 + ip address 172.10.1.197/32 +! +interface Loopback198 + ip address 172.10.1.198/32 +! +interface Loopback199 + ip address 172.10.1.199/32 +! +ip prefix-list local-LOOP + seq 10 permit 172.10.1.0/24 ge 32 + seq 20 permit 10.31.31.31/32 ge 32 +! +route-map prepend permit 10 + set as-path prepend 10 10 10 +! +route-map redist-LOOP permit 10 + match ip address prefix-list local-LOOP +! +router bgp 65500 + router-id 10.31.31.31 + maximum-paths 4 ecmp 4 + neighbor spines peer group + neighbor spines remote-as 65100 + neighbor 172.16.1.2 peer group spines + neighbor 172.16.1.6 peer group spines + neighbor 172.16.1.10 peer group spines + aggregate-address 172.10.1.0/24 summary-only attribute-map prepend + redistribute connected route-map redist-LOOP +! \ No newline at end of file diff --git a/topologies/training-level3/configlets/BorderLeaf-2-AAMH-Begin b/topologies/training-level3/configlets/BorderLeaf-2-AAMH-Begin new file mode 100644 index 000000000..01d189d59 --- /dev/null +++ b/topologies/training-level3/configlets/BorderLeaf-2-AAMH-Begin @@ -0,0 +1,341 @@ +! +interface Ethernet1 + no switchport + ip address 172.17.2.2/30 +! +interface Ethernet2 + no switchport + ip address 172.17.2.6/30 +! +interface Ethernet3 + no switchport + ip address 172.16.2.1/30 +! +interface Ethernet4 + no switchport + ip address 172.16.2.5/30 +! +interface Ethernet5 + no switchport + ip address 172.16.2.9/30 +! +interface Loopback0 + ip address 10.32.32.32/32 +! +interface Loopback100 + ip address 172.10.1.100/32 +! +interface Loopback101 + ip address 172.10.1.101/32 +! +interface Loopback102 + ip address 172.10.1.102/32 +! +interface Loopback103 + ip address 172.10.1.103/32 +! +interface Loopback104 + ip address 172.10.1.104/32 +! +interface Loopback105 + ip address 172.10.1.105/32 +! +interface Loopback106 + ip address 172.10.1.106/32 +! +interface Loopback107 + ip address 172.10.1.107/32 +! +interface Loopback108 + ip address 172.10.1.108/32 +! +interface Loopback109 + ip address 172.10.1.109/32 +! +interface Loopback110 + ip address 172.10.1.110/32 +! +interface Loopback111 + ip address 172.10.1.111/32 +! +interface Loopback112 + ip address 172.10.1.112/32 +! +interface Loopback113 + ip address 172.10.1.113/32 +! +interface Loopback114 + ip address 172.10.1.114/32 +! +interface Loopback115 + ip address 172.10.1.115/32 +! +interface Loopback116 + ip address 172.10.1.116/32 +! +interface Loopback117 + ip address 172.10.1.117/32 +! +interface Loopback118 + ip address 172.10.1.118/32 +! +interface Loopback119 + ip address 172.10.1.119/32 +! +interface Loopback120 + ip address 172.10.1.120/32 +! +interface Loopback121 + ip address 172.10.1.121/32 +! +interface Loopback122 + ip address 172.10.1.122/32 +! +interface Loopback123 + ip address 172.10.1.123/32 +! +interface Loopback124 + ip address 172.10.1.124/32 +! +interface Loopback125 + ip address 172.10.1.125/32 +! +interface Loopback126 + ip address 172.10.1.126/32 +! +interface Loopback127 + ip address 172.10.1.127/32 +! +interface Loopback128 + ip address 172.10.1.128/32 +! +interface Loopback129 + ip address 172.10.1.129/32 +! +interface Loopback130 + ip address 172.10.1.130/32 +! +interface Loopback131 + ip address 172.10.1.131/32 +! +interface Loopback132 + ip address 172.10.1.132/32 +! +interface Loopback133 + ip address 172.10.1.133/32 +! +interface Loopback134 + ip address 172.10.1.134/32 +! +interface Loopback135 + ip address 172.10.1.135/32 +! +interface Loopback136 + ip address 172.10.1.136/32 +! +interface Loopback137 + ip address 172.10.1.137/32 +! +interface Loopback138 + ip address 172.10.1.138/32 +! +interface Loopback139 + ip address 172.10.1.139/32 +! +interface Loopback140 + ip address 172.10.1.140/32 +! +interface Loopback141 + ip address 172.10.1.141/32 +! +interface Loopback142 + ip address 172.10.1.142/32 +! +interface Loopback143 + ip address 172.10.1.143/32 +! +interface Loopback144 + ip address 172.10.1.144/32 +! +interface Loopback145 + ip address 172.10.1.145/32 +! +interface Loopback146 + ip address 172.10.1.146/32 +! +interface Loopback147 + ip address 172.10.1.147/32 +! +interface Loopback148 + ip address 172.10.1.148/32 +! +interface Loopback149 + ip address 172.10.1.149/32 +! +interface Loopback150 + ip address 172.10.1.150/32 +! +interface Loopback151 + ip address 172.10.1.151/32 +! +interface Loopback152 + ip address 172.10.1.152/32 +! +interface Loopback153 + ip address 172.10.1.153/32 +! +interface Loopback154 + ip address 172.10.1.154/32 +! +interface Loopback155 + ip address 172.10.1.155/32 +! +interface Loopback156 + ip address 172.10.1.156/32 +! +interface Loopback157 + ip address 172.10.1.157/32 +! +interface Loopback158 + ip address 172.10.1.158/32 +! +interface Loopback159 + ip address 172.10.1.159/32 +! +interface Loopback160 + ip address 172.10.1.160/32 +! +interface Loopback161 + ip address 172.10.1.161/32 +! +interface Loopback162 + ip address 172.10.1.162/32 +! +interface Loopback163 + ip address 172.10.1.163/32 +! +interface Loopback164 + ip address 172.10.1.164/32 +! +interface Loopback165 + ip address 172.10.1.165/32 +! +interface Loopback166 + ip address 172.10.1.166/32 +! +interface Loopback167 + ip address 172.10.1.167/32 +! +interface Loopback168 + ip address 172.10.1.168/32 +! +interface Loopback169 + ip address 172.10.1.169/32 +! +interface Loopback170 + ip address 172.10.1.170/32 +! +interface Loopback171 + ip address 172.10.1.171/32 +! +interface Loopback172 + ip address 172.10.1.172/32 +! +interface Loopback173 + ip address 172.10.1.173/32 +! +interface Loopback174 + ip address 172.10.1.174/32 +! +interface Loopback175 + ip address 172.10.1.175/32 +! +interface Loopback176 + ip address 172.10.1.176/32 +! +interface Loopback177 + ip address 172.10.1.177/32 +! +interface Loopback178 + ip address 172.10.1.178/32 +! +interface Loopback179 + ip address 172.10.1.179/32 +! +interface Loopback180 + ip address 172.10.1.180/32 +! +interface Loopback181 + ip address 172.10.1.181/32 +! +interface Loopback182 + ip address 172.10.1.182/32 +! +interface Loopback183 + ip address 172.10.1.183/32 +! +interface Loopback184 + ip address 172.10.1.184/32 +! +interface Loopback185 + ip address 172.10.1.185/32 +! +interface Loopback186 + ip address 172.10.1.186/32 +! +interface Loopback187 + ip address 172.10.1.187/32 +! +interface Loopback188 + ip address 172.10.1.188/32 +! +interface Loopback189 + ip address 172.10.1.189/32 +! +interface Loopback190 + ip address 172.10.1.190/32 +! +interface Loopback191 + ip address 172.10.1.191/32 +! +interface Loopback192 + ip address 172.10.1.192/32 +! +interface Loopback193 + ip address 172.10.1.193/32 +! +interface Loopback194 + ip address 172.10.1.194/32 +! +interface Loopback195 + ip address 172.10.1.195/32 +! +interface Loopback196 + ip address 172.10.1.196/32 +! +interface Loopback197 + ip address 172.10.1.197/32 +! +interface Loopback198 + ip address 172.10.1.198/32 +! +interface Loopback199 + ip address 172.10.1.199/32 +! +ip prefix-list local-LOOP + seq 10 permit 172.10.1.0/24 ge 32 + seq 20 permit 10.32.32.32/32 ge 32 +! +route-map redist-LOOP permit 10 + match ip address prefix-list local-LOOP +! +router bgp 65500 + router-id 10.32.32.32 + maximum-paths 4 ecmp 4 + neighbor spines peer group + neighbor spines remote-as 65100 + neighbor 172.16.2.2 peer group spines + neighbor 172.16.2.6 peer group spines + neighbor 172.16.2.10 peer group spines + redistribute connected route-map redist-LOOP +! \ No newline at end of file diff --git a/topologies/training-level3/configlets/BorderLeaf-2-IP-Address b/topologies/training-level3/configlets/BorderLeaf-2-IP-Address new file mode 100644 index 000000000..9a67d5d5c --- /dev/null +++ b/topologies/training-level3/configlets/BorderLeaf-2-IP-Address @@ -0,0 +1,324 @@ +! +interface Ethernet1 + no switchport + ip address 172.17.2.2/30 +! +interface Ethernet2 + no switchport + ip address 172.17.2.6/30 +! +interface Ethernet3 + no switchport + ip address 172.16.2.1/30 +! +interface Ethernet4 + no switchport + ip address 172.16.2.5/30 +! +interface Ethernet5 + no switchport + ip address 172.16.2.9/30 +! +interface Loopback0 + ip address 10.32.32.32/32 +! +interface Loopback100 + ip address 172.10.1.100/32 +! +interface Loopback101 + ip address 172.10.1.101/32 +! +interface Loopback102 + ip address 172.10.1.102/32 +! +interface Loopback103 + ip address 172.10.1.103/32 +! +interface Loopback104 + ip address 172.10.1.104/32 +! +interface Loopback105 + ip address 172.10.1.105/32 +! +interface Loopback106 + ip address 172.10.1.106/32 +! +interface Loopback107 + ip address 172.10.1.107/32 +! +interface Loopback108 + ip address 172.10.1.108/32 +! +interface Loopback109 + ip address 172.10.1.109/32 +! +interface Loopback110 + ip address 172.10.1.110/32 +! +interface Loopback111 + ip address 172.10.1.111/32 +! +interface Loopback112 + ip address 172.10.1.112/32 +! +interface Loopback113 + ip address 172.10.1.113/32 +! +interface Loopback114 + ip address 172.10.1.114/32 +! +interface Loopback115 + ip address 172.10.1.115/32 +! +interface Loopback116 + ip address 172.10.1.116/32 +! +interface Loopback117 + ip address 172.10.1.117/32 +! +interface Loopback118 + ip address 172.10.1.118/32 +! +interface Loopback119 + ip address 172.10.1.119/32 +! +interface Loopback120 + ip address 172.10.1.120/32 +! +interface Loopback121 + ip address 172.10.1.121/32 +! +interface Loopback122 + ip address 172.10.1.122/32 +! +interface Loopback123 + ip address 172.10.1.123/32 +! +interface Loopback124 + ip address 172.10.1.124/32 +! +interface Loopback125 + ip address 172.10.1.125/32 +! +interface Loopback126 + ip address 172.10.1.126/32 +! +interface Loopback127 + ip address 172.10.1.127/32 +! +interface Loopback128 + ip address 172.10.1.128/32 +! +interface Loopback129 + ip address 172.10.1.129/32 +! +interface Loopback130 + ip address 172.10.1.130/32 +! +interface Loopback131 + ip address 172.10.1.131/32 +! +interface Loopback132 + ip address 172.10.1.132/32 +! +interface Loopback133 + ip address 172.10.1.133/32 +! +interface Loopback134 + ip address 172.10.1.134/32 +! +interface Loopback135 + ip address 172.10.1.135/32 +! +interface Loopback136 + ip address 172.10.1.136/32 +! +interface Loopback137 + ip address 172.10.1.137/32 +! +interface Loopback138 + ip address 172.10.1.138/32 +! +interface Loopback139 + ip address 172.10.1.139/32 +! +interface Loopback140 + ip address 172.10.1.140/32 +! +interface Loopback141 + ip address 172.10.1.141/32 +! +interface Loopback142 + ip address 172.10.1.142/32 +! +interface Loopback143 + ip address 172.10.1.143/32 +! +interface Loopback144 + ip address 172.10.1.144/32 +! +interface Loopback145 + ip address 172.10.1.145/32 +! +interface Loopback146 + ip address 172.10.1.146/32 +! +interface Loopback147 + ip address 172.10.1.147/32 +! +interface Loopback148 + ip address 172.10.1.148/32 +! +interface Loopback149 + ip address 172.10.1.149/32 +! +interface Loopback150 + ip address 172.10.1.150/32 +! +interface Loopback151 + ip address 172.10.1.151/32 +! +interface Loopback152 + ip address 172.10.1.152/32 +! +interface Loopback153 + ip address 172.10.1.153/32 +! +interface Loopback154 + ip address 172.10.1.154/32 +! +interface Loopback155 + ip address 172.10.1.155/32 +! +interface Loopback156 + ip address 172.10.1.156/32 +! +interface Loopback157 + ip address 172.10.1.157/32 +! +interface Loopback158 + ip address 172.10.1.158/32 +! +interface Loopback159 + ip address 172.10.1.159/32 +! +interface Loopback160 + ip address 172.10.1.160/32 +! +interface Loopback161 + ip address 172.10.1.161/32 +! +interface Loopback162 + ip address 172.10.1.162/32 +! +interface Loopback163 + ip address 172.10.1.163/32 +! +interface Loopback164 + ip address 172.10.1.164/32 +! +interface Loopback165 + ip address 172.10.1.165/32 +! +interface Loopback166 + ip address 172.10.1.166/32 +! +interface Loopback167 + ip address 172.10.1.167/32 +! +interface Loopback168 + ip address 172.10.1.168/32 +! +interface Loopback169 + ip address 172.10.1.169/32 +! +interface Loopback170 + ip address 172.10.1.170/32 +! +interface Loopback171 + ip address 172.10.1.171/32 +! +interface Loopback172 + ip address 172.10.1.172/32 +! +interface Loopback173 + ip address 172.10.1.173/32 +! +interface Loopback174 + ip address 172.10.1.174/32 +! +interface Loopback175 + ip address 172.10.1.175/32 +! +interface Loopback176 + ip address 172.10.1.176/32 +! +interface Loopback177 + ip address 172.10.1.177/32 +! +interface Loopback178 + ip address 172.10.1.178/32 +! +interface Loopback179 + ip address 172.10.1.179/32 +! +interface Loopback180 + ip address 172.10.1.180/32 +! +interface Loopback181 + ip address 172.10.1.181/32 +! +interface Loopback182 + ip address 172.10.1.182/32 +! +interface Loopback183 + ip address 172.10.1.183/32 +! +interface Loopback184 + ip address 172.10.1.184/32 +! +interface Loopback185 + ip address 172.10.1.185/32 +! +interface Loopback186 + ip address 172.10.1.186/32 +! +interface Loopback187 + ip address 172.10.1.187/32 +! +interface Loopback188 + ip address 172.10.1.188/32 +! +interface Loopback189 + ip address 172.10.1.189/32 +! +interface Loopback190 + ip address 172.10.1.190/32 +! +interface Loopback191 + ip address 172.10.1.191/32 +! +interface Loopback192 + ip address 172.10.1.192/32 +! +interface Loopback193 + ip address 172.10.1.193/32 +! +interface Loopback194 + ip address 172.10.1.194/32 +! +interface Loopback195 + ip address 172.10.1.195/32 +! +interface Loopback196 + ip address 172.10.1.196/32 +! +interface Loopback197 + ip address 172.10.1.197/32 +! +interface Loopback198 + ip address 172.10.1.198/32 +! +interface Loopback199 + ip address 172.10.1.199/32 +! diff --git a/topologies/training-level3/configlets/BorderLeaf-2-L2EVPN-Begin b/topologies/training-level3/configlets/BorderLeaf-2-L2EVPN-Begin new file mode 100644 index 000000000..01d189d59 --- /dev/null +++ b/topologies/training-level3/configlets/BorderLeaf-2-L2EVPN-Begin @@ -0,0 +1,341 @@ +! +interface Ethernet1 + no switchport + ip address 172.17.2.2/30 +! +interface Ethernet2 + no switchport + ip address 172.17.2.6/30 +! +interface Ethernet3 + no switchport + ip address 172.16.2.1/30 +! +interface Ethernet4 + no switchport + ip address 172.16.2.5/30 +! +interface Ethernet5 + no switchport + ip address 172.16.2.9/30 +! +interface Loopback0 + ip address 10.32.32.32/32 +! +interface Loopback100 + ip address 172.10.1.100/32 +! +interface Loopback101 + ip address 172.10.1.101/32 +! +interface Loopback102 + ip address 172.10.1.102/32 +! +interface Loopback103 + ip address 172.10.1.103/32 +! +interface Loopback104 + ip address 172.10.1.104/32 +! +interface Loopback105 + ip address 172.10.1.105/32 +! +interface Loopback106 + ip address 172.10.1.106/32 +! +interface Loopback107 + ip address 172.10.1.107/32 +! +interface Loopback108 + ip address 172.10.1.108/32 +! +interface Loopback109 + ip address 172.10.1.109/32 +! +interface Loopback110 + ip address 172.10.1.110/32 +! +interface Loopback111 + ip address 172.10.1.111/32 +! +interface Loopback112 + ip address 172.10.1.112/32 +! +interface Loopback113 + ip address 172.10.1.113/32 +! +interface Loopback114 + ip address 172.10.1.114/32 +! +interface Loopback115 + ip address 172.10.1.115/32 +! +interface Loopback116 + ip address 172.10.1.116/32 +! +interface Loopback117 + ip address 172.10.1.117/32 +! +interface Loopback118 + ip address 172.10.1.118/32 +! +interface Loopback119 + ip address 172.10.1.119/32 +! +interface Loopback120 + ip address 172.10.1.120/32 +! +interface Loopback121 + ip address 172.10.1.121/32 +! +interface Loopback122 + ip address 172.10.1.122/32 +! +interface Loopback123 + ip address 172.10.1.123/32 +! +interface Loopback124 + ip address 172.10.1.124/32 +! +interface Loopback125 + ip address 172.10.1.125/32 +! +interface Loopback126 + ip address 172.10.1.126/32 +! +interface Loopback127 + ip address 172.10.1.127/32 +! +interface Loopback128 + ip address 172.10.1.128/32 +! +interface Loopback129 + ip address 172.10.1.129/32 +! +interface Loopback130 + ip address 172.10.1.130/32 +! +interface Loopback131 + ip address 172.10.1.131/32 +! +interface Loopback132 + ip address 172.10.1.132/32 +! +interface Loopback133 + ip address 172.10.1.133/32 +! +interface Loopback134 + ip address 172.10.1.134/32 +! +interface Loopback135 + ip address 172.10.1.135/32 +! +interface Loopback136 + ip address 172.10.1.136/32 +! +interface Loopback137 + ip address 172.10.1.137/32 +! +interface Loopback138 + ip address 172.10.1.138/32 +! +interface Loopback139 + ip address 172.10.1.139/32 +! +interface Loopback140 + ip address 172.10.1.140/32 +! +interface Loopback141 + ip address 172.10.1.141/32 +! +interface Loopback142 + ip address 172.10.1.142/32 +! +interface Loopback143 + ip address 172.10.1.143/32 +! +interface Loopback144 + ip address 172.10.1.144/32 +! +interface Loopback145 + ip address 172.10.1.145/32 +! +interface Loopback146 + ip address 172.10.1.146/32 +! +interface Loopback147 + ip address 172.10.1.147/32 +! +interface Loopback148 + ip address 172.10.1.148/32 +! +interface Loopback149 + ip address 172.10.1.149/32 +! +interface Loopback150 + ip address 172.10.1.150/32 +! +interface Loopback151 + ip address 172.10.1.151/32 +! +interface Loopback152 + ip address 172.10.1.152/32 +! +interface Loopback153 + ip address 172.10.1.153/32 +! +interface Loopback154 + ip address 172.10.1.154/32 +! +interface Loopback155 + ip address 172.10.1.155/32 +! +interface Loopback156 + ip address 172.10.1.156/32 +! +interface Loopback157 + ip address 172.10.1.157/32 +! +interface Loopback158 + ip address 172.10.1.158/32 +! +interface Loopback159 + ip address 172.10.1.159/32 +! +interface Loopback160 + ip address 172.10.1.160/32 +! +interface Loopback161 + ip address 172.10.1.161/32 +! +interface Loopback162 + ip address 172.10.1.162/32 +! +interface Loopback163 + ip address 172.10.1.163/32 +! +interface Loopback164 + ip address 172.10.1.164/32 +! +interface Loopback165 + ip address 172.10.1.165/32 +! +interface Loopback166 + ip address 172.10.1.166/32 +! +interface Loopback167 + ip address 172.10.1.167/32 +! +interface Loopback168 + ip address 172.10.1.168/32 +! +interface Loopback169 + ip address 172.10.1.169/32 +! +interface Loopback170 + ip address 172.10.1.170/32 +! +interface Loopback171 + ip address 172.10.1.171/32 +! +interface Loopback172 + ip address 172.10.1.172/32 +! +interface Loopback173 + ip address 172.10.1.173/32 +! +interface Loopback174 + ip address 172.10.1.174/32 +! +interface Loopback175 + ip address 172.10.1.175/32 +! +interface Loopback176 + ip address 172.10.1.176/32 +! +interface Loopback177 + ip address 172.10.1.177/32 +! +interface Loopback178 + ip address 172.10.1.178/32 +! +interface Loopback179 + ip address 172.10.1.179/32 +! +interface Loopback180 + ip address 172.10.1.180/32 +! +interface Loopback181 + ip address 172.10.1.181/32 +! +interface Loopback182 + ip address 172.10.1.182/32 +! +interface Loopback183 + ip address 172.10.1.183/32 +! +interface Loopback184 + ip address 172.10.1.184/32 +! +interface Loopback185 + ip address 172.10.1.185/32 +! +interface Loopback186 + ip address 172.10.1.186/32 +! +interface Loopback187 + ip address 172.10.1.187/32 +! +interface Loopback188 + ip address 172.10.1.188/32 +! +interface Loopback189 + ip address 172.10.1.189/32 +! +interface Loopback190 + ip address 172.10.1.190/32 +! +interface Loopback191 + ip address 172.10.1.191/32 +! +interface Loopback192 + ip address 172.10.1.192/32 +! +interface Loopback193 + ip address 172.10.1.193/32 +! +interface Loopback194 + ip address 172.10.1.194/32 +! +interface Loopback195 + ip address 172.10.1.195/32 +! +interface Loopback196 + ip address 172.10.1.196/32 +! +interface Loopback197 + ip address 172.10.1.197/32 +! +interface Loopback198 + ip address 172.10.1.198/32 +! +interface Loopback199 + ip address 172.10.1.199/32 +! +ip prefix-list local-LOOP + seq 10 permit 172.10.1.0/24 ge 32 + seq 20 permit 10.32.32.32/32 ge 32 +! +route-map redist-LOOP permit 10 + match ip address prefix-list local-LOOP +! +router bgp 65500 + router-id 10.32.32.32 + maximum-paths 4 ecmp 4 + neighbor spines peer group + neighbor spines remote-as 65100 + neighbor 172.16.2.2 peer group spines + neighbor 172.16.2.6 peer group spines + neighbor 172.16.2.10 peer group spines + redistribute connected route-map redist-LOOP +! \ No newline at end of file diff --git a/topologies/training-level3/configlets/BorderLeaf-2-L3EVPN-Begin b/topologies/training-level3/configlets/BorderLeaf-2-L3EVPN-Begin new file mode 100644 index 000000000..01d189d59 --- /dev/null +++ b/topologies/training-level3/configlets/BorderLeaf-2-L3EVPN-Begin @@ -0,0 +1,341 @@ +! +interface Ethernet1 + no switchport + ip address 172.17.2.2/30 +! +interface Ethernet2 + no switchport + ip address 172.17.2.6/30 +! +interface Ethernet3 + no switchport + ip address 172.16.2.1/30 +! +interface Ethernet4 + no switchport + ip address 172.16.2.5/30 +! +interface Ethernet5 + no switchport + ip address 172.16.2.9/30 +! +interface Loopback0 + ip address 10.32.32.32/32 +! +interface Loopback100 + ip address 172.10.1.100/32 +! +interface Loopback101 + ip address 172.10.1.101/32 +! +interface Loopback102 + ip address 172.10.1.102/32 +! +interface Loopback103 + ip address 172.10.1.103/32 +! +interface Loopback104 + ip address 172.10.1.104/32 +! +interface Loopback105 + ip address 172.10.1.105/32 +! +interface Loopback106 + ip address 172.10.1.106/32 +! +interface Loopback107 + ip address 172.10.1.107/32 +! +interface Loopback108 + ip address 172.10.1.108/32 +! +interface Loopback109 + ip address 172.10.1.109/32 +! +interface Loopback110 + ip address 172.10.1.110/32 +! +interface Loopback111 + ip address 172.10.1.111/32 +! +interface Loopback112 + ip address 172.10.1.112/32 +! +interface Loopback113 + ip address 172.10.1.113/32 +! +interface Loopback114 + ip address 172.10.1.114/32 +! +interface Loopback115 + ip address 172.10.1.115/32 +! +interface Loopback116 + ip address 172.10.1.116/32 +! +interface Loopback117 + ip address 172.10.1.117/32 +! +interface Loopback118 + ip address 172.10.1.118/32 +! +interface Loopback119 + ip address 172.10.1.119/32 +! +interface Loopback120 + ip address 172.10.1.120/32 +! +interface Loopback121 + ip address 172.10.1.121/32 +! +interface Loopback122 + ip address 172.10.1.122/32 +! +interface Loopback123 + ip address 172.10.1.123/32 +! +interface Loopback124 + ip address 172.10.1.124/32 +! +interface Loopback125 + ip address 172.10.1.125/32 +! +interface Loopback126 + ip address 172.10.1.126/32 +! +interface Loopback127 + ip address 172.10.1.127/32 +! +interface Loopback128 + ip address 172.10.1.128/32 +! +interface Loopback129 + ip address 172.10.1.129/32 +! +interface Loopback130 + ip address 172.10.1.130/32 +! +interface Loopback131 + ip address 172.10.1.131/32 +! +interface Loopback132 + ip address 172.10.1.132/32 +! +interface Loopback133 + ip address 172.10.1.133/32 +! +interface Loopback134 + ip address 172.10.1.134/32 +! +interface Loopback135 + ip address 172.10.1.135/32 +! +interface Loopback136 + ip address 172.10.1.136/32 +! +interface Loopback137 + ip address 172.10.1.137/32 +! +interface Loopback138 + ip address 172.10.1.138/32 +! +interface Loopback139 + ip address 172.10.1.139/32 +! +interface Loopback140 + ip address 172.10.1.140/32 +! +interface Loopback141 + ip address 172.10.1.141/32 +! +interface Loopback142 + ip address 172.10.1.142/32 +! +interface Loopback143 + ip address 172.10.1.143/32 +! +interface Loopback144 + ip address 172.10.1.144/32 +! +interface Loopback145 + ip address 172.10.1.145/32 +! +interface Loopback146 + ip address 172.10.1.146/32 +! +interface Loopback147 + ip address 172.10.1.147/32 +! +interface Loopback148 + ip address 172.10.1.148/32 +! +interface Loopback149 + ip address 172.10.1.149/32 +! +interface Loopback150 + ip address 172.10.1.150/32 +! +interface Loopback151 + ip address 172.10.1.151/32 +! +interface Loopback152 + ip address 172.10.1.152/32 +! +interface Loopback153 + ip address 172.10.1.153/32 +! +interface Loopback154 + ip address 172.10.1.154/32 +! +interface Loopback155 + ip address 172.10.1.155/32 +! +interface Loopback156 + ip address 172.10.1.156/32 +! +interface Loopback157 + ip address 172.10.1.157/32 +! +interface Loopback158 + ip address 172.10.1.158/32 +! +interface Loopback159 + ip address 172.10.1.159/32 +! +interface Loopback160 + ip address 172.10.1.160/32 +! +interface Loopback161 + ip address 172.10.1.161/32 +! +interface Loopback162 + ip address 172.10.1.162/32 +! +interface Loopback163 + ip address 172.10.1.163/32 +! +interface Loopback164 + ip address 172.10.1.164/32 +! +interface Loopback165 + ip address 172.10.1.165/32 +! +interface Loopback166 + ip address 172.10.1.166/32 +! +interface Loopback167 + ip address 172.10.1.167/32 +! +interface Loopback168 + ip address 172.10.1.168/32 +! +interface Loopback169 + ip address 172.10.1.169/32 +! +interface Loopback170 + ip address 172.10.1.170/32 +! +interface Loopback171 + ip address 172.10.1.171/32 +! +interface Loopback172 + ip address 172.10.1.172/32 +! +interface Loopback173 + ip address 172.10.1.173/32 +! +interface Loopback174 + ip address 172.10.1.174/32 +! +interface Loopback175 + ip address 172.10.1.175/32 +! +interface Loopback176 + ip address 172.10.1.176/32 +! +interface Loopback177 + ip address 172.10.1.177/32 +! +interface Loopback178 + ip address 172.10.1.178/32 +! +interface Loopback179 + ip address 172.10.1.179/32 +! +interface Loopback180 + ip address 172.10.1.180/32 +! +interface Loopback181 + ip address 172.10.1.181/32 +! +interface Loopback182 + ip address 172.10.1.182/32 +! +interface Loopback183 + ip address 172.10.1.183/32 +! +interface Loopback184 + ip address 172.10.1.184/32 +! +interface Loopback185 + ip address 172.10.1.185/32 +! +interface Loopback186 + ip address 172.10.1.186/32 +! +interface Loopback187 + ip address 172.10.1.187/32 +! +interface Loopback188 + ip address 172.10.1.188/32 +! +interface Loopback189 + ip address 172.10.1.189/32 +! +interface Loopback190 + ip address 172.10.1.190/32 +! +interface Loopback191 + ip address 172.10.1.191/32 +! +interface Loopback192 + ip address 172.10.1.192/32 +! +interface Loopback193 + ip address 172.10.1.193/32 +! +interface Loopback194 + ip address 172.10.1.194/32 +! +interface Loopback195 + ip address 172.10.1.195/32 +! +interface Loopback196 + ip address 172.10.1.196/32 +! +interface Loopback197 + ip address 172.10.1.197/32 +! +interface Loopback198 + ip address 172.10.1.198/32 +! +interface Loopback199 + ip address 172.10.1.199/32 +! +ip prefix-list local-LOOP + seq 10 permit 172.10.1.0/24 ge 32 + seq 20 permit 10.32.32.32/32 ge 32 +! +route-map redist-LOOP permit 10 + match ip address prefix-list local-LOOP +! +router bgp 65500 + router-id 10.32.32.32 + maximum-paths 4 ecmp 4 + neighbor spines peer group + neighbor spines remote-as 65100 + neighbor 172.16.2.2 peer group spines + neighbor 172.16.2.6 peer group spines + neighbor 172.16.2.10 peer group spines + redistribute connected route-map redist-LOOP +! \ No newline at end of file diff --git a/topologies/training-level3/configlets/BorderLeaf-2-PIM-Begin b/topologies/training-level3/configlets/BorderLeaf-2-PIM-Begin new file mode 100644 index 000000000..01d189d59 --- /dev/null +++ b/topologies/training-level3/configlets/BorderLeaf-2-PIM-Begin @@ -0,0 +1,341 @@ +! +interface Ethernet1 + no switchport + ip address 172.17.2.2/30 +! +interface Ethernet2 + no switchport + ip address 172.17.2.6/30 +! +interface Ethernet3 + no switchport + ip address 172.16.2.1/30 +! +interface Ethernet4 + no switchport + ip address 172.16.2.5/30 +! +interface Ethernet5 + no switchport + ip address 172.16.2.9/30 +! +interface Loopback0 + ip address 10.32.32.32/32 +! +interface Loopback100 + ip address 172.10.1.100/32 +! +interface Loopback101 + ip address 172.10.1.101/32 +! +interface Loopback102 + ip address 172.10.1.102/32 +! +interface Loopback103 + ip address 172.10.1.103/32 +! +interface Loopback104 + ip address 172.10.1.104/32 +! +interface Loopback105 + ip address 172.10.1.105/32 +! +interface Loopback106 + ip address 172.10.1.106/32 +! +interface Loopback107 + ip address 172.10.1.107/32 +! +interface Loopback108 + ip address 172.10.1.108/32 +! +interface Loopback109 + ip address 172.10.1.109/32 +! +interface Loopback110 + ip address 172.10.1.110/32 +! +interface Loopback111 + ip address 172.10.1.111/32 +! +interface Loopback112 + ip address 172.10.1.112/32 +! +interface Loopback113 + ip address 172.10.1.113/32 +! +interface Loopback114 + ip address 172.10.1.114/32 +! +interface Loopback115 + ip address 172.10.1.115/32 +! +interface Loopback116 + ip address 172.10.1.116/32 +! +interface Loopback117 + ip address 172.10.1.117/32 +! +interface Loopback118 + ip address 172.10.1.118/32 +! +interface Loopback119 + ip address 172.10.1.119/32 +! +interface Loopback120 + ip address 172.10.1.120/32 +! +interface Loopback121 + ip address 172.10.1.121/32 +! +interface Loopback122 + ip address 172.10.1.122/32 +! +interface Loopback123 + ip address 172.10.1.123/32 +! +interface Loopback124 + ip address 172.10.1.124/32 +! +interface Loopback125 + ip address 172.10.1.125/32 +! +interface Loopback126 + ip address 172.10.1.126/32 +! +interface Loopback127 + ip address 172.10.1.127/32 +! +interface Loopback128 + ip address 172.10.1.128/32 +! +interface Loopback129 + ip address 172.10.1.129/32 +! +interface Loopback130 + ip address 172.10.1.130/32 +! +interface Loopback131 + ip address 172.10.1.131/32 +! +interface Loopback132 + ip address 172.10.1.132/32 +! +interface Loopback133 + ip address 172.10.1.133/32 +! +interface Loopback134 + ip address 172.10.1.134/32 +! +interface Loopback135 + ip address 172.10.1.135/32 +! +interface Loopback136 + ip address 172.10.1.136/32 +! +interface Loopback137 + ip address 172.10.1.137/32 +! +interface Loopback138 + ip address 172.10.1.138/32 +! +interface Loopback139 + ip address 172.10.1.139/32 +! +interface Loopback140 + ip address 172.10.1.140/32 +! +interface Loopback141 + ip address 172.10.1.141/32 +! +interface Loopback142 + ip address 172.10.1.142/32 +! +interface Loopback143 + ip address 172.10.1.143/32 +! +interface Loopback144 + ip address 172.10.1.144/32 +! +interface Loopback145 + ip address 172.10.1.145/32 +! +interface Loopback146 + ip address 172.10.1.146/32 +! +interface Loopback147 + ip address 172.10.1.147/32 +! +interface Loopback148 + ip address 172.10.1.148/32 +! +interface Loopback149 + ip address 172.10.1.149/32 +! +interface Loopback150 + ip address 172.10.1.150/32 +! +interface Loopback151 + ip address 172.10.1.151/32 +! +interface Loopback152 + ip address 172.10.1.152/32 +! +interface Loopback153 + ip address 172.10.1.153/32 +! +interface Loopback154 + ip address 172.10.1.154/32 +! +interface Loopback155 + ip address 172.10.1.155/32 +! +interface Loopback156 + ip address 172.10.1.156/32 +! +interface Loopback157 + ip address 172.10.1.157/32 +! +interface Loopback158 + ip address 172.10.1.158/32 +! +interface Loopback159 + ip address 172.10.1.159/32 +! +interface Loopback160 + ip address 172.10.1.160/32 +! +interface Loopback161 + ip address 172.10.1.161/32 +! +interface Loopback162 + ip address 172.10.1.162/32 +! +interface Loopback163 + ip address 172.10.1.163/32 +! +interface Loopback164 + ip address 172.10.1.164/32 +! +interface Loopback165 + ip address 172.10.1.165/32 +! +interface Loopback166 + ip address 172.10.1.166/32 +! +interface Loopback167 + ip address 172.10.1.167/32 +! +interface Loopback168 + ip address 172.10.1.168/32 +! +interface Loopback169 + ip address 172.10.1.169/32 +! +interface Loopback170 + ip address 172.10.1.170/32 +! +interface Loopback171 + ip address 172.10.1.171/32 +! +interface Loopback172 + ip address 172.10.1.172/32 +! +interface Loopback173 + ip address 172.10.1.173/32 +! +interface Loopback174 + ip address 172.10.1.174/32 +! +interface Loopback175 + ip address 172.10.1.175/32 +! +interface Loopback176 + ip address 172.10.1.176/32 +! +interface Loopback177 + ip address 172.10.1.177/32 +! +interface Loopback178 + ip address 172.10.1.178/32 +! +interface Loopback179 + ip address 172.10.1.179/32 +! +interface Loopback180 + ip address 172.10.1.180/32 +! +interface Loopback181 + ip address 172.10.1.181/32 +! +interface Loopback182 + ip address 172.10.1.182/32 +! +interface Loopback183 + ip address 172.10.1.183/32 +! +interface Loopback184 + ip address 172.10.1.184/32 +! +interface Loopback185 + ip address 172.10.1.185/32 +! +interface Loopback186 + ip address 172.10.1.186/32 +! +interface Loopback187 + ip address 172.10.1.187/32 +! +interface Loopback188 + ip address 172.10.1.188/32 +! +interface Loopback189 + ip address 172.10.1.189/32 +! +interface Loopback190 + ip address 172.10.1.190/32 +! +interface Loopback191 + ip address 172.10.1.191/32 +! +interface Loopback192 + ip address 172.10.1.192/32 +! +interface Loopback193 + ip address 172.10.1.193/32 +! +interface Loopback194 + ip address 172.10.1.194/32 +! +interface Loopback195 + ip address 172.10.1.195/32 +! +interface Loopback196 + ip address 172.10.1.196/32 +! +interface Loopback197 + ip address 172.10.1.197/32 +! +interface Loopback198 + ip address 172.10.1.198/32 +! +interface Loopback199 + ip address 172.10.1.199/32 +! +ip prefix-list local-LOOP + seq 10 permit 172.10.1.0/24 ge 32 + seq 20 permit 10.32.32.32/32 ge 32 +! +route-map redist-LOOP permit 10 + match ip address prefix-list local-LOOP +! +router bgp 65500 + router-id 10.32.32.32 + maximum-paths 4 ecmp 4 + neighbor spines peer group + neighbor spines remote-as 65100 + neighbor 172.16.2.2 peer group spines + neighbor 172.16.2.6 peer group spines + neighbor 172.16.2.10 peer group spines + redistribute connected route-map redist-LOOP +! \ No newline at end of file diff --git a/topologies/training-level3/configlets/BorderLeaf-2-VXLAN-Begin b/topologies/training-level3/configlets/BorderLeaf-2-VXLAN-Begin new file mode 100644 index 000000000..01d189d59 --- /dev/null +++ b/topologies/training-level3/configlets/BorderLeaf-2-VXLAN-Begin @@ -0,0 +1,341 @@ +! +interface Ethernet1 + no switchport + ip address 172.17.2.2/30 +! +interface Ethernet2 + no switchport + ip address 172.17.2.6/30 +! +interface Ethernet3 + no switchport + ip address 172.16.2.1/30 +! +interface Ethernet4 + no switchport + ip address 172.16.2.5/30 +! +interface Ethernet5 + no switchport + ip address 172.16.2.9/30 +! +interface Loopback0 + ip address 10.32.32.32/32 +! +interface Loopback100 + ip address 172.10.1.100/32 +! +interface Loopback101 + ip address 172.10.1.101/32 +! +interface Loopback102 + ip address 172.10.1.102/32 +! +interface Loopback103 + ip address 172.10.1.103/32 +! +interface Loopback104 + ip address 172.10.1.104/32 +! +interface Loopback105 + ip address 172.10.1.105/32 +! +interface Loopback106 + ip address 172.10.1.106/32 +! +interface Loopback107 + ip address 172.10.1.107/32 +! +interface Loopback108 + ip address 172.10.1.108/32 +! +interface Loopback109 + ip address 172.10.1.109/32 +! +interface Loopback110 + ip address 172.10.1.110/32 +! +interface Loopback111 + ip address 172.10.1.111/32 +! +interface Loopback112 + ip address 172.10.1.112/32 +! +interface Loopback113 + ip address 172.10.1.113/32 +! +interface Loopback114 + ip address 172.10.1.114/32 +! +interface Loopback115 + ip address 172.10.1.115/32 +! +interface Loopback116 + ip address 172.10.1.116/32 +! +interface Loopback117 + ip address 172.10.1.117/32 +! +interface Loopback118 + ip address 172.10.1.118/32 +! +interface Loopback119 + ip address 172.10.1.119/32 +! +interface Loopback120 + ip address 172.10.1.120/32 +! +interface Loopback121 + ip address 172.10.1.121/32 +! +interface Loopback122 + ip address 172.10.1.122/32 +! +interface Loopback123 + ip address 172.10.1.123/32 +! +interface Loopback124 + ip address 172.10.1.124/32 +! +interface Loopback125 + ip address 172.10.1.125/32 +! +interface Loopback126 + ip address 172.10.1.126/32 +! +interface Loopback127 + ip address 172.10.1.127/32 +! +interface Loopback128 + ip address 172.10.1.128/32 +! +interface Loopback129 + ip address 172.10.1.129/32 +! +interface Loopback130 + ip address 172.10.1.130/32 +! +interface Loopback131 + ip address 172.10.1.131/32 +! +interface Loopback132 + ip address 172.10.1.132/32 +! +interface Loopback133 + ip address 172.10.1.133/32 +! +interface Loopback134 + ip address 172.10.1.134/32 +! +interface Loopback135 + ip address 172.10.1.135/32 +! +interface Loopback136 + ip address 172.10.1.136/32 +! +interface Loopback137 + ip address 172.10.1.137/32 +! +interface Loopback138 + ip address 172.10.1.138/32 +! +interface Loopback139 + ip address 172.10.1.139/32 +! +interface Loopback140 + ip address 172.10.1.140/32 +! +interface Loopback141 + ip address 172.10.1.141/32 +! +interface Loopback142 + ip address 172.10.1.142/32 +! +interface Loopback143 + ip address 172.10.1.143/32 +! +interface Loopback144 + ip address 172.10.1.144/32 +! +interface Loopback145 + ip address 172.10.1.145/32 +! +interface Loopback146 + ip address 172.10.1.146/32 +! +interface Loopback147 + ip address 172.10.1.147/32 +! +interface Loopback148 + ip address 172.10.1.148/32 +! +interface Loopback149 + ip address 172.10.1.149/32 +! +interface Loopback150 + ip address 172.10.1.150/32 +! +interface Loopback151 + ip address 172.10.1.151/32 +! +interface Loopback152 + ip address 172.10.1.152/32 +! +interface Loopback153 + ip address 172.10.1.153/32 +! +interface Loopback154 + ip address 172.10.1.154/32 +! +interface Loopback155 + ip address 172.10.1.155/32 +! +interface Loopback156 + ip address 172.10.1.156/32 +! +interface Loopback157 + ip address 172.10.1.157/32 +! +interface Loopback158 + ip address 172.10.1.158/32 +! +interface Loopback159 + ip address 172.10.1.159/32 +! +interface Loopback160 + ip address 172.10.1.160/32 +! +interface Loopback161 + ip address 172.10.1.161/32 +! +interface Loopback162 + ip address 172.10.1.162/32 +! +interface Loopback163 + ip address 172.10.1.163/32 +! +interface Loopback164 + ip address 172.10.1.164/32 +! +interface Loopback165 + ip address 172.10.1.165/32 +! +interface Loopback166 + ip address 172.10.1.166/32 +! +interface Loopback167 + ip address 172.10.1.167/32 +! +interface Loopback168 + ip address 172.10.1.168/32 +! +interface Loopback169 + ip address 172.10.1.169/32 +! +interface Loopback170 + ip address 172.10.1.170/32 +! +interface Loopback171 + ip address 172.10.1.171/32 +! +interface Loopback172 + ip address 172.10.1.172/32 +! +interface Loopback173 + ip address 172.10.1.173/32 +! +interface Loopback174 + ip address 172.10.1.174/32 +! +interface Loopback175 + ip address 172.10.1.175/32 +! +interface Loopback176 + ip address 172.10.1.176/32 +! +interface Loopback177 + ip address 172.10.1.177/32 +! +interface Loopback178 + ip address 172.10.1.178/32 +! +interface Loopback179 + ip address 172.10.1.179/32 +! +interface Loopback180 + ip address 172.10.1.180/32 +! +interface Loopback181 + ip address 172.10.1.181/32 +! +interface Loopback182 + ip address 172.10.1.182/32 +! +interface Loopback183 + ip address 172.10.1.183/32 +! +interface Loopback184 + ip address 172.10.1.184/32 +! +interface Loopback185 + ip address 172.10.1.185/32 +! +interface Loopback186 + ip address 172.10.1.186/32 +! +interface Loopback187 + ip address 172.10.1.187/32 +! +interface Loopback188 + ip address 172.10.1.188/32 +! +interface Loopback189 + ip address 172.10.1.189/32 +! +interface Loopback190 + ip address 172.10.1.190/32 +! +interface Loopback191 + ip address 172.10.1.191/32 +! +interface Loopback192 + ip address 172.10.1.192/32 +! +interface Loopback193 + ip address 172.10.1.193/32 +! +interface Loopback194 + ip address 172.10.1.194/32 +! +interface Loopback195 + ip address 172.10.1.195/32 +! +interface Loopback196 + ip address 172.10.1.196/32 +! +interface Loopback197 + ip address 172.10.1.197/32 +! +interface Loopback198 + ip address 172.10.1.198/32 +! +interface Loopback199 + ip address 172.10.1.199/32 +! +ip prefix-list local-LOOP + seq 10 permit 172.10.1.0/24 ge 32 + seq 20 permit 10.32.32.32/32 ge 32 +! +route-map redist-LOOP permit 10 + match ip address prefix-list local-LOOP +! +router bgp 65500 + router-id 10.32.32.32 + maximum-paths 4 ecmp 4 + neighbor spines peer group + neighbor spines remote-as 65100 + neighbor 172.16.2.2 peer group spines + neighbor 172.16.2.6 peer group spines + neighbor 172.16.2.10 peer group spines + redistribute connected route-map redist-LOOP +! \ No newline at end of file diff --git a/topologies/training-level3/configlets/Host-1-AAMH-Begin b/topologies/training-level3/configlets/Host-1-AAMH-Begin new file mode 100644 index 000000000..1923314d7 --- /dev/null +++ b/topologies/training-level3/configlets/Host-1-AAMH-Begin @@ -0,0 +1,25 @@ +! +vlan 101,201 +! +interface Ethernet1 + switchport access vlan 101 +! +interface Ethernet2 + switchport access vlan 201 +! +interface Ethernet3 + shutdown +! +interface Ethernet4 + shutdown +! +interface Vlan101 + no autostate + ip address 192.168.101.1/24 +! +interface Vlan201 + no autostate + ip address 192.168.201.1/24 +! +ip route 192.168.202.0/24 192.168.201.254 +! diff --git a/topologies/training-level3/configlets/Host-1-IP-Address b/topologies/training-level3/configlets/Host-1-IP-Address new file mode 100644 index 000000000..8e210c1b3 --- /dev/null +++ b/topologies/training-level3/configlets/Host-1-IP-Address @@ -0,0 +1,23 @@ +! +vlan 101,201 +! +interface Ethernet1 + switchport access vlan 101 +! +interface Ethernet2 + switchport access vlan 201 +! +interface Ethernet3 + shutdown +! +interface Ethernet4 + shutdown +! +interface Vlan101 + no autostate + ip address 192.168.101.1/24 +! +interface Vlan201 + no autostate + ip address 192.168.201.1/24 +! \ No newline at end of file diff --git a/topologies/training-level3/configlets/Host-1-L2EVPN-Begin b/topologies/training-level3/configlets/Host-1-L2EVPN-Begin new file mode 100644 index 000000000..8e210c1b3 --- /dev/null +++ b/topologies/training-level3/configlets/Host-1-L2EVPN-Begin @@ -0,0 +1,23 @@ +! +vlan 101,201 +! +interface Ethernet1 + switchport access vlan 101 +! +interface Ethernet2 + switchport access vlan 201 +! +interface Ethernet3 + shutdown +! +interface Ethernet4 + shutdown +! +interface Vlan101 + no autostate + ip address 192.168.101.1/24 +! +interface Vlan201 + no autostate + ip address 192.168.201.1/24 +! \ No newline at end of file diff --git a/topologies/training-level3/configlets/Host-1-L3EVPN-Begin b/topologies/training-level3/configlets/Host-1-L3EVPN-Begin new file mode 100644 index 000000000..8e210c1b3 --- /dev/null +++ b/topologies/training-level3/configlets/Host-1-L3EVPN-Begin @@ -0,0 +1,23 @@ +! +vlan 101,201 +! +interface Ethernet1 + switchport access vlan 101 +! +interface Ethernet2 + switchport access vlan 201 +! +interface Ethernet3 + shutdown +! +interface Ethernet4 + shutdown +! +interface Vlan101 + no autostate + ip address 192.168.101.1/24 +! +interface Vlan201 + no autostate + ip address 192.168.201.1/24 +! \ No newline at end of file diff --git a/topologies/training-level3/configlets/Host-1-PIM-Begin b/topologies/training-level3/configlets/Host-1-PIM-Begin new file mode 100644 index 000000000..39c20df89 --- /dev/null +++ b/topologies/training-level3/configlets/Host-1-PIM-Begin @@ -0,0 +1,34 @@ +! +vlan 101,201,301 +! +interface Ethernet1 + switchport access vlan 101 +! +interface Ethernet2 + switchport access vlan 201 +! +interface Ethernet3 + channel-group 1 mode active + no shutdown +! +interface Ethernet4 + channel-group 1 mode active + no shutdown +! +interface po1 + switchport access vlan 301 +! +int vlan 301 + no autostate + ip address 192.168.30.1/24 +! +interface Vlan101 + no autostate + ip address 192.168.101.1/24 +! +interface Vlan201 + no autostate + ip address 192.168.201.1/24 +! +ip route 192.168.202.0/24 192.168.201.254 +! diff --git a/topologies/training-level3/configlets/Host-1-VXLAN-Begin b/topologies/training-level3/configlets/Host-1-VXLAN-Begin new file mode 100644 index 000000000..8e210c1b3 --- /dev/null +++ b/topologies/training-level3/configlets/Host-1-VXLAN-Begin @@ -0,0 +1,23 @@ +! +vlan 101,201 +! +interface Ethernet1 + switchport access vlan 101 +! +interface Ethernet2 + switchport access vlan 201 +! +interface Ethernet3 + shutdown +! +interface Ethernet4 + shutdown +! +interface Vlan101 + no autostate + ip address 192.168.101.1/24 +! +interface Vlan201 + no autostate + ip address 192.168.201.1/24 +! \ No newline at end of file diff --git a/topologies/training-level3/configlets/Host-2-AAMH-Begin b/topologies/training-level3/configlets/Host-2-AAMH-Begin new file mode 100644 index 000000000..ca6956782 --- /dev/null +++ b/topologies/training-level3/configlets/Host-2-AAMH-Begin @@ -0,0 +1,30 @@ +! +vlan 101,201-202 +! +interface Ethernet1 + switchport access vlan 101 +! +interface Ethernet2 + switchport access vlan 202 +! +interface Ethernet3 + shutdown +! +interface Ethernet4 + shutdown +! +interface Vlan101 + no autostate + ip address 192.168.101.2/24 +! +interface Vlan201 + no autostate + ip address 192.168.201.2/24 + shut +! +interface Vlan202 + no autostate + ip address 192.168.202.1/24 +! +ip route 192.168.201.0/24 192.168.202.254 +! \ No newline at end of file diff --git a/topologies/training-level3/configlets/Host-2-IP-Address b/topologies/training-level3/configlets/Host-2-IP-Address new file mode 100644 index 000000000..0cc8b2128 --- /dev/null +++ b/topologies/training-level3/configlets/Host-2-IP-Address @@ -0,0 +1,23 @@ +! +vlan 101,201 +! +interface Ethernet1 + switchport access vlan 101 +! +interface Ethernet2 + switchport access vlan 201 +! +interface Ethernet3 + shutdown +! +interface Ethernet4 + shutdown +! +interface Vlan101 + no autostate + ip address 192.168.101.2/24 +! +interface Vlan201 + no autostate + ip address 192.168.201.2/24 +! \ No newline at end of file diff --git a/topologies/training-level3/configlets/Host-2-L2EVPN-Begin b/topologies/training-level3/configlets/Host-2-L2EVPN-Begin new file mode 100644 index 000000000..0cc8b2128 --- /dev/null +++ b/topologies/training-level3/configlets/Host-2-L2EVPN-Begin @@ -0,0 +1,23 @@ +! +vlan 101,201 +! +interface Ethernet1 + switchport access vlan 101 +! +interface Ethernet2 + switchport access vlan 201 +! +interface Ethernet3 + shutdown +! +interface Ethernet4 + shutdown +! +interface Vlan101 + no autostate + ip address 192.168.101.2/24 +! +interface Vlan201 + no autostate + ip address 192.168.201.2/24 +! \ No newline at end of file diff --git a/topologies/training-level3/configlets/Host-2-L3EVPN-Begin b/topologies/training-level3/configlets/Host-2-L3EVPN-Begin new file mode 100644 index 000000000..0cc8b2128 --- /dev/null +++ b/topologies/training-level3/configlets/Host-2-L3EVPN-Begin @@ -0,0 +1,23 @@ +! +vlan 101,201 +! +interface Ethernet1 + switchport access vlan 101 +! +interface Ethernet2 + switchport access vlan 201 +! +interface Ethernet3 + shutdown +! +interface Ethernet4 + shutdown +! +interface Vlan101 + no autostate + ip address 192.168.101.2/24 +! +interface Vlan201 + no autostate + ip address 192.168.201.2/24 +! \ No newline at end of file diff --git a/topologies/training-level3/configlets/Host-2-PIM-Begin b/topologies/training-level3/configlets/Host-2-PIM-Begin new file mode 100644 index 000000000..40859ddfa --- /dev/null +++ b/topologies/training-level3/configlets/Host-2-PIM-Begin @@ -0,0 +1,39 @@ +! +vlan 101,201-202,301 +! +interface Ethernet1 + switchport access vlan 101 +! +interface Ethernet2 + switchport access vlan 202 +! +interface Ethernet3 + channel-group 1 mode active + no shutdown +! +interface Ethernet4 + channel-group 1 mode active + no shutdown +! +interface po1 + switchport access vlan 301 +! +int vlan 301 + ip address 192.168.30.2/24 + no autostate +! +interface Vlan101 + no autostate + ip address 192.168.101.2/24 +! +interface Vlan201 + no autostate + ip address 192.168.201.2/24 + shut +! +interface Vlan202 + no autostate + ip address 192.168.202.1/24 +! +ip route 192.168.201.0/24 192.168.202.254 +! \ No newline at end of file diff --git a/topologies/training-level3/configlets/Host-2-VXLAN-Begin b/topologies/training-level3/configlets/Host-2-VXLAN-Begin new file mode 100644 index 000000000..0cc8b2128 --- /dev/null +++ b/topologies/training-level3/configlets/Host-2-VXLAN-Begin @@ -0,0 +1,23 @@ +! +vlan 101,201 +! +interface Ethernet1 + switchport access vlan 101 +! +interface Ethernet2 + switchport access vlan 201 +! +interface Ethernet3 + shutdown +! +interface Ethernet4 + shutdown +! +interface Vlan101 + no autostate + ip address 192.168.101.2/24 +! +interface Vlan201 + no autostate + ip address 192.168.201.2/24 +! \ No newline at end of file diff --git a/topologies/training-level3/configlets/Leaf-1-AAMH-Begin b/topologies/training-level3/configlets/Leaf-1-AAMH-Begin new file mode 100644 index 000000000..c9a0b4a1c --- /dev/null +++ b/topologies/training-level3/configlets/Leaf-1-AAMH-Begin @@ -0,0 +1,80 @@ +hostname leaf1 +! +vlan 101,201 +! +interface Ethernet1 +! +interface Ethernet2 +! +interface Ethernet3 + no switchport + ip address 10.10.1.2/30 +! +interface Ethernet4 + no switchport + ip address 10.10.2.2/30 +! +interface Ethernet5 + no switchport + ip address 10.10.3.2/30 +! +interface Ethernet6 + switchport access vlan 101 +! +interface Ethernet7 +! +interface Loopback0 + ip address 10.11.11.11/32 +! +interface Vlan101 + no autostate + ip address 172.16.101.1/24 +! +! +interface vxlan1 + vxlan source-interface Loopback0 + vxlan vlan 101 vni 10101 +! +! +ip routing +! +ip prefix-list deny-management + seq 10 deny 192.168.0.0/24 ge 24 + seq 20 permit 0.0.0.0/0 le 32 +! +route-map deny-management permit 10 + match ip address prefix-list deny-management +! +router bgp 65001 + router-id 10.11.11.11 + no bgp default ipv4-unicast + maximum-paths 4 ecmp 4 + neighbor EVPN-OVERLAY peer group + neighbor EVPN-OVERLAY remote-as 65100 + neighbor EVPN-OVERLAY update-source Loopback0 + neighbor EVPN-OVERLAY bfd + neighbor EVPN-OVERLAY ebgp-multihop 2 + neighbor EVPN-OVERLAY send-community + neighbor EVPN-OVERLAY maximum-routes 0 + neighbor eBGP-Spine-Underlay peer group + neighbor eBGP-Spine-Underlay remote-as 65100 + neighbor 10.10.1.1 peer group eBGP-Spine-Underlay + neighbor 10.10.2.1 peer group eBGP-Spine-Underlay + neighbor 10.10.3.1 peer group eBGP-Spine-Underlay + neighbor 10.21.21.21 peer group EVPN-OVERLAY + neighbor 10.22.22.22 peer group EVPN-OVERLAY + neighbor 10.23.23.23 peer group EVPN-OVERLAY + ! + vlan-aware-bundle leafvlans + rd 10.11.11.11:1 + route-target both 1:1 + redistribute learned + vlan 101,201 + ! + address-family evpn + neighbor EVPN-OVERLAY activate + ! + address-family ipv4 + neighbor eBGP-Spine-Underlay activate + redistribute connected route-map deny-management +! \ No newline at end of file diff --git a/topologies/training-level3/configlets/Leaf-1-IP-Address b/topologies/training-level3/configlets/Leaf-1-IP-Address new file mode 100644 index 000000000..16f756364 --- /dev/null +++ b/topologies/training-level3/configlets/Leaf-1-IP-Address @@ -0,0 +1,32 @@ +hostname leaf1 +! +vlan 101 +! +interface Ethernet1 +! +interface Ethernet2 +! +interface Ethernet3 + no switchport + ip address 10.10.1.2/30 +! +interface Ethernet4 + no switchport + ip address 10.10.2.2/30 +! +interface Ethernet5 + no switchport + ip address 10.10.3.2/30 +! +interface Ethernet6 + switchport access vlan 101 +! +interface Ethernet7 +! +interface Loopback0 + ip address 10.11.11.11/32 +! +interface Vlan101 + no autostate + ip address 172.16.101.1/24 +! diff --git a/topologies/training-level3/configlets/Leaf-1-L2EVPN-Begin b/topologies/training-level3/configlets/Leaf-1-L2EVPN-Begin new file mode 100644 index 000000000..2f3109ee7 --- /dev/null +++ b/topologies/training-level3/configlets/Leaf-1-L2EVPN-Begin @@ -0,0 +1,62 @@ +hostname leaf1 +! +vlan 101 +! +interface Ethernet1 +! +interface Ethernet2 +! +interface Ethernet3 + no switchport + ip address 10.10.1.2/30 +! +interface Ethernet4 + no switchport + ip address 10.10.2.2/30 +! +interface Ethernet5 + no switchport + ip address 10.10.3.2/30 +! +interface Ethernet6 + switchport access vlan 101 +! +interface Ethernet7 +! +interface Loopback0 + ip address 10.11.11.11/32 +! +interface Vlan101 + no autostate + ip address 172.16.101.1/24 +! +! +interface vxlan1 + vxlan source-interface Loopback0 + vxlan vlan 101 vni 10101 + vxlan vlan 101 flood vtep 10.13.13.13 +! +! +ip routing +! +ip prefix-list deny-management + seq 10 deny 192.168.0.0/24 ge 24 + seq 20 permit 0.0.0.0/0 le 32 +! +route-map deny-management permit 10 + match ip address prefix-list deny-management +! +router bgp 65001 + router-id 10.11.11.11 + no bgp default ipv4-unicast + maximum-paths 4 ecmp 4 + neighbor eBGP-Spine-Underlay peer group + neighbor eBGP-Spine-Underlay remote-as 65100 + neighbor 10.10.1.1 peer group eBGP-Spine-Underlay + neighbor 10.10.2.1 peer group eBGP-Spine-Underlay + neighbor 10.10.3.1 peer group eBGP-Spine-Underlay + ! + address-family ipv4 + neighbor eBGP-Spine-Underlay activate + redistribute connected route-map deny-management +! \ No newline at end of file diff --git a/topologies/training-level3/configlets/Leaf-1-L3EVPN-Begin b/topologies/training-level3/configlets/Leaf-1-L3EVPN-Begin new file mode 100644 index 000000000..c9a0b4a1c --- /dev/null +++ b/topologies/training-level3/configlets/Leaf-1-L3EVPN-Begin @@ -0,0 +1,80 @@ +hostname leaf1 +! +vlan 101,201 +! +interface Ethernet1 +! +interface Ethernet2 +! +interface Ethernet3 + no switchport + ip address 10.10.1.2/30 +! +interface Ethernet4 + no switchport + ip address 10.10.2.2/30 +! +interface Ethernet5 + no switchport + ip address 10.10.3.2/30 +! +interface Ethernet6 + switchport access vlan 101 +! +interface Ethernet7 +! +interface Loopback0 + ip address 10.11.11.11/32 +! +interface Vlan101 + no autostate + ip address 172.16.101.1/24 +! +! +interface vxlan1 + vxlan source-interface Loopback0 + vxlan vlan 101 vni 10101 +! +! +ip routing +! +ip prefix-list deny-management + seq 10 deny 192.168.0.0/24 ge 24 + seq 20 permit 0.0.0.0/0 le 32 +! +route-map deny-management permit 10 + match ip address prefix-list deny-management +! +router bgp 65001 + router-id 10.11.11.11 + no bgp default ipv4-unicast + maximum-paths 4 ecmp 4 + neighbor EVPN-OVERLAY peer group + neighbor EVPN-OVERLAY remote-as 65100 + neighbor EVPN-OVERLAY update-source Loopback0 + neighbor EVPN-OVERLAY bfd + neighbor EVPN-OVERLAY ebgp-multihop 2 + neighbor EVPN-OVERLAY send-community + neighbor EVPN-OVERLAY maximum-routes 0 + neighbor eBGP-Spine-Underlay peer group + neighbor eBGP-Spine-Underlay remote-as 65100 + neighbor 10.10.1.1 peer group eBGP-Spine-Underlay + neighbor 10.10.2.1 peer group eBGP-Spine-Underlay + neighbor 10.10.3.1 peer group eBGP-Spine-Underlay + neighbor 10.21.21.21 peer group EVPN-OVERLAY + neighbor 10.22.22.22 peer group EVPN-OVERLAY + neighbor 10.23.23.23 peer group EVPN-OVERLAY + ! + vlan-aware-bundle leafvlans + rd 10.11.11.11:1 + route-target both 1:1 + redistribute learned + vlan 101,201 + ! + address-family evpn + neighbor EVPN-OVERLAY activate + ! + address-family ipv4 + neighbor eBGP-Spine-Underlay activate + redistribute connected route-map deny-management +! \ No newline at end of file diff --git a/topologies/training-level3/configlets/Leaf-1-PIM-Begin b/topologies/training-level3/configlets/Leaf-1-PIM-Begin new file mode 100644 index 000000000..38239139d --- /dev/null +++ b/topologies/training-level3/configlets/Leaf-1-PIM-Begin @@ -0,0 +1,90 @@ +hostname leaf1 +! +vlan 101,201,301 +! +interface Ethernet1 +! +interface Ethernet2 +! +interface Ethernet3 + no switchport + ip address 10.10.1.2/30 +! +interface Ethernet4 + no switchport + ip address 10.10.2.2/30 +! +interface Ethernet5 + no switchport + ip address 10.10.3.2/30 +! +interface Ethernet6 + switchport access vlan 101 +! +interface Ethernet7 + no shut + channel-group 1 mode active +! +interface po1 + switchport access vlan 301 + lacp system-id 0000.0000.aaaa + evpn ethernet-segment + identifier 00a2:b97c:4cac:0300:0000 + route-target import 001c.73cd.693d +! +interface Loopback0 + ip address 10.11.11.11/32 +! +interface Vlan101 + no autostate + ip address 172.16.101.1/24 +! +! +interface vxlan1 + vxlan source-interface Loopback0 + vxlan vlan 101 vni 10101 + vxlan vlan 301 vni 30303 +! +! +ip routing +! +ip prefix-list deny-management + seq 10 deny 192.168.0.0/24 ge 24 + seq 20 permit 0.0.0.0/0 le 32 +! +route-map deny-management permit 10 + match ip address prefix-list deny-management +! +router bgp 65001 + router-id 10.11.11.11 + no bgp default ipv4-unicast + maximum-paths 4 ecmp 4 + neighbor EVPN-OVERLAY peer group + neighbor EVPN-OVERLAY remote-as 65100 + neighbor EVPN-OVERLAY update-source Loopback0 + neighbor EVPN-OVERLAY bfd + neighbor EVPN-OVERLAY ebgp-multihop 2 + neighbor EVPN-OVERLAY send-community + neighbor EVPN-OVERLAY maximum-routes 0 + neighbor eBGP-Spine-Underlay peer group + neighbor eBGP-Spine-Underlay remote-as 65100 + neighbor 10.10.1.1 peer group eBGP-Spine-Underlay + neighbor 10.10.2.1 peer group eBGP-Spine-Underlay + neighbor 10.10.3.1 peer group eBGP-Spine-Underlay + neighbor 10.21.21.21 peer group EVPN-OVERLAY + neighbor 10.22.22.22 peer group EVPN-OVERLAY + neighbor 10.23.23.23 peer group EVPN-OVERLAY + ! + vlan-aware-bundle leafvlans + rd 10.11.11.11:1 + route-target both 1:1 + redistribute learned + vlan 101,201,301 + ! + address-family evpn + neighbor EVPN-OVERLAY activate + ! + address-family ipv4 + neighbor eBGP-Spine-Underlay activate + redistribute connected route-map deny-management +! \ No newline at end of file diff --git a/topologies/training-level3/configlets/Leaf-1-VXLAN-Begin b/topologies/training-level3/configlets/Leaf-1-VXLAN-Begin new file mode 100644 index 000000000..3b9809d10 --- /dev/null +++ b/topologies/training-level3/configlets/Leaf-1-VXLAN-Begin @@ -0,0 +1,55 @@ +hostname leaf1 +! +vlan 101 +! +interface Ethernet1 +! +interface Ethernet2 +! +interface Ethernet3 + no switchport + ip address 10.10.1.2/30 +! +interface Ethernet4 + no switchport + ip address 10.10.2.2/30 +! +interface Ethernet5 + no switchport + ip address 10.10.3.2/30 +! +interface Ethernet6 + switchport access vlan 101 +! +interface Ethernet7 +! +interface Loopback0 + ip address 10.11.11.11/32 +! +interface Vlan101 + no autostate + ip address 172.16.101.1/24 +! +ip routing +! +ip prefix-list deny-management + seq 10 deny 192.168.0.0/24 ge 24 + seq 20 permit 0.0.0.0/0 le 32 +! +route-map deny-management permit 10 + match ip address prefix-list deny-management +! +router bgp 65001 + router-id 10.11.11.11 + no bgp default ipv4-unicast + maximum-paths 4 ecmp 4 + neighbor eBGP-Spine-Underlay peer group + neighbor eBGP-Spine-Underlay remote-as 65100 + neighbor 10.10.1.1 peer group eBGP-Spine-Underlay + neighbor 10.10.2.1 peer group eBGP-Spine-Underlay + neighbor 10.10.3.1 peer group eBGP-Spine-Underlay + ! + address-family ipv4 + neighbor eBGP-Spine-Underlay activate + redistribute connected route-map deny-management +! \ No newline at end of file diff --git a/topologies/training-level3/configlets/Leaf-2-AAMH-Begin b/topologies/training-level3/configlets/Leaf-2-AAMH-Begin new file mode 100644 index 000000000..d5a53bc09 --- /dev/null +++ b/topologies/training-level3/configlets/Leaf-2-AAMH-Begin @@ -0,0 +1,95 @@ +hostname leaf2 +! +vlan 101-102,201 +! +vrf instance tenant-201 +ip routing vrf tenant-201 +! +interface Ethernet1 +! +interface Ethernet2 +! +interface Ethernet3 + no switchport + ip address 10.10.1.6/30 +! +interface Ethernet4 + no switchport + ip address 10.10.2.6/30 +! +interface Ethernet5 + no switchport + ip address 10.10.3.6/30 +! +interface Ethernet6 + no switchport + vrf tenant-201 + ip address 192.168.201.254/24 +! +interface Ethernet7 +! +interface Loopback0 + ip address 10.12.12.12/32 +! +interface Vlan102 + no autostate + ip address 172.16.102.1/24 +! +! +int vxlan 1 + vxlan source-interface Loopback0 + vxlan udp-port 4789 + vxlan vlan 101 vni 10101 + vxlan vlan 201 vni 20202 + vxlan vrf tenant-201 vni 2222 +! +! +ip routing +! +ip prefix-list deny-management + seq 10 deny 192.168.0.0/24 ge 24 + seq 20 permit 0.0.0.0/0 le 32 +! +route-map deny-management permit 10 + match ip address prefix-list deny-management +! +router bgp 65002 + router-id 10.12.12.12 + no bgp default ipv4-unicast + maximum-paths 4 ecmp 4 + neighbor EVPN-OVERLAY peer group + neighbor EVPN-OVERLAY remote-as 65100 + neighbor EVPN-OVERLAY update-source Loopback0 + neighbor EVPN-OVERLAY bfd + neighbor EVPN-OVERLAY ebgp-multihop 2 + neighbor EVPN-OVERLAY send-community + neighbor EVPN-OVERLAY maximum-routes 0 + neighbor eBGP-Spine-Underlay peer group + neighbor eBGP-Spine-Underlay remote-as 65100 + neighbor 10.10.1.5 peer group eBGP-Spine-Underlay + neighbor 10.10.2.5 peer group eBGP-Spine-Underlay + neighbor 10.10.3.5 peer group eBGP-Spine-Underlay + neighbor 10.21.21.21 peer group EVPN-OVERLAY + neighbor 10.22.22.22 peer group EVPN-OVERLAY + neighbor 10.23.23.23 peer group EVPN-OVERLAY + ! + vlan-aware-bundle leafvlans + rd 10.12.12.12:1 + route-target both 1:1 + redistribute learned + vlan 101,201 + ! + vrf tenant-201 + rd 10.12.12.12:2222 + route-target import evpn 202:2222 + route-target export evpn 202:2222 + redistribute connected + redistribute static + ! + address-family evpn + neighbor EVPN-OVERLAY activate + ! + address-family ipv4 + neighbor eBGP-Spine-Underlay activate + redistribute connected route-map deny-management +! \ No newline at end of file diff --git a/topologies/training-level3/configlets/Leaf-2-IP-Address b/topologies/training-level3/configlets/Leaf-2-IP-Address new file mode 100644 index 000000000..4cee97133 --- /dev/null +++ b/topologies/training-level3/configlets/Leaf-2-IP-Address @@ -0,0 +1,32 @@ +hostname leaf2 +! +vlan 102,201 +! +interface Ethernet1 +! +interface Ethernet2 +! +interface Ethernet3 + no switchport + ip address 10.10.1.6/30 +! +interface Ethernet4 + no switchport + ip address 10.10.2.6/30 +! +interface Ethernet5 + no switchport + ip address 10.10.3.6/30 +! +interface Ethernet6 + switchport access vlan 201 +! +interface Ethernet7 +! +interface Loopback0 + ip address 10.12.12.12/32 +! +interface Vlan102 + no autostate + ip address 172.16.102.1/24 +! diff --git a/topologies/training-level3/configlets/Leaf-2-L2EVPN-Begin b/topologies/training-level3/configlets/Leaf-2-L2EVPN-Begin new file mode 100644 index 000000000..af0351a2c --- /dev/null +++ b/topologies/training-level3/configlets/Leaf-2-L2EVPN-Begin @@ -0,0 +1,62 @@ +hostname leaf2 +! +vlan 102,201 +! +interface Ethernet1 +! +interface Ethernet2 +! +interface Ethernet3 + no switchport + ip address 10.10.1.6/30 +! +interface Ethernet4 + no switchport + ip address 10.10.2.6/30 +! +interface Ethernet5 + no switchport + ip address 10.10.3.6/30 +! +interface Ethernet6 + switchport access vlan 201 +! +interface Ethernet7 +! +interface Loopback0 + ip address 10.12.12.12/32 +! +interface Vlan102 + no autostate + ip address 172.16.102.1/24 +! +! +int vxlan 1 + vxlan source-interface loopback 0 + vxlan vlan 201 vni 20202 + vxlan vlan 201 flood vtep 10.14.14.14 +! +! +ip routing +! +ip prefix-list deny-management + seq 10 deny 192.168.0.0/24 ge 24 + seq 20 permit 0.0.0.0/0 le 32 +! +route-map deny-management permit 10 + match ip address prefix-list deny-management +! +router bgp 65002 + router-id 10.12.12.12 + no bgp default ipv4-unicast + maximum-paths 4 ecmp 4 + neighbor eBGP-Spine-Underlay peer group + neighbor eBGP-Spine-Underlay remote-as 65100 + neighbor 10.10.1.5 peer group eBGP-Spine-Underlay + neighbor 10.10.2.5 peer group eBGP-Spine-Underlay + neighbor 10.10.3.5 peer group eBGP-Spine-Underlay + ! + address-family ipv4 + neighbor eBGP-Spine-Underlay activate + redistribute connected route-map deny-management +! \ No newline at end of file diff --git a/topologies/training-level3/configlets/Leaf-2-L3EVPN-Begin b/topologies/training-level3/configlets/Leaf-2-L3EVPN-Begin new file mode 100644 index 000000000..0b264c62b --- /dev/null +++ b/topologies/training-level3/configlets/Leaf-2-L3EVPN-Begin @@ -0,0 +1,80 @@ +hostname leaf2 +! +vlan 101,102,201 +! +interface Ethernet1 +! +interface Ethernet2 +! +interface Ethernet3 + no switchport + ip address 10.10.1.6/30 +! +interface Ethernet4 + no switchport + ip address 10.10.2.6/30 +! +interface Ethernet5 + no switchport + ip address 10.10.3.6/30 +! +interface Ethernet6 + switchport access vlan 201 +! +interface Ethernet7 +! +interface Loopback0 + ip address 10.12.12.12/32 +! +interface Vlan102 + no autostate + ip address 172.16.102.1/24 +! +! +int vxlan 1 + vxlan source-interface loopback 0 + vxlan vlan 201 vni 20202 +! +! +ip routing +! +ip prefix-list deny-management + seq 10 deny 192.168.0.0/24 ge 24 + seq 20 permit 0.0.0.0/0 le 32 +! +route-map deny-management permit 10 + match ip address prefix-list deny-management +! +router bgp 65002 + router-id 10.12.12.12 + no bgp default ipv4-unicast + maximum-paths 4 ecmp 4 + neighbor EVPN-OVERLAY peer group + neighbor EVPN-OVERLAY remote-as 65100 + neighbor EVPN-OVERLAY update-source Loopback0 + neighbor EVPN-OVERLAY bfd + neighbor EVPN-OVERLAY ebgp-multihop 2 + neighbor EVPN-OVERLAY send-community + neighbor EVPN-OVERLAY maximum-routes 0 + neighbor eBGP-Spine-Underlay peer group + neighbor eBGP-Spine-Underlay remote-as 65100 + neighbor 10.10.1.5 peer group eBGP-Spine-Underlay + neighbor 10.10.2.5 peer group eBGP-Spine-Underlay + neighbor 10.10.3.5 peer group eBGP-Spine-Underlay + neighbor 10.21.21.21 peer group EVPN-OVERLAY + neighbor 10.22.22.22 peer group EVPN-OVERLAY + neighbor 10.23.23.23 peer group EVPN-OVERLAY + ! + vlan-aware-bundle leafvlans + rd 10.12.12.12:1 + route-target both 1:1 + redistribute learned + vlan 101,201 + ! + address-family evpn + neighbor EVPN-OVERLAY activate + ! + address-family ipv4 + neighbor eBGP-Spine-Underlay activate + redistribute connected route-map deny-management +! \ No newline at end of file diff --git a/topologies/training-level3/configlets/Leaf-2-PIM-Begin b/topologies/training-level3/configlets/Leaf-2-PIM-Begin new file mode 100644 index 000000000..50bc73765 --- /dev/null +++ b/topologies/training-level3/configlets/Leaf-2-PIM-Begin @@ -0,0 +1,105 @@ +hostname leaf2 +! +vlan 101-102,201,301 +! +vrf instance tenant-201 +ip routing vrf tenant-201 +! +interface Ethernet1 +! +interface Ethernet2 +! +interface Ethernet3 + no switchport + ip address 10.10.1.6/30 +! +interface Ethernet4 + no switchport + ip address 10.10.2.6/30 +! +interface Ethernet5 + no switchport + ip address 10.10.3.6/30 +! +interface Ethernet6 + no switchport + vrf tenant-201 + ip address 192.168.201.254/24 +! +interface Ethernet7 + no shut + channel-group 1 mode active +! +interface po1 + switchport access vlan 301 + lacp system-id 0000.0000.aaaa + evpn ethernet-segment + identifier 00a2:b97c:4cac:0300:0000 + route-target import 001c.73cd.693d +! +interface Loopback0 + ip address 10.12.12.12/32 +! +interface Vlan102 + no autostate + ip address 172.16.102.1/24 +! +! +int vxlan 1 + vxlan source-interface Loopback0 + vxlan udp-port 4789 + vxlan vlan 101 vni 10101 + vxlan vlan 201 vni 20202 + vxlan vlan 301 vni 30303 + vxlan vrf tenant-201 vni 2222 +! +! +ip routing +! +ip prefix-list deny-management + seq 10 deny 192.168.0.0/24 ge 24 + seq 20 permit 0.0.0.0/0 le 32 +! +route-map deny-management permit 10 + match ip address prefix-list deny-management +! +router bgp 65002 + router-id 10.12.12.12 + no bgp default ipv4-unicast + maximum-paths 4 ecmp 4 + neighbor EVPN-OVERLAY peer group + neighbor EVPN-OVERLAY remote-as 65100 + neighbor EVPN-OVERLAY update-source Loopback0 + neighbor EVPN-OVERLAY bfd + neighbor EVPN-OVERLAY ebgp-multihop 2 + neighbor EVPN-OVERLAY send-community + neighbor EVPN-OVERLAY maximum-routes 0 + neighbor eBGP-Spine-Underlay peer group + neighbor eBGP-Spine-Underlay remote-as 65100 + neighbor 10.10.1.5 peer group eBGP-Spine-Underlay + neighbor 10.10.2.5 peer group eBGP-Spine-Underlay + neighbor 10.10.3.5 peer group eBGP-Spine-Underlay + neighbor 10.21.21.21 peer group EVPN-OVERLAY + neighbor 10.22.22.22 peer group EVPN-OVERLAY + neighbor 10.23.23.23 peer group EVPN-OVERLAY + ! + vlan-aware-bundle leafvlans + rd 10.12.12.12:1 + route-target both 1:1 + redistribute learned + vlan 101,201,301 + ! + vrf tenant-201 + rd 10.12.12.12:2222 + route-target import evpn 202:2222 + route-target export evpn 202:2222 + redistribute connected + redistribute static + ! + address-family evpn + neighbor EVPN-OVERLAY activate + ! + address-family ipv4 + neighbor eBGP-Spine-Underlay activate + redistribute connected route-map deny-management +! \ No newline at end of file diff --git a/topologies/training-level3/configlets/Leaf-2-VXLAN-Begin b/topologies/training-level3/configlets/Leaf-2-VXLAN-Begin new file mode 100644 index 000000000..295b68704 --- /dev/null +++ b/topologies/training-level3/configlets/Leaf-2-VXLAN-Begin @@ -0,0 +1,55 @@ +hostname leaf2 +! +vlan 102,201 +! +interface Ethernet1 +! +interface Ethernet2 +! +interface Ethernet3 + no switchport + ip address 10.10.1.6/30 +! +interface Ethernet4 + no switchport + ip address 10.10.2.6/30 +! +interface Ethernet5 + no switchport + ip address 10.10.3.6/30 +! +interface Ethernet6 + switchport access vlan 201 +! +interface Ethernet7 +! +interface Loopback0 + ip address 10.12.12.12/32 +! +interface Vlan102 + no autostate + ip address 172.16.102.1/24 +! +ip routing +! +ip prefix-list deny-management + seq 10 deny 192.168.0.0/24 ge 24 + seq 20 permit 0.0.0.0/0 le 32 +! +route-map deny-management permit 10 + match ip address prefix-list deny-management +! +router bgp 65002 + router-id 10.12.12.12 + no bgp default ipv4-unicast + maximum-paths 4 ecmp 4 + neighbor eBGP-Spine-Underlay peer group + neighbor eBGP-Spine-Underlay remote-as 65100 + neighbor 10.10.1.5 peer group eBGP-Spine-Underlay + neighbor 10.10.2.5 peer group eBGP-Spine-Underlay + neighbor 10.10.3.5 peer group eBGP-Spine-Underlay + ! + address-family ipv4 + neighbor eBGP-Spine-Underlay activate + redistribute connected route-map deny-management +! \ No newline at end of file diff --git a/topologies/training-level3/configlets/Leaf-3-AAMH-Begin b/topologies/training-level3/configlets/Leaf-3-AAMH-Begin new file mode 100644 index 000000000..e16d28624 --- /dev/null +++ b/topologies/training-level3/configlets/Leaf-3-AAMH-Begin @@ -0,0 +1,80 @@ +hostname leaf3 +! +vlan 101,103,201 +! +interface Ethernet1 +! +interface Ethernet2 +! +interface Ethernet3 + no switchport + ip address 10.10.1.10/30 +! +interface Ethernet4 + no switchport + ip address 10.10.2.10/30 +! +interface Ethernet5 + no switchport + ip address 10.10.3.10/30 +! +interface Ethernet6 + switchport access vlan 101 +! +interface Ethernet7 +! +interface Loopback0 + ip address 10.13.13.13/32 +! +interface Vlan103 + no autostate + ip address 172.16.103.1/24 +! +! +interface vxlan1 + vxlan source-interface Loopback0 + vxlan vlan 101 vni 10101 +! +! +ip routing +! +ip prefix-list deny-management + seq 10 deny 192.168.0.0/24 ge 24 + seq 20 permit 0.0.0.0/0 le 32 +! +route-map deny-management permit 10 + match ip address prefix-list deny-management +! +router bgp 65003 + router-id 10.13.13.13 + no bgp default ipv4-unicast + maximum-paths 4 ecmp 4 + neighbor EVPN-OVERLAY peer group + neighbor EVPN-OVERLAY remote-as 65100 + neighbor EVPN-OVERLAY update-source Loopback0 + neighbor EVPN-OVERLAY bfd + neighbor EVPN-OVERLAY ebgp-multihop 2 + neighbor EVPN-OVERLAY send-community + neighbor EVPN-OVERLAY maximum-routes 0 + neighbor eBGP-Spine-Underlay peer group + neighbor eBGP-Spine-Underlay remote-as 65100 + neighbor 10.10.1.9 peer group eBGP-Spine-Underlay + neighbor 10.10.2.9 peer group eBGP-Spine-Underlay + neighbor 10.10.3.9 peer group eBGP-Spine-Underlay + neighbor 10.21.21.21 peer group EVPN-OVERLAY + neighbor 10.22.22.22 peer group EVPN-OVERLAY + neighbor 10.23.23.23 peer group EVPN-OVERLAY + ! + vlan-aware-bundle leafvlans + rd 10.13.13.13:1 + route-target both 1:1 + redistribute learned + vlan 101,201 + ! + address-family evpn + neighbor EVPN-OVERLAY activate + ! + address-family ipv4 + neighbor eBGP-Spine-Underlay activate + redistribute connected route-map deny-management +! \ No newline at end of file diff --git a/topologies/training-level3/configlets/Leaf-3-IP-Address b/topologies/training-level3/configlets/Leaf-3-IP-Address new file mode 100644 index 000000000..55e19e36b --- /dev/null +++ b/topologies/training-level3/configlets/Leaf-3-IP-Address @@ -0,0 +1,32 @@ +hostname leaf3 +! +vlan 101,103 +! +interface Ethernet1 +! +interface Ethernet2 +! +interface Ethernet3 + no switchport + ip address 10.10.1.10/30 +! +interface Ethernet4 + no switchport + ip address 10.10.2.10/30 +! +interface Ethernet5 + no switchport + ip address 10.10.3.10/30 +! +interface Ethernet6 + switchport access vlan 101 +! +interface Ethernet7 +! +interface Loopback0 + ip address 10.13.13.13/32 +! +interface Vlan103 + no autostate + ip address 172.16.103.1/24 +! diff --git a/topologies/training-level3/configlets/Leaf-3-L2EVPN-Begin b/topologies/training-level3/configlets/Leaf-3-L2EVPN-Begin new file mode 100644 index 000000000..3d98a292d --- /dev/null +++ b/topologies/training-level3/configlets/Leaf-3-L2EVPN-Begin @@ -0,0 +1,62 @@ +hostname leaf3 +! +vlan 101,103 +! +interface Ethernet1 +! +interface Ethernet2 +! +interface Ethernet3 + no switchport + ip address 10.10.1.10/30 +! +interface Ethernet4 + no switchport + ip address 10.10.2.10/30 +! +interface Ethernet5 + no switchport + ip address 10.10.3.10/30 +! +interface Ethernet6 + switchport access vlan 101 +! +interface Ethernet7 +! +interface Loopback0 + ip address 10.13.13.13/32 +! +interface Vlan103 + no autostate + ip address 172.16.103.1/24 +! +! +interface vxlan1 + vxlan source-interface Loopback0 + vxlan vlan 101 vni 10101 + vxlan vlan 101 flood vtep 10.11.11.11 +! +! +ip routing +! +ip prefix-list deny-management + seq 10 deny 192.168.0.0/24 ge 24 + seq 20 permit 0.0.0.0/0 le 32 +! +route-map deny-management permit 10 + match ip address prefix-list deny-management +! +router bgp 65003 + router-id 10.13.13.13 + no bgp default ipv4-unicast + maximum-paths 4 ecmp 4 + neighbor eBGP-Spine-Underlay peer group + neighbor eBGP-Spine-Underlay remote-as 65100 + neighbor 10.10.1.9 peer group eBGP-Spine-Underlay + neighbor 10.10.2.9 peer group eBGP-Spine-Underlay + neighbor 10.10.3.9 peer group eBGP-Spine-Underlay + ! + address-family ipv4 + neighbor eBGP-Spine-Underlay activate + redistribute connected route-map deny-management +! \ No newline at end of file diff --git a/topologies/training-level3/configlets/Leaf-3-L3EVPN-Begin b/topologies/training-level3/configlets/Leaf-3-L3EVPN-Begin new file mode 100644 index 000000000..e16d28624 --- /dev/null +++ b/topologies/training-level3/configlets/Leaf-3-L3EVPN-Begin @@ -0,0 +1,80 @@ +hostname leaf3 +! +vlan 101,103,201 +! +interface Ethernet1 +! +interface Ethernet2 +! +interface Ethernet3 + no switchport + ip address 10.10.1.10/30 +! +interface Ethernet4 + no switchport + ip address 10.10.2.10/30 +! +interface Ethernet5 + no switchport + ip address 10.10.3.10/30 +! +interface Ethernet6 + switchport access vlan 101 +! +interface Ethernet7 +! +interface Loopback0 + ip address 10.13.13.13/32 +! +interface Vlan103 + no autostate + ip address 172.16.103.1/24 +! +! +interface vxlan1 + vxlan source-interface Loopback0 + vxlan vlan 101 vni 10101 +! +! +ip routing +! +ip prefix-list deny-management + seq 10 deny 192.168.0.0/24 ge 24 + seq 20 permit 0.0.0.0/0 le 32 +! +route-map deny-management permit 10 + match ip address prefix-list deny-management +! +router bgp 65003 + router-id 10.13.13.13 + no bgp default ipv4-unicast + maximum-paths 4 ecmp 4 + neighbor EVPN-OVERLAY peer group + neighbor EVPN-OVERLAY remote-as 65100 + neighbor EVPN-OVERLAY update-source Loopback0 + neighbor EVPN-OVERLAY bfd + neighbor EVPN-OVERLAY ebgp-multihop 2 + neighbor EVPN-OVERLAY send-community + neighbor EVPN-OVERLAY maximum-routes 0 + neighbor eBGP-Spine-Underlay peer group + neighbor eBGP-Spine-Underlay remote-as 65100 + neighbor 10.10.1.9 peer group eBGP-Spine-Underlay + neighbor 10.10.2.9 peer group eBGP-Spine-Underlay + neighbor 10.10.3.9 peer group eBGP-Spine-Underlay + neighbor 10.21.21.21 peer group EVPN-OVERLAY + neighbor 10.22.22.22 peer group EVPN-OVERLAY + neighbor 10.23.23.23 peer group EVPN-OVERLAY + ! + vlan-aware-bundle leafvlans + rd 10.13.13.13:1 + route-target both 1:1 + redistribute learned + vlan 101,201 + ! + address-family evpn + neighbor EVPN-OVERLAY activate + ! + address-family ipv4 + neighbor eBGP-Spine-Underlay activate + redistribute connected route-map deny-management +! \ No newline at end of file diff --git a/topologies/training-level3/configlets/Leaf-3-PIM-Begin b/topologies/training-level3/configlets/Leaf-3-PIM-Begin new file mode 100644 index 000000000..2b1274490 --- /dev/null +++ b/topologies/training-level3/configlets/Leaf-3-PIM-Begin @@ -0,0 +1,92 @@ +hostname leaf3 +! +vlan 101,103,201,301 +! +interface Ethernet1 +! +interface Ethernet2 +! +interface Ethernet3 + no switchport + ip address 10.10.1.10/30 +! +interface Ethernet4 + no switchport + ip address 10.10.2.10/30 +! +interface Ethernet5 + no switchport + ip address 10.10.3.10/30 +! +interface Ethernet6 + switchport access vlan 101 +! +interface Ethernet7 + no shut + channel-group 1 mode active +! +interface Port-Channel1 + switchport access vlan 301 + ! + evpn ethernet-segment + identifier 00a2:b97c:4cac:0300:1111 + route-target import 00:1c:73:53:63:b8 + ! + lacp system-id 0000.0000.bbbb +! +interface Loopback0 + ip address 10.13.13.13/32 +! +interface Vlan103 + no autostate + ip address 172.16.103.1/24 +! +! +interface vxlan1 + vxlan source-interface Loopback0 + vxlan vlan 101 vni 10101 + vxlan vlan 301 vni 30303 +! +! +ip routing +! +ip prefix-list deny-management + seq 10 deny 192.168.0.0/24 ge 24 + seq 20 permit 0.0.0.0/0 le 32 +! +route-map deny-management permit 10 + match ip address prefix-list deny-management +! +router bgp 65003 + router-id 10.13.13.13 + no bgp default ipv4-unicast + maximum-paths 4 ecmp 4 + neighbor EVPN-OVERLAY peer group + neighbor EVPN-OVERLAY remote-as 65100 + neighbor EVPN-OVERLAY update-source Loopback0 + neighbor EVPN-OVERLAY bfd + neighbor EVPN-OVERLAY ebgp-multihop 2 + neighbor EVPN-OVERLAY send-community + neighbor EVPN-OVERLAY maximum-routes 0 + neighbor eBGP-Spine-Underlay peer group + neighbor eBGP-Spine-Underlay remote-as 65100 + neighbor 10.10.1.9 peer group eBGP-Spine-Underlay + neighbor 10.10.2.9 peer group eBGP-Spine-Underlay + neighbor 10.10.3.9 peer group eBGP-Spine-Underlay + neighbor 10.21.21.21 peer group EVPN-OVERLAY + neighbor 10.22.22.22 peer group EVPN-OVERLAY + neighbor 10.23.23.23 peer group EVPN-OVERLAY + ! + vlan-aware-bundle leafvlans + rd 10.13.13.13:1 + route-target both 1:1 + redistribute learned + vlan 101,201,301 + ! + address-family evpn + neighbor EVPN-OVERLAY activate + ! + address-family ipv4 + neighbor eBGP-Spine-Underlay activate + redistribute connected route-map deny-management +! \ No newline at end of file diff --git a/topologies/training-level3/configlets/Leaf-3-VXLAN-Begin b/topologies/training-level3/configlets/Leaf-3-VXLAN-Begin new file mode 100644 index 000000000..cc0e7001f --- /dev/null +++ b/topologies/training-level3/configlets/Leaf-3-VXLAN-Begin @@ -0,0 +1,55 @@ +hostname leaf3 +! +vlan 101,103 +! +interface Ethernet1 +! +interface Ethernet2 +! +interface Ethernet3 + no switchport + ip address 10.10.1.10/30 +! +interface Ethernet4 + no switchport + ip address 10.10.2.10/30 +! +interface Ethernet5 + no switchport + ip address 10.10.3.10/30 +! +interface Ethernet6 + switchport access vlan 101 +! +interface Ethernet7 +! +interface Loopback0 + ip address 10.13.13.13/32 +! +interface Vlan103 + no autostate + ip address 172.16.103.1/24 +! +ip routing +! +ip prefix-list deny-management + seq 10 deny 192.168.0.0/24 ge 24 + seq 20 permit 0.0.0.0/0 le 32 +! +route-map deny-management permit 10 + match ip address prefix-list deny-management +! +router bgp 65003 + router-id 10.13.13.13 + no bgp default ipv4-unicast + maximum-paths 4 ecmp 4 + neighbor eBGP-Spine-Underlay peer group + neighbor eBGP-Spine-Underlay remote-as 65100 + neighbor 10.10.1.9 peer group eBGP-Spine-Underlay + neighbor 10.10.2.9 peer group eBGP-Spine-Underlay + neighbor 10.10.3.9 peer group eBGP-Spine-Underlay + ! + address-family ipv4 + neighbor eBGP-Spine-Underlay activate + redistribute connected route-map deny-management +! \ No newline at end of file diff --git a/topologies/training-level3/configlets/Leaf-4-AAMH-Begin b/topologies/training-level3/configlets/Leaf-4-AAMH-Begin new file mode 100644 index 000000000..eaf394e52 --- /dev/null +++ b/topologies/training-level3/configlets/Leaf-4-AAMH-Begin @@ -0,0 +1,95 @@ +hostname leaf4 +! +vlan 101,104,201 +! +vrf instance tenant-202 +ip routing vrf tenant-202 +! +interface Ethernet1 +! +interface Ethernet2 +! +interface Ethernet3 + no switchport + ip address 10.10.1.14/30 +! +interface Ethernet4 + no switchport + ip address 10.10.2.14/30 +! +interface Ethernet5 + no switchport + ip address 10.10.3.14/30 +! +interface Ethernet6 + no switchport + vrf tenant-202 + ip address 192.168.202.254/24 +! +interface Ethernet7 +! +interface Loopback0 + ip address 10.14.14.14/32 +! +interface Vlan104 + no autostate + ip address 172.16.104.1/24 +! +! +int vxlan 1 + vxlan source-interface Loopback0 + vxlan udp-port 4789 + vxlan vlan 101 vni 10101 + vxlan vlan 201 vni 20202 + vxlan vrf tenant-202 vni 2222 +! +! +ip routing +! +ip prefix-list deny-management + seq 10 deny 192.168.0.0/24 ge 24 + seq 20 permit 0.0.0.0/0 le 32 +! +route-map deny-management permit 10 + match ip address prefix-list deny-management +! +router bgp 65004 + router-id 10.14.14.14 + no bgp default ipv4-unicast + maximum-paths 4 ecmp 4 + neighbor EVPN-OVERLAY peer group + neighbor EVPN-OVERLAY remote-as 65100 + neighbor EVPN-OVERLAY update-source Loopback0 + neighbor EVPN-OVERLAY bfd + neighbor EVPN-OVERLAY ebgp-multihop 2 + neighbor EVPN-OVERLAY send-community + neighbor EVPN-OVERLAY maximum-routes 0 + neighbor eBGP-Spine-Underlay peer group + neighbor eBGP-Spine-Underlay remote-as 65100 + neighbor 10.10.1.13 peer group eBGP-Spine-Underlay + neighbor 10.10.2.13 peer group eBGP-Spine-Underlay + neighbor 10.10.3.13 peer group eBGP-Spine-Underlay + neighbor 10.21.21.21 peer group EVPN-OVERLAY + neighbor 10.22.22.22 peer group EVPN-OVERLAY + neighbor 10.23.23.23 peer group EVPN-OVERLAY + ! + vlan-aware-bundle leafvlans + rd 10.14.14.14:1 + route-target both 1:1 + redistribute learned + vlan 101,201 + ! + vrf tenant-202 + rd 10.14.14.14:2222 + route-target import evpn 202:2222 + route-target export evpn 202:2222 + redistribute connected + redistribute static + ! + address-family evpn + neighbor EVPN-OVERLAY activate + ! + address-family ipv4 + neighbor eBGP-Spine-Underlay activate + redistribute connected route-map deny-management +! \ No newline at end of file diff --git a/topologies/training-level3/configlets/Leaf-4-IP-Address b/topologies/training-level3/configlets/Leaf-4-IP-Address new file mode 100644 index 000000000..9aa50c941 --- /dev/null +++ b/topologies/training-level3/configlets/Leaf-4-IP-Address @@ -0,0 +1,32 @@ +hostname leaf4 +! +vlan 104,201 +! +interface Ethernet1 +! +interface Ethernet2 +! +interface Ethernet3 + no switchport + ip address 10.10.1.14/30 +! +interface Ethernet4 + no switchport + ip address 10.10.2.14/30 +! +interface Ethernet5 + no switchport + ip address 10.10.3.14/30 +! +interface Ethernet6 + switchport access vlan 201 +! +interface Ethernet7 +! +interface Loopback0 + ip address 10.14.14.14/32 +! +interface Vlan104 + no autostate + ip address 172.16.104.1/24 +! diff --git a/topologies/training-level3/configlets/Leaf-4-L2EVPN-Begin b/topologies/training-level3/configlets/Leaf-4-L2EVPN-Begin new file mode 100644 index 000000000..b30915d96 --- /dev/null +++ b/topologies/training-level3/configlets/Leaf-4-L2EVPN-Begin @@ -0,0 +1,62 @@ +hostname leaf4 +! +vlan 104,201 +! +interface Ethernet1 +! +interface Ethernet2 +! +interface Ethernet3 + no switchport + ip address 10.10.1.14/30 +! +interface Ethernet4 + no switchport + ip address 10.10.2.14/30 +! +interface Ethernet5 + no switchport + ip address 10.10.3.14/30 +! +interface Ethernet6 + switchport access vlan 201 +! +interface Ethernet7 +! +interface Loopback0 + ip address 10.14.14.14/32 +! +interface Vlan104 + no autostate + ip address 172.16.104.1/24 +! +! +int vxlan 1 + vxlan source-interface loopback 0 + vxlan vlan 201 vni 20202 + vxlan vlan 201 flood vtep 10.12.12.12 +! +! +ip routing +! +ip prefix-list deny-management + seq 10 deny 192.168.0.0/24 ge 24 + seq 20 permit 0.0.0.0/0 le 32 +! +route-map deny-management permit 10 + match ip address prefix-list deny-management +! +router bgp 65004 + router-id 10.14.14.14 + no bgp default ipv4-unicast + maximum-paths 4 ecmp 4 + neighbor eBGP-Spine-Underlay peer group + neighbor eBGP-Spine-Underlay remote-as 65100 + neighbor 10.10.1.13 peer group eBGP-Spine-Underlay + neighbor 10.10.2.13 peer group eBGP-Spine-Underlay + neighbor 10.10.3.13 peer group eBGP-Spine-Underlay + ! + address-family ipv4 + neighbor eBGP-Spine-Underlay activate + redistribute connected route-map deny-management +! \ No newline at end of file diff --git a/topologies/training-level3/configlets/Leaf-4-L3EVPN-Begin b/topologies/training-level3/configlets/Leaf-4-L3EVPN-Begin new file mode 100644 index 000000000..056662a62 --- /dev/null +++ b/topologies/training-level3/configlets/Leaf-4-L3EVPN-Begin @@ -0,0 +1,80 @@ +hostname leaf4 +! +vlan 101,104,201 +! +interface Ethernet1 +! +interface Ethernet2 +! +interface Ethernet3 + no switchport + ip address 10.10.1.14/30 +! +interface Ethernet4 + no switchport + ip address 10.10.2.14/30 +! +interface Ethernet5 + no switchport + ip address 10.10.3.14/30 +! +interface Ethernet6 + switchport access vlan 201 +! +interface Ethernet7 +! +interface Loopback0 + ip address 10.14.14.14/32 +! +interface Vlan104 + no autostate + ip address 172.16.104.1/24 +! +! +int vxlan 1 + vxlan source-interface loopback 0 + vxlan vlan 201 vni 20202 +! +! +ip routing +! +ip prefix-list deny-management + seq 10 deny 192.168.0.0/24 ge 24 + seq 20 permit 0.0.0.0/0 le 32 +! +route-map deny-management permit 10 + match ip address prefix-list deny-management +! +router bgp 65004 + router-id 10.14.14.14 + no bgp default ipv4-unicast + maximum-paths 4 ecmp 4 + neighbor EVPN-OVERLAY peer group + neighbor EVPN-OVERLAY remote-as 65100 + neighbor EVPN-OVERLAY update-source Loopback0 + neighbor EVPN-OVERLAY bfd + neighbor EVPN-OVERLAY ebgp-multihop 2 + neighbor EVPN-OVERLAY send-community + neighbor EVPN-OVERLAY maximum-routes 0 + neighbor eBGP-Spine-Underlay peer group + neighbor eBGP-Spine-Underlay remote-as 65100 + neighbor 10.10.1.13 peer group eBGP-Spine-Underlay + neighbor 10.10.2.13 peer group eBGP-Spine-Underlay + neighbor 10.10.3.13 peer group eBGP-Spine-Underlay + neighbor 10.21.21.21 peer group EVPN-OVERLAY + neighbor 10.22.22.22 peer group EVPN-OVERLAY + neighbor 10.23.23.23 peer group EVPN-OVERLAY + ! + vlan-aware-bundle leafvlans + rd 10.14.14.14:1 + route-target both 1:1 + redistribute learned + vlan 101,201 + ! + address-family evpn + neighbor EVPN-OVERLAY activate + ! + address-family ipv4 + neighbor eBGP-Spine-Underlay activate + redistribute connected route-map deny-management +! \ No newline at end of file diff --git a/topologies/training-level3/configlets/Leaf-4-PIM-Begin b/topologies/training-level3/configlets/Leaf-4-PIM-Begin new file mode 100644 index 000000000..618f56ccf --- /dev/null +++ b/topologies/training-level3/configlets/Leaf-4-PIM-Begin @@ -0,0 +1,105 @@ +hostname leaf4 +! +vlan 101,104,201,301 +! +vrf instance tenant-202 +ip routing vrf tenant-202 +! +interface Ethernet1 +! +interface Ethernet2 +! +interface Ethernet3 + no switchport + ip address 10.10.1.14/30 +! +interface Ethernet4 + no switchport + ip address 10.10.2.14/30 +! +interface Ethernet5 + no switchport + ip address 10.10.3.14/30 +! +interface Ethernet6 + no switchport + vrf tenant-202 + ip address 192.168.202.254/24 +! +interface Ethernet7 + no shut + channel-group 1 mode active +! +interface po1 + switchport access vlan 301 + lacp system-id 0000.0000.bbbb + evpn ethernet-segment + identifier 00a2:b97c:4cac:0300:1111 + route-target import 001c.7353.63b8 +! +interface Loopback0 + ip address 10.14.14.14/32 +! +interface Vlan104 + no autostate + ip address 172.16.104.1/24 +! +! +int vxlan 1 + vxlan source-interface Loopback0 + vxlan udp-port 4789 + vxlan vlan 101 vni 10101 + vxlan vlan 201 vni 20202 + vxlan vlan 301 vni 30303 + vxlan vrf tenant-202 vni 2222 +! +! +ip routing +! +ip prefix-list deny-management + seq 10 deny 192.168.0.0/24 ge 24 + seq 20 permit 0.0.0.0/0 le 32 +! +route-map deny-management permit 10 + match ip address prefix-list deny-management +! +router bgp 65004 + router-id 10.14.14.14 + no bgp default ipv4-unicast + maximum-paths 4 ecmp 4 + neighbor EVPN-OVERLAY peer group + neighbor EVPN-OVERLAY remote-as 65100 + neighbor EVPN-OVERLAY update-source Loopback0 + neighbor EVPN-OVERLAY bfd + neighbor EVPN-OVERLAY ebgp-multihop 2 + neighbor EVPN-OVERLAY send-community + neighbor EVPN-OVERLAY maximum-routes 0 + neighbor eBGP-Spine-Underlay peer group + neighbor eBGP-Spine-Underlay remote-as 65100 + neighbor 10.10.1.13 peer group eBGP-Spine-Underlay + neighbor 10.10.2.13 peer group eBGP-Spine-Underlay + neighbor 10.10.3.13 peer group eBGP-Spine-Underlay + neighbor 10.21.21.21 peer group EVPN-OVERLAY + neighbor 10.22.22.22 peer group EVPN-OVERLAY + neighbor 10.23.23.23 peer group EVPN-OVERLAY + ! + vlan-aware-bundle leafvlans + rd 10.14.14.14:1 + route-target both 1:1 + redistribute learned + vlan 101,201,301 + ! + vrf tenant-202 + rd 10.14.14.14:2222 + route-target import evpn 202:2222 + route-target export evpn 202:2222 + redistribute connected + redistribute static + ! + address-family evpn + neighbor EVPN-OVERLAY activate + ! + address-family ipv4 + neighbor eBGP-Spine-Underlay activate + redistribute connected route-map deny-management +! \ No newline at end of file diff --git a/topologies/training-level3/configlets/Leaf-4-VXLAN-Begin b/topologies/training-level3/configlets/Leaf-4-VXLAN-Begin new file mode 100644 index 000000000..e3ef8f571 --- /dev/null +++ b/topologies/training-level3/configlets/Leaf-4-VXLAN-Begin @@ -0,0 +1,55 @@ +hostname leaf4 +! +vlan 104,201 +! +interface Ethernet1 +! +interface Ethernet2 +! +interface Ethernet3 + no switchport + ip address 10.10.1.14/30 +! +interface Ethernet4 + no switchport + ip address 10.10.2.14/30 +! +interface Ethernet5 + no switchport + ip address 10.10.3.14/30 +! +interface Ethernet6 + switchport access vlan 201 +! +interface Ethernet7 +! +interface Loopback0 + ip address 10.14.14.14/32 +! +interface Vlan104 + no autostate + ip address 172.16.104.1/24 +! +ip routing +! +ip prefix-list deny-management + seq 10 deny 192.168.0.0/24 ge 24 + seq 20 permit 0.0.0.0/0 le 32 +! +route-map deny-management permit 10 + match ip address prefix-list deny-management +! +router bgp 65004 + router-id 10.14.14.14 + no bgp default ipv4-unicast + maximum-paths 4 ecmp 4 + neighbor eBGP-Spine-Underlay peer group + neighbor eBGP-Spine-Underlay remote-as 65100 + neighbor 10.10.1.13 peer group eBGP-Spine-Underlay + neighbor 10.10.2.13 peer group eBGP-Spine-Underlay + neighbor 10.10.3.13 peer group eBGP-Spine-Underlay + ! + address-family ipv4 + neighbor eBGP-Spine-Underlay activate + redistribute connected route-map deny-management +! \ No newline at end of file diff --git a/topologies/training-level3/configlets/Spine-1-AAMH-Begin b/topologies/training-level3/configlets/Spine-1-AAMH-Begin new file mode 100644 index 000000000..c501b23ab --- /dev/null +++ b/topologies/training-level3/configlets/Spine-1-AAMH-Begin @@ -0,0 +1,75 @@ +hostname spine1 +! +interface Ethernet1 +! +interface Ethernet2 + no switchport + ip address 10.10.1.1/30 +! +interface Ethernet3 + no switchport + ip address 10.10.1.5/30 +! +interface Ethernet4 + no switchport + ip address 10.10.1.9/30 +! +interface Ethernet5 + no switchport + ip address 10.10.1.13/30 +! +interface Ethernet6 + no switchport + ip address 172.16.1.2/30 +! +interface Ethernet7 + no switchport + ip address 172.16.2.2/30 +! +interface Loopback0 + ip address 10.21.21.21/32 +! +ip routing +! +ip prefix-list deny-management + seq 10 deny 192.168.0.0/24 ge 24 + seq 20 permit 0.0.0.0/0 le 32 +! +route-map deny-management permit 10 + match ip address prefix-list deny-management +! +peer-filter Leaf-AS-Range + 10 match as-range 64512-65535 result accept +! +router bgp 65100 + router-id 10.21.21.21 + no bgp default ipv4-unicast + maximum-paths 4 ecmp 4 + bgp listen range 172.16.0.0/16 peer-group eBGP-BorderLeafs peer-filter Leaf-AS-Range + bgp listen range 10.11.11.11/32 peer-group eBGP-LEAFS-EVPN peer-filter Leaf-AS-Range + bgp listen range 10.12.12.12/32 peer-group eBGP-LEAFS-EVPN peer-filter Leaf-AS-Range + bgp listen range 10.13.13.13/32 peer-group eBGP-LEAFS-EVPN peer-filter Leaf-AS-Range + bgp listen range 10.14.14.14/32 peer-group eBGP-LEAFS-EVPN peer-filter Leaf-AS-Range + bgp listen range 10.10.0.0/16 peer-group eBGP-LEAFS-Underlay peer-filter Leaf-AS-Range + neighbor eBGP-BorderLeafs peer group + neighbor eBGP-BorderLeafs send-community + neighbor eBGP-BorderLeafs maximum-routes 12000 + neighbor eBGP-LEAFS-EVPN peer group + neighbor eBGP-LEAFS-EVPN next-hop-unchanged + neighbor eBGP-LEAFS-EVPN update-source Loopback0 + neighbor eBGP-LEAFS-EVPN bfd + neighbor eBGP-LEAFS-EVPN ebgp-multihop 2 + neighbor eBGP-LEAFS-EVPN send-community + neighbor eBGP-LEAFS-EVPN maximum-routes 0 + neighbor eBGP-LEAFS-Underlay peer group + neighbor eBGP-LEAFS-Underlay send-community + neighbor eBGP-LEAFS-Underlay maximum-routes 0 + ! + address-family evpn + neighbor eBGP-LEAFS-EVPN activate + ! + address-family ipv4 + neighbor eBGP-BorderLeafs activate + neighbor eBGP-LEAFS-Underlay activate + redistribute connected route-map deny-management +! \ No newline at end of file diff --git a/topologies/training-level3/configlets/Spine-1-IP-Address b/topologies/training-level3/configlets/Spine-1-IP-Address new file mode 100644 index 000000000..006eedd0e --- /dev/null +++ b/topologies/training-level3/configlets/Spine-1-IP-Address @@ -0,0 +1,31 @@ +hostname spine1 +! +interface Ethernet1 +! +interface Ethernet2 + no switchport + ip address 10.10.1.1/30 +! +interface Ethernet3 + no switchport + ip address 10.10.1.5/30 +! +interface Ethernet4 + no switchport + ip address 10.10.1.9/30 +! +interface Ethernet5 + no switchport + ip address 10.10.1.13/30 +! +interface Ethernet6 + no switchport + ip address 172.16.1.2/30 +! +interface Ethernet7 + no switchport + ip address 172.16.2.2/30 +! +interface Loopback0 + ip address 10.21.21.21/32 +! diff --git a/topologies/training-level3/configlets/Spine-1-L2EVPN-Begin b/topologies/training-level3/configlets/Spine-1-L2EVPN-Begin new file mode 100644 index 000000000..c501b23ab --- /dev/null +++ b/topologies/training-level3/configlets/Spine-1-L2EVPN-Begin @@ -0,0 +1,75 @@ +hostname spine1 +! +interface Ethernet1 +! +interface Ethernet2 + no switchport + ip address 10.10.1.1/30 +! +interface Ethernet3 + no switchport + ip address 10.10.1.5/30 +! +interface Ethernet4 + no switchport + ip address 10.10.1.9/30 +! +interface Ethernet5 + no switchport + ip address 10.10.1.13/30 +! +interface Ethernet6 + no switchport + ip address 172.16.1.2/30 +! +interface Ethernet7 + no switchport + ip address 172.16.2.2/30 +! +interface Loopback0 + ip address 10.21.21.21/32 +! +ip routing +! +ip prefix-list deny-management + seq 10 deny 192.168.0.0/24 ge 24 + seq 20 permit 0.0.0.0/0 le 32 +! +route-map deny-management permit 10 + match ip address prefix-list deny-management +! +peer-filter Leaf-AS-Range + 10 match as-range 64512-65535 result accept +! +router bgp 65100 + router-id 10.21.21.21 + no bgp default ipv4-unicast + maximum-paths 4 ecmp 4 + bgp listen range 172.16.0.0/16 peer-group eBGP-BorderLeafs peer-filter Leaf-AS-Range + bgp listen range 10.11.11.11/32 peer-group eBGP-LEAFS-EVPN peer-filter Leaf-AS-Range + bgp listen range 10.12.12.12/32 peer-group eBGP-LEAFS-EVPN peer-filter Leaf-AS-Range + bgp listen range 10.13.13.13/32 peer-group eBGP-LEAFS-EVPN peer-filter Leaf-AS-Range + bgp listen range 10.14.14.14/32 peer-group eBGP-LEAFS-EVPN peer-filter Leaf-AS-Range + bgp listen range 10.10.0.0/16 peer-group eBGP-LEAFS-Underlay peer-filter Leaf-AS-Range + neighbor eBGP-BorderLeafs peer group + neighbor eBGP-BorderLeafs send-community + neighbor eBGP-BorderLeafs maximum-routes 12000 + neighbor eBGP-LEAFS-EVPN peer group + neighbor eBGP-LEAFS-EVPN next-hop-unchanged + neighbor eBGP-LEAFS-EVPN update-source Loopback0 + neighbor eBGP-LEAFS-EVPN bfd + neighbor eBGP-LEAFS-EVPN ebgp-multihop 2 + neighbor eBGP-LEAFS-EVPN send-community + neighbor eBGP-LEAFS-EVPN maximum-routes 0 + neighbor eBGP-LEAFS-Underlay peer group + neighbor eBGP-LEAFS-Underlay send-community + neighbor eBGP-LEAFS-Underlay maximum-routes 0 + ! + address-family evpn + neighbor eBGP-LEAFS-EVPN activate + ! + address-family ipv4 + neighbor eBGP-BorderLeafs activate + neighbor eBGP-LEAFS-Underlay activate + redistribute connected route-map deny-management +! \ No newline at end of file diff --git a/topologies/training-level3/configlets/Spine-1-L3EVPN-Begin b/topologies/training-level3/configlets/Spine-1-L3EVPN-Begin new file mode 100644 index 000000000..c501b23ab --- /dev/null +++ b/topologies/training-level3/configlets/Spine-1-L3EVPN-Begin @@ -0,0 +1,75 @@ +hostname spine1 +! +interface Ethernet1 +! +interface Ethernet2 + no switchport + ip address 10.10.1.1/30 +! +interface Ethernet3 + no switchport + ip address 10.10.1.5/30 +! +interface Ethernet4 + no switchport + ip address 10.10.1.9/30 +! +interface Ethernet5 + no switchport + ip address 10.10.1.13/30 +! +interface Ethernet6 + no switchport + ip address 172.16.1.2/30 +! +interface Ethernet7 + no switchport + ip address 172.16.2.2/30 +! +interface Loopback0 + ip address 10.21.21.21/32 +! +ip routing +! +ip prefix-list deny-management + seq 10 deny 192.168.0.0/24 ge 24 + seq 20 permit 0.0.0.0/0 le 32 +! +route-map deny-management permit 10 + match ip address prefix-list deny-management +! +peer-filter Leaf-AS-Range + 10 match as-range 64512-65535 result accept +! +router bgp 65100 + router-id 10.21.21.21 + no bgp default ipv4-unicast + maximum-paths 4 ecmp 4 + bgp listen range 172.16.0.0/16 peer-group eBGP-BorderLeafs peer-filter Leaf-AS-Range + bgp listen range 10.11.11.11/32 peer-group eBGP-LEAFS-EVPN peer-filter Leaf-AS-Range + bgp listen range 10.12.12.12/32 peer-group eBGP-LEAFS-EVPN peer-filter Leaf-AS-Range + bgp listen range 10.13.13.13/32 peer-group eBGP-LEAFS-EVPN peer-filter Leaf-AS-Range + bgp listen range 10.14.14.14/32 peer-group eBGP-LEAFS-EVPN peer-filter Leaf-AS-Range + bgp listen range 10.10.0.0/16 peer-group eBGP-LEAFS-Underlay peer-filter Leaf-AS-Range + neighbor eBGP-BorderLeafs peer group + neighbor eBGP-BorderLeafs send-community + neighbor eBGP-BorderLeafs maximum-routes 12000 + neighbor eBGP-LEAFS-EVPN peer group + neighbor eBGP-LEAFS-EVPN next-hop-unchanged + neighbor eBGP-LEAFS-EVPN update-source Loopback0 + neighbor eBGP-LEAFS-EVPN bfd + neighbor eBGP-LEAFS-EVPN ebgp-multihop 2 + neighbor eBGP-LEAFS-EVPN send-community + neighbor eBGP-LEAFS-EVPN maximum-routes 0 + neighbor eBGP-LEAFS-Underlay peer group + neighbor eBGP-LEAFS-Underlay send-community + neighbor eBGP-LEAFS-Underlay maximum-routes 0 + ! + address-family evpn + neighbor eBGP-LEAFS-EVPN activate + ! + address-family ipv4 + neighbor eBGP-BorderLeafs activate + neighbor eBGP-LEAFS-Underlay activate + redistribute connected route-map deny-management +! \ No newline at end of file diff --git a/topologies/training-level3/configlets/Spine-1-PIM-Begin b/topologies/training-level3/configlets/Spine-1-PIM-Begin new file mode 100644 index 000000000..c501b23ab --- /dev/null +++ b/topologies/training-level3/configlets/Spine-1-PIM-Begin @@ -0,0 +1,75 @@ +hostname spine1 +! +interface Ethernet1 +! +interface Ethernet2 + no switchport + ip address 10.10.1.1/30 +! +interface Ethernet3 + no switchport + ip address 10.10.1.5/30 +! +interface Ethernet4 + no switchport + ip address 10.10.1.9/30 +! +interface Ethernet5 + no switchport + ip address 10.10.1.13/30 +! +interface Ethernet6 + no switchport + ip address 172.16.1.2/30 +! +interface Ethernet7 + no switchport + ip address 172.16.2.2/30 +! +interface Loopback0 + ip address 10.21.21.21/32 +! +ip routing +! +ip prefix-list deny-management + seq 10 deny 192.168.0.0/24 ge 24 + seq 20 permit 0.0.0.0/0 le 32 +! +route-map deny-management permit 10 + match ip address prefix-list deny-management +! +peer-filter Leaf-AS-Range + 10 match as-range 64512-65535 result accept +! +router bgp 65100 + router-id 10.21.21.21 + no bgp default ipv4-unicast + maximum-paths 4 ecmp 4 + bgp listen range 172.16.0.0/16 peer-group eBGP-BorderLeafs peer-filter Leaf-AS-Range + bgp listen range 10.11.11.11/32 peer-group eBGP-LEAFS-EVPN peer-filter Leaf-AS-Range + bgp listen range 10.12.12.12/32 peer-group eBGP-LEAFS-EVPN peer-filter Leaf-AS-Range + bgp listen range 10.13.13.13/32 peer-group eBGP-LEAFS-EVPN peer-filter Leaf-AS-Range + bgp listen range 10.14.14.14/32 peer-group eBGP-LEAFS-EVPN peer-filter Leaf-AS-Range + bgp listen range 10.10.0.0/16 peer-group eBGP-LEAFS-Underlay peer-filter Leaf-AS-Range + neighbor eBGP-BorderLeafs peer group + neighbor eBGP-BorderLeafs send-community + neighbor eBGP-BorderLeafs maximum-routes 12000 + neighbor eBGP-LEAFS-EVPN peer group + neighbor eBGP-LEAFS-EVPN next-hop-unchanged + neighbor eBGP-LEAFS-EVPN update-source Loopback0 + neighbor eBGP-LEAFS-EVPN bfd + neighbor eBGP-LEAFS-EVPN ebgp-multihop 2 + neighbor eBGP-LEAFS-EVPN send-community + neighbor eBGP-LEAFS-EVPN maximum-routes 0 + neighbor eBGP-LEAFS-Underlay peer group + neighbor eBGP-LEAFS-Underlay send-community + neighbor eBGP-LEAFS-Underlay maximum-routes 0 + ! + address-family evpn + neighbor eBGP-LEAFS-EVPN activate + ! + address-family ipv4 + neighbor eBGP-BorderLeafs activate + neighbor eBGP-LEAFS-Underlay activate + redistribute connected route-map deny-management +! \ No newline at end of file diff --git a/topologies/training-level3/configlets/Spine-1-VXALN-Begin b/topologies/training-level3/configlets/Spine-1-VXALN-Begin new file mode 100644 index 000000000..c501b23ab --- /dev/null +++ b/topologies/training-level3/configlets/Spine-1-VXALN-Begin @@ -0,0 +1,75 @@ +hostname spine1 +! +interface Ethernet1 +! +interface Ethernet2 + no switchport + ip address 10.10.1.1/30 +! +interface Ethernet3 + no switchport + ip address 10.10.1.5/30 +! +interface Ethernet4 + no switchport + ip address 10.10.1.9/30 +! +interface Ethernet5 + no switchport + ip address 10.10.1.13/30 +! +interface Ethernet6 + no switchport + ip address 172.16.1.2/30 +! +interface Ethernet7 + no switchport + ip address 172.16.2.2/30 +! +interface Loopback0 + ip address 10.21.21.21/32 +! +ip routing +! +ip prefix-list deny-management + seq 10 deny 192.168.0.0/24 ge 24 + seq 20 permit 0.0.0.0/0 le 32 +! +route-map deny-management permit 10 + match ip address prefix-list deny-management +! +peer-filter Leaf-AS-Range + 10 match as-range 64512-65535 result accept +! +router bgp 65100 + router-id 10.21.21.21 + no bgp default ipv4-unicast + maximum-paths 4 ecmp 4 + bgp listen range 172.16.0.0/16 peer-group eBGP-BorderLeafs peer-filter Leaf-AS-Range + bgp listen range 10.11.11.11/32 peer-group eBGP-LEAFS-EVPN peer-filter Leaf-AS-Range + bgp listen range 10.12.12.12/32 peer-group eBGP-LEAFS-EVPN peer-filter Leaf-AS-Range + bgp listen range 10.13.13.13/32 peer-group eBGP-LEAFS-EVPN peer-filter Leaf-AS-Range + bgp listen range 10.14.14.14/32 peer-group eBGP-LEAFS-EVPN peer-filter Leaf-AS-Range + bgp listen range 10.10.0.0/16 peer-group eBGP-LEAFS-Underlay peer-filter Leaf-AS-Range + neighbor eBGP-BorderLeafs peer group + neighbor eBGP-BorderLeafs send-community + neighbor eBGP-BorderLeafs maximum-routes 12000 + neighbor eBGP-LEAFS-EVPN peer group + neighbor eBGP-LEAFS-EVPN next-hop-unchanged + neighbor eBGP-LEAFS-EVPN update-source Loopback0 + neighbor eBGP-LEAFS-EVPN bfd + neighbor eBGP-LEAFS-EVPN ebgp-multihop 2 + neighbor eBGP-LEAFS-EVPN send-community + neighbor eBGP-LEAFS-EVPN maximum-routes 0 + neighbor eBGP-LEAFS-Underlay peer group + neighbor eBGP-LEAFS-Underlay send-community + neighbor eBGP-LEAFS-Underlay maximum-routes 0 + ! + address-family evpn + neighbor eBGP-LEAFS-EVPN activate + ! + address-family ipv4 + neighbor eBGP-BorderLeafs activate + neighbor eBGP-LEAFS-Underlay activate + redistribute connected route-map deny-management +! \ No newline at end of file diff --git a/topologies/training-level3/configlets/Spine-1-VXLAN-Begin b/topologies/training-level3/configlets/Spine-1-VXLAN-Begin new file mode 100644 index 000000000..c501b23ab --- /dev/null +++ b/topologies/training-level3/configlets/Spine-1-VXLAN-Begin @@ -0,0 +1,75 @@ +hostname spine1 +! +interface Ethernet1 +! +interface Ethernet2 + no switchport + ip address 10.10.1.1/30 +! +interface Ethernet3 + no switchport + ip address 10.10.1.5/30 +! +interface Ethernet4 + no switchport + ip address 10.10.1.9/30 +! +interface Ethernet5 + no switchport + ip address 10.10.1.13/30 +! +interface Ethernet6 + no switchport + ip address 172.16.1.2/30 +! +interface Ethernet7 + no switchport + ip address 172.16.2.2/30 +! +interface Loopback0 + ip address 10.21.21.21/32 +! +ip routing +! +ip prefix-list deny-management + seq 10 deny 192.168.0.0/24 ge 24 + seq 20 permit 0.0.0.0/0 le 32 +! +route-map deny-management permit 10 + match ip address prefix-list deny-management +! +peer-filter Leaf-AS-Range + 10 match as-range 64512-65535 result accept +! +router bgp 65100 + router-id 10.21.21.21 + no bgp default ipv4-unicast + maximum-paths 4 ecmp 4 + bgp listen range 172.16.0.0/16 peer-group eBGP-BorderLeafs peer-filter Leaf-AS-Range + bgp listen range 10.11.11.11/32 peer-group eBGP-LEAFS-EVPN peer-filter Leaf-AS-Range + bgp listen range 10.12.12.12/32 peer-group eBGP-LEAFS-EVPN peer-filter Leaf-AS-Range + bgp listen range 10.13.13.13/32 peer-group eBGP-LEAFS-EVPN peer-filter Leaf-AS-Range + bgp listen range 10.14.14.14/32 peer-group eBGP-LEAFS-EVPN peer-filter Leaf-AS-Range + bgp listen range 10.10.0.0/16 peer-group eBGP-LEAFS-Underlay peer-filter Leaf-AS-Range + neighbor eBGP-BorderLeafs peer group + neighbor eBGP-BorderLeafs send-community + neighbor eBGP-BorderLeafs maximum-routes 12000 + neighbor eBGP-LEAFS-EVPN peer group + neighbor eBGP-LEAFS-EVPN next-hop-unchanged + neighbor eBGP-LEAFS-EVPN update-source Loopback0 + neighbor eBGP-LEAFS-EVPN bfd + neighbor eBGP-LEAFS-EVPN ebgp-multihop 2 + neighbor eBGP-LEAFS-EVPN send-community + neighbor eBGP-LEAFS-EVPN maximum-routes 0 + neighbor eBGP-LEAFS-Underlay peer group + neighbor eBGP-LEAFS-Underlay send-community + neighbor eBGP-LEAFS-Underlay maximum-routes 0 + ! + address-family evpn + neighbor eBGP-LEAFS-EVPN activate + ! + address-family ipv4 + neighbor eBGP-BorderLeafs activate + neighbor eBGP-LEAFS-Underlay activate + redistribute connected route-map deny-management +! \ No newline at end of file diff --git a/topologies/training-level3/configlets/Spine-2-AAMH-Begin b/topologies/training-level3/configlets/Spine-2-AAMH-Begin new file mode 100644 index 000000000..9ce49879f --- /dev/null +++ b/topologies/training-level3/configlets/Spine-2-AAMH-Begin @@ -0,0 +1,75 @@ +hostname spine2 +! +interface Ethernet1 +! +interface Ethernet2 + no switchport + ip address 10.10.2.1/30 +! +interface Ethernet3 + no switchport + ip address 10.10.2.5/30 +! +interface Ethernet4 + no switchport + ip address 10.10.2.9/30 +! +interface Ethernet5 + no switchport + ip address 10.10.2.13/30 +! +interface Ethernet6 + no switchport + ip address 172.16.1.6/30 +! +interface Ethernet7 + no switchport + ip address 172.16.2.6/30 +! +interface Loopback0 + ip address 10.22.22.22/32 +! +ip routing +! +ip prefix-list deny-management + seq 10 deny 192.168.0.0/24 ge 24 + seq 20 permit 0.0.0.0/0 le 32 +! +route-map deny-management permit 10 + match ip address prefix-list deny-management +! +peer-filter Leaf-AS-Range + 10 match as-range 64512-65535 result accept +! +router bgp 65100 + router-id 10.22.22.22 + no bgp default ipv4-unicast + maximum-paths 4 ecmp 4 + bgp listen range 172.16.0.0/16 peer-group eBGP-BorderLeafs peer-filter Leaf-AS-Range + bgp listen range 10.11.11.11/32 peer-group eBGP-LEAFS-EVPN peer-filter Leaf-AS-Range + bgp listen range 10.12.12.12/32 peer-group eBGP-LEAFS-EVPN peer-filter Leaf-AS-Range + bgp listen range 10.13.13.13/32 peer-group eBGP-LEAFS-EVPN peer-filter Leaf-AS-Range + bgp listen range 10.14.14.14/32 peer-group eBGP-LEAFS-EVPN peer-filter Leaf-AS-Range + bgp listen range 10.10.0.0/16 peer-group eBGP-LEAFS-Underlay peer-filter Leaf-AS-Range + neighbor eBGP-BorderLeafs peer group + neighbor eBGP-BorderLeafs send-community + neighbor eBGP-BorderLeafs maximum-routes 12000 + neighbor eBGP-LEAFS-EVPN peer group + neighbor eBGP-LEAFS-EVPN next-hop-unchanged + neighbor eBGP-LEAFS-EVPN update-source Loopback0 + neighbor eBGP-LEAFS-EVPN bfd + neighbor eBGP-LEAFS-EVPN ebgp-multihop 2 + neighbor eBGP-LEAFS-EVPN send-community + neighbor eBGP-LEAFS-EVPN maximum-routes 0 + neighbor eBGP-LEAFS-Underlay peer group + neighbor eBGP-LEAFS-Underlay send-community + neighbor eBGP-LEAFS-Underlay maximum-routes 0 + ! + address-family evpn + neighbor eBGP-LEAFS-EVPN activate + ! + address-family ipv4 + neighbor eBGP-BorderLeafs activate + neighbor eBGP-LEAFS-Underlay activate + redistribute connected route-map deny-management +! \ No newline at end of file diff --git a/topologies/training-level3/configlets/Spine-2-IP-Address b/topologies/training-level3/configlets/Spine-2-IP-Address new file mode 100644 index 000000000..e8757498f --- /dev/null +++ b/topologies/training-level3/configlets/Spine-2-IP-Address @@ -0,0 +1,31 @@ +hostname spine2 +! +interface Ethernet1 +! +interface Ethernet2 + no switchport + ip address 10.10.2.1/30 +! +interface Ethernet3 + no switchport + ip address 10.10.2.5/30 +! +interface Ethernet4 + no switchport + ip address 10.10.2.9/30 +! +interface Ethernet5 + no switchport + ip address 10.10.2.13/30 +! +interface Ethernet6 + no switchport + ip address 172.16.1.6/30 +! +interface Ethernet7 + no switchport + ip address 172.16.2.6/30 +! +interface Loopback0 + ip address 10.22.22.22/32 +! diff --git a/topologies/training-level3/configlets/Spine-2-L2EVPN-Begin b/topologies/training-level3/configlets/Spine-2-L2EVPN-Begin new file mode 100644 index 000000000..9ce49879f --- /dev/null +++ b/topologies/training-level3/configlets/Spine-2-L2EVPN-Begin @@ -0,0 +1,75 @@ +hostname spine2 +! +interface Ethernet1 +! +interface Ethernet2 + no switchport + ip address 10.10.2.1/30 +! +interface Ethernet3 + no switchport + ip address 10.10.2.5/30 +! +interface Ethernet4 + no switchport + ip address 10.10.2.9/30 +! +interface Ethernet5 + no switchport + ip address 10.10.2.13/30 +! +interface Ethernet6 + no switchport + ip address 172.16.1.6/30 +! +interface Ethernet7 + no switchport + ip address 172.16.2.6/30 +! +interface Loopback0 + ip address 10.22.22.22/32 +! +ip routing +! +ip prefix-list deny-management + seq 10 deny 192.168.0.0/24 ge 24 + seq 20 permit 0.0.0.0/0 le 32 +! +route-map deny-management permit 10 + match ip address prefix-list deny-management +! +peer-filter Leaf-AS-Range + 10 match as-range 64512-65535 result accept +! +router bgp 65100 + router-id 10.22.22.22 + no bgp default ipv4-unicast + maximum-paths 4 ecmp 4 + bgp listen range 172.16.0.0/16 peer-group eBGP-BorderLeafs peer-filter Leaf-AS-Range + bgp listen range 10.11.11.11/32 peer-group eBGP-LEAFS-EVPN peer-filter Leaf-AS-Range + bgp listen range 10.12.12.12/32 peer-group eBGP-LEAFS-EVPN peer-filter Leaf-AS-Range + bgp listen range 10.13.13.13/32 peer-group eBGP-LEAFS-EVPN peer-filter Leaf-AS-Range + bgp listen range 10.14.14.14/32 peer-group eBGP-LEAFS-EVPN peer-filter Leaf-AS-Range + bgp listen range 10.10.0.0/16 peer-group eBGP-LEAFS-Underlay peer-filter Leaf-AS-Range + neighbor eBGP-BorderLeafs peer group + neighbor eBGP-BorderLeafs send-community + neighbor eBGP-BorderLeafs maximum-routes 12000 + neighbor eBGP-LEAFS-EVPN peer group + neighbor eBGP-LEAFS-EVPN next-hop-unchanged + neighbor eBGP-LEAFS-EVPN update-source Loopback0 + neighbor eBGP-LEAFS-EVPN bfd + neighbor eBGP-LEAFS-EVPN ebgp-multihop 2 + neighbor eBGP-LEAFS-EVPN send-community + neighbor eBGP-LEAFS-EVPN maximum-routes 0 + neighbor eBGP-LEAFS-Underlay peer group + neighbor eBGP-LEAFS-Underlay send-community + neighbor eBGP-LEAFS-Underlay maximum-routes 0 + ! + address-family evpn + neighbor eBGP-LEAFS-EVPN activate + ! + address-family ipv4 + neighbor eBGP-BorderLeafs activate + neighbor eBGP-LEAFS-Underlay activate + redistribute connected route-map deny-management +! \ No newline at end of file diff --git a/topologies/training-level3/configlets/Spine-2-L3EVPN-Begin b/topologies/training-level3/configlets/Spine-2-L3EVPN-Begin new file mode 100644 index 000000000..9ce49879f --- /dev/null +++ b/topologies/training-level3/configlets/Spine-2-L3EVPN-Begin @@ -0,0 +1,75 @@ +hostname spine2 +! +interface Ethernet1 +! +interface Ethernet2 + no switchport + ip address 10.10.2.1/30 +! +interface Ethernet3 + no switchport + ip address 10.10.2.5/30 +! +interface Ethernet4 + no switchport + ip address 10.10.2.9/30 +! +interface Ethernet5 + no switchport + ip address 10.10.2.13/30 +! +interface Ethernet6 + no switchport + ip address 172.16.1.6/30 +! +interface Ethernet7 + no switchport + ip address 172.16.2.6/30 +! +interface Loopback0 + ip address 10.22.22.22/32 +! +ip routing +! +ip prefix-list deny-management + seq 10 deny 192.168.0.0/24 ge 24 + seq 20 permit 0.0.0.0/0 le 32 +! +route-map deny-management permit 10 + match ip address prefix-list deny-management +! +peer-filter Leaf-AS-Range + 10 match as-range 64512-65535 result accept +! +router bgp 65100 + router-id 10.22.22.22 + no bgp default ipv4-unicast + maximum-paths 4 ecmp 4 + bgp listen range 172.16.0.0/16 peer-group eBGP-BorderLeafs peer-filter Leaf-AS-Range + bgp listen range 10.11.11.11/32 peer-group eBGP-LEAFS-EVPN peer-filter Leaf-AS-Range + bgp listen range 10.12.12.12/32 peer-group eBGP-LEAFS-EVPN peer-filter Leaf-AS-Range + bgp listen range 10.13.13.13/32 peer-group eBGP-LEAFS-EVPN peer-filter Leaf-AS-Range + bgp listen range 10.14.14.14/32 peer-group eBGP-LEAFS-EVPN peer-filter Leaf-AS-Range + bgp listen range 10.10.0.0/16 peer-group eBGP-LEAFS-Underlay peer-filter Leaf-AS-Range + neighbor eBGP-BorderLeafs peer group + neighbor eBGP-BorderLeafs send-community + neighbor eBGP-BorderLeafs maximum-routes 12000 + neighbor eBGP-LEAFS-EVPN peer group + neighbor eBGP-LEAFS-EVPN next-hop-unchanged + neighbor eBGP-LEAFS-EVPN update-source Loopback0 + neighbor eBGP-LEAFS-EVPN bfd + neighbor eBGP-LEAFS-EVPN ebgp-multihop 2 + neighbor eBGP-LEAFS-EVPN send-community + neighbor eBGP-LEAFS-EVPN maximum-routes 0 + neighbor eBGP-LEAFS-Underlay peer group + neighbor eBGP-LEAFS-Underlay send-community + neighbor eBGP-LEAFS-Underlay maximum-routes 0 + ! + address-family evpn + neighbor eBGP-LEAFS-EVPN activate + ! + address-family ipv4 + neighbor eBGP-BorderLeafs activate + neighbor eBGP-LEAFS-Underlay activate + redistribute connected route-map deny-management +! \ No newline at end of file diff --git a/topologies/training-level3/configlets/Spine-2-PIM-Begin b/topologies/training-level3/configlets/Spine-2-PIM-Begin new file mode 100644 index 000000000..9ce49879f --- /dev/null +++ b/topologies/training-level3/configlets/Spine-2-PIM-Begin @@ -0,0 +1,75 @@ +hostname spine2 +! +interface Ethernet1 +! +interface Ethernet2 + no switchport + ip address 10.10.2.1/30 +! +interface Ethernet3 + no switchport + ip address 10.10.2.5/30 +! +interface Ethernet4 + no switchport + ip address 10.10.2.9/30 +! +interface Ethernet5 + no switchport + ip address 10.10.2.13/30 +! +interface Ethernet6 + no switchport + ip address 172.16.1.6/30 +! +interface Ethernet7 + no switchport + ip address 172.16.2.6/30 +! +interface Loopback0 + ip address 10.22.22.22/32 +! +ip routing +! +ip prefix-list deny-management + seq 10 deny 192.168.0.0/24 ge 24 + seq 20 permit 0.0.0.0/0 le 32 +! +route-map deny-management permit 10 + match ip address prefix-list deny-management +! +peer-filter Leaf-AS-Range + 10 match as-range 64512-65535 result accept +! +router bgp 65100 + router-id 10.22.22.22 + no bgp default ipv4-unicast + maximum-paths 4 ecmp 4 + bgp listen range 172.16.0.0/16 peer-group eBGP-BorderLeafs peer-filter Leaf-AS-Range + bgp listen range 10.11.11.11/32 peer-group eBGP-LEAFS-EVPN peer-filter Leaf-AS-Range + bgp listen range 10.12.12.12/32 peer-group eBGP-LEAFS-EVPN peer-filter Leaf-AS-Range + bgp listen range 10.13.13.13/32 peer-group eBGP-LEAFS-EVPN peer-filter Leaf-AS-Range + bgp listen range 10.14.14.14/32 peer-group eBGP-LEAFS-EVPN peer-filter Leaf-AS-Range + bgp listen range 10.10.0.0/16 peer-group eBGP-LEAFS-Underlay peer-filter Leaf-AS-Range + neighbor eBGP-BorderLeafs peer group + neighbor eBGP-BorderLeafs send-community + neighbor eBGP-BorderLeafs maximum-routes 12000 + neighbor eBGP-LEAFS-EVPN peer group + neighbor eBGP-LEAFS-EVPN next-hop-unchanged + neighbor eBGP-LEAFS-EVPN update-source Loopback0 + neighbor eBGP-LEAFS-EVPN bfd + neighbor eBGP-LEAFS-EVPN ebgp-multihop 2 + neighbor eBGP-LEAFS-EVPN send-community + neighbor eBGP-LEAFS-EVPN maximum-routes 0 + neighbor eBGP-LEAFS-Underlay peer group + neighbor eBGP-LEAFS-Underlay send-community + neighbor eBGP-LEAFS-Underlay maximum-routes 0 + ! + address-family evpn + neighbor eBGP-LEAFS-EVPN activate + ! + address-family ipv4 + neighbor eBGP-BorderLeafs activate + neighbor eBGP-LEAFS-Underlay activate + redistribute connected route-map deny-management +! \ No newline at end of file diff --git a/topologies/training-level3/configlets/Spine-2-VXLAN-Begin b/topologies/training-level3/configlets/Spine-2-VXLAN-Begin new file mode 100644 index 000000000..9ce49879f --- /dev/null +++ b/topologies/training-level3/configlets/Spine-2-VXLAN-Begin @@ -0,0 +1,75 @@ +hostname spine2 +! +interface Ethernet1 +! +interface Ethernet2 + no switchport + ip address 10.10.2.1/30 +! +interface Ethernet3 + no switchport + ip address 10.10.2.5/30 +! +interface Ethernet4 + no switchport + ip address 10.10.2.9/30 +! +interface Ethernet5 + no switchport + ip address 10.10.2.13/30 +! +interface Ethernet6 + no switchport + ip address 172.16.1.6/30 +! +interface Ethernet7 + no switchport + ip address 172.16.2.6/30 +! +interface Loopback0 + ip address 10.22.22.22/32 +! +ip routing +! +ip prefix-list deny-management + seq 10 deny 192.168.0.0/24 ge 24 + seq 20 permit 0.0.0.0/0 le 32 +! +route-map deny-management permit 10 + match ip address prefix-list deny-management +! +peer-filter Leaf-AS-Range + 10 match as-range 64512-65535 result accept +! +router bgp 65100 + router-id 10.22.22.22 + no bgp default ipv4-unicast + maximum-paths 4 ecmp 4 + bgp listen range 172.16.0.0/16 peer-group eBGP-BorderLeafs peer-filter Leaf-AS-Range + bgp listen range 10.11.11.11/32 peer-group eBGP-LEAFS-EVPN peer-filter Leaf-AS-Range + bgp listen range 10.12.12.12/32 peer-group eBGP-LEAFS-EVPN peer-filter Leaf-AS-Range + bgp listen range 10.13.13.13/32 peer-group eBGP-LEAFS-EVPN peer-filter Leaf-AS-Range + bgp listen range 10.14.14.14/32 peer-group eBGP-LEAFS-EVPN peer-filter Leaf-AS-Range + bgp listen range 10.10.0.0/16 peer-group eBGP-LEAFS-Underlay peer-filter Leaf-AS-Range + neighbor eBGP-BorderLeafs peer group + neighbor eBGP-BorderLeafs send-community + neighbor eBGP-BorderLeafs maximum-routes 12000 + neighbor eBGP-LEAFS-EVPN peer group + neighbor eBGP-LEAFS-EVPN next-hop-unchanged + neighbor eBGP-LEAFS-EVPN update-source Loopback0 + neighbor eBGP-LEAFS-EVPN bfd + neighbor eBGP-LEAFS-EVPN ebgp-multihop 2 + neighbor eBGP-LEAFS-EVPN send-community + neighbor eBGP-LEAFS-EVPN maximum-routes 0 + neighbor eBGP-LEAFS-Underlay peer group + neighbor eBGP-LEAFS-Underlay send-community + neighbor eBGP-LEAFS-Underlay maximum-routes 0 + ! + address-family evpn + neighbor eBGP-LEAFS-EVPN activate + ! + address-family ipv4 + neighbor eBGP-BorderLeafs activate + neighbor eBGP-LEAFS-Underlay activate + redistribute connected route-map deny-management +! \ No newline at end of file diff --git a/topologies/training-level3/configlets/Spine-3-AAMH-Begin b/topologies/training-level3/configlets/Spine-3-AAMH-Begin new file mode 100644 index 000000000..21fdba380 --- /dev/null +++ b/topologies/training-level3/configlets/Spine-3-AAMH-Begin @@ -0,0 +1,73 @@ +hostname spine3 +! +interface Ethernet1 + no switchport + ip address 10.10.3.1/30 +! +interface Ethernet2 + no switchport + ip address 10.10.3.5/30 +! +interface Ethernet3 + no switchport + ip address 10.10.3.9/30 +! +interface Ethernet4 + no switchport + ip address 10.10.3.13/30 +! +interface Ethernet5 + no switchport + ip address 172.16.1.10/30 +! +interface Ethernet6 + no switchport + ip address 172.16.2.10/30 +! +interface Loopback0 + ip address 10.23.23.23/32 +! +ip routing +! +ip prefix-list deny-management + seq 10 deny 192.168.0.0/24 ge 24 + seq 20 permit 0.0.0.0/0 le 32 +! +route-map deny-management permit 10 + match ip address prefix-list deny-management +! +peer-filter Leaf-AS-Range + 10 match as-range 64512-65535 result accept +! +router bgp 65100 + router-id 10.23.23.23 + no bgp default ipv4-unicast + maximum-paths 4 ecmp 4 + bgp listen range 172.16.0.0/16 peer-group eBGP-BorderLeafs peer-filter Leaf-AS-Range + bgp listen range 10.11.11.11/32 peer-group eBGP-LEAFS-EVPN peer-filter Leaf-AS-Range + bgp listen range 10.12.12.12/32 peer-group eBGP-LEAFS-EVPN peer-filter Leaf-AS-Range + bgp listen range 10.13.13.13/32 peer-group eBGP-LEAFS-EVPN peer-filter Leaf-AS-Range + bgp listen range 10.14.14.14/32 peer-group eBGP-LEAFS-EVPN peer-filter Leaf-AS-Range + bgp listen range 10.10.0.0/16 peer-group eBGP-LEAFS-Underlay peer-filter Leaf-AS-Range + neighbor eBGP-BorderLeafs peer group + neighbor eBGP-BorderLeafs send-community + neighbor eBGP-BorderLeafs maximum-routes 12000 + neighbor eBGP-LEAFS-EVPN peer group + neighbor eBGP-LEAFS-EVPN next-hop-unchanged + neighbor eBGP-LEAFS-EVPN update-source Loopback0 + neighbor eBGP-LEAFS-EVPN bfd + neighbor eBGP-LEAFS-EVPN ebgp-multihop 2 + neighbor eBGP-LEAFS-EVPN send-community + neighbor eBGP-LEAFS-EVPN maximum-routes 0 + neighbor eBGP-LEAFS-Underlay peer group + neighbor eBGP-LEAFS-Underlay send-community + neighbor eBGP-LEAFS-Underlay maximum-routes 0 + ! + address-family evpn + neighbor eBGP-LEAFS-EVPN activate + ! + address-family ipv4 + neighbor eBGP-BorderLeafs activate + neighbor eBGP-LEAFS-Underlay activate + redistribute connected route-map deny-management +! \ No newline at end of file diff --git a/topologies/training-level3/configlets/Spine-3-IP-Address b/topologies/training-level3/configlets/Spine-3-IP-Address new file mode 100644 index 000000000..0e5613f47 --- /dev/null +++ b/topologies/training-level3/configlets/Spine-3-IP-Address @@ -0,0 +1,29 @@ +hostname spine3 +! +interface Ethernet1 + no switchport + ip address 10.10.3.1/30 +! +interface Ethernet2 + no switchport + ip address 10.10.3.5/30 +! +interface Ethernet3 + no switchport + ip address 10.10.3.9/30 +! +interface Ethernet4 + no switchport + ip address 10.10.3.13/30 +! +interface Ethernet5 + no switchport + ip address 172.16.1.10/30 +! +interface Ethernet6 + no switchport + ip address 172.16.2.10/30 +! +interface Loopback0 + ip address 10.23.23.23/32 +! diff --git a/topologies/training-level3/configlets/Spine-3-L2EVPN-Begin b/topologies/training-level3/configlets/Spine-3-L2EVPN-Begin new file mode 100644 index 000000000..21fdba380 --- /dev/null +++ b/topologies/training-level3/configlets/Spine-3-L2EVPN-Begin @@ -0,0 +1,73 @@ +hostname spine3 +! +interface Ethernet1 + no switchport + ip address 10.10.3.1/30 +! +interface Ethernet2 + no switchport + ip address 10.10.3.5/30 +! +interface Ethernet3 + no switchport + ip address 10.10.3.9/30 +! +interface Ethernet4 + no switchport + ip address 10.10.3.13/30 +! +interface Ethernet5 + no switchport + ip address 172.16.1.10/30 +! +interface Ethernet6 + no switchport + ip address 172.16.2.10/30 +! +interface Loopback0 + ip address 10.23.23.23/32 +! +ip routing +! +ip prefix-list deny-management + seq 10 deny 192.168.0.0/24 ge 24 + seq 20 permit 0.0.0.0/0 le 32 +! +route-map deny-management permit 10 + match ip address prefix-list deny-management +! +peer-filter Leaf-AS-Range + 10 match as-range 64512-65535 result accept +! +router bgp 65100 + router-id 10.23.23.23 + no bgp default ipv4-unicast + maximum-paths 4 ecmp 4 + bgp listen range 172.16.0.0/16 peer-group eBGP-BorderLeafs peer-filter Leaf-AS-Range + bgp listen range 10.11.11.11/32 peer-group eBGP-LEAFS-EVPN peer-filter Leaf-AS-Range + bgp listen range 10.12.12.12/32 peer-group eBGP-LEAFS-EVPN peer-filter Leaf-AS-Range + bgp listen range 10.13.13.13/32 peer-group eBGP-LEAFS-EVPN peer-filter Leaf-AS-Range + bgp listen range 10.14.14.14/32 peer-group eBGP-LEAFS-EVPN peer-filter Leaf-AS-Range + bgp listen range 10.10.0.0/16 peer-group eBGP-LEAFS-Underlay peer-filter Leaf-AS-Range + neighbor eBGP-BorderLeafs peer group + neighbor eBGP-BorderLeafs send-community + neighbor eBGP-BorderLeafs maximum-routes 12000 + neighbor eBGP-LEAFS-EVPN peer group + neighbor eBGP-LEAFS-EVPN next-hop-unchanged + neighbor eBGP-LEAFS-EVPN update-source Loopback0 + neighbor eBGP-LEAFS-EVPN bfd + neighbor eBGP-LEAFS-EVPN ebgp-multihop 2 + neighbor eBGP-LEAFS-EVPN send-community + neighbor eBGP-LEAFS-EVPN maximum-routes 0 + neighbor eBGP-LEAFS-Underlay peer group + neighbor eBGP-LEAFS-Underlay send-community + neighbor eBGP-LEAFS-Underlay maximum-routes 0 + ! + address-family evpn + neighbor eBGP-LEAFS-EVPN activate + ! + address-family ipv4 + neighbor eBGP-BorderLeafs activate + neighbor eBGP-LEAFS-Underlay activate + redistribute connected route-map deny-management +! \ No newline at end of file diff --git a/topologies/training-level3/configlets/Spine-3-L3EVPN-Begin b/topologies/training-level3/configlets/Spine-3-L3EVPN-Begin new file mode 100644 index 000000000..21fdba380 --- /dev/null +++ b/topologies/training-level3/configlets/Spine-3-L3EVPN-Begin @@ -0,0 +1,73 @@ +hostname spine3 +! +interface Ethernet1 + no switchport + ip address 10.10.3.1/30 +! +interface Ethernet2 + no switchport + ip address 10.10.3.5/30 +! +interface Ethernet3 + no switchport + ip address 10.10.3.9/30 +! +interface Ethernet4 + no switchport + ip address 10.10.3.13/30 +! +interface Ethernet5 + no switchport + ip address 172.16.1.10/30 +! +interface Ethernet6 + no switchport + ip address 172.16.2.10/30 +! +interface Loopback0 + ip address 10.23.23.23/32 +! +ip routing +! +ip prefix-list deny-management + seq 10 deny 192.168.0.0/24 ge 24 + seq 20 permit 0.0.0.0/0 le 32 +! +route-map deny-management permit 10 + match ip address prefix-list deny-management +! +peer-filter Leaf-AS-Range + 10 match as-range 64512-65535 result accept +! +router bgp 65100 + router-id 10.23.23.23 + no bgp default ipv4-unicast + maximum-paths 4 ecmp 4 + bgp listen range 172.16.0.0/16 peer-group eBGP-BorderLeafs peer-filter Leaf-AS-Range + bgp listen range 10.11.11.11/32 peer-group eBGP-LEAFS-EVPN peer-filter Leaf-AS-Range + bgp listen range 10.12.12.12/32 peer-group eBGP-LEAFS-EVPN peer-filter Leaf-AS-Range + bgp listen range 10.13.13.13/32 peer-group eBGP-LEAFS-EVPN peer-filter Leaf-AS-Range + bgp listen range 10.14.14.14/32 peer-group eBGP-LEAFS-EVPN peer-filter Leaf-AS-Range + bgp listen range 10.10.0.0/16 peer-group eBGP-LEAFS-Underlay peer-filter Leaf-AS-Range + neighbor eBGP-BorderLeafs peer group + neighbor eBGP-BorderLeafs send-community + neighbor eBGP-BorderLeafs maximum-routes 12000 + neighbor eBGP-LEAFS-EVPN peer group + neighbor eBGP-LEAFS-EVPN next-hop-unchanged + neighbor eBGP-LEAFS-EVPN update-source Loopback0 + neighbor eBGP-LEAFS-EVPN bfd + neighbor eBGP-LEAFS-EVPN ebgp-multihop 2 + neighbor eBGP-LEAFS-EVPN send-community + neighbor eBGP-LEAFS-EVPN maximum-routes 0 + neighbor eBGP-LEAFS-Underlay peer group + neighbor eBGP-LEAFS-Underlay send-community + neighbor eBGP-LEAFS-Underlay maximum-routes 0 + ! + address-family evpn + neighbor eBGP-LEAFS-EVPN activate + ! + address-family ipv4 + neighbor eBGP-BorderLeafs activate + neighbor eBGP-LEAFS-Underlay activate + redistribute connected route-map deny-management +! \ No newline at end of file diff --git a/topologies/training-level3/configlets/Spine-3-PIM-Begin b/topologies/training-level3/configlets/Spine-3-PIM-Begin new file mode 100644 index 000000000..21fdba380 --- /dev/null +++ b/topologies/training-level3/configlets/Spine-3-PIM-Begin @@ -0,0 +1,73 @@ +hostname spine3 +! +interface Ethernet1 + no switchport + ip address 10.10.3.1/30 +! +interface Ethernet2 + no switchport + ip address 10.10.3.5/30 +! +interface Ethernet3 + no switchport + ip address 10.10.3.9/30 +! +interface Ethernet4 + no switchport + ip address 10.10.3.13/30 +! +interface Ethernet5 + no switchport + ip address 172.16.1.10/30 +! +interface Ethernet6 + no switchport + ip address 172.16.2.10/30 +! +interface Loopback0 + ip address 10.23.23.23/32 +! +ip routing +! +ip prefix-list deny-management + seq 10 deny 192.168.0.0/24 ge 24 + seq 20 permit 0.0.0.0/0 le 32 +! +route-map deny-management permit 10 + match ip address prefix-list deny-management +! +peer-filter Leaf-AS-Range + 10 match as-range 64512-65535 result accept +! +router bgp 65100 + router-id 10.23.23.23 + no bgp default ipv4-unicast + maximum-paths 4 ecmp 4 + bgp listen range 172.16.0.0/16 peer-group eBGP-BorderLeafs peer-filter Leaf-AS-Range + bgp listen range 10.11.11.11/32 peer-group eBGP-LEAFS-EVPN peer-filter Leaf-AS-Range + bgp listen range 10.12.12.12/32 peer-group eBGP-LEAFS-EVPN peer-filter Leaf-AS-Range + bgp listen range 10.13.13.13/32 peer-group eBGP-LEAFS-EVPN peer-filter Leaf-AS-Range + bgp listen range 10.14.14.14/32 peer-group eBGP-LEAFS-EVPN peer-filter Leaf-AS-Range + bgp listen range 10.10.0.0/16 peer-group eBGP-LEAFS-Underlay peer-filter Leaf-AS-Range + neighbor eBGP-BorderLeafs peer group + neighbor eBGP-BorderLeafs send-community + neighbor eBGP-BorderLeafs maximum-routes 12000 + neighbor eBGP-LEAFS-EVPN peer group + neighbor eBGP-LEAFS-EVPN next-hop-unchanged + neighbor eBGP-LEAFS-EVPN update-source Loopback0 + neighbor eBGP-LEAFS-EVPN bfd + neighbor eBGP-LEAFS-EVPN ebgp-multihop 2 + neighbor eBGP-LEAFS-EVPN send-community + neighbor eBGP-LEAFS-EVPN maximum-routes 0 + neighbor eBGP-LEAFS-Underlay peer group + neighbor eBGP-LEAFS-Underlay send-community + neighbor eBGP-LEAFS-Underlay maximum-routes 0 + ! + address-family evpn + neighbor eBGP-LEAFS-EVPN activate + ! + address-family ipv4 + neighbor eBGP-BorderLeafs activate + neighbor eBGP-LEAFS-Underlay activate + redistribute connected route-map deny-management +! \ No newline at end of file diff --git a/topologies/training-level3/configlets/Spine-3-VXLAN-Begin b/topologies/training-level3/configlets/Spine-3-VXLAN-Begin new file mode 100644 index 000000000..21fdba380 --- /dev/null +++ b/topologies/training-level3/configlets/Spine-3-VXLAN-Begin @@ -0,0 +1,73 @@ +hostname spine3 +! +interface Ethernet1 + no switchport + ip address 10.10.3.1/30 +! +interface Ethernet2 + no switchport + ip address 10.10.3.5/30 +! +interface Ethernet3 + no switchport + ip address 10.10.3.9/30 +! +interface Ethernet4 + no switchport + ip address 10.10.3.13/30 +! +interface Ethernet5 + no switchport + ip address 172.16.1.10/30 +! +interface Ethernet6 + no switchport + ip address 172.16.2.10/30 +! +interface Loopback0 + ip address 10.23.23.23/32 +! +ip routing +! +ip prefix-list deny-management + seq 10 deny 192.168.0.0/24 ge 24 + seq 20 permit 0.0.0.0/0 le 32 +! +route-map deny-management permit 10 + match ip address prefix-list deny-management +! +peer-filter Leaf-AS-Range + 10 match as-range 64512-65535 result accept +! +router bgp 65100 + router-id 10.23.23.23 + no bgp default ipv4-unicast + maximum-paths 4 ecmp 4 + bgp listen range 172.16.0.0/16 peer-group eBGP-BorderLeafs peer-filter Leaf-AS-Range + bgp listen range 10.11.11.11/32 peer-group eBGP-LEAFS-EVPN peer-filter Leaf-AS-Range + bgp listen range 10.12.12.12/32 peer-group eBGP-LEAFS-EVPN peer-filter Leaf-AS-Range + bgp listen range 10.13.13.13/32 peer-group eBGP-LEAFS-EVPN peer-filter Leaf-AS-Range + bgp listen range 10.14.14.14/32 peer-group eBGP-LEAFS-EVPN peer-filter Leaf-AS-Range + bgp listen range 10.10.0.0/16 peer-group eBGP-LEAFS-Underlay peer-filter Leaf-AS-Range + neighbor eBGP-BorderLeafs peer group + neighbor eBGP-BorderLeafs send-community + neighbor eBGP-BorderLeafs maximum-routes 12000 + neighbor eBGP-LEAFS-EVPN peer group + neighbor eBGP-LEAFS-EVPN next-hop-unchanged + neighbor eBGP-LEAFS-EVPN update-source Loopback0 + neighbor eBGP-LEAFS-EVPN bfd + neighbor eBGP-LEAFS-EVPN ebgp-multihop 2 + neighbor eBGP-LEAFS-EVPN send-community + neighbor eBGP-LEAFS-EVPN maximum-routes 0 + neighbor eBGP-LEAFS-Underlay peer group + neighbor eBGP-LEAFS-Underlay send-community + neighbor eBGP-LEAFS-Underlay maximum-routes 0 + ! + address-family evpn + neighbor eBGP-LEAFS-EVPN activate + ! + address-family ipv4 + neighbor eBGP-BorderLeafs activate + neighbor eBGP-LEAFS-Underlay activate + redistribute connected route-map deny-management +! \ No newline at end of file diff --git a/topologies/training-level3/files/menus/training-l3.yaml b/topologies/training-level3/files/menus/training-l3.yaml index 5d954d637..1ff28246a 100644 --- a/topologies/training-level3/files/menus/training-l3.yaml +++ b/topologies/training-level3/files/menus/training-l3.yaml @@ -53,13 +53,13 @@ - "Leaf-1-VXLAN-Begin" leaf2: - "leaf2-base" - - "Leaf-1-VXLAN-Begin" + - "Leaf-2-VXLAN-Begin" leaf3: - "leaf3-base" - "leaf-3-VXLAN-Begin" leaf4: - "leaf4-base" - - "leaf-3-VXLAN-Begin" + - "leaf-4-VXLAN-Begin" host1: - "host1-base" - "Host-1-VXLAN-Begin" diff --git a/topologies/training-level3v2/atd-topo.png b/topologies/training-level3v2/atd-topo.png new file mode 100644 index 000000000..4cc023b85 Binary files /dev/null and b/topologies/training-level3v2/atd-topo.png differ diff --git a/topologies/training-level3v2/configlets/ATD-INFRA b/topologies/training-level3v2/configlets/ATD-INFRA new file mode 100644 index 000000000..6a88951d1 --- /dev/null +++ b/topologies/training-level3v2/configlets/ATD-INFRA @@ -0,0 +1,45 @@ +daemon TerminAttr + exec /usr/bin/TerminAttr -cvcompression=gzip -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent -cvaddr=192.168.0.5:9910 -cvauth=token,/tmp/token -cvvrf=default -taillogs -disableaaa + no shutdown +! +alias mlag-reload bash /mnt/flash/shut_intfs && sudo shutdown now -r +alias conint sh interface | i connected +alias senz show interface counter error | nz +alias shmc show int | awk '/^[A-Z]/ { intf = $1 } /, address is/ { print intf, $6 }' +alias snz show interface counter | nz +alias spd show port-channel %1 detail all +alias sqnz show interface counter queue | nz +alias srnz show interface counter rate | nz +alias intdesc + !! Usage: intdesc interface-name description + 10 config + 20 int %1 + 30 desc %2 + 40 exit +! +dns domain arista.lab +! +service routing protocols model multi-agent +! +ntp server 192.168.0.1 iburst source Management1 +! +radius-server host 192.168.0.1 key 7 0207165218120E +! +aaa group server radius atds + server 192.168.0.1 +! +aaa authentication login default group atds local +aaa authorization exec default group atds local +aaa authorization commands all default local +! +username Script secret sha512 $6$PNfpb9anSBQ5/aia$phaa3ar5pwkntenD9WHc6Ed5b96lbW0dc0bjtwPnFLaDiCK8D5Cjl6ewP/xdNbl4PtS6Paq.3SssN8pj05NQm. +username admin privilege 15 role network-admin secret 5 $1$5O85YVVn$HrXcfOivJEnISTMb6xrJc. +username arista privilege 15 role network-admin secret 5 $1$4VjIjfd1$XkUVulbNDESHFzcxDU.Tk1 +! +username arista ssh-key ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC+ERvV4GaPq3FzxY8T+5hMF/1T+l8wiPsVCtOrZU4Hy6NCNlAiDBdA/RUtX5/aOu5JvHyPTVHqWJ0qi9BqU3rxCNl/l2/5UZbm9RPzdZ1QCwoYwPB9/j/tYJV8lZdr6t0yGBfxgzD3oW/zF7a+ZtASaMAu7lkgoqPK2pVIGa+Y9ZCsA0Xq756XpLCw+d3pHKHvIkgWLCo9FoeIv8f/bu5u/ztzRE+Nvl+o5add6MxnjsXz3s7BnW2FX6JNjyp0Z+OXjupQc2gcfFvpd/dA2lCNuuaCHkRgyPwIZtWPmNqMRXPp37mlPwV43qDJRVPQkvh0xPxwS35BbzUxWdT+ZLZv +! +ip radius source-interface Management1 +! +management api http-commands + no shutdown +! diff --git a/topologies/training-level3v2/configlets/Base-Builder.py b/topologies/training-level3v2/configlets/Base-Builder.py new file mode 100644 index 000000000..167d9c750 --- /dev/null +++ b/topologies/training-level3v2/configlets/Base-Builder.py @@ -0,0 +1,86 @@ +from cvplibrary import CVPGlobalVariables, GlobalVariableNames, Form + + + +# Get this devices Serial + + +serial = CVPGlobalVariables.getValue( GlobalVariableNames.CVP_SERIAL ) +mask = '24' +ServiceRouting = True + +#Create the IP address from the serial number + + +if serial == '4A7F6E96300132903A73A74CCF18B697': + IPaddress = '192.168.0.21' + hostname = 'leaf1' + + +elif serial == '3831DEFC364900BF9EEFC45FEE7794E7': + IPaddress = '192.168.0.22' + hostname = 'leaf2' + + +elif serial == 'ED469CFA13C4017B2D19BF7EBCAD50B1': + IPaddress = '192.168.0.23' + hostname = 'leaf3' + + +elif serial == '434653268ABA082A2FF6B52F1367CE80': + IPaddress = '192.168.0.24' + hostname = 'leaf4' + +elif serial == '8085B9640BC6D8FDC1FD23D242EBF433': + IPaddress = '192.168.0.11' + hostname = 'spine1' + +elif serial == 'D28D62E5729AB8BF44A0BC017DEB188A': + IPaddress = '192.168.0.12' + hostname = 'spine2' + +elif serial == 'F77703A62ADE220E689A41057AA56288': + IPaddress = '192.168.0.13' + hostname = 'spine3' + +elif serial == 'D763323F00C03738A8C824D2F1DA05E8': + IPaddress = '192.168.0.25' + hostname = 'borderleaf1' + +elif serial == '7C16136B7483F2E2FB002E8E0646F1F0': + IPaddress = '192.168.0.26' + hostname = 'borderleaf2' + +elif serial == '86342B780ED73BCB30E1DFE48E26AC38': + IPaddress = '192.168.0.51' + ServiceRouting = False + hostname = 'host1' + + +elif serial == 'CE0B31805130945E3CE40B060E9E636D': + IPaddress = '192.168.0.52' + ServiceRouting = False + hostname = 'host2' + + +# Generate and print config - Ignore the service routing command if not needed +print 'hostname %s' % hostname +print '!' +print 'interface Management 1' +print ' ip address %s/%s' % ( IPaddress, mask ) +print ' no lldp transmit' +print ' no lldp receive' +print '!' +if ServiceRouting: + print 'service routing protocols model multi-agent' + print '!' +print 'dns domain arista.lab' +print '!' +print 'ip route 0.0.0.0/0 192.168.0.1' +print '!' +print 'ip routing' +print '!' +print 'management api http-commands' +print ' no shutdown' +print ' protocol http' +print '!' \ No newline at end of file diff --git a/topologies/training-level3v2/configlets/borderleaf1-base b/topologies/training-level3v2/configlets/borderleaf1-base new file mode 100644 index 000000000..556895b8c --- /dev/null +++ b/topologies/training-level3v2/configlets/borderleaf1-base @@ -0,0 +1,15 @@ +hostname borderleaf1 +! +interface Management 1 + ip address 192.168.0.25/24 + no lldp transmit + no lldp receive +! +service routing protocols model multi-agent +! +dns domain arista.lab +! +ip route 0.0.0.0/0 192.168.0.1 +! +ip routing +! diff --git a/topologies/training-level3v2/configlets/borderleaf2-base b/topologies/training-level3v2/configlets/borderleaf2-base new file mode 100644 index 000000000..cde4736cf --- /dev/null +++ b/topologies/training-level3v2/configlets/borderleaf2-base @@ -0,0 +1,15 @@ +hostname borderleaf2 +! +interface Management 1 + ip address 192.168.0.26/24 + no lldp transmit + no lldp receive +! +service routing protocols model multi-agent +! +dns domain arista.lab +! +ip route 0.0.0.0/0 192.168.0.1 +! +ip routing +! diff --git a/topologies/training-level3v2/configlets/host1-base b/topologies/training-level3v2/configlets/host1-base new file mode 100644 index 000000000..9bf7152e8 --- /dev/null +++ b/topologies/training-level3v2/configlets/host1-base @@ -0,0 +1,15 @@ +hostname host1 +! +spanning-tree mode none +! +interface Management 1 + ip address 192.168.0.51/24 + no lldp transmit + no lldp receive +! +dns domain arista.lab +! +ip route 0.0.0.0/0 192.168.0.1 +! +ip routing +! \ No newline at end of file diff --git a/topologies/training-level3v2/configlets/host2-base b/topologies/training-level3v2/configlets/host2-base new file mode 100644 index 000000000..b2e6e735e --- /dev/null +++ b/topologies/training-level3v2/configlets/host2-base @@ -0,0 +1,15 @@ +hostname host2 +! +spanning-tree mode none +! +interface Management 1 + ip address 192.168.0.52/24 + no lldp transmit + no lldp receive +! +dns domain arista.lab +! +ip route 0.0.0.0/0 192.168.0.1 +! +ip routing +! diff --git a/topologies/training-level3v2/configlets/host3-base b/topologies/training-level3v2/configlets/host3-base new file mode 100644 index 000000000..b2812b722 --- /dev/null +++ b/topologies/training-level3v2/configlets/host3-base @@ -0,0 +1,15 @@ +hostname host3 +! +spanning-tree mode none +! +interface Management 1 + ip address 192.168.0.53/24 + no lldp transmit + no lldp receive +! +dns domain arista.lab +! +ip route 0.0.0.0/0 192.168.0.1 +! +ip routing +! diff --git a/topologies/training-level3v2/configlets/host4-base b/topologies/training-level3v2/configlets/host4-base new file mode 100644 index 000000000..252a6e4a2 --- /dev/null +++ b/topologies/training-level3v2/configlets/host4-base @@ -0,0 +1,15 @@ +hostname host4 +! +spanning-tree mode none +! +interface Management 1 + ip address 192.168.0.54/24 + no lldp transmit + no lldp receive +! +dns domain arista.lab +! +ip route 0.0.0.0/0 192.168.0.1 +! +ip routing +! diff --git a/topologies/training-level3v2/configlets/leaf1-base b/topologies/training-level3v2/configlets/leaf1-base new file mode 100644 index 000000000..47e0ce3f6 --- /dev/null +++ b/topologies/training-level3v2/configlets/leaf1-base @@ -0,0 +1,15 @@ +hostname leaf1 +! +interface Management 1 + ip address 192.168.0.21/24 + no lldp transmit + no lldp receive +! +service routing protocols model multi-agent +! +dns domain arista.lab +! +ip route 0.0.0.0/0 192.168.0.1 +! +ip routing +! diff --git a/topologies/training-level3v2/configlets/leaf2-base b/topologies/training-level3v2/configlets/leaf2-base new file mode 100644 index 000000000..72fae64c3 --- /dev/null +++ b/topologies/training-level3v2/configlets/leaf2-base @@ -0,0 +1,15 @@ +hostname leaf2 +! +interface Management 1 + ip address 192.168.0.22/24 + no lldp transmit + no lldp receive +! +service routing protocols model multi-agent +! +dns domain arista.lab +! +ip route 0.0.0.0/0 192.168.0.1 +! +ip routing +! diff --git a/topologies/training-level3v2/configlets/leaf3-base b/topologies/training-level3v2/configlets/leaf3-base new file mode 100644 index 000000000..ab93834f4 --- /dev/null +++ b/topologies/training-level3v2/configlets/leaf3-base @@ -0,0 +1,15 @@ +hostname leaf3 +! +interface Management 1 + ip address 192.168.0.23/24 + no lldp transmit + no lldp receive +! +service routing protocols model multi-agent +! +dns domain arista.lab +! +ip route 0.0.0.0/0 192.168.0.1 +! +ip routing +! diff --git a/topologies/training-level3v2/configlets/leaf4-base b/topologies/training-level3v2/configlets/leaf4-base new file mode 100644 index 000000000..a3b808c25 --- /dev/null +++ b/topologies/training-level3v2/configlets/leaf4-base @@ -0,0 +1,15 @@ +hostname leaf4 +! +interface Management 1 + ip address 192.168.0.24/24 + no lldp transmit + no lldp receive +! +service routing protocols model multi-agent +! +dns domain arista.lab +! +ip route 0.0.0.0/0 192.168.0.1 +! +ip routing +! diff --git a/topologies/training-level3v2/configlets/spine1-base b/topologies/training-level3v2/configlets/spine1-base new file mode 100644 index 000000000..322102842 --- /dev/null +++ b/topologies/training-level3v2/configlets/spine1-base @@ -0,0 +1,15 @@ +hostname spine1 +! +interface Management 1 + ip address 192.168.0.11/24 + no lldp transmit + no lldp receive +! +service routing protocols model multi-agent +! +dns domain arista.lab +! +ip route 0.0.0.0/0 192.168.0.1 +! +ip routing +! diff --git a/topologies/training-level3v2/configlets/spine2-base b/topologies/training-level3v2/configlets/spine2-base new file mode 100644 index 000000000..c664c14cc --- /dev/null +++ b/topologies/training-level3v2/configlets/spine2-base @@ -0,0 +1,15 @@ +hostname spine2 +! +interface Management 1 + ip address 192.168.0.12/24 + no lldp transmit + no lldp receive +! +service routing protocols model multi-agent +! +dns domain arista.lab +! +ip route 0.0.0.0/0 192.168.0.1 +! +ip routing +! diff --git a/topologies/training-level3v2/configlets/spine3-base b/topologies/training-level3v2/configlets/spine3-base new file mode 100644 index 000000000..d964a927a --- /dev/null +++ b/topologies/training-level3v2/configlets/spine3-base @@ -0,0 +1,15 @@ +hostname spine3 +! +interface Management 1 + ip address 192.168.0.13/24 + no lldp transmit + no lldp receive +! +service routing protocols model multi-agent +! +dns domain arista.lab +! +ip route 0.0.0.0/0 192.168.0.1 +! +ip routing +! \ No newline at end of file diff --git a/topologies/training-level3v2/configlets/spine4-base b/topologies/training-level3v2/configlets/spine4-base new file mode 100644 index 000000000..db1c7c18a --- /dev/null +++ b/topologies/training-level3v2/configlets/spine4-base @@ -0,0 +1,15 @@ +hostname spine4 +! +interface Management 1 + ip address 192.168.0.14/24 + no lldp transmit + no lldp receive +! +service routing protocols model multi-agent +! +dns domain arista.lab +! +ip route 0.0.0.0/0 192.168.0.1 +! +ip routing +! \ No newline at end of file diff --git a/topologies/training-level3v2/files/.ansible.cfg b/topologies/training-level3v2/files/.ansible.cfg new file mode 100644 index 000000000..14c806515 --- /dev/null +++ b/topologies/training-level3v2/files/.ansible.cfg @@ -0,0 +1,2 @@ +[defaults] +host_key_checking = False diff --git a/topologies/training-level3v2/files/.screenrc b/topologies/training-level3v2/files/.screenrc new file mode 100644 index 000000000..1d70f5e42 --- /dev/null +++ b/topologies/training-level3v2/files/.screenrc @@ -0,0 +1,23 @@ +# Turn off the startup message. +startup_message off +# Set the caption to the active windows. +caption always "%-Lw%{= BW}%50>%n%f* %t%{-}%+Lw%<" + +term screen-256color + +# New screens for various processes. +# Example: screen -t +# screen -t 7050SX-128 0 ssh aristaadmin@192.100.37.128 +screen 1 ssh 192.168.0.4 +screen -t CVP 2 ssh 192.168.0.5 +screen -t Spine1 3 ssh 192.168.0.11 +screen -t Spine2 4 ssh 192.168.0.12 +screen -t Spine3 5 ssh 192.168.0.13 +screen -t Leaf1 6 ssh 192.168.0.21 +screen -t Leaf2 7 ssh 192.168.0.22 +screen -t Leaf3 8 ssh 192.168.0.23 +screen -t Leaf4 9 ssh 192.168.0.24 +screen -t Borderleaf1 10 ssh 192.168.0.25 +screen -t Borderlead2 11 ssh 192.168.0.26 +screen -t Host1 15 ssh 192.168.0.51 +screen -t Host2 16 ssh 192.168.0.52 diff --git a/topologies/training-level3v2/files/MenuOptions.yaml b/topologies/training-level3v2/files/MenuOptions.yaml new file mode 100644 index 000000000..f68e2261d --- /dev/null +++ b/topologies/training-level3v2/files/MenuOptions.yaml @@ -0,0 +1,214 @@ +--- +options: + reset: + - command: "/usr/local/bin/ConfigureTopology.py && bash /home/arista/Broadcaster/pushHostDefaultConfig.sh" + description: "Reset All Devices to Base ATD (reset)" + vxlan: + - command: "/usr/local/bin/ConfigureTopology.py -t vxlan" + description: "VXLAN Lab (vxlan)" + l2evpn: + - command: "/usr/local/bin/ConfigureTopology.py -t l2evpn" + description: "L2-EVPN Lab (l2evpn)" + l3evpn: + - command: "/usr/local/bin/ConfigureTopology.py -t l3evpn" + description: "L3-EVPN Lab (l3evpn)" + aamh: + - command: "/usr/local/bin/ConfigureTopology.py -t aamh" + description: "Active-Active Multi Homing lab (aamh)" + pim: + - command: "/usr/local/bin/ConfigureTopology.py -t aamh" + description: "PIM Lab (pim)" +labconfiglets: + reset: + spine1: + - "spine1-base" + spine2: + - "spine2-base" + spine3: + - "spine3-base" + leaf1: + - "leaf1-base" + leaf2: + - "leaf2-base" + leaf3: + - "leaf3-base" + leaf4: + - "leaf4-base" + host1: + - "host1-base" + host2: + - "host2-base" + borderleaf1: + - "borderleaf1-base" + borderleaf2: + - "borderleaf2-base" + vxlan: + spine1: + - "spine1-base" + - "Spine-1-VXALN-Begin" + spine2: + - "spine2-base" + - "Spine-2-VXALN-Begin" + spine3: + - "spine3-base" + - "Spine-3-VXALN-Begin" + leaf1: + - "leaf1-base" + - "Leaf-1-VXALN-Begin" + leaf2: + - "leaf2-base" + - "Leaf-2-VXALN-Begin" + leaf3: + - "leaf3-base" + - "leaf-3-VXALN-Begin" + leaf4: + - "leaf4-base" + - "leaf-4-VXALN-Begin" + host1: + - "host1-base" + - "Host-1-VXALN-Begin" + host2: + - "host2-base" + - "Host-2-VXALN-Begin" + borderleaf1: + - "borderleaf1-base" + - "Borderleaf-1-VXALN-Begin" + borderleaf2: + - "borderleaf2-base" + - "Borderleaf-2-VXALN-Begin" + l2evpn: + spine1: + - "spine1-base" + - "Spine-1-L2EVPN-Begin" + spine2: + - "spine2-base" + - "Spine-2-L2EVPN-Begin" + spine3: + - "spine3-base" + - "Spine-3-L2EVPN-Begin" + leaf1: + - "leaf1-base" + - "Leaf-1-L2EVPN-Begin" + leaf2: + - "leaf2-base" + - "Leaf-2-L2EVPN-Begin" + leaf3: + - "leaf3-base" + - "Leaf-3-L2EVPN-Begin" + leaf4: + - "leaf4-base" + - "Leaf-4-L2EVPN-Begin" + host1: + - "host1-base" + - "Host-1-L2EVPN-Begin" + host2: + - "host2-base" + - "Host-2-L2EVPN-Begin" + borderleaf1: + - "borderleaf1-base" + - "Borderleaf-1-L2EVPN-Begin" + borderleaf2: + - "borderleaf2-base" + - "Borderleaf-2-L2EVPN-Begin" + l3evpn: + spine1: + - "spine1-base" + - "Spine-1-L3EVPN-Begin" + spine2: + - "spine2-base" + - "Spine-2-L3EVPN-Begin" + spine3: + - "spine3-base" + - "Spine-3-L3EVPN-Begin" + leaf1: + - "leaf1-base" + - "Leaf-1-L3EVPN-Begin" + leaf2: + - "leaf2-base" + - "Leaf-2-L3EVPN-Begin" + leaf3: + - "leaf3-base" + - "Leaf-3-L3EVPN-Begin" + leaf4: + - "leaf4-base" + - "Leaf-4-L3EVPN-Begin" + host1: + - "host1-base" + - "Host-1-L3EVPN-Begin" + host2: + - "host2-base" + - "Host-2-L3EVPN-Begin" + borderleaf1: + - "borderleaf1-base" + - "Borderleaf-1-L3EVPN-Begin" + borderleaf2: + - "borderleaf2-base" + - "Borderleaf-2-L3EVPN-Begin" + aamh: + spine1: + - "spine1-base" + - "Spine-1-AAMH-Begin" + spine2: + - "spine2-base" + - "Spine-2-AAMH-Begin" + spine3: + - "spine3-base" + - "Spine-3-AAMH-Begin" + leaf1: + - "leaf1-base" + - "Leaf-1-AAMH-Begin" + leaf2: + - "leaf2-base" + - "Leaf-2-AAMH-Begin" + leaf3: + - "leaf3-base" + - "Leaf-3-AAMH-Begin" + leaf4: + - "leaf4-base" + - "Leaf-4-AAMH-Begin" + host1: + - "host1-base" + - "Host-1-AAMH-Begin" + host2: + - "host2-base" + - "Host-2-AAMH-Begin" + borderleaf1: + - "borderleaf1-base" + - "Borderleaf-1-AAMH-Begin" + borderleaf2: + - "borderleaf2-base" + - "Borderleaf-2-AAMH-Begin" + pim: + spine1: + - "spine1-base" + - "Spine-1-PIM-Begin" + spine2: + - "spine2-base" + - "Spine-2-PIM-Begin" + spine3: + - "spine3-base" + - "Spine-3-PIM-Begin" + leaf1: + - "leaf1-base" + - "Leaf-1-PIM-Begin" + leaf2: + - "leaf2-base" + - "Leaf-2-PIM-Begin" + leaf3: + - "leaf3-base" + - "Leaf-3-PIM-Begin" + leaf4: + - "leaf4-base" + - "Leaf-4-PIM-Begin" + host1: + - "host1-base" + - "Host-1-PIM-Begin" + host2: + - "host2-base" + - "Host-2-PIM-Begin" + borderleaf1: + - "borderleaf1-base" + - "Borderleaf-1-PIM-Begin" + borderleaf2: + - "borderleaf2-base" + - "Borderleaf-2-PIM-Begin" \ No newline at end of file diff --git a/topologies/training-level3v2/files/apps/coder/coder.yaml b/topologies/training-level3v2/files/apps/coder/coder.yaml new file mode 100644 index 000000000..80cc852d1 --- /dev/null +++ b/topologies/training-level3v2/files/apps/coder/coder.yaml @@ -0,0 +1,4 @@ +bind-addr: 127.0.0.1:8080 +auth: password +password: {ARISTA_REPLACE} +cert: false \ No newline at end of file diff --git a/topologies/training-level3v2/files/apps/coder/labfiles/.placeholder b/topologies/training-level3v2/files/apps/coder/labfiles/.placeholder new file mode 100644 index 000000000..e69de29bb diff --git a/topologies/training-level3v2/files/apps/ssh/web.json b/topologies/training-level3v2/files/apps/ssh/web.json new file mode 100644 index 000000000..13fac47dd --- /dev/null +++ b/topologies/training-level3v2/files/apps/ssh/web.json @@ -0,0 +1,76 @@ +{ + "listen": { + "ip": "0.0.0.0", + "port": 2222 + }, + "user": { + "name": null, + "password": null, + "privatekey": null + }, + "ssh": { + "host": null, + "port": 22, + "localAddress": null, + "localPort": null, + "term": "xterm-color", + "readyTimeout": 20000, + "keepaliveInterval": 120000, + "keepaliveCountMax": 10, + "allowedSubnets": [ "192.168.0.0/16", "10.0.0.0/8", "172.16.0.0/12" ] + }, + "terminal": { + "cursorBlink": true, + "scrollback": 10000, + "tabStopWidth": 8, + "bellStyle": "sound" + }, + "header": { + "text": null, + "background": "green" + }, + "session": { + "name": "WebSSH2", + "secret": "mysecret" + }, + "options": { + "challengeButton": true, + "allowreauth": true + }, + "algorithms": { + "kex": [ + "ecdh-sha2-nistp256", + "ecdh-sha2-nistp384", + "ecdh-sha2-nistp521", + "diffie-hellman-group-exchange-sha256", + "diffie-hellman-group14-sha1" + ], + "cipher": [ + "aes128-ctr", + "aes192-ctr", + "aes256-ctr", + "aes128-gcm", + "aes128-gcm@openssh.com", + "aes256-gcm", + "aes256-gcm@openssh.com", + "aes256-cbc" + ], + "hmac": [ + "hmac-sha2-256", + "hmac-sha2-512", + "hmac-sha1" + ], + "compress": [ + "none", + "zlib@openssh.com", + "zlib" + ] + }, + "serverlog": { + "client": false, + "server": false + }, + "accesslog": false, + "verify": false, + "safeShutdownDuration": 300 + } \ No newline at end of file diff --git a/topologies/training-level3v2/files/apps/uilanding/modules.yaml b/topologies/training-level3v2/files/apps/uilanding/modules.yaml new file mode 100644 index 000000000..62484fa8d --- /dev/null +++ b/topologies/training-level3v2/files/apps/uilanding/modules.yaml @@ -0,0 +1,39 @@ +topology: + image: "atd-topo.png" + nodes: + Spine1: + coords: "43,231,220,314" + ip: "192.168.0.11" + Spine2: + coords: "324,227,503,315" + ip: "192.168.0.12" + Spine3: + coords: "596,231,777,316" + ip: "192.168.0.13" + Spine4: + coords: "880,233,1056,315" + ip: "192.168.0.14" + Leaf1: + coords: "42,518,219,601" + ip: "192.168.0.21" + Leaf2: + coords: "324,519,502,603" + ip: "192.168.0.22" + Leaf3: + coords: "597,519,779,605" + ip: "192.168.0.23" + Leaf4: + coords: "882,522,1055,603" + ip: "192.168.0.24" + BorderLeaf1: + coords: "501,100,323,20" + ip: "192.168.0.25" + BorderLeaf2: + coords: "599,20,778,101" + ip: "192.168.0.26" + Host1: + coords: "184,669,362,756" + ip: "192.168.0.51" + Host2: + coords: "753,673,928,751" + ip: "192.168.0.52" diff --git a/topologies/training-level3v2/files/apps/webui/.vncpass_clear b/topologies/training-level3v2/files/apps/webui/.vncpass_clear new file mode 100644 index 000000000..cd09dd7a5 --- /dev/null +++ b/topologies/training-level3v2/files/apps/webui/.vncpass_clear @@ -0,0 +1 @@ +@rista1 \ No newline at end of file diff --git a/topologies/training-level3v2/files/cvp/cvp_info.yaml b/topologies/training-level3v2/files/cvp/cvp_info.yaml new file mode 100644 index 000000000..89744587c --- /dev/null +++ b/topologies/training-level3v2/files/cvp/cvp_info.yaml @@ -0,0 +1,64 @@ +cvp_info: + containers: + Tenant: + nodes: + Leaf: + parent: Tenant + nodes: + - leaf1 + - leaf2 + - leaf3 + - leaf4 + Borderleaf: + parent: Tenant + nodes: + - borderleaf1 + - borderleaf2 + Spine: + parent: Tenant + nodes: + - spine1 + - spine2 + - spine3 + - spine4 + Hosts: + parent: Tenant + nodes: + - host1 + - host2 + - host3 + - host4 + snapshots: + configlets: + containers: + Tenant: + - ATD-INFRA + netelements: + spine1: + - spine1-base + spine2: + - spine2-base + spine3: + - spine3-base + spine4: + - spine4-base + leaf1: + - leaf1-base + leaf2: + - leaf2-base + borderleaf1: + - borderleaf1-base + borderleaf2: + - borderleaf2-base + leaf3: + - leaf3-base + leaf4: + - leaf4-base + host1: + - host1-base + host2: + - host2-base + host3: + - host3-base + host4: + - host4-base diff --git a/topologies/training-level3v2/files/hosts b/topologies/training-level3v2/files/hosts new file mode 100644 index 000000000..ee9fda588 --- /dev/null +++ b/topologies/training-level3v2/files/hosts @@ -0,0 +1,20 @@ +127.0.0.1 localhost +192.168.0.11 spine1 +192.168.0.12 spine2 +192.168.0.13 spine3 +192.168.0.14 spine4 +192.168.0.21 leaf1 +192.168.0.22 leaf2 +192.168.0.23 leaf3 +192.168.0.24 leaf4 +192.168.0.25 borderleaf1 +192.168.0.26 borderleaf2 +192.168.0.41 server1 +192.168.0.42 server2 +192.168.0.43 server3 +192.168.0.44 server4 +192.168.0.51 host1 +192.168.0.52 host2 +192.168.0.53 host3 +192.168.0.54 host4 +192.168.0.5 cvp diff --git a/topologies/training-level3v2/files/menus/default.yaml b/topologies/training-level3v2/files/menus/default.yaml new file mode 100644 index 000000000..7edae00fc --- /dev/null +++ b/topologies/training-level3v2/files/menus/default.yaml @@ -0,0 +1,2 @@ +--- +default_menu: training-l3.yaml \ No newline at end of file diff --git a/topologies/training-level3v2/files/menus/training-l3.yaml b/topologies/training-level3v2/files/menus/training-l3.yaml new file mode 100644 index 000000000..41133498a --- /dev/null +++ b/topologies/training-level3v2/files/menus/training-l3.yaml @@ -0,0 +1,32 @@ +--- + lab_list: + reset: + additional_commands: + - "bash /home/arista/Broadcaster/pushHostDefaultConfig.sh" + description: "Reset All Devices to Base Lab (reset)" + labconfiglets: + reset: + spine1: + - "spine1-base" + spine2: + - "spine2-base" + spine3: + - "spine3-base" + spine4: + - "spine4-base" + leaf1: + - "leaf1-base" + leaf2: + - "leaf2-base" + leaf3: + - "leaf3-base" + leaf4: + - "leaf4-base" + host1: + - "host1-base" + host2: + - "host2-base" + borderleaf1: + - "borderleaf1-base" + borderleaf2: + - "borderleaf2-base" diff --git a/topologies/training-level3v2/files/scripts/Authenticate-CVP b/topologies/training-level3v2/files/scripts/Authenticate-CVP new file mode 100644 index 000000000..144bb13eb --- /dev/null +++ b/topologies/training-level3v2/files/scripts/Authenticate-CVP @@ -0,0 +1,32 @@ +import requests +import json + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + +# Print user details + +print "User Name:%s\n "%output['username'] +print "First Name: %s\n "%output['user']['firstName'] +print "Last Name: %s\n "%output['user']['lastName'] +print "User Permissions: %s\n "%output['permissionList'] +print "Cookie Jar: %s\n "%cookies diff --git a/topologies/training-level3v2/files/scripts/Authenticate-CVP2 b/topologies/training-level3v2/files/scripts/Authenticate-CVP2 new file mode 100644 index 000000000..3f6bf9190 --- /dev/null +++ b/topologies/training-level3v2/files/scripts/Authenticate-CVP2 @@ -0,0 +1,48 @@ +import requests +import json + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + +# Print user details + +print "User Name:%s\n "%output['username'] +print "First Name: %s\n "%output['user']['firstName'] +print "Last Name: %s\n "%output['user']['lastName'] +print "User Permissions: %s\n "%output['permissionList'] +print "Cookie Jar: %s\n "%cookies + +#Create an HTTP GET request to the CVP server + +getConfigletURL = "/cvpservice/configlet/getConfiglets.do?" +getConfigletParams = {'startIndex':'0','endIndex':'0','type':'Configlet'} +response = requests.get(url+getConfigletURL,cookies=cookies, params=getConfigletParams,verify=False) +assert response.ok +outputConfiglets = response.json() + +# Print Configlet details + +for configlet in outputConfiglets['data']: + print "ConfigletName: %s"%configlet['name'] + print "ConfigletKey: %s"%configlet['key'] + print "\n" + diff --git a/topologies/training-level3v2/files/scripts/Authenticate-CVP3 b/topologies/training-level3v2/files/scripts/Authenticate-CVP3 new file mode 100644 index 000000000..2445806ea --- /dev/null +++ b/topologies/training-level3v2/files/scripts/Authenticate-CVP3 @@ -0,0 +1,95 @@ +import requests +import json + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + +# Print user details + +print "User Name:%s\n "%output['username'] +print "First Name: %s\n "%output['user']['firstName'] +print "Last Name: %s\n "%output['user']['lastName'] +print "User Permissions: %s\n "%output['permissionList'] +print "Cookie Jar: %s\n "%cookies + +#Create an HTTP GET request to the CVP server + +getConfigletURL = "/cvpservice/configlet/getConfiglets.do?" +getConfigletParams = {'startIndex':'0','endIndex':'0','type':'Configlet'} +response = requests.get(url+getConfigletURL,cookies=cookies, params=getConfigletParams,verify=False) +assert response.ok +outputConfiglets = response.json() + +# Print Configlet details + +for configlet in outputConfiglets['data']: + print "ConfigletName: %s"%configlet['name'] + print "ConfigletKey: %s"%configlet['key'] + print "\n" +# Create an HTTP GET request to the CVP server + +getConfigletHistoryURL = "/cvpservice/configlet/getConfigletHistory.do?" +getConfigletParams = {'configletId':'configlet_32_438214998013','startIndex':'0','endIndex':'0'} +response = requests.get(url+getConfigletHistoryURL,cookies=cookies, params=getConfigletParams,verify=False) +assert response.ok +outputConfigletHistory = response.json() + +# Print Configlet details + +for entry in outputConfigletHistory['configletHistory']: + print "ConfigletKey: %s"%entry['key'] + print "ConfigletOldConfig: %s"%entry['oldConfig'] + print "ConfigletNewConfig: %s"%entry['newConfig'] + print "\n" + + +# Create an HTTP GET request to the CVP server + +getConfigletDetailURL = "/cvpservice/configlet/getConfigletByName.do?" +getConfigletParams = {'name':'VLANs'} +response = requests.get(url+getConfigletDetailURL,cookies=cookies, params=getConfigletParams,verify=False) +assert response.ok +outputConfigletDetail = response.json() + +# Print Configlet details + +print "ConfigletKey: %s"%outputConfigletDetail['key'] +print "ConfigletName: %s"%outputConfigletDetail['name'] +print "ConfigletConfig: %s"%outputConfigletDetail['config'] +print "ConfigletNote: %s"%outputConfigletDetail['note'] +print "\n" + + +# Create an HTTP POST request to the CVP server + +headers = { 'Content-Type': 'application/json' } +postConfigletChangeURL = "/cvpservice/configlet/updateConfiglet.do" +changeData = json.dumps({"config": "! some configuration here", "key": "configlet_32_438214998013", "name": "VLANs"}) +response = requests.post(url+postConfigletChangeURL, cookies=cookies, data=changeData,headers=headers,verify=False) +assert response.ok +outputConfigletChange = response.json() + +# Print Configlet details + +print "ConfigletChange: %s"%outputConfigletChange['data'] +print "\n" + diff --git a/topologies/training-level3v2/files/scripts/Configlet1 b/topologies/training-level3v2/files/scripts/Configlet1 new file mode 100644 index 000000000..3f6bf9190 --- /dev/null +++ b/topologies/training-level3v2/files/scripts/Configlet1 @@ -0,0 +1,48 @@ +import requests +import json + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + +# Print user details + +print "User Name:%s\n "%output['username'] +print "First Name: %s\n "%output['user']['firstName'] +print "Last Name: %s\n "%output['user']['lastName'] +print "User Permissions: %s\n "%output['permissionList'] +print "Cookie Jar: %s\n "%cookies + +#Create an HTTP GET request to the CVP server + +getConfigletURL = "/cvpservice/configlet/getConfiglets.do?" +getConfigletParams = {'startIndex':'0','endIndex':'0','type':'Configlet'} +response = requests.get(url+getConfigletURL,cookies=cookies, params=getConfigletParams,verify=False) +assert response.ok +outputConfiglets = response.json() + +# Print Configlet details + +for configlet in outputConfiglets['data']: + print "ConfigletName: %s"%configlet['name'] + print "ConfigletKey: %s"%configlet['key'] + print "\n" + diff --git a/topologies/training-level3v2/files/scripts/ConfigletChange b/topologies/training-level3v2/files/scripts/ConfigletChange new file mode 100644 index 000000000..691ff5864 --- /dev/null +++ b/topologies/training-level3v2/files/scripts/ConfigletChange @@ -0,0 +1,40 @@ +import requests +import json + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + + +# Create an HTTP POST request to the CVP server + +headers = { 'Content-Type': 'application/json' } +postConfigletChangeURL = "/cvpservice/configlet/addNoteToConfiglet.do" +changeData = json.dumps({"note": "Configlet Changed by API", "key": "configlet_516_7018635812307"}) +response = requests.post(url+postConfigletChangeURL, cookies=cookies, data=changeData,headers=headers,verify=False) +assert response.ok +outputConfigletChange = response.json() + +# Print Configlet details + +print "ConfigletChange: %s"%outputConfigletChange['data'] +print "\n" + diff --git a/topologies/training-level3v2/files/scripts/ConfigletDetail b/topologies/training-level3v2/files/scripts/ConfigletDetail new file mode 100644 index 000000000..eb2a85937 --- /dev/null +++ b/topologies/training-level3v2/files/scripts/ConfigletDetail @@ -0,0 +1,43 @@ +import requests +import json + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + +# Create an HTTP GET request to the CVP server + +getConfigletDetailURL = "/cvpservice/configlet/getConfigletByName.do?" +getConfigletParams = {'name':'VLANs'} +response = requests.get(url+getConfigletDetailURL,cookies=cookies, params=getConfigletParams,verify=False) +assert response.ok +outputConfigletDetail = response.json() + +# Print Configlet details + +print "ConfigletKey: %s"%outputConfigletDetail['key'] +print "ConfigletName: %s"%outputConfigletDetail['name'] +print "ConfigletConfig: %s"%outputConfigletDetail['config'] +print "ConfigletNote: %s"%outputConfigletDetail['note'] +print "\n" + + + diff --git a/topologies/training-level3v2/files/scripts/ConfigletHistory b/topologies/training-level3v2/files/scripts/ConfigletHistory new file mode 100644 index 000000000..71f1ac693 --- /dev/null +++ b/topologies/training-level3v2/files/scripts/ConfigletHistory @@ -0,0 +1,41 @@ +import requests +import json + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + +# Create an HTTP GET request to the CVP server + +getConfigletHistoryURL = "/cvpservice/configlet/getConfigletHistory.do?" +getConfigletParams = {'configletId':'configlet_344_7351420097365','startIndex':'0','endIndex':'0'} +response = requests.get(url+getConfigletHistoryURL,cookies=cookies, params=getConfigletParams,verify=False) +assert response.ok +outputConfigletHistory = response.json() + +# Print Configlet details + +for entry in outputConfigletHistory['configletHistory']: + print "ConfigletKey: %s"%entry['key'] + print "ConfigletOldConfig: \n%s"%entry['oldConfig'] + print "ConfigletNewConfig: \n%s"%entry['newConfig'] + print "\n" + diff --git a/topologies/training-level3v2/files/scripts/TaskBase b/topologies/training-level3v2/files/scripts/TaskBase new file mode 100644 index 000000000..6f8deccaf --- /dev/null +++ b/topologies/training-level3v2/files/scripts/TaskBase @@ -0,0 +1,59 @@ +import requests +import json + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + + +# Create an HTTP GET request to the CVP server + +getTasksURL = "/cvpservice/task/getTasks.do?" +getTasksParams = {'startIndex':'0','endIndex':'0','queryparam':'Pending'} +response = requests.get(url+getTasksURL,cookies=cookies, params=getTasksParams,verify=False) +assert response.ok +outputPendingTasks = response.json() + + +# Print Tasks Created by Current User +taskList = [ ] +for entry in outputPendingTasks['data']: + if str(entry['createdBy']) == str(CVP_USER): + print "TaskNumber: %s"%entry['workOrderId'] + taskList.append(str(entry['workOrderId'])) +print "TaskList: %s"%taskList + + + +# Create an HTTP POST request to the CVP server + +headers = { 'Content-Type': 'application/json' } +postTaskLogURL = "/cvpservice/workflow/addWorkOrderLog.do" +taskLogData = json.dumps({"taskId": taskList[1],"message": "This is a test Change","source": "CVP REST API"}) +response = requests.post(url+postTaskLogURL, cookies=cookies, data=taskLogData,headers=headers,verify=False) +assert response.ok +outputTaskLog = response.json() + +# Print Configlet details + +print "TaskLogAmmend: %s"%outputTaskLog['data'] +print "\n" + diff --git a/topologies/training-level3v2/files/scripts/TaskCVP1 b/topologies/training-level3v2/files/scripts/TaskCVP1 new file mode 100644 index 000000000..1ebd05764 --- /dev/null +++ b/topologies/training-level3v2/files/scripts/TaskCVP1 @@ -0,0 +1,48 @@ +import requests +import json + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + +# Print user details + +print "User Name:%s\n "%output['username'] +print "First Name: %s\n "%output['user']['firstName'] +print "Last Name: %s\n "%output['user']['lastName'] + + +getTasksURL = "/cvpservice/task/getTasks.do?" +getTasksParams = {'startIndex':'0','endIndex':'0'} +response = requests.get(url+getTasksURL,cookies=cookies, params=getTasksParams,verify=False) +assert response.ok +outputPendingTasks = response.json() + + +# Print Tasks Created by Current User +taskList = [ ] +for entry in outputPendingTasks['data']: + if str(entry['createdBy']) == str(CVP_USER): + print( "TaskNumber: %s Description: %s" %(entry['workOrderId'],entry['description'])) + taskList.append(str(entry['workOrderId'])) +#print "TaskList: %s"%taskList + + diff --git a/topologies/training-level3v2/files/scripts/TaskExecute b/topologies/training-level3v2/files/scripts/TaskExecute new file mode 100644 index 000000000..3db487284 --- /dev/null +++ b/topologies/training-level3v2/files/scripts/TaskExecute @@ -0,0 +1,56 @@ +import requests +import json + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + + +# Create an HTTP GET request to the CVP server + +getTasksURL = "/cvpservice/task/getTasks.do?" +getTasksParams = {'startIndex':'0','endIndex':'0','queryparam':'Pending'} +response = requests.get(url+getTasksURL,cookies=cookies, params=getTasksParams,verify=False) +assert response.ok +outputPendingTasks = response.json() + + +# Print Tasks Created by Current User +taskList = [ ] +for entry in outputPendingTasks['data']: + if str(entry['createdBy']) == str(CVP_USER): + print "TaskNumber: %s"%entry['workOrderId'] + taskList.append(str(entry['workOrderId'])) +print "TaskList: %s"%taskList + + + +headers = { 'Content-Type': 'application/json' } +postTaskExecuteURL = "/cvpservice/task/executeTask.do" +for taskNumber in taskList: + executeData = json.dumps({'data': [taskNumber]}) + response = requests.post(url+postTaskExecuteURL, cookies=cookies,data=executeData,headers=headers,verify=False) + assert response.ok + outputExecuteTask = response.json() + print (outputExecuteTask['data']) + print "Task: "+str(taskNumber)+" Execute: "+str(outputExecuteTask['data']) + print "\n" + diff --git a/topologies/training-level3v2/files/scripts/TaskLog b/topologies/training-level3v2/files/scripts/TaskLog new file mode 100644 index 000000000..c835008b8 --- /dev/null +++ b/topologies/training-level3v2/files/scripts/TaskLog @@ -0,0 +1,59 @@ +import requests +import json + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + + +# Create an HTTP GET request to the CVP server + +getTasksURL = "/cvpservice/task/getTasks.do?" +getTasksParams = {'startIndex':'0','endIndex':'0'} +response = requests.get(url+getTasksURL,cookies=cookies, params=getTasksParams,verify=False) +assert response.ok +outputTasks = response.json() + + +# Print Tasks Created by Current User +taskList = [ ] +for entry in outputTasks['data']: + if str(entry['createdBy']) == str(CVP_USER): + print "TaskNumber: %s"%entry['workOrderId'] + taskList.append(str(entry['workOrderId'])) +print "TaskList: %s"%taskList + + + +# Create an HTTP POST request to the CVP server + +headers = { 'Content-Type': 'application/json' } +postTaskLogURL = "/cvpservice/workflow/addWorkOrderLog.do" +taskLogData = json.dumps({"taskId": taskList[0],"message": "This is a test Change","source": "CVP REST API"}) +response = requests.post(url+postTaskLogURL, cookies=cookies, data=taskLogData,headers=headers,verify=False) +assert response.ok +outputTaskLog = response.json() + +# Print Configlet details + +print "TaskLogAmmend: %s"%outputTaskLog['data'] +print "\n" + diff --git a/topologies/training-level3v2/files/scripts/TaskLog1 b/topologies/training-level3v2/files/scripts/TaskLog1 new file mode 100644 index 000000000..c835008b8 --- /dev/null +++ b/topologies/training-level3v2/files/scripts/TaskLog1 @@ -0,0 +1,59 @@ +import requests +import json + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + + +# Create an HTTP GET request to the CVP server + +getTasksURL = "/cvpservice/task/getTasks.do?" +getTasksParams = {'startIndex':'0','endIndex':'0'} +response = requests.get(url+getTasksURL,cookies=cookies, params=getTasksParams,verify=False) +assert response.ok +outputTasks = response.json() + + +# Print Tasks Created by Current User +taskList = [ ] +for entry in outputTasks['data']: + if str(entry['createdBy']) == str(CVP_USER): + print "TaskNumber: %s"%entry['workOrderId'] + taskList.append(str(entry['workOrderId'])) +print "TaskList: %s"%taskList + + + +# Create an HTTP POST request to the CVP server + +headers = { 'Content-Type': 'application/json' } +postTaskLogURL = "/cvpservice/workflow/addWorkOrderLog.do" +taskLogData = json.dumps({"taskId": taskList[0],"message": "This is a test Change","source": "CVP REST API"}) +response = requests.post(url+postTaskLogURL, cookies=cookies, data=taskLogData,headers=headers,verify=False) +assert response.ok +outputTaskLog = response.json() + +# Print Configlet details + +print "TaskLogAmmend: %s"%outputTaskLog['data'] +print "\n" + diff --git a/topologies/training-level3v2/files/scripts/TaskLogView b/topologies/training-level3v2/files/scripts/TaskLogView new file mode 100644 index 000000000..7b34904dd --- /dev/null +++ b/topologies/training-level3v2/files/scripts/TaskLogView @@ -0,0 +1,51 @@ +import requests +import json +import pprint + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + + +# Create an HTTP GET request to the CVP server + +getTasksURL = "/cvpservice/task/getTasks.do?" +getTasksParams = {'startIndex':'0','endIndex':'0'} +response = requests.get(url+getTasksURL,cookies=cookies, params=getTasksParams,verify=False) +assert response.ok +outputTasks = response.json() + +taskList = [ ] +for entry in outputTasks['data']: + if str(entry['createdBy']) == str(CVP_USER): + taskList.append(str(entry['workOrderId'])) + +getTaskLogURL = "/cvpservice/task/getLogsById.do?" +#getTaskLogParams = {'startIndex':'0','endIndex':'0','id':'0'} +getTaskLogParams = {'startIndex':'0','endIndex':'0','id':taskList[0]} +response = requests.get(url+getTaskLogURL,cookies=cookies, params=getTaskLogParams,verify=False) +assert response.ok +outputTaskLog = response.json() + +# Print TaskLog details +print "TaskLogOutput: %s" %outputTaskLog['data'] +print "\n" + diff --git a/topologies/training-level3v2/files/scripts/TaskNote b/topologies/training-level3v2/files/scripts/TaskNote new file mode 100644 index 000000000..6cd1d6cfd --- /dev/null +++ b/topologies/training-level3v2/files/scripts/TaskNote @@ -0,0 +1,52 @@ +import requests +import json +import pprint + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + + +# Create an HTTP GET request to the CVP server + +getTasksURL = "/cvpservice/task/getTasks.do?" +getTasksParams = {'startIndex':'0','endIndex':'0'} +response = requests.get(url+getTasksURL,cookies=cookies, params=getTasksParams,verify=False) +assert response.ok +outputTasks = response.json() + +taskList = [ ] +for entry in outputTasks['data']: + if str(entry['createdBy']) == str(CVP_USER): + taskList.append(str(entry['workOrderId'])) + +headers = { 'Content-Type': 'application/json' } +postTaskNoteURL = "/cvpservice/task/addNoteToTask.do" +taskNoteData = json.dumps({"workOrderId": taskList[0],"note": "This is a test Change using the API"}) +response = requests.post(url+postTaskNoteURL, cookies=cookies, data=taskNoteData,headers=headers,verify=False) +assert response.ok +outputTaskNote = response.json() + +# Print Task details + +print "TaskNoteAmmend: %s"%outputTaskNote['data'] +print "\n" + diff --git a/topologies/training-level3v2/labguides/.gitignore b/topologies/training-level3v2/labguides/.gitignore new file mode 100644 index 000000000..ed86553f4 --- /dev/null +++ b/topologies/training-level3v2/labguides/.gitignore @@ -0,0 +1,2 @@ +.DS_Store +build/ diff --git a/topologies/training-level3v2/labguides/Makefile b/topologies/training-level3v2/labguides/Makefile new file mode 100644 index 000000000..874ed2529 --- /dev/null +++ b/topologies/training-level3v2/labguides/Makefile @@ -0,0 +1,20 @@ +# Minimal makefile for Sphinx documentation +# + +# You can set these variables from the command line. +SPHINXOPTS = +SPHINXBUILD = python -msphinx +SPHINXPROJ = ATD +SOURCEDIR = source +BUILDDIR = build + +# Put it first so that "make" without argument is like "make help". +help: + @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) + +.PHONY: help Makefile + +# Catch-all target: route all unknown targets to Sphinx using the new +# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). +%: Makefile + @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) \ No newline at end of file diff --git a/topologies/training-level3v2/labguides/readme.md b/topologies/training-level3v2/labguides/readme.md new file mode 100644 index 000000000..5a5369ecd --- /dev/null +++ b/topologies/training-level3v2/labguides/readme.md @@ -0,0 +1,12 @@ +# Lab Guides +In this folder are rST (restructured text) formatted lab guides for the ATD event. + +## Building +To build the documentation, you will need to install Sphinx and sphinx_bootstrap_theme with `pip`: + +`pip install sphinx sphinx_bootstrap_theme` + +## Contributing +At some point, this section may expand, but for now please make sure to review existing files for formatting guidelines. + +Please see https://github.com/ralsina/rst-cheatsheet/blob/master/rst-cheatsheet.rst for a cheat sheet. \ No newline at end of file diff --git a/topologies/training-level3v2/labguides/source/_static/arista_logo.png b/topologies/training-level3v2/labguides/source/_static/arista_logo.png new file mode 100644 index 000000000..2376e72b9 Binary files /dev/null and b/topologies/training-level3v2/labguides/source/_static/arista_logo.png differ diff --git a/topologies/training-level3v2/labguides/source/_static/arista_logo_160by26.png b/topologies/training-level3v2/labguides/source/_static/arista_logo_160by26.png new file mode 100644 index 000000000..d0d0cbeec Binary files /dev/null and b/topologies/training-level3v2/labguides/source/_static/arista_logo_160by26.png differ diff --git a/topologies/training-level3v2/labguides/source/_static/arista_logo_320by52.png b/topologies/training-level3v2/labguides/source/_static/arista_logo_320by52.png new file mode 100644 index 000000000..43dfa7ed2 Binary files /dev/null and b/topologies/training-level3v2/labguides/source/_static/arista_logo_320by52.png differ diff --git a/topologies/training-level3v2/labguides/source/_static/cloudvision-icon.png b/topologies/training-level3v2/labguides/source/_static/cloudvision-icon.png new file mode 100644 index 000000000..c309ed98e Binary files /dev/null and b/topologies/training-level3v2/labguides/source/_static/cloudvision-icon.png differ diff --git a/topologies/training-level3v2/labguides/source/_static/logo.jpg b/topologies/training-level3v2/labguides/source/_static/logo.jpg new file mode 100644 index 000000000..6eda41f7e Binary files /dev/null and b/topologies/training-level3v2/labguides/source/_static/logo.jpg differ diff --git a/topologies/training-level3v2/labguides/source/_static/my-styles.css b/topologies/training-level3v2/labguides/source/_static/my-styles.css new file mode 100644 index 000000000..1150528ee --- /dev/null +++ b/topologies/training-level3v2/labguides/source/_static/my-styles.css @@ -0,0 +1,41 @@ +body { + background-color: #FFFFFF; + color: #002859 +} + +.navbar-inverse { + background-image: -webkit-linear-gradient(#6d94bf, #446e9b 50%, #002859); + background-image: -o-linear-gradient(#6d94bf, #446e9b 50%, #002859); + background-image: -webkit-gradient(linear, left top, left bottom, from(#6d94bf), color-stop(50%, #446e9b), to(#002859)); + background-image: linear-gradient(#6d94bf, #446e9b 50%, #002859); + background-repeat: no-repeat; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff6d94bf', endColorstr='#ff002859', GradientType=0); + -webkit-filter: none; + filter: none; + border: 1px solid #345578; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.3) +} + +.navbar-brand { + background: url("arista_logo_320by52.png") center / contain no-repeat; + display: inline-block; + width: 1px; + padding: 0 10px 0 60px; + margin-right: 30px; + margin-left: -30px; +} + +.navbar-brand>img { + display: inline-block; + padding: 0 100px 0 0px; + margin-right: 20px; +} +a.navbar-brand { + display: inline-block; + padding: 15px 0 0 120px; +} + +footer { + background-color: #002859; + color: #FFFFFF; +} diff --git a/topologies/training-level3v2/labguides/source/conf.py b/topologies/training-level3v2/labguides/source/conf.py new file mode 100644 index 000000000..afccec09c --- /dev/null +++ b/topologies/training-level3v2/labguides/source/conf.py @@ -0,0 +1,247 @@ +# -*- coding: utf-8 -*- +# +# ATD documentation build configuration file, created by +# sphinx-quickstart on Tue Apr 17 10:00:04 2018. +# +# This file is execfile()d with the current directory set to its +# containing dir. +# +# Note that not all possible configuration values are present in this +# autogenerated file. +# +# All configuration values have a default; values that are commented out +# serve to show the default. + +# If extensions (or modules to document with autodoc) are in another directory, +# add these directories to sys.path here. If the directory is relative to the +# documentation root, use os.path.abspath to make it absolute, like shown here. +# +# import os +# import sys +# sys.path.insert(0, os.path.abspath('.')) + +import sphinx_bootstrap_theme + +# Importing datetime module to auto update copyright year +from datetime import date + +# -- General configuration ------------------------------------------------ + +# If your documentation needs a minimal Sphinx version, state it here. +# +# needs_sphinx = '1.0' + +# Add any Sphinx extension module names here, as strings. They can be +# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom +# ones. + +# Add any paths that contain templates here, relative to this directory. +templates_path = ['_templates'] + +# The suffix(es) of source filenames. +# You can specify multiple suffix as a list of string: +# +# source_suffix = ['.rst', '.md'] +source_suffix = '.rst' + +# The master toctree document. +master_doc = 'index' + +# General information about the project. +# Updating copyright var to auto update with current year +project = u'Arista ATD' +copyright = u'{0}, Arista Networks'.format(date.today().year) +author = u'Arista ATD atd-help@arista.com' + +# Show Source +html_show_sourcelink = False + +# The version info for the project you're documenting, acts as replacement for +# |version| and |release|, also used in various other places throughout the +# built documents. +# +# The short X.Y version. +version = u'Version 3.0' +# The full version, including alpha/beta/rc tags. +release = u'1' + +# The language for content autogenerated by Sphinx. Refer to documentation +# for a list of supported languages. +# +# This is also used if you do content translation via gettext catalogs. +# Usually you set "language" from the command line for these cases. +language = None + +# List of patterns, relative to source directory, that match files and +# directories to ignore when looking for source files. +# This patterns also effect to html_static_path and html_extra_path +exclude_patterns = [] + +# The name of the Pygments (syntax highlighting) style to use. +pygments_style = 'sphinx' + +# If true, `todo` and `todoList` produce output, else they produce nothing. +todo_include_todos = False + + +# -- Options for HTML output ---------------------------------------------- + +# The theme to use for HTML and HTML Help pages. See the documentation for +# a list of builtin themes. +# +#html_theme = 'alabaster' +html_theme = 'bootstrap' +html_theme_path = sphinx_bootstrap_theme.get_html_theme_path() + +# Add any paths that contain custom static files (such as style sheets) here, +# relative to this directory. They are copied after the builtin static files, +# so a file named "default.css" will overwrite the builtin "default.css". +html_static_path = ['_static'] + +# Theme options are theme-specific and customize the look and feel of a theme +# further. For a list of options available for each theme, see the +# documentation. +# +html_theme_options = { + # Navigation bar title. (Default: ``project`` value) + 'navbar_title': "ATD", + + # Tab name for entire site. (Default: "Site") + 'navbar_site_name': "Table of Contents", + + # A list of tuples containing pages or urls to link to. + # Valid tuples should be in the following forms: + # (name, page) # a link to a page + # (name, "/aa/bb", 1) # a link to an arbitrary relative url + # (name, "http://example.com", True) # arbitrary absolute url + # Note the "1" or "True" value above as the third argument to indicate + # an arbitrary url. + 'navbar_links': [ + ("Arista", "http://www.arista.com", True), + ], + + # Render the next and previous page links in navbar. (Default: true) + 'navbar_sidebarrel': True, + + # Render the current pages TOC in the navbar. (Default: true) + 'navbar_pagenav': False, + + # Tab name for the current pages TOC. (Default: "Page") + 'navbar_pagenav_name': "Page", + + # Global TOC depth for "site" navbar tab. (Default: 1) + # Switching to -1 shows all levels. + 'globaltoc_depth': 2, + + # Include hidden TOCs in Site navbar? + # + # Note: If this is "false", you cannot have mixed ``:hidden:`` and + # non-hidden ``toctree`` directives in the same page, or else the build + # will break. + # + # Values: "true" (default) or "false" + 'globaltoc_includehidden': "true", + + # HTML navbar class (Default: "navbar") to attach to
    element. + # For black navbar, do "navbar navbar-inverse" + #'navbar_class': "navbar navbar-inverse", + 'navbar_class': "navbar", + + # Fix navigation bar to top of page? + # Values: "true" (default) or "false" + 'navbar_fixed_top': "true", + + # Location of link to source. + # Options are "nav" (default), "footer" or anything else to exclude. + #'source_link_position': "nav", + + # Bootswatch (http://bootswatch.com/) theme. + # + # Options are nothing (default) or the name of a valid theme + # such as "cosmo" or "sandstone". + # + # The set of valid themes depend on the version of Bootstrap + # that's used (the next config option). + # + # Currently, the supported themes are: + # - Bootstrap 2: https://bootswatch.com/2 + # - Bootstrap 3: https://bootswatch.com/3 + 'bootswatch_theme': "spacelab", + + # Choose Bootstrap version. + # Values: "3" (default) or "2" (in quotes) + 'bootstrap_version': "3", +} + +# The name for this set of Sphinx documents. If None, it defaults to +# " v documentation". +#html_title = "AristaATD" + +# A shorter title for the navigation bar. Default is the same as html_title. +#html_short_title = "Demo" + +# (Optional) Logo. Should be small enough to fit the navbar (ideally 24x24). +# Path should be relative to the ``_static`` files directory. +#html_logo = "cloudvision-icon.png" + +# -- Options for HTMLHelp output ------------------------------------------ + +# Output file base name for HTML help builder. +htmlhelp_basename = 'AristaATD' + + +# -- Options for LaTeX output --------------------------------------------- + +latex_elements = { + # The paper size ('letterpaper' or 'a4paper'). + # + # 'papersize': 'letterpaper', + + # The font size ('10pt', '11pt' or '12pt'). + # + # 'pointsize': '10pt', + + # Additional stuff for the LaTeX preamble. + # + # 'preamble': '', + + # Latex figure (float) alignment + # + # 'figure_align': 'htbp', +} + +# Grouping the document tree into LaTeX files. List of tuples +# (source start file, target name, title, +# author, documentclass [howto, manual, or own class]). +latex_documents = [ + (master_doc, 'ATD.tex', u'ATD Lab Guide', + u'ATD Help (atd-help@arista.com)', 'manual'), +] + + +# -- Options for manual page output --------------------------------------- + +# One entry per manual page. List of tuples +# (source start file, name, description, authors, manual section). +man_pages = [ + (master_doc, 'atd', u'ATD Lab Guide', + [author], 1) +] + + +# -- Options for Texinfo output ------------------------------------------- + +# Grouping the document tree into Texinfo files. List of tuples +# (source start file, target name, title, author, +# dir menu entry, description, category) +texinfo_documents = [ + (master_doc, 'ATD', u'ATD Lab Guide', + author, 'ATD', 'Lab Documentation.', + 'Miscellaneous'), +] + + +def setup(app): + app.add_stylesheet("my-styles.css") # also can be a full URL + # app.add_stylesheet("ANOTHER.css") + # app.add_stylesheet("AND_ANOTHER.css") diff --git a/topologies/training-level3v2/labguides/source/connecting.rst b/topologies/training-level3v2/labguides/source/connecting.rst new file mode 100644 index 000000000..10ae589ef --- /dev/null +++ b/topologies/training-level3v2/labguides/source/connecting.rst @@ -0,0 +1,28 @@ +Connecting +========== + +1. Log into the Arista Test Drive portal with your assigned URL. If you + don’t have one, please see your ATD staff. + +.. image:: images/connecting/nested_connecting_1.png + +2. SSH to the public address assigned to the LabAccess jumphost server (this is the Topology Address shown in the "Welcome to Arista's Test Drive!" picture above). The username is ``arista`` and the password is ``{REPLACE_PWD}``: + + .. code-block:: text + + ssh arista@{unique_address}.topo.testdrive.arista.com + +| + +.. image:: images/connecting/nested_connecting_2.png + :align: center + +| + +3. The LabAccess menu allows users to connect to each device and specify + lab topology. It is recommended to open multiple SSH sessions or use + the Screen option (under the SSH Menu) to jump between devices rapidly. + + You can also Access the LabAccess Menu from your browser by clicking on `Console Access` + +.. image:: images/connecting/nested_connecting_3.png diff --git a/topologies/training-level3v2/labguides/source/images/connecting/nested_connecting_1.png b/topologies/training-level3v2/labguides/source/images/connecting/nested_connecting_1.png new file mode 100644 index 000000000..aa76597b8 Binary files /dev/null and b/topologies/training-level3v2/labguides/source/images/connecting/nested_connecting_1.png differ diff --git a/topologies/training-level3v2/labguides/source/images/connecting/nested_connecting_2.png b/topologies/training-level3v2/labguides/source/images/connecting/nested_connecting_2.png new file mode 100644 index 000000000..2c6b51a2b Binary files /dev/null and b/topologies/training-level3v2/labguides/source/images/connecting/nested_connecting_2.png differ diff --git a/topologies/training-level3v2/labguides/source/images/connecting/nested_connecting_3.png b/topologies/training-level3v2/labguides/source/images/connecting/nested_connecting_3.png new file mode 100644 index 000000000..1cc7402a3 Binary files /dev/null and b/topologies/training-level3v2/labguides/source/images/connecting/nested_connecting_3.png differ diff --git a/topologies/training-level3v2/labguides/source/images/logo.jpg b/topologies/training-level3v2/labguides/source/images/logo.jpg new file mode 100644 index 000000000..6eda41f7e Binary files /dev/null and b/topologies/training-level3v2/labguides/source/images/logo.jpg differ diff --git a/topologies/training-level3v2/labguides/source/index.rst b/topologies/training-level3v2/labguides/source/index.rst new file mode 100644 index 000000000..bb76aaa2e --- /dev/null +++ b/topologies/training-level3v2/labguides/source/index.rst @@ -0,0 +1,8 @@ +Welcome to the Arista Training documentation! +======================================== + +.. toctree:: + :maxdepth: 1 + :caption: EOS Configuration + + connecting.rst diff --git a/topologies/training-level3v2/topo_build.yml b/topologies/training-level3v2/topo_build.yml new file mode 100644 index 000000000..e7d0762c7 --- /dev/null +++ b/topologies/training-level3v2/topo_build.yml @@ -0,0 +1,415 @@ +host_cpu: 4 +cvp_cpu: 24 +cvp_nodes: 1 +veos_cpu: 2 +nodes: + - spine1: + ip_addr: 192.168.0.11 + sys_mac: 00:1c:73:b1:c6:01 + neighbors: + - neighborDevice: spine2 + neighborPort: Ethernet1 + port: Ethernet1 + - neighborDevice: spine2 + neighborPort: Ethernet2 + port: Ethernet2 + - neighborDevice: leaf1 + neighborPort: Ethernet3 + port: Ethernet3 + - neighborDevice: leaf2 + neighborPort: Ethernet3 + port: Ethernet4 + - neighborDevice: leaf3 + neighborPort: Ethernet3 + port: Ethernet5 + - neighborDevice: leaf4 + neighborPort: Ethernet3 + port: Ethernet6 + - neighborDevice: borderleaf1 + neighborPort: Ethernet3 + port: Ethernet7 + - neighborDevice: borderleaf2 + neighborPort: Ethernet3 + port: Ethernet8 + - spine2: + ip_addr: 192.168.0.12 + sys_mac: 00:1c:73:b2:c6:01 + neighbors: + - neighborDevice: spine1 + neighborPort: Ethernet1 + port: Ethernet1 + - neighborDevice: spine1 + neighborPort: Ethernet2 + port: Ethernet2 + - neighborDevice: leaf1 + neighborPort: Ethernet4 + port: Ethernet3 + - neighborDevice: leaf2 + neighborPort: Ethernet4 + port: Ethernet4 + - neighborDevice: leaf3 + neighborPort: Ethernet4 + port: Ethernet5 + - neighborDevice: leaf4 + neighborPort: Ethernet4 + port: Ethernet6 + - neighborDevice: borderleaf1 + neighborPort: Ethernet4 + port: Ethernet7 + - neighborDevice: borderleaf2 + neighborPort: Ethernet4 + port: Ethernet8 + - spine3: + ip_addr: 192.168.0.13 + sys_mac: 00:1c:73:b3:c6:01 + neighbors: + - neighborDevice: spine4 + neighborPort: Ethernet1 + port: Ethernet1 + - neighborDevice: spine4 + neighborPort: Ethernet2 + port: Ethernet2 + - neighborDevice: leaf1 + neighborPort: Ethernet5 + port: Ethernet3 + - neighborDevice: leaf2 + neighborPort: Ethernet5 + port: Ethernet4 + - neighborDevice: leaf3 + neighborPort: Ethernet5 + port: Ethernet5 + - neighborDevice: leaf4 + neighborPort: Ethernet5 + port: Ethernet6 + - neighborDevice: borderleaf1 + neighborPort: Ethernet5 + port: Ethernet7 + - neighborDevice: borderleaf2 + neighborPort: Ethernet5 + port: Ethernet8 + - spine4: + ip_addr: 192.168.0.14 + sys_mac: 00:1c:73:b4:c6:01 + neighbors: + - neighborDevice: spine3 + neighborPort: Ethernet1 + port: Ethernet1 + - neighborDevice: spine3 + neighborPort: Ethernet2 + port: Ethernet2 + - neighborDevice: leaf1 + neighborPort: Ethernet6 + port: Ethernet3 + - neighborDevice: leaf2 + neighborPort: Ethernet6 + port: Ethernet4 + - neighborDevice: leaf3 + neighborPort: Ethernet6 + port: Ethernet5 + - neighborDevice: leaf4 + neighborPort: Ethernet6 + port: Ethernet6 + - neighborDevice: borderleaf1 + neighborPort: Ethernet6 + port: Ethernet7 + - neighborDevice: borderleaf2 + neighborPort: Ethernet6 + port: Ethernet8 + - leaf1: + ip_addr: 192.168.0.21 + sys_mac: 00:1c:73:c1:c6:01 + neighbors: + - neighborDevice: leaf2 + neighborPort: Ethernet1 + port: Ethernet1 + - neighborDevice: leaf2 + neighborPort: Ethernet2 + port: Ethernet2 + - neighborDevice: spine1 + neighborPort: Ethernet3 + port: Ethernet3 + - neighborDevice: spine2 + neighborPort: Ethernet3 + port: Ethernet4 + - neighborDevice: spine3 + neighborPort: Ethernet3 + port: Ethernet5 + - neighborDevice: spine4 + neighborPort: Ethernet3 + port: Ethernet6 + - neighborDevice: host1 + neighborPort: Ethernet1 + port: Ethernet7 + - neighborDevice: host1 + neighborPort: Ethernet3 + port: Ethernet8 + - neighborDevice: host2 + neighborPort: Ethernet1 + port: Ethernet9 + - neighborDevice: host2 + neighborPort: Ethernet3 + port: Ethernet10 + - leaf2: + ip_addr: 192.168.0.22 + sys_mac: 00:1c:73:c2:c6:01 + neighbors: + - neighborDevice: leaf1 + neighborPort: Ethernet1 + port: Ethernet1 + - neighborDevice: leaf1 + neighborPort: Ethernet2 + port: Ethernet2 + - neighborDevice: spine1 + neighborPort: Ethernet4 + port: Ethernet3 + - neighborDevice: spine2 + neighborPort: Ethernet4 + port: Ethernet4 + - neighborDevice: spine3 + neighborPort: Ethernet4 + port: Ethernet5 + - neighborDevice: spine4 + neighborPort: Ethernet4 + port: Ethernet6 + - neighborDevice: host1 + neighborPort: Ethernet2 + port: Ethernet7 + - neighborDevice: host1 + neighborPort: Ethernet4 + port: Ethernet8 + - neighborDevice: host2 + neighborPort: Ethernet2 + port: Ethernet9 + - neighborDevice: host2 + neighborPort: Ethernet4 + port: Ethernet10 + - leaf3: + ip_addr: 192.168.0.23 + sys_mac: 00:1c:73:c3:c6:01 + neighbors: + - neighborDevice: leaf4 + neighborPort: Ethernet1 + port: Ethernet1 + - neighborDevice: leaf4 + neighborPort: Ethernet2 + port: Ethernet2 + - neighborDevice: spine1 + neighborPort: Ethernet5 + port: Ethernet3 + - neighborDevice: spine2 + neighborPort: Ethernet5 + port: Ethernet4 + - neighborDevice: spine3 + neighborPort: Ethernet5 + port: Ethernet5 + - neighborDevice: spine4 + neighborPort: Ethernet5 + port: Ethernet6 + - neighborDevice: host3 + neighborPort: Ethernet1 + port: Ethernet7 + - neighborDevice: host3 + neighborPort: Ethernet3 + port: Ethernet8 + - neighborDevice: host4 + neighborPort: Ethernet1 + port: Ethernet9 + - neighborDevice: host4 + neighborPort: Ethernet3 + port: Ethernet10 + - leaf4: + ip_addr: 192.168.0.24 + sys_mac: 00:1c:73:c4:c6:01 + neighbors: + - neighborDevice: leaf3 + neighborPort: Ethernet1 + port: Ethernet1 + - neighborDevice: leaf3 + neighborPort: Ethernet2 + port: Ethernet2 + - neighborDevice: spine1 + neighborPort: Ethernet6 + port: Ethernet3 + - neighborDevice: spine2 + neighborPort: Ethernet6 + port: Ethernet4 + - neighborDevice: spine3 + neighborPort: Ethernet6 + port: Ethernet5 + - neighborDevice: spine4 + neighborPort: Ethernet6 + port: Ethernet6 + - neighborDevice: host3 + neighborPort: Ethernet2 + port: Ethernet7 + - neighborDevice: host3 + neighborPort: Ethernet4 + port: Ethernet8 + - neighborDevice: host4 + neighborPort: Ethernet2 + port: Ethernet9 + - neighborDevice: host4 + neighborPort: Ethernet4 + port: Ethernet10 + - borderleaf1: + ip_addr: 192.168.0.25 + sys_mac: 00:1c:73:c5:c6:01 + neighbors: + - neighborDevice: borderleaf2 + neighborPort: Ethernet1 + port: Ethernet1 + - neighborDevice: borderleaf2 + neighborPort: Ethernet2 + port: Ethernet2 + - neighborDevice: spine1 + neighborPort: Ethernet7 + port: Ethernet3 + - neighborDevice: spine2 + neighborPort: Ethernet7 + port: Ethernet4 + - neighborDevice: spine3 + neighborPort: Ethernet7 + port: Ethernet5 + - neighborDevice: spine4 + neighborPort: Ethernet7 + port: Ethernet6 + - borderleaf2: + ip_addr: 192.168.0.26 + sys_mac: 00:1c:73:c6:c6:01 + neighbors: + - neighborDevice: borderleaf1 + neighborPort: Ethernet1 + port: Ethernet1 + - neighborDevice: borderleaf1 + neighborPort: Ethernet2 + port: Ethernet2 + - neighborDevice: spine1 + neighborPort: Ethernet8 + port: Ethernet3 + - neighborDevice: spine2 + neighborPort: Ethernet8 + port: Ethernet4 + - neighborDevice: spine3 + neighborPort: Ethernet8 + port: Ethernet5 + - neighborDevice: spine4 + neighborPort: Ethernet8 + port: Ethernet6 + - host1: + ip_addr: 192.168.0.51 + sys_mac: 00:1c:73:f1:c6:01 + neighbors: + - neighborDevice: leaf1 + neighborPort: Ethernet7 + port: Ethernet1 + - neighborDevice: leaf2 + neighborPort: Ethernet7 + port: Ethernet2 + - neighborDevice: leaf1 + neighborPort: Ethernet8 + port: Ethernet3 + - neighborDevice: leaf2 + neighborPort: Ethernet8 + port: Ethernet4 + - host2: + ip_addr: 192.168.0.52 + sys_mac: 00:1c:73:f2:c6:01 + neighbors: + - neighborDevice: leaf1 + neighborPort: Ethernet9 + port: Ethernet1 + - neighborDevice: leaf2 + neighborPort: Ethernet9 + port: Ethernet2 + - neighborDevice: leaf1 + neighborPort: Ethernet10 + port: Ethernet3 + - neighborDevice: leaf2 + neighborPort: Ethernet10 + port: Ethernet4 + - host3: + ip_addr: 192.168.0.53 + sys_mac: 00:1c:73:f3:c6:01 + neighbors: + - neighborDevice: leaf3 + neighborPort: Ethernet7 + port: Ethernet1 + - neighborDevice: leaf4 + neighborPort: Ethernet7 + port: Ethernet2 + - neighborDevice: leaf3 + neighborPort: Ethernet8 + port: Ethernet3 + - neighborDevice: leaf4 + neighborPort: Ethernet8 + port: Ethernet4 + - host4: + ip_addr: 192.168.0.54 + sys_mac: 00:1c:73:f4:c6:01 + neighbors: + - neighborDevice: leaf3 + neighborPort: Ethernet9 + port: Ethernet1 + - neighborDevice: leaf4 + neighborPort: Ethernet9 + port: Ethernet2 + - neighborDevice: leaf3 + neighborPort: Ethernet10 + port: Ethernet3 + - neighborDevice: leaf4 + neighborPort: Ethernet10 + port: Ethernet4 +servers: + - server1: + ami_name: "cloud-deploy-generic-CentOS-8-8.2.2004" + size: "t2.medium" + type: generic + ip_addr: 192.168.0.41 + sys_mac: 00:1c:73:e1:c6:01 + neighbors: + - neighborDevice: leaf1 + neighborPort: Ethernet11 + port: Ethernet1 + - neighborDevice: leaf2 + neighborPort: Ethernet11 + port: Ethernet2 + - server2: + ami_name: "cloud-deploy-generic-CentOS-8-8.2.2004" + size: "t2.medium" + type: generic + ip_addr: 192.168.0.42 + sys_mac: 00:1c:73:e2:c6:01 + neighbors: + - neighborDevice: leaf1 + neighborPort: Ethernet12 + port: Ethernet2 + - neighborDevice: leaf2 + neighborPort: Ethernet12 + port: Ethernet1 + - server3: + ami_name: "cloud-deploy-generic-CentOS-8-8.2.2004" + size: "t2.medium" + type: generic + ip_addr: 192.168.0.43 + sys_mac: 00:1c:73:e3:c6:01 + neighbors: + - neighborDevice: leaf3 + neighborPort: Ethernet11 + port: Ethernet1 + - neighborDevice: leaf3 + neighborPort: Ethernet12 + port: Ethernet2 + - server4: + ami_name: "cloud-deploy-generic-CentOS-8-8.2.2004" + size: "t2.medium" + type: generic + ip_addr: 192.168.0.44 + sys_mac: 00:1c:73:e4:c6:01 + neighbors: + - neighborDevice: leaf4 + neighborPort: Ethernet11 + port: Ethernet1 + - neighborDevice: leaf4 + neighborPort: Ethernet12 + port: Ethernet2 +additional_ssh_nodes: diff --git a/topologies/training-level4-exam/atd-topo 2.png b/topologies/training-level4-exam/atd-topo 2.png new file mode 100644 index 000000000..28b13e8a6 Binary files /dev/null and b/topologies/training-level4-exam/atd-topo 2.png differ diff --git a/topologies/training-level4-exam/configlets/ATD-INFRA b/topologies/training-level4-exam/configlets/ATD-INFRA index a077c96c7..b5951eb5f 100644 --- a/topologies/training-level4-exam/configlets/ATD-INFRA +++ b/topologies/training-level4-exam/configlets/ATD-INFRA @@ -1,7 +1,7 @@ vrf instance MGMT ! daemon TerminAttr - exec /usr/bin/TerminAttr -ingestgrpcurl=192.168.0.5:9910 -taillogs -ingestauth=key,atd-lab -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent -ingestvrf=MGMT + exec /usr/bin/TerminAttr -cvcompression=gzip -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent -cvaddr=192.168.0.5:9910 -cvauth=token,/tmp/token -cvvrf=MGMT -taillogs -disableaaa no shutdown ! alias mlag-reload bash /mnt/flash/shut_intfs && sudo shutdown now -r diff --git a/topologies/training-level4-v2/ATD-INFRA b/topologies/training-level4-v2/ATD-INFRA new file mode 100644 index 000000000..8f58c57f6 --- /dev/null +++ b/topologies/training-level4-v2/ATD-INFRA @@ -0,0 +1,51 @@ +vrf instance MGMT +! +daemon TerminAttr + exec /usr/bin/TerminAttr -cvcompression=gzip -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent -cvaddr=192.168.0.5:9910 -cvauth=token,/tmp/token -cvvrf=default -taillogs -disableaaa + no shutdown +! +alias mlag-reload bash /mnt/flash/shut_intfs && sudo shutdown now -r +alias conint sh interface | i connected +alias senz show interface counter error | nz +alias shmc show int | awk '/^[A-Z]/ { intf = $1 } /, address is/ { print intf, $6 }' +alias snz show interface counter | nz +alias spd show port-channel %1 detail all +alias sqnz show interface counter queue | nz +alias srnz show interface counter rate | nz +alias intdesc + !! Usage: intdesc interface-name description + 10 config + 20 int %1 + 30 desc %2 + 40 exit +! +dns domain arista.lab +! +ntp server vrf MGMT 192.168.0.1 iburst source Management1 +! +radius-server host 192.168.0.1 vrf MGMT key 7 0207165218120E +! +aaa group server radius atds + server 192.168.0.1 vrf MGMT +! +aaa authentication login default group atds local +aaa authorization exec default group atds local +aaa authorization commands all default local +! +username Script secret sha512 $6$PNfpb9anSBQ5/aia$phaa3ar5pwkntenD9WHc6Ed5b96lbW0dc0bjtwPnFLaDiCK8D5Cjl6ewP/xdNbl4PtS6Paq.3SssN8pj05NQm. +username admin privilege 15 role network-admin secret 5 $1$5O85YVVn$HrXcfOivJEnISTMb6xrJc. +username arista privilege 15 role network-admin secret 5 $1$4VjIjfd1$XkUVulbNDESHFzcxDU.Tk1 +! +username arista ssh-key ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC+ERvV4GaPq3FzxY8T+5hMF/1T+l8wiPsVCtOrZU4Hy6NCNlAiDBdA/RUtX5/aOu5JvHyPTVHqWJ0qi9BqU3rxCNl/l2/5UZbm9RPzdZ1QCwoYwPB9/j/tYJV8lZdr6t0yGBfxgzD3oW/zF7a+ZtASaMAu7lkgoqPK2pVIGa+Y9ZCsA0Xq756XpLCw+d3pHKHvIkgWLCo9FoeIv8f/bu5u/ztzRE+Nvl+o5add6MxnjsXz3s7BnW2FX6JNjyp0Z+OXjupQc2gcfFvpd/dA2lCNuuaCHkRgyPwIZtWPmNqMRXPp37mlPwV43qDJRVPQkvh0xPxwS35BbzUxWdT+ZLZv +! +ip radius source-interface Management1 +! +ip routing vrf MGMT +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 +! +management api http-commands + no shutdown + vrf MGMT + no shutdown +! diff --git a/topologies/training-level4-v2/atd-topo-OLD.png b/topologies/training-level4-v2/atd-topo-OLD.png new file mode 100644 index 000000000..baaee2749 Binary files /dev/null and b/topologies/training-level4-v2/atd-topo-OLD.png differ diff --git a/topologies/training-level4-v2/atd-topo.png b/topologies/training-level4-v2/atd-topo.png new file mode 100644 index 000000000..8943ee9fa Binary files /dev/null and b/topologies/training-level4-v2/atd-topo.png differ diff --git a/topologies/training-level4-v2/configlets/ATD-INFRA b/topologies/training-level4-v2/configlets/ATD-INFRA new file mode 100644 index 000000000..b5951eb5f --- /dev/null +++ b/topologies/training-level4-v2/configlets/ATD-INFRA @@ -0,0 +1,51 @@ +vrf instance MGMT +! +daemon TerminAttr + exec /usr/bin/TerminAttr -cvcompression=gzip -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent -cvaddr=192.168.0.5:9910 -cvauth=token,/tmp/token -cvvrf=MGMT -taillogs -disableaaa + no shutdown +! +alias mlag-reload bash /mnt/flash/shut_intfs && sudo shutdown now -r +alias conint sh interface | i connected +alias senz show interface counter error | nz +alias shmc show int | awk '/^[A-Z]/ { intf = $1 } /, address is/ { print intf, $6 }' +alias snz show interface counter | nz +alias spd show port-channel %1 detail all +alias sqnz show interface counter queue | nz +alias srnz show interface counter rate | nz +alias intdesc + !! Usage: intdesc interface-name description + 10 config + 20 int %1 + 30 desc %2 + 40 exit +! +dns domain arista.lab +! +ntp server vrf MGMT 192.168.0.1 iburst source Management1 +! +radius-server host 192.168.0.1 vrf MGMT key 7 0207165218120E +! +aaa group server radius atds + server 192.168.0.1 vrf MGMT +! +aaa authentication login default group atds local +aaa authorization exec default group atds local +aaa authorization commands all default local +! +username Script secret sha512 $6$PNfpb9anSBQ5/aia$phaa3ar5pwkntenD9WHc6Ed5b96lbW0dc0bjtwPnFLaDiCK8D5Cjl6ewP/xdNbl4PtS6Paq.3SssN8pj05NQm. +username admin privilege 15 role network-admin secret 5 $1$5O85YVVn$HrXcfOivJEnISTMb6xrJc. +username arista privilege 15 role network-admin secret 5 $1$4VjIjfd1$XkUVulbNDESHFzcxDU.Tk1 +! +username arista ssh-key ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC+ERvV4GaPq3FzxY8T+5hMF/1T+l8wiPsVCtOrZU4Hy6NCNlAiDBdA/RUtX5/aOu5JvHyPTVHqWJ0qi9BqU3rxCNl/l2/5UZbm9RPzdZ1QCwoYwPB9/j/tYJV8lZdr6t0yGBfxgzD3oW/zF7a+ZtASaMAu7lkgoqPK2pVIGa+Y9ZCsA0Xq756XpLCw+d3pHKHvIkgWLCo9FoeIv8f/bu5u/ztzRE+Nvl+o5add6MxnjsXz3s7BnW2FX6JNjyp0Z+OXjupQc2gcfFvpd/dA2lCNuuaCHkRgyPwIZtWPmNqMRXPp37mlPwV43qDJRVPQkvh0xPxwS35BbzUxWdT+ZLZv +! +ip radius source-interface Management1 +! +ip routing vrf MGMT +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 +! +management api http-commands + no shutdown + vrf MGMT + no shutdown +! diff --git a/topologies/training-level4-v2/configlets/GW-DC1-IP-Address b/topologies/training-level4-v2/configlets/GW-DC1-IP-Address new file mode 100644 index 000000000..a21b74672 --- /dev/null +++ b/topologies/training-level4-v2/configlets/GW-DC1-IP-Address @@ -0,0 +1,22 @@ +! +Hostname GW-DC1 +! +ip routing +! +mpls ip +! +service routing protocols model multi-agent +! +interface Loopback0 + ip address 192.168.100.5/32 +! +interface Ethernet1 + no switchport + ip address 172.16.15.5/24 + no shut +! +interface Ethernet2 + no switchport + ip address 172.16.56.5/24 + no shut +! \ No newline at end of file diff --git a/topologies/training-level4-v2/configlets/GW-DC1-L2L3-eVPN-DCI-MPLS-WAN b/topologies/training-level4-v2/configlets/GW-DC1-L2L3-eVPN-DCI-MPLS-WAN new file mode 100644 index 000000000..852166e5b --- /dev/null +++ b/topologies/training-level4-v2/configlets/GW-DC1-L2L3-eVPN-DCI-MPLS-WAN @@ -0,0 +1,40 @@ +! +Hostname GW-DC1 +! +Router isis isis + Net 49.0000.0000.0000.0005.00 + Is-type level-1 + Address-family ipv4 unicast + segment-routing mpls + router-id 192.168.100.5 + no shutdown +! +interface Loopback0 + node-segment ipv4 index 5 + isis enable isis +! +interface Ethernet2 + isis enable isis + isis network point-to-point +! +router bgp 65003 + ! + neighbor 192.168.100.6 remote-as 65004 + neighbor 192.168.100.6 next-hop-self + neighbor 192.168.100.6 update-source Loopback0 + neighbor 192.168.100.6 ebgp-multihop 3 + neighbor 192.168.100.6 send-community + ! + vlan 12 + rd evpn domain all 1:10012 + route-target import export 1:10012 + route-target import export evpn domain remote 12:10012 + redistribute learned + ! + address-family evpn + neighbor 192.168.100.6 activate + neighbor 192.168.100.6 domain remote + neighbor 192.168.100.6 encapsulation mpls next-hop-self source-interface Loopback0 + neighbor default next-hop-self received-evpn-routes route-type ip-prefix inter-domain + ! +! \ No newline at end of file diff --git a/topologies/training-level4-v2/configlets/GW-DC1-eVPN b/topologies/training-level4-v2/configlets/GW-DC1-eVPN new file mode 100644 index 000000000..d1b3852cd --- /dev/null +++ b/topologies/training-level4-v2/configlets/GW-DC1-eVPN @@ -0,0 +1,56 @@ +! +Hostname GW-DC1 +! +vrf instance ABC +! +ip routing vrf ABC +! +vlan 10,12 +! +interface Vlan10 + vrf ABC + ip address 10.10.1.5/24 + arp aging timeout 295 +! +interface Vxlan1 + vxlan source-interface Loopback0 + vxlan udp-port 4789 + vxlan vlan 10 vni 10010 + vxlan vlan 12 vni 10012 + vxlan vrf ABC vni 10000 + +! +router bgp 65003 + maximum-paths 128 + no bgp default ipv4-unicast + neighbor 172.16.15.1 remote-as 65002 + ! + neighbor 192.168.100.1 remote-as 65002 + neighbor 192.168.100.1 update-source Loopback0 + neighbor 192.168.100.1 ebgp-multihop 3 + neighbor 192.168.100.1 send-community + ! + redistribute connected + ! + vlan 10 + rd 10010:10010 + route-target import export 10010:10010 + redistribute learned + ! + vlan 12 + rd 1:10012 + route-target import export 1:10012 + redistribute learned + ! + address-family evpn + neighbor 192.168.100.1 activate + ! + address-family ipv4 + neighbor 172.16.15.1 activate + ! + vrf ABC + rd 192.168.100.5:10000 + route-target import evpn 10000:10000 + route-target export evpn 10000:10000 + redistribute connected +! \ No newline at end of file diff --git a/topologies/training-level4-v2/configlets/GW-DC2-IP-Address b/topologies/training-level4-v2/configlets/GW-DC2-IP-Address new file mode 100644 index 000000000..0c0d01d08 --- /dev/null +++ b/topologies/training-level4-v2/configlets/GW-DC2-IP-Address @@ -0,0 +1,21 @@ +! +Hostname GW-DC2 +! +ip routing +! +mpls ip +! +service routing protocols model multi-agent +! +int loop0 + ip address 192.168.100.6/32 +! +int eth1 + no switchport + ip address 172.16.56.6/24 + no shut +! +int eth2 + no switchport + ip address 172.16.26.6/24 + no shut \ No newline at end of file diff --git a/topologies/training-level4-v2/configlets/GW-DC2-L2L3-eVPN-DCI-MPLS-WAN b/topologies/training-level4-v2/configlets/GW-DC2-L2L3-eVPN-DCI-MPLS-WAN new file mode 100644 index 000000000..23af398a8 --- /dev/null +++ b/topologies/training-level4-v2/configlets/GW-DC2-L2L3-eVPN-DCI-MPLS-WAN @@ -0,0 +1,40 @@ +! +Hostname GW-DC2 +! +Router isis isis + Net 49.0000.0000.0000.0006.00 + Is-type level-1 + Address-family ipv4 unicast + segment-routing mpls + router-id 192.168.100.6 + no shutdown +! +int loop0 + node-segment ipv4 index 6 + isis enable isis +! +int eth1 + isis enable isis + isis network point-to-point +! +router bgp 65004 + ! + neighbor 192.168.100.5 remote-as 65003 + neighbor 192.168.100.5 next-hop-self + neighbor 192.168.100.5 update-source Loopback0 + neighbor 192.168.100.5 ebgp-multihop 3 + neighbor 192.168.100.5 send-community + ! + vlan 12 + rd evpn domain all 2:10012 + route-target import export 2:10012 + route-target import export evpn domain remote 12:10012 + redistribute learned + ! + address-family evpn + neighbor 192.168.100.5 activate + neighbor 192.168.100.5 domain remote + neighbor 192.168.100.5 encapsulation mpls next-hop-self source-interface Loopback0 + neighbor default next-hop-self received-evpn-routes route-type ip-prefix inter-domain + ! +! diff --git a/topologies/training-level4-v2/configlets/GW-DC2-eVPN b/topologies/training-level4-v2/configlets/GW-DC2-eVPN new file mode 100644 index 000000000..7fbd19604 --- /dev/null +++ b/topologies/training-level4-v2/configlets/GW-DC2-eVPN @@ -0,0 +1,55 @@ +! +Hostname GW-DC2 +! +vrf instance ABC +! +ip routing vrf ABC +! +vlan 11,12 +! +interface Vlan11 + vrf ABC + ip address 10.11.2.6/24 + arp aging timeout 295 +! +interface Vxlan1 + vxlan source-interface Loopback0 + vxlan udp-port 4789 + vxlan vlan 11 vni 10011 + vxlan vlan 12 vni 10012 + vxlan vrf ABC vni 10000 +! +router bgp 65004 + maximum-paths 128 + no bgp default ipv4-unicast + neighbor 172.16.26.2 remote-as 65005 + ! + neighbor 192.168.100.2 remote-as 65005 + neighbor 192.168.100.2 update-source Loopback0 + neighbor 192.168.100.2 ebgp-multihop 3 + neighbor 192.168.100.2 send-community + ! + redistribute connected + ! + vlan 11 + rd 10011:10011 + route-target import export 10011:10011 + redistribute learned + ! + vlan 12 + rd 2:10012 + route-target import export 2:10012 + redistribute learned + ! + address-family evpn + neighbor 192.168.100.2 activate + ! + address-family ipv4 + neighbor 172.16.26.2 activate + ! + vrf ABC + rd 192.168.100.6:10000 + route-target import evpn 10000:10000 + route-target export evpn 10000:10000 + redistribute connected +! \ No newline at end of file diff --git a/topologies/training-level4-v2/configlets/Host-B1-IP-Address b/topologies/training-level4-v2/configlets/Host-B1-IP-Address new file mode 100644 index 000000000..2f4b3dda4 --- /dev/null +++ b/topologies/training-level4-v2/configlets/Host-B1-IP-Address @@ -0,0 +1,20 @@ +! +! hostname Host-B1-DC1 +! +ip routing +! +vlan 10 + name local-to-DC1 +! +int ethernet 1 + shutdown +! +int ethernet 2 + switchport access vlan 10 +! +int vlan 10 + ip address 10.10.1.21/24 + no shut +! +ip route 0.0.0.0/0 10.10.1.11 +! \ No newline at end of file diff --git a/topologies/training-level4-v2/configlets/Host-B2-IP-Address b/topologies/training-level4-v2/configlets/Host-B2-IP-Address new file mode 100644 index 000000000..c7d4b3411 --- /dev/null +++ b/topologies/training-level4-v2/configlets/Host-B2-IP-Address @@ -0,0 +1,20 @@ +! +! hostname Host-B2-DC2 +! +ip routing +! +vlan 11 + name local-to-DC2 +! +int ethernet 1 + shutdown +! +int ethernet 2 + switchport access vlan 11 +! +int vlan 11 + ip address 10.11.2.22/24 + no shut +! +ip route 0.0.0.0/0 10.11.2.12 +! \ No newline at end of file diff --git a/topologies/training-level4-v2/configlets/Host-C1-IP-Address b/topologies/training-level4-v2/configlets/Host-C1-IP-Address new file mode 100644 index 000000000..0e4efb3b5 --- /dev/null +++ b/topologies/training-level4-v2/configlets/Host-C1-IP-Address @@ -0,0 +1,20 @@ +! +! hostname Host-C1-DC1 +! +ip routing +! +vlan 12 + name Stretched-between-DC1-and-DC2 +! +int ethernet 1 + shutdown +! +int ethernet 2 + switchport access vlan 12 +! +int vlan 12 + ip address 10.12.0.31/16 + no shut +! +ip route 0.0.0.0/0 10.12.0.11 +! \ No newline at end of file diff --git a/topologies/training-level4-v2/configlets/Host-C2-IP-Address b/topologies/training-level4-v2/configlets/Host-C2-IP-Address new file mode 100644 index 000000000..2d7a0547f --- /dev/null +++ b/topologies/training-level4-v2/configlets/Host-C2-IP-Address @@ -0,0 +1,20 @@ +! +! hostname Host-C2-DC2 +! +ip routing +! +vlan 12 + name Stretched-between-DC1-and-DC2 +! +int ethernet 1 + shutdown +! +int ethernet 2 + switchport access vlan 12 +! +int vlan 12 + ip address 10.12.0.32/16 + no shut +! +ip route 0.0.0.0/0 10.12.0.12 +! \ No newline at end of file diff --git a/topologies/training-level4-v2/configlets/Leaf-DC1-IP-Address b/topologies/training-level4-v2/configlets/Leaf-DC1-IP-Address new file mode 100644 index 000000000..58483d811 --- /dev/null +++ b/topologies/training-level4-v2/configlets/Leaf-DC1-IP-Address @@ -0,0 +1,42 @@ +! +Hostname Leaf-DC1 +! +ip routing +! +mpls ip +! +service routing protocols model multi-agent +! +int loopback0 + ip address 192.168.10.1/32 +! +int ethernet1 + no switchport + ip address 192.168.11.2/30 + no shut +! +int ethernet2 + switchport access vlan 10 + no shut +! +int ethernet3 + switchport access vlan 12 + no shut +! +! +vrf instance ABC +! +ip routing vrf ABC +! +vlan 10,12 +! +interface Vlan10 + vrf ABC + ip address 10.10.1.11/24 + arp aging timeout 295 +! +int vlan 12 + vrf ABC + ip address 10.12.0.11/16 + arp aging timeout 295 +! \ No newline at end of file diff --git a/topologies/training-level4-v2/configlets/Leaf-DC1-eVPN b/topologies/training-level4-v2/configlets/Leaf-DC1-eVPN new file mode 100644 index 000000000..0d06047c5 --- /dev/null +++ b/topologies/training-level4-v2/configlets/Leaf-DC1-eVPN @@ -0,0 +1,43 @@ +! +Hostname Leaf-DC1 +! +interface Vxlan1 + vxlan source-interface Loopback0 + vxlan udp-port 4789 + vxlan vlan 10 vni 10010 + vxlan vlan 12 vni 10012 + vxlan vrf ABC vni 10000 +! +router bgp 65001 + maximum-paths 128 + no bgp default ipv4-unicast + neighbor 192.168.11.1 remote-as 65002 + neighbor 192.168.100.1 remote-as 65002 + neighbor 192.168.100.1 update-source Loopback0 + neighbor 192.168.100.1 ebgp-multihop 3 + neighbor 192.168.100.1 send-community + redistribute connected + ! + address-family evpn + neighbor 192.168.100.1 activate + neighbor 192.168.100.1 encapsulation vxlan + ! + address-family ipv4 + neighbor 192.168.11.1 activate + ! + vrf ABC + rd 192.168.10.1:10000 + route-target import evpn 10000:10000 + route-target export evpn 10000:10000 + redistribute connected + ! + vlan 10 + rd 10010:10010 + route-target import export 10010:10010 + redistr learned + ! + vlan 12 + rd 1:10012 + route-target import export 1:10012 + redistr learned + ! diff --git a/topologies/training-level4-v2/configlets/Leaf-DC2-IP-Address b/topologies/training-level4-v2/configlets/Leaf-DC2-IP-Address new file mode 100644 index 000000000..80a77978b --- /dev/null +++ b/topologies/training-level4-v2/configlets/Leaf-DC2-IP-Address @@ -0,0 +1,43 @@ +! +Hostname Leaf-DC2 +! +ip routing +! +mpls ip +! +service routing protocols model multi-agent +! +! +interface Loopback0 + ip address 192.168.10.2/32 +! +interface Ethernet1 + no switchport + ip address 192.168.12.2/30 + no shut +! +int ethernet2 + switchport access vlan 11 + no shut +! +int ethernet3 + switchport access vlan 12 + no shut +! +! +vrf instance ABC +! +ip routing vrf ABC +! +vlan 11-12 +! +interface Vlan11 + vrf ABC + ip address 10.11.2.12/24 + arp aging timeout 295 +! +interface Vlan12 + vrf ABC + ip address 10.12.0.12/16 + arp aging timeout 295 +! \ No newline at end of file diff --git a/topologies/training-level4-v2/configlets/Leaf-DC2-eVPN b/topologies/training-level4-v2/configlets/Leaf-DC2-eVPN new file mode 100644 index 000000000..e5045bc4e --- /dev/null +++ b/topologies/training-level4-v2/configlets/Leaf-DC2-eVPN @@ -0,0 +1,43 @@ +! +Hostname Leaf-DC2 +! +interface Vxlan1 + vxlan source-interface Loopback0 + vxlan udp-port 4789 + vxlan vlan 11 vni 10011 + vxlan vlan 12 vni 10012 + vxlan vrf ABC vni 10000 +! +router bgp 65006 + maximum-paths 128 + no bgp default ipv4-unicast + neighbor 192.168.12.1 remote-as 65005 + neighbor 192.168.100.2 remote-as 65005 + neighbor 192.168.100.2 update-source Loopback0 + neighbor 192.168.100.2 ebgp-multihop 3 + neighbor 192.168.100.2 send-community + redistribute connected + ! + address-family evpn + neighbor 192.168.100.2 activate + neighbor 192.168.100.2 encapsulation vxlan + ! + address-family ipv4 + neighbor 192.168.12.1 activate + ! + vrf ABC + rd 192.168.10.2:10000 + route-target import evpn 10000:10000 + route-target export evpn 10000:10000 + redistribute connected + ! + vlan 11 + rd 10011:10011 + route-target import export 10011:10011 + redistr learned + ! + vlan 12 + rd 2:10012 + route-target import export 2:10012 + redistr learned + ! diff --git a/topologies/training-level4-v2/configlets/Spine-DC1-IP-Address.txt b/topologies/training-level4-v2/configlets/Spine-DC1-IP-Address.txt new file mode 100644 index 000000000..0a221ec2f --- /dev/null +++ b/topologies/training-level4-v2/configlets/Spine-DC1-IP-Address.txt @@ -0,0 +1,28 @@ +! +Hostname Spine-DC1 +! +ip routing +! +mpls ip +! +service routing protocols model multi-agent +! +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +! +int loop0 + ip address 192.168.100.1/32 +! +int eth1 + no switchport + ip address 192.168.11.1/30 + no shut +! +int eth2-5 + shut +! +int eth6 + no switchport + ip address 172.16.15.1/24 + no shut +! +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! \ No newline at end of file diff --git a/topologies/training-level4-v2/configlets/Spine-DC1-eVPN.txt b/topologies/training-level4-v2/configlets/Spine-DC1-eVPN.txt new file mode 100644 index 000000000..d28d7d6c4 --- /dev/null +++ b/topologies/training-level4-v2/configlets/Spine-DC1-eVPN.txt @@ -0,0 +1,32 @@ +! +Hostname Spine-DC1 +! +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +! +router bgp 65002 + maximum-paths 128 + no bgp default ipv4-unicast + neighbor 192.168.11.2 remote-as 65001 + neighbor 172.16.15.5 remote-as 65003 + ! + neighbor 192.168.10.1 remote-as 65001 + neighbor 192.168.10.1 update-source Loopback0 + neighbor 192.168.10.1 ebgp-multihop 3 + neighbor 192.168.10.1 send-community + ! + neighbor 192.168.100.5 remote-as 65003 + neighbor 192.168.100.5 update-source Loopback0 + neighbor 192.168.100.5 ebgp-multihop 3 + neighbor 192.168.100.5 send-community + ! + redistribute connected + ! + address-family ipv4 + neighbor 172.16.15.5 activate + neighbor 192.168.11.2 activate + ! + address-family evpn + neighbor 192.168.10.1 activate + neighbor 192.168.100.5 activate + ! +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! \ No newline at end of file diff --git a/topologies/training-level4-v2/configlets/Spine-DC2-IP-Address.txt b/topologies/training-level4-v2/configlets/Spine-DC2-IP-Address.txt new file mode 100644 index 000000000..f4cbcb0d0 --- /dev/null +++ b/topologies/training-level4-v2/configlets/Spine-DC2-IP-Address.txt @@ -0,0 +1,28 @@ +! +Hostname Spine-DC2 +! +ip routing +! +mpls ip +! +service routing protocols model multi-agent +! +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +! +int loop0 + ip address 192.168.100.2/32 +! +int eth1 + no switchport + ip address 192.168.12.1/30 + no shut +! +int eth2-5 + shut +! +int eth6 + no switchport + ip address 172.16.26.2/24 + no shut +! +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! \ No newline at end of file diff --git a/topologies/training-level4-v2/configlets/Spine-DC2-eVPN.txt b/topologies/training-level4-v2/configlets/Spine-DC2-eVPN.txt new file mode 100644 index 000000000..f574a3c4f --- /dev/null +++ b/topologies/training-level4-v2/configlets/Spine-DC2-eVPN.txt @@ -0,0 +1,32 @@ +! +Hostname Spine-DC2 +! +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +! +router bgp 65005 + maximum-paths 128 + no bgp default ipv4-unicast + neighbor 192.168.12.2 remote-as 65006 + neighbor 172.16.26.6 remote-as 65004 + ! + neighbor 192.168.10.2 remote-as 65006 + neighbor 192.168.10.2 update-source Loopback0 + neighbor 192.168.10.2 ebgp-multihop 3 + neighbor 192.168.10.2 send-community + ! + neighbor 192.168.100.6 remote-as 65004 + neighbor 192.168.100.6 update-source Loopback0 + neighbor 192.168.100.6 ebgp-multihop 3 + neighbor 192.168.100.6 send-community + ! + redistribute connected + ! + address-family ipv4 + neighbor 172.16.26.6 activate + neighbor 192.168.12.2 activate + ! + address-family evpn + neighbor 192.168.10.2 activate + neighbor 192.168.100.6 activate + ! +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! \ No newline at end of file diff --git a/topologies/training-level4-v2/configlets/a1-BASE b/topologies/training-level4-v2/configlets/a1-BASE new file mode 100644 index 000000000..33502b8a3 --- /dev/null +++ b/topologies/training-level4-v2/configlets/a1-BASE @@ -0,0 +1,10 @@ +hostname A1 +! +interface Management1 + vrf MGMT + ip address 192.168.0.21/24 +! +service routing protocols model multi-agent +! +ip routing +! \ No newline at end of file diff --git a/topologies/training-level4-v2/configlets/a2-BASE b/topologies/training-level4-v2/configlets/a2-BASE new file mode 100644 index 000000000..9fc2c66f8 --- /dev/null +++ b/topologies/training-level4-v2/configlets/a2-BASE @@ -0,0 +1,10 @@ +hostname A2 +! +interface Management1 + vrf MGMT + ip address 192.168.0.31/24 +! +service routing protocols model multi-agent +! +ip routing +! \ No newline at end of file diff --git a/topologies/training-level4-v2/configlets/b1-BASE b/topologies/training-level4-v2/configlets/b1-BASE new file mode 100644 index 000000000..684a94c1b --- /dev/null +++ b/topologies/training-level4-v2/configlets/b1-BASE @@ -0,0 +1,10 @@ +hostname B1 +! +interface Management1 + vrf MGMT + ip address 192.168.0.22/24 +! +service routing protocols model multi-agent +! +ip routing +! \ No newline at end of file diff --git a/topologies/training-level4-v2/configlets/b2-BASE b/topologies/training-level4-v2/configlets/b2-BASE new file mode 100644 index 000000000..2be4c9d31 --- /dev/null +++ b/topologies/training-level4-v2/configlets/b2-BASE @@ -0,0 +1,10 @@ +hostname B2 +! +interface Management1 + vrf MGMT + ip address 192.168.0.32/24 +! +service routing protocols model multi-agent +! +ip routing +! \ No newline at end of file diff --git a/topologies/training-level4-v2/configlets/c1-BASE b/topologies/training-level4-v2/configlets/c1-BASE new file mode 100644 index 000000000..55c24e0cc --- /dev/null +++ b/topologies/training-level4-v2/configlets/c1-BASE @@ -0,0 +1,10 @@ +hostname C1 +! +interface Management1 + vrf MGMT + ip address 192.168.0.23/24 +! +service routing protocols model multi-agent +! +ip routing +! \ No newline at end of file diff --git a/topologies/training-level4-v2/configlets/c2-BASE b/topologies/training-level4-v2/configlets/c2-BASE new file mode 100644 index 000000000..623b61d7b --- /dev/null +++ b/topologies/training-level4-v2/configlets/c2-BASE @@ -0,0 +1,10 @@ +hostname C2 +! +interface Management1 + vrf MGMT + ip address 192.168.0.33/24 +! +service routing protocols model multi-agent +! +ip routing +! \ No newline at end of file diff --git a/topologies/training-level4-v2/configlets/p3-BASE b/topologies/training-level4-v2/configlets/p3-BASE new file mode 100644 index 000000000..c6d87f7e6 --- /dev/null +++ b/topologies/training-level4-v2/configlets/p3-BASE @@ -0,0 +1,10 @@ +hostname P3 +! +interface Management1 + vrf MGMT + ip address 192.168.0.43/24 +! +service routing protocols model multi-agent +! +ip routing +! \ No newline at end of file diff --git a/topologies/training-level4-v2/configlets/p4-BASE b/topologies/training-level4-v2/configlets/p4-BASE new file mode 100644 index 000000000..d0e12bb00 --- /dev/null +++ b/topologies/training-level4-v2/configlets/p4-BASE @@ -0,0 +1,10 @@ +hostname P4 +! +interface Management1 + vrf MGMT + ip address 192.168.0.44/24 +! +service routing protocols model multi-agent +! +ip routing +! \ No newline at end of file diff --git a/topologies/training-level4-v2/configlets/p5-BASE b/topologies/training-level4-v2/configlets/p5-BASE new file mode 100644 index 000000000..24494f422 --- /dev/null +++ b/topologies/training-level4-v2/configlets/p5-BASE @@ -0,0 +1,10 @@ +hostname P5 +! +interface Management1 + vrf MGMT + ip address 192.168.0.45/24 +! +service routing protocols model multi-agent +! +ip routing +! \ No newline at end of file diff --git a/topologies/training-level4-v2/configlets/p6-BASE b/topologies/training-level4-v2/configlets/p6-BASE new file mode 100644 index 000000000..3e1315052 --- /dev/null +++ b/topologies/training-level4-v2/configlets/p6-BASE @@ -0,0 +1,10 @@ +hostname P6 +! +interface Management1 + vrf MGMT + ip address 192.168.0.46/24 +! +service routing protocols model multi-agent +! +ip routing +! \ No newline at end of file diff --git a/topologies/training-level4-v2/configlets/pe1-BASE b/topologies/training-level4-v2/configlets/pe1-BASE new file mode 100644 index 000000000..b136ff7f9 --- /dev/null +++ b/topologies/training-level4-v2/configlets/pe1-BASE @@ -0,0 +1,10 @@ +hostname PE1 +! +interface Management1 + vrf MGMT + ip address 192.168.0.41/24 +! +service routing protocols model multi-agent +! +ip routing +! \ No newline at end of file diff --git a/topologies/training-level4-v2/configlets/pe2-BASE b/topologies/training-level4-v2/configlets/pe2-BASE new file mode 100644 index 000000000..773b3a7bf --- /dev/null +++ b/topologies/training-level4-v2/configlets/pe2-BASE @@ -0,0 +1,10 @@ +hostname PE2 +! +interface Management1 + vrf MGMT + ip address 192.168.0.42/24 +! +service routing protocols model multi-agent +! +ip routing +! \ No newline at end of file diff --git a/topologies/training-level4-v2/files/.ansible.cfg b/topologies/training-level4-v2/files/.ansible.cfg new file mode 100644 index 000000000..14c806515 --- /dev/null +++ b/topologies/training-level4-v2/files/.ansible.cfg @@ -0,0 +1,2 @@ +[defaults] +host_key_checking = False diff --git a/topologies/training-level4-v2/files/.screenrc b/topologies/training-level4-v2/files/.screenrc new file mode 100644 index 000000000..8330b41e6 --- /dev/null +++ b/topologies/training-level4-v2/files/.screenrc @@ -0,0 +1,23 @@ +# Turn off the startup message. +startup_message off +# Set the caption to the active windows. +caption always "%-Lw%{= BW}%50>%n%f* %t%{-}%+Lw%<" + +term screen-256color + +# New screens for various processes. +# Example: screen -t +# screen -t 7050SX-128 0 ssh aristaadmin@192.100.37.128 +screen -t CVP 2 ssh 192.168.0.5 +screen -t A1 3 ssh 192.168.0.21 +screen -t A2 4 ssh 192.168.0.31 +screen -t B1 5 ssh 192.168.0.22 +screen -t B2 6 ssh 192.168.0.32 +screen -t C1 7 ssh 192.168.0.23 +screen -t C2 8 ssh 192.168.0.33 +screen -t PE1 9 ssh 192.168.0.41 +screen -t PE2 10 ssh 192.168.0.42 +screen -t P3 11 ssh 192.168.0.43 +screen -t P4 12 ssh 192.168.0.44 +screen -t P5 13 ssh 192.168.0.45 +screen -t P6 14 ssh 192.168.0.46 diff --git a/topologies/training-level4-v2/files/MenuOptions.yaml b/topologies/training-level4-v2/files/MenuOptions.yaml new file mode 100644 index 000000000..8c0bf20bb --- /dev/null +++ b/topologies/training-level4-v2/files/MenuOptions.yaml @@ -0,0 +1,255 @@ +--- +options: + reset: + - command: "/usr/local/bin/ConfigureTopology.py && bash /home/arista/Broadcaster/pushHostDefaultConfig.sh" + description: "Reset All Devices to Base ATD (reset)" + mlag: + - command: "/usr/local/bin/ConfigureTopology.py -t mlag" + description: "MLAG Lab (mlag)" + bgp: + - command: "/usr/local/bin/ConfigureTopology.py -t bgp" + description: "BGP Lab (bgp)" + vxlan: + - command: "/usr/local/bin/ConfigureTopology.py -t vxlan" + description: "VXLAN Lab (vxlan) excludes leaf3 instead of leaf4" + l2evpn: + - command: "/usr/local/bin/ConfigureTopology.py -t l2evpn" + description: "EVPN Type 2 Lab (l2evpn) excludes leaf3 instead of leaf4" + l3evpn: + - command: "/usr/local/bin/ConfigureTopology.py -t l3evpn" + description: "EVPN Type 5 Lab (l3evpn) excludes leaf3 instead of leaf4" + cvp: + - command: "/usr/local/bin/ConfigureTopology.py -t cvp" + description: "CVP lab (cvp)" + media: + - command: "bash /home/arista/Broadcaster/pushHostMediaConfig.sh && login.py" + description: "Broadcast Engineer Training (media)" +labconfiglets: + mlag: + spine1: + - "Spine1-MLAG-Lab" + - "VLANs" + spine2: + - "Spine2-MLAG-Lab" + - "VLANs" + leaf1: + - "Leaf1-MLAG-Lab" + - "VLANs" + leaf2: + - "Leaf2-MLAG-Lab" + - "VLANs" + leaf3: + - "Leaf3-MLAG-Lab" + - "VLANs" + leaf4: + - "VLANs" + cvx01: + - "cvx01-Controller" + host1: + - "Host1-ATD" + host2: + - "Host2-ATD" + bgp: + spine1: + - "Spine1-BGP-Lab" + spine2: + - "Spine2-BGP-Lab" + leaf1: + - "Leaf1-BGP-Lab" + leaf2: + - "Leaf2-BGP-Lab" + leaf3: + - "Leaf3-BGP-Lab" + leaf4: + - "Leaf4-BGP-Lab" + cvx01: + - "cvx01-Controller" + host1: + - "Host1-ATD" + host2: + - "Host2-ATD" + vxlan: + spine1: + - "Spine1-BGP-Lab" + spine2: + - "Spine2-BGP-Lab" + leaf1: + - "Leaf1-VXLAN-Lab" + - "VLANs" + leaf2: + - "Leaf2-VXLAN-Lab" + - "VLANs" + leaf3: + - "Leaf3-VXLAN-Lab" + - "VLANs" + leaf4: + - "Leaf4-VXLAN-Lab" + - "VLANs" + cvx01: + - "cvx01-Controller" + host1: + - "Host1-ATD" + host2: + - "Host2-ATD" + l2evpn: + spine1: + - "Spine1-L2EVPN-Lab" + spine2: + - "Spine2-L2EVPN-Lab" + leaf1: + - "Leaf1-L2EVPN-Lab" + - "VLANs" + leaf2: + - "Leaf2-L2EVPN-Lab" + - "VLANs" + leaf3: + - "VLANs" + leaf4: + - "Leaf4-L2EVPN-Lab" + - "VLANs" + cvx01: + - "cvx01-Controller" + host1: + - "Host1-ATD" + host2: + - "Host2-ATD" + l3evpn: + spine1: + - "Spine1-L3EVPN-Lab" + spine2: + - "Spine2-L3EVPN-Lab" + leaf1: + - "Leaf1-L3EVPN-Lab" + leaf2: + - "Leaf2-L3EVPN-Lab" + leaf3: + - "VLANs" + leaf4: + - "Leaf4-L3EVPN-Lab" + cvx01: + - "cvx01-Controller" + host1: + - "Host1-ATD" + host2: + - "Host2-ATD" + cvp: + spine1: + - "Spine1-BGP-Lab" + spine2: + - "Spine2-BGP-Lab" + leaf1: + - "Leaf1-BGP-Lab" + leaf2: + - "Leaf2-BGP-Lab" + leaf3: + - "Leaf3-BGP-Lab" + leaf4: + - "Leaf4-BGP-Lab-Full" + cvx01: + - "cvx01-Controller" + host1: + - "Host1-ATD" + host2: + - "Host2-ATD" + media-reset: + spine1: + - "media-spine1-IP-Intro-start" + spine2: + - "media-spine2-IP-Intro-start" + leaf1: + - "media-leaf1-IP-Intro-start" + leaf2: + - "media-leaf2-IP-Intro-start" + leaf3: + - "media-leaf3-IP-Intro-start" + leaf4: + - "media-leaf4-IP-Intro-start" + host1: + - "Host1-Media" + host2: + - "Host2-Media" + media-intro: + spine1: + - "media-spine1-IP-Intro-start" + spine2: + - "media-spine2-IP-Intro-start" + leaf1: + - "media-leaf1-IP-Intro-start" + leaf2: + - "media-leaf2-IP-Intro-start" + leaf3: + - "media-leaf3-IP-Intro-start" + leaf4: + - "media-leaf4-IP-Intro-start" + host1: + - "Host1-Media" + host2: + - "Host2-Media" + media-vlan: + spine1: + - "media-spine1-VLAN-STP-start" + spine2: + - "media-spine2-VLAN-STP-start" + leaf1: + - "media-leaf1-VLAN-STP-start" + leaf2: + - "media-leaf2-VLAN-STP-start" + leaf3: + - "media-leaf3-VLAN-STP-start" + leaf4: + - "media-leaf4-VLAN-STP-start" + host1: + - "Host1-Media" + host2: + - "Host2-Media" + media-ospf: + spine1: + - "media-spine1-OSPF-start" + spine2: + - "media-spine2-OSPF-start" + leaf1: + - "media-leaf1-OSPF-start" + leaf2: + - "media-leaf2-OSPF-start" + leaf3: + - "media-leaf3-OSPF-start" + leaf4: + - "media-leaf4-OSPF-start" + host1: + - "Host1-Media" + host2: + - "Host2-Media" + media-bgp: + spine1: + - "media-spine1-BGP-start" + spine2: + - "media-spine2-BGP-start" + leaf1: + - "media-leaf1-BGP-start" + leaf2: + - "media-leaf2-BGP-start" + leaf3: + - "media-leaf3-BGP-start" + leaf4: + - "media-leaf4-BGP-start" + host1: + - "Host1-Media" + host2: + - "Host2-Media" + media-mcast: + spine1: + - "media-spine1-Multicast-lab" + spine2: + - "media-spine2-Multicast-lab" + leaf1: + - "media-leaf1-Multicast-lab" + leaf2: + - "media-leaf2-Multicast-lab" + leaf3: + - "media-leaf3-Multicast-lab" + leaf4: + - "media-leaf4-Multicast-lab" + host1: + - "Host1-Media" + host2: + - "Host2-Media" diff --git a/topologies/training-level4-v2/files/apps/coder/coder.yaml b/topologies/training-level4-v2/files/apps/coder/coder.yaml new file mode 100644 index 000000000..80cc852d1 --- /dev/null +++ b/topologies/training-level4-v2/files/apps/coder/coder.yaml @@ -0,0 +1,4 @@ +bind-addr: 127.0.0.1:8080 +auth: password +password: {ARISTA_REPLACE} +cert: false \ No newline at end of file diff --git a/topologies/training-level4-v2/files/apps/coder/labfiles/.placeholder b/topologies/training-level4-v2/files/apps/coder/labfiles/.placeholder new file mode 100644 index 000000000..e69de29bb diff --git a/topologies/training-level4-v2/files/apps/ssh/web.json b/topologies/training-level4-v2/files/apps/ssh/web.json new file mode 100644 index 000000000..13fac47dd --- /dev/null +++ b/topologies/training-level4-v2/files/apps/ssh/web.json @@ -0,0 +1,76 @@ +{ + "listen": { + "ip": "0.0.0.0", + "port": 2222 + }, + "user": { + "name": null, + "password": null, + "privatekey": null + }, + "ssh": { + "host": null, + "port": 22, + "localAddress": null, + "localPort": null, + "term": "xterm-color", + "readyTimeout": 20000, + "keepaliveInterval": 120000, + "keepaliveCountMax": 10, + "allowedSubnets": [ "192.168.0.0/16", "10.0.0.0/8", "172.16.0.0/12" ] + }, + "terminal": { + "cursorBlink": true, + "scrollback": 10000, + "tabStopWidth": 8, + "bellStyle": "sound" + }, + "header": { + "text": null, + "background": "green" + }, + "session": { + "name": "WebSSH2", + "secret": "mysecret" + }, + "options": { + "challengeButton": true, + "allowreauth": true + }, + "algorithms": { + "kex": [ + "ecdh-sha2-nistp256", + "ecdh-sha2-nistp384", + "ecdh-sha2-nistp521", + "diffie-hellman-group-exchange-sha256", + "diffie-hellman-group14-sha1" + ], + "cipher": [ + "aes128-ctr", + "aes192-ctr", + "aes256-ctr", + "aes128-gcm", + "aes128-gcm@openssh.com", + "aes256-gcm", + "aes256-gcm@openssh.com", + "aes256-cbc" + ], + "hmac": [ + "hmac-sha2-256", + "hmac-sha2-512", + "hmac-sha1" + ], + "compress": [ + "none", + "zlib@openssh.com", + "zlib" + ] + }, + "serverlog": { + "client": false, + "server": false + }, + "accesslog": false, + "verify": false, + "safeShutdownDuration": 300 + } \ No newline at end of file diff --git a/topologies/training-level4-v2/files/apps/uilanding/modules.yaml b/topologies/training-level4-v2/files/apps/uilanding/modules.yaml new file mode 100644 index 000000000..53c748117 --- /dev/null +++ b/topologies/training-level4-v2/files/apps/uilanding/modules.yaml @@ -0,0 +1,39 @@ +topology: + image: "atd-topo.png" + nodes: + A1: + coords: "36,152,141,208" + ip: "192.168.0.21" + A2: + coords: "758,156,858,208" + ip: "192.168.0.31" + B1: + coords: "40,246,141,300" + ip: "192.168.0.22" + B2: + coords: "757,245,859,300" + ip: "192.168.0.32" + C1: + coords: "40,336,145,392" + ip: "192.168.0.23" + C2: + coords: "757,336,857,387" + ip: "192.168.0.33" + PE1: + coords: "258,244,357,299" + ip: "192.168.0.41" + PE21: + coords: "559,244,660,297" + ip: "192.168.0.42" + P3: + coords: "395,99,495,153" + ip: "192.168.0.43" + P4: + coords: "405,244,505,299" + ip: "192.168.0.44" + P5: + coords: "294,384,390,436" + ip: "192.168.0.45" + P6: + coords: "495,380,595,435" + ip: "192.168.0.46" \ No newline at end of file diff --git a/topologies/training-level4-v2/files/apps/webui/.vncpass_clear b/topologies/training-level4-v2/files/apps/webui/.vncpass_clear new file mode 100644 index 000000000..cd09dd7a5 --- /dev/null +++ b/topologies/training-level4-v2/files/apps/webui/.vncpass_clear @@ -0,0 +1 @@ +@rista1 \ No newline at end of file diff --git a/topologies/training-level4-v2/files/cvp/cvp_info.yaml b/topologies/training-level4-v2/files/cvp/cvp_info.yaml new file mode 100644 index 000000000..987bcfa15 --- /dev/null +++ b/topologies/training-level4-v2/files/cvp/cvp_info.yaml @@ -0,0 +1,67 @@ +cvp_info: + containers: + Tenant: + nodes: + Customer Edge: + parent: Tenant + nodes: + A: + parent: Customer Edge + nodes: + - A1 + - A2 + B: + parent: Customer Edge + nodes: + - B1 + - B2 + C: + parent: Customer Edge + nodes: + - C1 + - C2 + Provider: + parent: Tenant + nodes: + PE: + parent: Provider + nodes: + - PE1 + - PE2 + P: + parent: Provider + nodes: + - P3 + - P4 + - P5 + - P6 + snapshots: + configlets: + containers: + Tenant: + - ATD-INFRA + netelements: + A1: + - a1-BASE + B1: + - b1-BASE + C1: + - c1-BASE + A2: + - a2-BASE + B2: + - b2-BASE + C2: + - c2-BASE + PE1: + - pe1-BASE + PE2: + - pe2-BASE + P3: + - p3-BASE + P4: + - p4-BASE + P5: + - p5-BASE + P6: + - p6-BASE diff --git a/topologies/training-level4-v2/files/hosts b/topologies/training-level4-v2/files/hosts new file mode 100644 index 000000000..80e5573b7 --- /dev/null +++ b/topologies/training-level4-v2/files/hosts @@ -0,0 +1,14 @@ +127.0.0.1 localhost +192.168.0.21 CE-A1 +192.168.0.31 CE-A2 +192.168.0.22 CE-B1 +192.168.0.32 CE-B2 +192.168.0.23 CE-C1 +192.168.0.33 CE-C2 +192.168.0.41 PE1 +192.168.0.42 PE2 +192.168.0.43 P3 +192.168.0.44 P4 +192.168.0.45 P5 +192.168.0.46 P6 +192.168.0.5 cvp \ No newline at end of file diff --git a/topologies/training-level4-v2/files/menus/default.yaml b/topologies/training-level4-v2/files/menus/default.yaml new file mode 100644 index 000000000..3f58665eb --- /dev/null +++ b/topologies/training-level4-v2/files/menus/default.yaml @@ -0,0 +1,2 @@ +--- +default_menu: training-l4.yaml \ No newline at end of file diff --git a/topologies/training-level4-v2/files/menus/training-l4.yaml b/topologies/training-level4-v2/files/menus/training-l4.yaml new file mode 100644 index 000000000..4ab06bbf8 --- /dev/null +++ b/topologies/training-level4-v2/files/menus/training-l4.yaml @@ -0,0 +1,29 @@ + lab_list: + reset: + description: "Reset All Devices to Base Lab (reset)" + labconfiglets: + reset: + A1: + - a1-BASE + B1: + - b1-BASE + C1: + - c1-BASE + A2: + - a2-BASE + B2: + - b2-BASE + C2: + - c2-BASE + PE1: + - pe1-BASE + PE2: + - pe2-BASE + P3: + - p3-BASE + P4: + - p4-BASE + P5: + - p5-BASE + P6: + - p6-BASE \ No newline at end of file diff --git a/topologies/training-level4-v2/files/scripts/Authenticate-CVP b/topologies/training-level4-v2/files/scripts/Authenticate-CVP new file mode 100644 index 000000000..144bb13eb --- /dev/null +++ b/topologies/training-level4-v2/files/scripts/Authenticate-CVP @@ -0,0 +1,32 @@ +import requests +import json + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + +# Print user details + +print "User Name:%s\n "%output['username'] +print "First Name: %s\n "%output['user']['firstName'] +print "Last Name: %s\n "%output['user']['lastName'] +print "User Permissions: %s\n "%output['permissionList'] +print "Cookie Jar: %s\n "%cookies diff --git a/topologies/training-level4-v2/files/scripts/Authenticate-CVP2 b/topologies/training-level4-v2/files/scripts/Authenticate-CVP2 new file mode 100644 index 000000000..3f6bf9190 --- /dev/null +++ b/topologies/training-level4-v2/files/scripts/Authenticate-CVP2 @@ -0,0 +1,48 @@ +import requests +import json + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + +# Print user details + +print "User Name:%s\n "%output['username'] +print "First Name: %s\n "%output['user']['firstName'] +print "Last Name: %s\n "%output['user']['lastName'] +print "User Permissions: %s\n "%output['permissionList'] +print "Cookie Jar: %s\n "%cookies + +#Create an HTTP GET request to the CVP server + +getConfigletURL = "/cvpservice/configlet/getConfiglets.do?" +getConfigletParams = {'startIndex':'0','endIndex':'0','type':'Configlet'} +response = requests.get(url+getConfigletURL,cookies=cookies, params=getConfigletParams,verify=False) +assert response.ok +outputConfiglets = response.json() + +# Print Configlet details + +for configlet in outputConfiglets['data']: + print "ConfigletName: %s"%configlet['name'] + print "ConfigletKey: %s"%configlet['key'] + print "\n" + diff --git a/topologies/training-level4-v2/files/scripts/Authenticate-CVP3 b/topologies/training-level4-v2/files/scripts/Authenticate-CVP3 new file mode 100644 index 000000000..2445806ea --- /dev/null +++ b/topologies/training-level4-v2/files/scripts/Authenticate-CVP3 @@ -0,0 +1,95 @@ +import requests +import json + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + +# Print user details + +print "User Name:%s\n "%output['username'] +print "First Name: %s\n "%output['user']['firstName'] +print "Last Name: %s\n "%output['user']['lastName'] +print "User Permissions: %s\n "%output['permissionList'] +print "Cookie Jar: %s\n "%cookies + +#Create an HTTP GET request to the CVP server + +getConfigletURL = "/cvpservice/configlet/getConfiglets.do?" +getConfigletParams = {'startIndex':'0','endIndex':'0','type':'Configlet'} +response = requests.get(url+getConfigletURL,cookies=cookies, params=getConfigletParams,verify=False) +assert response.ok +outputConfiglets = response.json() + +# Print Configlet details + +for configlet in outputConfiglets['data']: + print "ConfigletName: %s"%configlet['name'] + print "ConfigletKey: %s"%configlet['key'] + print "\n" +# Create an HTTP GET request to the CVP server + +getConfigletHistoryURL = "/cvpservice/configlet/getConfigletHistory.do?" +getConfigletParams = {'configletId':'configlet_32_438214998013','startIndex':'0','endIndex':'0'} +response = requests.get(url+getConfigletHistoryURL,cookies=cookies, params=getConfigletParams,verify=False) +assert response.ok +outputConfigletHistory = response.json() + +# Print Configlet details + +for entry in outputConfigletHistory['configletHistory']: + print "ConfigletKey: %s"%entry['key'] + print "ConfigletOldConfig: %s"%entry['oldConfig'] + print "ConfigletNewConfig: %s"%entry['newConfig'] + print "\n" + + +# Create an HTTP GET request to the CVP server + +getConfigletDetailURL = "/cvpservice/configlet/getConfigletByName.do?" +getConfigletParams = {'name':'VLANs'} +response = requests.get(url+getConfigletDetailURL,cookies=cookies, params=getConfigletParams,verify=False) +assert response.ok +outputConfigletDetail = response.json() + +# Print Configlet details + +print "ConfigletKey: %s"%outputConfigletDetail['key'] +print "ConfigletName: %s"%outputConfigletDetail['name'] +print "ConfigletConfig: %s"%outputConfigletDetail['config'] +print "ConfigletNote: %s"%outputConfigletDetail['note'] +print "\n" + + +# Create an HTTP POST request to the CVP server + +headers = { 'Content-Type': 'application/json' } +postConfigletChangeURL = "/cvpservice/configlet/updateConfiglet.do" +changeData = json.dumps({"config": "! some configuration here", "key": "configlet_32_438214998013", "name": "VLANs"}) +response = requests.post(url+postConfigletChangeURL, cookies=cookies, data=changeData,headers=headers,verify=False) +assert response.ok +outputConfigletChange = response.json() + +# Print Configlet details + +print "ConfigletChange: %s"%outputConfigletChange['data'] +print "\n" + diff --git a/topologies/training-level4-v2/files/scripts/Configlet1 b/topologies/training-level4-v2/files/scripts/Configlet1 new file mode 100644 index 000000000..3f6bf9190 --- /dev/null +++ b/topologies/training-level4-v2/files/scripts/Configlet1 @@ -0,0 +1,48 @@ +import requests +import json + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + +# Print user details + +print "User Name:%s\n "%output['username'] +print "First Name: %s\n "%output['user']['firstName'] +print "Last Name: %s\n "%output['user']['lastName'] +print "User Permissions: %s\n "%output['permissionList'] +print "Cookie Jar: %s\n "%cookies + +#Create an HTTP GET request to the CVP server + +getConfigletURL = "/cvpservice/configlet/getConfiglets.do?" +getConfigletParams = {'startIndex':'0','endIndex':'0','type':'Configlet'} +response = requests.get(url+getConfigletURL,cookies=cookies, params=getConfigletParams,verify=False) +assert response.ok +outputConfiglets = response.json() + +# Print Configlet details + +for configlet in outputConfiglets['data']: + print "ConfigletName: %s"%configlet['name'] + print "ConfigletKey: %s"%configlet['key'] + print "\n" + diff --git a/topologies/training-level4-v2/files/scripts/ConfigletChange b/topologies/training-level4-v2/files/scripts/ConfigletChange new file mode 100644 index 000000000..691ff5864 --- /dev/null +++ b/topologies/training-level4-v2/files/scripts/ConfigletChange @@ -0,0 +1,40 @@ +import requests +import json + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + + +# Create an HTTP POST request to the CVP server + +headers = { 'Content-Type': 'application/json' } +postConfigletChangeURL = "/cvpservice/configlet/addNoteToConfiglet.do" +changeData = json.dumps({"note": "Configlet Changed by API", "key": "configlet_516_7018635812307"}) +response = requests.post(url+postConfigletChangeURL, cookies=cookies, data=changeData,headers=headers,verify=False) +assert response.ok +outputConfigletChange = response.json() + +# Print Configlet details + +print "ConfigletChange: %s"%outputConfigletChange['data'] +print "\n" + diff --git a/topologies/training-level4-v2/files/scripts/ConfigletDetail b/topologies/training-level4-v2/files/scripts/ConfigletDetail new file mode 100644 index 000000000..eb2a85937 --- /dev/null +++ b/topologies/training-level4-v2/files/scripts/ConfigletDetail @@ -0,0 +1,43 @@ +import requests +import json + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + +# Create an HTTP GET request to the CVP server + +getConfigletDetailURL = "/cvpservice/configlet/getConfigletByName.do?" +getConfigletParams = {'name':'VLANs'} +response = requests.get(url+getConfigletDetailURL,cookies=cookies, params=getConfigletParams,verify=False) +assert response.ok +outputConfigletDetail = response.json() + +# Print Configlet details + +print "ConfigletKey: %s"%outputConfigletDetail['key'] +print "ConfigletName: %s"%outputConfigletDetail['name'] +print "ConfigletConfig: %s"%outputConfigletDetail['config'] +print "ConfigletNote: %s"%outputConfigletDetail['note'] +print "\n" + + + diff --git a/topologies/training-level4-v2/files/scripts/ConfigletHistory b/topologies/training-level4-v2/files/scripts/ConfigletHistory new file mode 100644 index 000000000..71f1ac693 --- /dev/null +++ b/topologies/training-level4-v2/files/scripts/ConfigletHistory @@ -0,0 +1,41 @@ +import requests +import json + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + +# Create an HTTP GET request to the CVP server + +getConfigletHistoryURL = "/cvpservice/configlet/getConfigletHistory.do?" +getConfigletParams = {'configletId':'configlet_344_7351420097365','startIndex':'0','endIndex':'0'} +response = requests.get(url+getConfigletHistoryURL,cookies=cookies, params=getConfigletParams,verify=False) +assert response.ok +outputConfigletHistory = response.json() + +# Print Configlet details + +for entry in outputConfigletHistory['configletHistory']: + print "ConfigletKey: %s"%entry['key'] + print "ConfigletOldConfig: \n%s"%entry['oldConfig'] + print "ConfigletNewConfig: \n%s"%entry['newConfig'] + print "\n" + diff --git a/topologies/training-level4-v2/files/scripts/TaskBase b/topologies/training-level4-v2/files/scripts/TaskBase new file mode 100644 index 000000000..6f8deccaf --- /dev/null +++ b/topologies/training-level4-v2/files/scripts/TaskBase @@ -0,0 +1,59 @@ +import requests +import json + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + + +# Create an HTTP GET request to the CVP server + +getTasksURL = "/cvpservice/task/getTasks.do?" +getTasksParams = {'startIndex':'0','endIndex':'0','queryparam':'Pending'} +response = requests.get(url+getTasksURL,cookies=cookies, params=getTasksParams,verify=False) +assert response.ok +outputPendingTasks = response.json() + + +# Print Tasks Created by Current User +taskList = [ ] +for entry in outputPendingTasks['data']: + if str(entry['createdBy']) == str(CVP_USER): + print "TaskNumber: %s"%entry['workOrderId'] + taskList.append(str(entry['workOrderId'])) +print "TaskList: %s"%taskList + + + +# Create an HTTP POST request to the CVP server + +headers = { 'Content-Type': 'application/json' } +postTaskLogURL = "/cvpservice/workflow/addWorkOrderLog.do" +taskLogData = json.dumps({"taskId": taskList[1],"message": "This is a test Change","source": "CVP REST API"}) +response = requests.post(url+postTaskLogURL, cookies=cookies, data=taskLogData,headers=headers,verify=False) +assert response.ok +outputTaskLog = response.json() + +# Print Configlet details + +print "TaskLogAmmend: %s"%outputTaskLog['data'] +print "\n" + diff --git a/topologies/training-level4-v2/files/scripts/TaskCVP1 b/topologies/training-level4-v2/files/scripts/TaskCVP1 new file mode 100644 index 000000000..1ebd05764 --- /dev/null +++ b/topologies/training-level4-v2/files/scripts/TaskCVP1 @@ -0,0 +1,48 @@ +import requests +import json + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + +# Print user details + +print "User Name:%s\n "%output['username'] +print "First Name: %s\n "%output['user']['firstName'] +print "Last Name: %s\n "%output['user']['lastName'] + + +getTasksURL = "/cvpservice/task/getTasks.do?" +getTasksParams = {'startIndex':'0','endIndex':'0'} +response = requests.get(url+getTasksURL,cookies=cookies, params=getTasksParams,verify=False) +assert response.ok +outputPendingTasks = response.json() + + +# Print Tasks Created by Current User +taskList = [ ] +for entry in outputPendingTasks['data']: + if str(entry['createdBy']) == str(CVP_USER): + print( "TaskNumber: %s Description: %s" %(entry['workOrderId'],entry['description'])) + taskList.append(str(entry['workOrderId'])) +#print "TaskList: %s"%taskList + + diff --git a/topologies/training-level4-v2/files/scripts/TaskExecute b/topologies/training-level4-v2/files/scripts/TaskExecute new file mode 100644 index 000000000..3db487284 --- /dev/null +++ b/topologies/training-level4-v2/files/scripts/TaskExecute @@ -0,0 +1,56 @@ +import requests +import json + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + + +# Create an HTTP GET request to the CVP server + +getTasksURL = "/cvpservice/task/getTasks.do?" +getTasksParams = {'startIndex':'0','endIndex':'0','queryparam':'Pending'} +response = requests.get(url+getTasksURL,cookies=cookies, params=getTasksParams,verify=False) +assert response.ok +outputPendingTasks = response.json() + + +# Print Tasks Created by Current User +taskList = [ ] +for entry in outputPendingTasks['data']: + if str(entry['createdBy']) == str(CVP_USER): + print "TaskNumber: %s"%entry['workOrderId'] + taskList.append(str(entry['workOrderId'])) +print "TaskList: %s"%taskList + + + +headers = { 'Content-Type': 'application/json' } +postTaskExecuteURL = "/cvpservice/task/executeTask.do" +for taskNumber in taskList: + executeData = json.dumps({'data': [taskNumber]}) + response = requests.post(url+postTaskExecuteURL, cookies=cookies,data=executeData,headers=headers,verify=False) + assert response.ok + outputExecuteTask = response.json() + print (outputExecuteTask['data']) + print "Task: "+str(taskNumber)+" Execute: "+str(outputExecuteTask['data']) + print "\n" + diff --git a/topologies/training-level4-v2/files/scripts/TaskLog b/topologies/training-level4-v2/files/scripts/TaskLog new file mode 100644 index 000000000..c835008b8 --- /dev/null +++ b/topologies/training-level4-v2/files/scripts/TaskLog @@ -0,0 +1,59 @@ +import requests +import json + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + + +# Create an HTTP GET request to the CVP server + +getTasksURL = "/cvpservice/task/getTasks.do?" +getTasksParams = {'startIndex':'0','endIndex':'0'} +response = requests.get(url+getTasksURL,cookies=cookies, params=getTasksParams,verify=False) +assert response.ok +outputTasks = response.json() + + +# Print Tasks Created by Current User +taskList = [ ] +for entry in outputTasks['data']: + if str(entry['createdBy']) == str(CVP_USER): + print "TaskNumber: %s"%entry['workOrderId'] + taskList.append(str(entry['workOrderId'])) +print "TaskList: %s"%taskList + + + +# Create an HTTP POST request to the CVP server + +headers = { 'Content-Type': 'application/json' } +postTaskLogURL = "/cvpservice/workflow/addWorkOrderLog.do" +taskLogData = json.dumps({"taskId": taskList[0],"message": "This is a test Change","source": "CVP REST API"}) +response = requests.post(url+postTaskLogURL, cookies=cookies, data=taskLogData,headers=headers,verify=False) +assert response.ok +outputTaskLog = response.json() + +# Print Configlet details + +print "TaskLogAmmend: %s"%outputTaskLog['data'] +print "\n" + diff --git a/topologies/training-level4-v2/files/scripts/TaskLog1 b/topologies/training-level4-v2/files/scripts/TaskLog1 new file mode 100644 index 000000000..c835008b8 --- /dev/null +++ b/topologies/training-level4-v2/files/scripts/TaskLog1 @@ -0,0 +1,59 @@ +import requests +import json + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + + +# Create an HTTP GET request to the CVP server + +getTasksURL = "/cvpservice/task/getTasks.do?" +getTasksParams = {'startIndex':'0','endIndex':'0'} +response = requests.get(url+getTasksURL,cookies=cookies, params=getTasksParams,verify=False) +assert response.ok +outputTasks = response.json() + + +# Print Tasks Created by Current User +taskList = [ ] +for entry in outputTasks['data']: + if str(entry['createdBy']) == str(CVP_USER): + print "TaskNumber: %s"%entry['workOrderId'] + taskList.append(str(entry['workOrderId'])) +print "TaskList: %s"%taskList + + + +# Create an HTTP POST request to the CVP server + +headers = { 'Content-Type': 'application/json' } +postTaskLogURL = "/cvpservice/workflow/addWorkOrderLog.do" +taskLogData = json.dumps({"taskId": taskList[0],"message": "This is a test Change","source": "CVP REST API"}) +response = requests.post(url+postTaskLogURL, cookies=cookies, data=taskLogData,headers=headers,verify=False) +assert response.ok +outputTaskLog = response.json() + +# Print Configlet details + +print "TaskLogAmmend: %s"%outputTaskLog['data'] +print "\n" + diff --git a/topologies/training-level4-v2/files/scripts/TaskLogView b/topologies/training-level4-v2/files/scripts/TaskLogView new file mode 100644 index 000000000..7b34904dd --- /dev/null +++ b/topologies/training-level4-v2/files/scripts/TaskLogView @@ -0,0 +1,51 @@ +import requests +import json +import pprint + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + + +# Create an HTTP GET request to the CVP server + +getTasksURL = "/cvpservice/task/getTasks.do?" +getTasksParams = {'startIndex':'0','endIndex':'0'} +response = requests.get(url+getTasksURL,cookies=cookies, params=getTasksParams,verify=False) +assert response.ok +outputTasks = response.json() + +taskList = [ ] +for entry in outputTasks['data']: + if str(entry['createdBy']) == str(CVP_USER): + taskList.append(str(entry['workOrderId'])) + +getTaskLogURL = "/cvpservice/task/getLogsById.do?" +#getTaskLogParams = {'startIndex':'0','endIndex':'0','id':'0'} +getTaskLogParams = {'startIndex':'0','endIndex':'0','id':taskList[0]} +response = requests.get(url+getTaskLogURL,cookies=cookies, params=getTaskLogParams,verify=False) +assert response.ok +outputTaskLog = response.json() + +# Print TaskLog details +print "TaskLogOutput: %s" %outputTaskLog['data'] +print "\n" + diff --git a/topologies/training-level4-v2/files/scripts/TaskNote b/topologies/training-level4-v2/files/scripts/TaskNote new file mode 100644 index 000000000..6cd1d6cfd --- /dev/null +++ b/topologies/training-level4-v2/files/scripts/TaskNote @@ -0,0 +1,52 @@ +import requests +import json +import pprint + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + + +# Create an HTTP GET request to the CVP server + +getTasksURL = "/cvpservice/task/getTasks.do?" +getTasksParams = {'startIndex':'0','endIndex':'0'} +response = requests.get(url+getTasksURL,cookies=cookies, params=getTasksParams,verify=False) +assert response.ok +outputTasks = response.json() + +taskList = [ ] +for entry in outputTasks['data']: + if str(entry['createdBy']) == str(CVP_USER): + taskList.append(str(entry['workOrderId'])) + +headers = { 'Content-Type': 'application/json' } +postTaskNoteURL = "/cvpservice/task/addNoteToTask.do" +taskNoteData = json.dumps({"workOrderId": taskList[0],"note": "This is a test Change using the API"}) +response = requests.post(url+postTaskNoteURL, cookies=cookies, data=taskNoteData,headers=headers,verify=False) +assert response.ok +outputTaskNote = response.json() + +# Print Task details + +print "TaskNoteAmmend: %s"%outputTaskNote['data'] +print "\n" + diff --git a/topologies/training-level4-v2/hosts b/topologies/training-level4-v2/hosts new file mode 100644 index 000000000..21bb22ee9 --- /dev/null +++ b/topologies/training-level4-v2/hosts @@ -0,0 +1,14 @@ +127.0.0.1 localhost +192.168.0.21 A1 +192.168.0.31 A2 +192.168.0.22 B1 +192.168.0.32 B2 +192.168.0.23 C1 +192.168.0.33 C2 +192.168.0.41 PE1 +192.168.0.42 PE2 +192.168.0.43 P3 +192.168.0.44 P4 +192.168.0.45 P5 +192.168.0.46 P6 +192.168.0.5 cvp \ No newline at end of file diff --git a/topologies/training-level4-v2/labguides/.gitignore b/topologies/training-level4-v2/labguides/.gitignore new file mode 100644 index 000000000..ed86553f4 --- /dev/null +++ b/topologies/training-level4-v2/labguides/.gitignore @@ -0,0 +1,2 @@ +.DS_Store +build/ diff --git a/topologies/training-level4-v2/labguides/Makefile b/topologies/training-level4-v2/labguides/Makefile new file mode 100644 index 000000000..874ed2529 --- /dev/null +++ b/topologies/training-level4-v2/labguides/Makefile @@ -0,0 +1,20 @@ +# Minimal makefile for Sphinx documentation +# + +# You can set these variables from the command line. +SPHINXOPTS = +SPHINXBUILD = python -msphinx +SPHINXPROJ = ATD +SOURCEDIR = source +BUILDDIR = build + +# Put it first so that "make" without argument is like "make help". +help: + @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) + +.PHONY: help Makefile + +# Catch-all target: route all unknown targets to Sphinx using the new +# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). +%: Makefile + @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) \ No newline at end of file diff --git a/topologies/training-level4-v2/labguides/readme.md b/topologies/training-level4-v2/labguides/readme.md new file mode 100644 index 000000000..5a5369ecd --- /dev/null +++ b/topologies/training-level4-v2/labguides/readme.md @@ -0,0 +1,12 @@ +# Lab Guides +In this folder are rST (restructured text) formatted lab guides for the ATD event. + +## Building +To build the documentation, you will need to install Sphinx and sphinx_bootstrap_theme with `pip`: + +`pip install sphinx sphinx_bootstrap_theme` + +## Contributing +At some point, this section may expand, but for now please make sure to review existing files for formatting guidelines. + +Please see https://github.com/ralsina/rst-cheatsheet/blob/master/rst-cheatsheet.rst for a cheat sheet. \ No newline at end of file diff --git a/topologies/training-level4-v2/labguides/source/_static/arista_logo.png b/topologies/training-level4-v2/labguides/source/_static/arista_logo.png new file mode 100644 index 000000000..2376e72b9 Binary files /dev/null and b/topologies/training-level4-v2/labguides/source/_static/arista_logo.png differ diff --git a/topologies/training-level4-v2/labguides/source/_static/arista_logo_160by26.png b/topologies/training-level4-v2/labguides/source/_static/arista_logo_160by26.png new file mode 100644 index 000000000..d0d0cbeec Binary files /dev/null and b/topologies/training-level4-v2/labguides/source/_static/arista_logo_160by26.png differ diff --git a/topologies/training-level4-v2/labguides/source/_static/arista_logo_320by52.png b/topologies/training-level4-v2/labguides/source/_static/arista_logo_320by52.png new file mode 100644 index 000000000..43dfa7ed2 Binary files /dev/null and b/topologies/training-level4-v2/labguides/source/_static/arista_logo_320by52.png differ diff --git a/topologies/training-level4-v2/labguides/source/_static/cloudvision-icon.png b/topologies/training-level4-v2/labguides/source/_static/cloudvision-icon.png new file mode 100644 index 000000000..c309ed98e Binary files /dev/null and b/topologies/training-level4-v2/labguides/source/_static/cloudvision-icon.png differ diff --git a/topologies/training-level4-v2/labguides/source/_static/logo.jpg b/topologies/training-level4-v2/labguides/source/_static/logo.jpg new file mode 100644 index 000000000..6eda41f7e Binary files /dev/null and b/topologies/training-level4-v2/labguides/source/_static/logo.jpg differ diff --git a/topologies/training-level4-v2/labguides/source/_static/my-styles.css b/topologies/training-level4-v2/labguides/source/_static/my-styles.css new file mode 100644 index 000000000..1150528ee --- /dev/null +++ b/topologies/training-level4-v2/labguides/source/_static/my-styles.css @@ -0,0 +1,41 @@ +body { + background-color: #FFFFFF; + color: #002859 +} + +.navbar-inverse { + background-image: -webkit-linear-gradient(#6d94bf, #446e9b 50%, #002859); + background-image: -o-linear-gradient(#6d94bf, #446e9b 50%, #002859); + background-image: -webkit-gradient(linear, left top, left bottom, from(#6d94bf), color-stop(50%, #446e9b), to(#002859)); + background-image: linear-gradient(#6d94bf, #446e9b 50%, #002859); + background-repeat: no-repeat; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff6d94bf', endColorstr='#ff002859', GradientType=0); + -webkit-filter: none; + filter: none; + border: 1px solid #345578; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.3) +} + +.navbar-brand { + background: url("arista_logo_320by52.png") center / contain no-repeat; + display: inline-block; + width: 1px; + padding: 0 10px 0 60px; + margin-right: 30px; + margin-left: -30px; +} + +.navbar-brand>img { + display: inline-block; + padding: 0 100px 0 0px; + margin-right: 20px; +} +a.navbar-brand { + display: inline-block; + padding: 15px 0 0 120px; +} + +footer { + background-color: #002859; + color: #FFFFFF; +} diff --git a/topologies/training-level4-v2/labguides/source/conf.py b/topologies/training-level4-v2/labguides/source/conf.py new file mode 100644 index 000000000..afccec09c --- /dev/null +++ b/topologies/training-level4-v2/labguides/source/conf.py @@ -0,0 +1,247 @@ +# -*- coding: utf-8 -*- +# +# ATD documentation build configuration file, created by +# sphinx-quickstart on Tue Apr 17 10:00:04 2018. +# +# This file is execfile()d with the current directory set to its +# containing dir. +# +# Note that not all possible configuration values are present in this +# autogenerated file. +# +# All configuration values have a default; values that are commented out +# serve to show the default. + +# If extensions (or modules to document with autodoc) are in another directory, +# add these directories to sys.path here. If the directory is relative to the +# documentation root, use os.path.abspath to make it absolute, like shown here. +# +# import os +# import sys +# sys.path.insert(0, os.path.abspath('.')) + +import sphinx_bootstrap_theme + +# Importing datetime module to auto update copyright year +from datetime import date + +# -- General configuration ------------------------------------------------ + +# If your documentation needs a minimal Sphinx version, state it here. +# +# needs_sphinx = '1.0' + +# Add any Sphinx extension module names here, as strings. They can be +# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom +# ones. + +# Add any paths that contain templates here, relative to this directory. +templates_path = ['_templates'] + +# The suffix(es) of source filenames. +# You can specify multiple suffix as a list of string: +# +# source_suffix = ['.rst', '.md'] +source_suffix = '.rst' + +# The master toctree document. +master_doc = 'index' + +# General information about the project. +# Updating copyright var to auto update with current year +project = u'Arista ATD' +copyright = u'{0}, Arista Networks'.format(date.today().year) +author = u'Arista ATD atd-help@arista.com' + +# Show Source +html_show_sourcelink = False + +# The version info for the project you're documenting, acts as replacement for +# |version| and |release|, also used in various other places throughout the +# built documents. +# +# The short X.Y version. +version = u'Version 3.0' +# The full version, including alpha/beta/rc tags. +release = u'1' + +# The language for content autogenerated by Sphinx. Refer to documentation +# for a list of supported languages. +# +# This is also used if you do content translation via gettext catalogs. +# Usually you set "language" from the command line for these cases. +language = None + +# List of patterns, relative to source directory, that match files and +# directories to ignore when looking for source files. +# This patterns also effect to html_static_path and html_extra_path +exclude_patterns = [] + +# The name of the Pygments (syntax highlighting) style to use. +pygments_style = 'sphinx' + +# If true, `todo` and `todoList` produce output, else they produce nothing. +todo_include_todos = False + + +# -- Options for HTML output ---------------------------------------------- + +# The theme to use for HTML and HTML Help pages. See the documentation for +# a list of builtin themes. +# +#html_theme = 'alabaster' +html_theme = 'bootstrap' +html_theme_path = sphinx_bootstrap_theme.get_html_theme_path() + +# Add any paths that contain custom static files (such as style sheets) here, +# relative to this directory. They are copied after the builtin static files, +# so a file named "default.css" will overwrite the builtin "default.css". +html_static_path = ['_static'] + +# Theme options are theme-specific and customize the look and feel of a theme +# further. For a list of options available for each theme, see the +# documentation. +# +html_theme_options = { + # Navigation bar title. (Default: ``project`` value) + 'navbar_title': "ATD", + + # Tab name for entire site. (Default: "Site") + 'navbar_site_name': "Table of Contents", + + # A list of tuples containing pages or urls to link to. + # Valid tuples should be in the following forms: + # (name, page) # a link to a page + # (name, "/aa/bb", 1) # a link to an arbitrary relative url + # (name, "http://example.com", True) # arbitrary absolute url + # Note the "1" or "True" value above as the third argument to indicate + # an arbitrary url. + 'navbar_links': [ + ("Arista", "http://www.arista.com", True), + ], + + # Render the next and previous page links in navbar. (Default: true) + 'navbar_sidebarrel': True, + + # Render the current pages TOC in the navbar. (Default: true) + 'navbar_pagenav': False, + + # Tab name for the current pages TOC. (Default: "Page") + 'navbar_pagenav_name': "Page", + + # Global TOC depth for "site" navbar tab. (Default: 1) + # Switching to -1 shows all levels. + 'globaltoc_depth': 2, + + # Include hidden TOCs in Site navbar? + # + # Note: If this is "false", you cannot have mixed ``:hidden:`` and + # non-hidden ``toctree`` directives in the same page, or else the build + # will break. + # + # Values: "true" (default) or "false" + 'globaltoc_includehidden': "true", + + # HTML navbar class (Default: "navbar") to attach to
    element. + # For black navbar, do "navbar navbar-inverse" + #'navbar_class': "navbar navbar-inverse", + 'navbar_class': "navbar", + + # Fix navigation bar to top of page? + # Values: "true" (default) or "false" + 'navbar_fixed_top': "true", + + # Location of link to source. + # Options are "nav" (default), "footer" or anything else to exclude. + #'source_link_position': "nav", + + # Bootswatch (http://bootswatch.com/) theme. + # + # Options are nothing (default) or the name of a valid theme + # such as "cosmo" or "sandstone". + # + # The set of valid themes depend on the version of Bootstrap + # that's used (the next config option). + # + # Currently, the supported themes are: + # - Bootstrap 2: https://bootswatch.com/2 + # - Bootstrap 3: https://bootswatch.com/3 + 'bootswatch_theme': "spacelab", + + # Choose Bootstrap version. + # Values: "3" (default) or "2" (in quotes) + 'bootstrap_version': "3", +} + +# The name for this set of Sphinx documents. If None, it defaults to +# " v documentation". +#html_title = "AristaATD" + +# A shorter title for the navigation bar. Default is the same as html_title. +#html_short_title = "Demo" + +# (Optional) Logo. Should be small enough to fit the navbar (ideally 24x24). +# Path should be relative to the ``_static`` files directory. +#html_logo = "cloudvision-icon.png" + +# -- Options for HTMLHelp output ------------------------------------------ + +# Output file base name for HTML help builder. +htmlhelp_basename = 'AristaATD' + + +# -- Options for LaTeX output --------------------------------------------- + +latex_elements = { + # The paper size ('letterpaper' or 'a4paper'). + # + # 'papersize': 'letterpaper', + + # The font size ('10pt', '11pt' or '12pt'). + # + # 'pointsize': '10pt', + + # Additional stuff for the LaTeX preamble. + # + # 'preamble': '', + + # Latex figure (float) alignment + # + # 'figure_align': 'htbp', +} + +# Grouping the document tree into LaTeX files. List of tuples +# (source start file, target name, title, +# author, documentclass [howto, manual, or own class]). +latex_documents = [ + (master_doc, 'ATD.tex', u'ATD Lab Guide', + u'ATD Help (atd-help@arista.com)', 'manual'), +] + + +# -- Options for manual page output --------------------------------------- + +# One entry per manual page. List of tuples +# (source start file, name, description, authors, manual section). +man_pages = [ + (master_doc, 'atd', u'ATD Lab Guide', + [author], 1) +] + + +# -- Options for Texinfo output ------------------------------------------- + +# Grouping the document tree into Texinfo files. List of tuples +# (source start file, target name, title, author, +# dir menu entry, description, category) +texinfo_documents = [ + (master_doc, 'ATD', u'ATD Lab Guide', + author, 'ATD', 'Lab Documentation.', + 'Miscellaneous'), +] + + +def setup(app): + app.add_stylesheet("my-styles.css") # also can be a full URL + # app.add_stylesheet("ANOTHER.css") + # app.add_stylesheet("AND_ANOTHER.css") diff --git a/topologies/training-level4-v2/labguides/source/connecting.rst b/topologies/training-level4-v2/labguides/source/connecting.rst new file mode 100644 index 000000000..10ae589ef --- /dev/null +++ b/topologies/training-level4-v2/labguides/source/connecting.rst @@ -0,0 +1,28 @@ +Connecting +========== + +1. Log into the Arista Test Drive portal with your assigned URL. If you + don’t have one, please see your ATD staff. + +.. image:: images/connecting/nested_connecting_1.png + +2. SSH to the public address assigned to the LabAccess jumphost server (this is the Topology Address shown in the "Welcome to Arista's Test Drive!" picture above). The username is ``arista`` and the password is ``{REPLACE_PWD}``: + + .. code-block:: text + + ssh arista@{unique_address}.topo.testdrive.arista.com + +| + +.. image:: images/connecting/nested_connecting_2.png + :align: center + +| + +3. The LabAccess menu allows users to connect to each device and specify + lab topology. It is recommended to open multiple SSH sessions or use + the Screen option (under the SSH Menu) to jump between devices rapidly. + + You can also Access the LabAccess Menu from your browser by clicking on `Console Access` + +.. image:: images/connecting/nested_connecting_3.png diff --git a/topologies/training-level4-v2/labguides/source/images/connecting/nested_connecting_1.png b/topologies/training-level4-v2/labguides/source/images/connecting/nested_connecting_1.png new file mode 100644 index 000000000..aa76597b8 Binary files /dev/null and b/topologies/training-level4-v2/labguides/source/images/connecting/nested_connecting_1.png differ diff --git a/topologies/training-level4-v2/labguides/source/images/connecting/nested_connecting_2.png b/topologies/training-level4-v2/labguides/source/images/connecting/nested_connecting_2.png new file mode 100644 index 000000000..2c6b51a2b Binary files /dev/null and b/topologies/training-level4-v2/labguides/source/images/connecting/nested_connecting_2.png differ diff --git a/topologies/training-level4-v2/labguides/source/images/connecting/nested_connecting_3.png b/topologies/training-level4-v2/labguides/source/images/connecting/nested_connecting_3.png new file mode 100644 index 000000000..1cc7402a3 Binary files /dev/null and b/topologies/training-level4-v2/labguides/source/images/connecting/nested_connecting_3.png differ diff --git a/topologies/training-level4-v2/labguides/source/images/logo.jpg b/topologies/training-level4-v2/labguides/source/images/logo.jpg new file mode 100644 index 000000000..6eda41f7e Binary files /dev/null and b/topologies/training-level4-v2/labguides/source/images/logo.jpg differ diff --git a/topologies/training-level4-v2/labguides/source/index.rst b/topologies/training-level4-v2/labguides/source/index.rst new file mode 100644 index 000000000..bb76aaa2e --- /dev/null +++ b/topologies/training-level4-v2/labguides/source/index.rst @@ -0,0 +1,8 @@ +Welcome to the Arista Training documentation! +======================================== + +.. toctree:: + :maxdepth: 1 + :caption: EOS Configuration + + connecting.rst diff --git a/topologies/training-level4-v2/topo_build.yml b/topologies/training-level4-v2/topo_build.yml new file mode 100644 index 000000000..4d736a364 --- /dev/null +++ b/topologies/training-level4-v2/topo_build.yml @@ -0,0 +1,156 @@ +host_cpu: 4 +cvp_cpu: 24 +cvp_nodes: 1 +veos_cpu: 2 +nodes: + - A1: + ip_addr: 192.168.0.21 + sys_mac: 00:1c:73:c1:c6:01 + neighbors: + - neighborDevice: PE1 + neighborPort: Ethernet1 + port: Ethernet1 + - neighborDevice: B1 + neighborPort: Ethernet2 + port: Ethernet2 + - neighborDevice: C1 + neighborPort: Ethernet2 + port: Ethernet3 + - B1: + ip_addr: 192.168.0.22 + sys_mac: 00:1c:73:c2:c6:01 + neighbors: + - neighborDevice: PE1 + neighborPort: Ethernet2 + port: Ethernet1 + - neighborDevice: A1 + neighborPort: Ethernet2 + port: Ethernet2 + - C1: + ip_addr: 192.168.0.23 + sys_mac: 00:1c:73:c3:c6:01 + neighbors: + - neighborDevice: PE1 + neighborPort: Ethernet3 + port: Ethernet1 + - neighborDevice: A1 + neighborPort: Ethernet3 + port: Ethernet2 + - A2: + ip_addr: 192.168.0.31 + sys_mac: 00:1c:73:d1:c6:01 + neighbors: + - neighborDevice: PE2 + neighborPort: Ethernet1 + port: Ethernet1 + - neighborDevice: B2 + neighborPort: Ethernet2 + port: Ethernet2 + - neighborDevice: C2 + neighborPort: Ethernet2 + port: Ethernet3 + - B2: + ip_addr: 192.168.0.32 + sys_mac: 00:1c:73:d2:c6:01 + neighbors: + - neighborDevice: PE2 + neighborPort: Ethernet2 + port: Ethernet1 + - neighborDevice: A2 + neighborPort: Ethernet2 + port: Ethernet2 + - C2: + ip_addr: 192.168.0.33 + sys_mac: 00:1c:73:d3:c6:01 + neighbors: + - neighborDevice: PE2 + neighborPort: Ethernet3 + port: Ethernet1 + - neighborDevice: A2 + neighborPort: Ethernet3 + port: Ethernet2 + - PE1: + ip_addr: 192.168.0.41 + sys_mac: 00:1c:73:e1:c6:01 + neighbors: + - neighborDevice: A1 + neighborPort: Ethernet1 + port: Ethernet1 + - neighborDevice: B1 + neighborPort: Ethernet1 + port: Ethernet2 + - neighborDevice: C1 + neighborPort: Ethernet1 + port: Ethernet3 + - neighborDevice: P3 + neighborPort: Ethernet1 + port: Ethernet4 + - neighborDevice: P4 + neighborPort: Ethernet1 + port: Ethernet5 + - neighborDevice: P5 + neighborPort: Ethernet1 + port: Ethernet6 + - PE2: + ip_addr: 192.168.0.42 + sys_mac: 00:1c:73:e2:c6:01 + neighbors: + - neighborDevice: A2 + neighborPort: Ethernet1 + port: Ethernet1 + - neighborDevice: B2 + neighborPort: Ethernet1 + port: Ethernet2 + - neighborDevice: C2 + neighborPort: Ethernet1 + port: Ethernet3 + - neighborDevice: P3 + neighborPort: Ethernet2 + port: Ethernet4 + - neighborDevice: P4 + neighborPort: Ethernet2 + port: Ethernet5 + - neighborDevice: P6 + neighborPort: Ethernet2 + port: Ethernet6 + - P3: + ip_addr: 192.168.0.43 + sys_mac: 00:1c:73:e3:c6:01 + neighbors: + - neighborDevice: PE1 + neighborPort: Ethernet4 + port: Ethernet1 + - neighborDevice: PE2 + neighborPort: Ethernet4 + port: Ethernet2 + - P4: + ip_addr: 192.168.0.44 + sys_mac: 00:1c:73:e4:c6:01 + neighbors: + - neighborDevice: PE1 + neighborPort: Ethernet5 + port: Ethernet1 + - neighborDevice: PE2 + neighborPort: Ethernet5 + port: Ethernet2 + - P5: + ip_addr: 192.168.0.45 + sys_mac: 00:1c:73:e5:c6:01 + neighbors: + - neighborDevice: PE1 + neighborPort: Ethernet6 + port: Ethernet1 + - neighborDevice: P6 + neighborPort: Ethernet1 + port: Ethernet2 + - P6: + ip_addr: 192.168.0.46 + sys_mac: 00:1c:73:e6:c6:01 + neighbors: + - neighborDevice: P5 + neighborPort: Ethernet2 + port: Ethernet1 + - neighborDevice: PE2 + neighborPort: Ethernet6 + port: Ethernet2 +additional_ssh_nodes: diff --git a/topologies/training-level4/atd-topo.png b/topologies/training-level4/atd-topo.png index baaee2749..8943ee9fa 100644 Binary files a/topologies/training-level4/atd-topo.png and b/topologies/training-level4/atd-topo.png differ diff --git a/topologies/training-level4/atd-topo.png-OLD b/topologies/training-level4/atd-topo.png-OLD new file mode 100644 index 000000000..baaee2749 Binary files /dev/null and b/topologies/training-level4/atd-topo.png-OLD differ diff --git a/topologies/training-level4/configlets/ATD-INFRA b/topologies/training-level4/configlets/ATD-INFRA index a077c96c7..b5951eb5f 100644 --- a/topologies/training-level4/configlets/ATD-INFRA +++ b/topologies/training-level4/configlets/ATD-INFRA @@ -1,7 +1,7 @@ vrf instance MGMT ! daemon TerminAttr - exec /usr/bin/TerminAttr -ingestgrpcurl=192.168.0.5:9910 -taillogs -ingestauth=key,atd-lab -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent -ingestvrf=MGMT + exec /usr/bin/TerminAttr -cvcompression=gzip -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent -cvaddr=192.168.0.5:9910 -cvauth=token,/tmp/token -cvvrf=MGMT -taillogs -disableaaa no shutdown ! alias mlag-reload bash /mnt/flash/shut_intfs && sudo shutdown now -r diff --git a/topologies/training-level5/configlets/ATD-INFRA b/topologies/training-level5/configlets/ATD-INFRA index 7e6279188..4f5321296 100644 --- a/topologies/training-level5/configlets/ATD-INFRA +++ b/topologies/training-level5/configlets/ATD-INFRA @@ -1,5 +1,5 @@ daemon TerminAttr - exec /usr/bin/TerminAttr -ingestgrpcurl=192.168.0.5:9910 -taillogs -ingestauth=key,atd-lab -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent + exec /usr/bin/TerminAttr -cvcompression=gzip -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent -cvaddr=192.168.0.5:9910 -cvauth=token,/tmp/token -cvvrf=default -taillogs -disableaaa no shutdown ! alias mlag-reload bash /mnt/flash/shut_intfs && sudo shutdown now -r diff --git a/topologies/training-level5/files/ceos/CVX/startup-config b/topologies/training-level5/files/ceos/CVX/startup-config index 158094bbf..0620ac21d 100644 --- a/topologies/training-level5/files/ceos/CVX/startup-config +++ b/topologies/training-level5/files/ceos/CVX/startup-config @@ -1,5 +1,5 @@ daemon TerminAttr - exec /usr/bin/TerminAttr -ingestgrpcurl=192.168.0.5:9910 -taillogs -ingestauth=key,atd-lab -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent + exec /usr/bin/TerminAttr -cvcompression=gzip -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent -cvaddr=192.168.0.5:9910 -cvauth=token,/tmp/token -cvvrf=default -taillogs -disableaaa no shutdown ! alias mlag-reload bash /mnt/flash/shut_intfs && sudo shutdown now -r diff --git a/topologies/training-level5/files/ceos/DCI/startup-config b/topologies/training-level5/files/ceos/DCI/startup-config index 833a28e5d..4af28adf1 100644 --- a/topologies/training-level5/files/ceos/DCI/startup-config +++ b/topologies/training-level5/files/ceos/DCI/startup-config @@ -1,5 +1,5 @@ daemon TerminAttr - exec /usr/bin/TerminAttr -ingestgrpcurl=192.168.0.5:9910 -taillogs -ingestauth=key,atd-lab -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent + exec /usr/bin/TerminAttr -cvcompression=gzip -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent -cvaddr=192.168.0.5:9910 -cvauth=token,/tmp/token -cvvrf=default -taillogs -disableaaa no shutdown ! alias mlag-reload bash /mnt/flash/shut_intfs && sudo shutdown now -r diff --git a/topologies/training-level5/files/ceos/OOB-CORE/startup-config b/topologies/training-level5/files/ceos/OOB-CORE/startup-config index 826303ba0..f2f38201a 100644 --- a/topologies/training-level5/files/ceos/OOB-CORE/startup-config +++ b/topologies/training-level5/files/ceos/OOB-CORE/startup-config @@ -1,5 +1,5 @@ daemon TerminAttr - exec /usr/bin/TerminAttr -ingestgrpcurl=192.168.0.5:9910 -taillogs -ingestauth=key,atd-lab -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent + exec /usr/bin/TerminAttr -cvcompression=gzip -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent -cvaddr=192.168.0.5:9910 -cvauth=token,/tmp/token -cvvrf=default -taillogs -disableaaa no shutdown ! alias mlag-reload bash /mnt/flash/shut_intfs && sudo shutdown now -r diff --git a/topologies/training-level5/files/ceos/OOB-DC1/startup-config b/topologies/training-level5/files/ceos/OOB-DC1/startup-config index 841fba592..9cd427ce2 100644 --- a/topologies/training-level5/files/ceos/OOB-DC1/startup-config +++ b/topologies/training-level5/files/ceos/OOB-DC1/startup-config @@ -1,5 +1,5 @@ daemon TerminAttr - exec /usr/bin/TerminAttr -ingestgrpcurl=192.168.0.5:9910 -taillogs -ingestauth=key,atd-lab -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent + exec /usr/bin/TerminAttr -cvcompression=gzip -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent -cvaddr=192.168.0.5:9910 -cvauth=token,/tmp/token -cvvrf=default -taillogs -disableaaa no shutdown ! alias mlag-reload bash /mnt/flash/shut_intfs && sudo shutdown now -r diff --git a/topologies/training-level5/files/ceos/OOB-DC2/startup-config b/topologies/training-level5/files/ceos/OOB-DC2/startup-config index b3ea02977..82c3b8825 100644 --- a/topologies/training-level5/files/ceos/OOB-DC2/startup-config +++ b/topologies/training-level5/files/ceos/OOB-DC2/startup-config @@ -1,5 +1,5 @@ daemon TerminAttr - exec /usr/bin/TerminAttr -ingestgrpcurl=192.168.0.5:9910 -taillogs -ingestauth=key,atd-lab -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent + exec /usr/bin/TerminAttr -cvcompression=gzip -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent -cvaddr=192.168.0.5:9910 -cvauth=token,/tmp/token -cvvrf=default -taillogs -disableaaa no shutdown ! alias mlag-reload bash /mnt/flash/shut_intfs && sudo shutdown now -r diff --git a/topologies/training-level5/files/ceos/SW1-DC3/startup-config b/topologies/training-level5/files/ceos/SW1-DC3/startup-config index f6384ffba..00fa3ebbf 100644 --- a/topologies/training-level5/files/ceos/SW1-DC3/startup-config +++ b/topologies/training-level5/files/ceos/SW1-DC3/startup-config @@ -1,5 +1,5 @@ daemon TerminAttr - exec /usr/bin/TerminAttr -ingestgrpcurl=192.168.0.5:9910 -taillogs -ingestauth=key,atd-lab -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent + exec /usr/bin/TerminAttr -cvcompression=gzip -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent -cvaddr=192.168.0.5:9910 -cvauth=token,/tmp/token -cvvrf=default -taillogs -disableaaa no shutdown ! alias mlag-reload bash /mnt/flash/shut_intfs && sudo shutdown now -r diff --git a/topologies/training-level5/files/ceos/borderleaf1-DC1/startup-config b/topologies/training-level5/files/ceos/borderleaf1-DC1/startup-config index 71ff29b83..9d5b530ef 100644 --- a/topologies/training-level5/files/ceos/borderleaf1-DC1/startup-config +++ b/topologies/training-level5/files/ceos/borderleaf1-DC1/startup-config @@ -1,5 +1,5 @@ daemon TerminAttr - exec /usr/bin/TerminAttr -ingestgrpcurl=192.168.0.5:9910 -taillogs -ingestauth=key,atd-lab -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent + exec /usr/bin/TerminAttr -cvcompression=gzip -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent -cvaddr=192.168.0.5:9910 -cvauth=token,/tmp/token -cvvrf=default -taillogs -disableaaa no shutdown ! alias mlag-reload bash /mnt/flash/shut_intfs && sudo shutdown now -r diff --git a/topologies/training-level5/files/ceos/borderleaf1-DC2/startup-config b/topologies/training-level5/files/ceos/borderleaf1-DC2/startup-config index 53eec3f0c..050e6fc18 100644 --- a/topologies/training-level5/files/ceos/borderleaf1-DC2/startup-config +++ b/topologies/training-level5/files/ceos/borderleaf1-DC2/startup-config @@ -1,5 +1,5 @@ daemon TerminAttr - exec /usr/bin/TerminAttr -ingestgrpcurl=192.168.0.5:9910 -taillogs -ingestauth=key,atd-lab -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent + exec /usr/bin/TerminAttr -cvcompression=gzip -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent -cvaddr=192.168.0.5:9910 -cvauth=token,/tmp/token -cvvrf=default -taillogs -disableaaa no shutdown ! alias mlag-reload bash /mnt/flash/shut_intfs && sudo shutdown now -r diff --git a/topologies/training-level5/files/ceos/borderleaf2-DC1/startup-config b/topologies/training-level5/files/ceos/borderleaf2-DC1/startup-config index daa75a3c7..4115ec6d1 100644 --- a/topologies/training-level5/files/ceos/borderleaf2-DC1/startup-config +++ b/topologies/training-level5/files/ceos/borderleaf2-DC1/startup-config @@ -1,5 +1,5 @@ daemon TerminAttr - exec /usr/bin/TerminAttr -ingestgrpcurl=192.168.0.5:9910 -taillogs -ingestauth=key,atd-lab -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent + exec /usr/bin/TerminAttr -cvcompression=gzip -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent -cvaddr=192.168.0.5:9910 -cvauth=token,/tmp/token -cvvrf=default -taillogs -disableaaa no shutdown ! alias mlag-reload bash /mnt/flash/shut_intfs && sudo shutdown now -r diff --git a/topologies/training-level5/files/ceos/borderleaf2-DC2/startup-config b/topologies/training-level5/files/ceos/borderleaf2-DC2/startup-config index f40a01826..6697de357 100644 --- a/topologies/training-level5/files/ceos/borderleaf2-DC2/startup-config +++ b/topologies/training-level5/files/ceos/borderleaf2-DC2/startup-config @@ -1,5 +1,5 @@ daemon TerminAttr - exec /usr/bin/TerminAttr -ingestgrpcurl=192.168.0.5:9910 -taillogs -ingestauth=key,atd-lab -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent + exec /usr/bin/TerminAttr -cvcompression=gzip -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent -cvaddr=192.168.0.5:9910 -cvauth=token,/tmp/token -cvvrf=default -taillogs -disableaaa no shutdown ! alias mlag-reload bash /mnt/flash/shut_intfs && sudo shutdown now -r diff --git a/topologies/training-level5/files/ceos/core1-isp1/startup-config b/topologies/training-level5/files/ceos/core1-isp1/startup-config index 05d858dd7..6c10a3f5a 100644 --- a/topologies/training-level5/files/ceos/core1-isp1/startup-config +++ b/topologies/training-level5/files/ceos/core1-isp1/startup-config @@ -1,5 +1,5 @@ daemon TerminAttr - exec /usr/bin/TerminAttr -ingestgrpcurl=192.168.0.5:9910 -taillogs -ingestauth=key,atd-lab -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent + exec /usr/bin/TerminAttr -cvcompression=gzip -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent -cvaddr=192.168.0.5:9910 -cvauth=token,/tmp/token -cvvrf=default -taillogs -disableaaa no shutdown ! alias mlag-reload bash /mnt/flash/shut_intfs && sudo shutdown now -r diff --git a/topologies/training-level5/files/ceos/core1-isp2/startup-config b/topologies/training-level5/files/ceos/core1-isp2/startup-config index 7b501f49e..59bda65d4 100644 --- a/topologies/training-level5/files/ceos/core1-isp2/startup-config +++ b/topologies/training-level5/files/ceos/core1-isp2/startup-config @@ -1,5 +1,5 @@ daemon TerminAttr - exec /usr/bin/TerminAttr -ingestgrpcurl=192.168.0.5:9910 -taillogs -ingestauth=key,atd-lab -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent + exec /usr/bin/TerminAttr -cvcompression=gzip -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent -cvaddr=192.168.0.5:9910 -cvauth=token,/tmp/token -cvvrf=default -taillogs -disableaaa no shutdown ! alias mlag-reload bash /mnt/flash/shut_intfs && sudo shutdown now -r diff --git a/topologies/training-level5/files/ceos/core2-isp1/startup-config b/topologies/training-level5/files/ceos/core2-isp1/startup-config index 3145cd753..684b6034c 100644 --- a/topologies/training-level5/files/ceos/core2-isp1/startup-config +++ b/topologies/training-level5/files/ceos/core2-isp1/startup-config @@ -1,5 +1,5 @@ daemon TerminAttr - exec /usr/bin/TerminAttr -ingestgrpcurl=192.168.0.5:9910 -taillogs -ingestauth=key,atd-lab -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent + exec /usr/bin/TerminAttr -cvcompression=gzip -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent -cvaddr=192.168.0.5:9910 -cvauth=token,/tmp/token -cvvrf=default -taillogs -disableaaa no shutdown ! alias mlag-reload bash /mnt/flash/shut_intfs && sudo shutdown now -r diff --git a/topologies/training-level5/files/ceos/core2-isp2/startup-config b/topologies/training-level5/files/ceos/core2-isp2/startup-config index b6109154e..ab2d8619e 100644 --- a/topologies/training-level5/files/ceos/core2-isp2/startup-config +++ b/topologies/training-level5/files/ceos/core2-isp2/startup-config @@ -1,5 +1,5 @@ daemon TerminAttr - exec /usr/bin/TerminAttr -ingestgrpcurl=192.168.0.5:9910 -taillogs -ingestauth=key,atd-lab -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent + exec /usr/bin/TerminAttr -cvcompression=gzip -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent -cvaddr=192.168.0.5:9910 -cvauth=token,/tmp/token -cvvrf=default -taillogs -disableaaa no shutdown ! alias mlag-reload bash /mnt/flash/shut_intfs && sudo shutdown now -r diff --git a/topologies/training-level5/files/ceos/host1-DC1/startup-config b/topologies/training-level5/files/ceos/host1-DC1/startup-config index b7a817b5a..991157f29 100644 --- a/topologies/training-level5/files/ceos/host1-DC1/startup-config +++ b/topologies/training-level5/files/ceos/host1-DC1/startup-config @@ -1,5 +1,5 @@ daemon TerminAttr - exec /usr/bin/TerminAttr -ingestgrpcurl=192.168.0.5:9910 -taillogs -ingestauth=key,atd-lab -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent + exec /usr/bin/TerminAttr -cvcompression=gzip -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent -cvaddr=192.168.0.5:9910 -cvauth=token,/tmp/token -cvvrf=default -taillogs -disableaaa no shutdown ! alias mlag-reload bash /mnt/flash/shut_intfs && sudo shutdown now -r diff --git a/topologies/training-level5/files/ceos/host1-DC2/startup-config b/topologies/training-level5/files/ceos/host1-DC2/startup-config index 4f552c4c6..cbac28cf4 100644 --- a/topologies/training-level5/files/ceos/host1-DC2/startup-config +++ b/topologies/training-level5/files/ceos/host1-DC2/startup-config @@ -1,5 +1,5 @@ daemon TerminAttr - exec /usr/bin/TerminAttr -ingestgrpcurl=192.168.0.5:9910 -taillogs -ingestauth=key,atd-lab -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent + exec /usr/bin/TerminAttr -cvcompression=gzip -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent -cvaddr=192.168.0.5:9910 -cvauth=token,/tmp/token -cvvrf=default -taillogs -disableaaa no shutdown ! alias mlag-reload bash /mnt/flash/shut_intfs && sudo shutdown now -r diff --git a/topologies/training-level5/files/ceos/host1-DC3/startup-config b/topologies/training-level5/files/ceos/host1-DC3/startup-config index 9f08ea36e..684e51d1d 100644 --- a/topologies/training-level5/files/ceos/host1-DC3/startup-config +++ b/topologies/training-level5/files/ceos/host1-DC3/startup-config @@ -1,5 +1,5 @@ daemon TerminAttr - exec /usr/bin/TerminAttr -ingestgrpcurl=192.168.0.5:9910 -taillogs -ingestauth=key,atd-lab -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent + exec /usr/bin/TerminAttr -cvcompression=gzip -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent -cvaddr=192.168.0.5:9910 -cvauth=token,/tmp/token -cvvrf=default -taillogs -disableaaa no shutdown ! alias mlag-reload bash /mnt/flash/shut_intfs && sudo shutdown now -r diff --git a/topologies/training-level5/files/ceos/host2-DC1/startup-config b/topologies/training-level5/files/ceos/host2-DC1/startup-config index a8a7e1942..8882697ac 100644 --- a/topologies/training-level5/files/ceos/host2-DC1/startup-config +++ b/topologies/training-level5/files/ceos/host2-DC1/startup-config @@ -1,5 +1,5 @@ daemon TerminAttr - exec /usr/bin/TerminAttr -ingestgrpcurl=192.168.0.5:9910 -taillogs -ingestauth=key,atd-lab -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent + exec /usr/bin/TerminAttr -cvcompression=gzip -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent -cvaddr=192.168.0.5:9910 -cvauth=token,/tmp/token -cvvrf=default -taillogs -disableaaa no shutdown ! alias mlag-reload bash /mnt/flash/shut_intfs && sudo shutdown now -r diff --git a/topologies/training-level5/files/ceos/host2-DC2/startup-config b/topologies/training-level5/files/ceos/host2-DC2/startup-config index 2963d5086..f5850b9d9 100644 --- a/topologies/training-level5/files/ceos/host2-DC2/startup-config +++ b/topologies/training-level5/files/ceos/host2-DC2/startup-config @@ -1,5 +1,5 @@ daemon TerminAttr - exec /usr/bin/TerminAttr -ingestgrpcurl=192.168.0.5:9910 -taillogs -ingestauth=key,atd-lab -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent + exec /usr/bin/TerminAttr -cvcompression=gzip -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent -cvaddr=192.168.0.5:9910 -cvauth=token,/tmp/token -cvvrf=default -taillogs -disableaaa no shutdown ! alias mlag-reload bash /mnt/flash/shut_intfs && sudo shutdown now -r diff --git a/topologies/training-level5/files/ceos/internet/startup-config b/topologies/training-level5/files/ceos/internet/startup-config index 136e64875..13a90af6f 100644 --- a/topologies/training-level5/files/ceos/internet/startup-config +++ b/topologies/training-level5/files/ceos/internet/startup-config @@ -1,5 +1,5 @@ daemon TerminAttr - exec /usr/bin/TerminAttr -ingestgrpcurl=192.168.0.5:9910 -taillogs -ingestauth=key,atd-lab -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent + exec /usr/bin/TerminAttr -cvcompression=gzip -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent -cvaddr=192.168.0.5:9910 -cvauth=token,/tmp/token -cvvrf=default -taillogs -disableaaa no shutdown ! alias mlag-reload bash /mnt/flash/shut_intfs && sudo shutdown now -r diff --git a/topologies/training-level5/files/ceos/leaf1-DC1/startup-config b/topologies/training-level5/files/ceos/leaf1-DC1/startup-config index 078ecdce0..dc5f630d0 100644 --- a/topologies/training-level5/files/ceos/leaf1-DC1/startup-config +++ b/topologies/training-level5/files/ceos/leaf1-DC1/startup-config @@ -1,5 +1,5 @@ daemon TerminAttr - exec /usr/bin/TerminAttr -ingestgrpcurl=192.168.0.5:9910 -taillogs -ingestauth=key,atd-lab -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent + exec /usr/bin/TerminAttr -cvcompression=gzip -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent -cvaddr=192.168.0.5:9910 -cvauth=token,/tmp/token -cvvrf=default -taillogs -disableaaa no shutdown ! alias mlag-reload bash /mnt/flash/shut_intfs && sudo shutdown now -r diff --git a/topologies/training-level5/files/ceos/leaf1-DC2/startup-config b/topologies/training-level5/files/ceos/leaf1-DC2/startup-config index a2206743a..37424db22 100644 --- a/topologies/training-level5/files/ceos/leaf1-DC2/startup-config +++ b/topologies/training-level5/files/ceos/leaf1-DC2/startup-config @@ -1,5 +1,5 @@ daemon TerminAttr - exec /usr/bin/TerminAttr -ingestgrpcurl=192.168.0.5:9910 -taillogs -ingestauth=key,atd-lab -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent + exec /usr/bin/TerminAttr -cvcompression=gzip -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent -cvaddr=192.168.0.5:9910 -cvauth=token,/tmp/token -cvvrf=default -taillogs -disableaaa no shutdown ! alias mlag-reload bash /mnt/flash/shut_intfs && sudo shutdown now -r diff --git a/topologies/training-level5/files/ceos/leaf2-DC1/startup-config b/topologies/training-level5/files/ceos/leaf2-DC1/startup-config index 0eb42bd98..c70bf05ae 100644 --- a/topologies/training-level5/files/ceos/leaf2-DC1/startup-config +++ b/topologies/training-level5/files/ceos/leaf2-DC1/startup-config @@ -1,5 +1,5 @@ daemon TerminAttr - exec /usr/bin/TerminAttr -ingestgrpcurl=192.168.0.5:9910 -taillogs -ingestauth=key,atd-lab -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent + exec /usr/bin/TerminAttr -cvcompression=gzip -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent -cvaddr=192.168.0.5:9910 -cvauth=token,/tmp/token -cvvrf=default -taillogs -disableaaa no shutdown ! alias mlag-reload bash /mnt/flash/shut_intfs && sudo shutdown now -r diff --git a/topologies/training-level5/files/ceos/leaf2-DC2/startup-config b/topologies/training-level5/files/ceos/leaf2-DC2/startup-config index 209adc739..de1a695b4 100644 --- a/topologies/training-level5/files/ceos/leaf2-DC2/startup-config +++ b/topologies/training-level5/files/ceos/leaf2-DC2/startup-config @@ -1,5 +1,5 @@ daemon TerminAttr - exec /usr/bin/TerminAttr -ingestgrpcurl=192.168.0.5:9910 -taillogs -ingestauth=key,atd-lab -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent + exec /usr/bin/TerminAttr -cvcompression=gzip -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent -cvaddr=192.168.0.5:9910 -cvauth=token,/tmp/token -cvvrf=default -taillogs -disableaaa no shutdown ! alias mlag-reload bash /mnt/flash/shut_intfs && sudo shutdown now -r diff --git a/topologies/training-level5/files/ceos/leaf3-DC1/startup-config b/topologies/training-level5/files/ceos/leaf3-DC1/startup-config index ca45d200c..3e2100694 100644 --- a/topologies/training-level5/files/ceos/leaf3-DC1/startup-config +++ b/topologies/training-level5/files/ceos/leaf3-DC1/startup-config @@ -1,5 +1,5 @@ daemon TerminAttr - exec /usr/bin/TerminAttr -ingestgrpcurl=192.168.0.5:9910 -taillogs -ingestauth=key,atd-lab -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent + exec /usr/bin/TerminAttr -cvcompression=gzip -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent -cvaddr=192.168.0.5:9910 -cvauth=token,/tmp/token -cvvrf=default -taillogs -disableaaa no shutdown ! alias mlag-reload bash /mnt/flash/shut_intfs && sudo shutdown now -r diff --git a/topologies/training-level5/files/ceos/leaf3-DC2/startup-config b/topologies/training-level5/files/ceos/leaf3-DC2/startup-config index b83df5155..2101e6e28 100644 --- a/topologies/training-level5/files/ceos/leaf3-DC2/startup-config +++ b/topologies/training-level5/files/ceos/leaf3-DC2/startup-config @@ -1,5 +1,5 @@ daemon TerminAttr - exec /usr/bin/TerminAttr -ingestgrpcurl=192.168.0.5:9910 -taillogs -ingestauth=key,atd-lab -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent + exec /usr/bin/TerminAttr -cvcompression=gzip -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent -cvaddr=192.168.0.5:9910 -cvauth=token,/tmp/token -cvvrf=default -taillogs -disableaaa no shutdown ! alias mlag-reload bash /mnt/flash/shut_intfs && sudo shutdown now -r diff --git a/topologies/training-level5/files/ceos/leaf4-DC1/startup-config b/topologies/training-level5/files/ceos/leaf4-DC1/startup-config index 88643395f..13024decf 100644 --- a/topologies/training-level5/files/ceos/leaf4-DC1/startup-config +++ b/topologies/training-level5/files/ceos/leaf4-DC1/startup-config @@ -1,5 +1,5 @@ daemon TerminAttr - exec /usr/bin/TerminAttr -ingestgrpcurl=192.168.0.5:9910 -taillogs -ingestauth=key,atd-lab -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent + exec /usr/bin/TerminAttr -cvcompression=gzip -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent -cvaddr=192.168.0.5:9910 -cvauth=token,/tmp/token -cvvrf=default -taillogs -disableaaa no shutdown ! alias mlag-reload bash /mnt/flash/shut_intfs && sudo shutdown now -r diff --git a/topologies/training-level5/files/ceos/leaf4-DC2/startup-config b/topologies/training-level5/files/ceos/leaf4-DC2/startup-config index 87b8bcbc1..0df71a527 100644 --- a/topologies/training-level5/files/ceos/leaf4-DC2/startup-config +++ b/topologies/training-level5/files/ceos/leaf4-DC2/startup-config @@ -1,5 +1,5 @@ daemon TerminAttr - exec /usr/bin/TerminAttr -ingestgrpcurl=192.168.0.5:9910 -taillogs -ingestauth=key,atd-lab -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent + exec /usr/bin/TerminAttr -cvcompression=gzip -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent -cvaddr=192.168.0.5:9910 -cvauth=token,/tmp/token -cvvrf=default -taillogs -disableaaa no shutdown ! alias mlag-reload bash /mnt/flash/shut_intfs && sudo shutdown now -r diff --git a/topologies/training-level5/files/ceos/spine1-DC1/startup-config b/topologies/training-level5/files/ceos/spine1-DC1/startup-config index 9795731d3..e6d3cdc10 100644 --- a/topologies/training-level5/files/ceos/spine1-DC1/startup-config +++ b/topologies/training-level5/files/ceos/spine1-DC1/startup-config @@ -1,5 +1,5 @@ daemon TerminAttr - exec /usr/bin/TerminAttr -ingestgrpcurl=192.168.0.5:9910 -taillogs -ingestauth=key,atd-lab -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent + exec /usr/bin/TerminAttr -cvcompression=gzip -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent -cvaddr=192.168.0.5:9910 -cvauth=token,/tmp/token -cvvrf=default -taillogs -disableaaa no shutdown ! alias mlag-reload bash /mnt/flash/shut_intfs && sudo shutdown now -r diff --git a/topologies/training-level5/files/ceos/spine1-DC2/startup-config b/topologies/training-level5/files/ceos/spine1-DC2/startup-config index e29e8ef34..faf5b9924 100644 --- a/topologies/training-level5/files/ceos/spine1-DC2/startup-config +++ b/topologies/training-level5/files/ceos/spine1-DC2/startup-config @@ -1,5 +1,5 @@ daemon TerminAttr - exec /usr/bin/TerminAttr -ingestgrpcurl=192.168.0.5:9910 -taillogs -ingestauth=key,atd-lab -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent + exec /usr/bin/TerminAttr -cvcompression=gzip -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent -cvaddr=192.168.0.5:9910 -cvauth=token,/tmp/token -cvvrf=default -taillogs -disableaaa no shutdown ! alias mlag-reload bash /mnt/flash/shut_intfs && sudo shutdown now -r diff --git a/topologies/training-level5/files/ceos/spine2-DC1/startup-config b/topologies/training-level5/files/ceos/spine2-DC1/startup-config index 279a1d258..dda70da1b 100644 --- a/topologies/training-level5/files/ceos/spine2-DC1/startup-config +++ b/topologies/training-level5/files/ceos/spine2-DC1/startup-config @@ -1,5 +1,5 @@ daemon TerminAttr - exec /usr/bin/TerminAttr -ingestgrpcurl=192.168.0.5:9910 -taillogs -ingestauth=key,atd-lab -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent + exec /usr/bin/TerminAttr -cvcompression=gzip -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent -cvaddr=192.168.0.5:9910 -cvauth=token,/tmp/token -cvvrf=default -taillogs -disableaaa no shutdown ! alias mlag-reload bash /mnt/flash/shut_intfs && sudo shutdown now -r diff --git a/topologies/training-level5/files/ceos/spine2-DC2/startup-config b/topologies/training-level5/files/ceos/spine2-DC2/startup-config index 27511d73f..0b209cfe8 100644 --- a/topologies/training-level5/files/ceos/spine2-DC2/startup-config +++ b/topologies/training-level5/files/ceos/spine2-DC2/startup-config @@ -1,5 +1,5 @@ daemon TerminAttr - exec /usr/bin/TerminAttr -ingestgrpcurl=192.168.0.5:9910 -taillogs -ingestauth=key,atd-lab -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent + exec /usr/bin/TerminAttr -cvcompression=gzip -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent -cvaddr=192.168.0.5:9910 -cvauth=token,/tmp/token -cvvrf=default -taillogs -disableaaa no shutdown ! alias mlag-reload bash /mnt/flash/shut_intfs && sudo shutdown now -r diff --git a/topologies/training-level5/files/ceos/spine3-DC1/startup-config b/topologies/training-level5/files/ceos/spine3-DC1/startup-config index faba41d12..130f90e82 100644 --- a/topologies/training-level5/files/ceos/spine3-DC1/startup-config +++ b/topologies/training-level5/files/ceos/spine3-DC1/startup-config @@ -1,5 +1,5 @@ daemon TerminAttr - exec /usr/bin/TerminAttr -ingestgrpcurl=192.168.0.5:9910 -taillogs -ingestauth=key,atd-lab -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent + exec /usr/bin/TerminAttr -cvcompression=gzip -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent -cvaddr=192.168.0.5:9910 -cvauth=token,/tmp/token -cvvrf=default -taillogs -disableaaa no shutdown ! alias mlag-reload bash /mnt/flash/shut_intfs && sudo shutdown now -r diff --git a/topologies/training-level5/files/ceos/spine3-DC2/startup-config b/topologies/training-level5/files/ceos/spine3-DC2/startup-config index a9fe63a05..b768f0a1e 100644 --- a/topologies/training-level5/files/ceos/spine3-DC2/startup-config +++ b/topologies/training-level5/files/ceos/spine3-DC2/startup-config @@ -1,5 +1,5 @@ daemon TerminAttr - exec /usr/bin/TerminAttr -ingestgrpcurl=192.168.0.5:9910 -taillogs -ingestauth=key,atd-lab -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent + exec /usr/bin/TerminAttr -cvcompression=gzip -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent -cvaddr=192.168.0.5:9910 -cvauth=token,/tmp/token -cvvrf=default -taillogs -disableaaa no shutdown ! alias mlag-reload bash /mnt/flash/shut_intfs && sudo shutdown now -r diff --git a/topologies/training-level7-part2-Test2/atd-topo.png b/topologies/training-level7-part2-Test2/atd-topo.png new file mode 100644 index 000000000..db5ba885f Binary files /dev/null and b/topologies/training-level7-part2-Test2/atd-topo.png differ diff --git a/topologies/training-level7-part2-Test2/configlets/ASBR1-BASE b/topologies/training-level7-part2-Test2/configlets/ASBR1-BASE new file mode 100644 index 000000000..13a16d6b9 --- /dev/null +++ b/topologies/training-level7-part2-Test2/configlets/ASBR1-BASE @@ -0,0 +1,10 @@ +service routing protocols model multi-agent +! +hostname ASBR1 +! +interface Management0 + vrf MGMT + ip address 192.168.0.94/24 +! +ip routing +! diff --git a/topologies/training-level7-part2-Test2/configlets/ASBR2-BASE b/topologies/training-level7-part2-Test2/configlets/ASBR2-BASE new file mode 100644 index 000000000..4960545b0 --- /dev/null +++ b/topologies/training-level7-part2-Test2/configlets/ASBR2-BASE @@ -0,0 +1,10 @@ +service routing protocols model multi-agent +! +hostname ASBR2 +! +interface Management0 + vrf MGMT + ip address 192.168.0.97/24 +! +ip routing +! diff --git a/topologies/training-level7-part2-Test2/configlets/ASBR3-BASE b/topologies/training-level7-part2-Test2/configlets/ASBR3-BASE new file mode 100644 index 000000000..19134bdd6 --- /dev/null +++ b/topologies/training-level7-part2-Test2/configlets/ASBR3-BASE @@ -0,0 +1,10 @@ +service routing protocols model multi-agent +! +hostname ASBR3 +! +interface Management0 + vrf MGMT + ip address 192.168.0.90/24 +! +ip routing +! diff --git a/topologies/training-level7-part2-Test2/configlets/ATD-INFRA b/topologies/training-level7-part2-Test2/configlets/ATD-INFRA new file mode 100644 index 000000000..de87bc743 --- /dev/null +++ b/topologies/training-level7-part2-Test2/configlets/ATD-INFRA @@ -0,0 +1,53 @@ +vrf instance MGMT +! +daemon TerminAttr + exec /usr/bin/TerminAttr -cvcompression=gzip -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent -cvaddr=192.168.0.5:9910 -cvauth=token,/tmp/token -cvvrf=MGMT -taillogs -disableaaa + no shutdown +! +alias mlag-reload bash /mnt/flash/shut_intfs && sudo shutdown now -r +alias conint sh interface | i connected +alias senz show interface counter error | nz +alias shmc show int | awk '/^[A-Z]/ { intf = $1 } /, address is/ { print intf, $6 }' +alias snz show interface counter | nz +alias spd show port-channel %1 detail all +alias sqnz show interface counter queue | nz +alias srnz show interface counter rate | nz +alias intdesc + !! Usage: intdesc interface-name description + 10 config + 20 int %1 + 30 desc %2 + 40 exit +! +dns domain arista.lab +! +service routing protocols model multi-agent +! +ntp server vrf MGMT 192.168.0.1 iburst source Management0 +! +radius-server host 192.168.0.1 vrf MGMT key 7 0207165218120E +! +aaa group server radius atds + server 192.168.0.1 vrf MGMT +! +aaa authentication login default group atds local +aaa authorization exec default group atds local +aaa authorization commands all default local +! +username Script secret sha512 $6$PNfpb9anSBQ5/aia$phaa3ar5pwkntenD9WHc6Ed5b96lbW0dc0bjtwPnFLaDiCK8D5Cjl6ewP/xdNbl4PtS6Paq.3SssN8pj05NQm. +username admin privilege 15 role network-admin secret 5 $1$5O85YVVn$HrXcfOivJEnISTMb6xrJc. +username arista privilege 15 role network-admin secret 5 $1$4VjIjfd1$XkUVulbNDESHFzcxDU.Tk1 +! +username arista ssh-key ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC+ERvV4GaPq3FzxY8T+5hMF/1T+l8wiPsVCtOrZU4Hy6NCNlAiDBdA/RUtX5/aOu5JvHyPTVHqWJ0qi9BqU3rxCNl/l2/5UZbm9RPzdZ1QCwoYwPB9/j/tYJV8lZdr6t0yGBfxgzD3oW/zF7a+ZtASaMAu7lkgoqPK2pVIGa+Y9ZCsA0Xq756XpLCw+d3pHKHvIkgWLCo9FoeIv8f/bu5u/ztzRE+Nvl+o5add6MxnjsXz3s7BnW2FX6JNjyp0Z+OXjupQc2gcfFvpd/dA2lCNuuaCHkRgyPwIZtWPmNqMRXPp37mlPwV43qDJRVPQkvh0xPxwS35BbzUxWdT+ZLZv +! +ip radius source-interface Management0 +! +ip routing vrf MGMT +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 +! +management api http-commands + no shutdown + vrf MGMT + no shutdown +! diff --git a/topologies/training-level7-part2-Test2/configlets/CVX-BASE b/topologies/training-level7-part2-Test2/configlets/CVX-BASE new file mode 100644 index 000000000..f85e7ce1d --- /dev/null +++ b/topologies/training-level7-part2-Test2/configlets/CVX-BASE @@ -0,0 +1,8 @@ +hostname cvx +! +interface Management0 + vrf MGMT + ip address 192.168.0.4/24 +! +ip routing +! diff --git a/topologies/training-level7-part2-Test2/configlets/DCI-BASE b/topologies/training-level7-part2-Test2/configlets/DCI-BASE new file mode 100644 index 000000000..435fb7e6e --- /dev/null +++ b/topologies/training-level7-part2-Test2/configlets/DCI-BASE @@ -0,0 +1,10 @@ +service routing protocols model multi-agent +! +hostname DCI +! +interface Management0 + vrf MGMT + ip address 192.168.0.76/24 +! +ip routing +! diff --git a/topologies/training-level7-part2-Test2/configlets/DCI-START b/topologies/training-level7-part2-Test2/configlets/DCI-START new file mode 100644 index 000000000..a152ba1ec --- /dev/null +++ b/topologies/training-level7-part2-Test2/configlets/DCI-START @@ -0,0 +1,24 @@ +interface Ethernet1 + no switchport + ip address 10.201.0.2/30 +interface Ethernet3 + no switchport + ip address 10.201.0.6/30 + +router bgp 65500 + neighbor 10.201.0.1 remote-as 65210 + neighbor 10.201.0.5 remote-as 65220 + +! Multicast routing +ip multicast-routing +router multicast + ipv4 + routing + software-forwarding sfe + +router pim sparse-mode + ipv4 + rp address 192.168.255.111 + +interface Ethernet1,3 + pim ipv4 sparse-mode \ No newline at end of file diff --git a/topologies/training-level7-part2-Test2/configlets/OOB-CORE-BASE b/topologies/training-level7-part2-Test2/configlets/OOB-CORE-BASE new file mode 100644 index 000000000..d20149498 --- /dev/null +++ b/topologies/training-level7-part2-Test2/configlets/OOB-CORE-BASE @@ -0,0 +1,10 @@ +service routing protocols model multi-agent +! +hostname OOB-CORE +! +interface Management0 + vrf MGMT + ip address 192.168.0.61/24 +! +ip routing +! diff --git a/topologies/training-level7-part2-Test2/configlets/OOB-DC1-BASE b/topologies/training-level7-part2-Test2/configlets/OOB-DC1-BASE new file mode 100644 index 000000000..2a8ece18a --- /dev/null +++ b/topologies/training-level7-part2-Test2/configlets/OOB-DC1-BASE @@ -0,0 +1,10 @@ +service routing protocols model multi-agent +! +hostname OOB-DC1 +! +interface Management0 + vrf MGMT + ip address 192.168.0.62/24 +! +ip routing +! diff --git a/topologies/training-level7-part2-Test2/configlets/OOB-DC2-BASE b/topologies/training-level7-part2-Test2/configlets/OOB-DC2-BASE new file mode 100644 index 000000000..b3fcab3d1 --- /dev/null +++ b/topologies/training-level7-part2-Test2/configlets/OOB-DC2-BASE @@ -0,0 +1,10 @@ +service routing protocols model multi-agent +! +hostname OOB-DC2 +! +interface Management0 + vrf MGMT + ip address 192.168.0.63/24 +! +ip routing +! diff --git a/topologies/training-level7-part2-Test2/configlets/P1-BASE b/topologies/training-level7-part2-Test2/configlets/P1-BASE new file mode 100644 index 000000000..549d8d233 --- /dev/null +++ b/topologies/training-level7-part2-Test2/configlets/P1-BASE @@ -0,0 +1,10 @@ +service routing protocols model multi-agent +! +hostname P1 +! +interface Management0 + vrf MGMT + ip address 192.168.0.93/24 +! +ip routing +! diff --git a/topologies/training-level7-part2-Test2/configlets/P2-BASE b/topologies/training-level7-part2-Test2/configlets/P2-BASE new file mode 100644 index 000000000..a1ae9b8a6 --- /dev/null +++ b/topologies/training-level7-part2-Test2/configlets/P2-BASE @@ -0,0 +1,10 @@ +service routing protocols model multi-agent +! +hostname P2 +! +interface Management0 + vrf MGMT + ip address 192.168.0.98/24 +! +ip routing +! diff --git a/topologies/training-level7-part2-Test2/configlets/PE11-BASE b/topologies/training-level7-part2-Test2/configlets/PE11-BASE new file mode 100644 index 000000000..8c2deffe0 --- /dev/null +++ b/topologies/training-level7-part2-Test2/configlets/PE11-BASE @@ -0,0 +1,10 @@ +service routing protocols model multi-agent +! +hostname PE11 +! +interface Management0 + vrf MGMT + ip address 192.168.0.91/24 +! +ip routing +! diff --git a/topologies/training-level7-part2-Test2/configlets/PE12-BASE b/topologies/training-level7-part2-Test2/configlets/PE12-BASE new file mode 100644 index 000000000..14c029b7c --- /dev/null +++ b/topologies/training-level7-part2-Test2/configlets/PE12-BASE @@ -0,0 +1,10 @@ +service routing protocols model multi-agent +! +hostname PE12 +! +interface Management0 + vrf MGMT + ip address 192.168.0.92/24 +! +ip routing +! diff --git a/topologies/training-level7-part2-Test2/configlets/PE21-BASE b/topologies/training-level7-part2-Test2/configlets/PE21-BASE new file mode 100644 index 000000000..5c7ec5ec1 --- /dev/null +++ b/topologies/training-level7-part2-Test2/configlets/PE21-BASE @@ -0,0 +1,10 @@ +service routing protocols model multi-agent +! +hostname PE21 +! +interface Management0 + vrf MGMT + ip address 192.168.0.95/24 +! +ip routing +! diff --git a/topologies/training-level7-part2-Test2/configlets/PE22-BASE b/topologies/training-level7-part2-Test2/configlets/PE22-BASE new file mode 100644 index 000000000..a388da424 --- /dev/null +++ b/topologies/training-level7-part2-Test2/configlets/PE22-BASE @@ -0,0 +1,10 @@ +service routing protocols model multi-agent +! +hostname PE21 +! +interface Management0 + vrf MGMT + ip address 192.168.0.96/24 +! +ip routing +! diff --git a/topologies/training-level7-part2-Test2/configlets/PE31-BASE b/topologies/training-level7-part2-Test2/configlets/PE31-BASE new file mode 100644 index 000000000..5f01b0280 --- /dev/null +++ b/topologies/training-level7-part2-Test2/configlets/PE31-BASE @@ -0,0 +1,10 @@ +service routing protocols model multi-agent +! +hostname PE31 +! +interface Management0 + vrf MGMT + ip address 192.168.0.99/24 +! +ip routing +! diff --git a/topologies/training-level7-part2-Test2/configlets/RR1-BASE b/topologies/training-level7-part2-Test2/configlets/RR1-BASE new file mode 100644 index 000000000..b9c64d1dc --- /dev/null +++ b/topologies/training-level7-part2-Test2/configlets/RR1-BASE @@ -0,0 +1,10 @@ +service routing protocols model multi-agent +! +hostname RR1 +! +interface Management0 + vrf MGMT + ip address 192.168.0.41/24 +! +ip routing +! diff --git a/topologies/training-level7-part2-Test2/configlets/RR2-BASE b/topologies/training-level7-part2-Test2/configlets/RR2-BASE new file mode 100644 index 000000000..3e632537b --- /dev/null +++ b/topologies/training-level7-part2-Test2/configlets/RR2-BASE @@ -0,0 +1,10 @@ +service routing protocols model multi-agent +! +hostname RR2 +! +interface Management0 + vrf MGMT + ip address 192.168.0.42/24 +! +ip routing +! diff --git a/topologies/training-level7-part2-Test2/configlets/RR3-BASE b/topologies/training-level7-part2-Test2/configlets/RR3-BASE new file mode 100644 index 000000000..a982a3cf4 --- /dev/null +++ b/topologies/training-level7-part2-Test2/configlets/RR3-BASE @@ -0,0 +1,10 @@ +service routing protocols model multi-agent +! +hostname RR3 +! +interface Management0 + vrf MGMT + ip address 192.168.0.43/24 +! +ip routing +! diff --git a/topologies/training-level7-part2-Test2/configlets/Spine1-DC2-START b/topologies/training-level7-part2-Test2/configlets/Spine1-DC2-START new file mode 100644 index 000000000..8119e1065 --- /dev/null +++ b/topologies/training-level7-part2-Test2/configlets/Spine1-DC2-START @@ -0,0 +1,101 @@ + +interface Ethernet1 + no switchport + ip address 10.21.0.25/30 + pim ipv4 sparse-mode +! +interface Ethernet2 + no switchport + ip address 10.20.0.2/30 + pim ipv4 sparse-mode +! +interface Ethernet3 + no switchport + ip address 10.20.0.14/30 + pim ipv4 sparse-mode +! +interface Ethernet4 + no switchport + ip address 10.20.0.26/30 + pim ipv4 sparse-mode +! +interface Ethernet5 + no switchport + ip address 10.20.0.38/30 + pim ipv4 sparse-mode +! +interface Ethernet6 + no switchport + ip address 10.21.0.2/30 + pim ipv4 sparse-mode +! +interface Ethernet7 + no switchport + ip address 10.21.0.14/30 + pim ipv4 sparse-mode +! +interface Ethernet15 +! +interface Loopback0 + ip address 192.168.255.14/32 +!! +router bgp 65220 + router-id 192.168.255.14 + bgp listen range 192.168.255.0/24 peer-group EVPN remote-as 65220 + bgp listen range 10.20.0.0/24 peer-group LEAFS remote-as 65220 + bgp listen range 10.21.0.0/24 peer-group LEAFS remote-as 65220 + neighbor DC3-EVPN peer group + neighbor DC3-EVPN remote-as 65230 + neighbor DC3-EVPN update-source Loopback0 + neighbor DC3-EVPN ebgp-multihop 15 + neighbor DC3-EVPN send-community extended + neighbor DC3-EVPN maximum-routes 12000 + neighbor EVPN peer group + neighbor EVPN remote-as 65220 + neighbor EVPN next-hop-unchanged + neighbor EVPN update-source Loopback0 + neighbor EVPN route-reflector-client + neighbor EVPN send-community extended + neighbor EVPN maximum-routes 12000 + neighbor LEAFS peer group + neighbor LEAFS remote-as 65220 + neighbor LEAFS next-hop-self + neighbor LEAFS route-reflector-client + neighbor LEAFS maximum-routes 12000 + neighbor 192.168.255.77 peer group DC3-EVPN + neighbor 192.168.255.78 peer group DC3-EVPN + neighbor DCI-EVPN peer group + neighbor DCI-EVPN remote-as 65110 + neighbor DCI-EVPN update-source Loopback0 + neighbor DCI-EVPN ebgp-multihop 5 + neighbor DCI-EVPN send-community extended + neighbor DCI-EVPN next-hop-unchanged + neighbor 192.168.255.11 peer group DCI-EVPN + neighbor 192.168.255.12 peer group DCI-EVPN + neighbor 192.168.255.13 peer group DCI-EVPN + ! + address-family evpn + neighbor DC3-EVPN activate + neighbor EVPN activate + no neighbor LEAFS activate + neighbor DCI-EVPN activate + + ! + address-family ipv4 + no neighbor DC3-EVPN activate + no neighbor DCI-EVPN activate + no neighbor EVPN activate + neighbor LEAFS activate + network 192.168.255.14/32 +! +! Multicast routing +ip multicast-routing +router multicast + ipv4 + routing + software-forwarding sfe + +router pim sparse-mode + ipv4 + rp address 192.168.255.111 + \ No newline at end of file diff --git a/topologies/training-level7-part2-Test2/configlets/borderleaf1-DC1-BASE b/topologies/training-level7-part2-Test2/configlets/borderleaf1-DC1-BASE new file mode 100644 index 000000000..d25f6add8 --- /dev/null +++ b/topologies/training-level7-part2-Test2/configlets/borderleaf1-DC1-BASE @@ -0,0 +1,10 @@ +hostname borderleaf1-DC1 +! +interface Management0 + vrf MGMT + ip address 192.168.0.25/24 +! +service routing protocols model multi-agent +! +ip routing +! diff --git a/topologies/training-level7-part2-Test2/configlets/borderleaf1-DC2-BASE b/topologies/training-level7-part2-Test2/configlets/borderleaf1-DC2-BASE new file mode 100644 index 000000000..d3ca37d56 --- /dev/null +++ b/topologies/training-level7-part2-Test2/configlets/borderleaf1-DC2-BASE @@ -0,0 +1,10 @@ +hostname borderleaf1-DC2 +! +interface Management0 + vrf MGMT + ip address 192.168.0.35/24 +! +service routing protocols model multi-agent +! +ip routing +! diff --git a/topologies/training-level7-part2-Test2/configlets/borderleaf1-DC2-START b/topologies/training-level7-part2-Test2/configlets/borderleaf1-DC2-START new file mode 100644 index 000000000..77a2d9a31 --- /dev/null +++ b/topologies/training-level7-part2-Test2/configlets/borderleaf1-DC2-START @@ -0,0 +1,69 @@ + + +router bgp 65220 + + interface Ethernet1 +! +interface Ethernet2 +! +interface Ethernet3 + no switchport + ip address 10.21.0.1/30 + pim ipv4 sparse-mode +! +interface Ethernet4 + no switchport + ip address 10.21.0.5/30 + pim ipv4 sparse-mod +! +interface Ethernet5 + no switchport + ip address 10.21.0.9/30 + pim ipv4 sparse-mode +! +interface Ethernet10 + no switchport +! +interface Ethernet10.100 + encapsulation dot1q vlan 100 + ip address 10.102.0.1/30 +! +interface Ethernet10.200 + encapsulation dot1q vlan 200 + ip address 10.102.0.5/30 +! +interface Ethernet10.300 + encapsulation dot1q vlan 300 + ip address 10.102.0.9/30 +! +interface Ethernet11 +! +interface Ethernet12 + no switchport + ip address 10.201.0.5/30 + pim ipv4 sparse-mode +! +interface Ethernet15 +! +router bgp 65220 + neighbor 10.201.0.6 remote-as 65500 + neighbor LEAFS peer group + neighbor LEAFS remote-as 65220 + neighbor LEAFS next-hop-self + neighbor LEAFS maximum-routes 12000 + neighbor 10.21.0.2 peer group LEAFS + neighbor 10.21.0.6 peer group LEAFS + neighbor 10.21.0.10 peer group LEAFS + neighbor 10.102.0.2 remote-as 2 + neighbor 10.102.0.2 maximum-routes 12000 +! +! Multicast routing +ip multicast-routing +router multicast + ipv4 + routing + software-forwarding sfe + +router pim sparse-mode + ipv4 + rp address 192.168.255.111 diff --git a/topologies/training-level7-part2-Test2/configlets/borderleaf2-DC1-BASE b/topologies/training-level7-part2-Test2/configlets/borderleaf2-DC1-BASE new file mode 100644 index 000000000..c342c4cc8 --- /dev/null +++ b/topologies/training-level7-part2-Test2/configlets/borderleaf2-DC1-BASE @@ -0,0 +1,10 @@ +hostname borderleaf2-DC1 +! +interface Management0 + vrf MGMT + ip address 192.168.0.26/24 +! +service routing protocols model multi-agent +! +ip routing +! diff --git a/topologies/training-level7-part2-Test2/configlets/borderleaf2-DC2-BASE b/topologies/training-level7-part2-Test2/configlets/borderleaf2-DC2-BASE new file mode 100644 index 000000000..617be043a --- /dev/null +++ b/topologies/training-level7-part2-Test2/configlets/borderleaf2-DC2-BASE @@ -0,0 +1,10 @@ +hostname borderleaf2-DC2 +! +interface Management0 + vrf MGMT + ip address 192.168.0.36/24 +! +service routing protocols model multi-agent +! +ip routing +! diff --git a/topologies/training-level7-part2-Test2/configlets/borderleaf2-DC2-START b/topologies/training-level7-part2-Test2/configlets/borderleaf2-DC2-START new file mode 100644 index 000000000..2bc666623 --- /dev/null +++ b/topologies/training-level7-part2-Test2/configlets/borderleaf2-DC2-START @@ -0,0 +1,52 @@ +interface Ethernet1 +! +interface Ethernet2 +! +interface Ethernet3 + no switchport + ip address 10.21.0.13/30 +! +interface Ethernet4 + no switchport + ip address 10.21.0.17/30 +! +interface Ethernet5 + no switchport + ip address 10.21.0.21/30 +! +interface Ethernet10 + no switchport +! +interface Ethernet10.100 + encapsulation dot1q vlan 100 + ip address 10.102.0.13/30 +! +interface Ethernet10.200 + encapsulation dot1q vlan 200 + ip address 10.102.0.17/30 +! +interface Ethernet10.300 + encapsulation dot1q vlan 300 + ip address 10.102.0.21/30 +! +interface Ethernet11 +! +interface Ethernet12 +! +interface Ethernet15 +! +router bgp 65220 + neighbor LEAFS peer group + neighbor LEAFS next-hop-self + neighbor LEAFS maximum-routes 12000 + neighbor 10.21.0.14 peer group LEAFS + neighbor 10.21.0.18 peer group LEAFS + neighbor 10.21.0.22 peer group LEAFS + neighbor 10.102.0.14 remote-as 2 + neighbor 10.102.0.14 maximum-routes 12000 +! +management api http-commands + no shutdown + ! + vrf MGMT + no shutdown \ No newline at end of file diff --git a/topologies/training-level7-part2-Test2/configlets/host1-DC1-BASE b/topologies/training-level7-part2-Test2/configlets/host1-DC1-BASE new file mode 100644 index 000000000..41724a2aa --- /dev/null +++ b/topologies/training-level7-part2-Test2/configlets/host1-DC1-BASE @@ -0,0 +1,11 @@ +service routing protocols model multi-agent +! +hostname host1-DC1 +! +spanning-tree mode none +! +interface Management0 + vrf MGMT + ip address 192.168.0.51/24 +! +ip routing \ No newline at end of file diff --git a/topologies/training-level7-part2-Test2/configlets/host1-DC1-START b/topologies/training-level7-part2-Test2/configlets/host1-DC1-START new file mode 100644 index 000000000..d1ccda801 --- /dev/null +++ b/topologies/training-level7-part2-Test2/configlets/host1-DC1-START @@ -0,0 +1,151 @@ +vrf instance OOB +ip routing vrf OOB +interface Ethernet15 + vrf OOB + no shutdown + no switchport + ip address 192.168.1.51/24 +ip route vrf OOB 0.0.0.0/0 192.168.1.254 + + +int ethernet 1 - 4 + no shutdown + no ip address + switchport + channel-group 10 mode active +int loopback 0 + ip address 192.168.255.51/32 + +interface port-Channel 10 + no shut + switchport mode trunk + +vlan 10 +name VLAN10 + +vlan 11 +name VLAN11 + +vlan 12 +name VLAN12 + +vlan 13 +name VLAN13 + +vlan 14 +name VLAN14 + +vlan 15 +name VLAN15 + +vlan 16 +name VLAN16 + +vlan 17 +name VLAN17 + +vlan 18 +name VLAN18 + +vlan 19 +name VLAN19 + + +vrf instance VLAN10 +vrf instance VLAN11 +vrf instance VLAN12 +vrf instance VLAN13 +vrf instance VLAN14 +vrf instance VLAN15 +vrf instance VLAN16 +vrf instance VLAN17 +vrf instance VLAN18 +vrf instance VLAN19 + + +ip routing vrf VLAN10 +ip routing vrf VLAN11 +ip routing vrf VLAN12 +ip routing vrf VLAN13 +ip routing vrf VLAN14 +ip routing vrf VLAN15 +ip routing vrf VLAN16 +ip routing vrf VLAN17 +ip routing vrf VLAN18 +ip routing vrf VLAN19 + +interface VLAN10 +vrf VLAN10 +ip address 172.16.10.51/24 +no shutdown + +interface VLAN11 +vrf VLAN11 +ip address 172.16.11.51/24 +no shutdown + +interface VLAN12 +vrf VLAN12 +ip address 172.16.12.51/24 +no shutdown + +interface VLAN13 +vrf VLAN13 +ip address 172.16.13.51/24 +no shutdown + +interface VLAN14 +vrf VLAN14 +ip address 172.16.14.51/24 +no shutdown + +interface VLAN15 +vrf VLAN15 +ip address 172.16.15.51/24 +no shutdown + +interface VLAN16 +vrf VLAN16 +ip address 172.16.16.51/24 +no shutdown + +interface VLAN17 +vrf VLAN17 +ip address 172.16.17.51/24 +no shutdown + +interface VLAN18 +vrf VLAN18 +ip address 172.16.18.51/24 +no shutdown + +interface VLAN19 +vrf VLAN19 +ip address 172.16.19.51/24 +no shutdown + +ip route vrf VLAN10 0.0.0.0/0 172.16.10.254 +ip route vrf VLAN12 0.0.0.0/0 172.16.12.254 +ip route vrf VLAN13 0.0.0.0/0 172.16.13.254 +ip route vrf VLAN14 0.0.0.0/0 172.16.14.254 +ip route vrf VLAN15 0.0.0.0/0 172.16.15.254 +ip route vrf VLAN16 0.0.0.0/0 172.16.16.254 +ip route vrf VLAN17 0.0.0.0/0 172.16.17.254 +ip route vrf VLAN18 0.0.0.0/0 172.16.18.254 +ip route vrf VLAN19 0.0.0.0/0 172.16.19.254 + +router bgp 65151 + vrf VLAN11 + neighbor 172.16.11.21 remote-as 65012 + neighbor 172.16.11.21 maximum-routes 12000 + neighbor 172.16.11.22 remote-as 65012 + neighbor 172.16.11.22 maximum-routes 12000 + redistribute connected + ! + address-family ipv4 + neighbor 172.16.11.21 activate + neighbor 172.16.11.22 activate + +interface lo1 + vrf VLAN11 + ip address 172.16.220.51/24 \ No newline at end of file diff --git a/topologies/training-level7-part2-Test2/configlets/host1-DC2-BASE b/topologies/training-level7-part2-Test2/configlets/host1-DC2-BASE new file mode 100644 index 000000000..24987f3cc --- /dev/null +++ b/topologies/training-level7-part2-Test2/configlets/host1-DC2-BASE @@ -0,0 +1,11 @@ +service routing protocols model multi-agent +! +hostname host1-DC2 +! +spanning-tree mode none +! +interface Management0 + vrf MGMT + ip address 192.168.0.53/24 +! +ip routing diff --git a/topologies/training-level7-part2-Test2/configlets/host1-DC2-START b/topologies/training-level7-part2-Test2/configlets/host1-DC2-START new file mode 100644 index 000000000..801b3f5ae --- /dev/null +++ b/topologies/training-level7-part2-Test2/configlets/host1-DC2-START @@ -0,0 +1,135 @@ +vrf instance OOB +ip routing vrf OOB +interface Ethernet15 + vrf OOB + no shutdown + no switchport + ip address 192.168.2.53/24 +ip route vrf OOB 0.0.0.0/0 192.168.2.254 + +int ethernet 1 - 4 + no shutdown + no ip address + switchport + channel-group 10 mode active +int loopback 0 + ip address 192.168.255.53/32 + +interface port-Channel 10 + no shut + switchport mode trunk + +vlan 20 +name VLAN20 + +vlan 21 +name VLAN21 + +vlan 22 +name VLAN22 + +vlan 23 +name VLAN23 + +vlan 24 +name VLAN24 + +vlan 15 +name VLAN15 + +vlan 16 +name VLAN16 + +vlan 17 +name VLAN17 + +vlan 18 +name VLAN18 + +vlan 19 +name VLAN19 + + +vrf instance VLAN20 +vrf instance VLAN21 +vrf instance VLAN22 +vrf instance VLAN23 +vrf instance VLAN24 +vrf instance VLAN15 +vrf instance VLAN16 +vrf instance VLAN17 +vrf instance VLAN18 +vrf instance VLAN19 + + +ip routing vrf VLAN20 +ip routing vrf VLAN21 +ip routing vrf VLAN22 +ip routing vrf VLAN23 +ip routing vrf VLAN24 +ip routing vrf VLAN15 +ip routing vrf VLAN16 +ip routing vrf VLAN17 +ip routing vrf VLAN18 +ip routing vrf VLAN19 + +interface VLAN20 +vrf VLAN20 +ip address 172.16.20.53/24 +no shutdown + +interface VLAN21 +vrf VLAN21 +ip address 172.16.21.53/24 +no shutdown + +interface VLAN22 +vrf VLAN22 +ip address 172.16.22.53/24 +no shutdown + +interface VLAN23 +vrf VLAN23 +ip address 172.16.23.53/24 +no shutdown + +interface VLAN24 +vrf VLAN24 +ip address 172.16.24.53/24 +no shutdown + +interface VLAN15 +vrf VLAN15 +ip address 172.16.15.53/24 +no shutdown + +interface VLAN16 +vrf VLAN16 +ip address 172.16.16.53/24 +no shutdown + +interface VLAN17 +vrf VLAN17 +ip address 172.16.17.53/24 +no shutdown + +interface VLAN18 +vrf VLAN18 +ip address 172.16.18.53/24 +no shutdown + +interface VLAN19 +vrf VLAN19 +ip address 172.16.19.53/24 +no shutdown + +ip route vrf VLAN20 0.0.0.0/0 172.16.20.254 +ip route vrf VLAN21 0.0.0.0/0 172.16.21.254 +ip route vrf VLAN22 0.0.0.0/0 172.16.22.254 +ip route vrf VLAN23 0.0.0.0/0 172.16.23.254 +ip route vrf VLAN24 0.0.0.0/0 172.16.24.254 +ip route vrf VLAN15 0.0.0.0/0 172.16.15.254 +ip route vrf VLAN16 0.0.0.0/0 172.16.16.254 +ip route vrf VLAN17 0.0.0.0/0 172.16.17.254 +ip route vrf VLAN18 0.0.0.0/0 172.16.18.254 +ip route vrf VLAN19 0.0.0.0/0 172.16.19.254 \ No newline at end of file diff --git a/topologies/training-level7-part2-Test2/configlets/host1-DC3-BASE b/topologies/training-level7-part2-Test2/configlets/host1-DC3-BASE new file mode 100644 index 000000000..8efae5d91 --- /dev/null +++ b/topologies/training-level7-part2-Test2/configlets/host1-DC3-BASE @@ -0,0 +1,12 @@ +hostname host1-DC3 +! +spanning-tree mode none +! +interface Management0 + vrf MGMT + ip address 192.168.0.82/24 +! +service routing protocols model multi-agent +! +ip routing +! \ No newline at end of file diff --git a/topologies/training-level7-part2-Test2/configlets/host1-DC3-START b/topologies/training-level7-part2-Test2/configlets/host1-DC3-START new file mode 100644 index 000000000..74857c167 --- /dev/null +++ b/topologies/training-level7-part2-Test2/configlets/host1-DC3-START @@ -0,0 +1,137 @@ +int ethernet 1 + mtu 9098 + no shutdown + no ip address + switchport + switchport mode trunk + switchport trunk allowed vlan 130-134 + +int ethernet 2 + mtu 9098 + no shutdown + no ip address + switchport + switchport mode trunk + switchport trunk allowed vlan 15-19 + + +int loopback 0 + ip address 192.168.255.82/32 + + +vlan 130 +name VLAN130 + +vlan 131 +name VLAN131 + +vlan 132 +name VLAN132 + +vlan 133 +name VLAN133 + +vlan 134 +name VLAN134 + +vlan 15 +name VLAN15 + +vlan 16 +name VLAN16 + +vlan 17 +name VLAN17 + +vlan 18 +name VLAN18 + +vlan 19 +name VLAN19 + + +vrf instance VLAN130 +vrf instance VLAN131 +vrf instance VLAN132 +vrf instance VLAN133 +vrf instance VLAN134 +vrf instance VLAN15 +vrf instance VLAN16 +vrf instance VLAN17 +vrf instance VLAN18 +vrf instance VLAN19 + + +ip routing vrf VLAN130 +ip routing vrf VLAN131 +ip routing vrf VLAN132 +ip routing vrf VLAN133 +ip routing vrf VLAN134 +ip routing vrf VLAN15 +ip routing vrf VLAN16 +ip routing vrf VLAN17 +ip routing vrf VLAN18 +ip routing vrf VLAN19 + +interface VLAN130 +mtu 9098 +vrf VLAN130 +ip address 172.16.130.82/24 +no shutdown + +interface VLAN131 +mtu 9098 +vrf VLAN131 +ip address 172.16.131.82/24 +no shutdown + +interface VLAN132 +mtu 9098 +vrf VLAN132 +ip address 172.16.132.82/24 +no shutdown + +interface VLAN133 +mtu 9098 +vrf VLAN133 +ip address 172.16.133.82/24 +no shutdown + +interface VLAN134 +mtu 9098 +vrf VLAN134 +ip address 172.16.134.82/24 +no shutdown + +interface VLAN15 +mtu 9098 +vrf VLAN15 +ip address 172.16.15.82/24 +no shutdown + +interface VLAN16 +mtu 9098 +vrf VLAN16 +ip address 172.16.16.82/24 +no shutdown + +interface VLAN17 +mtu 9098 +vrf VLAN17 +ip address 172.16.17.82/24 +no shutdown + +interface VLAN18 +mtu 9098 +vrf VLAN18 +ip address 172.16.18.82/24 +no shutdown + +interface VLAN19 +mtu 9098 +vrf VLAN19 +ip address 172.16.19.82/24 +no shutdown + +ip route vrf VLAN130 0.0.0.0/0 172.16.130.254 +ip route vrf VLAN15 0.0.0.0/0 172.16.15.254 \ No newline at end of file diff --git a/topologies/training-level7-part2-Test2/configlets/host2-DC1-BASE b/topologies/training-level7-part2-Test2/configlets/host2-DC1-BASE new file mode 100644 index 000000000..651c3ae6e --- /dev/null +++ b/topologies/training-level7-part2-Test2/configlets/host2-DC1-BASE @@ -0,0 +1,12 @@ +service routing protocols model multi-agent +! +hostname host2-DC1 +! +spanning-tree mode none +! +interface Management0 + vrf MGMT + ip address 192.168.0.52/24 +! +ip routing + diff --git a/topologies/training-level7-part2-Test2/configlets/host2-DC1-START b/topologies/training-level7-part2-Test2/configlets/host2-DC1-START new file mode 100644 index 000000000..eb5a499be --- /dev/null +++ b/topologies/training-level7-part2-Test2/configlets/host2-DC1-START @@ -0,0 +1,141 @@ +vrf instance OOB +ip routing vrf OOB +interface Ethernet15 + vrf OOB + no shutdown + no switchport + ip address 192.168.1.52/24 +ip route vrf OOB 0.0.0.0/0 192.168.1.254 + +int ethernet 1 - 4 + no shutdown + no ip address + switchport + channel-group 10 mode active +int loopback 0 + ip address 192.168.255.51/32 + +interface port-Channel 10 + no shut + switchport mode trunk + +vlan 110 +name VLAN110 + +vlan 111 +name VLAN111 + +vlan 112 +name VLAN112 + +vlan 113 +name VLAN113 + +vlan 114 +name VLAN114 + +vlan 15 +name VLAN15 + +vlan 16 +name VLAN16 + +vlan 17 +name VLAN17 + +vlan 18 +name VLAN18 + +vlan 19 +name VLAN19 + + +vrf instance VLAN110 +vrf instance VLAN111 +vrf instance VLAN112 +vrf instance VLAN113 +vrf instance VLAN114 +vrf instance VLAN15 +vrf instance VLAN16 +vrf instance VLAN17 +vrf instance VLAN18 +vrf instance VLAN19 + + +interface VLAN110 +vrf VLAN110 +ip address 172.16.110.52/24 +no shutdown + +interface VLAN111 +vrf VLAN111 +ip address 172.16.111.52/24 +no shutdown + +interface VLAN112 +vrf VLAN112 +ip address 172.16.112.52/24 +no shutdown + +interface VLAN113 +vrf VLAN113 +ip address 172.16.113.52/24 +no shutdown + +interface VLAN114 +vrf VLAN114 +ip address 172.16.114.52/24 +no shutdown + +interface VLAN15 +vrf VLAN15 +ip address 172.16.15.52/24 +no shutdown + +interface VLAN16 +vrf VLAN16 +ip address 172.16.16.52/24 +no shutdown + +interface VLAN17 +vrf VLAN17 +ip address 172.16.17.52/24 +no shutdown + +interface VLAN18 +vrf VLAN18 +ip address 172.16.18.52/24 +no shutdown + +interface VLAN19 +vrf VLAN19 +ip address 172.16.19.52/24 +no shutdown + +ip routing vrf VLAN110 +ip routing vrf VLAN111 +ip routing vrf VLAN112 +ip routing vrf VLAN113 +ip routing vrf VLAN114 +ip routing vrf VLAN15 +ip routing vrf VLAN16 +ip routing vrf VLAN17 +ip routing vrf VLAN18 +ip routing vrf VLAN19 + + + +ip route vrf VLAN110 0.0.0.0/0 172.16.110.254 +ip route vrf VLAN111 0.0.0.0/0 172.16.111.254 +ip route vrf VLAN112 0.0.0.0/0 172.16.112.254 +ip route vrf VLAN113 0.0.0.0/0 172.16.113.254 +ip route vrf VLAN114 0.0.0.0/0 172.16.114.254 +ip route vrf VLAN15 0.0.0.0/0 172.16.15.254 +ip route vrf VLAN16 0.0.0.0/0 172.16.16.254 +ip route vrf VLAN17 0.0.0.0/0 172.16.17.254 +ip route vrf VLAN18 0.0.0.0/0 172.16.18.254 +ip route vrf VLAN19 0.0.0.0/0 172.16.19.254 + +interface lo1 + vrf VLAN111 + ip address 172.16.221.52/24 \ No newline at end of file diff --git a/topologies/training-level7-part2-Test2/configlets/host2-DC2-BASE b/topologies/training-level7-part2-Test2/configlets/host2-DC2-BASE new file mode 100644 index 000000000..17a25b9e0 --- /dev/null +++ b/topologies/training-level7-part2-Test2/configlets/host2-DC2-BASE @@ -0,0 +1,12 @@ +service routing protocols model multi-agent +! +hostname host2-DC2 +! +spanning-tree mode none +! +interface Management0 + vrf MGMT + ip address 192.168.0.54/24 +! +ip routing + diff --git a/topologies/training-level7-part2-Test2/configlets/host2-DC2-START b/topologies/training-level7-part2-Test2/configlets/host2-DC2-START new file mode 100644 index 000000000..52e77513e --- /dev/null +++ b/topologies/training-level7-part2-Test2/configlets/host2-DC2-START @@ -0,0 +1,136 @@ +vrf instance OOB +ip routing vrf OOB +interface Ethernet15 + vrf OOB + no shutdown + no switchport + ip address 192.168.2.54/24 +ip route vrf OOB 0.0.0.0/0 192.168.2.254 + + +int ethernet 1 - 4 + no shutdown + no ip address + switchport + channel-group 10 mode active +int loopback 0 + ip address 192.168.255.54/32 + +interface port-Channel 10 + no shut + switchport mode trunk + +vlan 120 +name VLAN120 + +vlan 121 +name VLAN121 + +vlan 122 +name VLAN122 + +vlan 123 +name VLAN123 + +vlan 124 +name VLAN124 + +vlan 15 +name VLAN15 + +vlan 16 +name VLAN16 + +vlan 17 +name VLAN17 + +vlan 18 +name VLAN18 + +vlan 19 +name VLAN19 + + +vrf instance VLAN120 +vrf instance VLAN121 +vrf instance VLAN122 +vrf instance VLAN123 +vrf instance VLAN124 +vrf instance VLAN15 +vrf instance VLAN16 +vrf instance VLAN17 +vrf instance VLAN18 +vrf instance VLAN19 + + +ip routing vrf VLAN120 +ip routing vrf VLAN121 +ip routing vrf VLAN122 +ip routing vrf VLAN123 +ip routing vrf VLAN124 +ip routing vrf VLAN15 +ip routing vrf VLAN16 +ip routing vrf VLAN17 +ip routing vrf VLAN18 +ip routing vrf VLAN19 + +interface VLAN120 +vrf VLAN120 +ip address 172.16.120.54/24 +no shutdown + +interface VLAN121 +vrf VLAN121 +ip address 172.16.121.54/24 +no shutdown + +interface VLAN122 +vrf VLAN122 +ip address 172.16.122.54/24 +no shutdown + +interface VLAN123 +vrf VLAN123 +ip address 172.16.123.54/24 +no shutdown + +interface VLAN124 +vrf VLAN124 +ip address 172.16.124.54/24 +no shutdown + +interface VLAN15 +vrf VLAN15 +ip address 172.16.15.54/24 +no shutdown + +interface VLAN16 +vrf VLAN16 +ip address 172.16.16.54/24 +no shutdown + +interface VLAN17 +vrf VLAN17 +ip address 172.16.17.54/24 +no shutdown + +interface VLAN18 +vrf VLAN18 +ip address 172.16.18.54/24 +no shutdown + +interface VLAN19 +vrf VLAN19 +ip address 172.16.19.54/24 +no shutdown + +ip route vrf VLAN120 0.0.0.0/0 172.16.120.254 +ip route vrf VLAN121 0.0.0.0/0 172.16.121.254 +ip route vrf VLAN122 0.0.0.0/0 172.16.122.254 +ip route vrf VLAN123 0.0.0.0/0 172.16.123.254 +ip route vrf VLAN124 0.0.0.0/0 172.16.124.254 +ip route vrf VLAN15 0.0.0.0/0 172.16.15.254 +ip route vrf VLAN16 0.0.0.0/0 172.16.16.254 +ip route vrf VLAN17 0.0.0.0/0 172.16.17.254 +ip route vrf VLAN18 0.0.0.0/0 172.16.18.254 +ip route vrf VLAN19 0.0.0.0/0 172.16.19.254 \ No newline at end of file diff --git a/topologies/training-level7-part2-Test2/configlets/host2-DC3-BASE b/topologies/training-level7-part2-Test2/configlets/host2-DC3-BASE new file mode 100644 index 000000000..4276624f5 --- /dev/null +++ b/topologies/training-level7-part2-Test2/configlets/host2-DC3-BASE @@ -0,0 +1,12 @@ +hostname host2-DC3 +! +spanning-tree mode none +! +interface Management0 + vrf MGMT + ip address 192.168.0.83/24 +! +service routing protocols model multi-agent +! +ip routing +! \ No newline at end of file diff --git a/topologies/training-level7-part2-Test2/configlets/host2-DC3-START b/topologies/training-level7-part2-Test2/configlets/host2-DC3-START new file mode 100644 index 000000000..40087642e --- /dev/null +++ b/topologies/training-level7-part2-Test2/configlets/host2-DC3-START @@ -0,0 +1,137 @@ +int ethernet 1 + mtu 9098 + no shutdown + no ip address + switchport + switchport mode access + switchport access vlan 130 + +int ethernet 2 + mtu 9098 + no shutdown + no ip address + switchport + switchport mode access + switchport access vlan 130 + + +int loopback 0 + ip address 192.168.255.83/32 + + +vlan 130 +name VLAN130 + +vlan 131 +name VLAN131 + +vlan 132 +name VLAN132 + +vlan 133 +name VLAN133 + +vlan 134 +name VLAN134 + +vlan 15 +name VLAN15 + +vlan 16 +name VLAN16 + +vlan 17 +name VLAN17 + +vlan 18 +name VLAN18 + +vlan 19 +name VLAN19 + + +vrf instance VLAN130 +vrf instance VLAN131 +vrf instance VLAN132 +vrf instance VLAN133 +vrf instance VLAN134 +vrf instance VLAN15 +vrf instance VLAN16 +vrf instance VLAN17 +vrf instance VLAN18 +vrf instance VLAN19 + + +ip routing vrf VLAN130 +ip routing vrf VLAN131 +ip routing vrf VLAN132 +ip routing vrf VLAN133 +ip routing vrf VLAN134 +ip routing vrf VLAN15 +ip routing vrf VLAN16 +ip routing vrf VLAN17 +ip routing vrf VLAN18 +ip routing vrf VLAN19 + +interface VLAN130 +mtu 9098 +vrf VLAN130 +ip address 172.16.130.83/24 +no shutdown + +interface VLAN131 +mtu 9098 +vrf VLAN131 +ip address 172.16.131.83/24 +no shutdown + +interface VLAN132 +mtu 9098 +vrf VLAN132 +ip address 172.16.132.83/24 +no shutdown + +interface VLAN133 +mtu 9098 +vrf VLAN133 +ip address 172.16.133.83/24 +no shutdown + +interface VLAN134 +mtu 9098 +vrf VLAN134 +ip address 172.16.134.83/24 +no shutdown + +interface VLAN15 +mtu 9098 +vrf VLAN15 +ip address 172.16.15.83/24 +no shutdown + +interface VLAN16 +mtu 9098 +vrf VLAN16 +ip address 172.16.16.83/24 +no shutdown + +interface VLAN17 +mtu 9098 +vrf VLAN17 +ip address 172.16.17.83/24 +no shutdown + +interface VLAN18 +mtu 9098 +vrf VLAN18 +ip address 172.16.18.83/24 +no shutdown + +interface VLAN19 +mtu 9098 +vrf VLAN19 +ip address 172.16.19.83/24 +no shutdown + +ip route vrf VLAN130 0.0.0.0/0 172.16.130.254 +ip route vrf VLAN15 0.0.0.0/0 172.16.15.254 \ No newline at end of file diff --git a/topologies/training-level7-part2-Test2/configlets/leaf1-DC1-BASE b/topologies/training-level7-part2-Test2/configlets/leaf1-DC1-BASE new file mode 100644 index 000000000..45f9433c8 --- /dev/null +++ b/topologies/training-level7-part2-Test2/configlets/leaf1-DC1-BASE @@ -0,0 +1,10 @@ +hostname leaf1-DC1 +! +interface Management0 + vrf MGMT + ip address 192.168.0.21/24 +! +service routing protocols model multi-agent +! +ip routing +! diff --git a/topologies/training-level7-part2-Test2/configlets/leaf1-DC2-BASE b/topologies/training-level7-part2-Test2/configlets/leaf1-DC2-BASE new file mode 100644 index 000000000..0cf772a02 --- /dev/null +++ b/topologies/training-level7-part2-Test2/configlets/leaf1-DC2-BASE @@ -0,0 +1,10 @@ +hostname leaf1-DC2 +! +interface Management0 + vrf MGMT + ip address 192.168.0.31/24 +! +service routing protocols model multi-agent +! +ip routing +! diff --git a/topologies/training-level7-part2-Test2/configlets/leaf1-DC2-START b/topologies/training-level7-part2-Test2/configlets/leaf1-DC2-START new file mode 100644 index 000000000..0b7630d9b --- /dev/null +++ b/topologies/training-level7-part2-Test2/configlets/leaf1-DC2-START @@ -0,0 +1,185 @@ +vlan 15 + name VLAN15 +! +vlan 16 + name VLAN16 +! +vlan 17 + name VLAN17 +! +vlan 18 + name VLAN18 +! +vlan 19 + name VLAN19 +! +vlan 20 + name VLAN20 +! +vlan 21 + name VLAN21 +! +vlan 22 + name VLAN22 +! +vlan 23 + name VLAN23 +! +vlan 24 + name VLAN24 +! +vlan 4094 + trunk group mlag-peer +! +interface Port-Channel1 + switchport mode trunk + switchport trunk group mlag-peer +! +interface Port-Channel10 + switchport trunk allowed vlan 14-24 + switchport mode trunk + ! + evpn ethernet-segment + identifier 0000:0000:0000:0000:3132 + route-target import 00:00:00:00:31:32 + lacp system-id 0000.0000.3132 + mlag 10 +! +interface Ethernet1 + channel-group 1 mode active +! +interface Ethernet2 + channel-group 1 mode active +! +interface Ethernet3 + no switchport + ip address 10.20.0.1/30 + pim ipv4 sparse-mode +! +interface Ethernet4 + no switchport + ip address 10.20.0.5/30 + pim ipv4 sparse-mode +! +interface Ethernet5 + no switchport + ip address 10.20.0.9/30 + pim ipv4 sparse-mode +! +interface Ethernet6 + channel-group 10 mode active +! +interface Ethernet7 + channel-group 10 mode active +! +interface Ethernet15 +! +interface Loopback0 + ip address 192.168.255.31/32 +! +interface Loopback1 + ip address 192.168.255.212/32 +! +interface Vlan15 + ip address 172.16.15.31/24 + ip virtual-router address 172.16.15.254 +! +interface Vlan16 + ip address 172.16.16.31/24 + ip virtual-router address 172.16.16.254 +! +interface Vlan17 + ip address 172.16.17.31/24 + ip virtual-router address 172.16.17.254 +! +interface Vlan18 + ip address 172.16.18.31/24 + ip virtual-router address 172.16.18.254 +! +interface Vlan19 + ip address 172.16.19.31/24 + ip virtual-router address 172.16.19.254 +! +interface Vlan20 + ip address 172.16.20.31/24 + ip virtual-router address 172.16.20.254 +! +interface Vlan21 + ip address 172.16.21.31/24 + ip virtual-router address 172.16.21.254 +! +interface Vlan22 + ip address 172.16.22.31/24 + ip virtual-router address 172.16.22.254 +! +interface Vlan23 + ip address 172.16.23.31/24 + ip virtual-router address 172.16.23.254 +! +interface Vlan24 + ip address 172.16.24.31/24 + ip virtual-router address 172.16.24.254 +! +interface Vlan4094 + ip address 10.20.0.49/30 +! +interface Vxlan1 + vxlan source-interface Loopback1 + vxlan udp-port 4789 + vxlan vlan 15 vni 10015 + vxlan learn-restrict any +! +ip virtual-router mac-address de:ad:fa:ce:be:ef +! +mlag configuration + domain-id mlag1 + local-interface Vlan4094 + peer-address 10.20.0.50 + peer-address heartbeat 192.168.0.32 vrf OOB + peer-link Port-Channel1 + dual-primary detection delay 10 action errdisable all-interfaces +! +router bgp 65220 + router-id 192.168.255.31 + neighbor EVPN peer group + neighbor EVPN remote-as 65220 + neighbor EVPN update-source Loopback0 + neighbor EVPN route-reflector-client + neighbor EVPN send-community extended + neighbor EVPN maximum-routes 12000 + neighbor LEAFS peer group + neighbor LEAFS remote-as 65220 + neighbor LEAFS next-hop-self + neighbor LEAFS maximum-routes 12000 + neighbor 10.20.0.2 peer group LEAFS + neighbor 10.20.0.6 peer group LEAFS + neighbor 10.20.0.10 peer group LEAFS + neighbor 192.168.255.14 peer group EVPN + neighbor 192.168.255.15 peer group EVPN + neighbor 192.168.255.16 peer group EVPN + ! + vlan 15 + rd 192.168.31.32:15 + route-target both 15:15 + redistribute learned + ! + address-family evpn + neighbor EVPN activate + no neighbor LEAFS activate + ! + address-family ipv4 + no neighbor EVPN activate + neighbor LEAFS activate + network 192.168.255.31/32 + network 192.168.255.212/32 +! +! Multicast routing +ip multicast-routing +router multicast + ipv4 + routing + software-forwarding sfe + +router pim sparse-mode + ipv4 + rp address 192.168.255.111 diff --git a/topologies/training-level7-part2-Test2/configlets/leaf1-DC3-BASE b/topologies/training-level7-part2-Test2/configlets/leaf1-DC3-BASE new file mode 100644 index 000000000..24970ecc5 --- /dev/null +++ b/topologies/training-level7-part2-Test2/configlets/leaf1-DC3-BASE @@ -0,0 +1,10 @@ +hostname leaf1-DC3 +! +interface Management0 + vrf MGMT + ip address 192.168.0.80/24 +! +service routing protocols model multi-agent +! +ip routing +! \ No newline at end of file diff --git a/topologies/training-level7-part2-Test2/configlets/leaf2-DC1-BASE b/topologies/training-level7-part2-Test2/configlets/leaf2-DC1-BASE new file mode 100644 index 000000000..4937708dd --- /dev/null +++ b/topologies/training-level7-part2-Test2/configlets/leaf2-DC1-BASE @@ -0,0 +1,10 @@ +hostname leaf2-DC1 +! +interface Management0 + vrf MGMT + ip address 192.168.0.22/24 +! +service routing protocols model multi-agent +! +ip routing +! diff --git a/topologies/training-level7-part2-Test2/configlets/leaf2-DC2-BASE b/topologies/training-level7-part2-Test2/configlets/leaf2-DC2-BASE new file mode 100644 index 000000000..faa5f3f3a --- /dev/null +++ b/topologies/training-level7-part2-Test2/configlets/leaf2-DC2-BASE @@ -0,0 +1,10 @@ +hostname leaf2-DC2 +! +interface Management0 + vrf MGMT + ip address 192.168.0.32/24 +! +service routing protocols model multi-agent +! +ip routing +! diff --git a/topologies/training-level7-part2-Test2/configlets/leaf2-DC2-START b/topologies/training-level7-part2-Test2/configlets/leaf2-DC2-START new file mode 100644 index 000000000..551140fca --- /dev/null +++ b/topologies/training-level7-part2-Test2/configlets/leaf2-DC2-START @@ -0,0 +1,185 @@ +vlan 15 + name VLAN15 +! +vlan 16 + name VLAN16 +! +vlan 17 + name VLAN17 +! +vlan 18 + name VLAN18 +! +vlan 19 + name VLAN19 +! +vlan 20 + name VLAN20 +! +vlan 21 + name VLAN21 +! +vlan 22 + name VLAN22 +! +vlan 23 + name VLAN23 +! +vlan 24 + name VLAN24 +! +vlan 4094 + trunk group mlag-peer +! +interface Port-Channel1 + switchport mode trunk + switchport trunk group mlag-peer +! +interface Port-Channel10 + switchport trunk allowed vlan 14-24 + switchport mode trunk + ! + evpn ethernet-segment + identifier 0000:0000:0000:0000:3132 + route-target import 00:00:00:00:31:32 + lacp system-id 0000.0000.3132 + mlag 10 +! +interface Ethernet1 + channel-group 1 mode active +! +interface Ethernet2 + channel-group 1 mode active +! +interface Ethernet3 + no switchport + ip address 10.20.0.13/30 + pim ipv4 sparse-mode +! +interface Ethernet4 + no switchport + ip address 10.20.0.17/30 + pim ipv4 sparse-mode +! +interface Ethernet5 + no switchport + ip address 10.20.0.21/30 + pim ipv4 sparse-mode +! +interface Ethernet6 + channel-group 10 mode active +! +interface Ethernet7 + channel-group 10 mode active +! +interface Ethernet15 +! +interface Loopback0 + ip address 192.168.255.32/32 +! +interface Loopback1 + ip address 192.168.255.212/32 +! +interface Vlan15 + ip address 172.16.15.32/24 + ip virtual-router address 172.16.15.254 +! +interface Vlan16 + ip address 172.16.16.32/24 + ip virtual-router address 172.16.16.254 +! +interface Vlan17 + ip address 172.16.17.32/24 + ip virtual-router address 172.16.17.254 +! +interface Vlan18 + ip address 172.16.18.32/24 + ip virtual-router address 172.16.18.254 +! +interface Vlan19 + ip address 172.16.19.32/24 + ip virtual-router address 172.16.19.254 +! +interface Vlan20 + ip address 172.16.20.32/24 + ip virtual-router address 172.16.20.254 +! +interface Vlan21 + ip address 172.16.21.32/24 + ip virtual-router address 172.16.21.254 +! +interface Vlan22 + ip address 172.16.22.32/24 + ip virtual-router address 172.16.22.254 +! +interface Vlan23 + ip address 172.16.23.32/24 + ip virtual-router address 172.16.23.254 +! +interface Vlan24 + ip address 172.16.24.32/24 + ip virtual-router address 172.16.24.254 +! +interface Vlan4094 + ip address 10.20.0.50/30 +! +interface Vxlan1 + vxlan source-interface Loopback1 + vxlan udp-port 4789 + vxlan vlan 15 vni 10015 + vxlan learn-restrict any +! +ip virtual-router mac-address de:ad:fa:ce:be:ef +! +mlag configuration + domain-id mlag1 + local-interface Vlan4094 + peer-address 10.20.0.49 + peer-address heartbeat 192.168.0.31 vrf OOB + peer-link Port-Channel1 + dual-primary detection delay 10 action errdisable all-interfaces +! +router bgp 65220 + router-id 192.168.255.32 + neighbor EVPN peer group + neighbor EVPN remote-as 65220 + neighbor EVPN update-source Loopback0 + neighbor EVPN route-reflector-client + neighbor EVPN send-community extended + neighbor EVPN maximum-routes 12000 + neighbor LEAFS peer group + neighbor LEAFS remote-as 65220 + neighbor LEAFS next-hop-self + neighbor LEAFS maximum-routes 12000 + neighbor 10.20.0.14 peer group LEAFS + neighbor 10.20.0.18 peer group LEAFS + neighbor 10.20.0.22 peer group LEAFS + neighbor 192.168.255.14 peer group EVPN + neighbor 192.168.255.15 peer group EVPN + neighbor 192.168.255.16 peer group EVPN + ! + vlan 15 + rd 192.168.31.32:15 + route-target both 15:15 + redistribute learned + ! + address-family evpn + neighbor EVPN activate + no neighbor LEAFS activate + ! + address-family ipv4 + no neighbor EVPN activate + neighbor LEAFS activate + network 192.168.255.32/32 + network 192.168.255.212/32 +! +! Multicast routing +ip multicast-routing +router multicast + ipv4 + routing + software-forwarding sfe + +router pim sparse-mode + ipv4 + rp address 192.168.255.111 diff --git a/topologies/training-level7-part2-Test2/configlets/leaf2-DC3-BASE b/topologies/training-level7-part2-Test2/configlets/leaf2-DC3-BASE new file mode 100644 index 000000000..88941c209 --- /dev/null +++ b/topologies/training-level7-part2-Test2/configlets/leaf2-DC3-BASE @@ -0,0 +1,10 @@ +hostname leaf2-DC3 +! +interface Management0 + vrf MGMT + ip address 192.168.0.81/24 +! +service routing protocols model multi-agent +! +ip routing +! \ No newline at end of file diff --git a/topologies/training-level7-part2-Test2/configlets/leaf3-DC1-BASE b/topologies/training-level7-part2-Test2/configlets/leaf3-DC1-BASE new file mode 100644 index 000000000..b71e2e86d --- /dev/null +++ b/topologies/training-level7-part2-Test2/configlets/leaf3-DC1-BASE @@ -0,0 +1,10 @@ +hostname leaf3-DC1 +! +interface Management0 + vrf MGMT + ip address 192.168.0.23/24 +! +service routing protocols model multi-agent +! +ip routing +! diff --git a/topologies/training-level7-part2-Test2/configlets/leaf3-DC2-BASE b/topologies/training-level7-part2-Test2/configlets/leaf3-DC2-BASE new file mode 100644 index 000000000..262a9cabe --- /dev/null +++ b/topologies/training-level7-part2-Test2/configlets/leaf3-DC2-BASE @@ -0,0 +1,10 @@ +hostname leaf3-DC2 +! +interface Management0 + vrf MGMT + ip address 192.168.0.33/24 +! +service routing protocols model multi-agent +! +ip routing +! diff --git a/topologies/training-level7-part2-Test2/configlets/leaf3-DC2-START b/topologies/training-level7-part2-Test2/configlets/leaf3-DC2-START new file mode 100644 index 000000000..75ed911e3 --- /dev/null +++ b/topologies/training-level7-part2-Test2/configlets/leaf3-DC2-START @@ -0,0 +1,184 @@ +vlan 15 + name VLAN15 +! +vlan 16 + name VLAN16 +! +vlan 17 + name VLAN17 +! +vlan 18 + name VLAN18 +! +vlan 19 + name VLAN19 +! +vlan 120 + name VLAN120 +! +vlan 121 + name VLAN121 +! +vlan 122 + name VLAN122 +! +vlan 123 + name VLAN123 +! +vlan 124 + name VLAN124 +! +vlan 4094 + trunk group mlag-peer +! +interface Port-Channel1 + switchport mode trunk + switchport trunk group mlag-peer +! +interface Port-Channel10 + switchport trunk allowed vlan 14-19,120-124 + switchport mode trunk + ! + evpn ethernet-segment + identifier 0000:0000:0000:0000:3334 + route-target import 00:00:00:00:33:34 + lacp system-id 0000.0000.3334 + mlag 10 +! +interface Ethernet1 + channel-group 1 mode active +! +interface Ethernet2 + channel-group 1 mode active +! +interface Ethernet3 + no switchport + ip address 10.20.0.25/30 + pim ipv4 sparse-mode +! +interface Ethernet4 + no switchport + ip address 10.20.0.29/30 + pim ipv4 sparse-mode +! +interface Ethernet5 + no switchport + ip address 10.20.0.33/30 + pim ipv4 sparse-mode +! +interface Ethernet6 + channel-group 10 mode active +! +interface Ethernet7 + channel-group 10 mode active +! +interface Ethernet15 +! +interface Loopback0 + ip address 192.168.255.33/32 +! +interface Loopback1 + ip address 192.168.255.234/32 +! +interface Vlan15 + ip address 172.16.15.33/24 + ip virtual-router address 172.16.15.254 +! +interface Vlan16 + ip address 172.16.16.33/24 + ip virtual-router address 172.16.16.254 +! +interface Vlan17 + ip address 172.16.17.33/24 + ip virtual-router address 172.16.17.254 +! +interface Vlan18 + ip address 172.16.18.33/24 + ip virtual-router address 172.16.18.254 +! +interface Vlan19 + ip address 172.16.19.33/24 + ip virtual-router address 172.16.19.254 +! +interface Vlan120 + ip address 172.16.120.33/24 + ip virtual-router address 172.16.120.254 +! +interface Vlan121 + ip address 172.16.121.33/24 + ip virtual-router address 172.16.121.254 +! +interface Vlan122 + ip address 172.16.122.33/24 + ip virtual-router address 172.16.122.254 +! +interface Vlan123 + ip address 172.16.123.33/24 + ip virtual-router address 172.16.123.254 +! +interface Vlan124 + ip address 172.16.124.33/24 + ip virtual-router address 172.16.124.254 +! +interface Vlan4094 + ip address 10.20.0.53/30 +! +interface Vxlan1 + vxlan source-interface Loopback1 + vxlan udp-port 4789 + vxlan vlan 15 vni 10015 + vxlan learn-restrict any +! +mlag configuration + domain-id mlag1 + local-interface Vlan4094 + peer-address 10.20.0.54 + peer-address heartbeat 192.168.0.34 vrf OOB + peer-link Port-Channel1 + dual-primary detection delay 10 action errdisable all-interfaces +! +router bgp 65220 + router-id 192.168.255.33 + neighbor EVPN peer group + neighbor EVPN remote-as 65220 + neighbor EVPN update-source Loopback0 + neighbor EVPN route-reflector-client + neighbor EVPN send-community extended + neighbor EVPN maximum-routes 12000 + neighbor LEAFS peer group + neighbor LEAFS remote-as 65220 + neighbor LEAFS next-hop-self + neighbor LEAFS maximum-routes 12000 + neighbor 10.20.0.26 peer group LEAFS + neighbor 10.20.0.30 peer group LEAFS + neighbor 10.20.0.34 peer group LEAFS + neighbor 192.168.255.14 peer group EVPN + neighbor 192.168.255.15 peer group EVPN + neighbor 192.168.255.16 peer group EVPN + ! + vlan 15 + rd 192.168.33.34:15 + route-target both 15:15 + redistribute learned + ! + address-family evpn + neighbor EVPN activate + no neighbor LEAFS activate + ! + address-family ipv4 + no neighbor EVPN activate + neighbor LEAFS activate + network 192.168.255.33/32 + network 192.168.255.234/32 +! +! Multicast routing +ip multicast-routing +router multicast + ipv4 + routing + software-forwarding sfe + +router pim sparse-mode + ipv4 + rp address 192.168.255.111 + diff --git a/topologies/training-level7-part2-Test2/configlets/leaf4-DC1-BASE b/topologies/training-level7-part2-Test2/configlets/leaf4-DC1-BASE new file mode 100644 index 000000000..e317855e9 --- /dev/null +++ b/topologies/training-level7-part2-Test2/configlets/leaf4-DC1-BASE @@ -0,0 +1,10 @@ +hostname leaf4-DC1 +! +interface Management0 + vrf MGMT + ip address 192.168.0.24/24 +! +service routing protocols model multi-agent +! +ip routing +! diff --git a/topologies/training-level7-part2-Test2/configlets/leaf4-DC2-BASE b/topologies/training-level7-part2-Test2/configlets/leaf4-DC2-BASE new file mode 100644 index 000000000..c1b25eb45 --- /dev/null +++ b/topologies/training-level7-part2-Test2/configlets/leaf4-DC2-BASE @@ -0,0 +1,10 @@ +hostname leaf4-DC2 +! +interface Management0 + vrf MGMT + ip address 192.168.0.34/24 +! +service routing protocols model multi-agent +! +ip routing +! diff --git a/topologies/training-level7-part2-Test2/configlets/leaf4-DC2-START b/topologies/training-level7-part2-Test2/configlets/leaf4-DC2-START new file mode 100644 index 000000000..ccc167dd4 --- /dev/null +++ b/topologies/training-level7-part2-Test2/configlets/leaf4-DC2-START @@ -0,0 +1,192 @@ +vlan 15 + name VLAN15 +! +vlan 16 + name VLAN16 +! +vlan 17 + name VLAN17 +! +vlan 18 + name VLAN18 +! +vlan 19 + name VLAN19 +! +vlan 120 + name VLAN120 +! +vlan 121 + name VLAN121 +! +vlan 122 + name VLAN122 +! +vlan 123 + name VLAN123 +! +vlan 124 + name VLAN124 +! +vlan 4094 + trunk group mlag-peer +! +interface Port-Channel1 + switchport mode trunk + switchport trunk group mlag-peer +! +interface Port-Channel10 + switchport trunk allowed vlan 14-19,120-124 + switchport mode trunk + ! + evpn ethernet-segment + identifier 0000:0000:0000:0000:3334 + route-target import 00:00:00:00:33:34 + lacp system-id 0000.0000.3334 + mlag 10 +! +interface Ethernet1 + channel-group 1 mode active +! +interface Ethernet2 + channel-group 1 mode active +! +interface Ethernet3 + no switchport + ip address 10.20.0.37/30 + pim ipv4 sparse-mode +! +interface Ethernet4 + no switchport + ip address 10.20.0.41/30 + pim ipv4 sparse-mode +! +interface Ethernet5 + no switchport + ip address 10.20.0.45/30 + pim ipv4 sparse-mode +! +interface Ethernet6 + channel-group 10 mode active +! +interface Ethernet7 + channel-group 10 mode active +! +interface Ethernet15 +! +interface Loopback0 + ip address 192.168.255.34/32 +! +interface Loopback1 + ip address 192.168.255.234/32 +! +interface Vlan15 + ip address 172.16.15.34/24 + ip virtual-router address 172.16.15.254 +! +interface Vlan16 + ip address 172.16.16.34/24 + ip virtual-router address 172.16.16.254 +! +interface Vlan17 + ip address 172.16.17.34/24 + ip virtual-router address 172.16.17.254 +! +interface Vlan18 + ip address 172.16.18.34/24 + ip virtual-router address 172.16.18.254 +! +interface Vlan19 + ip address 172.16.19.33/24 + ip virtual-router address 172.16.19.254 +! +interface Vlan120 + ip address 172.16.120.34/24 + ip virtual-router address 172.16.120.254 +! +interface Vlan121 + ip address 172.16.121.34/24 + ip virtual-router address 172.16.121.254 +! +interface Vlan122 + ip address 172.16.122.34/24 + ip virtual-router address 172.16.122.254 +! +interface Vlan123 + ip address 172.16.123.34/24 + ip virtual-router address 172.16.123.254 +! +interface Vlan124 + ip address 172.16.124.34/24 + ip virtual-router address 172.16.124.254 +! +interface Vlan4094 + ip address 10.20.0.54/30 +! +interface Vxlan1 + vxlan source-interface Loopback1 + vxlan udp-port 4789 + vxlan vlan 15 vni 10015 + vxlan learn-restrict any +! +ip virtual-router mac-address de:ad:fa:ce:be:ef +! +mlag configuration + domain-id mlag1 + local-interface Vlan4094 + peer-address 10.20.0.53 + peer-address heartbeat 192.168.0.33 vrf OOB + peer-link Port-Channel1 + dual-primary detection delay 10 action errdisable all-interfaces +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 +! +ip radius source-interface Management0 +! +router bgp 65220 + router-id 192.168.255.34 + neighbor EVPN peer group + neighbor EVPN remote-as 65220 + neighbor EVPN update-source Loopback0 + neighbor EVPN route-reflector-client + neighbor EVPN send-community extended + neighbor EVPN maximum-routes 12000 + neighbor LEAFS peer group + neighbor LEAFS remote-as 65220 + neighbor LEAFS next-hop-self + neighbor LEAFS maximum-routes 12000 + neighbor 192.168.255.14 peer group EVPN + neighbor 192.168.255.15 peer group EVPN + neighbor 192.168.255.16 peer group EVPN + + neighbor 10.20.0.38 peer group LEAFS + neighbor 10.20.0.42 peer group LEAFS + neighbor 10.20.0.46 peer group LEAFS + network 192.168.255.34/32 + network 192.168.255.234/32 + ! + vlan 15 + rd 192.168.33.34:15 + route-target both 15:15 + redistribute learned + ! + address-family evpn + neighbor EVPN activate + no neighbor LEAFS activate + ! + address-family ipv4 + no neighbor EVPN activate + neighbor LEAFS activate + network 192.168.255.34/32 + network 192.168.255.234/32 +! +! Multicast routing +ip multicast-routing +router multicast + ipv4 + routing + software-forwarding sfe + +router pim sparse-mode + ipv4 + rp address 192.168.255.111 diff --git a/topologies/training-level7-part2-Test2/configlets/spine1-DC1-BASE b/topologies/training-level7-part2-Test2/configlets/spine1-DC1-BASE new file mode 100644 index 000000000..153b74f2c --- /dev/null +++ b/topologies/training-level7-part2-Test2/configlets/spine1-DC1-BASE @@ -0,0 +1,10 @@ +hostname spine1-DC1 +! +interface Management0 + vrf MGMT + ip address 192.168.0.11/24 +! +service routing protocols model multi-agent +! +ip routing +! diff --git a/topologies/training-level7-part2-Test2/configlets/spine1-DC2-BASE b/topologies/training-level7-part2-Test2/configlets/spine1-DC2-BASE new file mode 100644 index 000000000..dff91254c --- /dev/null +++ b/topologies/training-level7-part2-Test2/configlets/spine1-DC2-BASE @@ -0,0 +1,10 @@ +hostname spine1-DC2 +! +interface Management0 + vrf MGMT + ip address 192.168.0.14/24 +! +service routing protocols model multi-agent +! +ip routing +! diff --git a/topologies/training-level7-part2-Test2/configlets/spine1-DC3-BASE b/topologies/training-level7-part2-Test2/configlets/spine1-DC3-BASE new file mode 100644 index 000000000..7edf1b6ff --- /dev/null +++ b/topologies/training-level7-part2-Test2/configlets/spine1-DC3-BASE @@ -0,0 +1,10 @@ +hostname spine1-DC3 +! +interface Management0 + vrf MGMT + ip address 192.168.0.77/24 +! +service routing protocols model multi-agent +! +ip routing +! \ No newline at end of file diff --git a/topologies/training-level7-part2-Test2/configlets/spine2-DC1-BASE b/topologies/training-level7-part2-Test2/configlets/spine2-DC1-BASE new file mode 100644 index 000000000..d9b12344f --- /dev/null +++ b/topologies/training-level7-part2-Test2/configlets/spine2-DC1-BASE @@ -0,0 +1,10 @@ +hostname spine2-DC1 +! +interface Management0 + vrf MGMT + ip address 192.168.0.12/24 +! +service routing protocols model multi-agent +! +ip routing +! diff --git a/topologies/training-level7-part2-Test2/configlets/spine2-DC2-BASE b/topologies/training-level7-part2-Test2/configlets/spine2-DC2-BASE new file mode 100644 index 000000000..0a5209409 --- /dev/null +++ b/topologies/training-level7-part2-Test2/configlets/spine2-DC2-BASE @@ -0,0 +1,10 @@ +hostname spine2-DC2 +! +interface Management0 + vrf MGMT + ip address 192.168.0.15/24 +! +service routing protocols model multi-agent +! +ip routing +! diff --git a/topologies/training-level7-part2-Test2/configlets/spine2-DC2-START b/topologies/training-level7-part2-Test2/configlets/spine2-DC2-START new file mode 100644 index 000000000..916acabf7 --- /dev/null +++ b/topologies/training-level7-part2-Test2/configlets/spine2-DC2-START @@ -0,0 +1,82 @@ +interface Ethernet1 + no switchport + ip address 10.21.0.26/30 +! +interface Ethernet2 + no switchport + ip address 10.20.0.6/30 +! +interface Ethernet3 + no switchport + ip address 10.20.0.18/30 +! +interface Ethernet4 + no switchport + ip address 10.20.0.30/30 +! +interface Ethernet5 + no switchport + ip address 10.20.0.42/30 +! +interface Ethernet6 + no switchport + ip address 10.21.0.6/30 +! +interface Ethernet7 + no switchport + ip address 10.21.0.18/30 +! +interface Ethernet15 +! +interface Loopback0 + ip address 192.168.255.15/32 +! +router bgp 65220 + router-id 192.168.255.15 + bgp listen range 192.168.255.0/24 peer-group EVPN remote-as 65220 + bgp listen range 10.20.0.0/24 peer-group LEAFS remote-as 65220 + bgp listen range 10.21.0.0/24 peer-group LEAFS remote-as 65220 + neighbor DC3-EVPN peer group + neighbor DC3-EVPN remote-as 65230 + neighbor DC3-EVPN update-source Loopback0 + neighbor DC3-EVPN ebgp-multihop 15 + neighbor DC3-EVPN send-community extended + neighbor DC3-EVPN maximum-routes 12000 + neighbor EVPN peer group + neighbor EVPN remote-as 65220 + neighbor EVPN next-hop-unchanged + neighbor EVPN update-source Loopback0 + neighbor EVPN route-reflector-client + neighbor EVPN send-community extended + neighbor EVPN maximum-routes 12000 + neighbor LEAFS peer group + neighbor LEAFS remote-as 65220 + neighbor LEAFS next-hop-self + neighbor LEAFS route-reflector-client + neighbor LEAFS maximum-routes 12000 + neighbor 192.168.255.77 peer group DC3-EVPN + neighbor 192.168.255.78 peer group DC3-EVPN + neighbor DCI-EVPN peer group + neighbor DCI-EVPN remote-as 65110 + neighbor DCI-EVPN update-source Loopback0 + neighbor DCI-EVPN ebgp-multihop 5 + neighbor DCI-EVPN send-community extended + neighbor DCI-EVPN next-hop-unchanged + neighbor 192.168.255.11 peer group DCI-EVPN + neighbor 192.168.255.12 peer group DCI-EVPN + neighbor 192.168.255.13 peer group DCI-EVPN + ! + address-family evpn + neighbor DCI-EVPN activate + neighbor DC3-EVPN activate + neighbor EVPN activate + no neighbor LEAFS activate + ! + address-family ipv4 + no neighbor DCI-EVPN activate + no neighbor DC3-EVPN activate + no neighbor EVPN activate + neighbor LEAFS activate + network 192.168.255.15/32 +! + diff --git a/topologies/training-level7-part2-Test2/configlets/spine2-DC3-BASE b/topologies/training-level7-part2-Test2/configlets/spine2-DC3-BASE new file mode 100644 index 000000000..cf74a4f02 --- /dev/null +++ b/topologies/training-level7-part2-Test2/configlets/spine2-DC3-BASE @@ -0,0 +1,10 @@ +hostname spine2-DC3 +! +interface Management0 + vrf MGMT + ip address 192.168.0.78/24 +! +service routing protocols model multi-agent +! +ip routing +! \ No newline at end of file diff --git a/topologies/training-level7-part2-Test2/configlets/spine3-DC1-BASE b/topologies/training-level7-part2-Test2/configlets/spine3-DC1-BASE new file mode 100644 index 000000000..87d85a6c7 --- /dev/null +++ b/topologies/training-level7-part2-Test2/configlets/spine3-DC1-BASE @@ -0,0 +1,10 @@ +hostname spine3-DC1 +! +interface Management0 + vrf MGMT + ip address 192.168.0.13/24 +! +service routing protocols model multi-agent +! +ip routing +! diff --git a/topologies/training-level7-part2-Test2/configlets/spine3-DC2-BASE b/topologies/training-level7-part2-Test2/configlets/spine3-DC2-BASE new file mode 100644 index 000000000..d3b9c4d00 --- /dev/null +++ b/topologies/training-level7-part2-Test2/configlets/spine3-DC2-BASE @@ -0,0 +1,10 @@ +hostname spine3-DC2 +! +interface Management0 + vrf MGMT + ip address 192.168.0.16/24 +! +service routing protocols model multi-agent +! +ip routing +! diff --git a/topologies/training-level7-part2-Test2/configlets/spine3-DC2-START b/topologies/training-level7-part2-Test2/configlets/spine3-DC2-START new file mode 100644 index 000000000..e449c6adc --- /dev/null +++ b/topologies/training-level7-part2-Test2/configlets/spine3-DC2-START @@ -0,0 +1,78 @@ +interface Ethernet2 + no switchport + ip address 10.20.0.10/30 +! +interface Ethernet3 + no switchport + ip address 10.20.0.22/30 +! +interface Ethernet4 + no switchport + ip address 10.20.0.34/30 +! +interface Ethernet5 + no switchport + ip address 10.20.0.46/30 +! +interface Ethernet6 + no switchport + ip address 10.21.0.10/30 +! +interface Ethernet7 + no switchport + ip address 10.21.0.22/30 +! +interface Ethernet15 +! +interface Loopback0 + ip address 192.168.255.16/32 +! +router bgp 65220 + router-id 192.168.255.16 + bgp listen range 192.168.255.0/24 peer-group EVPN remote-as 65220 + bgp listen range 10.20.0.0/24 peer-group LEAFS remote-as 65220 + bgp listen range 10.21.0.0/24 peer-group LEAFS remote-as 65220 + neighbor DC3-EVPN peer group + neighbor DC3-EVPN remote-as 65230 + neighbor DC3-EVPN update-source Loopback0 + neighbor DC3-EVPN ebgp-multihop 15 + neighbor DC3-EVPN send-community extended + neighbor DC3-EVPN maximum-routes 12000 + neighbor EVPN peer group + neighbor EVPN remote-as 65220 + neighbor EVPN next-hop-unchanged + neighbor EVPN update-source Loopback0 + neighbor EVPN route-reflector-client + neighbor EVPN send-community extended + neighbor EVPN maximum-routes 12000 + neighbor LEAFS peer group + neighbor LEAFS remote-as 65220 + neighbor LEAFS next-hop-self + neighbor LEAFS route-reflector-client + neighbor LEAFS maximum-routes 12000 + neighbor 192.168.255.77 peer group DC3-EVPN + neighbor 192.168.255.78 peer group DC3-EVPN + neighbor DCI-EVPN peer group + neighbor DCI-EVPN remote-as 65110 + neighbor DCI-EVPN update-source Loopback0 + neighbor DCI-EVPN ebgp-multihop 5 + neighbor DCI-EVPN send-community extended + neighbor DCI-EVPN next-hop-unchanged + neighbor 192.168.255.11 peer group DCI-EVPN + neighbor 192.168.255.12 peer group DCI-EVPN + neighbor 192.168.255.13 peer group DCI-EVPN + ! + address-family evpn + neighbor DCI-EVPN activate + neighbor DC3-EVPN activate + neighbor EVPN activate + no neighbor LEAFS activate + ! + address-family ipv4 + no neighbor DCI-EVPN activate + no neighbor DC3-EVPN activate + no neighbor EVPN activate + neighbor LEAFS activate + network 192.168.255.16/32 +! + diff --git a/topologies/training-level7-part2-Test2/files/.ansible.cfg b/topologies/training-level7-part2-Test2/files/.ansible.cfg new file mode 100644 index 000000000..14c806515 --- /dev/null +++ b/topologies/training-level7-part2-Test2/files/.ansible.cfg @@ -0,0 +1,2 @@ +[defaults] +host_key_checking = False diff --git a/topologies/training-level7-part2-Test2/files/.screenrc b/topologies/training-level7-part2-Test2/files/.screenrc new file mode 100644 index 000000000..f792e40c4 --- /dev/null +++ b/topologies/training-level7-part2-Test2/files/.screenrc @@ -0,0 +1,48 @@ +# Turn off the startup message. +startup_message off +# Set the caption to the active windows. +caption always "%-Lw%{= BW}%50>%n%f* %t%{-}%+Lw%<" + +term screen-256color + +# New screens for various processes. +# Example: screen -t +# screen -t 7050SX-128 0 ssh aristaadmin@192.100.37.128 +screen 1 ssh 192.168.0.10 +screen 2 ssh 192.168.0.11 +screen 3 ssh 192.168.0.12 +screen 4 ssh 192.168.0.13 +screen 5 ssh 192.168.0.14 +screen 6 ssh 192.168.0.15 +screen 7 ssh 192.168.0.16 +screen 8 ssh 192.168.0.17 +screen 9 ssh 192.168.0.18 +screen 10 ssh 192.168.0.19 +screen 11 ssh 192.168.0.20 +screen 12 ssh 192.168.0.21 +screen 13 ssh 192.168.0.22 +screen 14 ssh 192.168.0.23 +screen 15 ssh 192.168.0.24 +screen 16 ssh 192.168.0.25 +screen 17 ssh 192.168.0.26 +screen 18 ssh 192.168.0.31 +screen 19 ssh 192.168.0.32 +screen 20 ssh 192.168.0.33 +screen 21 ssh 192.168.0.34 +screen 22 ssh 192.168.0.35 +screen 23 ssh 192.168.0.36 +screen 24 ssh 192.168.0.51 +screen 25 ssh 192.168.0.52 +screen 26 ssh 192.168.0.53 +screen 27 ssh 192.168.0.54 +screen 28 ssh 192.168.0.62 +screen 29 ssh 192.168.0.63 +screen 30 ssh 192.168.0.61 +screen 31 ssh 192.168.0.71 +screen 32 ssh 192.168.0.72 +screen 33 ssh 192.168.0.73 +screen 34 ssh 192.168.0.74 +screen 35 ssh 192.168.0.75 +screen 36 ssh 192.168.0.76 +screen 37 ssh 192.168.0.4 +screen 38 ssh 192.168.0.5 \ No newline at end of file diff --git a/topologies/training-level7-part2-Test2/files/MenuOptions.yaml b/topologies/training-level7-part2-Test2/files/MenuOptions.yaml new file mode 100644 index 000000000..8c0bf20bb --- /dev/null +++ b/topologies/training-level7-part2-Test2/files/MenuOptions.yaml @@ -0,0 +1,255 @@ +--- +options: + reset: + - command: "/usr/local/bin/ConfigureTopology.py && bash /home/arista/Broadcaster/pushHostDefaultConfig.sh" + description: "Reset All Devices to Base ATD (reset)" + mlag: + - command: "/usr/local/bin/ConfigureTopology.py -t mlag" + description: "MLAG Lab (mlag)" + bgp: + - command: "/usr/local/bin/ConfigureTopology.py -t bgp" + description: "BGP Lab (bgp)" + vxlan: + - command: "/usr/local/bin/ConfigureTopology.py -t vxlan" + description: "VXLAN Lab (vxlan) excludes leaf3 instead of leaf4" + l2evpn: + - command: "/usr/local/bin/ConfigureTopology.py -t l2evpn" + description: "EVPN Type 2 Lab (l2evpn) excludes leaf3 instead of leaf4" + l3evpn: + - command: "/usr/local/bin/ConfigureTopology.py -t l3evpn" + description: "EVPN Type 5 Lab (l3evpn) excludes leaf3 instead of leaf4" + cvp: + - command: "/usr/local/bin/ConfigureTopology.py -t cvp" + description: "CVP lab (cvp)" + media: + - command: "bash /home/arista/Broadcaster/pushHostMediaConfig.sh && login.py" + description: "Broadcast Engineer Training (media)" +labconfiglets: + mlag: + spine1: + - "Spine1-MLAG-Lab" + - "VLANs" + spine2: + - "Spine2-MLAG-Lab" + - "VLANs" + leaf1: + - "Leaf1-MLAG-Lab" + - "VLANs" + leaf2: + - "Leaf2-MLAG-Lab" + - "VLANs" + leaf3: + - "Leaf3-MLAG-Lab" + - "VLANs" + leaf4: + - "VLANs" + cvx01: + - "cvx01-Controller" + host1: + - "Host1-ATD" + host2: + - "Host2-ATD" + bgp: + spine1: + - "Spine1-BGP-Lab" + spine2: + - "Spine2-BGP-Lab" + leaf1: + - "Leaf1-BGP-Lab" + leaf2: + - "Leaf2-BGP-Lab" + leaf3: + - "Leaf3-BGP-Lab" + leaf4: + - "Leaf4-BGP-Lab" + cvx01: + - "cvx01-Controller" + host1: + - "Host1-ATD" + host2: + - "Host2-ATD" + vxlan: + spine1: + - "Spine1-BGP-Lab" + spine2: + - "Spine2-BGP-Lab" + leaf1: + - "Leaf1-VXLAN-Lab" + - "VLANs" + leaf2: + - "Leaf2-VXLAN-Lab" + - "VLANs" + leaf3: + - "Leaf3-VXLAN-Lab" + - "VLANs" + leaf4: + - "Leaf4-VXLAN-Lab" + - "VLANs" + cvx01: + - "cvx01-Controller" + host1: + - "Host1-ATD" + host2: + - "Host2-ATD" + l2evpn: + spine1: + - "Spine1-L2EVPN-Lab" + spine2: + - "Spine2-L2EVPN-Lab" + leaf1: + - "Leaf1-L2EVPN-Lab" + - "VLANs" + leaf2: + - "Leaf2-L2EVPN-Lab" + - "VLANs" + leaf3: + - "VLANs" + leaf4: + - "Leaf4-L2EVPN-Lab" + - "VLANs" + cvx01: + - "cvx01-Controller" + host1: + - "Host1-ATD" + host2: + - "Host2-ATD" + l3evpn: + spine1: + - "Spine1-L3EVPN-Lab" + spine2: + - "Spine2-L3EVPN-Lab" + leaf1: + - "Leaf1-L3EVPN-Lab" + leaf2: + - "Leaf2-L3EVPN-Lab" + leaf3: + - "VLANs" + leaf4: + - "Leaf4-L3EVPN-Lab" + cvx01: + - "cvx01-Controller" + host1: + - "Host1-ATD" + host2: + - "Host2-ATD" + cvp: + spine1: + - "Spine1-BGP-Lab" + spine2: + - "Spine2-BGP-Lab" + leaf1: + - "Leaf1-BGP-Lab" + leaf2: + - "Leaf2-BGP-Lab" + leaf3: + - "Leaf3-BGP-Lab" + leaf4: + - "Leaf4-BGP-Lab-Full" + cvx01: + - "cvx01-Controller" + host1: + - "Host1-ATD" + host2: + - "Host2-ATD" + media-reset: + spine1: + - "media-spine1-IP-Intro-start" + spine2: + - "media-spine2-IP-Intro-start" + leaf1: + - "media-leaf1-IP-Intro-start" + leaf2: + - "media-leaf2-IP-Intro-start" + leaf3: + - "media-leaf3-IP-Intro-start" + leaf4: + - "media-leaf4-IP-Intro-start" + host1: + - "Host1-Media" + host2: + - "Host2-Media" + media-intro: + spine1: + - "media-spine1-IP-Intro-start" + spine2: + - "media-spine2-IP-Intro-start" + leaf1: + - "media-leaf1-IP-Intro-start" + leaf2: + - "media-leaf2-IP-Intro-start" + leaf3: + - "media-leaf3-IP-Intro-start" + leaf4: + - "media-leaf4-IP-Intro-start" + host1: + - "Host1-Media" + host2: + - "Host2-Media" + media-vlan: + spine1: + - "media-spine1-VLAN-STP-start" + spine2: + - "media-spine2-VLAN-STP-start" + leaf1: + - "media-leaf1-VLAN-STP-start" + leaf2: + - "media-leaf2-VLAN-STP-start" + leaf3: + - "media-leaf3-VLAN-STP-start" + leaf4: + - "media-leaf4-VLAN-STP-start" + host1: + - "Host1-Media" + host2: + - "Host2-Media" + media-ospf: + spine1: + - "media-spine1-OSPF-start" + spine2: + - "media-spine2-OSPF-start" + leaf1: + - "media-leaf1-OSPF-start" + leaf2: + - "media-leaf2-OSPF-start" + leaf3: + - "media-leaf3-OSPF-start" + leaf4: + - "media-leaf4-OSPF-start" + host1: + - "Host1-Media" + host2: + - "Host2-Media" + media-bgp: + spine1: + - "media-spine1-BGP-start" + spine2: + - "media-spine2-BGP-start" + leaf1: + - "media-leaf1-BGP-start" + leaf2: + - "media-leaf2-BGP-start" + leaf3: + - "media-leaf3-BGP-start" + leaf4: + - "media-leaf4-BGP-start" + host1: + - "Host1-Media" + host2: + - "Host2-Media" + media-mcast: + spine1: + - "media-spine1-Multicast-lab" + spine2: + - "media-spine2-Multicast-lab" + leaf1: + - "media-leaf1-Multicast-lab" + leaf2: + - "media-leaf2-Multicast-lab" + leaf3: + - "media-leaf3-Multicast-lab" + leaf4: + - "media-leaf4-Multicast-lab" + host1: + - "Host1-Media" + host2: + - "Host2-Media" diff --git a/topologies/training-level7-part2-Test2/files/apps/coder/coder.yaml b/topologies/training-level7-part2-Test2/files/apps/coder/coder.yaml new file mode 100644 index 000000000..80cc852d1 --- /dev/null +++ b/topologies/training-level7-part2-Test2/files/apps/coder/coder.yaml @@ -0,0 +1,4 @@ +bind-addr: 127.0.0.1:8080 +auth: password +password: {ARISTA_REPLACE} +cert: false \ No newline at end of file diff --git a/topologies/training-level7-part2-Test2/files/apps/coder/labfiles/.placeholder b/topologies/training-level7-part2-Test2/files/apps/coder/labfiles/.placeholder new file mode 100644 index 000000000..e69de29bb diff --git a/topologies/training-level7-part2-Test2/files/apps/ssh/web.json b/topologies/training-level7-part2-Test2/files/apps/ssh/web.json new file mode 100644 index 000000000..13fac47dd --- /dev/null +++ b/topologies/training-level7-part2-Test2/files/apps/ssh/web.json @@ -0,0 +1,76 @@ +{ + "listen": { + "ip": "0.0.0.0", + "port": 2222 + }, + "user": { + "name": null, + "password": null, + "privatekey": null + }, + "ssh": { + "host": null, + "port": 22, + "localAddress": null, + "localPort": null, + "term": "xterm-color", + "readyTimeout": 20000, + "keepaliveInterval": 120000, + "keepaliveCountMax": 10, + "allowedSubnets": [ "192.168.0.0/16", "10.0.0.0/8", "172.16.0.0/12" ] + }, + "terminal": { + "cursorBlink": true, + "scrollback": 10000, + "tabStopWidth": 8, + "bellStyle": "sound" + }, + "header": { + "text": null, + "background": "green" + }, + "session": { + "name": "WebSSH2", + "secret": "mysecret" + }, + "options": { + "challengeButton": true, + "allowreauth": true + }, + "algorithms": { + "kex": [ + "ecdh-sha2-nistp256", + "ecdh-sha2-nistp384", + "ecdh-sha2-nistp521", + "diffie-hellman-group-exchange-sha256", + "diffie-hellman-group14-sha1" + ], + "cipher": [ + "aes128-ctr", + "aes192-ctr", + "aes256-ctr", + "aes128-gcm", + "aes128-gcm@openssh.com", + "aes256-gcm", + "aes256-gcm@openssh.com", + "aes256-cbc" + ], + "hmac": [ + "hmac-sha2-256", + "hmac-sha2-512", + "hmac-sha1" + ], + "compress": [ + "none", + "zlib@openssh.com", + "zlib" + ] + }, + "serverlog": { + "client": false, + "server": false + }, + "accesslog": false, + "verify": false, + "safeShutdownDuration": 300 + } \ No newline at end of file diff --git a/topologies/training-level7-part2-Test2/files/apps/uilanding/modules.yaml b/topologies/training-level7-part2-Test2/files/apps/uilanding/modules.yaml new file mode 100644 index 000000000..ad03ca750 --- /dev/null +++ b/topologies/training-level7-part2-Test2/files/apps/uilanding/modules.yaml @@ -0,0 +1,37 @@ +topology: + image: "atd-topo.png" + nodes: + Spine1: + coords: "65,197,245,279" + ip: "192.168.0.11" + Spine2: + coords: "360,196,543,280" + ip: "192.168.0.12" + Spine3: + coords: "656,196,837,282" + ip: "192.168.0.13" + Leaf1: + coords: "24,491,208,575" + ip: "192.168.0.21" + Leaf2: + coords: "248,491,432,576" + ip: "192.168.0.22" + Leaf3: + coords: "471,489,655,575" + ip: "192.168.0.23" + Leaf4: + coords: "696,491,878,575" + ip: "192.168.0.24" + BorderLeaf1: + coords: "204,20,386,107" + ip: "192.168.0.25" + BorderLeaf2: + coords: "498,21,680,106" + ip: "192.168.0.26" + Host1: + coords: "141,646,325,733" + ip: "192.168.0.51" + Host2: + coords: "589,647,774,733" + ip: "192.168.0.52" + servers: diff --git a/topologies/training-level7-part2-Test2/files/apps/webui/.vncpass_clear b/topologies/training-level7-part2-Test2/files/apps/webui/.vncpass_clear new file mode 100644 index 000000000..cd09dd7a5 --- /dev/null +++ b/topologies/training-level7-part2-Test2/files/apps/webui/.vncpass_clear @@ -0,0 +1 @@ +@rista1 \ No newline at end of file diff --git a/topologies/training-level7-part2-Test2/files/ceos/CVX/ceos-config b/topologies/training-level7-part2-Test2/files/ceos/CVX/ceos-config new file mode 100644 index 000000000..67c569149 --- /dev/null +++ b/topologies/training-level7-part2-Test2/files/ceos/CVX/ceos-config @@ -0,0 +1,2 @@ +SERIALNUMBER=CVX +SYSTEMMACADDR=00:1c:73:a4:c6:01 diff --git a/topologies/training-level7-part2-Test2/files/ceos/CVX/startup-config b/topologies/training-level7-part2-Test2/files/ceos/CVX/startup-config new file mode 100644 index 000000000..b565f15e9 --- /dev/null +++ b/topologies/training-level7-part2-Test2/files/ceos/CVX/startup-config @@ -0,0 +1,59 @@ +vrf instance MGMT +! +daemon TerminAttr + exec /usr/bin/TerminAttr -disableaaa -ingestgrpcurl=192.168.0.5:9910 -taillogs -ingestauth=key,atd-lab -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent -ingestvrf=MGMT + no shutdown +! +alias mlag-reload bash /mnt/flash/shut_intfs && sudo shutdown now -r +alias conint sh interface | i connected +alias senz show interface counter error | nz +alias shmc show int | awk '/^[A-Z]/ { intf = $1 } /, address is/ { print intf, $6 }' +alias snz show interface counter | nz +alias spd show port-channel %1 detail all +alias sqnz show interface counter queue | nz +alias srnz show interface counter rate | nz +alias intdesc + !! Usage: intdesc interface-name description + 10 config + 20 int %1 + 30 desc %2 + 40 exit +! +dns domain arista.lab +! +ntp server vrf MGMT 192.168.0.1 iburst source Management0 +! +radius-server host 192.168.0.1 vrf MGMT key 7 0207165218120E +! +aaa group server radius atds + server 192.168.0.1 vrf MGMT +! +aaa authentication login default group atds local +aaa authorization exec default group atds local +aaa authorization commands all default local +! +username Script secret sha512 $6$PNfpb9anSBQ5/aia$phaa3ar5pwkntenD9WHc6Ed5b96lbW0dc0bjtwPnFLaDiCK8D5Cjl6ewP/xdNbl4PtS6Paq.3SssN8pj05NQm. +username admin privilege 15 role network-admin secret 5 $1$5O85YVVn$HrXcfOivJEnISTMb6xrJc. +username arista privilege 15 role network-admin secret 5 $1$4VjIjfd1$XkUVulbNDESHFzcxDU.Tk1 +! +username arista ssh-key ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC+ERvV4GaPq3FzxY8T+5hMF/1T+l8wiPsVCtOrZU4Hy6NCNlAiDBdA/RUtX5/aOu5JvHyPTVHqWJ0qi9BqU3rxCNl/l2/5UZbm9RPzdZ1QCwoYwPB9/j/tYJV8lZdr6t0yGBfxgzD3oW/zF7a+ZtASaMAu7lkgoqPK2pVIGa+Y9ZCsA0Xq756XpLCw+d3pHKHvIkgWLCo9FoeIv8f/bu5u/ztzRE+Nvl+o5add6MxnjsXz3s7BnW2FX6JNjyp0Z+OXjupQc2gcfFvpd/dA2lCNuuaCHkRgyPwIZtWPmNqMRXPp37mlPwV43qDJRVPQkvh0xPxwS35BbzUxWdT+ZLZv +! +ip radius source-interface Management0 +! +ip routing vrf MGMT +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 +! +management api http-commands + no shutdown + vrf MGMT + no shutdown +! +hostname cvx +! +interface Management0 + vrf MGMT + ip address 192.168.0.4/24 +! +ip routing +! diff --git a/topologies/training-level7-part2-Test2/files/ceos/DCI/ceos-config b/topologies/training-level7-part2-Test2/files/ceos/DCI/ceos-config new file mode 100644 index 000000000..488943186 --- /dev/null +++ b/topologies/training-level7-part2-Test2/files/ceos/DCI/ceos-config @@ -0,0 +1,2 @@ +SERIALNUMBER=DCI +SYSTEMMACADDR=00:1c:73:16:c6:01 diff --git a/topologies/training-level7-part2-Test2/files/ceos/DCI/startup-config b/topologies/training-level7-part2-Test2/files/ceos/DCI/startup-config new file mode 100644 index 000000000..79f22d764 --- /dev/null +++ b/topologies/training-level7-part2-Test2/files/ceos/DCI/startup-config @@ -0,0 +1,61 @@ +vrf instance MGMT +! +daemon TerminAttr + exec /usr/bin/TerminAttr -disableaaa -ingestgrpcurl=192.168.0.5:9910 -taillogs -ingestauth=key,atd-lab -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent -ingestvrf=MGMT + no shutdown +! +alias mlag-reload bash /mnt/flash/shut_intfs && sudo shutdown now -r +alias conint sh interface | i connected +alias senz show interface counter error | nz +alias shmc show int | awk '/^[A-Z]/ { intf = $1 } /, address is/ { print intf, $6 }' +alias snz show interface counter | nz +alias spd show port-channel %1 detail all +alias sqnz show interface counter queue | nz +alias srnz show interface counter rate | nz +alias intdesc + !! Usage: intdesc interface-name description + 10 config + 20 int %1 + 30 desc %2 + 40 exit +! +dns domain arista.lab +! +ntp server vrf MGMT 192.168.0.1 iburst source Management0 +! +radius-server host 192.168.0.1 vrf MGMT key 7 0207165218120E +! +aaa group server radius atds + server 192.168.0.1 vrf MGMT +! +aaa authentication login default group atds local +aaa authorization exec default group atds local +aaa authorization commands all default local +! +username Script secret sha512 $6$PNfpb9anSBQ5/aia$phaa3ar5pwkntenD9WHc6Ed5b96lbW0dc0bjtwPnFLaDiCK8D5Cjl6ewP/xdNbl4PtS6Paq.3SssN8pj05NQm. +username admin privilege 15 role network-admin secret 5 $1$5O85YVVn$HrXcfOivJEnISTMb6xrJc. +username arista privilege 15 role network-admin secret 5 $1$4VjIjfd1$XkUVulbNDESHFzcxDU.Tk1 +! +username arista ssh-key ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC+ERvV4GaPq3FzxY8T+5hMF/1T+l8wiPsVCtOrZU4Hy6NCNlAiDBdA/RUtX5/aOu5JvHyPTVHqWJ0qi9BqU3rxCNl/l2/5UZbm9RPzdZ1QCwoYwPB9/j/tYJV8lZdr6t0yGBfxgzD3oW/zF7a+ZtASaMAu7lkgoqPK2pVIGa+Y9ZCsA0Xq756XpLCw+d3pHKHvIkgWLCo9FoeIv8f/bu5u/ztzRE+Nvl+o5add6MxnjsXz3s7BnW2FX6JNjyp0Z+OXjupQc2gcfFvpd/dA2lCNuuaCHkRgyPwIZtWPmNqMRXPp37mlPwV43qDJRVPQkvh0xPxwS35BbzUxWdT+ZLZv +! +ip radius source-interface Management0 +! +ip routing vrf MGMT +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 +! +management api http-commands + no shutdown + vrf MGMT + no shutdown +! +service routing protocols model multi-agent +! +hostname DCI +! +interface Management0 + vrf MGMT + ip address 192.168.0.76/24 +! +ip routing + diff --git a/topologies/training-level7-part2-Test2/files/ceos/OOB-CORE/ceos-config b/topologies/training-level7-part2-Test2/files/ceos/OOB-CORE/ceos-config new file mode 100644 index 000000000..7fc870d3a --- /dev/null +++ b/topologies/training-level7-part2-Test2/files/ceos/OOB-CORE/ceos-config @@ -0,0 +1,2 @@ +SERIALNUMBER=OOB-CORE +SYSTEMMACADDR=00:1c:73:04:c6:01 diff --git a/topologies/training-level7-part2-Test2/files/ceos/OOB-CORE/startup-config b/topologies/training-level7-part2-Test2/files/ceos/OOB-CORE/startup-config new file mode 100644 index 000000000..c5f114c49 --- /dev/null +++ b/topologies/training-level7-part2-Test2/files/ceos/OOB-CORE/startup-config @@ -0,0 +1,61 @@ +vrf instance MGMT +! +daemon TerminAttr + exec /usr/bin/TerminAttr -disableaaa -ingestgrpcurl=192.168.0.5:9910 -taillogs -ingestauth=key,atd-lab -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent -ingestvrf=MGMT + no shutdown +! +alias mlag-reload bash /mnt/flash/shut_intfs && sudo shutdown now -r +alias conint sh interface | i connected +alias senz show interface counter error | nz +alias shmc show int | awk '/^[A-Z]/ { intf = $1 } /, address is/ { print intf, $6 }' +alias snz show interface counter | nz +alias spd show port-channel %1 detail all +alias sqnz show interface counter queue | nz +alias srnz show interface counter rate | nz +alias intdesc + !! Usage: intdesc interface-name description + 10 config + 20 int %1 + 30 desc %2 + 40 exit +! +dns domain arista.lab +! +ntp server vrf MGMT 192.168.0.1 iburst source Management0 +! +radius-server host 192.168.0.1 vrf MGMT key 7 0207165218120E +! +aaa group server radius atds + server 192.168.0.1 vrf MGMT +! +aaa authentication login default group atds local +aaa authorization exec default group atds local +aaa authorization commands all default local +! +username Script secret sha512 $6$PNfpb9anSBQ5/aia$phaa3ar5pwkntenD9WHc6Ed5b96lbW0dc0bjtwPnFLaDiCK8D5Cjl6ewP/xdNbl4PtS6Paq.3SssN8pj05NQm. +username admin privilege 15 role network-admin secret 5 $1$5O85YVVn$HrXcfOivJEnISTMb6xrJc. +username arista privilege 15 role network-admin secret 5 $1$4VjIjfd1$XkUVulbNDESHFzcxDU.Tk1 +! +username arista ssh-key ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC+ERvV4GaPq3FzxY8T+5hMF/1T+l8wiPsVCtOrZU4Hy6NCNlAiDBdA/RUtX5/aOu5JvHyPTVHqWJ0qi9BqU3rxCNl/l2/5UZbm9RPzdZ1QCwoYwPB9/j/tYJV8lZdr6t0yGBfxgzD3oW/zF7a+ZtASaMAu7lkgoqPK2pVIGa+Y9ZCsA0Xq756XpLCw+d3pHKHvIkgWLCo9FoeIv8f/bu5u/ztzRE+Nvl+o5add6MxnjsXz3s7BnW2FX6JNjyp0Z+OXjupQc2gcfFvpd/dA2lCNuuaCHkRgyPwIZtWPmNqMRXPp37mlPwV43qDJRVPQkvh0xPxwS35BbzUxWdT+ZLZv +! +ip radius source-interface Management0 +! +ip routing vrf MGMT +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 +! +management api http-commands + no shutdown + vrf MGMT + no shutdown +! +service routing protocols model multi-agent +! +hostname OOB-CORE +! +interface Management0 + vrf MGMT + ip address 192.168.0.61/24 +! +ip routing +! diff --git a/topologies/training-level7-part2-Test2/files/ceos/OOB-DC1/ceos-config b/topologies/training-level7-part2-Test2/files/ceos/OOB-DC1/ceos-config new file mode 100644 index 000000000..7f82a40d2 --- /dev/null +++ b/topologies/training-level7-part2-Test2/files/ceos/OOB-DC1/ceos-config @@ -0,0 +1,2 @@ +SERIALNUMBER=OOB-DC1 +SYSTEMMACADDR=00:1c:73:02:c6:01 diff --git a/topologies/training-level7-part2-Test2/files/ceos/OOB-DC1/startup-config b/topologies/training-level7-part2-Test2/files/ceos/OOB-DC1/startup-config new file mode 100644 index 000000000..00c4d0b14 --- /dev/null +++ b/topologies/training-level7-part2-Test2/files/ceos/OOB-DC1/startup-config @@ -0,0 +1,61 @@ +vrf instance MGMT +! +daemon TerminAttr + exec /usr/bin/TerminAttr -disableaaa -ingestgrpcurl=192.168.0.5:9910 -taillogs -ingestauth=key,atd-lab -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent -ingestvrf=MGMT + no shutdown +! +alias mlag-reload bash /mnt/flash/shut_intfs && sudo shutdown now -r +alias conint sh interface | i connected +alias senz show interface counter error | nz +alias shmc show int | awk '/^[A-Z]/ { intf = $1 } /, address is/ { print intf, $6 }' +alias snz show interface counter | nz +alias spd show port-channel %1 detail all +alias sqnz show interface counter queue | nz +alias srnz show interface counter rate | nz +alias intdesc + !! Usage: intdesc interface-name description + 10 config + 20 int %1 + 30 desc %2 + 40 exit +! +dns domain arista.lab +! +ntp server vrf MGMT 192.168.0.1 iburst source Management0 +! +radius-server host 192.168.0.1 vrf MGMT key 7 0207165218120E +! +aaa group server radius atds + server 192.168.0.1 vrf MGMT +! +aaa authentication login default group atds local +aaa authorization exec default group atds local +aaa authorization commands all default local +! +username Script secret sha512 $6$PNfpb9anSBQ5/aia$phaa3ar5pwkntenD9WHc6Ed5b96lbW0dc0bjtwPnFLaDiCK8D5Cjl6ewP/xdNbl4PtS6Paq.3SssN8pj05NQm. +username admin privilege 15 role network-admin secret 5 $1$5O85YVVn$HrXcfOivJEnISTMb6xrJc. +username arista privilege 15 role network-admin secret 5 $1$4VjIjfd1$XkUVulbNDESHFzcxDU.Tk1 +! +username arista ssh-key ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC+ERvV4GaPq3FzxY8T+5hMF/1T+l8wiPsVCtOrZU4Hy6NCNlAiDBdA/RUtX5/aOu5JvHyPTVHqWJ0qi9BqU3rxCNl/l2/5UZbm9RPzdZ1QCwoYwPB9/j/tYJV8lZdr6t0yGBfxgzD3oW/zF7a+ZtASaMAu7lkgoqPK2pVIGa+Y9ZCsA0Xq756XpLCw+d3pHKHvIkgWLCo9FoeIv8f/bu5u/ztzRE+Nvl+o5add6MxnjsXz3s7BnW2FX6JNjyp0Z+OXjupQc2gcfFvpd/dA2lCNuuaCHkRgyPwIZtWPmNqMRXPp37mlPwV43qDJRVPQkvh0xPxwS35BbzUxWdT+ZLZv +! +ip radius source-interface Management0 +! +ip routing vrf MGMT +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 +! +management api http-commands + no shutdown + vrf MGMT + no shutdown +! +service routing protocols model multi-agent +! +hostname OOB-DC1 +! +interface Management0 + vrf MGMT + ip address 192.168.0.62/24 +! +ip routing +! diff --git a/topologies/training-level7-part2-Test2/files/ceos/OOB-DC2/ceos-config b/topologies/training-level7-part2-Test2/files/ceos/OOB-DC2/ceos-config new file mode 100644 index 000000000..1ff2dfc2e --- /dev/null +++ b/topologies/training-level7-part2-Test2/files/ceos/OOB-DC2/ceos-config @@ -0,0 +1,2 @@ +SERIALNUMBER=OOB-DC2 +SYSTEMMACADDR=00:1c:73:03:c6:01 diff --git a/topologies/training-level7-part2-Test2/files/ceos/OOB-DC2/startup-config b/topologies/training-level7-part2-Test2/files/ceos/OOB-DC2/startup-config new file mode 100644 index 000000000..fc67449a2 --- /dev/null +++ b/topologies/training-level7-part2-Test2/files/ceos/OOB-DC2/startup-config @@ -0,0 +1,61 @@ +vrf instance MGMT +! +daemon TerminAttr + exec /usr/bin/TerminAttr -disableaaa -ingestgrpcurl=192.168.0.5:9910 -taillogs -ingestauth=key,atd-lab -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent -ingestvrf=MGMT + no shutdown +! +alias mlag-reload bash /mnt/flash/shut_intfs && sudo shutdown now -r +alias conint sh interface | i connected +alias senz show interface counter error | nz +alias shmc show int | awk '/^[A-Z]/ { intf = $1 } /, address is/ { print intf, $6 }' +alias snz show interface counter | nz +alias spd show port-channel %1 detail all +alias sqnz show interface counter queue | nz +alias srnz show interface counter rate | nz +alias intdesc + !! Usage: intdesc interface-name description + 10 config + 20 int %1 + 30 desc %2 + 40 exit +! +dns domain arista.lab +! +ntp server vrf MGMT 192.168.0.1 iburst source Management0 +! +radius-server host 192.168.0.1 vrf MGMT key 7 0207165218120E +! +aaa group server radius atds + server 192.168.0.1 vrf MGMT +! +aaa authentication login default group atds local +aaa authorization exec default group atds local +aaa authorization commands all default local +! +username Script secret sha512 $6$PNfpb9anSBQ5/aia$phaa3ar5pwkntenD9WHc6Ed5b96lbW0dc0bjtwPnFLaDiCK8D5Cjl6ewP/xdNbl4PtS6Paq.3SssN8pj05NQm. +username admin privilege 15 role network-admin secret 5 $1$5O85YVVn$HrXcfOivJEnISTMb6xrJc. +username arista privilege 15 role network-admin secret 5 $1$4VjIjfd1$XkUVulbNDESHFzcxDU.Tk1 +! +username arista ssh-key ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC+ERvV4GaPq3FzxY8T+5hMF/1T+l8wiPsVCtOrZU4Hy6NCNlAiDBdA/RUtX5/aOu5JvHyPTVHqWJ0qi9BqU3rxCNl/l2/5UZbm9RPzdZ1QCwoYwPB9/j/tYJV8lZdr6t0yGBfxgzD3oW/zF7a+ZtASaMAu7lkgoqPK2pVIGa+Y9ZCsA0Xq756XpLCw+d3pHKHvIkgWLCo9FoeIv8f/bu5u/ztzRE+Nvl+o5add6MxnjsXz3s7BnW2FX6JNjyp0Z+OXjupQc2gcfFvpd/dA2lCNuuaCHkRgyPwIZtWPmNqMRXPp37mlPwV43qDJRVPQkvh0xPxwS35BbzUxWdT+ZLZv +! +ip radius source-interface Management0 +! +ip routing vrf MGMT +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 +! +management api http-commands + no shutdown + vrf MGMT + no shutdown +! +service routing protocols model multi-agent +! +hostname OOB-DC2 +! +interface Management0 + vrf MGMT + ip address 192.168.0.63/24 +! +ip routing +! diff --git a/topologies/training-level7-part2-Test2/files/ceos/borderleaf1-DC1/ceos-config b/topologies/training-level7-part2-Test2/files/ceos/borderleaf1-DC1/ceos-config new file mode 100644 index 000000000..dbca6b2ef --- /dev/null +++ b/topologies/training-level7-part2-Test2/files/ceos/borderleaf1-DC1/ceos-config @@ -0,0 +1,2 @@ +SERIALNUMBER=borderleaf1-DC1 +SYSTEMMACADDR=00:1c:73:c5:c6:01 diff --git a/topologies/training-level7-part2-Test2/files/ceos/borderleaf1-DC1/startup-config b/topologies/training-level7-part2-Test2/files/ceos/borderleaf1-DC1/startup-config new file mode 100644 index 000000000..efefca2cc --- /dev/null +++ b/topologies/training-level7-part2-Test2/files/ceos/borderleaf1-DC1/startup-config @@ -0,0 +1,61 @@ +vrf instance MGMT +! +daemon TerminAttr + exec /usr/bin/TerminAttr -disableaaa -ingestgrpcurl=192.168.0.5:9910 -taillogs -ingestauth=key,atd-lab -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent -ingestvrf=MGMT + no shutdown +! +alias mlag-reload bash /mnt/flash/shut_intfs && sudo shutdown now -r +alias conint sh interface | i connected +alias senz show interface counter error | nz +alias shmc show int | awk '/^[A-Z]/ { intf = $1 } /, address is/ { print intf, $6 }' +alias snz show interface counter | nz +alias spd show port-channel %1 detail all +alias sqnz show interface counter queue | nz +alias srnz show interface counter rate | nz +alias intdesc + !! Usage: intdesc interface-name description + 10 config + 20 int %1 + 30 desc %2 + 40 exit +! +dns domain arista.lab +! +ntp server vrf MGMT 192.168.0.1 iburst source Management0 +! +radius-server host 192.168.0.1 vrf MGMT key 7 0207165218120E +! +aaa group server radius atds + server 192.168.0.1 vrf MGMT +! +aaa authentication login default group atds local +aaa authorization exec default group atds local +aaa authorization commands all default local +! +username Script secret sha512 $6$PNfpb9anSBQ5/aia$phaa3ar5pwkntenD9WHc6Ed5b96lbW0dc0bjtwPnFLaDiCK8D5Cjl6ewP/xdNbl4PtS6Paq.3SssN8pj05NQm. +username admin privilege 15 role network-admin secret 5 $1$5O85YVVn$HrXcfOivJEnISTMb6xrJc. +username arista privilege 15 role network-admin secret 5 $1$4VjIjfd1$XkUVulbNDESHFzcxDU.Tk1 +! +username arista ssh-key ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC+ERvV4GaPq3FzxY8T+5hMF/1T+l8wiPsVCtOrZU4Hy6NCNlAiDBdA/RUtX5/aOu5JvHyPTVHqWJ0qi9BqU3rxCNl/l2/5UZbm9RPzdZ1QCwoYwPB9/j/tYJV8lZdr6t0yGBfxgzD3oW/zF7a+ZtASaMAu7lkgoqPK2pVIGa+Y9ZCsA0Xq756XpLCw+d3pHKHvIkgWLCo9FoeIv8f/bu5u/ztzRE+Nvl+o5add6MxnjsXz3s7BnW2FX6JNjyp0Z+OXjupQc2gcfFvpd/dA2lCNuuaCHkRgyPwIZtWPmNqMRXPp37mlPwV43qDJRVPQkvh0xPxwS35BbzUxWdT+ZLZv +! +ip radius source-interface Management0 +! +ip routing vrf MGMT +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 +! +management api http-commands + no shutdown + vrf MGMT + no shutdown +! +hostname borderleaf1-DC1 +! +interface Management0 + vrf MGMT + ip address 192.168.0.25/24 +! +service routing protocols model multi-agent +! +ip routing +! diff --git a/topologies/training-level7-part2-Test2/files/ceos/borderleaf1-DC2/ceos-config b/topologies/training-level7-part2-Test2/files/ceos/borderleaf1-DC2/ceos-config new file mode 100644 index 000000000..0fe64677f --- /dev/null +++ b/topologies/training-level7-part2-Test2/files/ceos/borderleaf1-DC2/ceos-config @@ -0,0 +1,2 @@ +SERIALNUMBER=borderleaf1-DC2 +SYSTEMMACADDR=00:1c:73:d5:c6:01 diff --git a/topologies/training-level7-part2-Test2/files/ceos/borderleaf1-DC2/startup-config b/topologies/training-level7-part2-Test2/files/ceos/borderleaf1-DC2/startup-config new file mode 100644 index 000000000..083df3baf --- /dev/null +++ b/topologies/training-level7-part2-Test2/files/ceos/borderleaf1-DC2/startup-config @@ -0,0 +1,61 @@ +vrf instance MGMT +! +daemon TerminAttr + exec /usr/bin/TerminAttr -disableaaa -ingestgrpcurl=192.168.0.5:9910 -taillogs -ingestauth=key,atd-lab -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent -ingestvrf=MGMT + no shutdown +! +alias mlag-reload bash /mnt/flash/shut_intfs && sudo shutdown now -r +alias conint sh interface | i connected +alias senz show interface counter error | nz +alias shmc show int | awk '/^[A-Z]/ { intf = $1 } /, address is/ { print intf, $6 }' +alias snz show interface counter | nz +alias spd show port-channel %1 detail all +alias sqnz show interface counter queue | nz +alias srnz show interface counter rate | nz +alias intdesc + !! Usage: intdesc interface-name description + 10 config + 20 int %1 + 30 desc %2 + 40 exit +! +dns domain arista.lab +! +ntp server vrf MGMT 192.168.0.1 iburst source Management0 +! +radius-server host 192.168.0.1 vrf MGMT key 7 0207165218120E +! +aaa group server radius atds + server 192.168.0.1 vrf MGMT +! +aaa authentication login default group atds local +aaa authorization exec default group atds local +aaa authorization commands all default local +! +username Script secret sha512 $6$PNfpb9anSBQ5/aia$phaa3ar5pwkntenD9WHc6Ed5b96lbW0dc0bjtwPnFLaDiCK8D5Cjl6ewP/xdNbl4PtS6Paq.3SssN8pj05NQm. +username admin privilege 15 role network-admin secret 5 $1$5O85YVVn$HrXcfOivJEnISTMb6xrJc. +username arista privilege 15 role network-admin secret 5 $1$4VjIjfd1$XkUVulbNDESHFzcxDU.Tk1 +! +username arista ssh-key ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC+ERvV4GaPq3FzxY8T+5hMF/1T+l8wiPsVCtOrZU4Hy6NCNlAiDBdA/RUtX5/aOu5JvHyPTVHqWJ0qi9BqU3rxCNl/l2/5UZbm9RPzdZ1QCwoYwPB9/j/tYJV8lZdr6t0yGBfxgzD3oW/zF7a+ZtASaMAu7lkgoqPK2pVIGa+Y9ZCsA0Xq756XpLCw+d3pHKHvIkgWLCo9FoeIv8f/bu5u/ztzRE+Nvl+o5add6MxnjsXz3s7BnW2FX6JNjyp0Z+OXjupQc2gcfFvpd/dA2lCNuuaCHkRgyPwIZtWPmNqMRXPp37mlPwV43qDJRVPQkvh0xPxwS35BbzUxWdT+ZLZv +! +ip radius source-interface Management0 +! +ip routing vrf MGMT +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 +! +management api http-commands + no shutdown + vrf MGMT + no shutdown +! +hostname borderleaf1-DC2 +! +interface Management0 + vrf MGMT + ip address 192.168.0.35/24 +! +service routing protocols model multi-agent +! +ip routing +! diff --git a/topologies/training-level7-part2-Test2/files/ceos/borderleaf2-DC1/ceos-config b/topologies/training-level7-part2-Test2/files/ceos/borderleaf2-DC1/ceos-config new file mode 100644 index 000000000..274998e45 --- /dev/null +++ b/topologies/training-level7-part2-Test2/files/ceos/borderleaf2-DC1/ceos-config @@ -0,0 +1,2 @@ +SERIALNUMBER=borderleaf2-DC1 +SYSTEMMACADDR=00:1c:73:c6:c6:01 diff --git a/topologies/training-level7-part2-Test2/files/ceos/borderleaf2-DC1/startup-config b/topologies/training-level7-part2-Test2/files/ceos/borderleaf2-DC1/startup-config new file mode 100644 index 000000000..12b623064 --- /dev/null +++ b/topologies/training-level7-part2-Test2/files/ceos/borderleaf2-DC1/startup-config @@ -0,0 +1,61 @@ +vrf instance MGMT +! +daemon TerminAttr + exec /usr/bin/TerminAttr -disableaaa -ingestgrpcurl=192.168.0.5:9910 -taillogs -ingestauth=key,atd-lab -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent -ingestvrf=MGMT + no shutdown +! +alias mlag-reload bash /mnt/flash/shut_intfs && sudo shutdown now -r +alias conint sh interface | i connected +alias senz show interface counter error | nz +alias shmc show int | awk '/^[A-Z]/ { intf = $1 } /, address is/ { print intf, $6 }' +alias snz show interface counter | nz +alias spd show port-channel %1 detail all +alias sqnz show interface counter queue | nz +alias srnz show interface counter rate | nz +alias intdesc + !! Usage: intdesc interface-name description + 10 config + 20 int %1 + 30 desc %2 + 40 exit +! +dns domain arista.lab +! +ntp server vrf MGMT 192.168.0.1 iburst source Management0 +! +radius-server host 192.168.0.1 vrf MGMT key 7 0207165218120E +! +aaa group server radius atds + server 192.168.0.1 vrf MGMT +! +aaa authentication login default group atds local +aaa authorization exec default group atds local +aaa authorization commands all default local +! +username Script secret sha512 $6$PNfpb9anSBQ5/aia$phaa3ar5pwkntenD9WHc6Ed5b96lbW0dc0bjtwPnFLaDiCK8D5Cjl6ewP/xdNbl4PtS6Paq.3SssN8pj05NQm. +username admin privilege 15 role network-admin secret 5 $1$5O85YVVn$HrXcfOivJEnISTMb6xrJc. +username arista privilege 15 role network-admin secret 5 $1$4VjIjfd1$XkUVulbNDESHFzcxDU.Tk1 +! +username arista ssh-key ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC+ERvV4GaPq3FzxY8T+5hMF/1T+l8wiPsVCtOrZU4Hy6NCNlAiDBdA/RUtX5/aOu5JvHyPTVHqWJ0qi9BqU3rxCNl/l2/5UZbm9RPzdZ1QCwoYwPB9/j/tYJV8lZdr6t0yGBfxgzD3oW/zF7a+ZtASaMAu7lkgoqPK2pVIGa+Y9ZCsA0Xq756XpLCw+d3pHKHvIkgWLCo9FoeIv8f/bu5u/ztzRE+Nvl+o5add6MxnjsXz3s7BnW2FX6JNjyp0Z+OXjupQc2gcfFvpd/dA2lCNuuaCHkRgyPwIZtWPmNqMRXPp37mlPwV43qDJRVPQkvh0xPxwS35BbzUxWdT+ZLZv +! +ip radius source-interface Management0 +! +ip routing vrf MGMT +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 +! +management api http-commands + no shutdown + vrf MGMT + no shutdown +! +hostname borderleaf2-DC1 +! +interface Management0 + vrf MGMT + ip address 192.168.0.26/24 +! +service routing protocols model multi-agent +! +ip routing +! diff --git a/topologies/training-level7-part2-Test2/files/ceos/borderleaf2-DC2/ceos-config b/topologies/training-level7-part2-Test2/files/ceos/borderleaf2-DC2/ceos-config new file mode 100644 index 000000000..87f33c9c9 --- /dev/null +++ b/topologies/training-level7-part2-Test2/files/ceos/borderleaf2-DC2/ceos-config @@ -0,0 +1,2 @@ +SERIALNUMBER=borderleaf2-DC2 +SYSTEMMACADDR=00:1c:73:d6:c6:01 diff --git a/topologies/training-level7-part2-Test2/files/ceos/borderleaf2-DC2/startup-config b/topologies/training-level7-part2-Test2/files/ceos/borderleaf2-DC2/startup-config new file mode 100644 index 000000000..4fb058cc8 --- /dev/null +++ b/topologies/training-level7-part2-Test2/files/ceos/borderleaf2-DC2/startup-config @@ -0,0 +1,60 @@ +vrf instance MGMT +! +daemon TerminAttr + exec /usr/bin/TerminAttr -disableaaa -ingestgrpcurl=192.168.0.5:9910 -taillogs -ingestauth=key,atd-lab -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent -ingestvrf=MGMT + no shutdown +! +alias mlag-reload bash /mnt/flash/shut_intfs && sudo shutdown now -r +alias conint sh interface | i connected +alias senz show interface counter error | nz +alias shmc show int | awk '/^[A-Z]/ { intf = $1 } /, address is/ { print intf, $6 }' +alias snz show interface counter | nz +alias spd show port-channel %1 detail all +alias sqnz show interface counter queue | nz +alias srnz show interface counter rate | nz +alias intdesc + !! Usage: intdesc interface-name description + 10 config + 20 int %1 + 30 desc %2 + 40 exit +! +dns domain arista.lab +! +ntp server vrf MGMT 192.168.0.1 iburst source Management0 +! +radius-server host 192.168.0.1 vrf MGMT key 7 0207165218120E +! +aaa group server radius atds + server 192.168.0.1 vrf MGMT +! +aaa authentication login default group atds local +aaa authorization exec default group atds local +aaa authorization commands all default local +! +username Script secret sha512 $6$PNfpb9anSBQ5/aia$phaa3ar5pwkntenD9WHc6Ed5b96lbW0dc0bjtwPnFLaDiCK8D5Cjl6ewP/xdNbl4PtS6Paq.3SssN8pj05NQm. +username admin privilege 15 role network-admin secret 5 $1$5O85YVVn$HrXcfOivJEnISTMb6xrJc. +username arista privilege 15 role network-admin secret 5 $1$4VjIjfd1$XkUVulbNDESHFzcxDU.Tk1 +! +username arista ssh-key ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC+ERvV4GaPq3FzxY8T+5hMF/1T+l8wiPsVCtOrZU4Hy6NCNlAiDBdA/RUtX5/aOu5JvHyPTVHqWJ0qi9BqU3rxCNl/l2/5UZbm9RPzdZ1QCwoYwPB9/j/tYJV8lZdr6t0yGBfxgzD3oW/zF7a+ZtASaMAu7lkgoqPK2pVIGa+Y9ZCsA0Xq756XpLCw+d3pHKHvIkgWLCo9FoeIv8f/bu5u/ztzRE+Nvl+o5add6MxnjsXz3s7BnW2FX6JNjyp0Z+OXjupQc2gcfFvpd/dA2lCNuuaCHkRgyPwIZtWPmNqMRXPp37mlPwV43qDJRVPQkvh0xPxwS35BbzUxWdT+ZLZv +! +ip radius source-interface Management0 +! +ip routing vrf MGMT +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 +! +management api http-commands + no shutdown + vrf MGMT + no shutdown +! +hostname borderleaf2-DC2 +! +interface Management0 + vrf MGMT + ip address 192.168.0.36/24 +! +service routing protocols model multi-agent +! +ip routing diff --git a/topologies/training-level7-part2-Test2/files/ceos/core1-isp1/ceos-config b/topologies/training-level7-part2-Test2/files/ceos/core1-isp1/ceos-config new file mode 100644 index 000000000..8ee81c3cb --- /dev/null +++ b/topologies/training-level7-part2-Test2/files/ceos/core1-isp1/ceos-config @@ -0,0 +1,2 @@ +SERIALNUMBER=core1-isp1 +SYSTEMMACADDR=00:1c:73:11:c6:01 diff --git a/topologies/training-level7-part2-Test2/files/ceos/core1-isp1/startup-config b/topologies/training-level7-part2-Test2/files/ceos/core1-isp1/startup-config new file mode 100644 index 000000000..4ecc7824b --- /dev/null +++ b/topologies/training-level7-part2-Test2/files/ceos/core1-isp1/startup-config @@ -0,0 +1,61 @@ +vrf instance MGMT +! +daemon TerminAttr + exec /usr/bin/TerminAttr -disableaaa -ingestgrpcurl=192.168.0.5:9910 -taillogs -ingestauth=key,atd-lab -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent -ingestvrf=MGMT + no shutdown +! +alias mlag-reload bash /mnt/flash/shut_intfs && sudo shutdown now -r +alias conint sh interface | i connected +alias senz show interface counter error | nz +alias shmc show int | awk '/^[A-Z]/ { intf = $1 } /, address is/ { print intf, $6 }' +alias snz show interface counter | nz +alias spd show port-channel %1 detail all +alias sqnz show interface counter queue | nz +alias srnz show interface counter rate | nz +alias intdesc + !! Usage: intdesc interface-name description + 10 config + 20 int %1 + 30 desc %2 + 40 exit +! +dns domain arista.lab +! +ntp server vrf MGMT 192.168.0.1 iburst source Management0 +! +radius-server host 192.168.0.1 vrf MGMT key 7 0207165218120E +! +aaa group server radius atds + server 192.168.0.1 vrf MGMT +! +aaa authentication login default group atds local +aaa authorization exec default group atds local +aaa authorization commands all default local +! +username Script secret sha512 $6$PNfpb9anSBQ5/aia$phaa3ar5pwkntenD9WHc6Ed5b96lbW0dc0bjtwPnFLaDiCK8D5Cjl6ewP/xdNbl4PtS6Paq.3SssN8pj05NQm. +username admin privilege 15 role network-admin secret 5 $1$5O85YVVn$HrXcfOivJEnISTMb6xrJc. +username arista privilege 15 role network-admin secret 5 $1$4VjIjfd1$XkUVulbNDESHFzcxDU.Tk1 +! +username arista ssh-key ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC+ERvV4GaPq3FzxY8T+5hMF/1T+l8wiPsVCtOrZU4Hy6NCNlAiDBdA/RUtX5/aOu5JvHyPTVHqWJ0qi9BqU3rxCNl/l2/5UZbm9RPzdZ1QCwoYwPB9/j/tYJV8lZdr6t0yGBfxgzD3oW/zF7a+ZtASaMAu7lkgoqPK2pVIGa+Y9ZCsA0Xq756XpLCw+d3pHKHvIkgWLCo9FoeIv8f/bu5u/ztzRE+Nvl+o5add6MxnjsXz3s7BnW2FX6JNjyp0Z+OXjupQc2gcfFvpd/dA2lCNuuaCHkRgyPwIZtWPmNqMRXPp37mlPwV43qDJRVPQkvh0xPxwS35BbzUxWdT+ZLZv +! +ip radius source-interface Management0 +! +ip routing vrf MGMT +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 +! +management api http-commands + no shutdown + vrf MGMT + no shutdown +! +service routing protocols model multi-agent +! +hostname core1-ISP1 +! +interface Management0 + vrf MGMT + ip address 192.168.0.71/24 +! +ip routing +! diff --git a/topologies/training-level7-part2-Test2/files/ceos/core1-isp2/ceos-config b/topologies/training-level7-part2-Test2/files/ceos/core1-isp2/ceos-config new file mode 100644 index 000000000..d9268e5c4 --- /dev/null +++ b/topologies/training-level7-part2-Test2/files/ceos/core1-isp2/ceos-config @@ -0,0 +1,2 @@ +SERIALNUMBER=core1-isp2 +SYSTEMMACADDR=00:1c:73:13:c6:01 diff --git a/topologies/training-level7-part2-Test2/files/ceos/core1-isp2/startup-config b/topologies/training-level7-part2-Test2/files/ceos/core1-isp2/startup-config new file mode 100644 index 000000000..a2cf63d78 --- /dev/null +++ b/topologies/training-level7-part2-Test2/files/ceos/core1-isp2/startup-config @@ -0,0 +1,61 @@ +vrf instance MGMT +! +daemon TerminAttr + exec /usr/bin/TerminAttr -disableaaa -ingestgrpcurl=192.168.0.5:9910 -taillogs -ingestauth=key,atd-lab -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent -ingestvrf=MGMT + no shutdown +! +alias mlag-reload bash /mnt/flash/shut_intfs && sudo shutdown now -r +alias conint sh interface | i connected +alias senz show interface counter error | nz +alias shmc show int | awk '/^[A-Z]/ { intf = $1 } /, address is/ { print intf, $6 }' +alias snz show interface counter | nz +alias spd show port-channel %1 detail all +alias sqnz show interface counter queue | nz +alias srnz show interface counter rate | nz +alias intdesc + !! Usage: intdesc interface-name description + 10 config + 20 int %1 + 30 desc %2 + 40 exit +! +dns domain arista.lab +! +ntp server vrf MGMT 192.168.0.1 iburst source Management0 +! +radius-server host 192.168.0.1 vrf MGMT key 7 0207165218120E +! +aaa group server radius atds + server 192.168.0.1 vrf MGMT +! +aaa authentication login default group atds local +aaa authorization exec default group atds local +aaa authorization commands all default local +! +username Script secret sha512 $6$PNfpb9anSBQ5/aia$phaa3ar5pwkntenD9WHc6Ed5b96lbW0dc0bjtwPnFLaDiCK8D5Cjl6ewP/xdNbl4PtS6Paq.3SssN8pj05NQm. +username admin privilege 15 role network-admin secret 5 $1$5O85YVVn$HrXcfOivJEnISTMb6xrJc. +username arista privilege 15 role network-admin secret 5 $1$4VjIjfd1$XkUVulbNDESHFzcxDU.Tk1 +! +username arista ssh-key ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC+ERvV4GaPq3FzxY8T+5hMF/1T+l8wiPsVCtOrZU4Hy6NCNlAiDBdA/RUtX5/aOu5JvHyPTVHqWJ0qi9BqU3rxCNl/l2/5UZbm9RPzdZ1QCwoYwPB9/j/tYJV8lZdr6t0yGBfxgzD3oW/zF7a+ZtASaMAu7lkgoqPK2pVIGa+Y9ZCsA0Xq756XpLCw+d3pHKHvIkgWLCo9FoeIv8f/bu5u/ztzRE+Nvl+o5add6MxnjsXz3s7BnW2FX6JNjyp0Z+OXjupQc2gcfFvpd/dA2lCNuuaCHkRgyPwIZtWPmNqMRXPp37mlPwV43qDJRVPQkvh0xPxwS35BbzUxWdT+ZLZv +! +ip radius source-interface Management0 +! +ip routing vrf MGMT +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 +! +management api http-commands + no shutdown + vrf MGMT + no shutdown +! +service routing protocols model multi-agent +! +hostname core1-ISP2 +! +interface Management0 + vrf MGMT + ip address 192.168.0.73/24 +! +ip routing +! diff --git a/topologies/training-level7-part2-Test2/files/ceos/core2-isp1/ceos-config b/topologies/training-level7-part2-Test2/files/ceos/core2-isp1/ceos-config new file mode 100644 index 000000000..8555b2328 --- /dev/null +++ b/topologies/training-level7-part2-Test2/files/ceos/core2-isp1/ceos-config @@ -0,0 +1,2 @@ +SERIALNUMBER=core2-isp1 +SYSTEMMACADDR=00:1c:73:12:c6:01 diff --git a/topologies/training-level7-part2-Test2/files/ceos/core2-isp1/startup-config b/topologies/training-level7-part2-Test2/files/ceos/core2-isp1/startup-config new file mode 100644 index 000000000..14590ed77 --- /dev/null +++ b/topologies/training-level7-part2-Test2/files/ceos/core2-isp1/startup-config @@ -0,0 +1,61 @@ +vrf instance MGMT +! +daemon TerminAttr + exec /usr/bin/TerminAttr -disableaaa -ingestgrpcurl=192.168.0.5:9910 -taillogs -ingestauth=key,atd-lab -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent -ingestvrf=MGMT + no shutdown +! +alias mlag-reload bash /mnt/flash/shut_intfs && sudo shutdown now -r +alias conint sh interface | i connected +alias senz show interface counter error | nz +alias shmc show int | awk '/^[A-Z]/ { intf = $1 } /, address is/ { print intf, $6 }' +alias snz show interface counter | nz +alias spd show port-channel %1 detail all +alias sqnz show interface counter queue | nz +alias srnz show interface counter rate | nz +alias intdesc + !! Usage: intdesc interface-name description + 10 config + 20 int %1 + 30 desc %2 + 40 exit +! +dns domain arista.lab +! +ntp server vrf MGMT 192.168.0.1 iburst source Management0 +! +radius-server host 192.168.0.1 vrf MGMT key 7 0207165218120E +! +aaa group server radius atds + server 192.168.0.1 vrf MGMT +! +aaa authentication login default group atds local +aaa authorization exec default group atds local +aaa authorization commands all default local +! +username Script secret sha512 $6$PNfpb9anSBQ5/aia$phaa3ar5pwkntenD9WHc6Ed5b96lbW0dc0bjtwPnFLaDiCK8D5Cjl6ewP/xdNbl4PtS6Paq.3SssN8pj05NQm. +username admin privilege 15 role network-admin secret 5 $1$5O85YVVn$HrXcfOivJEnISTMb6xrJc. +username arista privilege 15 role network-admin secret 5 $1$4VjIjfd1$XkUVulbNDESHFzcxDU.Tk1 +! +username arista ssh-key ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC+ERvV4GaPq3FzxY8T+5hMF/1T+l8wiPsVCtOrZU4Hy6NCNlAiDBdA/RUtX5/aOu5JvHyPTVHqWJ0qi9BqU3rxCNl/l2/5UZbm9RPzdZ1QCwoYwPB9/j/tYJV8lZdr6t0yGBfxgzD3oW/zF7a+ZtASaMAu7lkgoqPK2pVIGa+Y9ZCsA0Xq756XpLCw+d3pHKHvIkgWLCo9FoeIv8f/bu5u/ztzRE+Nvl+o5add6MxnjsXz3s7BnW2FX6JNjyp0Z+OXjupQc2gcfFvpd/dA2lCNuuaCHkRgyPwIZtWPmNqMRXPp37mlPwV43qDJRVPQkvh0xPxwS35BbzUxWdT+ZLZv +! +ip radius source-interface Management0 +! +ip routing vrf MGMT +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 +! +management api http-commands + no shutdown + vrf MGMT + no shutdown +! +service routing protocols model multi-agent +! +hostname core2-ISP1 +! +interface Management0 + vrf MGMT + ip address 192.168.0.72/24 +! +ip routing +! diff --git a/topologies/training-level7-part2-Test2/files/ceos/core2-isp2/ceos-config b/topologies/training-level7-part2-Test2/files/ceos/core2-isp2/ceos-config new file mode 100644 index 000000000..6c8713b9a --- /dev/null +++ b/topologies/training-level7-part2-Test2/files/ceos/core2-isp2/ceos-config @@ -0,0 +1,2 @@ +SERIALNUMBER=core2-isp2 +SYSTEMMACADDR=00:1c:73:14:c6:01 diff --git a/topologies/training-level7-part2-Test2/files/ceos/core2-isp2/startup-config b/topologies/training-level7-part2-Test2/files/ceos/core2-isp2/startup-config new file mode 100644 index 000000000..73430e463 --- /dev/null +++ b/topologies/training-level7-part2-Test2/files/ceos/core2-isp2/startup-config @@ -0,0 +1,61 @@ +vrf instance MGMT +! +daemon TerminAttr + exec /usr/bin/TerminAttr -disableaaa -ingestgrpcurl=192.168.0.5:9910 -taillogs -ingestauth=key,atd-lab -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent -ingestvrf=MGMT + no shutdown +! +alias mlag-reload bash /mnt/flash/shut_intfs && sudo shutdown now -r +alias conint sh interface | i connected +alias senz show interface counter error | nz +alias shmc show int | awk '/^[A-Z]/ { intf = $1 } /, address is/ { print intf, $6 }' +alias snz show interface counter | nz +alias spd show port-channel %1 detail all +alias sqnz show interface counter queue | nz +alias srnz show interface counter rate | nz +alias intdesc + !! Usage: intdesc interface-name description + 10 config + 20 int %1 + 30 desc %2 + 40 exit +! +dns domain arista.lab +! +ntp server vrf MGMT 192.168.0.1 iburst source Management0 +! +radius-server host 192.168.0.1 vrf MGMT key 7 0207165218120E +! +aaa group server radius atds + server 192.168.0.1 vrf MGMT +! +aaa authentication login default group atds local +aaa authorization exec default group atds local +aaa authorization commands all default local +! +username Script secret sha512 $6$PNfpb9anSBQ5/aia$phaa3ar5pwkntenD9WHc6Ed5b96lbW0dc0bjtwPnFLaDiCK8D5Cjl6ewP/xdNbl4PtS6Paq.3SssN8pj05NQm. +username admin privilege 15 role network-admin secret 5 $1$5O85YVVn$HrXcfOivJEnISTMb6xrJc. +username arista privilege 15 role network-admin secret 5 $1$4VjIjfd1$XkUVulbNDESHFzcxDU.Tk1 +! +username arista ssh-key ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC+ERvV4GaPq3FzxY8T+5hMF/1T+l8wiPsVCtOrZU4Hy6NCNlAiDBdA/RUtX5/aOu5JvHyPTVHqWJ0qi9BqU3rxCNl/l2/5UZbm9RPzdZ1QCwoYwPB9/j/tYJV8lZdr6t0yGBfxgzD3oW/zF7a+ZtASaMAu7lkgoqPK2pVIGa+Y9ZCsA0Xq756XpLCw+d3pHKHvIkgWLCo9FoeIv8f/bu5u/ztzRE+Nvl+o5add6MxnjsXz3s7BnW2FX6JNjyp0Z+OXjupQc2gcfFvpd/dA2lCNuuaCHkRgyPwIZtWPmNqMRXPp37mlPwV43qDJRVPQkvh0xPxwS35BbzUxWdT+ZLZv +! +ip radius source-interface Management0 +! +ip routing vrf MGMT +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 +! +management api http-commands + no shutdown + vrf MGMT + no shutdown +! +service routing protocols model multi-agent +! +hostname core2-ISP2 +! +interface Management0 + vrf MGMT + ip address 192.168.0.74/24 +! +ip routing +! diff --git a/topologies/training-level7-part2-Test2/files/ceos/host1-DC1/ceos-config b/topologies/training-level7-part2-Test2/files/ceos/host1-DC1/ceos-config new file mode 100644 index 000000000..f554f97db --- /dev/null +++ b/topologies/training-level7-part2-Test2/files/ceos/host1-DC1/ceos-config @@ -0,0 +1,2 @@ +SERIALNUMBER=host1-DC1 +SYSTEMMACADDR=00:1c:73:f1:c6:01 diff --git a/topologies/training-level7-part2-Test2/files/ceos/host1-DC1/startup-config b/topologies/training-level7-part2-Test2/files/ceos/host1-DC1/startup-config new file mode 100644 index 000000000..13bef3cb1 --- /dev/null +++ b/topologies/training-level7-part2-Test2/files/ceos/host1-DC1/startup-config @@ -0,0 +1,62 @@ +vrf instance MGMT +! +daemon TerminAttr + exec /usr/bin/TerminAttr -disableaaa -ingestgrpcurl=192.168.0.5:9910 -taillogs -ingestauth=key,atd-lab -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent -ingestvrf=MGMT + no shutdown +! +alias mlag-reload bash /mnt/flash/shut_intfs && sudo shutdown now -r +alias conint sh interface | i connected +alias senz show interface counter error | nz +alias shmc show int | awk '/^[A-Z]/ { intf = $1 } /, address is/ { print intf, $6 }' +alias snz show interface counter | nz +alias spd show port-channel %1 detail all +alias sqnz show interface counter queue | nz +alias srnz show interface counter rate | nz +alias intdesc + !! Usage: intdesc interface-name description + 10 config + 20 int %1 + 30 desc %2 + 40 exit +! +dns domain arista.lab +! +ntp server vrf MGMT 192.168.0.1 iburst source Management0 +! +radius-server host 192.168.0.1 vrf MGMT key 7 0207165218120E +! +aaa group server radius atds + server 192.168.0.1 vrf MGMT +! +aaa authentication login default group atds local +aaa authorization exec default group atds local +aaa authorization commands all default local +! +username Script secret sha512 $6$PNfpb9anSBQ5/aia$phaa3ar5pwkntenD9WHc6Ed5b96lbW0dc0bjtwPnFLaDiCK8D5Cjl6ewP/xdNbl4PtS6Paq.3SssN8pj05NQm. +username admin privilege 15 role network-admin secret 5 $1$5O85YVVn$HrXcfOivJEnISTMb6xrJc. +username arista privilege 15 role network-admin secret 5 $1$4VjIjfd1$XkUVulbNDESHFzcxDU.Tk1 +! +username arista ssh-key ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC+ERvV4GaPq3FzxY8T+5hMF/1T+l8wiPsVCtOrZU4Hy6NCNlAiDBdA/RUtX5/aOu5JvHyPTVHqWJ0qi9BqU3rxCNl/l2/5UZbm9RPzdZ1QCwoYwPB9/j/tYJV8lZdr6t0yGBfxgzD3oW/zF7a+ZtASaMAu7lkgoqPK2pVIGa+Y9ZCsA0Xq756XpLCw+d3pHKHvIkgWLCo9FoeIv8f/bu5u/ztzRE+Nvl+o5add6MxnjsXz3s7BnW2FX6JNjyp0Z+OXjupQc2gcfFvpd/dA2lCNuuaCHkRgyPwIZtWPmNqMRXPp37mlPwV43qDJRVPQkvh0xPxwS35BbzUxWdT+ZLZv +! +ip radius source-interface Management0 +! +ip routing vrf MGMT +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 +! +management api http-commands + no shutdown + vrf MGMT + no shutdown +! +hostname host1-DC1 +! +spanning-tree mode none +! +service routing protocols model multi-agent +! +interface Management0 + vrf MGMT + ip address 192.168.0.51/24 +! +ip routing \ No newline at end of file diff --git a/topologies/training-level7-part2-Test2/files/ceos/host1-DC2/ceos-config b/topologies/training-level7-part2-Test2/files/ceos/host1-DC2/ceos-config new file mode 100644 index 000000000..cd09f1595 --- /dev/null +++ b/topologies/training-level7-part2-Test2/files/ceos/host1-DC2/ceos-config @@ -0,0 +1,2 @@ +SERIALNUMBER=host1-DC2 +SYSTEMMACADDR=00:1c:73:f3:c6:01 diff --git a/topologies/training-level7-part2-Test2/files/ceos/host1-DC2/startup-config b/topologies/training-level7-part2-Test2/files/ceos/host1-DC2/startup-config new file mode 100644 index 000000000..da68c62a0 --- /dev/null +++ b/topologies/training-level7-part2-Test2/files/ceos/host1-DC2/startup-config @@ -0,0 +1,62 @@ +vrf instance MGMT +! +daemon TerminAttr + exec /usr/bin/TerminAttr -disableaaa -ingestgrpcurl=192.168.0.5:9910 -taillogs -ingestauth=key,atd-lab -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent -ingestvrf=MGMT + no shutdown +! +alias mlag-reload bash /mnt/flash/shut_intfs && sudo shutdown now -r +alias conint sh interface | i connected +alias senz show interface counter error | nz +alias shmc show int | awk '/^[A-Z]/ { intf = $1 } /, address is/ { print intf, $6 }' +alias snz show interface counter | nz +alias spd show port-channel %1 detail all +alias sqnz show interface counter queue | nz +alias srnz show interface counter rate | nz +alias intdesc + !! Usage: intdesc interface-name description + 10 config + 20 int %1 + 30 desc %2 + 40 exit +! +dns domain arista.lab +! +ntp server vrf MGMT 192.168.0.1 iburst source Management0 +! +radius-server host 192.168.0.1 vrf MGMT key 7 0207165218120E +! +aaa group server radius atds + server 192.168.0.1 vrf MGMT +! +aaa authentication login default group atds local +aaa authorization exec default group atds local +aaa authorization commands all default local +! +username Script secret sha512 $6$PNfpb9anSBQ5/aia$phaa3ar5pwkntenD9WHc6Ed5b96lbW0dc0bjtwPnFLaDiCK8D5Cjl6ewP/xdNbl4PtS6Paq.3SssN8pj05NQm. +username admin privilege 15 role network-admin secret 5 $1$5O85YVVn$HrXcfOivJEnISTMb6xrJc. +username arista privilege 15 role network-admin secret 5 $1$4VjIjfd1$XkUVulbNDESHFzcxDU.Tk1 +! +username arista ssh-key ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC+ERvV4GaPq3FzxY8T+5hMF/1T+l8wiPsVCtOrZU4Hy6NCNlAiDBdA/RUtX5/aOu5JvHyPTVHqWJ0qi9BqU3rxCNl/l2/5UZbm9RPzdZ1QCwoYwPB9/j/tYJV8lZdr6t0yGBfxgzD3oW/zF7a+ZtASaMAu7lkgoqPK2pVIGa+Y9ZCsA0Xq756XpLCw+d3pHKHvIkgWLCo9FoeIv8f/bu5u/ztzRE+Nvl+o5add6MxnjsXz3s7BnW2FX6JNjyp0Z+OXjupQc2gcfFvpd/dA2lCNuuaCHkRgyPwIZtWPmNqMRXPp37mlPwV43qDJRVPQkvh0xPxwS35BbzUxWdT+ZLZv +! +ip radius source-interface Management0 +! +ip routing vrf MGMT +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 +! +management api http-commands + no shutdown + vrf MGMT + no shutdown +! +hostname host1-DC2 +! +spanning-tree mode none +! +service routing protocols model multi-agent +! +interface Management0 + vrf MGMT + ip address 192.168.0.53/24 +! +ip routing \ No newline at end of file diff --git a/topologies/training-level7-part2-Test2/files/ceos/host1-DC3/ceos-config b/topologies/training-level7-part2-Test2/files/ceos/host1-DC3/ceos-config new file mode 100644 index 000000000..09b2eeb0b --- /dev/null +++ b/topologies/training-level7-part2-Test2/files/ceos/host1-DC3/ceos-config @@ -0,0 +1,2 @@ +SERIALNUMBER=host1-DC3 +SYSTEMMACADDR=00:1c:73:22:c6:01 diff --git a/topologies/training-level7-part2-Test2/files/ceos/host1-DC3/startup-config b/topologies/training-level7-part2-Test2/files/ceos/host1-DC3/startup-config new file mode 100644 index 000000000..577d41cba --- /dev/null +++ b/topologies/training-level7-part2-Test2/files/ceos/host1-DC3/startup-config @@ -0,0 +1,64 @@ +vrf instance MGMT +! +daemon TerminAttr + exec /usr/bin/TerminAttr -disableaaa -ingestgrpcurl=192.168.0.5:9910 -taillogs -ingestauth=key,atd-lab -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent -ingestvrf=MGMT + no shutdown +! +alias mlag-reload bash /mnt/flash/shut_intfs && sudo shutdown now -r +alias conint sh interface | i connected +alias senz show interface counter error | nz +alias shmc show int | awk '/^[A-Z]/ { intf = $1 } /, address is/ { print intf, $6 }' +alias snz show interface counter | nz +alias spd show port-channel %1 detail all +alias sqnz show interface counter queue | nz +alias srnz show interface counter rate | nz +alias intdesc + !! Usage: intdesc interface-name description + 10 config + 20 int %1 + 30 desc %2 + 40 exit +! +dns domain arista.lab +! +ntp server vrf MGMT 192.168.0.1 iburst source Management0 +! +radius-server host 192.168.0.1 vrf MGMT key 7 0207165218120E +! +aaa group server radius atds + server 192.168.0.1 vrf MGMT +! +aaa authentication login default group atds local +aaa authorization exec default group atds local +aaa authorization commands all default local +! +username Script secret sha512 $6$PNfpb9anSBQ5/aia$phaa3ar5pwkntenD9WHc6Ed5b96lbW0dc0bjtwPnFLaDiCK8D5Cjl6ewP/xdNbl4PtS6Paq.3SssN8pj05NQm. +username admin privilege 15 role network-admin secret 5 $1$5O85YVVn$HrXcfOivJEnISTMb6xrJc. +username arista privilege 15 role network-admin secret 5 $1$4VjIjfd1$XkUVulbNDESHFzcxDU.Tk1 +! +username arista ssh-key ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC+ERvV4GaPq3FzxY8T+5hMF/1T+l8wiPsVCtOrZU4Hy6NCNlAiDBdA/RUtX5/aOu5JvHyPTVHqWJ0qi9BqU3rxCNl/l2/5UZbm9RPzdZ1QCwoYwPB9/j/tYJV8lZdr6t0yGBfxgzD3oW/zF7a+ZtASaMAu7lkgoqPK2pVIGa+Y9ZCsA0Xq756XpLCw+d3pHKHvIkgWLCo9FoeIv8f/bu5u/ztzRE+Nvl+o5add6MxnjsXz3s7BnW2FX6JNjyp0Z+OXjupQc2gcfFvpd/dA2lCNuuaCHkRgyPwIZtWPmNqMRXPp37mlPwV43qDJRVPQkvh0xPxwS35BbzUxWdT+ZLZv +! +ip radius source-interface Management0 +! +ip routing vrf MGMT +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 +! +management api http-commands + no shutdown + vrf MGMT + no shutdown +! +hostname host1-DC3 +! +spanning-tree mode none +! +service routing protocols model multi-agent +! +interface Management0 + vrf MGMT + ip address 192.168.0.82/24 +! +service routing protocols model multi-agent +! +ip routing diff --git a/topologies/training-level7-part2-Test2/files/ceos/host2-DC1/ceos-config b/topologies/training-level7-part2-Test2/files/ceos/host2-DC1/ceos-config new file mode 100644 index 000000000..855945bed --- /dev/null +++ b/topologies/training-level7-part2-Test2/files/ceos/host2-DC1/ceos-config @@ -0,0 +1,2 @@ +SERIALNUMBER=host2-DC1 +SYSTEMMACADDR=00:1c:73:f2:c6:01 diff --git a/topologies/training-level7-part2-Test2/files/ceos/host2-DC1/startup-config b/topologies/training-level7-part2-Test2/files/ceos/host2-DC1/startup-config new file mode 100644 index 000000000..8b20601ec --- /dev/null +++ b/topologies/training-level7-part2-Test2/files/ceos/host2-DC1/startup-config @@ -0,0 +1,62 @@ +vrf instance MGMT +! +daemon TerminAttr + exec /usr/bin/TerminAttr -disableaaa -ingestgrpcurl=192.168.0.5:9910 -taillogs -ingestauth=key,atd-lab -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent -ingestvrf=MGMT + no shutdown +! +alias mlag-reload bash /mnt/flash/shut_intfs && sudo shutdown now -r +alias conint sh interface | i connected +alias senz show interface counter error | nz +alias shmc show int | awk '/^[A-Z]/ { intf = $1 } /, address is/ { print intf, $6 }' +alias snz show interface counter | nz +alias spd show port-channel %1 detail all +alias sqnz show interface counter queue | nz +alias srnz show interface counter rate | nz +alias intdesc + !! Usage: intdesc interface-name description + 10 config + 20 int %1 + 30 desc %2 + 40 exit +! +dns domain arista.lab +! +ntp server vrf MGMT 192.168.0.1 iburst source Management0 +! +radius-server host 192.168.0.1 vrf MGMT key 7 0207165218120E +! +aaa group server radius atds + server 192.168.0.1 vrf MGMT +! +aaa authentication login default group atds local +aaa authorization exec default group atds local +aaa authorization commands all default local +! +username Script secret sha512 $6$PNfpb9anSBQ5/aia$phaa3ar5pwkntenD9WHc6Ed5b96lbW0dc0bjtwPnFLaDiCK8D5Cjl6ewP/xdNbl4PtS6Paq.3SssN8pj05NQm. +username admin privilege 15 role network-admin secret 5 $1$5O85YVVn$HrXcfOivJEnISTMb6xrJc. +username arista privilege 15 role network-admin secret 5 $1$4VjIjfd1$XkUVulbNDESHFzcxDU.Tk1 +! +username arista ssh-key ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC+ERvV4GaPq3FzxY8T+5hMF/1T+l8wiPsVCtOrZU4Hy6NCNlAiDBdA/RUtX5/aOu5JvHyPTVHqWJ0qi9BqU3rxCNl/l2/5UZbm9RPzdZ1QCwoYwPB9/j/tYJV8lZdr6t0yGBfxgzD3oW/zF7a+ZtASaMAu7lkgoqPK2pVIGa+Y9ZCsA0Xq756XpLCw+d3pHKHvIkgWLCo9FoeIv8f/bu5u/ztzRE+Nvl+o5add6MxnjsXz3s7BnW2FX6JNjyp0Z+OXjupQc2gcfFvpd/dA2lCNuuaCHkRgyPwIZtWPmNqMRXPp37mlPwV43qDJRVPQkvh0xPxwS35BbzUxWdT+ZLZv +! +ip radius source-interface Management0 +! +ip routing vrf MGMT +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 +! +management api http-commands + no shutdown + vrf MGMT + no shutdown +! +hostname host2-DC1 +! +spanning-tree mode none +! +service routing protocols model multi-agent +! +interface Management0 + vrf MGMT + ip address 192.168.0.52/24 +! +ip routing \ No newline at end of file diff --git a/topologies/training-level7-part2-Test2/files/ceos/host2-DC2/ceos-config b/topologies/training-level7-part2-Test2/files/ceos/host2-DC2/ceos-config new file mode 100644 index 000000000..cdece32c2 --- /dev/null +++ b/topologies/training-level7-part2-Test2/files/ceos/host2-DC2/ceos-config @@ -0,0 +1,2 @@ +SERIALNUMBER=host2-DC2 +SYSTEMMACADDR=00:1c:73:f4:c6:01 diff --git a/topologies/training-level7-part2-Test2/files/ceos/host2-DC2/startup-config b/topologies/training-level7-part2-Test2/files/ceos/host2-DC2/startup-config new file mode 100644 index 000000000..1d4ca9bf3 --- /dev/null +++ b/topologies/training-level7-part2-Test2/files/ceos/host2-DC2/startup-config @@ -0,0 +1,62 @@ +vrf instance MGMT +! +daemon TerminAttr + exec /usr/bin/TerminAttr -disableaaa -ingestgrpcurl=192.168.0.5:9910 -taillogs -ingestauth=key,atd-lab -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent -ingestvrf=MGMT + no shutdown +! +alias mlag-reload bash /mnt/flash/shut_intfs && sudo shutdown now -r +alias conint sh interface | i connected +alias senz show interface counter error | nz +alias shmc show int | awk '/^[A-Z]/ { intf = $1 } /, address is/ { print intf, $6 }' +alias snz show interface counter | nz +alias spd show port-channel %1 detail all +alias sqnz show interface counter queue | nz +alias srnz show interface counter rate | nz +alias intdesc + !! Usage: intdesc interface-name description + 10 config + 20 int %1 + 30 desc %2 + 40 exit +! +dns domain arista.lab +! +ntp server vrf MGMT 192.168.0.1 iburst source Management0 +! +radius-server host 192.168.0.1 vrf MGMT key 7 0207165218120E +! +aaa group server radius atds + server 192.168.0.1 vrf MGMT +! +aaa authentication login default group atds local +aaa authorization exec default group atds local +aaa authorization commands all default local +! +username Script secret sha512 $6$PNfpb9anSBQ5/aia$phaa3ar5pwkntenD9WHc6Ed5b96lbW0dc0bjtwPnFLaDiCK8D5Cjl6ewP/xdNbl4PtS6Paq.3SssN8pj05NQm. +username admin privilege 15 role network-admin secret 5 $1$5O85YVVn$HrXcfOivJEnISTMb6xrJc. +username arista privilege 15 role network-admin secret 5 $1$4VjIjfd1$XkUVulbNDESHFzcxDU.Tk1 +! +username arista ssh-key ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC+ERvV4GaPq3FzxY8T+5hMF/1T+l8wiPsVCtOrZU4Hy6NCNlAiDBdA/RUtX5/aOu5JvHyPTVHqWJ0qi9BqU3rxCNl/l2/5UZbm9RPzdZ1QCwoYwPB9/j/tYJV8lZdr6t0yGBfxgzD3oW/zF7a+ZtASaMAu7lkgoqPK2pVIGa+Y9ZCsA0Xq756XpLCw+d3pHKHvIkgWLCo9FoeIv8f/bu5u/ztzRE+Nvl+o5add6MxnjsXz3s7BnW2FX6JNjyp0Z+OXjupQc2gcfFvpd/dA2lCNuuaCHkRgyPwIZtWPmNqMRXPp37mlPwV43qDJRVPQkvh0xPxwS35BbzUxWdT+ZLZv +! +ip radius source-interface Management0 +! +ip routing vrf MGMT +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 +! +management api http-commands + no shutdown + vrf MGMT + no shutdown +! +hostname host2-DC2 +! +spanning-tree mode none +! +service routing protocols model multi-agent +! +interface Management0 + vrf MGMT + ip address 192.168.0.54/24 +! +ip routing \ No newline at end of file diff --git a/topologies/training-level7-part2-Test2/files/ceos/host2-DC3/ceos-config b/topologies/training-level7-part2-Test2/files/ceos/host2-DC3/ceos-config new file mode 100644 index 000000000..941e4f147 --- /dev/null +++ b/topologies/training-level7-part2-Test2/files/ceos/host2-DC3/ceos-config @@ -0,0 +1,2 @@ +SERIALNUMBER=host2-DC3 +SYSTEMMACADDR=00:1c:73:23:c6:01 diff --git a/topologies/training-level7-part2-Test2/files/ceos/host2-DC3/startup-config b/topologies/training-level7-part2-Test2/files/ceos/host2-DC3/startup-config new file mode 100644 index 000000000..77eea090f --- /dev/null +++ b/topologies/training-level7-part2-Test2/files/ceos/host2-DC3/startup-config @@ -0,0 +1,63 @@ +vrf instance MGMT +! +daemon TerminAttr + exec /usr/bin/TerminAttr -disableaaa -ingestgrpcurl=192.168.0.5:9910 -taillogs -ingestauth=key,atd-lab -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent -ingestvrf=MGMT + no shutdown +! +alias mlag-reload bash /mnt/flash/shut_intfs && sudo shutdown now -r +alias conint sh interface | i connected +alias senz show interface counter error | nz +alias shmc show int | awk '/^[A-Z]/ { intf = $1 } /, address is/ { print intf, $6 }' +alias snz show interface counter | nz +alias spd show port-channel %1 detail all +alias sqnz show interface counter queue | nz +alias srnz show interface counter rate | nz +alias intdesc + !! Usage: intdesc interface-name description + 10 config + 20 int %1 + 30 desc %2 + 40 exit +! +dns domain arista.lab +! +ntp server vrf MGMT 192.168.0.1 iburst source Management0 +! +radius-server host 192.168.0.1 vrf MGMT key 7 0207165218120E +! +aaa group server radius atds + server 192.168.0.1 vrf MGMT +! +aaa authentication login default group atds local +aaa authorization exec default group atds local +aaa authorization commands all default local +! +username Script secret sha512 $6$PNfpb9anSBQ5/aia$phaa3ar5pwkntenD9WHc6Ed5b96lbW0dc0bjtwPnFLaDiCK8D5Cjl6ewP/xdNbl4PtS6Paq.3SssN8pj05NQm. +username admin privilege 15 role network-admin secret 5 $1$5O85YVVn$HrXcfOivJEnISTMb6xrJc. +username arista privilege 15 role network-admin secret 5 $1$4VjIjfd1$XkUVulbNDESHFzcxDU.Tk1 +! +username arista ssh-key ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC+ERvV4GaPq3FzxY8T+5hMF/1T+l8wiPsVCtOrZU4Hy6NCNlAiDBdA/RUtX5/aOu5JvHyPTVHqWJ0qi9BqU3rxCNl/l2/5UZbm9RPzdZ1QCwoYwPB9/j/tYJV8lZdr6t0yGBfxgzD3oW/zF7a+ZtASaMAu7lkgoqPK2pVIGa+Y9ZCsA0Xq756XpLCw+d3pHKHvIkgWLCo9FoeIv8f/bu5u/ztzRE+Nvl+o5add6MxnjsXz3s7BnW2FX6JNjyp0Z+OXjupQc2gcfFvpd/dA2lCNuuaCHkRgyPwIZtWPmNqMRXPp37mlPwV43qDJRVPQkvh0xPxwS35BbzUxWdT+ZLZv +! +ip radius source-interface Management0 +! +ip routing vrf MGMT +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 +! +management api http-commands + no shutdown + vrf MGMT + no shutdown +! +hostname host2-DC3 +! +spanning-tree mode none +! +interface Management0 + vrf MGMT + ip address 192.168.0.83/24 +! +service routing protocols model multi-agent +! +ip routing +! \ No newline at end of file diff --git a/topologies/training-level7-part2-Test2/files/ceos/internet/ceos-config b/topologies/training-level7-part2-Test2/files/ceos/internet/ceos-config new file mode 100644 index 000000000..cea0a4d9f --- /dev/null +++ b/topologies/training-level7-part2-Test2/files/ceos/internet/ceos-config @@ -0,0 +1,2 @@ +SERIALNUMBER=internet +SYSTEMMACADDR=00:1c:73:15:c6:01 diff --git a/topologies/training-level7-part2-Test2/files/ceos/internet/startup-config b/topologies/training-level7-part2-Test2/files/ceos/internet/startup-config new file mode 100644 index 000000000..eeb9c3ca2 --- /dev/null +++ b/topologies/training-level7-part2-Test2/files/ceos/internet/startup-config @@ -0,0 +1,61 @@ +vrf instance MGMT +! +daemon TerminAttr + exec /usr/bin/TerminAttr -disableaaa -ingestgrpcurl=192.168.0.5:9910 -taillogs -ingestauth=key,atd-lab -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent -ingestvrf=MGMT + no shutdown +! +alias mlag-reload bash /mnt/flash/shut_intfs && sudo shutdown now -r +alias conint sh interface | i connected +alias senz show interface counter error | nz +alias shmc show int | awk '/^[A-Z]/ { intf = $1 } /, address is/ { print intf, $6 }' +alias snz show interface counter | nz +alias spd show port-channel %1 detail all +alias sqnz show interface counter queue | nz +alias srnz show interface counter rate | nz +alias intdesc + !! Usage: intdesc interface-name description + 10 config + 20 int %1 + 30 desc %2 + 40 exit +! +dns domain arista.lab +! +ntp server vrf MGMT 192.168.0.1 iburst source Management0 +! +radius-server host 192.168.0.1 vrf MGMT key 7 0207165218120E +! +aaa group server radius atds + server 192.168.0.1 vrf MGMT +! +aaa authentication login default group atds local +aaa authorization exec default group atds local +aaa authorization commands all default local +! +username Script secret sha512 $6$PNfpb9anSBQ5/aia$phaa3ar5pwkntenD9WHc6Ed5b96lbW0dc0bjtwPnFLaDiCK8D5Cjl6ewP/xdNbl4PtS6Paq.3SssN8pj05NQm. +username admin privilege 15 role network-admin secret 5 $1$5O85YVVn$HrXcfOivJEnISTMb6xrJc. +username arista privilege 15 role network-admin secret 5 $1$4VjIjfd1$XkUVulbNDESHFzcxDU.Tk1 +! +username arista ssh-key ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC+ERvV4GaPq3FzxY8T+5hMF/1T+l8wiPsVCtOrZU4Hy6NCNlAiDBdA/RUtX5/aOu5JvHyPTVHqWJ0qi9BqU3rxCNl/l2/5UZbm9RPzdZ1QCwoYwPB9/j/tYJV8lZdr6t0yGBfxgzD3oW/zF7a+ZtASaMAu7lkgoqPK2pVIGa+Y9ZCsA0Xq756XpLCw+d3pHKHvIkgWLCo9FoeIv8f/bu5u/ztzRE+Nvl+o5add6MxnjsXz3s7BnW2FX6JNjyp0Z+OXjupQc2gcfFvpd/dA2lCNuuaCHkRgyPwIZtWPmNqMRXPp37mlPwV43qDJRVPQkvh0xPxwS35BbzUxWdT+ZLZv +! +ip radius source-interface Management0 +! +ip routing vrf MGMT +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 +! +management api http-commands + no shutdown + vrf MGMT + no shutdown +! +service routing protocols model multi-agent +! +hostname internet +! +interface Management0 + vrf MGMT + ip address 192.168.0.75/24 +! +ip routing +! \ No newline at end of file diff --git a/topologies/training-level7-part2-Test2/files/ceos/leaf1-DC1/ceos-config b/topologies/training-level7-part2-Test2/files/ceos/leaf1-DC1/ceos-config new file mode 100644 index 000000000..fdda85218 --- /dev/null +++ b/topologies/training-level7-part2-Test2/files/ceos/leaf1-DC1/ceos-config @@ -0,0 +1,2 @@ +SERIALNUMBER=leaf1-DC1 +SYSTEMMACADDR=00:1c:73:c1:c6:01 diff --git a/topologies/training-level7-part2-Test2/files/ceos/leaf1-DC1/startup-config b/topologies/training-level7-part2-Test2/files/ceos/leaf1-DC1/startup-config new file mode 100644 index 000000000..33286dc33 --- /dev/null +++ b/topologies/training-level7-part2-Test2/files/ceos/leaf1-DC1/startup-config @@ -0,0 +1,61 @@ +vrf instance MGMT +! +daemon TerminAttr + exec /usr/bin/TerminAttr -disableaaa -ingestgrpcurl=192.168.0.5:9910 -taillogs -ingestauth=key,atd-lab -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent -ingestvrf=MGMT + no shutdown +! +alias mlag-reload bash /mnt/flash/shut_intfs && sudo shutdown now -r +alias conint sh interface | i connected +alias senz show interface counter error | nz +alias shmc show int | awk '/^[A-Z]/ { intf = $1 } /, address is/ { print intf, $6 }' +alias snz show interface counter | nz +alias spd show port-channel %1 detail all +alias sqnz show interface counter queue | nz +alias srnz show interface counter rate | nz +alias intdesc + !! Usage: intdesc interface-name description + 10 config + 20 int %1 + 30 desc %2 + 40 exit +! +dns domain arista.lab +! +ntp server vrf MGMT 192.168.0.1 iburst source Management0 +! +radius-server host 192.168.0.1 vrf MGMT key 7 0207165218120E +! +aaa group server radius atds + server 192.168.0.1 vrf MGMT +! +aaa authentication login default group atds local +aaa authorization exec default group atds local +aaa authorization commands all default local +! +username Script secret sha512 $6$PNfpb9anSBQ5/aia$phaa3ar5pwkntenD9WHc6Ed5b96lbW0dc0bjtwPnFLaDiCK8D5Cjl6ewP/xdNbl4PtS6Paq.3SssN8pj05NQm. +username admin privilege 15 role network-admin secret 5 $1$5O85YVVn$HrXcfOivJEnISTMb6xrJc. +username arista privilege 15 role network-admin secret 5 $1$4VjIjfd1$XkUVulbNDESHFzcxDU.Tk1 +! +username arista ssh-key ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC+ERvV4GaPq3FzxY8T+5hMF/1T+l8wiPsVCtOrZU4Hy6NCNlAiDBdA/RUtX5/aOu5JvHyPTVHqWJ0qi9BqU3rxCNl/l2/5UZbm9RPzdZ1QCwoYwPB9/j/tYJV8lZdr6t0yGBfxgzD3oW/zF7a+ZtASaMAu7lkgoqPK2pVIGa+Y9ZCsA0Xq756XpLCw+d3pHKHvIkgWLCo9FoeIv8f/bu5u/ztzRE+Nvl+o5add6MxnjsXz3s7BnW2FX6JNjyp0Z+OXjupQc2gcfFvpd/dA2lCNuuaCHkRgyPwIZtWPmNqMRXPp37mlPwV43qDJRVPQkvh0xPxwS35BbzUxWdT+ZLZv +! +ip radius source-interface Management0 +! +ip routing vrf MGMT +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 +! +management api http-commands + no shutdown + vrf MGMT + no shutdown +! +hostname leaf1-DC1 +! +interface Management0 + vrf MGMT + ip address 192.168.0.21/24 +! +service routing protocols model multi-agent +! +ip routing +! diff --git a/topologies/training-level7-part2-Test2/files/ceos/leaf1-DC2/ceos-config b/topologies/training-level7-part2-Test2/files/ceos/leaf1-DC2/ceos-config new file mode 100644 index 000000000..77de88785 --- /dev/null +++ b/topologies/training-level7-part2-Test2/files/ceos/leaf1-DC2/ceos-config @@ -0,0 +1,2 @@ +SERIALNUMBER=leaf1-DC2 +SYSTEMMACADDR=00:1c:73:d1:c6:01 diff --git a/topologies/training-level7-part2-Test2/files/ceos/leaf1-DC2/startup-config b/topologies/training-level7-part2-Test2/files/ceos/leaf1-DC2/startup-config new file mode 100644 index 000000000..04f01412f --- /dev/null +++ b/topologies/training-level7-part2-Test2/files/ceos/leaf1-DC2/startup-config @@ -0,0 +1,60 @@ +vrf instance MGMT +! +daemon TerminAttr + exec /usr/bin/TerminAttr -disableaaa -ingestgrpcurl=192.168.0.5:9910 -taillogs -ingestauth=key,atd-lab -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent -ingestvrf=MGMT + no shutdown +! +alias mlag-reload bash /mnt/flash/shut_intfs && sudo shutdown now -r +alias conint sh interface | i connected +alias senz show interface counter error | nz +alias shmc show int | awk '/^[A-Z]/ { intf = $1 } /, address is/ { print intf, $6 }' +alias snz show interface counter | nz +alias spd show port-channel %1 detail all +alias sqnz show interface counter queue | nz +alias srnz show interface counter rate | nz +alias intdesc + !! Usage: intdesc interface-name description + 10 config + 20 int %1 + 30 desc %2 + 40 exit +! +dns domain arista.lab +! +ntp server vrf MGMT 192.168.0.1 iburst source Management0 +! +radius-server host 192.168.0.1 vrf MGMT key 7 0207165218120E +! +aaa group server radius atds + server 192.168.0.1 vrf MGMT +! +aaa authentication login default group atds local +aaa authorization exec default group atds local +aaa authorization commands all default local +! +username Script secret sha512 $6$PNfpb9anSBQ5/aia$phaa3ar5pwkntenD9WHc6Ed5b96lbW0dc0bjtwPnFLaDiCK8D5Cjl6ewP/xdNbl4PtS6Paq.3SssN8pj05NQm. +username admin privilege 15 role network-admin secret 5 $1$5O85YVVn$HrXcfOivJEnISTMb6xrJc. +username arista privilege 15 role network-admin secret 5 $1$4VjIjfd1$XkUVulbNDESHFzcxDU.Tk1 +! +username arista ssh-key ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC+ERvV4GaPq3FzxY8T+5hMF/1T+l8wiPsVCtOrZU4Hy6NCNlAiDBdA/RUtX5/aOu5JvHyPTVHqWJ0qi9BqU3rxCNl/l2/5UZbm9RPzdZ1QCwoYwPB9/j/tYJV8lZdr6t0yGBfxgzD3oW/zF7a+ZtASaMAu7lkgoqPK2pVIGa+Y9ZCsA0Xq756XpLCw+d3pHKHvIkgWLCo9FoeIv8f/bu5u/ztzRE+Nvl+o5add6MxnjsXz3s7BnW2FX6JNjyp0Z+OXjupQc2gcfFvpd/dA2lCNuuaCHkRgyPwIZtWPmNqMRXPp37mlPwV43qDJRVPQkvh0xPxwS35BbzUxWdT+ZLZv +! +ip radius source-interface Management0 +! +ip routing vrf MGMT +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 +! +management api http-commands + no shutdown + vrf MGMT + no shutdown +! +hostname leaf1-DC2 +! +interface Management0 + vrf MGMT + ip address 192.168.0.31/24 +! +service routing protocols model multi-agent +! +ip routing diff --git a/topologies/training-level7-part2-Test2/files/ceos/leaf1-DC3/ceos-config b/topologies/training-level7-part2-Test2/files/ceos/leaf1-DC3/ceos-config new file mode 100644 index 000000000..85451dd71 --- /dev/null +++ b/topologies/training-level7-part2-Test2/files/ceos/leaf1-DC3/ceos-config @@ -0,0 +1,2 @@ +SERIALNUMBER=leaf1-DC3 +SYSTEMMACADDR=00:1c:73:20:c6:01 diff --git a/topologies/training-level7-part2-Test2/files/ceos/leaf1-DC3/startup-config b/topologies/training-level7-part2-Test2/files/ceos/leaf1-DC3/startup-config new file mode 100644 index 000000000..5f006aa90 --- /dev/null +++ b/topologies/training-level7-part2-Test2/files/ceos/leaf1-DC3/startup-config @@ -0,0 +1,61 @@ +vrf instance MGMT +! +daemon TerminAttr + exec /usr/bin/TerminAttr -disableaaa -ingestgrpcurl=192.168.0.5:9910 -taillogs -ingestauth=key,atd-lab -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent -ingestvrf=MGMT + no shutdown +! +alias mlag-reload bash /mnt/flash/shut_intfs && sudo shutdown now -r +alias conint sh interface | i connected +alias senz show interface counter error | nz +alias shmc show int | awk '/^[A-Z]/ { intf = $1 } /, address is/ { print intf, $6 }' +alias snz show interface counter | nz +alias spd show port-channel %1 detail all +alias sqnz show interface counter queue | nz +alias srnz show interface counter rate | nz +alias intdesc + !! Usage: intdesc interface-name description + 10 config + 20 int %1 + 30 desc %2 + 40 exit +! +dns domain arista.lab +! +ntp server vrf MGMT 192.168.0.1 iburst source Management0 +! +radius-server host 192.168.0.1 vrf MGMT key 7 0207165218120E +! +aaa group server radius atds + server 192.168.0.1 vrf MGMT +! +aaa authentication login default group atds local +aaa authorization exec default group atds local +aaa authorization commands all default local +! +username Script secret sha512 $6$PNfpb9anSBQ5/aia$phaa3ar5pwkntenD9WHc6Ed5b96lbW0dc0bjtwPnFLaDiCK8D5Cjl6ewP/xdNbl4PtS6Paq.3SssN8pj05NQm. +username admin privilege 15 role network-admin secret 5 $1$5O85YVVn$HrXcfOivJEnISTMb6xrJc. +username arista privilege 15 role network-admin secret 5 $1$4VjIjfd1$XkUVulbNDESHFzcxDU.Tk1 +! +username arista ssh-key ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC+ERvV4GaPq3FzxY8T+5hMF/1T+l8wiPsVCtOrZU4Hy6NCNlAiDBdA/RUtX5/aOu5JvHyPTVHqWJ0qi9BqU3rxCNl/l2/5UZbm9RPzdZ1QCwoYwPB9/j/tYJV8lZdr6t0yGBfxgzD3oW/zF7a+ZtASaMAu7lkgoqPK2pVIGa+Y9ZCsA0Xq756XpLCw+d3pHKHvIkgWLCo9FoeIv8f/bu5u/ztzRE+Nvl+o5add6MxnjsXz3s7BnW2FX6JNjyp0Z+OXjupQc2gcfFvpd/dA2lCNuuaCHkRgyPwIZtWPmNqMRXPp37mlPwV43qDJRVPQkvh0xPxwS35BbzUxWdT+ZLZv +! +ip radius source-interface Management0 +! +ip routing vrf MGMT +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 +! +management api http-commands + no shutdown + vrf MGMT + no shutdown +! +hostname leaf1-DC3 +! +interface Management0 + vrf MGMT + ip address 192.168.0.80/24 +! +service routing protocols model multi-agent +! +ip routing +! \ No newline at end of file diff --git a/topologies/training-level7-part2-Test2/files/ceos/leaf2-DC1/ceos-config b/topologies/training-level7-part2-Test2/files/ceos/leaf2-DC1/ceos-config new file mode 100644 index 000000000..0e53a9721 --- /dev/null +++ b/topologies/training-level7-part2-Test2/files/ceos/leaf2-DC1/ceos-config @@ -0,0 +1,2 @@ +SERIALNUMBER=leaf2-DC1 +SYSTEMMACADDR=00:1c:73:c2:c6:01 diff --git a/topologies/training-level7-part2-Test2/files/ceos/leaf2-DC1/startup-config b/topologies/training-level7-part2-Test2/files/ceos/leaf2-DC1/startup-config new file mode 100644 index 000000000..b06471fae --- /dev/null +++ b/topologies/training-level7-part2-Test2/files/ceos/leaf2-DC1/startup-config @@ -0,0 +1,61 @@ +vrf instance MGMT +! +daemon TerminAttr + exec /usr/bin/TerminAttr -disableaaa -ingestgrpcurl=192.168.0.5:9910 -taillogs -ingestauth=key,atd-lab -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent -ingestvrf=MGMT + no shutdown +! +alias mlag-reload bash /mnt/flash/shut_intfs && sudo shutdown now -r +alias conint sh interface | i connected +alias senz show interface counter error | nz +alias shmc show int | awk '/^[A-Z]/ { intf = $1 } /, address is/ { print intf, $6 }' +alias snz show interface counter | nz +alias spd show port-channel %1 detail all +alias sqnz show interface counter queue | nz +alias srnz show interface counter rate | nz +alias intdesc + !! Usage: intdesc interface-name description + 10 config + 20 int %1 + 30 desc %2 + 40 exit +! +dns domain arista.lab +! +ntp server vrf MGMT 192.168.0.1 iburst source Management0 +! +radius-server host 192.168.0.1 vrf MGMT key 7 0207165218120E +! +aaa group server radius atds + server 192.168.0.1 vrf MGMT +! +aaa authentication login default group atds local +aaa authorization exec default group atds local +aaa authorization commands all default local +! +username Script secret sha512 $6$PNfpb9anSBQ5/aia$phaa3ar5pwkntenD9WHc6Ed5b96lbW0dc0bjtwPnFLaDiCK8D5Cjl6ewP/xdNbl4PtS6Paq.3SssN8pj05NQm. +username admin privilege 15 role network-admin secret 5 $1$5O85YVVn$HrXcfOivJEnISTMb6xrJc. +username arista privilege 15 role network-admin secret 5 $1$4VjIjfd1$XkUVulbNDESHFzcxDU.Tk1 +! +username arista ssh-key ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC+ERvV4GaPq3FzxY8T+5hMF/1T+l8wiPsVCtOrZU4Hy6NCNlAiDBdA/RUtX5/aOu5JvHyPTVHqWJ0qi9BqU3rxCNl/l2/5UZbm9RPzdZ1QCwoYwPB9/j/tYJV8lZdr6t0yGBfxgzD3oW/zF7a+ZtASaMAu7lkgoqPK2pVIGa+Y9ZCsA0Xq756XpLCw+d3pHKHvIkgWLCo9FoeIv8f/bu5u/ztzRE+Nvl+o5add6MxnjsXz3s7BnW2FX6JNjyp0Z+OXjupQc2gcfFvpd/dA2lCNuuaCHkRgyPwIZtWPmNqMRXPp37mlPwV43qDJRVPQkvh0xPxwS35BbzUxWdT+ZLZv +! +ip radius source-interface Management0 +! +ip routing vrf MGMT +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 +! +management api http-commands + no shutdown + vrf MGMT + no shutdown +! +hostname leaf2-DC1 +! +interface Management0 + vrf MGMT + ip address 192.168.0.22/24 +! +service routing protocols model multi-agent +! +ip routing +! diff --git a/topologies/training-level7-part2-Test2/files/ceos/leaf2-DC2/ceos-config b/topologies/training-level7-part2-Test2/files/ceos/leaf2-DC2/ceos-config new file mode 100644 index 000000000..ed05147ad --- /dev/null +++ b/topologies/training-level7-part2-Test2/files/ceos/leaf2-DC2/ceos-config @@ -0,0 +1,2 @@ +SERIALNUMBER=leaf2-DC2 +SYSTEMMACADDR=00:1c:73:d2:c6:01 diff --git a/topologies/training-level7-part2-Test2/files/ceos/leaf2-DC2/startup-config b/topologies/training-level7-part2-Test2/files/ceos/leaf2-DC2/startup-config new file mode 100644 index 000000000..82e6c9c83 --- /dev/null +++ b/topologies/training-level7-part2-Test2/files/ceos/leaf2-DC2/startup-config @@ -0,0 +1,60 @@ +vrf instance MGMT +! +daemon TerminAttr + exec /usr/bin/TerminAttr -disableaaa -ingestgrpcurl=192.168.0.5:9910 -taillogs -ingestauth=key,atd-lab -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent -ingestvrf=MGMT + no shutdown +! +alias mlag-reload bash /mnt/flash/shut_intfs && sudo shutdown now -r +alias conint sh interface | i connected +alias senz show interface counter error | nz +alias shmc show int | awk '/^[A-Z]/ { intf = $1 } /, address is/ { print intf, $6 }' +alias snz show interface counter | nz +alias spd show port-channel %1 detail all +alias sqnz show interface counter queue | nz +alias srnz show interface counter rate | nz +alias intdesc + !! Usage: intdesc interface-name description + 10 config + 20 int %1 + 30 desc %2 + 40 exit +! +dns domain arista.lab +! +ntp server vrf MGMT 192.168.0.1 iburst source Management0 +! +radius-server host 192.168.0.1 vrf MGMT key 7 0207165218120E +! +aaa group server radius atds + server 192.168.0.1 vrf MGMT +! +aaa authentication login default group atds local +aaa authorization exec default group atds local +aaa authorization commands all default local +! +username Script secret sha512 $6$PNfpb9anSBQ5/aia$phaa3ar5pwkntenD9WHc6Ed5b96lbW0dc0bjtwPnFLaDiCK8D5Cjl6ewP/xdNbl4PtS6Paq.3SssN8pj05NQm. +username admin privilege 15 role network-admin secret 5 $1$5O85YVVn$HrXcfOivJEnISTMb6xrJc. +username arista privilege 15 role network-admin secret 5 $1$4VjIjfd1$XkUVulbNDESHFzcxDU.Tk1 +! +username arista ssh-key ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC+ERvV4GaPq3FzxY8T+5hMF/1T+l8wiPsVCtOrZU4Hy6NCNlAiDBdA/RUtX5/aOu5JvHyPTVHqWJ0qi9BqU3rxCNl/l2/5UZbm9RPzdZ1QCwoYwPB9/j/tYJV8lZdr6t0yGBfxgzD3oW/zF7a+ZtASaMAu7lkgoqPK2pVIGa+Y9ZCsA0Xq756XpLCw+d3pHKHvIkgWLCo9FoeIv8f/bu5u/ztzRE+Nvl+o5add6MxnjsXz3s7BnW2FX6JNjyp0Z+OXjupQc2gcfFvpd/dA2lCNuuaCHkRgyPwIZtWPmNqMRXPp37mlPwV43qDJRVPQkvh0xPxwS35BbzUxWdT+ZLZv +! +ip radius source-interface Management0 +! +ip routing vrf MGMT +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 +! +management api http-commands + no shutdown + vrf MGMT + no shutdown +! +hostname leaf2-DC2 +! +interface Management0 + vrf MGMT + ip address 192.168.0.32/24 +! +service routing protocols model multi-agent +! +ip routing diff --git a/topologies/training-level7-part2-Test2/files/ceos/leaf2-DC3/ceos-config b/topologies/training-level7-part2-Test2/files/ceos/leaf2-DC3/ceos-config new file mode 100644 index 000000000..e53fcfcdf --- /dev/null +++ b/topologies/training-level7-part2-Test2/files/ceos/leaf2-DC3/ceos-config @@ -0,0 +1,2 @@ +SERIALNUMBER=leaf2-DC3 +SYSTEMMACADDR=00:1c:73:21:c6:01 diff --git a/topologies/training-level7-part2-Test2/files/ceos/leaf2-DC3/startup-config b/topologies/training-level7-part2-Test2/files/ceos/leaf2-DC3/startup-config new file mode 100644 index 000000000..d7a0b3a91 --- /dev/null +++ b/topologies/training-level7-part2-Test2/files/ceos/leaf2-DC3/startup-config @@ -0,0 +1,61 @@ +vrf instance MGMT +! +daemon TerminAttr + exec /usr/bin/TerminAttr -disableaaa -ingestgrpcurl=192.168.0.5:9910 -taillogs -ingestauth=key,atd-lab -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent -ingestvrf=MGMT + no shutdown +! +alias mlag-reload bash /mnt/flash/shut_intfs && sudo shutdown now -r +alias conint sh interface | i connected +alias senz show interface counter error | nz +alias shmc show int | awk '/^[A-Z]/ { intf = $1 } /, address is/ { print intf, $6 }' +alias snz show interface counter | nz +alias spd show port-channel %1 detail all +alias sqnz show interface counter queue | nz +alias srnz show interface counter rate | nz +alias intdesc + !! Usage: intdesc interface-name description + 10 config + 20 int %1 + 30 desc %2 + 40 exit +! +dns domain arista.lab +! +ntp server vrf MGMT 192.168.0.1 iburst source Management0 +! +radius-server host 192.168.0.1 vrf MGMT key 7 0207165218120E +! +aaa group server radius atds + server 192.168.0.1 vrf MGMT +! +aaa authentication login default group atds local +aaa authorization exec default group atds local +aaa authorization commands all default local +! +username Script secret sha512 $6$PNfpb9anSBQ5/aia$phaa3ar5pwkntenD9WHc6Ed5b96lbW0dc0bjtwPnFLaDiCK8D5Cjl6ewP/xdNbl4PtS6Paq.3SssN8pj05NQm. +username admin privilege 15 role network-admin secret 5 $1$5O85YVVn$HrXcfOivJEnISTMb6xrJc. +username arista privilege 15 role network-admin secret 5 $1$4VjIjfd1$XkUVulbNDESHFzcxDU.Tk1 +! +username arista ssh-key ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC+ERvV4GaPq3FzxY8T+5hMF/1T+l8wiPsVCtOrZU4Hy6NCNlAiDBdA/RUtX5/aOu5JvHyPTVHqWJ0qi9BqU3rxCNl/l2/5UZbm9RPzdZ1QCwoYwPB9/j/tYJV8lZdr6t0yGBfxgzD3oW/zF7a+ZtASaMAu7lkgoqPK2pVIGa+Y9ZCsA0Xq756XpLCw+d3pHKHvIkgWLCo9FoeIv8f/bu5u/ztzRE+Nvl+o5add6MxnjsXz3s7BnW2FX6JNjyp0Z+OXjupQc2gcfFvpd/dA2lCNuuaCHkRgyPwIZtWPmNqMRXPp37mlPwV43qDJRVPQkvh0xPxwS35BbzUxWdT+ZLZv +! +ip radius source-interface Management0 +! +ip routing vrf MGMT +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 +! +management api http-commands + no shutdown + vrf MGMT + no shutdown +! +hostname leaf2-DC3 +! +interface Management0 + vrf MGMT + ip address 192.168.0.81/24 +! +service routing protocols model multi-agent +! +ip routing +! \ No newline at end of file diff --git a/topologies/training-level7-part2-Test2/files/ceos/leaf3-DC1/ceos-config b/topologies/training-level7-part2-Test2/files/ceos/leaf3-DC1/ceos-config new file mode 100644 index 000000000..5c7abf034 --- /dev/null +++ b/topologies/training-level7-part2-Test2/files/ceos/leaf3-DC1/ceos-config @@ -0,0 +1,2 @@ +SERIALNUMBER=leaf3-DC1 +SYSTEMMACADDR=00:1c:73:c3:c6:01 diff --git a/topologies/training-level7-part2-Test2/files/ceos/leaf3-DC1/startup-config b/topologies/training-level7-part2-Test2/files/ceos/leaf3-DC1/startup-config new file mode 100644 index 000000000..23534faa0 --- /dev/null +++ b/topologies/training-level7-part2-Test2/files/ceos/leaf3-DC1/startup-config @@ -0,0 +1,61 @@ +vrf instance MGMT +! +daemon TerminAttr + exec /usr/bin/TerminAttr -disableaaa -ingestgrpcurl=192.168.0.5:9910 -taillogs -ingestauth=key,atd-lab -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent -ingestvrf=MGMT + no shutdown +! +alias mlag-reload bash /mnt/flash/shut_intfs && sudo shutdown now -r +alias conint sh interface | i connected +alias senz show interface counter error | nz +alias shmc show int | awk '/^[A-Z]/ { intf = $1 } /, address is/ { print intf, $6 }' +alias snz show interface counter | nz +alias spd show port-channel %1 detail all +alias sqnz show interface counter queue | nz +alias srnz show interface counter rate | nz +alias intdesc + !! Usage: intdesc interface-name description + 10 config + 20 int %1 + 30 desc %2 + 40 exit +! +dns domain arista.lab +! +ntp server vrf MGMT 192.168.0.1 iburst source Management0 +! +radius-server host 192.168.0.1 vrf MGMT key 7 0207165218120E +! +aaa group server radius atds + server 192.168.0.1 vrf MGMT +! +aaa authentication login default group atds local +aaa authorization exec default group atds local +aaa authorization commands all default local +! +username Script secret sha512 $6$PNfpb9anSBQ5/aia$phaa3ar5pwkntenD9WHc6Ed5b96lbW0dc0bjtwPnFLaDiCK8D5Cjl6ewP/xdNbl4PtS6Paq.3SssN8pj05NQm. +username admin privilege 15 role network-admin secret 5 $1$5O85YVVn$HrXcfOivJEnISTMb6xrJc. +username arista privilege 15 role network-admin secret 5 $1$4VjIjfd1$XkUVulbNDESHFzcxDU.Tk1 +! +username arista ssh-key ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC+ERvV4GaPq3FzxY8T+5hMF/1T+l8wiPsVCtOrZU4Hy6NCNlAiDBdA/RUtX5/aOu5JvHyPTVHqWJ0qi9BqU3rxCNl/l2/5UZbm9RPzdZ1QCwoYwPB9/j/tYJV8lZdr6t0yGBfxgzD3oW/zF7a+ZtASaMAu7lkgoqPK2pVIGa+Y9ZCsA0Xq756XpLCw+d3pHKHvIkgWLCo9FoeIv8f/bu5u/ztzRE+Nvl+o5add6MxnjsXz3s7BnW2FX6JNjyp0Z+OXjupQc2gcfFvpd/dA2lCNuuaCHkRgyPwIZtWPmNqMRXPp37mlPwV43qDJRVPQkvh0xPxwS35BbzUxWdT+ZLZv +! +ip radius source-interface Management0 +! +ip routing vrf MGMT +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 +! +management api http-commands + no shutdown + vrf MGMT + no shutdown +! +hostname leaf3-DC1 +! +interface Management0 + vrf MGMT + ip address 192.168.0.23/24 +! +service routing protocols model multi-agent +! +ip routing +! diff --git a/topologies/training-level7-part2-Test2/files/ceos/leaf3-DC2/ceos-config b/topologies/training-level7-part2-Test2/files/ceos/leaf3-DC2/ceos-config new file mode 100644 index 000000000..ce9360f0b --- /dev/null +++ b/topologies/training-level7-part2-Test2/files/ceos/leaf3-DC2/ceos-config @@ -0,0 +1,2 @@ +SERIALNUMBER=leaf3-DC2 +SYSTEMMACADDR=00:1c:73:d3:c6:01 diff --git a/topologies/training-level7-part2-Test2/files/ceos/leaf3-DC2/startup-config b/topologies/training-level7-part2-Test2/files/ceos/leaf3-DC2/startup-config new file mode 100644 index 000000000..463c68523 --- /dev/null +++ b/topologies/training-level7-part2-Test2/files/ceos/leaf3-DC2/startup-config @@ -0,0 +1,60 @@ +vrf instance MGMT +! +daemon TerminAttr + exec /usr/bin/TerminAttr -disableaaa -ingestgrpcurl=192.168.0.5:9910 -taillogs -ingestauth=key,atd-lab -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent -ingestvrf=MGMT + no shutdown +! +alias mlag-reload bash /mnt/flash/shut_intfs && sudo shutdown now -r +alias conint sh interface | i connected +alias senz show interface counter error | nz +alias shmc show int | awk '/^[A-Z]/ { intf = $1 } /, address is/ { print intf, $6 }' +alias snz show interface counter | nz +alias spd show port-channel %1 detail all +alias sqnz show interface counter queue | nz +alias srnz show interface counter rate | nz +alias intdesc + !! Usage: intdesc interface-name description + 10 config + 20 int %1 + 30 desc %2 + 40 exit +! +dns domain arista.lab +! +ntp server vrf MGMT 192.168.0.1 iburst source Management0 +! +radius-server host 192.168.0.1 vrf MGMT key 7 0207165218120E +! +aaa group server radius atds + server 192.168.0.1 vrf MGMT +! +aaa authentication login default group atds local +aaa authorization exec default group atds local +aaa authorization commands all default local +! +username Script secret sha512 $6$PNfpb9anSBQ5/aia$phaa3ar5pwkntenD9WHc6Ed5b96lbW0dc0bjtwPnFLaDiCK8D5Cjl6ewP/xdNbl4PtS6Paq.3SssN8pj05NQm. +username admin privilege 15 role network-admin secret 5 $1$5O85YVVn$HrXcfOivJEnISTMb6xrJc. +username arista privilege 15 role network-admin secret 5 $1$4VjIjfd1$XkUVulbNDESHFzcxDU.Tk1 +! +username arista ssh-key ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC+ERvV4GaPq3FzxY8T+5hMF/1T+l8wiPsVCtOrZU4Hy6NCNlAiDBdA/RUtX5/aOu5JvHyPTVHqWJ0qi9BqU3rxCNl/l2/5UZbm9RPzdZ1QCwoYwPB9/j/tYJV8lZdr6t0yGBfxgzD3oW/zF7a+ZtASaMAu7lkgoqPK2pVIGa+Y9ZCsA0Xq756XpLCw+d3pHKHvIkgWLCo9FoeIv8f/bu5u/ztzRE+Nvl+o5add6MxnjsXz3s7BnW2FX6JNjyp0Z+OXjupQc2gcfFvpd/dA2lCNuuaCHkRgyPwIZtWPmNqMRXPp37mlPwV43qDJRVPQkvh0xPxwS35BbzUxWdT+ZLZv +! +ip radius source-interface Management0 +! +ip routing vrf MGMT +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 +! +management api http-commands + no shutdown + vrf MGMT + no shutdown +! +hostname leaf3-DC2 +! +interface Management0 + vrf MGMT + ip address 192.168.0.33/24 +! +service routing protocols model multi-agent +! +ip routing diff --git a/topologies/training-level7-part2-Test2/files/ceos/leaf4-DC1/ceos-config b/topologies/training-level7-part2-Test2/files/ceos/leaf4-DC1/ceos-config new file mode 100644 index 000000000..a0c1fbd9c --- /dev/null +++ b/topologies/training-level7-part2-Test2/files/ceos/leaf4-DC1/ceos-config @@ -0,0 +1,2 @@ +SERIALNUMBER=leaf4-DC1 +SYSTEMMACADDR=00:1c:73:c4:c6:01 diff --git a/topologies/training-level7-part2-Test2/files/ceos/leaf4-DC1/startup-config b/topologies/training-level7-part2-Test2/files/ceos/leaf4-DC1/startup-config new file mode 100644 index 000000000..cb67868fb --- /dev/null +++ b/topologies/training-level7-part2-Test2/files/ceos/leaf4-DC1/startup-config @@ -0,0 +1,61 @@ +vrf instance MGMT +! +daemon TerminAttr + exec /usr/bin/TerminAttr -disableaaa -ingestgrpcurl=192.168.0.5:9910 -taillogs -ingestauth=key,atd-lab -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent -ingestvrf=MGMT + no shutdown +! +alias mlag-reload bash /mnt/flash/shut_intfs && sudo shutdown now -r +alias conint sh interface | i connected +alias senz show interface counter error | nz +alias shmc show int | awk '/^[A-Z]/ { intf = $1 } /, address is/ { print intf, $6 }' +alias snz show interface counter | nz +alias spd show port-channel %1 detail all +alias sqnz show interface counter queue | nz +alias srnz show interface counter rate | nz +alias intdesc + !! Usage: intdesc interface-name description + 10 config + 20 int %1 + 30 desc %2 + 40 exit +! +dns domain arista.lab +! +ntp server vrf MGMT 192.168.0.1 iburst source Management0 +! +radius-server host 192.168.0.1 vrf MGMT key 7 0207165218120E +! +aaa group server radius atds + server 192.168.0.1 vrf MGMT +! +aaa authentication login default group atds local +aaa authorization exec default group atds local +aaa authorization commands all default local +! +username Script secret sha512 $6$PNfpb9anSBQ5/aia$phaa3ar5pwkntenD9WHc6Ed5b96lbW0dc0bjtwPnFLaDiCK8D5Cjl6ewP/xdNbl4PtS6Paq.3SssN8pj05NQm. +username admin privilege 15 role network-admin secret 5 $1$5O85YVVn$HrXcfOivJEnISTMb6xrJc. +username arista privilege 15 role network-admin secret 5 $1$4VjIjfd1$XkUVulbNDESHFzcxDU.Tk1 +! +username arista ssh-key ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC+ERvV4GaPq3FzxY8T+5hMF/1T+l8wiPsVCtOrZU4Hy6NCNlAiDBdA/RUtX5/aOu5JvHyPTVHqWJ0qi9BqU3rxCNl/l2/5UZbm9RPzdZ1QCwoYwPB9/j/tYJV8lZdr6t0yGBfxgzD3oW/zF7a+ZtASaMAu7lkgoqPK2pVIGa+Y9ZCsA0Xq756XpLCw+d3pHKHvIkgWLCo9FoeIv8f/bu5u/ztzRE+Nvl+o5add6MxnjsXz3s7BnW2FX6JNjyp0Z+OXjupQc2gcfFvpd/dA2lCNuuaCHkRgyPwIZtWPmNqMRXPp37mlPwV43qDJRVPQkvh0xPxwS35BbzUxWdT+ZLZv +! +ip radius source-interface Management0 +! +ip routing vrf MGMT +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 +! +management api http-commands + no shutdown + vrf MGMT + no shutdown +! +hostname leaf4-DC1 +! +interface Management0 + vrf MGMT + ip address 192.168.0.24/24 +! +service routing protocols model multi-agent +! +ip routing +! diff --git a/topologies/training-level7-part2-Test2/files/ceos/leaf4-DC2/ceos-config b/topologies/training-level7-part2-Test2/files/ceos/leaf4-DC2/ceos-config new file mode 100644 index 000000000..47d05306c --- /dev/null +++ b/topologies/training-level7-part2-Test2/files/ceos/leaf4-DC2/ceos-config @@ -0,0 +1,2 @@ +SERIALNUMBER=leaf4-DC2 +SYSTEMMACADDR=00:1c:73:d4:c6:01 diff --git a/topologies/training-level7-part2-Test2/files/ceos/leaf4-DC2/startup-config b/topologies/training-level7-part2-Test2/files/ceos/leaf4-DC2/startup-config new file mode 100644 index 000000000..36332b266 --- /dev/null +++ b/topologies/training-level7-part2-Test2/files/ceos/leaf4-DC2/startup-config @@ -0,0 +1,60 @@ +vrf instance MGMT +! +daemon TerminAttr + exec /usr/bin/TerminAttr -disableaaa -ingestgrpcurl=192.168.0.5:9910 -taillogs -ingestauth=key,atd-lab -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent -ingestvrf=MGMT + no shutdown +! +alias mlag-reload bash /mnt/flash/shut_intfs && sudo shutdown now -r +alias conint sh interface | i connected +alias senz show interface counter error | nz +alias shmc show int | awk '/^[A-Z]/ { intf = $1 } /, address is/ { print intf, $6 }' +alias snz show interface counter | nz +alias spd show port-channel %1 detail all +alias sqnz show interface counter queue | nz +alias srnz show interface counter rate | nz +alias intdesc + !! Usage: intdesc interface-name description + 10 config + 20 int %1 + 30 desc %2 + 40 exit +! +dns domain arista.lab +! +ntp server vrf MGMT 192.168.0.1 iburst source Management0 +! +radius-server host 192.168.0.1 vrf MGMT key 7 0207165218120E +! +aaa group server radius atds + server 192.168.0.1 vrf MGMT +! +aaa authentication login default group atds local +aaa authorization exec default group atds local +aaa authorization commands all default local +! +username Script secret sha512 $6$PNfpb9anSBQ5/aia$phaa3ar5pwkntenD9WHc6Ed5b96lbW0dc0bjtwPnFLaDiCK8D5Cjl6ewP/xdNbl4PtS6Paq.3SssN8pj05NQm. +username admin privilege 15 role network-admin secret 5 $1$5O85YVVn$HrXcfOivJEnISTMb6xrJc. +username arista privilege 15 role network-admin secret 5 $1$4VjIjfd1$XkUVulbNDESHFzcxDU.Tk1 +! +username arista ssh-key ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC+ERvV4GaPq3FzxY8T+5hMF/1T+l8wiPsVCtOrZU4Hy6NCNlAiDBdA/RUtX5/aOu5JvHyPTVHqWJ0qi9BqU3rxCNl/l2/5UZbm9RPzdZ1QCwoYwPB9/j/tYJV8lZdr6t0yGBfxgzD3oW/zF7a+ZtASaMAu7lkgoqPK2pVIGa+Y9ZCsA0Xq756XpLCw+d3pHKHvIkgWLCo9FoeIv8f/bu5u/ztzRE+Nvl+o5add6MxnjsXz3s7BnW2FX6JNjyp0Z+OXjupQc2gcfFvpd/dA2lCNuuaCHkRgyPwIZtWPmNqMRXPp37mlPwV43qDJRVPQkvh0xPxwS35BbzUxWdT+ZLZv +! +ip radius source-interface Management0 +! +ip routing vrf MGMT +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 +! +management api http-commands + no shutdown + vrf MGMT + no shutdown +! +hostname leaf4-DC2 +! +interface Management0 + vrf MGMT + ip address 192.168.0.34/24 +! +service routing protocols model multi-agent +! +ip routing diff --git a/topologies/training-level7-part2-Test2/files/ceos/spine1-DC1/ceos-config b/topologies/training-level7-part2-Test2/files/ceos/spine1-DC1/ceos-config new file mode 100644 index 000000000..9b7d61422 --- /dev/null +++ b/topologies/training-level7-part2-Test2/files/ceos/spine1-DC1/ceos-config @@ -0,0 +1,2 @@ +SERIALNUMBER=spine1-DC1 +SYSTEMMACADDR=00:1c:73:b1:c6:01 diff --git a/topologies/training-level7-part2-Test2/files/ceos/spine1-DC1/startup-config b/topologies/training-level7-part2-Test2/files/ceos/spine1-DC1/startup-config new file mode 100644 index 000000000..6fac483c4 --- /dev/null +++ b/topologies/training-level7-part2-Test2/files/ceos/spine1-DC1/startup-config @@ -0,0 +1,61 @@ +vrf instance MGMT +! +daemon TerminAttr + exec /usr/bin/TerminAttr -disableaaa -ingestgrpcurl=192.168.0.5:9910 -taillogs -ingestauth=key,atd-lab -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent -ingestvrf=MGMT + no shutdown +! +alias mlag-reload bash /mnt/flash/shut_intfs && sudo shutdown now -r +alias conint sh interface | i connected +alias senz show interface counter error | nz +alias shmc show int | awk '/^[A-Z]/ { intf = $1 } /, address is/ { print intf, $6 }' +alias snz show interface counter | nz +alias spd show port-channel %1 detail all +alias sqnz show interface counter queue | nz +alias srnz show interface counter rate | nz +alias intdesc + !! Usage: intdesc interface-name description + 10 config + 20 int %1 + 30 desc %2 + 40 exit +! +dns domain arista.lab +! +ntp server vrf MGMT 192.168.0.1 iburst source Management0 +! +radius-server host 192.168.0.1 vrf MGMT key 7 0207165218120E +! +aaa group server radius atds + server 192.168.0.1 vrf MGMT +! +aaa authentication login default group atds local +aaa authorization exec default group atds local +aaa authorization commands all default local +! +username Script secret sha512 $6$PNfpb9anSBQ5/aia$phaa3ar5pwkntenD9WHc6Ed5b96lbW0dc0bjtwPnFLaDiCK8D5Cjl6ewP/xdNbl4PtS6Paq.3SssN8pj05NQm. +username admin privilege 15 role network-admin secret 5 $1$5O85YVVn$HrXcfOivJEnISTMb6xrJc. +username arista privilege 15 role network-admin secret 5 $1$4VjIjfd1$XkUVulbNDESHFzcxDU.Tk1 +! +username arista ssh-key ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC+ERvV4GaPq3FzxY8T+5hMF/1T+l8wiPsVCtOrZU4Hy6NCNlAiDBdA/RUtX5/aOu5JvHyPTVHqWJ0qi9BqU3rxCNl/l2/5UZbm9RPzdZ1QCwoYwPB9/j/tYJV8lZdr6t0yGBfxgzD3oW/zF7a+ZtASaMAu7lkgoqPK2pVIGa+Y9ZCsA0Xq756XpLCw+d3pHKHvIkgWLCo9FoeIv8f/bu5u/ztzRE+Nvl+o5add6MxnjsXz3s7BnW2FX6JNjyp0Z+OXjupQc2gcfFvpd/dA2lCNuuaCHkRgyPwIZtWPmNqMRXPp37mlPwV43qDJRVPQkvh0xPxwS35BbzUxWdT+ZLZv +! +ip radius source-interface Management0 +! +ip routing vrf MGMT +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 +! +management api http-commands + no shutdown + vrf MGMT + no shutdown +! +hostname spine1-DC1 +! +interface Management0 + vrf MGMT + ip address 192.168.0.11/24 +! +service routing protocols model multi-agent +! +ip routing +! diff --git a/topologies/training-level7-part2-Test2/files/ceos/spine1-DC2/ceos-config b/topologies/training-level7-part2-Test2/files/ceos/spine1-DC2/ceos-config new file mode 100644 index 000000000..431bc4267 --- /dev/null +++ b/topologies/training-level7-part2-Test2/files/ceos/spine1-DC2/ceos-config @@ -0,0 +1,2 @@ +SERIALNUMBER=spine1-DC2 +SYSTEMMACADDR=00:1c:73:b4:c6:01 diff --git a/topologies/training-level7-part2-Test2/files/ceos/spine1-DC2/startup-config b/topologies/training-level7-part2-Test2/files/ceos/spine1-DC2/startup-config new file mode 100644 index 000000000..6f25c5064 --- /dev/null +++ b/topologies/training-level7-part2-Test2/files/ceos/spine1-DC2/startup-config @@ -0,0 +1,60 @@ +vrf instance MGMT +! +daemon TerminAttr + exec /usr/bin/TerminAttr -disableaaa -ingestgrpcurl=192.168.0.5:9910 -taillogs -ingestauth=key,atd-lab -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent -ingestvrf=MGMT + no shutdown +! +alias mlag-reload bash /mnt/flash/shut_intfs && sudo shutdown now -r +alias conint sh interface | i connected +alias senz show interface counter error | nz +alias shmc show int | awk '/^[A-Z]/ { intf = $1 } /, address is/ { print intf, $6 }' +alias snz show interface counter | nz +alias spd show port-channel %1 detail all +alias sqnz show interface counter queue | nz +alias srnz show interface counter rate | nz +alias intdesc + !! Usage: intdesc interface-name description + 10 config + 20 int %1 + 30 desc %2 + 40 exit +! +dns domain arista.lab +! +ntp server vrf MGMT 192.168.0.1 iburst source Management0 +! +radius-server host 192.168.0.1 vrf MGMT key 7 0207165218120E +! +aaa group server radius atds + server 192.168.0.1 vrf MGMT +! +aaa authentication login default group atds local +aaa authorization exec default group atds local +aaa authorization commands all default local +! +username Script secret sha512 $6$PNfpb9anSBQ5/aia$phaa3ar5pwkntenD9WHc6Ed5b96lbW0dc0bjtwPnFLaDiCK8D5Cjl6ewP/xdNbl4PtS6Paq.3SssN8pj05NQm. +username admin privilege 15 role network-admin secret 5 $1$5O85YVVn$HrXcfOivJEnISTMb6xrJc. +username arista privilege 15 role network-admin secret 5 $1$4VjIjfd1$XkUVulbNDESHFzcxDU.Tk1 +! +username arista ssh-key ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC+ERvV4GaPq3FzxY8T+5hMF/1T+l8wiPsVCtOrZU4Hy6NCNlAiDBdA/RUtX5/aOu5JvHyPTVHqWJ0qi9BqU3rxCNl/l2/5UZbm9RPzdZ1QCwoYwPB9/j/tYJV8lZdr6t0yGBfxgzD3oW/zF7a+ZtASaMAu7lkgoqPK2pVIGa+Y9ZCsA0Xq756XpLCw+d3pHKHvIkgWLCo9FoeIv8f/bu5u/ztzRE+Nvl+o5add6MxnjsXz3s7BnW2FX6JNjyp0Z+OXjupQc2gcfFvpd/dA2lCNuuaCHkRgyPwIZtWPmNqMRXPp37mlPwV43qDJRVPQkvh0xPxwS35BbzUxWdT+ZLZv +! +ip radius source-interface Management0 +! +ip routing vrf MGMT +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 +! +management api http-commands + no shutdown + vrf MGMT + no shutdown +! +hostname spine1-DC2 +! +interface Management0 + vrf MGMT + ip address 192.168.0.14/24 +! +service routing protocols model multi-agent +! +ip routing \ No newline at end of file diff --git a/topologies/training-level7-part2-Test2/files/ceos/spine1-DC3/ceos-config b/topologies/training-level7-part2-Test2/files/ceos/spine1-DC3/ceos-config new file mode 100644 index 000000000..174608c63 --- /dev/null +++ b/topologies/training-level7-part2-Test2/files/ceos/spine1-DC3/ceos-config @@ -0,0 +1,2 @@ +SERIALNUMBER=spine1-DC3 +SYSTEMMACADDR=00:1c:73:17:c6:01 diff --git a/topologies/training-level7-part2-Test2/files/ceos/spine1-DC3/startup-config b/topologies/training-level7-part2-Test2/files/ceos/spine1-DC3/startup-config new file mode 100644 index 000000000..b553b8e63 --- /dev/null +++ b/topologies/training-level7-part2-Test2/files/ceos/spine1-DC3/startup-config @@ -0,0 +1,61 @@ +vrf instance MGMT +! +daemon TerminAttr + exec /usr/bin/TerminAttr -disableaaa -ingestgrpcurl=192.168.0.5:9910 -taillogs -ingestauth=key,atd-lab -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent -ingestvrf=MGMT + no shutdown +! +alias mlag-reload bash /mnt/flash/shut_intfs && sudo shutdown now -r +alias conint sh interface | i connected +alias senz show interface counter error | nz +alias shmc show int | awk '/^[A-Z]/ { intf = $1 } /, address is/ { print intf, $6 }' +alias snz show interface counter | nz +alias spd show port-channel %1 detail all +alias sqnz show interface counter queue | nz +alias srnz show interface counter rate | nz +alias intdesc + !! Usage: intdesc interface-name description + 10 config + 20 int %1 + 30 desc %2 + 40 exit +! +dns domain arista.lab +! +ntp server vrf MGMT 192.168.0.1 iburst source Management0 +! +radius-server host 192.168.0.1 vrf MGMT key 7 0207165218120E +! +aaa group server radius atds + server 192.168.0.1 vrf MGMT +! +aaa authentication login default group atds local +aaa authorization exec default group atds local +aaa authorization commands all default local +! +username Script secret sha512 $6$PNfpb9anSBQ5/aia$phaa3ar5pwkntenD9WHc6Ed5b96lbW0dc0bjtwPnFLaDiCK8D5Cjl6ewP/xdNbl4PtS6Paq.3SssN8pj05NQm. +username admin privilege 15 role network-admin secret 5 $1$5O85YVVn$HrXcfOivJEnISTMb6xrJc. +username arista privilege 15 role network-admin secret 5 $1$4VjIjfd1$XkUVulbNDESHFzcxDU.Tk1 +! +username arista ssh-key ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC+ERvV4GaPq3FzxY8T+5hMF/1T+l8wiPsVCtOrZU4Hy6NCNlAiDBdA/RUtX5/aOu5JvHyPTVHqWJ0qi9BqU3rxCNl/l2/5UZbm9RPzdZ1QCwoYwPB9/j/tYJV8lZdr6t0yGBfxgzD3oW/zF7a+ZtASaMAu7lkgoqPK2pVIGa+Y9ZCsA0Xq756XpLCw+d3pHKHvIkgWLCo9FoeIv8f/bu5u/ztzRE+Nvl+o5add6MxnjsXz3s7BnW2FX6JNjyp0Z+OXjupQc2gcfFvpd/dA2lCNuuaCHkRgyPwIZtWPmNqMRXPp37mlPwV43qDJRVPQkvh0xPxwS35BbzUxWdT+ZLZv +! +ip radius source-interface Management0 +! +ip routing vrf MGMT +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 +! +management api http-commands + no shutdown + vrf MGMT + no shutdown +! +hostname spine1-DC3 +! +interface Management0 + vrf MGMT + ip address 192.168.0.77/24 +! +service routing protocols model multi-agent +! +ip routing +! \ No newline at end of file diff --git a/topologies/training-level7-part2-Test2/files/ceos/spine2-DC1/ceos-config b/topologies/training-level7-part2-Test2/files/ceos/spine2-DC1/ceos-config new file mode 100644 index 000000000..79d76b2fd --- /dev/null +++ b/topologies/training-level7-part2-Test2/files/ceos/spine2-DC1/ceos-config @@ -0,0 +1,2 @@ +SERIALNUMBER=spine2-DC1 +SYSTEMMACADDR=00:1c:73:b2:c6:01 diff --git a/topologies/training-level7-part2-Test2/files/ceos/spine2-DC1/startup-config b/topologies/training-level7-part2-Test2/files/ceos/spine2-DC1/startup-config new file mode 100644 index 000000000..cf7e132a9 --- /dev/null +++ b/topologies/training-level7-part2-Test2/files/ceos/spine2-DC1/startup-config @@ -0,0 +1,61 @@ +vrf instance MGMT +! +daemon TerminAttr + exec /usr/bin/TerminAttr -disableaaa -ingestgrpcurl=192.168.0.5:9910 -taillogs -ingestauth=key,atd-lab -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent -ingestvrf=MGMT + no shutdown +! +alias mlag-reload bash /mnt/flash/shut_intfs && sudo shutdown now -r +alias conint sh interface | i connected +alias senz show interface counter error | nz +alias shmc show int | awk '/^[A-Z]/ { intf = $1 } /, address is/ { print intf, $6 }' +alias snz show interface counter | nz +alias spd show port-channel %1 detail all +alias sqnz show interface counter queue | nz +alias srnz show interface counter rate | nz +alias intdesc + !! Usage: intdesc interface-name description + 10 config + 20 int %1 + 30 desc %2 + 40 exit +! +dns domain arista.lab +! +ntp server vrf MGMT 192.168.0.1 iburst source Management0 +! +radius-server host 192.168.0.1 vrf MGMT key 7 0207165218120E +! +aaa group server radius atds + server 192.168.0.1 vrf MGMT +! +aaa authentication login default group atds local +aaa authorization exec default group atds local +aaa authorization commands all default local +! +username Script secret sha512 $6$PNfpb9anSBQ5/aia$phaa3ar5pwkntenD9WHc6Ed5b96lbW0dc0bjtwPnFLaDiCK8D5Cjl6ewP/xdNbl4PtS6Paq.3SssN8pj05NQm. +username admin privilege 15 role network-admin secret 5 $1$5O85YVVn$HrXcfOivJEnISTMb6xrJc. +username arista privilege 15 role network-admin secret 5 $1$4VjIjfd1$XkUVulbNDESHFzcxDU.Tk1 +! +username arista ssh-key ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC+ERvV4GaPq3FzxY8T+5hMF/1T+l8wiPsVCtOrZU4Hy6NCNlAiDBdA/RUtX5/aOu5JvHyPTVHqWJ0qi9BqU3rxCNl/l2/5UZbm9RPzdZ1QCwoYwPB9/j/tYJV8lZdr6t0yGBfxgzD3oW/zF7a+ZtASaMAu7lkgoqPK2pVIGa+Y9ZCsA0Xq756XpLCw+d3pHKHvIkgWLCo9FoeIv8f/bu5u/ztzRE+Nvl+o5add6MxnjsXz3s7BnW2FX6JNjyp0Z+OXjupQc2gcfFvpd/dA2lCNuuaCHkRgyPwIZtWPmNqMRXPp37mlPwV43qDJRVPQkvh0xPxwS35BbzUxWdT+ZLZv +! +ip radius source-interface Management0 +! +ip routing vrf MGMT +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 +! +management api http-commands + no shutdown + vrf MGMT + no shutdown +! +hostname spine2-DC1 +! +interface Management0 + vrf MGMT + ip address 192.168.0.12/24 +! +service routing protocols model multi-agent +! +ip routing +! diff --git a/topologies/training-level7-part2-Test2/files/ceos/spine2-DC2/ceos-config b/topologies/training-level7-part2-Test2/files/ceos/spine2-DC2/ceos-config new file mode 100644 index 000000000..afd5ce2a8 --- /dev/null +++ b/topologies/training-level7-part2-Test2/files/ceos/spine2-DC2/ceos-config @@ -0,0 +1,2 @@ +SERIALNUMBER=spine2-DC2 +SYSTEMMACADDR=00:1c:73:b5:c6:01 diff --git a/topologies/training-level7-part2-Test2/files/ceos/spine2-DC2/startup-config b/topologies/training-level7-part2-Test2/files/ceos/spine2-DC2/startup-config new file mode 100644 index 000000000..40c19e41f --- /dev/null +++ b/topologies/training-level7-part2-Test2/files/ceos/spine2-DC2/startup-config @@ -0,0 +1,60 @@ +vrf instance MGMT +! +daemon TerminAttr + exec /usr/bin/TerminAttr -disableaaa -ingestgrpcurl=192.168.0.5:9910 -taillogs -ingestauth=key,atd-lab -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent -ingestvrf=MGMT + no shutdown +! +alias mlag-reload bash /mnt/flash/shut_intfs && sudo shutdown now -r +alias conint sh interface | i connected +alias senz show interface counter error | nz +alias shmc show int | awk '/^[A-Z]/ { intf = $1 } /, address is/ { print intf, $6 }' +alias snz show interface counter | nz +alias spd show port-channel %1 detail all +alias sqnz show interface counter queue | nz +alias srnz show interface counter rate | nz +alias intdesc + !! Usage: intdesc interface-name description + 10 config + 20 int %1 + 30 desc %2 + 40 exit +! +dns domain arista.lab +! +ntp server vrf MGMT 192.168.0.1 iburst source Management0 +! +radius-server host 192.168.0.1 vrf MGMT key 7 0207165218120E +! +aaa group server radius atds + server 192.168.0.1 vrf MGMT +! +aaa authentication login default group atds local +aaa authorization exec default group atds local +aaa authorization commands all default local +! +username Script secret sha512 $6$PNfpb9anSBQ5/aia$phaa3ar5pwkntenD9WHc6Ed5b96lbW0dc0bjtwPnFLaDiCK8D5Cjl6ewP/xdNbl4PtS6Paq.3SssN8pj05NQm. +username admin privilege 15 role network-admin secret 5 $1$5O85YVVn$HrXcfOivJEnISTMb6xrJc. +username arista privilege 15 role network-admin secret 5 $1$4VjIjfd1$XkUVulbNDESHFzcxDU.Tk1 +! +username arista ssh-key ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC+ERvV4GaPq3FzxY8T+5hMF/1T+l8wiPsVCtOrZU4Hy6NCNlAiDBdA/RUtX5/aOu5JvHyPTVHqWJ0qi9BqU3rxCNl/l2/5UZbm9RPzdZ1QCwoYwPB9/j/tYJV8lZdr6t0yGBfxgzD3oW/zF7a+ZtASaMAu7lkgoqPK2pVIGa+Y9ZCsA0Xq756XpLCw+d3pHKHvIkgWLCo9FoeIv8f/bu5u/ztzRE+Nvl+o5add6MxnjsXz3s7BnW2FX6JNjyp0Z+OXjupQc2gcfFvpd/dA2lCNuuaCHkRgyPwIZtWPmNqMRXPp37mlPwV43qDJRVPQkvh0xPxwS35BbzUxWdT+ZLZv +! +ip radius source-interface Management0 +! +ip routing vrf MGMT +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 +! +management api http-commands + no shutdown + vrf MGMT + no shutdown +! +hostname spine2-DC2 +! +interface Management0 + vrf MGMT + ip address 192.168.0.15/24 +! +service routing protocols model multi-agent +! +ip routing diff --git a/topologies/training-level7-part2-Test2/files/ceos/spine2-DC3/ceos-config b/topologies/training-level7-part2-Test2/files/ceos/spine2-DC3/ceos-config new file mode 100644 index 000000000..4d8312c42 --- /dev/null +++ b/topologies/training-level7-part2-Test2/files/ceos/spine2-DC3/ceos-config @@ -0,0 +1,2 @@ +SERIALNUMBER=spine2-DC3 +SYSTEMMACADDR=00:1c:73:18:c6:01 diff --git a/topologies/training-level7-part2-Test2/files/ceos/spine2-DC3/startup-config b/topologies/training-level7-part2-Test2/files/ceos/spine2-DC3/startup-config new file mode 100644 index 000000000..6c0094cb4 --- /dev/null +++ b/topologies/training-level7-part2-Test2/files/ceos/spine2-DC3/startup-config @@ -0,0 +1,61 @@ +vrf instance MGMT +! +daemon TerminAttr + exec /usr/bin/TerminAttr -disableaaa -ingestgrpcurl=192.168.0.5:9910 -taillogs -ingestauth=key,atd-lab -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent -ingestvrf=MGMT + no shutdown +! +alias mlag-reload bash /mnt/flash/shut_intfs && sudo shutdown now -r +alias conint sh interface | i connected +alias senz show interface counter error | nz +alias shmc show int | awk '/^[A-Z]/ { intf = $1 } /, address is/ { print intf, $6 }' +alias snz show interface counter | nz +alias spd show port-channel %1 detail all +alias sqnz show interface counter queue | nz +alias srnz show interface counter rate | nz +alias intdesc + !! Usage: intdesc interface-name description + 10 config + 20 int %1 + 30 desc %2 + 40 exit +! +dns domain arista.lab +! +ntp server vrf MGMT 192.168.0.1 iburst source Management0 +! +radius-server host 192.168.0.1 vrf MGMT key 7 0207165218120E +! +aaa group server radius atds + server 192.168.0.1 vrf MGMT +! +aaa authentication login default group atds local +aaa authorization exec default group atds local +aaa authorization commands all default local +! +username Script secret sha512 $6$PNfpb9anSBQ5/aia$phaa3ar5pwkntenD9WHc6Ed5b96lbW0dc0bjtwPnFLaDiCK8D5Cjl6ewP/xdNbl4PtS6Paq.3SssN8pj05NQm. +username admin privilege 15 role network-admin secret 5 $1$5O85YVVn$HrXcfOivJEnISTMb6xrJc. +username arista privilege 15 role network-admin secret 5 $1$4VjIjfd1$XkUVulbNDESHFzcxDU.Tk1 +! +username arista ssh-key ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC+ERvV4GaPq3FzxY8T+5hMF/1T+l8wiPsVCtOrZU4Hy6NCNlAiDBdA/RUtX5/aOu5JvHyPTVHqWJ0qi9BqU3rxCNl/l2/5UZbm9RPzdZ1QCwoYwPB9/j/tYJV8lZdr6t0yGBfxgzD3oW/zF7a+ZtASaMAu7lkgoqPK2pVIGa+Y9ZCsA0Xq756XpLCw+d3pHKHvIkgWLCo9FoeIv8f/bu5u/ztzRE+Nvl+o5add6MxnjsXz3s7BnW2FX6JNjyp0Z+OXjupQc2gcfFvpd/dA2lCNuuaCHkRgyPwIZtWPmNqMRXPp37mlPwV43qDJRVPQkvh0xPxwS35BbzUxWdT+ZLZv +! +ip radius source-interface Management0 +! +ip routing vrf MGMT +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 +! +management api http-commands + no shutdown + vrf MGMT + no shutdown +! +hostname spine2-DC3 +! +interface Management0 + vrf MGMT + ip address 192.168.0.78/24 +! +service routing protocols model multi-agent +! +ip routing +! \ No newline at end of file diff --git a/topologies/training-level7-part2-Test2/files/ceos/spine3-DC1/ceos-config b/topologies/training-level7-part2-Test2/files/ceos/spine3-DC1/ceos-config new file mode 100644 index 000000000..ed947aed5 --- /dev/null +++ b/topologies/training-level7-part2-Test2/files/ceos/spine3-DC1/ceos-config @@ -0,0 +1,2 @@ +SERIALNUMBER=spine3-DC1 +SYSTEMMACADDR=00:1c:73:b3:c6:01 diff --git a/topologies/training-level7-part2-Test2/files/ceos/spine3-DC1/startup-config b/topologies/training-level7-part2-Test2/files/ceos/spine3-DC1/startup-config new file mode 100644 index 000000000..52903513d --- /dev/null +++ b/topologies/training-level7-part2-Test2/files/ceos/spine3-DC1/startup-config @@ -0,0 +1,61 @@ +vrf instance MGMT +! +daemon TerminAttr + exec /usr/bin/TerminAttr -disableaaa -ingestgrpcurl=192.168.0.5:9910 -taillogs -ingestauth=key,atd-lab -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent -ingestvrf=MGMT + no shutdown +! +alias mlag-reload bash /mnt/flash/shut_intfs && sudo shutdown now -r +alias conint sh interface | i connected +alias senz show interface counter error | nz +alias shmc show int | awk '/^[A-Z]/ { intf = $1 } /, address is/ { print intf, $6 }' +alias snz show interface counter | nz +alias spd show port-channel %1 detail all +alias sqnz show interface counter queue | nz +alias srnz show interface counter rate | nz +alias intdesc + !! Usage: intdesc interface-name description + 10 config + 20 int %1 + 30 desc %2 + 40 exit +! +dns domain arista.lab +! +ntp server vrf MGMT 192.168.0.1 iburst source Management0 +! +radius-server host 192.168.0.1 vrf MGMT key 7 0207165218120E +! +aaa group server radius atds + server 192.168.0.1 vrf MGMT +! +aaa authentication login default group atds local +aaa authorization exec default group atds local +aaa authorization commands all default local +! +username Script secret sha512 $6$PNfpb9anSBQ5/aia$phaa3ar5pwkntenD9WHc6Ed5b96lbW0dc0bjtwPnFLaDiCK8D5Cjl6ewP/xdNbl4PtS6Paq.3SssN8pj05NQm. +username admin privilege 15 role network-admin secret 5 $1$5O85YVVn$HrXcfOivJEnISTMb6xrJc. +username arista privilege 15 role network-admin secret 5 $1$4VjIjfd1$XkUVulbNDESHFzcxDU.Tk1 +! +username arista ssh-key ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC+ERvV4GaPq3FzxY8T+5hMF/1T+l8wiPsVCtOrZU4Hy6NCNlAiDBdA/RUtX5/aOu5JvHyPTVHqWJ0qi9BqU3rxCNl/l2/5UZbm9RPzdZ1QCwoYwPB9/j/tYJV8lZdr6t0yGBfxgzD3oW/zF7a+ZtASaMAu7lkgoqPK2pVIGa+Y9ZCsA0Xq756XpLCw+d3pHKHvIkgWLCo9FoeIv8f/bu5u/ztzRE+Nvl+o5add6MxnjsXz3s7BnW2FX6JNjyp0Z+OXjupQc2gcfFvpd/dA2lCNuuaCHkRgyPwIZtWPmNqMRXPp37mlPwV43qDJRVPQkvh0xPxwS35BbzUxWdT+ZLZv +! +ip radius source-interface Management0 +! +ip routing vrf MGMT +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 +! +management api http-commands + no shutdown + vrf MGMT + no shutdown +! +hostname spine3-DC1 +! +interface Management0 + vrf MGMT + ip address 192.168.0.13/24 +! +service routing protocols model multi-agent +! +ip routing +! diff --git a/topologies/training-level7-part2-Test2/files/ceos/spine3-DC2/ceos-config b/topologies/training-level7-part2-Test2/files/ceos/spine3-DC2/ceos-config new file mode 100644 index 000000000..f07be990a --- /dev/null +++ b/topologies/training-level7-part2-Test2/files/ceos/spine3-DC2/ceos-config @@ -0,0 +1,2 @@ +SERIALNUMBER=spine3-DC2 +SYSTEMMACADDR=00:1c:73:b6:c6:01 diff --git a/topologies/training-level7-part2-Test2/files/ceos/spine3-DC2/startup-config b/topologies/training-level7-part2-Test2/files/ceos/spine3-DC2/startup-config new file mode 100644 index 000000000..16e2d98e6 --- /dev/null +++ b/topologies/training-level7-part2-Test2/files/ceos/spine3-DC2/startup-config @@ -0,0 +1,61 @@ +vrf instance MGMT +! +daemon TerminAttr + exec /usr/bin/TerminAttr -disableaaa -ingestgrpcurl=192.168.0.5:9910 -taillogs -ingestauth=key,atd-lab -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent -ingestvrf=MGMT + no shutdown +! +alias mlag-reload bash /mnt/flash/shut_intfs && sudo shutdown now -r +alias conint sh interface | i connected +alias senz show interface counter error | nz +alias shmc show int | awk '/^[A-Z]/ { intf = $1 } /, address is/ { print intf, $6 }' +alias snz show interface counter | nz +alias spd show port-channel %1 detail all +alias sqnz show interface counter queue | nz +alias srnz show interface counter rate | nz +alias intdesc + !! Usage: intdesc interface-name description + 10 config + 20 int %1 + 30 desc %2 + 40 exit +! +dns domain arista.lab +! +ntp server vrf MGMT 192.168.0.1 iburst source Management0 +! +radius-server host 192.168.0.1 vrf MGMT key 7 0207165218120E +! +aaa group server radius atds + server 192.168.0.1 vrf MGMT +! +aaa authentication login default group atds local +aaa authorization exec default group atds local +aaa authorization commands all default local +! +username Script secret sha512 $6$PNfpb9anSBQ5/aia$phaa3ar5pwkntenD9WHc6Ed5b96lbW0dc0bjtwPnFLaDiCK8D5Cjl6ewP/xdNbl4PtS6Paq.3SssN8pj05NQm. +username admin privilege 15 role network-admin secret 5 $1$5O85YVVn$HrXcfOivJEnISTMb6xrJc. +username arista privilege 15 role network-admin secret 5 $1$4VjIjfd1$XkUVulbNDESHFzcxDU.Tk1 +! +username arista ssh-key ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC+ERvV4GaPq3FzxY8T+5hMF/1T+l8wiPsVCtOrZU4Hy6NCNlAiDBdA/RUtX5/aOu5JvHyPTVHqWJ0qi9BqU3rxCNl/l2/5UZbm9RPzdZ1QCwoYwPB9/j/tYJV8lZdr6t0yGBfxgzD3oW/zF7a+ZtASaMAu7lkgoqPK2pVIGa+Y9ZCsA0Xq756XpLCw+d3pHKHvIkgWLCo9FoeIv8f/bu5u/ztzRE+Nvl+o5add6MxnjsXz3s7BnW2FX6JNjyp0Z+OXjupQc2gcfFvpd/dA2lCNuuaCHkRgyPwIZtWPmNqMRXPp37mlPwV43qDJRVPQkvh0xPxwS35BbzUxWdT+ZLZv +! +ip radius source-interface Management0 +! +ip routing vrf MGMT +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 +! +management api http-commands + no shutdown + vrf MGMT + no shutdown +! +hostname spine3-DC2 +! +interface Management0 + vrf MGMT + ip address 192.168.0.16/24 +! +service routing protocols model multi-agent +! +ip routing +! \ No newline at end of file diff --git a/topologies/training-level7-part2-Test2/files/cvp/cvp_info.yaml b/topologies/training-level7-part2-Test2/files/cvp/cvp_info.yaml new file mode 100644 index 000000000..24d7bef2b --- /dev/null +++ b/topologies/training-level7-part2-Test2/files/cvp/cvp_info.yaml @@ -0,0 +1,209 @@ +cvp_info: + containers: + Tenant: + nodes: + DC1: + parent: Tenant + nodes: + Leaf-DC1: + parent: DC1 + nodes: + - borderleaf1-DC1 + - borderleaf2-DC1 + - leaf1-DC1 + - leaf2-DC1 + - leaf3-DC1 + - leaf4-DC1 + Spine-DC1: + parent: DC1 + nodes: + - spine1-DC1 + - spine2-DC1 + - spine3-DC1 + Host-DC1: + parent: DC1 + nodes: + - host1-DC1 + - host2-DC1 + DC2: + parent: Tenant + nodes: + Leaf-DC2: + parent: DC2 + nodes: + - borderleaf1-DC2 + - borderleaf2-DC2 + - leaf1-DC2 + - leaf2-DC2 + - leaf3-DC2 + - leaf4-DC2 + Spine-DC2: + parent: DC2 + nodes: + - spine1-DC2 + - spine2-DC2 + - spine3-DC2 + Host-DC2: + parent: DC2 + nodes: + - host1-DC2 + - host2-DC2 + DC3: + parent: Tenant + nodes: + Spine-DC3: + parent: DC3 + nodes: + - spine1-DC3 + - spine2-DC3 + Leaf-DC3: + parent: DC3 + nodes: + - leaf1-DC3 + - leaf2-DC3 + Host-DC3: + parent: DC3 + nodes: + - host1-DC3 + - host2-DC3 + Provider Network: + parent: Tenant + nodes: + SR-Domain1: + parent: Tenant + nodes: + - ASBR1 + - RR1 + - PE11 + - PE12 + - P1 + SR-Domain2: + parent: Tenant + nodes: + - ASBR2 + - RR2 + - PE21 + - PE22 + - P2 + SR-Domain3: + parent: Tenant + nodes: + - ASBR3 + - RR3 + - PE31 + OOB: + parent: Tenant + nodes: + - OOB-DC1 + - OOB-DC2 + - OOB-CORE + snapshots: + configlets: + containers: + Tenant: + - ATD-INFRA + netelements: + borderleaf1-DC1: + - borderleaf1-DC1-BASE + borderleaf2-DC1: + - borderleaf2-DC1-BASE + leaf1-DC1: + - leaf1-DC1-BASE + leaf2-DC1: + - leaf2-DC1-BASE + leaf3-DC1: + - leaf3-DC1-BASE + leaf4-DC1: + - leaf4-DC1-BASE + spine1-DC1: + - spine1-DC1-BASE + spine2-DC1: + - spine2-DC1-BASE + spine3-DC1: + - spine3-DC1-BASE + host1-DC1: + - host1-DC1-BASE + - host1-DC1-START + host2-DC1: + - host2-DC1-BASE + - host2-DC1-START + borderleaf1-DC2: + - borderleaf1-DC2-BASE + - borderleaf1-DC2-START + borderleaf2-DC2: + - borderleaf2-DC2-BASE + - borderleaf2-DC2-START + leaf1-DC2: + - leaf1-DC2-BASE + - leaf1-DC2-START + leaf2-DC2: + - leaf2-DC2-BASE + - leaf2-DC2-START + leaf3-DC2: + - leaf3-DC2-BASE + - leaf3-DC2-START + leaf4-DC2: + - leaf4-DC2-BASE + - leaf4-DC2-START + spine1-DC2: + - spine1-DC2-BASE + - Spine1-DC2-START + spine2-DC2: + - spine2-DC2-BASE + - Spine2-DC2-START + spine3-DC2: + - spine3-DC2-BASE + - Spine3-DC2-START + host1-DC2: + - host1-DC2-BASE + - host1-DC2-START + host2-DC2: + - host2-DC2-BASE + - host2-DC2-START + host1-DC3: + - host1-DC3-BASE + - host1-DC3-START + host2-DC3: + - host2-DC3-BASE + - host2-DC3-START + RR1: + - RR1-BASE + RR2: + - RR2-BASE + RR3: + - RR3-BASE + ASBR1: + - ASBR1-BASE + ASBR2: + - ASBR2-BASE + ASBR3: + - ASBR3-BASE + PE11: + - PE11-BASE + PE12: + - PE12-BASE + PE21: + - PE21-BASE + PE22: + - PE22-BASE + PE31: + - PE31-BASE + P1: + - P1-BASE + P2: + - P2-BASE + OOB-CORE: + - OOB-CORE-BASE + OOB-DC1: + - OOB-DC1-BASE + OOB-DC2: + - OOB-DC2-BASE + spine1-DC3: + - spine1-DC3-BASE + spine2-DC3: + - spine2-DC3-BASE + leaf1-DC3: + - leaf1-DC3-BASE + leaf2-DC3: + - leaf2-DC3-BASE + diff --git a/topologies/training-level7-part2-Test2/files/hosts b/topologies/training-level7-part2-Test2/files/hosts new file mode 100644 index 000000000..20bac87b4 --- /dev/null +++ b/topologies/training-level7-part2-Test2/files/hosts @@ -0,0 +1,34 @@ +127.0.0.1 localhost +192.168.0.11 spine1-DC1 +192.168.0.12 spine2-DC1 +192.168.0.13 spine3-DC1 +192.168.0.14 spine1-DC2 +192.168.0.15 spine2-DC2 +192.168.0.16 spine3-DC2 +192.168.0.21 leaf1-DC1 +192.168.0.22 leaf2-DC1 +192.168.0.23 leaf3-DC1 +192.168.0.24 leaf4-DC1 +192.168.0.25 borderleaf1-DC1 +192.168.0.26 borderleaf2-DC1 +192.168.0.31 leaf1-DC2 +192.168.0.32 leaf2-DC2 +192.168.0.33 leaf3-DC2 +192.168.0.34 leaf4-DC2 +192.168.0.35 borderleaf1-DC2 +192.168.0.36 borderleaf2-DC2 +192.168.0.51 host1-DC1 +192.168.0.52 host2-DC1 +192.168.0.53 host1-DC2 +192.168.0.54 host2-DC2 +192.168.0.62 OOB-DC1 +192.168.0.63 OOB-DC2 +192.168.0.61 OOB-CORE +192.168.0.71 core1-isp1 +192.168.0.72 core2-isp1 +192.168.0.73 core1-isp2 +192.168.0.74 core2-isp2 +192.168.0.75 internet +192.168.0.76 DCI +192.168.0.4 CVX +192.168.0.5 cvp diff --git a/topologies/training-level7-part2-Test2/files/menus/default.yaml b/topologies/training-level7-part2-Test2/files/menus/default.yaml new file mode 100644 index 000000000..88e29c3e2 --- /dev/null +++ b/topologies/training-level7-part2-Test2/files/menus/default.yaml @@ -0,0 +1,2 @@ +--- +default_menu: ssh \ No newline at end of file diff --git a/topologies/training-level7-part2-Test2/files/scripts/Authenticate-CVP b/topologies/training-level7-part2-Test2/files/scripts/Authenticate-CVP new file mode 100644 index 000000000..144bb13eb --- /dev/null +++ b/topologies/training-level7-part2-Test2/files/scripts/Authenticate-CVP @@ -0,0 +1,32 @@ +import requests +import json + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + +# Print user details + +print "User Name:%s\n "%output['username'] +print "First Name: %s\n "%output['user']['firstName'] +print "Last Name: %s\n "%output['user']['lastName'] +print "User Permissions: %s\n "%output['permissionList'] +print "Cookie Jar: %s\n "%cookies diff --git a/topologies/training-level7-part2-Test2/files/scripts/Authenticate-CVP2 b/topologies/training-level7-part2-Test2/files/scripts/Authenticate-CVP2 new file mode 100644 index 000000000..3f6bf9190 --- /dev/null +++ b/topologies/training-level7-part2-Test2/files/scripts/Authenticate-CVP2 @@ -0,0 +1,48 @@ +import requests +import json + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + +# Print user details + +print "User Name:%s\n "%output['username'] +print "First Name: %s\n "%output['user']['firstName'] +print "Last Name: %s\n "%output['user']['lastName'] +print "User Permissions: %s\n "%output['permissionList'] +print "Cookie Jar: %s\n "%cookies + +#Create an HTTP GET request to the CVP server + +getConfigletURL = "/cvpservice/configlet/getConfiglets.do?" +getConfigletParams = {'startIndex':'0','endIndex':'0','type':'Configlet'} +response = requests.get(url+getConfigletURL,cookies=cookies, params=getConfigletParams,verify=False) +assert response.ok +outputConfiglets = response.json() + +# Print Configlet details + +for configlet in outputConfiglets['data']: + print "ConfigletName: %s"%configlet['name'] + print "ConfigletKey: %s"%configlet['key'] + print "\n" + diff --git a/topologies/training-level7-part2-Test2/files/scripts/Authenticate-CVP3 b/topologies/training-level7-part2-Test2/files/scripts/Authenticate-CVP3 new file mode 100644 index 000000000..2445806ea --- /dev/null +++ b/topologies/training-level7-part2-Test2/files/scripts/Authenticate-CVP3 @@ -0,0 +1,95 @@ +import requests +import json + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + +# Print user details + +print "User Name:%s\n "%output['username'] +print "First Name: %s\n "%output['user']['firstName'] +print "Last Name: %s\n "%output['user']['lastName'] +print "User Permissions: %s\n "%output['permissionList'] +print "Cookie Jar: %s\n "%cookies + +#Create an HTTP GET request to the CVP server + +getConfigletURL = "/cvpservice/configlet/getConfiglets.do?" +getConfigletParams = {'startIndex':'0','endIndex':'0','type':'Configlet'} +response = requests.get(url+getConfigletURL,cookies=cookies, params=getConfigletParams,verify=False) +assert response.ok +outputConfiglets = response.json() + +# Print Configlet details + +for configlet in outputConfiglets['data']: + print "ConfigletName: %s"%configlet['name'] + print "ConfigletKey: %s"%configlet['key'] + print "\n" +# Create an HTTP GET request to the CVP server + +getConfigletHistoryURL = "/cvpservice/configlet/getConfigletHistory.do?" +getConfigletParams = {'configletId':'configlet_32_438214998013','startIndex':'0','endIndex':'0'} +response = requests.get(url+getConfigletHistoryURL,cookies=cookies, params=getConfigletParams,verify=False) +assert response.ok +outputConfigletHistory = response.json() + +# Print Configlet details + +for entry in outputConfigletHistory['configletHistory']: + print "ConfigletKey: %s"%entry['key'] + print "ConfigletOldConfig: %s"%entry['oldConfig'] + print "ConfigletNewConfig: %s"%entry['newConfig'] + print "\n" + + +# Create an HTTP GET request to the CVP server + +getConfigletDetailURL = "/cvpservice/configlet/getConfigletByName.do?" +getConfigletParams = {'name':'VLANs'} +response = requests.get(url+getConfigletDetailURL,cookies=cookies, params=getConfigletParams,verify=False) +assert response.ok +outputConfigletDetail = response.json() + +# Print Configlet details + +print "ConfigletKey: %s"%outputConfigletDetail['key'] +print "ConfigletName: %s"%outputConfigletDetail['name'] +print "ConfigletConfig: %s"%outputConfigletDetail['config'] +print "ConfigletNote: %s"%outputConfigletDetail['note'] +print "\n" + + +# Create an HTTP POST request to the CVP server + +headers = { 'Content-Type': 'application/json' } +postConfigletChangeURL = "/cvpservice/configlet/updateConfiglet.do" +changeData = json.dumps({"config": "! some configuration here", "key": "configlet_32_438214998013", "name": "VLANs"}) +response = requests.post(url+postConfigletChangeURL, cookies=cookies, data=changeData,headers=headers,verify=False) +assert response.ok +outputConfigletChange = response.json() + +# Print Configlet details + +print "ConfigletChange: %s"%outputConfigletChange['data'] +print "\n" + diff --git a/topologies/training-level7-part2-Test2/files/scripts/Configlet1 b/topologies/training-level7-part2-Test2/files/scripts/Configlet1 new file mode 100644 index 000000000..3f6bf9190 --- /dev/null +++ b/topologies/training-level7-part2-Test2/files/scripts/Configlet1 @@ -0,0 +1,48 @@ +import requests +import json + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + +# Print user details + +print "User Name:%s\n "%output['username'] +print "First Name: %s\n "%output['user']['firstName'] +print "Last Name: %s\n "%output['user']['lastName'] +print "User Permissions: %s\n "%output['permissionList'] +print "Cookie Jar: %s\n "%cookies + +#Create an HTTP GET request to the CVP server + +getConfigletURL = "/cvpservice/configlet/getConfiglets.do?" +getConfigletParams = {'startIndex':'0','endIndex':'0','type':'Configlet'} +response = requests.get(url+getConfigletURL,cookies=cookies, params=getConfigletParams,verify=False) +assert response.ok +outputConfiglets = response.json() + +# Print Configlet details + +for configlet in outputConfiglets['data']: + print "ConfigletName: %s"%configlet['name'] + print "ConfigletKey: %s"%configlet['key'] + print "\n" + diff --git a/topologies/training-level7-part2-Test2/files/scripts/ConfigletChange b/topologies/training-level7-part2-Test2/files/scripts/ConfigletChange new file mode 100644 index 000000000..691ff5864 --- /dev/null +++ b/topologies/training-level7-part2-Test2/files/scripts/ConfigletChange @@ -0,0 +1,40 @@ +import requests +import json + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + + +# Create an HTTP POST request to the CVP server + +headers = { 'Content-Type': 'application/json' } +postConfigletChangeURL = "/cvpservice/configlet/addNoteToConfiglet.do" +changeData = json.dumps({"note": "Configlet Changed by API", "key": "configlet_516_7018635812307"}) +response = requests.post(url+postConfigletChangeURL, cookies=cookies, data=changeData,headers=headers,verify=False) +assert response.ok +outputConfigletChange = response.json() + +# Print Configlet details + +print "ConfigletChange: %s"%outputConfigletChange['data'] +print "\n" + diff --git a/topologies/training-level7-part2-Test2/files/scripts/ConfigletDetail b/topologies/training-level7-part2-Test2/files/scripts/ConfigletDetail new file mode 100644 index 000000000..eb2a85937 --- /dev/null +++ b/topologies/training-level7-part2-Test2/files/scripts/ConfigletDetail @@ -0,0 +1,43 @@ +import requests +import json + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + +# Create an HTTP GET request to the CVP server + +getConfigletDetailURL = "/cvpservice/configlet/getConfigletByName.do?" +getConfigletParams = {'name':'VLANs'} +response = requests.get(url+getConfigletDetailURL,cookies=cookies, params=getConfigletParams,verify=False) +assert response.ok +outputConfigletDetail = response.json() + +# Print Configlet details + +print "ConfigletKey: %s"%outputConfigletDetail['key'] +print "ConfigletName: %s"%outputConfigletDetail['name'] +print "ConfigletConfig: %s"%outputConfigletDetail['config'] +print "ConfigletNote: %s"%outputConfigletDetail['note'] +print "\n" + + + diff --git a/topologies/training-level7-part2-Test2/files/scripts/ConfigletHistory b/topologies/training-level7-part2-Test2/files/scripts/ConfigletHistory new file mode 100644 index 000000000..71f1ac693 --- /dev/null +++ b/topologies/training-level7-part2-Test2/files/scripts/ConfigletHistory @@ -0,0 +1,41 @@ +import requests +import json + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + +# Create an HTTP GET request to the CVP server + +getConfigletHistoryURL = "/cvpservice/configlet/getConfigletHistory.do?" +getConfigletParams = {'configletId':'configlet_344_7351420097365','startIndex':'0','endIndex':'0'} +response = requests.get(url+getConfigletHistoryURL,cookies=cookies, params=getConfigletParams,verify=False) +assert response.ok +outputConfigletHistory = response.json() + +# Print Configlet details + +for entry in outputConfigletHistory['configletHistory']: + print "ConfigletKey: %s"%entry['key'] + print "ConfigletOldConfig: \n%s"%entry['oldConfig'] + print "ConfigletNewConfig: \n%s"%entry['newConfig'] + print "\n" + diff --git a/topologies/training-level7-part2-Test2/files/scripts/TaskBase b/topologies/training-level7-part2-Test2/files/scripts/TaskBase new file mode 100644 index 000000000..6f8deccaf --- /dev/null +++ b/topologies/training-level7-part2-Test2/files/scripts/TaskBase @@ -0,0 +1,59 @@ +import requests +import json + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + + +# Create an HTTP GET request to the CVP server + +getTasksURL = "/cvpservice/task/getTasks.do?" +getTasksParams = {'startIndex':'0','endIndex':'0','queryparam':'Pending'} +response = requests.get(url+getTasksURL,cookies=cookies, params=getTasksParams,verify=False) +assert response.ok +outputPendingTasks = response.json() + + +# Print Tasks Created by Current User +taskList = [ ] +for entry in outputPendingTasks['data']: + if str(entry['createdBy']) == str(CVP_USER): + print "TaskNumber: %s"%entry['workOrderId'] + taskList.append(str(entry['workOrderId'])) +print "TaskList: %s"%taskList + + + +# Create an HTTP POST request to the CVP server + +headers = { 'Content-Type': 'application/json' } +postTaskLogURL = "/cvpservice/workflow/addWorkOrderLog.do" +taskLogData = json.dumps({"taskId": taskList[1],"message": "This is a test Change","source": "CVP REST API"}) +response = requests.post(url+postTaskLogURL, cookies=cookies, data=taskLogData,headers=headers,verify=False) +assert response.ok +outputTaskLog = response.json() + +# Print Configlet details + +print "TaskLogAmmend: %s"%outputTaskLog['data'] +print "\n" + diff --git a/topologies/training-level7-part2-Test2/files/scripts/TaskCVP1 b/topologies/training-level7-part2-Test2/files/scripts/TaskCVP1 new file mode 100644 index 000000000..1ebd05764 --- /dev/null +++ b/topologies/training-level7-part2-Test2/files/scripts/TaskCVP1 @@ -0,0 +1,48 @@ +import requests +import json + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + +# Print user details + +print "User Name:%s\n "%output['username'] +print "First Name: %s\n "%output['user']['firstName'] +print "Last Name: %s\n "%output['user']['lastName'] + + +getTasksURL = "/cvpservice/task/getTasks.do?" +getTasksParams = {'startIndex':'0','endIndex':'0'} +response = requests.get(url+getTasksURL,cookies=cookies, params=getTasksParams,verify=False) +assert response.ok +outputPendingTasks = response.json() + + +# Print Tasks Created by Current User +taskList = [ ] +for entry in outputPendingTasks['data']: + if str(entry['createdBy']) == str(CVP_USER): + print( "TaskNumber: %s Description: %s" %(entry['workOrderId'],entry['description'])) + taskList.append(str(entry['workOrderId'])) +#print "TaskList: %s"%taskList + + diff --git a/topologies/training-level7-part2-Test2/files/scripts/TaskExecute b/topologies/training-level7-part2-Test2/files/scripts/TaskExecute new file mode 100644 index 000000000..3db487284 --- /dev/null +++ b/topologies/training-level7-part2-Test2/files/scripts/TaskExecute @@ -0,0 +1,56 @@ +import requests +import json + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + + +# Create an HTTP GET request to the CVP server + +getTasksURL = "/cvpservice/task/getTasks.do?" +getTasksParams = {'startIndex':'0','endIndex':'0','queryparam':'Pending'} +response = requests.get(url+getTasksURL,cookies=cookies, params=getTasksParams,verify=False) +assert response.ok +outputPendingTasks = response.json() + + +# Print Tasks Created by Current User +taskList = [ ] +for entry in outputPendingTasks['data']: + if str(entry['createdBy']) == str(CVP_USER): + print "TaskNumber: %s"%entry['workOrderId'] + taskList.append(str(entry['workOrderId'])) +print "TaskList: %s"%taskList + + + +headers = { 'Content-Type': 'application/json' } +postTaskExecuteURL = "/cvpservice/task/executeTask.do" +for taskNumber in taskList: + executeData = json.dumps({'data': [taskNumber]}) + response = requests.post(url+postTaskExecuteURL, cookies=cookies,data=executeData,headers=headers,verify=False) + assert response.ok + outputExecuteTask = response.json() + print (outputExecuteTask['data']) + print "Task: "+str(taskNumber)+" Execute: "+str(outputExecuteTask['data']) + print "\n" + diff --git a/topologies/training-level7-part2-Test2/files/scripts/TaskLog b/topologies/training-level7-part2-Test2/files/scripts/TaskLog new file mode 100644 index 000000000..c835008b8 --- /dev/null +++ b/topologies/training-level7-part2-Test2/files/scripts/TaskLog @@ -0,0 +1,59 @@ +import requests +import json + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + + +# Create an HTTP GET request to the CVP server + +getTasksURL = "/cvpservice/task/getTasks.do?" +getTasksParams = {'startIndex':'0','endIndex':'0'} +response = requests.get(url+getTasksURL,cookies=cookies, params=getTasksParams,verify=False) +assert response.ok +outputTasks = response.json() + + +# Print Tasks Created by Current User +taskList = [ ] +for entry in outputTasks['data']: + if str(entry['createdBy']) == str(CVP_USER): + print "TaskNumber: %s"%entry['workOrderId'] + taskList.append(str(entry['workOrderId'])) +print "TaskList: %s"%taskList + + + +# Create an HTTP POST request to the CVP server + +headers = { 'Content-Type': 'application/json' } +postTaskLogURL = "/cvpservice/workflow/addWorkOrderLog.do" +taskLogData = json.dumps({"taskId": taskList[0],"message": "This is a test Change","source": "CVP REST API"}) +response = requests.post(url+postTaskLogURL, cookies=cookies, data=taskLogData,headers=headers,verify=False) +assert response.ok +outputTaskLog = response.json() + +# Print Configlet details + +print "TaskLogAmmend: %s"%outputTaskLog['data'] +print "\n" + diff --git a/topologies/training-level7-part2-Test2/files/scripts/TaskLog1 b/topologies/training-level7-part2-Test2/files/scripts/TaskLog1 new file mode 100644 index 000000000..c835008b8 --- /dev/null +++ b/topologies/training-level7-part2-Test2/files/scripts/TaskLog1 @@ -0,0 +1,59 @@ +import requests +import json + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + + +# Create an HTTP GET request to the CVP server + +getTasksURL = "/cvpservice/task/getTasks.do?" +getTasksParams = {'startIndex':'0','endIndex':'0'} +response = requests.get(url+getTasksURL,cookies=cookies, params=getTasksParams,verify=False) +assert response.ok +outputTasks = response.json() + + +# Print Tasks Created by Current User +taskList = [ ] +for entry in outputTasks['data']: + if str(entry['createdBy']) == str(CVP_USER): + print "TaskNumber: %s"%entry['workOrderId'] + taskList.append(str(entry['workOrderId'])) +print "TaskList: %s"%taskList + + + +# Create an HTTP POST request to the CVP server + +headers = { 'Content-Type': 'application/json' } +postTaskLogURL = "/cvpservice/workflow/addWorkOrderLog.do" +taskLogData = json.dumps({"taskId": taskList[0],"message": "This is a test Change","source": "CVP REST API"}) +response = requests.post(url+postTaskLogURL, cookies=cookies, data=taskLogData,headers=headers,verify=False) +assert response.ok +outputTaskLog = response.json() + +# Print Configlet details + +print "TaskLogAmmend: %s"%outputTaskLog['data'] +print "\n" + diff --git a/topologies/training-level7-part2-Test2/files/scripts/TaskLogView b/topologies/training-level7-part2-Test2/files/scripts/TaskLogView new file mode 100644 index 000000000..7b34904dd --- /dev/null +++ b/topologies/training-level7-part2-Test2/files/scripts/TaskLogView @@ -0,0 +1,51 @@ +import requests +import json +import pprint + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + + +# Create an HTTP GET request to the CVP server + +getTasksURL = "/cvpservice/task/getTasks.do?" +getTasksParams = {'startIndex':'0','endIndex':'0'} +response = requests.get(url+getTasksURL,cookies=cookies, params=getTasksParams,verify=False) +assert response.ok +outputTasks = response.json() + +taskList = [ ] +for entry in outputTasks['data']: + if str(entry['createdBy']) == str(CVP_USER): + taskList.append(str(entry['workOrderId'])) + +getTaskLogURL = "/cvpservice/task/getLogsById.do?" +#getTaskLogParams = {'startIndex':'0','endIndex':'0','id':'0'} +getTaskLogParams = {'startIndex':'0','endIndex':'0','id':taskList[0]} +response = requests.get(url+getTaskLogURL,cookies=cookies, params=getTaskLogParams,verify=False) +assert response.ok +outputTaskLog = response.json() + +# Print TaskLog details +print "TaskLogOutput: %s" %outputTaskLog['data'] +print "\n" + diff --git a/topologies/training-level7-part2-Test2/files/scripts/TaskNote b/topologies/training-level7-part2-Test2/files/scripts/TaskNote new file mode 100644 index 000000000..6cd1d6cfd --- /dev/null +++ b/topologies/training-level7-part2-Test2/files/scripts/TaskNote @@ -0,0 +1,52 @@ +import requests +import json +import pprint + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + + +# Create an HTTP GET request to the CVP server + +getTasksURL = "/cvpservice/task/getTasks.do?" +getTasksParams = {'startIndex':'0','endIndex':'0'} +response = requests.get(url+getTasksURL,cookies=cookies, params=getTasksParams,verify=False) +assert response.ok +outputTasks = response.json() + +taskList = [ ] +for entry in outputTasks['data']: + if str(entry['createdBy']) == str(CVP_USER): + taskList.append(str(entry['workOrderId'])) + +headers = { 'Content-Type': 'application/json' } +postTaskNoteURL = "/cvpservice/task/addNoteToTask.do" +taskNoteData = json.dumps({"workOrderId": taskList[0],"note": "This is a test Change using the API"}) +response = requests.post(url+postTaskNoteURL, cookies=cookies, data=taskNoteData,headers=headers,verify=False) +assert response.ok +outputTaskNote = response.json() + +# Print Task details + +print "TaskNoteAmmend: %s"%outputTaskNote['data'] +print "\n" + diff --git a/topologies/training-level7-part2-Test2/labguides/.gitignore b/topologies/training-level7-part2-Test2/labguides/.gitignore new file mode 100644 index 000000000..ed86553f4 --- /dev/null +++ b/topologies/training-level7-part2-Test2/labguides/.gitignore @@ -0,0 +1,2 @@ +.DS_Store +build/ diff --git a/topologies/training-level7-part2-Test2/labguides/Makefile b/topologies/training-level7-part2-Test2/labguides/Makefile new file mode 100644 index 000000000..874ed2529 --- /dev/null +++ b/topologies/training-level7-part2-Test2/labguides/Makefile @@ -0,0 +1,20 @@ +# Minimal makefile for Sphinx documentation +# + +# You can set these variables from the command line. +SPHINXOPTS = +SPHINXBUILD = python -msphinx +SPHINXPROJ = ATD +SOURCEDIR = source +BUILDDIR = build + +# Put it first so that "make" without argument is like "make help". +help: + @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) + +.PHONY: help Makefile + +# Catch-all target: route all unknown targets to Sphinx using the new +# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). +%: Makefile + @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) \ No newline at end of file diff --git a/topologies/training-level7-part2-Test2/labguides/readme.md b/topologies/training-level7-part2-Test2/labguides/readme.md new file mode 100644 index 000000000..5a5369ecd --- /dev/null +++ b/topologies/training-level7-part2-Test2/labguides/readme.md @@ -0,0 +1,12 @@ +# Lab Guides +In this folder are rST (restructured text) formatted lab guides for the ATD event. + +## Building +To build the documentation, you will need to install Sphinx and sphinx_bootstrap_theme with `pip`: + +`pip install sphinx sphinx_bootstrap_theme` + +## Contributing +At some point, this section may expand, but for now please make sure to review existing files for formatting guidelines. + +Please see https://github.com/ralsina/rst-cheatsheet/blob/master/rst-cheatsheet.rst for a cheat sheet. \ No newline at end of file diff --git a/topologies/training-level7-part2-Test2/labguides/source/_static/arista_logo.png b/topologies/training-level7-part2-Test2/labguides/source/_static/arista_logo.png new file mode 100644 index 000000000..2376e72b9 Binary files /dev/null and b/topologies/training-level7-part2-Test2/labguides/source/_static/arista_logo.png differ diff --git a/topologies/training-level7-part2-Test2/labguides/source/_static/arista_logo_160by26.png b/topologies/training-level7-part2-Test2/labguides/source/_static/arista_logo_160by26.png new file mode 100644 index 000000000..d0d0cbeec Binary files /dev/null and b/topologies/training-level7-part2-Test2/labguides/source/_static/arista_logo_160by26.png differ diff --git a/topologies/training-level7-part2-Test2/labguides/source/_static/arista_logo_320by52.png b/topologies/training-level7-part2-Test2/labguides/source/_static/arista_logo_320by52.png new file mode 100644 index 000000000..43dfa7ed2 Binary files /dev/null and b/topologies/training-level7-part2-Test2/labguides/source/_static/arista_logo_320by52.png differ diff --git a/topologies/training-level7-part2-Test2/labguides/source/_static/cloudvision-icon.png b/topologies/training-level7-part2-Test2/labguides/source/_static/cloudvision-icon.png new file mode 100644 index 000000000..c309ed98e Binary files /dev/null and b/topologies/training-level7-part2-Test2/labguides/source/_static/cloudvision-icon.png differ diff --git a/topologies/training-level7-part2-Test2/labguides/source/_static/logo.jpg b/topologies/training-level7-part2-Test2/labguides/source/_static/logo.jpg new file mode 100644 index 000000000..6eda41f7e Binary files /dev/null and b/topologies/training-level7-part2-Test2/labguides/source/_static/logo.jpg differ diff --git a/topologies/training-level7-part2-Test2/labguides/source/_static/my-styles.css b/topologies/training-level7-part2-Test2/labguides/source/_static/my-styles.css new file mode 100644 index 000000000..1150528ee --- /dev/null +++ b/topologies/training-level7-part2-Test2/labguides/source/_static/my-styles.css @@ -0,0 +1,41 @@ +body { + background-color: #FFFFFF; + color: #002859 +} + +.navbar-inverse { + background-image: -webkit-linear-gradient(#6d94bf, #446e9b 50%, #002859); + background-image: -o-linear-gradient(#6d94bf, #446e9b 50%, #002859); + background-image: -webkit-gradient(linear, left top, left bottom, from(#6d94bf), color-stop(50%, #446e9b), to(#002859)); + background-image: linear-gradient(#6d94bf, #446e9b 50%, #002859); + background-repeat: no-repeat; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff6d94bf', endColorstr='#ff002859', GradientType=0); + -webkit-filter: none; + filter: none; + border: 1px solid #345578; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.3) +} + +.navbar-brand { + background: url("arista_logo_320by52.png") center / contain no-repeat; + display: inline-block; + width: 1px; + padding: 0 10px 0 60px; + margin-right: 30px; + margin-left: -30px; +} + +.navbar-brand>img { + display: inline-block; + padding: 0 100px 0 0px; + margin-right: 20px; +} +a.navbar-brand { + display: inline-block; + padding: 15px 0 0 120px; +} + +footer { + background-color: #002859; + color: #FFFFFF; +} diff --git a/topologies/training-level7-part2-Test2/labguides/source/conf.py b/topologies/training-level7-part2-Test2/labguides/source/conf.py new file mode 100644 index 000000000..afccec09c --- /dev/null +++ b/topologies/training-level7-part2-Test2/labguides/source/conf.py @@ -0,0 +1,247 @@ +# -*- coding: utf-8 -*- +# +# ATD documentation build configuration file, created by +# sphinx-quickstart on Tue Apr 17 10:00:04 2018. +# +# This file is execfile()d with the current directory set to its +# containing dir. +# +# Note that not all possible configuration values are present in this +# autogenerated file. +# +# All configuration values have a default; values that are commented out +# serve to show the default. + +# If extensions (or modules to document with autodoc) are in another directory, +# add these directories to sys.path here. If the directory is relative to the +# documentation root, use os.path.abspath to make it absolute, like shown here. +# +# import os +# import sys +# sys.path.insert(0, os.path.abspath('.')) + +import sphinx_bootstrap_theme + +# Importing datetime module to auto update copyright year +from datetime import date + +# -- General configuration ------------------------------------------------ + +# If your documentation needs a minimal Sphinx version, state it here. +# +# needs_sphinx = '1.0' + +# Add any Sphinx extension module names here, as strings. They can be +# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom +# ones. + +# Add any paths that contain templates here, relative to this directory. +templates_path = ['_templates'] + +# The suffix(es) of source filenames. +# You can specify multiple suffix as a list of string: +# +# source_suffix = ['.rst', '.md'] +source_suffix = '.rst' + +# The master toctree document. +master_doc = 'index' + +# General information about the project. +# Updating copyright var to auto update with current year +project = u'Arista ATD' +copyright = u'{0}, Arista Networks'.format(date.today().year) +author = u'Arista ATD atd-help@arista.com' + +# Show Source +html_show_sourcelink = False + +# The version info for the project you're documenting, acts as replacement for +# |version| and |release|, also used in various other places throughout the +# built documents. +# +# The short X.Y version. +version = u'Version 3.0' +# The full version, including alpha/beta/rc tags. +release = u'1' + +# The language for content autogenerated by Sphinx. Refer to documentation +# for a list of supported languages. +# +# This is also used if you do content translation via gettext catalogs. +# Usually you set "language" from the command line for these cases. +language = None + +# List of patterns, relative to source directory, that match files and +# directories to ignore when looking for source files. +# This patterns also effect to html_static_path and html_extra_path +exclude_patterns = [] + +# The name of the Pygments (syntax highlighting) style to use. +pygments_style = 'sphinx' + +# If true, `todo` and `todoList` produce output, else they produce nothing. +todo_include_todos = False + + +# -- Options for HTML output ---------------------------------------------- + +# The theme to use for HTML and HTML Help pages. See the documentation for +# a list of builtin themes. +# +#html_theme = 'alabaster' +html_theme = 'bootstrap' +html_theme_path = sphinx_bootstrap_theme.get_html_theme_path() + +# Add any paths that contain custom static files (such as style sheets) here, +# relative to this directory. They are copied after the builtin static files, +# so a file named "default.css" will overwrite the builtin "default.css". +html_static_path = ['_static'] + +# Theme options are theme-specific and customize the look and feel of a theme +# further. For a list of options available for each theme, see the +# documentation. +# +html_theme_options = { + # Navigation bar title. (Default: ``project`` value) + 'navbar_title': "ATD", + + # Tab name for entire site. (Default: "Site") + 'navbar_site_name': "Table of Contents", + + # A list of tuples containing pages or urls to link to. + # Valid tuples should be in the following forms: + # (name, page) # a link to a page + # (name, "/aa/bb", 1) # a link to an arbitrary relative url + # (name, "http://example.com", True) # arbitrary absolute url + # Note the "1" or "True" value above as the third argument to indicate + # an arbitrary url. + 'navbar_links': [ + ("Arista", "http://www.arista.com", True), + ], + + # Render the next and previous page links in navbar. (Default: true) + 'navbar_sidebarrel': True, + + # Render the current pages TOC in the navbar. (Default: true) + 'navbar_pagenav': False, + + # Tab name for the current pages TOC. (Default: "Page") + 'navbar_pagenav_name': "Page", + + # Global TOC depth for "site" navbar tab. (Default: 1) + # Switching to -1 shows all levels. + 'globaltoc_depth': 2, + + # Include hidden TOCs in Site navbar? + # + # Note: If this is "false", you cannot have mixed ``:hidden:`` and + # non-hidden ``toctree`` directives in the same page, or else the build + # will break. + # + # Values: "true" (default) or "false" + 'globaltoc_includehidden': "true", + + # HTML navbar class (Default: "navbar") to attach to
    element. + # For black navbar, do "navbar navbar-inverse" + #'navbar_class': "navbar navbar-inverse", + 'navbar_class': "navbar", + + # Fix navigation bar to top of page? + # Values: "true" (default) or "false" + 'navbar_fixed_top': "true", + + # Location of link to source. + # Options are "nav" (default), "footer" or anything else to exclude. + #'source_link_position': "nav", + + # Bootswatch (http://bootswatch.com/) theme. + # + # Options are nothing (default) or the name of a valid theme + # such as "cosmo" or "sandstone". + # + # The set of valid themes depend on the version of Bootstrap + # that's used (the next config option). + # + # Currently, the supported themes are: + # - Bootstrap 2: https://bootswatch.com/2 + # - Bootstrap 3: https://bootswatch.com/3 + 'bootswatch_theme': "spacelab", + + # Choose Bootstrap version. + # Values: "3" (default) or "2" (in quotes) + 'bootstrap_version': "3", +} + +# The name for this set of Sphinx documents. If None, it defaults to +# " v documentation". +#html_title = "AristaATD" + +# A shorter title for the navigation bar. Default is the same as html_title. +#html_short_title = "Demo" + +# (Optional) Logo. Should be small enough to fit the navbar (ideally 24x24). +# Path should be relative to the ``_static`` files directory. +#html_logo = "cloudvision-icon.png" + +# -- Options for HTMLHelp output ------------------------------------------ + +# Output file base name for HTML help builder. +htmlhelp_basename = 'AristaATD' + + +# -- Options for LaTeX output --------------------------------------------- + +latex_elements = { + # The paper size ('letterpaper' or 'a4paper'). + # + # 'papersize': 'letterpaper', + + # The font size ('10pt', '11pt' or '12pt'). + # + # 'pointsize': '10pt', + + # Additional stuff for the LaTeX preamble. + # + # 'preamble': '', + + # Latex figure (float) alignment + # + # 'figure_align': 'htbp', +} + +# Grouping the document tree into LaTeX files. List of tuples +# (source start file, target name, title, +# author, documentclass [howto, manual, or own class]). +latex_documents = [ + (master_doc, 'ATD.tex', u'ATD Lab Guide', + u'ATD Help (atd-help@arista.com)', 'manual'), +] + + +# -- Options for manual page output --------------------------------------- + +# One entry per manual page. List of tuples +# (source start file, name, description, authors, manual section). +man_pages = [ + (master_doc, 'atd', u'ATD Lab Guide', + [author], 1) +] + + +# -- Options for Texinfo output ------------------------------------------- + +# Grouping the document tree into Texinfo files. List of tuples +# (source start file, target name, title, author, +# dir menu entry, description, category) +texinfo_documents = [ + (master_doc, 'ATD', u'ATD Lab Guide', + author, 'ATD', 'Lab Documentation.', + 'Miscellaneous'), +] + + +def setup(app): + app.add_stylesheet("my-styles.css") # also can be a full URL + # app.add_stylesheet("ANOTHER.css") + # app.add_stylesheet("AND_ANOTHER.css") diff --git a/topologies/training-level7-part2-Test2/labguides/source/connecting.rst b/topologies/training-level7-part2-Test2/labguides/source/connecting.rst new file mode 100644 index 000000000..10ae589ef --- /dev/null +++ b/topologies/training-level7-part2-Test2/labguides/source/connecting.rst @@ -0,0 +1,28 @@ +Connecting +========== + +1. Log into the Arista Test Drive portal with your assigned URL. If you + don’t have one, please see your ATD staff. + +.. image:: images/connecting/nested_connecting_1.png + +2. SSH to the public address assigned to the LabAccess jumphost server (this is the Topology Address shown in the "Welcome to Arista's Test Drive!" picture above). The username is ``arista`` and the password is ``{REPLACE_PWD}``: + + .. code-block:: text + + ssh arista@{unique_address}.topo.testdrive.arista.com + +| + +.. image:: images/connecting/nested_connecting_2.png + :align: center + +| + +3. The LabAccess menu allows users to connect to each device and specify + lab topology. It is recommended to open multiple SSH sessions or use + the Screen option (under the SSH Menu) to jump between devices rapidly. + + You can also Access the LabAccess Menu from your browser by clicking on `Console Access` + +.. image:: images/connecting/nested_connecting_3.png diff --git a/topologies/training-level7-part2-Test2/labguides/source/images/connecting/nested_connecting_1.png b/topologies/training-level7-part2-Test2/labguides/source/images/connecting/nested_connecting_1.png new file mode 100644 index 000000000..aa76597b8 Binary files /dev/null and b/topologies/training-level7-part2-Test2/labguides/source/images/connecting/nested_connecting_1.png differ diff --git a/topologies/training-level7-part2-Test2/labguides/source/images/connecting/nested_connecting_2.png b/topologies/training-level7-part2-Test2/labguides/source/images/connecting/nested_connecting_2.png new file mode 100644 index 000000000..2c6b51a2b Binary files /dev/null and b/topologies/training-level7-part2-Test2/labguides/source/images/connecting/nested_connecting_2.png differ diff --git a/topologies/training-level7-part2-Test2/labguides/source/images/connecting/nested_connecting_3.png b/topologies/training-level7-part2-Test2/labguides/source/images/connecting/nested_connecting_3.png new file mode 100644 index 000000000..1cc7402a3 Binary files /dev/null and b/topologies/training-level7-part2-Test2/labguides/source/images/connecting/nested_connecting_3.png differ diff --git a/topologies/training-level7-part2-Test2/labguides/source/images/logo.jpg b/topologies/training-level7-part2-Test2/labguides/source/images/logo.jpg new file mode 100644 index 000000000..6eda41f7e Binary files /dev/null and b/topologies/training-level7-part2-Test2/labguides/source/images/logo.jpg differ diff --git a/topologies/training-level7-part2-Test2/labguides/source/index.rst b/topologies/training-level7-part2-Test2/labguides/source/index.rst new file mode 100644 index 000000000..bb76aaa2e --- /dev/null +++ b/topologies/training-level7-part2-Test2/labguides/source/index.rst @@ -0,0 +1,8 @@ +Welcome to the Arista Training documentation! +======================================== + +.. toctree:: + :maxdepth: 1 + :caption: EOS Configuration + + connecting.rst diff --git a/topologies/training-level7-part2-Test2/topo_build.yml b/topologies/training-level7-part2-Test2/topo_build.yml new file mode 100644 index 000000000..54fd891c4 --- /dev/null +++ b/topologies/training-level7-part2-Test2/topo_build.yml @@ -0,0 +1,1112 @@ +host_cpu: 4 +cvp_cpu: 24 +cvp_nodes: 1 +veos_cpu: 2 +nodes: +# Spines DC1 + - spine1-DC1: + ip_addr: 192.168.0.11 + sys_mac: 00:1c:73:b1:c6:01 + neighbors: + # connection to spine2 + - neighborDevice: spine2-DC1 + neighborPort: Ethernet1 + port: Ethernet1 + # connections to leafs + - neighborDevice: leaf1-DC1 + neighborPort: Ethernet3 + port: Ethernet2 + - neighborDevice: leaf2-DC1 + neighborPort: Ethernet3 + port: Ethernet3 + - neighborDevice: leaf3-DC1 + neighborPort: Ethernet3 + port: Ethernet4 + - neighborDevice: leaf4-DC1 + neighborPort: Ethernet3 + port: Ethernet5 + # connections to border-leafs + - neighborDevice: borderleaf1-DC1 + neighborPort: Ethernet3 + port: Ethernet6 + - neighborDevice: borderleaf2-DC1 + neighborPort: Ethernet3 + port: Ethernet7 + - neighborDevice: OOB-DC1 + neighborPort: Ethernet2 + port: Ethernet15 + + - spine2-DC1: + ip_addr: 192.168.0.12 + sys_mac: 00:1c:73:b2:c6:01 + neighbors: + # connection to spine2 + - neighborDevice: spine1-DC1 + neighborPort: Ethernet1 + port: Ethernet1 + # connections to leafs + - neighborDevice: leaf1-DC1 + neighborPort: Ethernet4 + port: Ethernet2 + - neighborDevice: leaf2-DC1 + neighborPort: Ethernet4 + port: Ethernet3 + - neighborDevice: leaf3-DC1 + neighborPort: Ethernet4 + port: Ethernet4 + - neighborDevice: leaf4-DC1 + neighborPort: Ethernet4 + port: Ethernet5 + # connections to border-leafs + - neighborDevice: borderleaf1-DC1 + neighborPort: Ethernet4 + port: Ethernet6 + - neighborDevice: borderleaf2-DC1 + neighborPort: Ethernet4 + port: Ethernet7 + - neighborDevice: OOB-DC1 + neighborPort: Ethernet3 + port: Ethernet15 + + - spine3-DC1: + ip_addr: 192.168.0.13 + sys_mac: 00:1c:73:b3:c6:01 + neighbors: + # connections to leafs + - neighborDevice: leaf1-DC1 + neighborPort: Ethernet5 + port: Ethernet2 + - neighborDevice: leaf2-DC1 + neighborPort: Ethernet5 + port: Ethernet3 + - neighborDevice: leaf3-DC1 + neighborPort: Ethernet5 + port: Ethernet4 + - neighborDevice: leaf4-DC1 + neighborPort: Ethernet5 + port: Ethernet5 + # connections to border-leafs + - neighborDevice: borderleaf1-DC1 + neighborPort: Ethernet5 + port: Ethernet6 + - neighborDevice: borderleaf2-DC1 + neighborPort: Ethernet5 + port: Ethernet7 + - neighborDevice: OOB-DC1 + neighborPort: Ethernet4 + port: Ethernet15 + +# Spines DC2 + + - spine1-DC2: + ip_addr: 192.168.0.14 + sys_mac: 00:1c:73:b4:c6:01 + neighbors: + # connection to spine2 + - neighborDevice: spine2-DC2 + neighborPort: Ethernet1 + port: Ethernet1 + # connections to leafs + - neighborDevice: leaf1-DC2 + neighborPort: Ethernet3 + port: Ethernet2 + - neighborDevice: leaf2-DC2 + neighborPort: Ethernet3 + port: Ethernet3 + - neighborDevice: leaf3-DC2 + neighborPort: Ethernet3 + port: Ethernet4 + - neighborDevice: leaf4-DC2 + neighborPort: Ethernet3 + port: Ethernet5 + # connections to border-leafs + - neighborDevice: borderleaf1-DC2 + neighborPort: Ethernet3 + port: Ethernet6 + - neighborDevice: borderleaf2-DC2 + neighborPort: Ethernet3 + port: Ethernet7 + - neighborDevice: OOB-DC2 + neighborPort: Ethernet2 + port: Ethernet15 + + - spine2-DC2: + ip_addr: 192.168.0.15 + sys_mac: 00:1c:73:b5:c6:01 + neighbors: + # connection to spine2 + - neighborDevice: spine1-DC2 + neighborPort: Ethernet1 + port: Ethernet1 + # connections to leafs + - neighborDevice: leaf1-DC2 + neighborPort: Ethernet4 + port: Ethernet2 + - neighborDevice: leaf2-DC2 + neighborPort: Ethernet4 + port: Ethernet3 + - neighborDevice: leaf3-DC2 + neighborPort: Ethernet4 + port: Ethernet4 + - neighborDevice: leaf4-DC2 + neighborPort: Ethernet4 + port: Ethernet5 + # connections to border-leafs + - neighborDevice: borderleaf1-DC2 + neighborPort: Ethernet4 + port: Ethernet6 + - neighborDevice: borderleaf2-DC2 + neighborPort: Ethernet4 + port: Ethernet7 + - neighborDevice: OOB-DC2 + neighborPort: Ethernet3 + port: Ethernet15 + + - spine3-DC2: + ip_addr: 192.168.0.16 + sys_mac: 00:1c:73:b6:c6:01 + neighbors: + # connections to leafs + - neighborDevice: leaf1-DC2 + neighborPort: Ethernet5 + port: Ethernet2 + - neighborDevice: leaf2-DC2 + neighborPort: Ethernet5 + port: Ethernet3 + - neighborDevice: leaf3-DC2 + neighborPort: Ethernet5 + port: Ethernet4 + - neighborDevice: leaf4-DC2 + neighborPort: Ethernet5 + port: Ethernet5 + # connections to border-leafs + - neighborDevice: borderleaf1-DC2 + neighborPort: Ethernet5 + port: Ethernet6 + - neighborDevice: borderleaf2-DC2 + neighborPort: Ethernet5 + port: Ethernet7 + - neighborDevice: OOB-DC2 + neighborPort: Ethernet4 + port: Ethernet15 + +# Spines DC3 + - spine1-DC3: + ip_addr: 192.168.0.77 + sys_mac: 00:1c:73:17:c6:01 + neighbors: + - neighborDevice: spine2-DC3 + neighborPort: Ethernet3 + port: Ethernet3 + - neighborDevice: spine2-DC3 + neighborPort: Ethernet4 + port: Ethernet4 + - neighborDevice: leaf1-DC3 + neighborPort: Ethernet5 + port: Ethernet5 + - neighborDevice: leaf2-DC3 + neighborPort: Ethernet6 + port: Ethernet6 + - neighborDevice: PE31 + neighborPort: Ethernet3 + port: Ethernet7 + + - spine2-DC3: + ip_addr: 192.168.0.78 + sys_mac: 00:1c:73:18:c6:01 + neighbors: + - neighborDevice: spine1-DC3 + neighborPort: Ethernet3 + port: Ethernet3 + - neighborDevice: spine1-DC3 + neighborPort: Ethernet4 + port: Ethernet4 + - neighborDevice: leaf2-DC3 + neighborPort: Ethernet5 + port: Ethernet5 + - neighborDevice: leaf1-DC3 + neighborPort: Ethernet6 + port: Ethernet6 + - neighborDevice: PE31 + neighborPort: Ethernet4 + port: Ethernet7 + +# Leafs DC1 + - leaf1-DC1: + ip_addr: 192.168.0.21 + sys_mac: 00:1c:73:c1:c6:01 + neighbors: + # connections to leafs + - neighborDevice: leaf2-DC1 + neighborPort: Ethernet1 + port: Ethernet1 + - neighborDevice: leaf2-DC1 + neighborPort: Ethernet2 + port: Ethernet2 + # connections to spines + - neighborDevice: spine1-DC1 + neighborPort: Ethernet2 + port: Ethernet3 + - neighborDevice: spine2-DC1 + neighborPort: Ethernet2 + port: Ethernet4 + - neighborDevice: spine3-DC1 + neighborPort: Ethernet2 + port: Ethernet5 + # connections to host-switches + - neighborDevice: host1-DC1 + neighborPort: Ethernet1 + port: Ethernet6 + - neighborDevice: host1-DC1 + neighborPort: Ethernet3 + port: Ethernet7 + - neighborDevice: OOB-DC1 + neighborPort: Ethernet5 + port: Ethernet15 + + + - leaf2-DC1: + ip_addr: 192.168.0.22 + sys_mac: 00:1c:73:c2:c6:01 + neighbors: + # connections to leafs + - neighborDevice: leaf1-DC1 + neighborPort: Ethernet1 + port: Ethernet1 + - neighborDevice: leaf1-DC1 + neighborPort: Ethernet2 + port: Ethernet2 + # connections to spines + - neighborDevice: spine1-DC1 + neighborPort: Ethernet3 + port: Ethernet3 + - neighborDevice: spine2-DC1 + neighborPort: Ethernet3 + port: Ethernet4 + - neighborDevice: spine3-DC1 + neighborPort: Ethernet3 + port: Ethernet5 + # connections to host-switches + - neighborDevice: host1-DC1 + neighborPort: Ethernet2 + port: Ethernet6 + - neighborDevice: host1-DC1 + neighborPort: Ethernet4 + port: Ethernet7 + - neighborDevice: OOB-DC1 + neighborPort: Ethernet6 + port: Ethernet15 + + + - leaf3-DC1: + ip_addr: 192.168.0.23 + sys_mac: 00:1c:73:c3:c6:01 + neighbors: + # connections to leafs + - neighborDevice: leaf4-DC1 + neighborPort: Ethernet1 + port: Ethernet1 + - neighborDevice: leaf4-DC1 + neighborPort: Ethernet2 + port: Ethernet2 + # connections to spines + - neighborDevice: spine1-DC1 + neighborPort: Ethernet4 + port: Ethernet3 + - neighborDevice: spine2-DC1 + neighborPort: Ethernet4 + port: Ethernet4 + - neighborDevice: spine3-DC1 + neighborPort: Ethernet4 + port: Ethernet5 + # connections to host-switches + - neighborDevice: host2-DC1 + neighborPort: Ethernet1 + port: Ethernet6 + - neighborDevice: host2-DC1 + neighborPort: Ethernet3 + port: Ethernet7 + - neighborDevice: OOB-DC1 + neighborPort: Ethernet7 + port: Ethernet15 + + + - leaf4-DC1: + ip_addr: 192.168.0.24 + sys_mac: 00:1c:73:c4:c6:01 + neighbors: + # connections to leafs + - neighborDevice: leaf3-DC1 + neighborPort: Ethernet1 + port: Ethernet1 + - neighborDevice: leaf3-DC1 + neighborPort: Ethernet2 + port: Ethernet2 + # connections to spines + - neighborDevice: spine1-DC1 + neighborPort: Ethernet5 + port: Ethernet3 + - neighborDevice: spine2-DC1 + neighborPort: Ethernet5 + port: Ethernet4 + - neighborDevice: spine3-DC1 + neighborPort: Ethernet5 + port: Ethernet5 + # connections to host-switches + - neighborDevice: host2-DC1 + neighborPort: Ethernet2 + port: Ethernet6 + - neighborDevice: host2-DC1 + neighborPort: Ethernet4 + port: Ethernet7 + - neighborDevice: OOB-DC1 + neighborPort: Ethernet8 + port: Ethernet15 + + + # Border-leafs + - borderleaf1-DC1: + ip_addr: 192.168.0.25 + sys_mac: 00:1c:73:c5:c6:01 + neighbors: + # connections to Border-leafs + - neighborDevice: borderleaf2-DC1 + neighborPort: Ethernet1 + port: Ethernet1 + - neighborDevice: borderleaf2-DC1 + neighborPort: Ethernet2 + port: Ethernet2 + # connections to spines + - neighborDevice: spine1-DC1 + neighborPort: Ethernet6 + port: Ethernet3 + - neighborDevice: spine2-DC1 + neighborPort: Ethernet6 + port: Ethernet4 + - neighborDevice: spine3-DC1 + neighborPort: Ethernet6 + port: Ethernet5 + - neighborDevice: PE12 + neighborPort: Ethernet2 + port: Ethernet10 + - neighborDevice: PE11 + neighborPort: Ethernet2 + port: Ethernet12 + - neighborDevice: OOB-DC1 + neighborPort: Ethernet9 + port: Ethernet15 + + + + - borderleaf2-DC1: + ip_addr: 192.168.0.26 + sys_mac: 00:1c:73:c6:c6:01 + neighbors: + # connections to Border-leafs + - neighborDevice: borderleaf1-DC1 + neighborPort: Ethernet1 + port: Ethernet1 + - neighborDevice: borderleaf1-DC1 + neighborPort: Ethernet2 + port: Ethernet2 + # connections to spines + - neighborDevice: spine1-DC1 + neighborPort: Ethernet7 + port: Ethernet3 + - neighborDevice: spine2-DC1 + neighborPort: Ethernet7 + port: Ethernet4 + - neighborDevice: spine3-DC1 + neighborPort: Ethernet7 + port: Ethernet5 + - neighborDevice: PE12 + neighborPort: Ethernet3 + port: Ethernet10 + - neighborDevice: PE11 + neighborPort: Ethernet3 + port: Ethernet12 + - neighborDevice: OOB-DC1 + neighborPort: Ethernet10 + port: Ethernet15 + + +# Leafs DC2 + - leaf1-DC2: + ip_addr: 192.168.0.31 + sys_mac: 00:1c:73:d1:c6:01 + neighbors: + # connections to leafs + - neighborDevice: leaf2-DC2 + neighborPort: Ethernet1 + port: Ethernet1 + - neighborDevice: leaf2-DC2 + neighborPort: Ethernet2 + port: Ethernet2 + # connections to spines + - neighborDevice: spine1-DC2 + neighborPort: Ethernet2 + port: Ethernet3 + - neighborDevice: spine2-DC2 + neighborPort: Ethernet2 + port: Ethernet4 + - neighborDevice: spine3-DC2 + neighborPort: Ethernet2 + port: Ethernet5 + # connections to host-switches + - neighborDevice: host1-DC2 + neighborPort: Ethernet1 + port: Ethernet6 + - neighborDevice: host1-DC2 + neighborPort: Ethernet3 + port: Ethernet7 + - neighborDevice: OOB-DC2 + neighborPort: Ethernet5 + port: Ethernet15 + + + - leaf2-DC2: + ip_addr: 192.168.0.32 + sys_mac: 00:1c:73:d2:c6:01 + neighbors: + # connections to leafs + - neighborDevice: leaf1-DC2 + neighborPort: Ethernet1 + port: Ethernet1 + - neighborDevice: leaf1-DC2 + neighborPort: Ethernet2 + port: Ethernet2 + # connections to spines + - neighborDevice: spine1-DC2 + neighborPort: Ethernet3 + port: Ethernet3 + - neighborDevice: spine2-DC2 + neighborPort: Ethernet3 + port: Ethernet4 + - neighborDevice: spine3-DC2 + neighborPort: Ethernet3 + port: Ethernet5 + # connections to host-switches + - neighborDevice: host1-DC2 + neighborPort: Ethernet2 + port: Ethernet6 + - neighborDevice: host1-DC2 + neighborPort: Ethernet4 + port: Ethernet7 + - neighborDevice: OOB-DC2 + neighborPort: Ethernet6 + port: Ethernet15 + + + - leaf3-DC2: + ip_addr: 192.168.0.33 + sys_mac: 00:1c:73:d3:c6:01 + neighbors: + # connections to leafs + - neighborDevice: leaf4-DC2 + neighborPort: Ethernet1 + port: Ethernet1 + - neighborDevice: leaf4-DC2 + neighborPort: Ethernet2 + port: Ethernet2 + # connections to spines + - neighborDevice: spine1-DC2 + neighborPort: Ethernet4 + port: Ethernet3 + - neighborDevice: spine2-DC2 + neighborPort: Ethernet4 + port: Ethernet4 + - neighborDevice: spine3-DC2 + neighborPort: Ethernet4 + port: Ethernet5 + # connections to host-switches + - neighborDevice: host2-DC2 + neighborPort: Ethernet1 + port: Ethernet6 + - neighborDevice: host2-DC2 + neighborPort: Ethernet3 + port: Ethernet7 + - neighborDevice: OOB-DC2 + neighborPort: Ethernet7 + port: Ethernet15 + + + - leaf4-DC2: + ip_addr: 192.168.0.34 + sys_mac: 00:1c:73:d4:c6:01 + neighbors: + # connections to leafs + - neighborDevice: leaf3-DC2 + neighborPort: Ethernet1 + port: Ethernet1 + - neighborDevice: leaf3-DC2 + neighborPort: Ethernet2 + port: Ethernet2 + # connections to spines + - neighborDevice: spine1-DC2 + neighborPort: Ethernet5 + port: Ethernet3 + - neighborDevice: spine2-DC2 + neighborPort: Ethernet5 + port: Ethernet4 + - neighborDevice: spine3-DC2 + neighborPort: Ethernet5 + port: Ethernet5 + # connections to host-switches + - neighborDevice: host2-DC2 + neighborPort: Ethernet2 + port: Ethernet6 + - neighborDevice: host2-DC2 + neighborPort: Ethernet4 + port: Ethernet7 + - neighborDevice: OOB-DC2 + neighborPort: Ethernet8 + port: Ethernet15 + + + # Border-leafs + - borderleaf1-DC2: + ip_addr: 192.168.0.35 + sys_mac: 00:1c:73:d5:c6:01 + neighbors: + # connections to Borderleafs + - neighborDevice: borderleaf2-DC2 + neighborPort: Ethernet1 + port: Ethernet1 + - neighborDevice: borderleaf2-DC2 + neighborPort: Ethernet2 + port: Ethernet2 + # connections to spines + - neighborDevice: spine1-DC2 + neighborPort: Ethernet6 + port: Ethernet3 + - neighborDevice: spine2-DC2 + neighborPort: Ethernet6 + port: Ethernet4 + - neighborDevice: spine3-DC2 + neighborPort: Ethernet6 + port: Ethernet5 + - neighborDevice: PE22 + neighborPort: Ethernet2 + port: Ethernet10 + - neighborDevice: PE21 + neighborPort: Ethernet2 + port: Ethernet12 + - neighborDevice: OOB-DC2 + neighborPort: Ethernet9 + port: Ethernet15 + + - borderleaf2-DC2: + ip_addr: 192.168.0.36 + sys_mac: 00:1c:73:d6:c6:01 + neighbors: + # connections to Borderleafs + - neighborDevice: borderleaf1-DC2 + neighborPort: Ethernet1 + port: Ethernet1 + - neighborDevice: borderleaf1-DC2 + neighborPort: Ethernet2 + port: Ethernet2 + # connections to spines + - neighborDevice: spine1-DC2 + neighborPort: Ethernet7 + port: Ethernet3 + - neighborDevice: spine2-DC2 + neighborPort: Ethernet7 + port: Ethernet4 + - neighborDevice: spine3-DC2 + neighborPort: Ethernet7 + port: Ethernet5 + - neighborDevice: PE22 + neighborPort: Ethernet3 + port: Ethernet10 + - neighborDevice: PE21 + neighborPort: Ethernet3 + port: Ethernet12 + - neighborDevice: OOB-DC2 + neighborPort: Ethernet10 + port: Ethernet15 + +# Leafs DC3 + - leaf1-DC3: + ip_addr: 192.168.0.80 + sys_mac: 00:1c:73:20:c6:01 + neighbors: + - neighborDevice: leaf2-DC3 + neighborPort: Ethernet3 + port: Ethernet3 + - neighborDevice: leaf2-DC3 + neighborPort: Ethernet4 + port: Ethernet4 + - neighborDevice: spine1-DC3 + neighborPort: Ethernet5 + port: Ethernet5 + - neighborDevice: spine2-DC3 + neighborPort: Ethernet6 + port: Ethernet6 + - neighborDevice: host1-DC3 + neighborPort: Ethernet1 + port: Ethernet1 + - neighborDevice: host2-DC3 + neighborPort: Ethernet2 + port: Ethernet2 + + - leaf2-DC3: + ip_addr: 192.168.0.81 + sys_mac: 00:1c:73:21:c6:01 + neighbors: + - neighborDevice: leaf1-DC3 + neighborPort: Ethernet3 + port: Ethernet3 + - neighborDevice: leaf1-DC3 + neighborPort: Ethernet4 + port: Ethernet4 + - neighborDevice: spine2-DC3 + neighborPort: Ethernet5 + port: Ethernet5 + - neighborDevice: spine1-DC3 + neighborPort: Ethernet6 + port: Ethernet6 + - neighborDevice: host2-DC3 + neighborPort: Ethernet1 + port: Ethernet1 + - neighborDevice: host1-DC3 + neighborPort: Ethernet2 + port: Ethernet2 + +# Hosts DC1 + - host1-DC1: + ip_addr: 192.168.0.51 + sys_mac: 00:1c:73:f1:c6:01 + neighbors: + # connections to leafs + - neighborDevice: leaf1-DC1 + neighborPort: Ethernet6 + port: Ethernet1 + - neighborDevice: leaf1-DC1 + neighborPort: Ethernet7 + port: Ethernet3 + - neighborDevice: leaf2-DC1 + neighborPort: Ethernet6 + port: Ethernet2 + - neighborDevice: leaf2-DC1 + neighborPort: Ethernet7 + port: Ethernet4 + - neighborDevice: OOB-DC1 + neighborPort: Ethernet11 + port: Ethernet15 + + - host2-DC1: + ip_addr: 192.168.0.52 + sys_mac: 00:1c:73:f2:c6:01 + neighbors: + # connections to leafs + - neighborDevice: leaf3-DC1 + neighborPort: Ethernet6 + port: Ethernet1 + - neighborDevice: leaf3-DC1 + neighborPort: Ethernet7 + port: Ethernet3 + - neighborDevice: leaf4-DC1 + neighborPort: Ethernet6 + port: Ethernet2 + - neighborDevice: leaf4-DC1 + neighborPort: Ethernet7 + port: Ethernet4 + - neighborDevice: OOB-DC1 + neighborPort: Ethernet12 + port: Ethernet15 + +# Hosts DC2 + - host1-DC2: + ip_addr: 192.168.0.53 + sys_mac: 00:1c:73:f3:c6:01 + neighbors: + # connections to leafs + - neighborDevice: leaf1-DC2 + neighborPort: Ethernet6 + port: Ethernet1 + - neighborDevice: leaf1-DC2 + neighborPort: Ethernet7 + port: Ethernet3 + - neighborDevice: leaf2-DC2 + neighborPort: Ethernet6 + port: Ethernet2 + - neighborDevice: leaf2-DC2 + neighborPort: Ethernet7 + port: Ethernet4 + - neighborDevice: OOB-DC2 + neighborPort: Ethernet11 + port: Ethernet15 + + - host2-DC2: + ip_addr: 192.168.0.54 + sys_mac: 00:1c:73:f4:c6:01 + neighbors: + # connections to leafs + - neighborDevice: leaf3-DC2 + neighborPort: Ethernet6 + port: Ethernet1 + - neighborDevice: leaf3-DC2 + neighborPort: Ethernet7 + port: Ethernet3 + - neighborDevice: leaf4-DC2 + neighborPort: Ethernet6 + port: Ethernet2 + - neighborDevice: leaf4-DC2 + neighborPort: Ethernet7 + port: Ethernet4 + - neighborDevice: OOB-DC2 + neighborPort: Ethernet12 + port: Ethernet15 + +# OOB + - OOB-DC1: + ip_addr: 192.168.0.62 + sys_mac: 00:1c:73:02:c6:01 + neighbors: + - neighborDevice: OOB-CORE + neighborPort: Ethernet1 + port: Ethernet1 + - neighborDevice: spine1-DC1 + neighborPort: Ethernet15 + port: Ethernet2 + - neighborDevice: spine2-DC1 + neighborPort: Ethernet15 + port: Ethernet3 + - neighborDevice: spine3-DC1 + neighborPort: Ethernet15 + port: Ethernet4 + - neighborDevice: leaf1-DC1 + neighborPort: Ethernet15 + port: Ethernet5 + - neighborDevice: leaf2-DC1 + neighborPort: Ethernet15 + port: Ethernet6 + - neighborDevice: leaf3-DC1 + neighborPort: Ethernet15 + port: Ethernet7 + - neighborDevice: leaf4-DC1 + neighborPort: Ethernet15 + port: Ethernet8 + - neighborDevice: borderleaf1-DC1 + neighborPort: Ethernet15 + port: Ethernet9 + - neighborDevice: borderleaf2-DC1 + neighborPort: Ethernet15 + port: Ethernet10 + - neighborDevice: host1-DC1 + neighborPort: Ethernet15 + port: Ethernet11 + - neighborDevice: host2-DC1 + neighborPort: Ethernet15 + port: Ethernet12 + + - OOB-DC2: + ip_addr: 192.168.0.63 + sys_mac: 00:1c:73:03:c6:01 + neighbors: + - neighborDevice: OOB-CORE + neighborPort: Ethernet2 + port: Ethernet1 + - neighborDevice: spine1-DC2 + neighborPort: Ethernet15 + port: Ethernet2 + - neighborDevice: spine2-DC2 + neighborPort: Ethernet15 + port: Ethernet3 + - neighborDevice: spine3-DC2 + neighborPort: Ethernet15 + port: Ethernet4 + - neighborDevice: leaf1-DC2 + neighborPort: Ethernet15 + port: Ethernet5 + - neighborDevice: leaf2-DC2 + neighborPort: Ethernet15 + port: Ethernet6 + - neighborDevice: leaf3-DC2 + neighborPort: Ethernet15 + port: Ethernet7 + - neighborDevice: leaf4-DC2 + neighborPort: Ethernet15 + port: Ethernet8 + - neighborDevice: borderleaf1-DC2 + neighborPort: Ethernet15 + port: Ethernet9 + - neighborDevice: borderleaf2-DC2 + neighborPort: Ethernet15 + port: Ethernet10 + - neighborDevice: host1-DC2 + neighborPort: Ethernet15 + port: Ethernet11 + - neighborDevice: host2-DC2 + neighborPort: Ethernet15 + port: Ethernet12 + + - OOB-CORE: + ip_addr: 192.168.0.61 + sys_mac: 00:1c:73:04:c6:01 + neighbors: + - neighborDevice: OOB-DC1 + neighborPort: Ethernet1 + port: Ethernet1 + - neighborDevice: OOB-DC2 + neighborPort: Ethernet1 + port: Ethernet2 + +# SR-Domain 1 + - PE11: + ip_addr: 192.168.0.91 + sys_mac: 00:1c:73:91:c6:01 + neighbors: + - neighborDevice: P1 + neighborPort: Ethernet2 + port: Ethernet1 + - neighborDevice: borderleaf1-DC1 + neighborPort: Ethernet12 + port: Ethernet2 + - neighborDevice: borderleaf2-DC1 + neighborPort: Ethernet12 + port: Ethernet3 + - neighborDevice: RR1 + neighborPort: Ethernet4 + port: Ethernet4 + + + - PE12: + ip_addr: 192.168.0.92 + sys_mac: 00:1c:73:92:c6:01 + neighbors: + - neighborDevice: P1 + neighborPort: Ethernet1 + port: Ethernet1 + - neighborDevice: borderleaf1-DC1 + neighborPort: Ethernet10 + port: Ethernet2 + - neighborDevice: borderleaf2-DC1 + neighborPort: Ethernet10 + port: Ethernet3 + - neighborDevice: RR1 + neighborPort: Ethernet3 + port: Ethernet4 + + + - P1: + ip_addr: 192.168.0.93 + sys_mac: 00:1c:73:93:c6:01 + neighbors: + - neighborDevice: PE12 + neighborPort: Ethernet1 + port: Ethernet1 + - neighborDevice: PE11 + neighborPort: Ethernet1 + port: Ethernet2 + - neighborDevice: ASBR1 + neighborPort: Ethernet3 + port: Ethernet3 + - neighborDevice: RR1 + neighborPort: Ethernet2 + port: Ethernet4 + + + - ASBR1: + ip_addr: 192.168.0.94 + sys_mac: 00:1c:73:94:c6:01 + neighbors: + - neighborDevice: ASBR2 + neighborPort: Ethernet1 + port: Ethernet1 + - neighborDevice: ASBR3 + neighborPort: Ethernet1 + port: Ethernet2 + - neighborDevice: P1 + neighborPort: Ethernet3 + port: Ethernet3 + - neighborDevice: RR1 + neighborPort: Ethernet1 + port: Ethernet4 + + - RR1: + ip_addr: 192.168.0.41 + sys_mac: 00:1c:73:41:c6:01 + neighbors: + - neighborDevice: ASBR1 + neighborPort: Ethernet4 + port: Ethernet1 + - neighborDevice: P1 + neighborPort: Ethernet4 + port: Ethernet2 + - neighborDevice: PE12 + neighborPort: Ethernet4 + port: Ethernet3 + - neighborDevice: PE11 + neighborPort: Ethernet4 + port: Ethernet4 + +# SR-Domain-2 + - PE21: + ip_addr: 192.168.0.95 + sys_mac: 00:1c:73:95:c6:01 + neighbors: + - neighborDevice: P2 + neighborPort: Ethernet2 + port: Ethernet1 + - neighborDevice: borderleaf1-DC2 + neighborPort: Ethernet12 + port: Ethernet2 + - neighborDevice: borderleaf2-DC2 + neighborPort: Ethernet12 + port: Ethernet3 + - neighborDevice: RR2 + neighborPort: Ethernet4 + port: Ethernet4 + + + - PE22: + ip_addr: 192.168.0.96 + sys_mac: 00:1c:73:96:c6:01 + neighbors: + - neighborDevice: P2 + neighborPort: Ethernet1 + port: Ethernet1 + - neighborDevice: borderleaf1-DC2 + neighborPort: Ethernet10 + port: Ethernet2 + - neighborDevice: borderleaf2-DC2 + neighborPort: Ethernet10 + port: Ethernet3 + - neighborDevice: RR2 + neighborPort: Ethernet3 + port: Ethernet4 + + + - ASBR2: + ip_addr: 192.168.0.97 + sys_mac: 00:1c:73:97:c6:01 + neighbors: + - neighborDevice: ASBR1 + neighborPort: Ethernet1 + port: Ethernet1 + - neighborDevice: ASBR3 + neighborPort: Ethernet2 + port: Ethernet2 + - neighborDevice: P2 + neighborPort: Ethernet3 + port: Ethernet3 + - neighborDevice: RR2 + neighborPort: Ethernet1 + port: Ethernet4 + + - P2: + ip_addr: 192.168.0.98 + sys_mac: 00:1c:73:98:c6:01 + neighbors: + - neighborDevice: PE22 + neighborPort: Ethernet1 + port: Ethernet1 + - neighborDevice: PE21 + neighborPort: Ethernet1 + port: Ethernet2 + - neighborDevice: ASBR2 + neighborPort: Ethernet3 + port: Ethernet3 + - neighborDevice: RR2 + neighborPort: Ethernet2 + port: Ethernet4 + + - RR2: + ip_addr: 192.168.0.42 + sys_mac: 00:1c:73:42:c6:01 + neighbors: + - neighborDevice: ASBR2 + neighborPort: Ethernet4 + port: Ethernet1 + - neighborDevice: P2 + neighborPort: Ethernet4 + port: Ethernet2 + - neighborDevice: PE22 + neighborPort: Ethernet4 + port: Ethernet3 + - neighborDevice: PE21 + neighborPort: Ethernet4 + port: Ethernet4 + + +# SR-Domain-3 + - PE31: + ip_addr: 192.168.0.99 + sys_mac: 00:1c:73:99:c6:01 + neighbors: + - neighborDevice: ASBR3 + neighborPort: Ethernet3 + port: Ethernet1 + - neighborDevice: RR3 + neighborPort: Ethernet2 + port: Ethernet2 + - neighborDevice: spine1-DC3 + neighborPort: Ethernet7 + port: Ethernet3 + - neighborDevice: spine2-DC3 + neighborPort: Ethernet7 + port: Ethernet4 + + - ASBR3: + ip_addr: 192.168.0.90 + sys_mac: 00:1c:73:90:c6:01 + neighbors: + - neighborDevice: ASBR1 + neighborPort: Ethernet2 + port: Ethernet1 + - neighborDevice: ASBR2 + neighborPort: Ethernet2 + port: Ethernet2 + - neighborDevice: PE31 + neighborPort: Ethernet1 + port: Ethernet3 + - neighborDevice: RR3 + neighborPort: Ethernet1 + port: Ethernet4 + + + - RR3: + ip_addr: 192.168.0.43 + sys_mac: 00:1c:73:43:c6:01 + neighbors: + - neighborDevice: ASBR3 + neighborPort: Ethernet4 + port: Ethernet1 + - neighborDevice: PE31 + neighborPort: Ethernet2 + port: Ethernet2 + + + + +# Hosts DC3 + - host1-DC3: + ip_addr: 192.168.0.82 + sys_mac: 00:1c:73:22:c6:01 + neighbors: + - neighborDevice: leaf1-DC3 + neighborPort: Ethernet1 + port: Ethernet1 + - neighborDevice: leaf2-DC3 + neighborPort: Ethernet2 + port: Ethernet2 + + - host2-DC3: + ip_addr: 192.168.0.83 + sys_mac: 00:1c:73:23:c6:01 + neighbors: + - neighborDevice: leaf2-DC3 + neighborPort: Ethernet1 + port: Ethernet1 + - neighborDevice: leaf1-DC3 + neighborPort: Ethernet2 + port: Ethernet2 + +# CVX + # - CVX: + # ip_addr: 192.168.0.4 + # sys_mac: 00:1c:73:a4:c6:01 + # neighbors: [] +additional_ssh_nodes: \ No newline at end of file diff --git a/topologies/training-level7-part2/atd-topo.png b/topologies/training-level7-part2/atd-topo.png new file mode 100644 index 000000000..db5ba885f Binary files /dev/null and b/topologies/training-level7-part2/atd-topo.png differ diff --git a/topologies/training-level7-part2/configlets/ATD-INFRA b/topologies/training-level7-part2/configlets/ATD-INFRA new file mode 100644 index 000000000..de87bc743 --- /dev/null +++ b/topologies/training-level7-part2/configlets/ATD-INFRA @@ -0,0 +1,53 @@ +vrf instance MGMT +! +daemon TerminAttr + exec /usr/bin/TerminAttr -cvcompression=gzip -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent -cvaddr=192.168.0.5:9910 -cvauth=token,/tmp/token -cvvrf=MGMT -taillogs -disableaaa + no shutdown +! +alias mlag-reload bash /mnt/flash/shut_intfs && sudo shutdown now -r +alias conint sh interface | i connected +alias senz show interface counter error | nz +alias shmc show int | awk '/^[A-Z]/ { intf = $1 } /, address is/ { print intf, $6 }' +alias snz show interface counter | nz +alias spd show port-channel %1 detail all +alias sqnz show interface counter queue | nz +alias srnz show interface counter rate | nz +alias intdesc + !! Usage: intdesc interface-name description + 10 config + 20 int %1 + 30 desc %2 + 40 exit +! +dns domain arista.lab +! +service routing protocols model multi-agent +! +ntp server vrf MGMT 192.168.0.1 iburst source Management0 +! +radius-server host 192.168.0.1 vrf MGMT key 7 0207165218120E +! +aaa group server radius atds + server 192.168.0.1 vrf MGMT +! +aaa authentication login default group atds local +aaa authorization exec default group atds local +aaa authorization commands all default local +! +username Script secret sha512 $6$PNfpb9anSBQ5/aia$phaa3ar5pwkntenD9WHc6Ed5b96lbW0dc0bjtwPnFLaDiCK8D5Cjl6ewP/xdNbl4PtS6Paq.3SssN8pj05NQm. +username admin privilege 15 role network-admin secret 5 $1$5O85YVVn$HrXcfOivJEnISTMb6xrJc. +username arista privilege 15 role network-admin secret 5 $1$4VjIjfd1$XkUVulbNDESHFzcxDU.Tk1 +! +username arista ssh-key ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC+ERvV4GaPq3FzxY8T+5hMF/1T+l8wiPsVCtOrZU4Hy6NCNlAiDBdA/RUtX5/aOu5JvHyPTVHqWJ0qi9BqU3rxCNl/l2/5UZbm9RPzdZ1QCwoYwPB9/j/tYJV8lZdr6t0yGBfxgzD3oW/zF7a+ZtASaMAu7lkgoqPK2pVIGa+Y9ZCsA0Xq756XpLCw+d3pHKHvIkgWLCo9FoeIv8f/bu5u/ztzRE+Nvl+o5add6MxnjsXz3s7BnW2FX6JNjyp0Z+OXjupQc2gcfFvpd/dA2lCNuuaCHkRgyPwIZtWPmNqMRXPp37mlPwV43qDJRVPQkvh0xPxwS35BbzUxWdT+ZLZv +! +ip radius source-interface Management0 +! +ip routing vrf MGMT +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 +! +management api http-commands + no shutdown + vrf MGMT + no shutdown +! diff --git a/topologies/training-level7-part2/configlets/CVX-BASE b/topologies/training-level7-part2/configlets/CVX-BASE new file mode 100644 index 000000000..f85e7ce1d --- /dev/null +++ b/topologies/training-level7-part2/configlets/CVX-BASE @@ -0,0 +1,8 @@ +hostname cvx +! +interface Management0 + vrf MGMT + ip address 192.168.0.4/24 +! +ip routing +! diff --git a/topologies/training-level7-part2/configlets/DCI-BASE b/topologies/training-level7-part2/configlets/DCI-BASE new file mode 100644 index 000000000..435fb7e6e --- /dev/null +++ b/topologies/training-level7-part2/configlets/DCI-BASE @@ -0,0 +1,10 @@ +service routing protocols model multi-agent +! +hostname DCI +! +interface Management0 + vrf MGMT + ip address 192.168.0.76/24 +! +ip routing +! diff --git a/topologies/training-level7-part2/configlets/OOB-CORE-BASE b/topologies/training-level7-part2/configlets/OOB-CORE-BASE new file mode 100644 index 000000000..d20149498 --- /dev/null +++ b/topologies/training-level7-part2/configlets/OOB-CORE-BASE @@ -0,0 +1,10 @@ +service routing protocols model multi-agent +! +hostname OOB-CORE +! +interface Management0 + vrf MGMT + ip address 192.168.0.61/24 +! +ip routing +! diff --git a/topologies/training-level7-part2/configlets/OOB-DC1-BASE b/topologies/training-level7-part2/configlets/OOB-DC1-BASE new file mode 100644 index 000000000..2a8ece18a --- /dev/null +++ b/topologies/training-level7-part2/configlets/OOB-DC1-BASE @@ -0,0 +1,10 @@ +service routing protocols model multi-agent +! +hostname OOB-DC1 +! +interface Management0 + vrf MGMT + ip address 192.168.0.62/24 +! +ip routing +! diff --git a/topologies/training-level7-part2/configlets/OOB-DC2-BASE b/topologies/training-level7-part2/configlets/OOB-DC2-BASE new file mode 100644 index 000000000..b3fcab3d1 --- /dev/null +++ b/topologies/training-level7-part2/configlets/OOB-DC2-BASE @@ -0,0 +1,10 @@ +service routing protocols model multi-agent +! +hostname OOB-DC2 +! +interface Management0 + vrf MGMT + ip address 192.168.0.63/24 +! +ip routing +! diff --git a/topologies/training-level7-part2/configlets/P1-BASE b/topologies/training-level7-part2/configlets/P1-BASE new file mode 100644 index 000000000..549d8d233 --- /dev/null +++ b/topologies/training-level7-part2/configlets/P1-BASE @@ -0,0 +1,10 @@ +service routing protocols model multi-agent +! +hostname P1 +! +interface Management0 + vrf MGMT + ip address 192.168.0.93/24 +! +ip routing +! diff --git a/topologies/training-level7-part2/configlets/P2-BASE b/topologies/training-level7-part2/configlets/P2-BASE new file mode 100644 index 000000000..600de3f2d --- /dev/null +++ b/topologies/training-level7-part2/configlets/P2-BASE @@ -0,0 +1,10 @@ +service routing protocols model multi-agent +! +hostname P2 +! +interface Management0 + vrf MGMT + ip address 192.168.0.94/24 +! +ip routing +! diff --git a/topologies/training-level7-part2/configlets/P3-BASE b/topologies/training-level7-part2/configlets/P3-BASE new file mode 100644 index 000000000..dab6ad136 --- /dev/null +++ b/topologies/training-level7-part2/configlets/P3-BASE @@ -0,0 +1,10 @@ +service routing protocols model multi-agent +! +hostname P3 +! +interface Management0 + vrf MGMT + ip address 192.168.0.97/24 +! +ip routing +! diff --git a/topologies/training-level7-part2/configlets/P4-BASE b/topologies/training-level7-part2/configlets/P4-BASE new file mode 100644 index 000000000..672b14b99 --- /dev/null +++ b/topologies/training-level7-part2/configlets/P4-BASE @@ -0,0 +1,10 @@ +service routing protocols model multi-agent +! +hostname P4 +! +interface Management0 + vrf MGMT + ip address 192.168.0.98/24 +! +ip routing +! diff --git a/topologies/training-level7-part2/configlets/PE11-BASE b/topologies/training-level7-part2/configlets/PE11-BASE new file mode 100644 index 000000000..8c2deffe0 --- /dev/null +++ b/topologies/training-level7-part2/configlets/PE11-BASE @@ -0,0 +1,10 @@ +service routing protocols model multi-agent +! +hostname PE11 +! +interface Management0 + vrf MGMT + ip address 192.168.0.91/24 +! +ip routing +! diff --git a/topologies/training-level7-part2/configlets/PE12-BASE b/topologies/training-level7-part2/configlets/PE12-BASE new file mode 100644 index 000000000..a38359d9f --- /dev/null +++ b/topologies/training-level7-part2/configlets/PE12-BASE @@ -0,0 +1,10 @@ +service routing protocols model multi-agent +! +hostname PE12 +! +interface Management0 + vrf MGMT + ip address 192.168.0.92/24 +! +ip routing +! diff --git a/topologies/training-level7-part2/configlets/PE21-BASE b/topologies/training-level7-part2/configlets/PE21-BASE new file mode 100644 index 000000000..5c7ec5ec1 --- /dev/null +++ b/topologies/training-level7-part2/configlets/PE21-BASE @@ -0,0 +1,10 @@ +service routing protocols model multi-agent +! +hostname PE21 +! +interface Management0 + vrf MGMT + ip address 192.168.0.95/24 +! +ip routing +! diff --git a/topologies/training-level7-part2/configlets/PE22-BASE b/topologies/training-level7-part2/configlets/PE22-BASE new file mode 100644 index 000000000..fc6a43360 --- /dev/null +++ b/topologies/training-level7-part2/configlets/PE22-BASE @@ -0,0 +1,10 @@ +service routing protocols model multi-agent +! +hostname PE22 +! +interface Management0 + vrf MGMT + ip address 192.168.0.96/24 +! +ip routing +! diff --git a/topologies/training-level7-part2/configlets/PE31-BASE b/topologies/training-level7-part2/configlets/PE31-BASE new file mode 100644 index 000000000..5f01b0280 --- /dev/null +++ b/topologies/training-level7-part2/configlets/PE31-BASE @@ -0,0 +1,10 @@ +service routing protocols model multi-agent +! +hostname PE31 +! +interface Management0 + vrf MGMT + ip address 192.168.0.99/24 +! +ip routing +! diff --git a/topologies/training-level7-part2/configlets/RR-BASE b/topologies/training-level7-part2/configlets/RR-BASE new file mode 100644 index 000000000..58ff97f93 --- /dev/null +++ b/topologies/training-level7-part2/configlets/RR-BASE @@ -0,0 +1,10 @@ +service routing protocols model multi-agent +! +hostname RR +! +interface Management0 + vrf MGMT + ip address 192.168.0.90/24 +! +ip routing +! diff --git a/topologies/training-level7-part2/configlets/Spine1-DC2-START b/topologies/training-level7-part2/configlets/Spine1-DC2-START new file mode 100644 index 000000000..8119e1065 --- /dev/null +++ b/topologies/training-level7-part2/configlets/Spine1-DC2-START @@ -0,0 +1,101 @@ + +interface Ethernet1 + no switchport + ip address 10.21.0.25/30 + pim ipv4 sparse-mode +! +interface Ethernet2 + no switchport + ip address 10.20.0.2/30 + pim ipv4 sparse-mode +! +interface Ethernet3 + no switchport + ip address 10.20.0.14/30 + pim ipv4 sparse-mode +! +interface Ethernet4 + no switchport + ip address 10.20.0.26/30 + pim ipv4 sparse-mode +! +interface Ethernet5 + no switchport + ip address 10.20.0.38/30 + pim ipv4 sparse-mode +! +interface Ethernet6 + no switchport + ip address 10.21.0.2/30 + pim ipv4 sparse-mode +! +interface Ethernet7 + no switchport + ip address 10.21.0.14/30 + pim ipv4 sparse-mode +! +interface Ethernet15 +! +interface Loopback0 + ip address 192.168.255.14/32 +!! +router bgp 65220 + router-id 192.168.255.14 + bgp listen range 192.168.255.0/24 peer-group EVPN remote-as 65220 + bgp listen range 10.20.0.0/24 peer-group LEAFS remote-as 65220 + bgp listen range 10.21.0.0/24 peer-group LEAFS remote-as 65220 + neighbor DC3-EVPN peer group + neighbor DC3-EVPN remote-as 65230 + neighbor DC3-EVPN update-source Loopback0 + neighbor DC3-EVPN ebgp-multihop 15 + neighbor DC3-EVPN send-community extended + neighbor DC3-EVPN maximum-routes 12000 + neighbor EVPN peer group + neighbor EVPN remote-as 65220 + neighbor EVPN next-hop-unchanged + neighbor EVPN update-source Loopback0 + neighbor EVPN route-reflector-client + neighbor EVPN send-community extended + neighbor EVPN maximum-routes 12000 + neighbor LEAFS peer group + neighbor LEAFS remote-as 65220 + neighbor LEAFS next-hop-self + neighbor LEAFS route-reflector-client + neighbor LEAFS maximum-routes 12000 + neighbor 192.168.255.77 peer group DC3-EVPN + neighbor 192.168.255.78 peer group DC3-EVPN + neighbor DCI-EVPN peer group + neighbor DCI-EVPN remote-as 65110 + neighbor DCI-EVPN update-source Loopback0 + neighbor DCI-EVPN ebgp-multihop 5 + neighbor DCI-EVPN send-community extended + neighbor DCI-EVPN next-hop-unchanged + neighbor 192.168.255.11 peer group DCI-EVPN + neighbor 192.168.255.12 peer group DCI-EVPN + neighbor 192.168.255.13 peer group DCI-EVPN + ! + address-family evpn + neighbor DC3-EVPN activate + neighbor EVPN activate + no neighbor LEAFS activate + neighbor DCI-EVPN activate + + ! + address-family ipv4 + no neighbor DC3-EVPN activate + no neighbor DCI-EVPN activate + no neighbor EVPN activate + neighbor LEAFS activate + network 192.168.255.14/32 +! +! Multicast routing +ip multicast-routing +router multicast + ipv4 + routing + software-forwarding sfe + +router pim sparse-mode + ipv4 + rp address 192.168.255.111 + \ No newline at end of file diff --git a/topologies/training-level7-part2/configlets/borderleaf1-DC1-BASE b/topologies/training-level7-part2/configlets/borderleaf1-DC1-BASE new file mode 100644 index 000000000..d25f6add8 --- /dev/null +++ b/topologies/training-level7-part2/configlets/borderleaf1-DC1-BASE @@ -0,0 +1,10 @@ +hostname borderleaf1-DC1 +! +interface Management0 + vrf MGMT + ip address 192.168.0.25/24 +! +service routing protocols model multi-agent +! +ip routing +! diff --git a/topologies/training-level7-part2/configlets/borderleaf1-DC2-BASE b/topologies/training-level7-part2/configlets/borderleaf1-DC2-BASE new file mode 100644 index 000000000..d3ca37d56 --- /dev/null +++ b/topologies/training-level7-part2/configlets/borderleaf1-DC2-BASE @@ -0,0 +1,10 @@ +hostname borderleaf1-DC2 +! +interface Management0 + vrf MGMT + ip address 192.168.0.35/24 +! +service routing protocols model multi-agent +! +ip routing +! diff --git a/topologies/training-level7-part2/configlets/borderleaf1-DC2-START b/topologies/training-level7-part2/configlets/borderleaf1-DC2-START new file mode 100644 index 000000000..77a2d9a31 --- /dev/null +++ b/topologies/training-level7-part2/configlets/borderleaf1-DC2-START @@ -0,0 +1,69 @@ + + +router bgp 65220 + + interface Ethernet1 +! +interface Ethernet2 +! +interface Ethernet3 + no switchport + ip address 10.21.0.1/30 + pim ipv4 sparse-mode +! +interface Ethernet4 + no switchport + ip address 10.21.0.5/30 + pim ipv4 sparse-mod +! +interface Ethernet5 + no switchport + ip address 10.21.0.9/30 + pim ipv4 sparse-mode +! +interface Ethernet10 + no switchport +! +interface Ethernet10.100 + encapsulation dot1q vlan 100 + ip address 10.102.0.1/30 +! +interface Ethernet10.200 + encapsulation dot1q vlan 200 + ip address 10.102.0.5/30 +! +interface Ethernet10.300 + encapsulation dot1q vlan 300 + ip address 10.102.0.9/30 +! +interface Ethernet11 +! +interface Ethernet12 + no switchport + ip address 10.201.0.5/30 + pim ipv4 sparse-mode +! +interface Ethernet15 +! +router bgp 65220 + neighbor 10.201.0.6 remote-as 65500 + neighbor LEAFS peer group + neighbor LEAFS remote-as 65220 + neighbor LEAFS next-hop-self + neighbor LEAFS maximum-routes 12000 + neighbor 10.21.0.2 peer group LEAFS + neighbor 10.21.0.6 peer group LEAFS + neighbor 10.21.0.10 peer group LEAFS + neighbor 10.102.0.2 remote-as 2 + neighbor 10.102.0.2 maximum-routes 12000 +! +! Multicast routing +ip multicast-routing +router multicast + ipv4 + routing + software-forwarding sfe + +router pim sparse-mode + ipv4 + rp address 192.168.255.111 diff --git a/topologies/training-level7-part2/configlets/borderleaf2-DC1-BASE b/topologies/training-level7-part2/configlets/borderleaf2-DC1-BASE new file mode 100644 index 000000000..c342c4cc8 --- /dev/null +++ b/topologies/training-level7-part2/configlets/borderleaf2-DC1-BASE @@ -0,0 +1,10 @@ +hostname borderleaf2-DC1 +! +interface Management0 + vrf MGMT + ip address 192.168.0.26/24 +! +service routing protocols model multi-agent +! +ip routing +! diff --git a/topologies/training-level7-part2/configlets/borderleaf2-DC2-BASE b/topologies/training-level7-part2/configlets/borderleaf2-DC2-BASE new file mode 100644 index 000000000..617be043a --- /dev/null +++ b/topologies/training-level7-part2/configlets/borderleaf2-DC2-BASE @@ -0,0 +1,10 @@ +hostname borderleaf2-DC2 +! +interface Management0 + vrf MGMT + ip address 192.168.0.36/24 +! +service routing protocols model multi-agent +! +ip routing +! diff --git a/topologies/training-level7-part2/configlets/borderleaf2-DC2-START b/topologies/training-level7-part2/configlets/borderleaf2-DC2-START new file mode 100644 index 000000000..2bc666623 --- /dev/null +++ b/topologies/training-level7-part2/configlets/borderleaf2-DC2-START @@ -0,0 +1,52 @@ +interface Ethernet1 +! +interface Ethernet2 +! +interface Ethernet3 + no switchport + ip address 10.21.0.13/30 +! +interface Ethernet4 + no switchport + ip address 10.21.0.17/30 +! +interface Ethernet5 + no switchport + ip address 10.21.0.21/30 +! +interface Ethernet10 + no switchport +! +interface Ethernet10.100 + encapsulation dot1q vlan 100 + ip address 10.102.0.13/30 +! +interface Ethernet10.200 + encapsulation dot1q vlan 200 + ip address 10.102.0.17/30 +! +interface Ethernet10.300 + encapsulation dot1q vlan 300 + ip address 10.102.0.21/30 +! +interface Ethernet11 +! +interface Ethernet12 +! +interface Ethernet15 +! +router bgp 65220 + neighbor LEAFS peer group + neighbor LEAFS next-hop-self + neighbor LEAFS maximum-routes 12000 + neighbor 10.21.0.14 peer group LEAFS + neighbor 10.21.0.18 peer group LEAFS + neighbor 10.21.0.22 peer group LEAFS + neighbor 10.102.0.14 remote-as 2 + neighbor 10.102.0.14 maximum-routes 12000 +! +management api http-commands + no shutdown + ! + vrf MGMT + no shutdown \ No newline at end of file diff --git a/topologies/training-level7-part2/configlets/host1-DC1-BASE b/topologies/training-level7-part2/configlets/host1-DC1-BASE new file mode 100644 index 000000000..41724a2aa --- /dev/null +++ b/topologies/training-level7-part2/configlets/host1-DC1-BASE @@ -0,0 +1,11 @@ +service routing protocols model multi-agent +! +hostname host1-DC1 +! +spanning-tree mode none +! +interface Management0 + vrf MGMT + ip address 192.168.0.51/24 +! +ip routing \ No newline at end of file diff --git a/topologies/training-level7-part2/configlets/host1-DC1-START b/topologies/training-level7-part2/configlets/host1-DC1-START new file mode 100644 index 000000000..d1ccda801 --- /dev/null +++ b/topologies/training-level7-part2/configlets/host1-DC1-START @@ -0,0 +1,151 @@ +vrf instance OOB +ip routing vrf OOB +interface Ethernet15 + vrf OOB + no shutdown + no switchport + ip address 192.168.1.51/24 +ip route vrf OOB 0.0.0.0/0 192.168.1.254 + + +int ethernet 1 - 4 + no shutdown + no ip address + switchport + channel-group 10 mode active +int loopback 0 + ip address 192.168.255.51/32 + +interface port-Channel 10 + no shut + switchport mode trunk + +vlan 10 +name VLAN10 + +vlan 11 +name VLAN11 + +vlan 12 +name VLAN12 + +vlan 13 +name VLAN13 + +vlan 14 +name VLAN14 + +vlan 15 +name VLAN15 + +vlan 16 +name VLAN16 + +vlan 17 +name VLAN17 + +vlan 18 +name VLAN18 + +vlan 19 +name VLAN19 + + +vrf instance VLAN10 +vrf instance VLAN11 +vrf instance VLAN12 +vrf instance VLAN13 +vrf instance VLAN14 +vrf instance VLAN15 +vrf instance VLAN16 +vrf instance VLAN17 +vrf instance VLAN18 +vrf instance VLAN19 + + +ip routing vrf VLAN10 +ip routing vrf VLAN11 +ip routing vrf VLAN12 +ip routing vrf VLAN13 +ip routing vrf VLAN14 +ip routing vrf VLAN15 +ip routing vrf VLAN16 +ip routing vrf VLAN17 +ip routing vrf VLAN18 +ip routing vrf VLAN19 + +interface VLAN10 +vrf VLAN10 +ip address 172.16.10.51/24 +no shutdown + +interface VLAN11 +vrf VLAN11 +ip address 172.16.11.51/24 +no shutdown + +interface VLAN12 +vrf VLAN12 +ip address 172.16.12.51/24 +no shutdown + +interface VLAN13 +vrf VLAN13 +ip address 172.16.13.51/24 +no shutdown + +interface VLAN14 +vrf VLAN14 +ip address 172.16.14.51/24 +no shutdown + +interface VLAN15 +vrf VLAN15 +ip address 172.16.15.51/24 +no shutdown + +interface VLAN16 +vrf VLAN16 +ip address 172.16.16.51/24 +no shutdown + +interface VLAN17 +vrf VLAN17 +ip address 172.16.17.51/24 +no shutdown + +interface VLAN18 +vrf VLAN18 +ip address 172.16.18.51/24 +no shutdown + +interface VLAN19 +vrf VLAN19 +ip address 172.16.19.51/24 +no shutdown + +ip route vrf VLAN10 0.0.0.0/0 172.16.10.254 +ip route vrf VLAN12 0.0.0.0/0 172.16.12.254 +ip route vrf VLAN13 0.0.0.0/0 172.16.13.254 +ip route vrf VLAN14 0.0.0.0/0 172.16.14.254 +ip route vrf VLAN15 0.0.0.0/0 172.16.15.254 +ip route vrf VLAN16 0.0.0.0/0 172.16.16.254 +ip route vrf VLAN17 0.0.0.0/0 172.16.17.254 +ip route vrf VLAN18 0.0.0.0/0 172.16.18.254 +ip route vrf VLAN19 0.0.0.0/0 172.16.19.254 + +router bgp 65151 + vrf VLAN11 + neighbor 172.16.11.21 remote-as 65012 + neighbor 172.16.11.21 maximum-routes 12000 + neighbor 172.16.11.22 remote-as 65012 + neighbor 172.16.11.22 maximum-routes 12000 + redistribute connected + ! + address-family ipv4 + neighbor 172.16.11.21 activate + neighbor 172.16.11.22 activate + +interface lo1 + vrf VLAN11 + ip address 172.16.220.51/24 \ No newline at end of file diff --git a/topologies/training-level7-part2/configlets/host1-DC2-BASE b/topologies/training-level7-part2/configlets/host1-DC2-BASE new file mode 100644 index 000000000..24987f3cc --- /dev/null +++ b/topologies/training-level7-part2/configlets/host1-DC2-BASE @@ -0,0 +1,11 @@ +service routing protocols model multi-agent +! +hostname host1-DC2 +! +spanning-tree mode none +! +interface Management0 + vrf MGMT + ip address 192.168.0.53/24 +! +ip routing diff --git a/topologies/training-level7-part2/configlets/host1-DC2-START b/topologies/training-level7-part2/configlets/host1-DC2-START new file mode 100644 index 000000000..801b3f5ae --- /dev/null +++ b/topologies/training-level7-part2/configlets/host1-DC2-START @@ -0,0 +1,135 @@ +vrf instance OOB +ip routing vrf OOB +interface Ethernet15 + vrf OOB + no shutdown + no switchport + ip address 192.168.2.53/24 +ip route vrf OOB 0.0.0.0/0 192.168.2.254 + +int ethernet 1 - 4 + no shutdown + no ip address + switchport + channel-group 10 mode active +int loopback 0 + ip address 192.168.255.53/32 + +interface port-Channel 10 + no shut + switchport mode trunk + +vlan 20 +name VLAN20 + +vlan 21 +name VLAN21 + +vlan 22 +name VLAN22 + +vlan 23 +name VLAN23 + +vlan 24 +name VLAN24 + +vlan 15 +name VLAN15 + +vlan 16 +name VLAN16 + +vlan 17 +name VLAN17 + +vlan 18 +name VLAN18 + +vlan 19 +name VLAN19 + + +vrf instance VLAN20 +vrf instance VLAN21 +vrf instance VLAN22 +vrf instance VLAN23 +vrf instance VLAN24 +vrf instance VLAN15 +vrf instance VLAN16 +vrf instance VLAN17 +vrf instance VLAN18 +vrf instance VLAN19 + + +ip routing vrf VLAN20 +ip routing vrf VLAN21 +ip routing vrf VLAN22 +ip routing vrf VLAN23 +ip routing vrf VLAN24 +ip routing vrf VLAN15 +ip routing vrf VLAN16 +ip routing vrf VLAN17 +ip routing vrf VLAN18 +ip routing vrf VLAN19 + +interface VLAN20 +vrf VLAN20 +ip address 172.16.20.53/24 +no shutdown + +interface VLAN21 +vrf VLAN21 +ip address 172.16.21.53/24 +no shutdown + +interface VLAN22 +vrf VLAN22 +ip address 172.16.22.53/24 +no shutdown + +interface VLAN23 +vrf VLAN23 +ip address 172.16.23.53/24 +no shutdown + +interface VLAN24 +vrf VLAN24 +ip address 172.16.24.53/24 +no shutdown + +interface VLAN15 +vrf VLAN15 +ip address 172.16.15.53/24 +no shutdown + +interface VLAN16 +vrf VLAN16 +ip address 172.16.16.53/24 +no shutdown + +interface VLAN17 +vrf VLAN17 +ip address 172.16.17.53/24 +no shutdown + +interface VLAN18 +vrf VLAN18 +ip address 172.16.18.53/24 +no shutdown + +interface VLAN19 +vrf VLAN19 +ip address 172.16.19.53/24 +no shutdown + +ip route vrf VLAN20 0.0.0.0/0 172.16.20.254 +ip route vrf VLAN21 0.0.0.0/0 172.16.21.254 +ip route vrf VLAN22 0.0.0.0/0 172.16.22.254 +ip route vrf VLAN23 0.0.0.0/0 172.16.23.254 +ip route vrf VLAN24 0.0.0.0/0 172.16.24.254 +ip route vrf VLAN15 0.0.0.0/0 172.16.15.254 +ip route vrf VLAN16 0.0.0.0/0 172.16.16.254 +ip route vrf VLAN17 0.0.0.0/0 172.16.17.254 +ip route vrf VLAN18 0.0.0.0/0 172.16.18.254 +ip route vrf VLAN19 0.0.0.0/0 172.16.19.254 \ No newline at end of file diff --git a/topologies/training-level7-part2/configlets/host1-DC3-BASE b/topologies/training-level7-part2/configlets/host1-DC3-BASE new file mode 100644 index 000000000..8efae5d91 --- /dev/null +++ b/topologies/training-level7-part2/configlets/host1-DC3-BASE @@ -0,0 +1,12 @@ +hostname host1-DC3 +! +spanning-tree mode none +! +interface Management0 + vrf MGMT + ip address 192.168.0.82/24 +! +service routing protocols model multi-agent +! +ip routing +! \ No newline at end of file diff --git a/topologies/training-level7-part2/configlets/host1-DC3-START b/topologies/training-level7-part2/configlets/host1-DC3-START new file mode 100644 index 000000000..74857c167 --- /dev/null +++ b/topologies/training-level7-part2/configlets/host1-DC3-START @@ -0,0 +1,137 @@ +int ethernet 1 + mtu 9098 + no shutdown + no ip address + switchport + switchport mode trunk + switchport trunk allowed vlan 130-134 + +int ethernet 2 + mtu 9098 + no shutdown + no ip address + switchport + switchport mode trunk + switchport trunk allowed vlan 15-19 + + +int loopback 0 + ip address 192.168.255.82/32 + + +vlan 130 +name VLAN130 + +vlan 131 +name VLAN131 + +vlan 132 +name VLAN132 + +vlan 133 +name VLAN133 + +vlan 134 +name VLAN134 + +vlan 15 +name VLAN15 + +vlan 16 +name VLAN16 + +vlan 17 +name VLAN17 + +vlan 18 +name VLAN18 + +vlan 19 +name VLAN19 + + +vrf instance VLAN130 +vrf instance VLAN131 +vrf instance VLAN132 +vrf instance VLAN133 +vrf instance VLAN134 +vrf instance VLAN15 +vrf instance VLAN16 +vrf instance VLAN17 +vrf instance VLAN18 +vrf instance VLAN19 + + +ip routing vrf VLAN130 +ip routing vrf VLAN131 +ip routing vrf VLAN132 +ip routing vrf VLAN133 +ip routing vrf VLAN134 +ip routing vrf VLAN15 +ip routing vrf VLAN16 +ip routing vrf VLAN17 +ip routing vrf VLAN18 +ip routing vrf VLAN19 + +interface VLAN130 +mtu 9098 +vrf VLAN130 +ip address 172.16.130.82/24 +no shutdown + +interface VLAN131 +mtu 9098 +vrf VLAN131 +ip address 172.16.131.82/24 +no shutdown + +interface VLAN132 +mtu 9098 +vrf VLAN132 +ip address 172.16.132.82/24 +no shutdown + +interface VLAN133 +mtu 9098 +vrf VLAN133 +ip address 172.16.133.82/24 +no shutdown + +interface VLAN134 +mtu 9098 +vrf VLAN134 +ip address 172.16.134.82/24 +no shutdown + +interface VLAN15 +mtu 9098 +vrf VLAN15 +ip address 172.16.15.82/24 +no shutdown + +interface VLAN16 +mtu 9098 +vrf VLAN16 +ip address 172.16.16.82/24 +no shutdown + +interface VLAN17 +mtu 9098 +vrf VLAN17 +ip address 172.16.17.82/24 +no shutdown + +interface VLAN18 +mtu 9098 +vrf VLAN18 +ip address 172.16.18.82/24 +no shutdown + +interface VLAN19 +mtu 9098 +vrf VLAN19 +ip address 172.16.19.82/24 +no shutdown + +ip route vrf VLAN130 0.0.0.0/0 172.16.130.254 +ip route vrf VLAN15 0.0.0.0/0 172.16.15.254 \ No newline at end of file diff --git a/topologies/training-level7-part2/configlets/host2-DC1-BASE b/topologies/training-level7-part2/configlets/host2-DC1-BASE new file mode 100644 index 000000000..651c3ae6e --- /dev/null +++ b/topologies/training-level7-part2/configlets/host2-DC1-BASE @@ -0,0 +1,12 @@ +service routing protocols model multi-agent +! +hostname host2-DC1 +! +spanning-tree mode none +! +interface Management0 + vrf MGMT + ip address 192.168.0.52/24 +! +ip routing + diff --git a/topologies/training-level7-part2/configlets/host2-DC1-START b/topologies/training-level7-part2/configlets/host2-DC1-START new file mode 100644 index 000000000..eb5a499be --- /dev/null +++ b/topologies/training-level7-part2/configlets/host2-DC1-START @@ -0,0 +1,141 @@ +vrf instance OOB +ip routing vrf OOB +interface Ethernet15 + vrf OOB + no shutdown + no switchport + ip address 192.168.1.52/24 +ip route vrf OOB 0.0.0.0/0 192.168.1.254 + +int ethernet 1 - 4 + no shutdown + no ip address + switchport + channel-group 10 mode active +int loopback 0 + ip address 192.168.255.51/32 + +interface port-Channel 10 + no shut + switchport mode trunk + +vlan 110 +name VLAN110 + +vlan 111 +name VLAN111 + +vlan 112 +name VLAN112 + +vlan 113 +name VLAN113 + +vlan 114 +name VLAN114 + +vlan 15 +name VLAN15 + +vlan 16 +name VLAN16 + +vlan 17 +name VLAN17 + +vlan 18 +name VLAN18 + +vlan 19 +name VLAN19 + + +vrf instance VLAN110 +vrf instance VLAN111 +vrf instance VLAN112 +vrf instance VLAN113 +vrf instance VLAN114 +vrf instance VLAN15 +vrf instance VLAN16 +vrf instance VLAN17 +vrf instance VLAN18 +vrf instance VLAN19 + + +interface VLAN110 +vrf VLAN110 +ip address 172.16.110.52/24 +no shutdown + +interface VLAN111 +vrf VLAN111 +ip address 172.16.111.52/24 +no shutdown + +interface VLAN112 +vrf VLAN112 +ip address 172.16.112.52/24 +no shutdown + +interface VLAN113 +vrf VLAN113 +ip address 172.16.113.52/24 +no shutdown + +interface VLAN114 +vrf VLAN114 +ip address 172.16.114.52/24 +no shutdown + +interface VLAN15 +vrf VLAN15 +ip address 172.16.15.52/24 +no shutdown + +interface VLAN16 +vrf VLAN16 +ip address 172.16.16.52/24 +no shutdown + +interface VLAN17 +vrf VLAN17 +ip address 172.16.17.52/24 +no shutdown + +interface VLAN18 +vrf VLAN18 +ip address 172.16.18.52/24 +no shutdown + +interface VLAN19 +vrf VLAN19 +ip address 172.16.19.52/24 +no shutdown + +ip routing vrf VLAN110 +ip routing vrf VLAN111 +ip routing vrf VLAN112 +ip routing vrf VLAN113 +ip routing vrf VLAN114 +ip routing vrf VLAN15 +ip routing vrf VLAN16 +ip routing vrf VLAN17 +ip routing vrf VLAN18 +ip routing vrf VLAN19 + + + +ip route vrf VLAN110 0.0.0.0/0 172.16.110.254 +ip route vrf VLAN111 0.0.0.0/0 172.16.111.254 +ip route vrf VLAN112 0.0.0.0/0 172.16.112.254 +ip route vrf VLAN113 0.0.0.0/0 172.16.113.254 +ip route vrf VLAN114 0.0.0.0/0 172.16.114.254 +ip route vrf VLAN15 0.0.0.0/0 172.16.15.254 +ip route vrf VLAN16 0.0.0.0/0 172.16.16.254 +ip route vrf VLAN17 0.0.0.0/0 172.16.17.254 +ip route vrf VLAN18 0.0.0.0/0 172.16.18.254 +ip route vrf VLAN19 0.0.0.0/0 172.16.19.254 + +interface lo1 + vrf VLAN111 + ip address 172.16.221.52/24 \ No newline at end of file diff --git a/topologies/training-level7-part2/configlets/host2-DC2-BASE b/topologies/training-level7-part2/configlets/host2-DC2-BASE new file mode 100644 index 000000000..17a25b9e0 --- /dev/null +++ b/topologies/training-level7-part2/configlets/host2-DC2-BASE @@ -0,0 +1,12 @@ +service routing protocols model multi-agent +! +hostname host2-DC2 +! +spanning-tree mode none +! +interface Management0 + vrf MGMT + ip address 192.168.0.54/24 +! +ip routing + diff --git a/topologies/training-level7-part2/configlets/host2-DC2-START b/topologies/training-level7-part2/configlets/host2-DC2-START new file mode 100644 index 000000000..52e77513e --- /dev/null +++ b/topologies/training-level7-part2/configlets/host2-DC2-START @@ -0,0 +1,136 @@ +vrf instance OOB +ip routing vrf OOB +interface Ethernet15 + vrf OOB + no shutdown + no switchport + ip address 192.168.2.54/24 +ip route vrf OOB 0.0.0.0/0 192.168.2.254 + + +int ethernet 1 - 4 + no shutdown + no ip address + switchport + channel-group 10 mode active +int loopback 0 + ip address 192.168.255.54/32 + +interface port-Channel 10 + no shut + switchport mode trunk + +vlan 120 +name VLAN120 + +vlan 121 +name VLAN121 + +vlan 122 +name VLAN122 + +vlan 123 +name VLAN123 + +vlan 124 +name VLAN124 + +vlan 15 +name VLAN15 + +vlan 16 +name VLAN16 + +vlan 17 +name VLAN17 + +vlan 18 +name VLAN18 + +vlan 19 +name VLAN19 + + +vrf instance VLAN120 +vrf instance VLAN121 +vrf instance VLAN122 +vrf instance VLAN123 +vrf instance VLAN124 +vrf instance VLAN15 +vrf instance VLAN16 +vrf instance VLAN17 +vrf instance VLAN18 +vrf instance VLAN19 + + +ip routing vrf VLAN120 +ip routing vrf VLAN121 +ip routing vrf VLAN122 +ip routing vrf VLAN123 +ip routing vrf VLAN124 +ip routing vrf VLAN15 +ip routing vrf VLAN16 +ip routing vrf VLAN17 +ip routing vrf VLAN18 +ip routing vrf VLAN19 + +interface VLAN120 +vrf VLAN120 +ip address 172.16.120.54/24 +no shutdown + +interface VLAN121 +vrf VLAN121 +ip address 172.16.121.54/24 +no shutdown + +interface VLAN122 +vrf VLAN122 +ip address 172.16.122.54/24 +no shutdown + +interface VLAN123 +vrf VLAN123 +ip address 172.16.123.54/24 +no shutdown + +interface VLAN124 +vrf VLAN124 +ip address 172.16.124.54/24 +no shutdown + +interface VLAN15 +vrf VLAN15 +ip address 172.16.15.54/24 +no shutdown + +interface VLAN16 +vrf VLAN16 +ip address 172.16.16.54/24 +no shutdown + +interface VLAN17 +vrf VLAN17 +ip address 172.16.17.54/24 +no shutdown + +interface VLAN18 +vrf VLAN18 +ip address 172.16.18.54/24 +no shutdown + +interface VLAN19 +vrf VLAN19 +ip address 172.16.19.54/24 +no shutdown + +ip route vrf VLAN120 0.0.0.0/0 172.16.120.254 +ip route vrf VLAN121 0.0.0.0/0 172.16.121.254 +ip route vrf VLAN122 0.0.0.0/0 172.16.122.254 +ip route vrf VLAN123 0.0.0.0/0 172.16.123.254 +ip route vrf VLAN124 0.0.0.0/0 172.16.124.254 +ip route vrf VLAN15 0.0.0.0/0 172.16.15.254 +ip route vrf VLAN16 0.0.0.0/0 172.16.16.254 +ip route vrf VLAN17 0.0.0.0/0 172.16.17.254 +ip route vrf VLAN18 0.0.0.0/0 172.16.18.254 +ip route vrf VLAN19 0.0.0.0/0 172.16.19.254 \ No newline at end of file diff --git a/topologies/training-level7-part2/configlets/host2-DC3-BASE b/topologies/training-level7-part2/configlets/host2-DC3-BASE new file mode 100644 index 000000000..4276624f5 --- /dev/null +++ b/topologies/training-level7-part2/configlets/host2-DC3-BASE @@ -0,0 +1,12 @@ +hostname host2-DC3 +! +spanning-tree mode none +! +interface Management0 + vrf MGMT + ip address 192.168.0.83/24 +! +service routing protocols model multi-agent +! +ip routing +! \ No newline at end of file diff --git a/topologies/training-level7-part2/configlets/host2-DC3-START b/topologies/training-level7-part2/configlets/host2-DC3-START new file mode 100644 index 000000000..40087642e --- /dev/null +++ b/topologies/training-level7-part2/configlets/host2-DC3-START @@ -0,0 +1,137 @@ +int ethernet 1 + mtu 9098 + no shutdown + no ip address + switchport + switchport mode access + switchport access vlan 130 + +int ethernet 2 + mtu 9098 + no shutdown + no ip address + switchport + switchport mode access + switchport access vlan 130 + + +int loopback 0 + ip address 192.168.255.83/32 + + +vlan 130 +name VLAN130 + +vlan 131 +name VLAN131 + +vlan 132 +name VLAN132 + +vlan 133 +name VLAN133 + +vlan 134 +name VLAN134 + +vlan 15 +name VLAN15 + +vlan 16 +name VLAN16 + +vlan 17 +name VLAN17 + +vlan 18 +name VLAN18 + +vlan 19 +name VLAN19 + + +vrf instance VLAN130 +vrf instance VLAN131 +vrf instance VLAN132 +vrf instance VLAN133 +vrf instance VLAN134 +vrf instance VLAN15 +vrf instance VLAN16 +vrf instance VLAN17 +vrf instance VLAN18 +vrf instance VLAN19 + + +ip routing vrf VLAN130 +ip routing vrf VLAN131 +ip routing vrf VLAN132 +ip routing vrf VLAN133 +ip routing vrf VLAN134 +ip routing vrf VLAN15 +ip routing vrf VLAN16 +ip routing vrf VLAN17 +ip routing vrf VLAN18 +ip routing vrf VLAN19 + +interface VLAN130 +mtu 9098 +vrf VLAN130 +ip address 172.16.130.83/24 +no shutdown + +interface VLAN131 +mtu 9098 +vrf VLAN131 +ip address 172.16.131.83/24 +no shutdown + +interface VLAN132 +mtu 9098 +vrf VLAN132 +ip address 172.16.132.83/24 +no shutdown + +interface VLAN133 +mtu 9098 +vrf VLAN133 +ip address 172.16.133.83/24 +no shutdown + +interface VLAN134 +mtu 9098 +vrf VLAN134 +ip address 172.16.134.83/24 +no shutdown + +interface VLAN15 +mtu 9098 +vrf VLAN15 +ip address 172.16.15.83/24 +no shutdown + +interface VLAN16 +mtu 9098 +vrf VLAN16 +ip address 172.16.16.83/24 +no shutdown + +interface VLAN17 +mtu 9098 +vrf VLAN17 +ip address 172.16.17.83/24 +no shutdown + +interface VLAN18 +mtu 9098 +vrf VLAN18 +ip address 172.16.18.83/24 +no shutdown + +interface VLAN19 +mtu 9098 +vrf VLAN19 +ip address 172.16.19.83/24 +no shutdown + +ip route vrf VLAN130 0.0.0.0/0 172.16.130.254 +ip route vrf VLAN15 0.0.0.0/0 172.16.15.254 \ No newline at end of file diff --git a/topologies/training-level7-part2/configlets/leaf1-DC1-BASE b/topologies/training-level7-part2/configlets/leaf1-DC1-BASE new file mode 100644 index 000000000..45f9433c8 --- /dev/null +++ b/topologies/training-level7-part2/configlets/leaf1-DC1-BASE @@ -0,0 +1,10 @@ +hostname leaf1-DC1 +! +interface Management0 + vrf MGMT + ip address 192.168.0.21/24 +! +service routing protocols model multi-agent +! +ip routing +! diff --git a/topologies/training-level7-part2/configlets/leaf1-DC2-BASE b/topologies/training-level7-part2/configlets/leaf1-DC2-BASE new file mode 100644 index 000000000..0cf772a02 --- /dev/null +++ b/topologies/training-level7-part2/configlets/leaf1-DC2-BASE @@ -0,0 +1,10 @@ +hostname leaf1-DC2 +! +interface Management0 + vrf MGMT + ip address 192.168.0.31/24 +! +service routing protocols model multi-agent +! +ip routing +! diff --git a/topologies/training-level7-part2/configlets/leaf1-DC2-START b/topologies/training-level7-part2/configlets/leaf1-DC2-START new file mode 100644 index 000000000..0b7630d9b --- /dev/null +++ b/topologies/training-level7-part2/configlets/leaf1-DC2-START @@ -0,0 +1,185 @@ +vlan 15 + name VLAN15 +! +vlan 16 + name VLAN16 +! +vlan 17 + name VLAN17 +! +vlan 18 + name VLAN18 +! +vlan 19 + name VLAN19 +! +vlan 20 + name VLAN20 +! +vlan 21 + name VLAN21 +! +vlan 22 + name VLAN22 +! +vlan 23 + name VLAN23 +! +vlan 24 + name VLAN24 +! +vlan 4094 + trunk group mlag-peer +! +interface Port-Channel1 + switchport mode trunk + switchport trunk group mlag-peer +! +interface Port-Channel10 + switchport trunk allowed vlan 14-24 + switchport mode trunk + ! + evpn ethernet-segment + identifier 0000:0000:0000:0000:3132 + route-target import 00:00:00:00:31:32 + lacp system-id 0000.0000.3132 + mlag 10 +! +interface Ethernet1 + channel-group 1 mode active +! +interface Ethernet2 + channel-group 1 mode active +! +interface Ethernet3 + no switchport + ip address 10.20.0.1/30 + pim ipv4 sparse-mode +! +interface Ethernet4 + no switchport + ip address 10.20.0.5/30 + pim ipv4 sparse-mode +! +interface Ethernet5 + no switchport + ip address 10.20.0.9/30 + pim ipv4 sparse-mode +! +interface Ethernet6 + channel-group 10 mode active +! +interface Ethernet7 + channel-group 10 mode active +! +interface Ethernet15 +! +interface Loopback0 + ip address 192.168.255.31/32 +! +interface Loopback1 + ip address 192.168.255.212/32 +! +interface Vlan15 + ip address 172.16.15.31/24 + ip virtual-router address 172.16.15.254 +! +interface Vlan16 + ip address 172.16.16.31/24 + ip virtual-router address 172.16.16.254 +! +interface Vlan17 + ip address 172.16.17.31/24 + ip virtual-router address 172.16.17.254 +! +interface Vlan18 + ip address 172.16.18.31/24 + ip virtual-router address 172.16.18.254 +! +interface Vlan19 + ip address 172.16.19.31/24 + ip virtual-router address 172.16.19.254 +! +interface Vlan20 + ip address 172.16.20.31/24 + ip virtual-router address 172.16.20.254 +! +interface Vlan21 + ip address 172.16.21.31/24 + ip virtual-router address 172.16.21.254 +! +interface Vlan22 + ip address 172.16.22.31/24 + ip virtual-router address 172.16.22.254 +! +interface Vlan23 + ip address 172.16.23.31/24 + ip virtual-router address 172.16.23.254 +! +interface Vlan24 + ip address 172.16.24.31/24 + ip virtual-router address 172.16.24.254 +! +interface Vlan4094 + ip address 10.20.0.49/30 +! +interface Vxlan1 + vxlan source-interface Loopback1 + vxlan udp-port 4789 + vxlan vlan 15 vni 10015 + vxlan learn-restrict any +! +ip virtual-router mac-address de:ad:fa:ce:be:ef +! +mlag configuration + domain-id mlag1 + local-interface Vlan4094 + peer-address 10.20.0.50 + peer-address heartbeat 192.168.0.32 vrf OOB + peer-link Port-Channel1 + dual-primary detection delay 10 action errdisable all-interfaces +! +router bgp 65220 + router-id 192.168.255.31 + neighbor EVPN peer group + neighbor EVPN remote-as 65220 + neighbor EVPN update-source Loopback0 + neighbor EVPN route-reflector-client + neighbor EVPN send-community extended + neighbor EVPN maximum-routes 12000 + neighbor LEAFS peer group + neighbor LEAFS remote-as 65220 + neighbor LEAFS next-hop-self + neighbor LEAFS maximum-routes 12000 + neighbor 10.20.0.2 peer group LEAFS + neighbor 10.20.0.6 peer group LEAFS + neighbor 10.20.0.10 peer group LEAFS + neighbor 192.168.255.14 peer group EVPN + neighbor 192.168.255.15 peer group EVPN + neighbor 192.168.255.16 peer group EVPN + ! + vlan 15 + rd 192.168.31.32:15 + route-target both 15:15 + redistribute learned + ! + address-family evpn + neighbor EVPN activate + no neighbor LEAFS activate + ! + address-family ipv4 + no neighbor EVPN activate + neighbor LEAFS activate + network 192.168.255.31/32 + network 192.168.255.212/32 +! +! Multicast routing +ip multicast-routing +router multicast + ipv4 + routing + software-forwarding sfe + +router pim sparse-mode + ipv4 + rp address 192.168.255.111 diff --git a/topologies/training-level7-part2/configlets/leaf1-DC3-BASE b/topologies/training-level7-part2/configlets/leaf1-DC3-BASE new file mode 100644 index 000000000..24970ecc5 --- /dev/null +++ b/topologies/training-level7-part2/configlets/leaf1-DC3-BASE @@ -0,0 +1,10 @@ +hostname leaf1-DC3 +! +interface Management0 + vrf MGMT + ip address 192.168.0.80/24 +! +service routing protocols model multi-agent +! +ip routing +! \ No newline at end of file diff --git a/topologies/training-level7-part2/configlets/leaf2-DC1-BASE b/topologies/training-level7-part2/configlets/leaf2-DC1-BASE new file mode 100644 index 000000000..4937708dd --- /dev/null +++ b/topologies/training-level7-part2/configlets/leaf2-DC1-BASE @@ -0,0 +1,10 @@ +hostname leaf2-DC1 +! +interface Management0 + vrf MGMT + ip address 192.168.0.22/24 +! +service routing protocols model multi-agent +! +ip routing +! diff --git a/topologies/training-level7-part2/configlets/leaf2-DC2-BASE b/topologies/training-level7-part2/configlets/leaf2-DC2-BASE new file mode 100644 index 000000000..faa5f3f3a --- /dev/null +++ b/topologies/training-level7-part2/configlets/leaf2-DC2-BASE @@ -0,0 +1,10 @@ +hostname leaf2-DC2 +! +interface Management0 + vrf MGMT + ip address 192.168.0.32/24 +! +service routing protocols model multi-agent +! +ip routing +! diff --git a/topologies/training-level7-part2/configlets/leaf2-DC2-START b/topologies/training-level7-part2/configlets/leaf2-DC2-START new file mode 100644 index 000000000..551140fca --- /dev/null +++ b/topologies/training-level7-part2/configlets/leaf2-DC2-START @@ -0,0 +1,185 @@ +vlan 15 + name VLAN15 +! +vlan 16 + name VLAN16 +! +vlan 17 + name VLAN17 +! +vlan 18 + name VLAN18 +! +vlan 19 + name VLAN19 +! +vlan 20 + name VLAN20 +! +vlan 21 + name VLAN21 +! +vlan 22 + name VLAN22 +! +vlan 23 + name VLAN23 +! +vlan 24 + name VLAN24 +! +vlan 4094 + trunk group mlag-peer +! +interface Port-Channel1 + switchport mode trunk + switchport trunk group mlag-peer +! +interface Port-Channel10 + switchport trunk allowed vlan 14-24 + switchport mode trunk + ! + evpn ethernet-segment + identifier 0000:0000:0000:0000:3132 + route-target import 00:00:00:00:31:32 + lacp system-id 0000.0000.3132 + mlag 10 +! +interface Ethernet1 + channel-group 1 mode active +! +interface Ethernet2 + channel-group 1 mode active +! +interface Ethernet3 + no switchport + ip address 10.20.0.13/30 + pim ipv4 sparse-mode +! +interface Ethernet4 + no switchport + ip address 10.20.0.17/30 + pim ipv4 sparse-mode +! +interface Ethernet5 + no switchport + ip address 10.20.0.21/30 + pim ipv4 sparse-mode +! +interface Ethernet6 + channel-group 10 mode active +! +interface Ethernet7 + channel-group 10 mode active +! +interface Ethernet15 +! +interface Loopback0 + ip address 192.168.255.32/32 +! +interface Loopback1 + ip address 192.168.255.212/32 +! +interface Vlan15 + ip address 172.16.15.32/24 + ip virtual-router address 172.16.15.254 +! +interface Vlan16 + ip address 172.16.16.32/24 + ip virtual-router address 172.16.16.254 +! +interface Vlan17 + ip address 172.16.17.32/24 + ip virtual-router address 172.16.17.254 +! +interface Vlan18 + ip address 172.16.18.32/24 + ip virtual-router address 172.16.18.254 +! +interface Vlan19 + ip address 172.16.19.32/24 + ip virtual-router address 172.16.19.254 +! +interface Vlan20 + ip address 172.16.20.32/24 + ip virtual-router address 172.16.20.254 +! +interface Vlan21 + ip address 172.16.21.32/24 + ip virtual-router address 172.16.21.254 +! +interface Vlan22 + ip address 172.16.22.32/24 + ip virtual-router address 172.16.22.254 +! +interface Vlan23 + ip address 172.16.23.32/24 + ip virtual-router address 172.16.23.254 +! +interface Vlan24 + ip address 172.16.24.32/24 + ip virtual-router address 172.16.24.254 +! +interface Vlan4094 + ip address 10.20.0.50/30 +! +interface Vxlan1 + vxlan source-interface Loopback1 + vxlan udp-port 4789 + vxlan vlan 15 vni 10015 + vxlan learn-restrict any +! +ip virtual-router mac-address de:ad:fa:ce:be:ef +! +mlag configuration + domain-id mlag1 + local-interface Vlan4094 + peer-address 10.20.0.49 + peer-address heartbeat 192.168.0.31 vrf OOB + peer-link Port-Channel1 + dual-primary detection delay 10 action errdisable all-interfaces +! +router bgp 65220 + router-id 192.168.255.32 + neighbor EVPN peer group + neighbor EVPN remote-as 65220 + neighbor EVPN update-source Loopback0 + neighbor EVPN route-reflector-client + neighbor EVPN send-community extended + neighbor EVPN maximum-routes 12000 + neighbor LEAFS peer group + neighbor LEAFS remote-as 65220 + neighbor LEAFS next-hop-self + neighbor LEAFS maximum-routes 12000 + neighbor 10.20.0.14 peer group LEAFS + neighbor 10.20.0.18 peer group LEAFS + neighbor 10.20.0.22 peer group LEAFS + neighbor 192.168.255.14 peer group EVPN + neighbor 192.168.255.15 peer group EVPN + neighbor 192.168.255.16 peer group EVPN + ! + vlan 15 + rd 192.168.31.32:15 + route-target both 15:15 + redistribute learned + ! + address-family evpn + neighbor EVPN activate + no neighbor LEAFS activate + ! + address-family ipv4 + no neighbor EVPN activate + neighbor LEAFS activate + network 192.168.255.32/32 + network 192.168.255.212/32 +! +! Multicast routing +ip multicast-routing +router multicast + ipv4 + routing + software-forwarding sfe + +router pim sparse-mode + ipv4 + rp address 192.168.255.111 diff --git a/topologies/training-level7-part2/configlets/leaf2-DC3-BASE b/topologies/training-level7-part2/configlets/leaf2-DC3-BASE new file mode 100644 index 000000000..88941c209 --- /dev/null +++ b/topologies/training-level7-part2/configlets/leaf2-DC3-BASE @@ -0,0 +1,10 @@ +hostname leaf2-DC3 +! +interface Management0 + vrf MGMT + ip address 192.168.0.81/24 +! +service routing protocols model multi-agent +! +ip routing +! \ No newline at end of file diff --git a/topologies/training-level7-part2/configlets/leaf3-DC1-BASE b/topologies/training-level7-part2/configlets/leaf3-DC1-BASE new file mode 100644 index 000000000..b71e2e86d --- /dev/null +++ b/topologies/training-level7-part2/configlets/leaf3-DC1-BASE @@ -0,0 +1,10 @@ +hostname leaf3-DC1 +! +interface Management0 + vrf MGMT + ip address 192.168.0.23/24 +! +service routing protocols model multi-agent +! +ip routing +! diff --git a/topologies/training-level7-part2/configlets/leaf3-DC2-BASE b/topologies/training-level7-part2/configlets/leaf3-DC2-BASE new file mode 100644 index 000000000..262a9cabe --- /dev/null +++ b/topologies/training-level7-part2/configlets/leaf3-DC2-BASE @@ -0,0 +1,10 @@ +hostname leaf3-DC2 +! +interface Management0 + vrf MGMT + ip address 192.168.0.33/24 +! +service routing protocols model multi-agent +! +ip routing +! diff --git a/topologies/training-level7-part2/configlets/leaf3-DC2-START b/topologies/training-level7-part2/configlets/leaf3-DC2-START new file mode 100644 index 000000000..75ed911e3 --- /dev/null +++ b/topologies/training-level7-part2/configlets/leaf3-DC2-START @@ -0,0 +1,184 @@ +vlan 15 + name VLAN15 +! +vlan 16 + name VLAN16 +! +vlan 17 + name VLAN17 +! +vlan 18 + name VLAN18 +! +vlan 19 + name VLAN19 +! +vlan 120 + name VLAN120 +! +vlan 121 + name VLAN121 +! +vlan 122 + name VLAN122 +! +vlan 123 + name VLAN123 +! +vlan 124 + name VLAN124 +! +vlan 4094 + trunk group mlag-peer +! +interface Port-Channel1 + switchport mode trunk + switchport trunk group mlag-peer +! +interface Port-Channel10 + switchport trunk allowed vlan 14-19,120-124 + switchport mode trunk + ! + evpn ethernet-segment + identifier 0000:0000:0000:0000:3334 + route-target import 00:00:00:00:33:34 + lacp system-id 0000.0000.3334 + mlag 10 +! +interface Ethernet1 + channel-group 1 mode active +! +interface Ethernet2 + channel-group 1 mode active +! +interface Ethernet3 + no switchport + ip address 10.20.0.25/30 + pim ipv4 sparse-mode +! +interface Ethernet4 + no switchport + ip address 10.20.0.29/30 + pim ipv4 sparse-mode +! +interface Ethernet5 + no switchport + ip address 10.20.0.33/30 + pim ipv4 sparse-mode +! +interface Ethernet6 + channel-group 10 mode active +! +interface Ethernet7 + channel-group 10 mode active +! +interface Ethernet15 +! +interface Loopback0 + ip address 192.168.255.33/32 +! +interface Loopback1 + ip address 192.168.255.234/32 +! +interface Vlan15 + ip address 172.16.15.33/24 + ip virtual-router address 172.16.15.254 +! +interface Vlan16 + ip address 172.16.16.33/24 + ip virtual-router address 172.16.16.254 +! +interface Vlan17 + ip address 172.16.17.33/24 + ip virtual-router address 172.16.17.254 +! +interface Vlan18 + ip address 172.16.18.33/24 + ip virtual-router address 172.16.18.254 +! +interface Vlan19 + ip address 172.16.19.33/24 + ip virtual-router address 172.16.19.254 +! +interface Vlan120 + ip address 172.16.120.33/24 + ip virtual-router address 172.16.120.254 +! +interface Vlan121 + ip address 172.16.121.33/24 + ip virtual-router address 172.16.121.254 +! +interface Vlan122 + ip address 172.16.122.33/24 + ip virtual-router address 172.16.122.254 +! +interface Vlan123 + ip address 172.16.123.33/24 + ip virtual-router address 172.16.123.254 +! +interface Vlan124 + ip address 172.16.124.33/24 + ip virtual-router address 172.16.124.254 +! +interface Vlan4094 + ip address 10.20.0.53/30 +! +interface Vxlan1 + vxlan source-interface Loopback1 + vxlan udp-port 4789 + vxlan vlan 15 vni 10015 + vxlan learn-restrict any +! +mlag configuration + domain-id mlag1 + local-interface Vlan4094 + peer-address 10.20.0.54 + peer-address heartbeat 192.168.0.34 vrf OOB + peer-link Port-Channel1 + dual-primary detection delay 10 action errdisable all-interfaces +! +router bgp 65220 + router-id 192.168.255.33 + neighbor EVPN peer group + neighbor EVPN remote-as 65220 + neighbor EVPN update-source Loopback0 + neighbor EVPN route-reflector-client + neighbor EVPN send-community extended + neighbor EVPN maximum-routes 12000 + neighbor LEAFS peer group + neighbor LEAFS remote-as 65220 + neighbor LEAFS next-hop-self + neighbor LEAFS maximum-routes 12000 + neighbor 10.20.0.26 peer group LEAFS + neighbor 10.20.0.30 peer group LEAFS + neighbor 10.20.0.34 peer group LEAFS + neighbor 192.168.255.14 peer group EVPN + neighbor 192.168.255.15 peer group EVPN + neighbor 192.168.255.16 peer group EVPN + ! + vlan 15 + rd 192.168.33.34:15 + route-target both 15:15 + redistribute learned + ! + address-family evpn + neighbor EVPN activate + no neighbor LEAFS activate + ! + address-family ipv4 + no neighbor EVPN activate + neighbor LEAFS activate + network 192.168.255.33/32 + network 192.168.255.234/32 +! +! Multicast routing +ip multicast-routing +router multicast + ipv4 + routing + software-forwarding sfe + +router pim sparse-mode + ipv4 + rp address 192.168.255.111 + diff --git a/topologies/training-level7-part2/configlets/leaf4-DC1-BASE b/topologies/training-level7-part2/configlets/leaf4-DC1-BASE new file mode 100644 index 000000000..e317855e9 --- /dev/null +++ b/topologies/training-level7-part2/configlets/leaf4-DC1-BASE @@ -0,0 +1,10 @@ +hostname leaf4-DC1 +! +interface Management0 + vrf MGMT + ip address 192.168.0.24/24 +! +service routing protocols model multi-agent +! +ip routing +! diff --git a/topologies/training-level7-part2/configlets/leaf4-DC2-BASE b/topologies/training-level7-part2/configlets/leaf4-DC2-BASE new file mode 100644 index 000000000..c1b25eb45 --- /dev/null +++ b/topologies/training-level7-part2/configlets/leaf4-DC2-BASE @@ -0,0 +1,10 @@ +hostname leaf4-DC2 +! +interface Management0 + vrf MGMT + ip address 192.168.0.34/24 +! +service routing protocols model multi-agent +! +ip routing +! diff --git a/topologies/training-level7-part2/configlets/leaf4-DC2-START b/topologies/training-level7-part2/configlets/leaf4-DC2-START new file mode 100644 index 000000000..ccc167dd4 --- /dev/null +++ b/topologies/training-level7-part2/configlets/leaf4-DC2-START @@ -0,0 +1,192 @@ +vlan 15 + name VLAN15 +! +vlan 16 + name VLAN16 +! +vlan 17 + name VLAN17 +! +vlan 18 + name VLAN18 +! +vlan 19 + name VLAN19 +! +vlan 120 + name VLAN120 +! +vlan 121 + name VLAN121 +! +vlan 122 + name VLAN122 +! +vlan 123 + name VLAN123 +! +vlan 124 + name VLAN124 +! +vlan 4094 + trunk group mlag-peer +! +interface Port-Channel1 + switchport mode trunk + switchport trunk group mlag-peer +! +interface Port-Channel10 + switchport trunk allowed vlan 14-19,120-124 + switchport mode trunk + ! + evpn ethernet-segment + identifier 0000:0000:0000:0000:3334 + route-target import 00:00:00:00:33:34 + lacp system-id 0000.0000.3334 + mlag 10 +! +interface Ethernet1 + channel-group 1 mode active +! +interface Ethernet2 + channel-group 1 mode active +! +interface Ethernet3 + no switchport + ip address 10.20.0.37/30 + pim ipv4 sparse-mode +! +interface Ethernet4 + no switchport + ip address 10.20.0.41/30 + pim ipv4 sparse-mode +! +interface Ethernet5 + no switchport + ip address 10.20.0.45/30 + pim ipv4 sparse-mode +! +interface Ethernet6 + channel-group 10 mode active +! +interface Ethernet7 + channel-group 10 mode active +! +interface Ethernet15 +! +interface Loopback0 + ip address 192.168.255.34/32 +! +interface Loopback1 + ip address 192.168.255.234/32 +! +interface Vlan15 + ip address 172.16.15.34/24 + ip virtual-router address 172.16.15.254 +! +interface Vlan16 + ip address 172.16.16.34/24 + ip virtual-router address 172.16.16.254 +! +interface Vlan17 + ip address 172.16.17.34/24 + ip virtual-router address 172.16.17.254 +! +interface Vlan18 + ip address 172.16.18.34/24 + ip virtual-router address 172.16.18.254 +! +interface Vlan19 + ip address 172.16.19.33/24 + ip virtual-router address 172.16.19.254 +! +interface Vlan120 + ip address 172.16.120.34/24 + ip virtual-router address 172.16.120.254 +! +interface Vlan121 + ip address 172.16.121.34/24 + ip virtual-router address 172.16.121.254 +! +interface Vlan122 + ip address 172.16.122.34/24 + ip virtual-router address 172.16.122.254 +! +interface Vlan123 + ip address 172.16.123.34/24 + ip virtual-router address 172.16.123.254 +! +interface Vlan124 + ip address 172.16.124.34/24 + ip virtual-router address 172.16.124.254 +! +interface Vlan4094 + ip address 10.20.0.54/30 +! +interface Vxlan1 + vxlan source-interface Loopback1 + vxlan udp-port 4789 + vxlan vlan 15 vni 10015 + vxlan learn-restrict any +! +ip virtual-router mac-address de:ad:fa:ce:be:ef +! +mlag configuration + domain-id mlag1 + local-interface Vlan4094 + peer-address 10.20.0.53 + peer-address heartbeat 192.168.0.33 vrf OOB + peer-link Port-Channel1 + dual-primary detection delay 10 action errdisable all-interfaces +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 +! +ip radius source-interface Management0 +! +router bgp 65220 + router-id 192.168.255.34 + neighbor EVPN peer group + neighbor EVPN remote-as 65220 + neighbor EVPN update-source Loopback0 + neighbor EVPN route-reflector-client + neighbor EVPN send-community extended + neighbor EVPN maximum-routes 12000 + neighbor LEAFS peer group + neighbor LEAFS remote-as 65220 + neighbor LEAFS next-hop-self + neighbor LEAFS maximum-routes 12000 + neighbor 192.168.255.14 peer group EVPN + neighbor 192.168.255.15 peer group EVPN + neighbor 192.168.255.16 peer group EVPN + + neighbor 10.20.0.38 peer group LEAFS + neighbor 10.20.0.42 peer group LEAFS + neighbor 10.20.0.46 peer group LEAFS + network 192.168.255.34/32 + network 192.168.255.234/32 + ! + vlan 15 + rd 192.168.33.34:15 + route-target both 15:15 + redistribute learned + ! + address-family evpn + neighbor EVPN activate + no neighbor LEAFS activate + ! + address-family ipv4 + no neighbor EVPN activate + neighbor LEAFS activate + network 192.168.255.34/32 + network 192.168.255.234/32 +! +! Multicast routing +ip multicast-routing +router multicast + ipv4 + routing + software-forwarding sfe + +router pim sparse-mode + ipv4 + rp address 192.168.255.111 diff --git a/topologies/training-level7-part2/configlets/spine1-DC1-BASE b/topologies/training-level7-part2/configlets/spine1-DC1-BASE new file mode 100644 index 000000000..153b74f2c --- /dev/null +++ b/topologies/training-level7-part2/configlets/spine1-DC1-BASE @@ -0,0 +1,10 @@ +hostname spine1-DC1 +! +interface Management0 + vrf MGMT + ip address 192.168.0.11/24 +! +service routing protocols model multi-agent +! +ip routing +! diff --git a/topologies/training-level7-part2/configlets/spine1-DC2-BASE b/topologies/training-level7-part2/configlets/spine1-DC2-BASE new file mode 100644 index 000000000..dff91254c --- /dev/null +++ b/topologies/training-level7-part2/configlets/spine1-DC2-BASE @@ -0,0 +1,10 @@ +hostname spine1-DC2 +! +interface Management0 + vrf MGMT + ip address 192.168.0.14/24 +! +service routing protocols model multi-agent +! +ip routing +! diff --git a/topologies/training-level7-part2/configlets/spine1-DC3-BASE b/topologies/training-level7-part2/configlets/spine1-DC3-BASE new file mode 100644 index 000000000..7edf1b6ff --- /dev/null +++ b/topologies/training-level7-part2/configlets/spine1-DC3-BASE @@ -0,0 +1,10 @@ +hostname spine1-DC3 +! +interface Management0 + vrf MGMT + ip address 192.168.0.77/24 +! +service routing protocols model multi-agent +! +ip routing +! \ No newline at end of file diff --git a/topologies/training-level7-part2/configlets/spine2-DC1-BASE b/topologies/training-level7-part2/configlets/spine2-DC1-BASE new file mode 100644 index 000000000..d9b12344f --- /dev/null +++ b/topologies/training-level7-part2/configlets/spine2-DC1-BASE @@ -0,0 +1,10 @@ +hostname spine2-DC1 +! +interface Management0 + vrf MGMT + ip address 192.168.0.12/24 +! +service routing protocols model multi-agent +! +ip routing +! diff --git a/topologies/training-level7-part2/configlets/spine2-DC2-BASE b/topologies/training-level7-part2/configlets/spine2-DC2-BASE new file mode 100644 index 000000000..0a5209409 --- /dev/null +++ b/topologies/training-level7-part2/configlets/spine2-DC2-BASE @@ -0,0 +1,10 @@ +hostname spine2-DC2 +! +interface Management0 + vrf MGMT + ip address 192.168.0.15/24 +! +service routing protocols model multi-agent +! +ip routing +! diff --git a/topologies/training-level7-part2/configlets/spine2-DC2-START b/topologies/training-level7-part2/configlets/spine2-DC2-START new file mode 100644 index 000000000..916acabf7 --- /dev/null +++ b/topologies/training-level7-part2/configlets/spine2-DC2-START @@ -0,0 +1,82 @@ +interface Ethernet1 + no switchport + ip address 10.21.0.26/30 +! +interface Ethernet2 + no switchport + ip address 10.20.0.6/30 +! +interface Ethernet3 + no switchport + ip address 10.20.0.18/30 +! +interface Ethernet4 + no switchport + ip address 10.20.0.30/30 +! +interface Ethernet5 + no switchport + ip address 10.20.0.42/30 +! +interface Ethernet6 + no switchport + ip address 10.21.0.6/30 +! +interface Ethernet7 + no switchport + ip address 10.21.0.18/30 +! +interface Ethernet15 +! +interface Loopback0 + ip address 192.168.255.15/32 +! +router bgp 65220 + router-id 192.168.255.15 + bgp listen range 192.168.255.0/24 peer-group EVPN remote-as 65220 + bgp listen range 10.20.0.0/24 peer-group LEAFS remote-as 65220 + bgp listen range 10.21.0.0/24 peer-group LEAFS remote-as 65220 + neighbor DC3-EVPN peer group + neighbor DC3-EVPN remote-as 65230 + neighbor DC3-EVPN update-source Loopback0 + neighbor DC3-EVPN ebgp-multihop 15 + neighbor DC3-EVPN send-community extended + neighbor DC3-EVPN maximum-routes 12000 + neighbor EVPN peer group + neighbor EVPN remote-as 65220 + neighbor EVPN next-hop-unchanged + neighbor EVPN update-source Loopback0 + neighbor EVPN route-reflector-client + neighbor EVPN send-community extended + neighbor EVPN maximum-routes 12000 + neighbor LEAFS peer group + neighbor LEAFS remote-as 65220 + neighbor LEAFS next-hop-self + neighbor LEAFS route-reflector-client + neighbor LEAFS maximum-routes 12000 + neighbor 192.168.255.77 peer group DC3-EVPN + neighbor 192.168.255.78 peer group DC3-EVPN + neighbor DCI-EVPN peer group + neighbor DCI-EVPN remote-as 65110 + neighbor DCI-EVPN update-source Loopback0 + neighbor DCI-EVPN ebgp-multihop 5 + neighbor DCI-EVPN send-community extended + neighbor DCI-EVPN next-hop-unchanged + neighbor 192.168.255.11 peer group DCI-EVPN + neighbor 192.168.255.12 peer group DCI-EVPN + neighbor 192.168.255.13 peer group DCI-EVPN + ! + address-family evpn + neighbor DCI-EVPN activate + neighbor DC3-EVPN activate + neighbor EVPN activate + no neighbor LEAFS activate + ! + address-family ipv4 + no neighbor DCI-EVPN activate + no neighbor DC3-EVPN activate + no neighbor EVPN activate + neighbor LEAFS activate + network 192.168.255.15/32 +! + diff --git a/topologies/training-level7-part2/configlets/spine2-DC3-BASE b/topologies/training-level7-part2/configlets/spine2-DC3-BASE new file mode 100644 index 000000000..cf74a4f02 --- /dev/null +++ b/topologies/training-level7-part2/configlets/spine2-DC3-BASE @@ -0,0 +1,10 @@ +hostname spine2-DC3 +! +interface Management0 + vrf MGMT + ip address 192.168.0.78/24 +! +service routing protocols model multi-agent +! +ip routing +! \ No newline at end of file diff --git a/topologies/training-level7-part2/configlets/spine3-DC1-BASE b/topologies/training-level7-part2/configlets/spine3-DC1-BASE new file mode 100644 index 000000000..87d85a6c7 --- /dev/null +++ b/topologies/training-level7-part2/configlets/spine3-DC1-BASE @@ -0,0 +1,10 @@ +hostname spine3-DC1 +! +interface Management0 + vrf MGMT + ip address 192.168.0.13/24 +! +service routing protocols model multi-agent +! +ip routing +! diff --git a/topologies/training-level7-part2/configlets/spine3-DC2-BASE b/topologies/training-level7-part2/configlets/spine3-DC2-BASE new file mode 100644 index 000000000..d3b9c4d00 --- /dev/null +++ b/topologies/training-level7-part2/configlets/spine3-DC2-BASE @@ -0,0 +1,10 @@ +hostname spine3-DC2 +! +interface Management0 + vrf MGMT + ip address 192.168.0.16/24 +! +service routing protocols model multi-agent +! +ip routing +! diff --git a/topologies/training-level7-part2/configlets/spine3-DC2-START b/topologies/training-level7-part2/configlets/spine3-DC2-START new file mode 100644 index 000000000..e449c6adc --- /dev/null +++ b/topologies/training-level7-part2/configlets/spine3-DC2-START @@ -0,0 +1,78 @@ +interface Ethernet2 + no switchport + ip address 10.20.0.10/30 +! +interface Ethernet3 + no switchport + ip address 10.20.0.22/30 +! +interface Ethernet4 + no switchport + ip address 10.20.0.34/30 +! +interface Ethernet5 + no switchport + ip address 10.20.0.46/30 +! +interface Ethernet6 + no switchport + ip address 10.21.0.10/30 +! +interface Ethernet7 + no switchport + ip address 10.21.0.22/30 +! +interface Ethernet15 +! +interface Loopback0 + ip address 192.168.255.16/32 +! +router bgp 65220 + router-id 192.168.255.16 + bgp listen range 192.168.255.0/24 peer-group EVPN remote-as 65220 + bgp listen range 10.20.0.0/24 peer-group LEAFS remote-as 65220 + bgp listen range 10.21.0.0/24 peer-group LEAFS remote-as 65220 + neighbor DC3-EVPN peer group + neighbor DC3-EVPN remote-as 65230 + neighbor DC3-EVPN update-source Loopback0 + neighbor DC3-EVPN ebgp-multihop 15 + neighbor DC3-EVPN send-community extended + neighbor DC3-EVPN maximum-routes 12000 + neighbor EVPN peer group + neighbor EVPN remote-as 65220 + neighbor EVPN next-hop-unchanged + neighbor EVPN update-source Loopback0 + neighbor EVPN route-reflector-client + neighbor EVPN send-community extended + neighbor EVPN maximum-routes 12000 + neighbor LEAFS peer group + neighbor LEAFS remote-as 65220 + neighbor LEAFS next-hop-self + neighbor LEAFS route-reflector-client + neighbor LEAFS maximum-routes 12000 + neighbor 192.168.255.77 peer group DC3-EVPN + neighbor 192.168.255.78 peer group DC3-EVPN + neighbor DCI-EVPN peer group + neighbor DCI-EVPN remote-as 65110 + neighbor DCI-EVPN update-source Loopback0 + neighbor DCI-EVPN ebgp-multihop 5 + neighbor DCI-EVPN send-community extended + neighbor DCI-EVPN next-hop-unchanged + neighbor 192.168.255.11 peer group DCI-EVPN + neighbor 192.168.255.12 peer group DCI-EVPN + neighbor 192.168.255.13 peer group DCI-EVPN + ! + address-family evpn + neighbor DCI-EVPN activate + neighbor DC3-EVPN activate + neighbor EVPN activate + no neighbor LEAFS activate + ! + address-family ipv4 + no neighbor DCI-EVPN activate + no neighbor DC3-EVPN activate + no neighbor EVPN activate + neighbor LEAFS activate + network 192.168.255.16/32 +! + diff --git a/topologies/training-level7-part2/files/.ansible.cfg b/topologies/training-level7-part2/files/.ansible.cfg new file mode 100644 index 000000000..14c806515 --- /dev/null +++ b/topologies/training-level7-part2/files/.ansible.cfg @@ -0,0 +1,2 @@ +[defaults] +host_key_checking = False diff --git a/topologies/training-level7-part2/files/.screenrc b/topologies/training-level7-part2/files/.screenrc new file mode 100644 index 000000000..f792e40c4 --- /dev/null +++ b/topologies/training-level7-part2/files/.screenrc @@ -0,0 +1,48 @@ +# Turn off the startup message. +startup_message off +# Set the caption to the active windows. +caption always "%-Lw%{= BW}%50>%n%f* %t%{-}%+Lw%<" + +term screen-256color + +# New screens for various processes. +# Example: screen -t +# screen -t 7050SX-128 0 ssh aristaadmin@192.100.37.128 +screen 1 ssh 192.168.0.10 +screen 2 ssh 192.168.0.11 +screen 3 ssh 192.168.0.12 +screen 4 ssh 192.168.0.13 +screen 5 ssh 192.168.0.14 +screen 6 ssh 192.168.0.15 +screen 7 ssh 192.168.0.16 +screen 8 ssh 192.168.0.17 +screen 9 ssh 192.168.0.18 +screen 10 ssh 192.168.0.19 +screen 11 ssh 192.168.0.20 +screen 12 ssh 192.168.0.21 +screen 13 ssh 192.168.0.22 +screen 14 ssh 192.168.0.23 +screen 15 ssh 192.168.0.24 +screen 16 ssh 192.168.0.25 +screen 17 ssh 192.168.0.26 +screen 18 ssh 192.168.0.31 +screen 19 ssh 192.168.0.32 +screen 20 ssh 192.168.0.33 +screen 21 ssh 192.168.0.34 +screen 22 ssh 192.168.0.35 +screen 23 ssh 192.168.0.36 +screen 24 ssh 192.168.0.51 +screen 25 ssh 192.168.0.52 +screen 26 ssh 192.168.0.53 +screen 27 ssh 192.168.0.54 +screen 28 ssh 192.168.0.62 +screen 29 ssh 192.168.0.63 +screen 30 ssh 192.168.0.61 +screen 31 ssh 192.168.0.71 +screen 32 ssh 192.168.0.72 +screen 33 ssh 192.168.0.73 +screen 34 ssh 192.168.0.74 +screen 35 ssh 192.168.0.75 +screen 36 ssh 192.168.0.76 +screen 37 ssh 192.168.0.4 +screen 38 ssh 192.168.0.5 \ No newline at end of file diff --git a/topologies/training-level7-part2/files/MenuOptions.yaml b/topologies/training-level7-part2/files/MenuOptions.yaml new file mode 100644 index 000000000..8c0bf20bb --- /dev/null +++ b/topologies/training-level7-part2/files/MenuOptions.yaml @@ -0,0 +1,255 @@ +--- +options: + reset: + - command: "/usr/local/bin/ConfigureTopology.py && bash /home/arista/Broadcaster/pushHostDefaultConfig.sh" + description: "Reset All Devices to Base ATD (reset)" + mlag: + - command: "/usr/local/bin/ConfigureTopology.py -t mlag" + description: "MLAG Lab (mlag)" + bgp: + - command: "/usr/local/bin/ConfigureTopology.py -t bgp" + description: "BGP Lab (bgp)" + vxlan: + - command: "/usr/local/bin/ConfigureTopology.py -t vxlan" + description: "VXLAN Lab (vxlan) excludes leaf3 instead of leaf4" + l2evpn: + - command: "/usr/local/bin/ConfigureTopology.py -t l2evpn" + description: "EVPN Type 2 Lab (l2evpn) excludes leaf3 instead of leaf4" + l3evpn: + - command: "/usr/local/bin/ConfigureTopology.py -t l3evpn" + description: "EVPN Type 5 Lab (l3evpn) excludes leaf3 instead of leaf4" + cvp: + - command: "/usr/local/bin/ConfigureTopology.py -t cvp" + description: "CVP lab (cvp)" + media: + - command: "bash /home/arista/Broadcaster/pushHostMediaConfig.sh && login.py" + description: "Broadcast Engineer Training (media)" +labconfiglets: + mlag: + spine1: + - "Spine1-MLAG-Lab" + - "VLANs" + spine2: + - "Spine2-MLAG-Lab" + - "VLANs" + leaf1: + - "Leaf1-MLAG-Lab" + - "VLANs" + leaf2: + - "Leaf2-MLAG-Lab" + - "VLANs" + leaf3: + - "Leaf3-MLAG-Lab" + - "VLANs" + leaf4: + - "VLANs" + cvx01: + - "cvx01-Controller" + host1: + - "Host1-ATD" + host2: + - "Host2-ATD" + bgp: + spine1: + - "Spine1-BGP-Lab" + spine2: + - "Spine2-BGP-Lab" + leaf1: + - "Leaf1-BGP-Lab" + leaf2: + - "Leaf2-BGP-Lab" + leaf3: + - "Leaf3-BGP-Lab" + leaf4: + - "Leaf4-BGP-Lab" + cvx01: + - "cvx01-Controller" + host1: + - "Host1-ATD" + host2: + - "Host2-ATD" + vxlan: + spine1: + - "Spine1-BGP-Lab" + spine2: + - "Spine2-BGP-Lab" + leaf1: + - "Leaf1-VXLAN-Lab" + - "VLANs" + leaf2: + - "Leaf2-VXLAN-Lab" + - "VLANs" + leaf3: + - "Leaf3-VXLAN-Lab" + - "VLANs" + leaf4: + - "Leaf4-VXLAN-Lab" + - "VLANs" + cvx01: + - "cvx01-Controller" + host1: + - "Host1-ATD" + host2: + - "Host2-ATD" + l2evpn: + spine1: + - "Spine1-L2EVPN-Lab" + spine2: + - "Spine2-L2EVPN-Lab" + leaf1: + - "Leaf1-L2EVPN-Lab" + - "VLANs" + leaf2: + - "Leaf2-L2EVPN-Lab" + - "VLANs" + leaf3: + - "VLANs" + leaf4: + - "Leaf4-L2EVPN-Lab" + - "VLANs" + cvx01: + - "cvx01-Controller" + host1: + - "Host1-ATD" + host2: + - "Host2-ATD" + l3evpn: + spine1: + - "Spine1-L3EVPN-Lab" + spine2: + - "Spine2-L3EVPN-Lab" + leaf1: + - "Leaf1-L3EVPN-Lab" + leaf2: + - "Leaf2-L3EVPN-Lab" + leaf3: + - "VLANs" + leaf4: + - "Leaf4-L3EVPN-Lab" + cvx01: + - "cvx01-Controller" + host1: + - "Host1-ATD" + host2: + - "Host2-ATD" + cvp: + spine1: + - "Spine1-BGP-Lab" + spine2: + - "Spine2-BGP-Lab" + leaf1: + - "Leaf1-BGP-Lab" + leaf2: + - "Leaf2-BGP-Lab" + leaf3: + - "Leaf3-BGP-Lab" + leaf4: + - "Leaf4-BGP-Lab-Full" + cvx01: + - "cvx01-Controller" + host1: + - "Host1-ATD" + host2: + - "Host2-ATD" + media-reset: + spine1: + - "media-spine1-IP-Intro-start" + spine2: + - "media-spine2-IP-Intro-start" + leaf1: + - "media-leaf1-IP-Intro-start" + leaf2: + - "media-leaf2-IP-Intro-start" + leaf3: + - "media-leaf3-IP-Intro-start" + leaf4: + - "media-leaf4-IP-Intro-start" + host1: + - "Host1-Media" + host2: + - "Host2-Media" + media-intro: + spine1: + - "media-spine1-IP-Intro-start" + spine2: + - "media-spine2-IP-Intro-start" + leaf1: + - "media-leaf1-IP-Intro-start" + leaf2: + - "media-leaf2-IP-Intro-start" + leaf3: + - "media-leaf3-IP-Intro-start" + leaf4: + - "media-leaf4-IP-Intro-start" + host1: + - "Host1-Media" + host2: + - "Host2-Media" + media-vlan: + spine1: + - "media-spine1-VLAN-STP-start" + spine2: + - "media-spine2-VLAN-STP-start" + leaf1: + - "media-leaf1-VLAN-STP-start" + leaf2: + - "media-leaf2-VLAN-STP-start" + leaf3: + - "media-leaf3-VLAN-STP-start" + leaf4: + - "media-leaf4-VLAN-STP-start" + host1: + - "Host1-Media" + host2: + - "Host2-Media" + media-ospf: + spine1: + - "media-spine1-OSPF-start" + spine2: + - "media-spine2-OSPF-start" + leaf1: + - "media-leaf1-OSPF-start" + leaf2: + - "media-leaf2-OSPF-start" + leaf3: + - "media-leaf3-OSPF-start" + leaf4: + - "media-leaf4-OSPF-start" + host1: + - "Host1-Media" + host2: + - "Host2-Media" + media-bgp: + spine1: + - "media-spine1-BGP-start" + spine2: + - "media-spine2-BGP-start" + leaf1: + - "media-leaf1-BGP-start" + leaf2: + - "media-leaf2-BGP-start" + leaf3: + - "media-leaf3-BGP-start" + leaf4: + - "media-leaf4-BGP-start" + host1: + - "Host1-Media" + host2: + - "Host2-Media" + media-mcast: + spine1: + - "media-spine1-Multicast-lab" + spine2: + - "media-spine2-Multicast-lab" + leaf1: + - "media-leaf1-Multicast-lab" + leaf2: + - "media-leaf2-Multicast-lab" + leaf3: + - "media-leaf3-Multicast-lab" + leaf4: + - "media-leaf4-Multicast-lab" + host1: + - "Host1-Media" + host2: + - "Host2-Media" diff --git a/topologies/training-level7-part2/files/apps/coder/coder.yaml b/topologies/training-level7-part2/files/apps/coder/coder.yaml new file mode 100644 index 000000000..80cc852d1 --- /dev/null +++ b/topologies/training-level7-part2/files/apps/coder/coder.yaml @@ -0,0 +1,4 @@ +bind-addr: 127.0.0.1:8080 +auth: password +password: {ARISTA_REPLACE} +cert: false \ No newline at end of file diff --git a/topologies/training-level7-part2/files/apps/coder/labfiles/.placeholder b/topologies/training-level7-part2/files/apps/coder/labfiles/.placeholder new file mode 100644 index 000000000..e69de29bb diff --git a/topologies/training-level7-part2/files/apps/ssh/web.json b/topologies/training-level7-part2/files/apps/ssh/web.json new file mode 100644 index 000000000..13fac47dd --- /dev/null +++ b/topologies/training-level7-part2/files/apps/ssh/web.json @@ -0,0 +1,76 @@ +{ + "listen": { + "ip": "0.0.0.0", + "port": 2222 + }, + "user": { + "name": null, + "password": null, + "privatekey": null + }, + "ssh": { + "host": null, + "port": 22, + "localAddress": null, + "localPort": null, + "term": "xterm-color", + "readyTimeout": 20000, + "keepaliveInterval": 120000, + "keepaliveCountMax": 10, + "allowedSubnets": [ "192.168.0.0/16", "10.0.0.0/8", "172.16.0.0/12" ] + }, + "terminal": { + "cursorBlink": true, + "scrollback": 10000, + "tabStopWidth": 8, + "bellStyle": "sound" + }, + "header": { + "text": null, + "background": "green" + }, + "session": { + "name": "WebSSH2", + "secret": "mysecret" + }, + "options": { + "challengeButton": true, + "allowreauth": true + }, + "algorithms": { + "kex": [ + "ecdh-sha2-nistp256", + "ecdh-sha2-nistp384", + "ecdh-sha2-nistp521", + "diffie-hellman-group-exchange-sha256", + "diffie-hellman-group14-sha1" + ], + "cipher": [ + "aes128-ctr", + "aes192-ctr", + "aes256-ctr", + "aes128-gcm", + "aes128-gcm@openssh.com", + "aes256-gcm", + "aes256-gcm@openssh.com", + "aes256-cbc" + ], + "hmac": [ + "hmac-sha2-256", + "hmac-sha2-512", + "hmac-sha1" + ], + "compress": [ + "none", + "zlib@openssh.com", + "zlib" + ] + }, + "serverlog": { + "client": false, + "server": false + }, + "accesslog": false, + "verify": false, + "safeShutdownDuration": 300 + } \ No newline at end of file diff --git a/topologies/training-level7-part2/files/apps/uilanding/modules.yaml b/topologies/training-level7-part2/files/apps/uilanding/modules.yaml new file mode 100644 index 000000000..ad03ca750 --- /dev/null +++ b/topologies/training-level7-part2/files/apps/uilanding/modules.yaml @@ -0,0 +1,37 @@ +topology: + image: "atd-topo.png" + nodes: + Spine1: + coords: "65,197,245,279" + ip: "192.168.0.11" + Spine2: + coords: "360,196,543,280" + ip: "192.168.0.12" + Spine3: + coords: "656,196,837,282" + ip: "192.168.0.13" + Leaf1: + coords: "24,491,208,575" + ip: "192.168.0.21" + Leaf2: + coords: "248,491,432,576" + ip: "192.168.0.22" + Leaf3: + coords: "471,489,655,575" + ip: "192.168.0.23" + Leaf4: + coords: "696,491,878,575" + ip: "192.168.0.24" + BorderLeaf1: + coords: "204,20,386,107" + ip: "192.168.0.25" + BorderLeaf2: + coords: "498,21,680,106" + ip: "192.168.0.26" + Host1: + coords: "141,646,325,733" + ip: "192.168.0.51" + Host2: + coords: "589,647,774,733" + ip: "192.168.0.52" + servers: diff --git a/topologies/training-level7-part2/files/apps/webui/.vncpass_clear b/topologies/training-level7-part2/files/apps/webui/.vncpass_clear new file mode 100644 index 000000000..cd09dd7a5 --- /dev/null +++ b/topologies/training-level7-part2/files/apps/webui/.vncpass_clear @@ -0,0 +1 @@ +@rista1 \ No newline at end of file diff --git a/topologies/training-level7-part2/files/ceos/CVX/ceos-config b/topologies/training-level7-part2/files/ceos/CVX/ceos-config new file mode 100644 index 000000000..67c569149 --- /dev/null +++ b/topologies/training-level7-part2/files/ceos/CVX/ceos-config @@ -0,0 +1,2 @@ +SERIALNUMBER=CVX +SYSTEMMACADDR=00:1c:73:a4:c6:01 diff --git a/topologies/training-level7-part2/files/ceos/CVX/startup-config b/topologies/training-level7-part2/files/ceos/CVX/startup-config new file mode 100644 index 000000000..b565f15e9 --- /dev/null +++ b/topologies/training-level7-part2/files/ceos/CVX/startup-config @@ -0,0 +1,59 @@ +vrf instance MGMT +! +daemon TerminAttr + exec /usr/bin/TerminAttr -disableaaa -ingestgrpcurl=192.168.0.5:9910 -taillogs -ingestauth=key,atd-lab -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent -ingestvrf=MGMT + no shutdown +! +alias mlag-reload bash /mnt/flash/shut_intfs && sudo shutdown now -r +alias conint sh interface | i connected +alias senz show interface counter error | nz +alias shmc show int | awk '/^[A-Z]/ { intf = $1 } /, address is/ { print intf, $6 }' +alias snz show interface counter | nz +alias spd show port-channel %1 detail all +alias sqnz show interface counter queue | nz +alias srnz show interface counter rate | nz +alias intdesc + !! Usage: intdesc interface-name description + 10 config + 20 int %1 + 30 desc %2 + 40 exit +! +dns domain arista.lab +! +ntp server vrf MGMT 192.168.0.1 iburst source Management0 +! +radius-server host 192.168.0.1 vrf MGMT key 7 0207165218120E +! +aaa group server radius atds + server 192.168.0.1 vrf MGMT +! +aaa authentication login default group atds local +aaa authorization exec default group atds local +aaa authorization commands all default local +! +username Script secret sha512 $6$PNfpb9anSBQ5/aia$phaa3ar5pwkntenD9WHc6Ed5b96lbW0dc0bjtwPnFLaDiCK8D5Cjl6ewP/xdNbl4PtS6Paq.3SssN8pj05NQm. +username admin privilege 15 role network-admin secret 5 $1$5O85YVVn$HrXcfOivJEnISTMb6xrJc. +username arista privilege 15 role network-admin secret 5 $1$4VjIjfd1$XkUVulbNDESHFzcxDU.Tk1 +! +username arista ssh-key ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC+ERvV4GaPq3FzxY8T+5hMF/1T+l8wiPsVCtOrZU4Hy6NCNlAiDBdA/RUtX5/aOu5JvHyPTVHqWJ0qi9BqU3rxCNl/l2/5UZbm9RPzdZ1QCwoYwPB9/j/tYJV8lZdr6t0yGBfxgzD3oW/zF7a+ZtASaMAu7lkgoqPK2pVIGa+Y9ZCsA0Xq756XpLCw+d3pHKHvIkgWLCo9FoeIv8f/bu5u/ztzRE+Nvl+o5add6MxnjsXz3s7BnW2FX6JNjyp0Z+OXjupQc2gcfFvpd/dA2lCNuuaCHkRgyPwIZtWPmNqMRXPp37mlPwV43qDJRVPQkvh0xPxwS35BbzUxWdT+ZLZv +! +ip radius source-interface Management0 +! +ip routing vrf MGMT +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 +! +management api http-commands + no shutdown + vrf MGMT + no shutdown +! +hostname cvx +! +interface Management0 + vrf MGMT + ip address 192.168.0.4/24 +! +ip routing +! diff --git a/topologies/training-level7-part2/files/ceos/DCI/ceos-config b/topologies/training-level7-part2/files/ceos/DCI/ceos-config new file mode 100644 index 000000000..488943186 --- /dev/null +++ b/topologies/training-level7-part2/files/ceos/DCI/ceos-config @@ -0,0 +1,2 @@ +SERIALNUMBER=DCI +SYSTEMMACADDR=00:1c:73:16:c6:01 diff --git a/topologies/training-level7-part2/files/ceos/DCI/startup-config b/topologies/training-level7-part2/files/ceos/DCI/startup-config new file mode 100644 index 000000000..79f22d764 --- /dev/null +++ b/topologies/training-level7-part2/files/ceos/DCI/startup-config @@ -0,0 +1,61 @@ +vrf instance MGMT +! +daemon TerminAttr + exec /usr/bin/TerminAttr -disableaaa -ingestgrpcurl=192.168.0.5:9910 -taillogs -ingestauth=key,atd-lab -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent -ingestvrf=MGMT + no shutdown +! +alias mlag-reload bash /mnt/flash/shut_intfs && sudo shutdown now -r +alias conint sh interface | i connected +alias senz show interface counter error | nz +alias shmc show int | awk '/^[A-Z]/ { intf = $1 } /, address is/ { print intf, $6 }' +alias snz show interface counter | nz +alias spd show port-channel %1 detail all +alias sqnz show interface counter queue | nz +alias srnz show interface counter rate | nz +alias intdesc + !! Usage: intdesc interface-name description + 10 config + 20 int %1 + 30 desc %2 + 40 exit +! +dns domain arista.lab +! +ntp server vrf MGMT 192.168.0.1 iburst source Management0 +! +radius-server host 192.168.0.1 vrf MGMT key 7 0207165218120E +! +aaa group server radius atds + server 192.168.0.1 vrf MGMT +! +aaa authentication login default group atds local +aaa authorization exec default group atds local +aaa authorization commands all default local +! +username Script secret sha512 $6$PNfpb9anSBQ5/aia$phaa3ar5pwkntenD9WHc6Ed5b96lbW0dc0bjtwPnFLaDiCK8D5Cjl6ewP/xdNbl4PtS6Paq.3SssN8pj05NQm. +username admin privilege 15 role network-admin secret 5 $1$5O85YVVn$HrXcfOivJEnISTMb6xrJc. +username arista privilege 15 role network-admin secret 5 $1$4VjIjfd1$XkUVulbNDESHFzcxDU.Tk1 +! +username arista ssh-key ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC+ERvV4GaPq3FzxY8T+5hMF/1T+l8wiPsVCtOrZU4Hy6NCNlAiDBdA/RUtX5/aOu5JvHyPTVHqWJ0qi9BqU3rxCNl/l2/5UZbm9RPzdZ1QCwoYwPB9/j/tYJV8lZdr6t0yGBfxgzD3oW/zF7a+ZtASaMAu7lkgoqPK2pVIGa+Y9ZCsA0Xq756XpLCw+d3pHKHvIkgWLCo9FoeIv8f/bu5u/ztzRE+Nvl+o5add6MxnjsXz3s7BnW2FX6JNjyp0Z+OXjupQc2gcfFvpd/dA2lCNuuaCHkRgyPwIZtWPmNqMRXPp37mlPwV43qDJRVPQkvh0xPxwS35BbzUxWdT+ZLZv +! +ip radius source-interface Management0 +! +ip routing vrf MGMT +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 +! +management api http-commands + no shutdown + vrf MGMT + no shutdown +! +service routing protocols model multi-agent +! +hostname DCI +! +interface Management0 + vrf MGMT + ip address 192.168.0.76/24 +! +ip routing + diff --git a/topologies/training-level7-part2/files/ceos/OOB-CORE/ceos-config b/topologies/training-level7-part2/files/ceos/OOB-CORE/ceos-config new file mode 100644 index 000000000..7fc870d3a --- /dev/null +++ b/topologies/training-level7-part2/files/ceos/OOB-CORE/ceos-config @@ -0,0 +1,2 @@ +SERIALNUMBER=OOB-CORE +SYSTEMMACADDR=00:1c:73:04:c6:01 diff --git a/topologies/training-level7-part2/files/ceos/OOB-CORE/startup-config b/topologies/training-level7-part2/files/ceos/OOB-CORE/startup-config new file mode 100644 index 000000000..c5f114c49 --- /dev/null +++ b/topologies/training-level7-part2/files/ceos/OOB-CORE/startup-config @@ -0,0 +1,61 @@ +vrf instance MGMT +! +daemon TerminAttr + exec /usr/bin/TerminAttr -disableaaa -ingestgrpcurl=192.168.0.5:9910 -taillogs -ingestauth=key,atd-lab -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent -ingestvrf=MGMT + no shutdown +! +alias mlag-reload bash /mnt/flash/shut_intfs && sudo shutdown now -r +alias conint sh interface | i connected +alias senz show interface counter error | nz +alias shmc show int | awk '/^[A-Z]/ { intf = $1 } /, address is/ { print intf, $6 }' +alias snz show interface counter | nz +alias spd show port-channel %1 detail all +alias sqnz show interface counter queue | nz +alias srnz show interface counter rate | nz +alias intdesc + !! Usage: intdesc interface-name description + 10 config + 20 int %1 + 30 desc %2 + 40 exit +! +dns domain arista.lab +! +ntp server vrf MGMT 192.168.0.1 iburst source Management0 +! +radius-server host 192.168.0.1 vrf MGMT key 7 0207165218120E +! +aaa group server radius atds + server 192.168.0.1 vrf MGMT +! +aaa authentication login default group atds local +aaa authorization exec default group atds local +aaa authorization commands all default local +! +username Script secret sha512 $6$PNfpb9anSBQ5/aia$phaa3ar5pwkntenD9WHc6Ed5b96lbW0dc0bjtwPnFLaDiCK8D5Cjl6ewP/xdNbl4PtS6Paq.3SssN8pj05NQm. +username admin privilege 15 role network-admin secret 5 $1$5O85YVVn$HrXcfOivJEnISTMb6xrJc. +username arista privilege 15 role network-admin secret 5 $1$4VjIjfd1$XkUVulbNDESHFzcxDU.Tk1 +! +username arista ssh-key ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC+ERvV4GaPq3FzxY8T+5hMF/1T+l8wiPsVCtOrZU4Hy6NCNlAiDBdA/RUtX5/aOu5JvHyPTVHqWJ0qi9BqU3rxCNl/l2/5UZbm9RPzdZ1QCwoYwPB9/j/tYJV8lZdr6t0yGBfxgzD3oW/zF7a+ZtASaMAu7lkgoqPK2pVIGa+Y9ZCsA0Xq756XpLCw+d3pHKHvIkgWLCo9FoeIv8f/bu5u/ztzRE+Nvl+o5add6MxnjsXz3s7BnW2FX6JNjyp0Z+OXjupQc2gcfFvpd/dA2lCNuuaCHkRgyPwIZtWPmNqMRXPp37mlPwV43qDJRVPQkvh0xPxwS35BbzUxWdT+ZLZv +! +ip radius source-interface Management0 +! +ip routing vrf MGMT +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 +! +management api http-commands + no shutdown + vrf MGMT + no shutdown +! +service routing protocols model multi-agent +! +hostname OOB-CORE +! +interface Management0 + vrf MGMT + ip address 192.168.0.61/24 +! +ip routing +! diff --git a/topologies/training-level7-part2/files/ceos/OOB-DC1/ceos-config b/topologies/training-level7-part2/files/ceos/OOB-DC1/ceos-config new file mode 100644 index 000000000..7f82a40d2 --- /dev/null +++ b/topologies/training-level7-part2/files/ceos/OOB-DC1/ceos-config @@ -0,0 +1,2 @@ +SERIALNUMBER=OOB-DC1 +SYSTEMMACADDR=00:1c:73:02:c6:01 diff --git a/topologies/training-level7-part2/files/ceos/OOB-DC1/startup-config b/topologies/training-level7-part2/files/ceos/OOB-DC1/startup-config new file mode 100644 index 000000000..00c4d0b14 --- /dev/null +++ b/topologies/training-level7-part2/files/ceos/OOB-DC1/startup-config @@ -0,0 +1,61 @@ +vrf instance MGMT +! +daemon TerminAttr + exec /usr/bin/TerminAttr -disableaaa -ingestgrpcurl=192.168.0.5:9910 -taillogs -ingestauth=key,atd-lab -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent -ingestvrf=MGMT + no shutdown +! +alias mlag-reload bash /mnt/flash/shut_intfs && sudo shutdown now -r +alias conint sh interface | i connected +alias senz show interface counter error | nz +alias shmc show int | awk '/^[A-Z]/ { intf = $1 } /, address is/ { print intf, $6 }' +alias snz show interface counter | nz +alias spd show port-channel %1 detail all +alias sqnz show interface counter queue | nz +alias srnz show interface counter rate | nz +alias intdesc + !! Usage: intdesc interface-name description + 10 config + 20 int %1 + 30 desc %2 + 40 exit +! +dns domain arista.lab +! +ntp server vrf MGMT 192.168.0.1 iburst source Management0 +! +radius-server host 192.168.0.1 vrf MGMT key 7 0207165218120E +! +aaa group server radius atds + server 192.168.0.1 vrf MGMT +! +aaa authentication login default group atds local +aaa authorization exec default group atds local +aaa authorization commands all default local +! +username Script secret sha512 $6$PNfpb9anSBQ5/aia$phaa3ar5pwkntenD9WHc6Ed5b96lbW0dc0bjtwPnFLaDiCK8D5Cjl6ewP/xdNbl4PtS6Paq.3SssN8pj05NQm. +username admin privilege 15 role network-admin secret 5 $1$5O85YVVn$HrXcfOivJEnISTMb6xrJc. +username arista privilege 15 role network-admin secret 5 $1$4VjIjfd1$XkUVulbNDESHFzcxDU.Tk1 +! +username arista ssh-key ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC+ERvV4GaPq3FzxY8T+5hMF/1T+l8wiPsVCtOrZU4Hy6NCNlAiDBdA/RUtX5/aOu5JvHyPTVHqWJ0qi9BqU3rxCNl/l2/5UZbm9RPzdZ1QCwoYwPB9/j/tYJV8lZdr6t0yGBfxgzD3oW/zF7a+ZtASaMAu7lkgoqPK2pVIGa+Y9ZCsA0Xq756XpLCw+d3pHKHvIkgWLCo9FoeIv8f/bu5u/ztzRE+Nvl+o5add6MxnjsXz3s7BnW2FX6JNjyp0Z+OXjupQc2gcfFvpd/dA2lCNuuaCHkRgyPwIZtWPmNqMRXPp37mlPwV43qDJRVPQkvh0xPxwS35BbzUxWdT+ZLZv +! +ip radius source-interface Management0 +! +ip routing vrf MGMT +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 +! +management api http-commands + no shutdown + vrf MGMT + no shutdown +! +service routing protocols model multi-agent +! +hostname OOB-DC1 +! +interface Management0 + vrf MGMT + ip address 192.168.0.62/24 +! +ip routing +! diff --git a/topologies/training-level7-part2/files/ceos/OOB-DC2/ceos-config b/topologies/training-level7-part2/files/ceos/OOB-DC2/ceos-config new file mode 100644 index 000000000..1ff2dfc2e --- /dev/null +++ b/topologies/training-level7-part2/files/ceos/OOB-DC2/ceos-config @@ -0,0 +1,2 @@ +SERIALNUMBER=OOB-DC2 +SYSTEMMACADDR=00:1c:73:03:c6:01 diff --git a/topologies/training-level7-part2/files/ceos/OOB-DC2/startup-config b/topologies/training-level7-part2/files/ceos/OOB-DC2/startup-config new file mode 100644 index 000000000..fc67449a2 --- /dev/null +++ b/topologies/training-level7-part2/files/ceos/OOB-DC2/startup-config @@ -0,0 +1,61 @@ +vrf instance MGMT +! +daemon TerminAttr + exec /usr/bin/TerminAttr -disableaaa -ingestgrpcurl=192.168.0.5:9910 -taillogs -ingestauth=key,atd-lab -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent -ingestvrf=MGMT + no shutdown +! +alias mlag-reload bash /mnt/flash/shut_intfs && sudo shutdown now -r +alias conint sh interface | i connected +alias senz show interface counter error | nz +alias shmc show int | awk '/^[A-Z]/ { intf = $1 } /, address is/ { print intf, $6 }' +alias snz show interface counter | nz +alias spd show port-channel %1 detail all +alias sqnz show interface counter queue | nz +alias srnz show interface counter rate | nz +alias intdesc + !! Usage: intdesc interface-name description + 10 config + 20 int %1 + 30 desc %2 + 40 exit +! +dns domain arista.lab +! +ntp server vrf MGMT 192.168.0.1 iburst source Management0 +! +radius-server host 192.168.0.1 vrf MGMT key 7 0207165218120E +! +aaa group server radius atds + server 192.168.0.1 vrf MGMT +! +aaa authentication login default group atds local +aaa authorization exec default group atds local +aaa authorization commands all default local +! +username Script secret sha512 $6$PNfpb9anSBQ5/aia$phaa3ar5pwkntenD9WHc6Ed5b96lbW0dc0bjtwPnFLaDiCK8D5Cjl6ewP/xdNbl4PtS6Paq.3SssN8pj05NQm. +username admin privilege 15 role network-admin secret 5 $1$5O85YVVn$HrXcfOivJEnISTMb6xrJc. +username arista privilege 15 role network-admin secret 5 $1$4VjIjfd1$XkUVulbNDESHFzcxDU.Tk1 +! +username arista ssh-key ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC+ERvV4GaPq3FzxY8T+5hMF/1T+l8wiPsVCtOrZU4Hy6NCNlAiDBdA/RUtX5/aOu5JvHyPTVHqWJ0qi9BqU3rxCNl/l2/5UZbm9RPzdZ1QCwoYwPB9/j/tYJV8lZdr6t0yGBfxgzD3oW/zF7a+ZtASaMAu7lkgoqPK2pVIGa+Y9ZCsA0Xq756XpLCw+d3pHKHvIkgWLCo9FoeIv8f/bu5u/ztzRE+Nvl+o5add6MxnjsXz3s7BnW2FX6JNjyp0Z+OXjupQc2gcfFvpd/dA2lCNuuaCHkRgyPwIZtWPmNqMRXPp37mlPwV43qDJRVPQkvh0xPxwS35BbzUxWdT+ZLZv +! +ip radius source-interface Management0 +! +ip routing vrf MGMT +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 +! +management api http-commands + no shutdown + vrf MGMT + no shutdown +! +service routing protocols model multi-agent +! +hostname OOB-DC2 +! +interface Management0 + vrf MGMT + ip address 192.168.0.63/24 +! +ip routing +! diff --git a/topologies/training-level7-part2/files/ceos/borderleaf1-DC1/ceos-config b/topologies/training-level7-part2/files/ceos/borderleaf1-DC1/ceos-config new file mode 100644 index 000000000..dbca6b2ef --- /dev/null +++ b/topologies/training-level7-part2/files/ceos/borderleaf1-DC1/ceos-config @@ -0,0 +1,2 @@ +SERIALNUMBER=borderleaf1-DC1 +SYSTEMMACADDR=00:1c:73:c5:c6:01 diff --git a/topologies/training-level7-part2/files/ceos/borderleaf1-DC1/startup-config b/topologies/training-level7-part2/files/ceos/borderleaf1-DC1/startup-config new file mode 100644 index 000000000..efefca2cc --- /dev/null +++ b/topologies/training-level7-part2/files/ceos/borderleaf1-DC1/startup-config @@ -0,0 +1,61 @@ +vrf instance MGMT +! +daemon TerminAttr + exec /usr/bin/TerminAttr -disableaaa -ingestgrpcurl=192.168.0.5:9910 -taillogs -ingestauth=key,atd-lab -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent -ingestvrf=MGMT + no shutdown +! +alias mlag-reload bash /mnt/flash/shut_intfs && sudo shutdown now -r +alias conint sh interface | i connected +alias senz show interface counter error | nz +alias shmc show int | awk '/^[A-Z]/ { intf = $1 } /, address is/ { print intf, $6 }' +alias snz show interface counter | nz +alias spd show port-channel %1 detail all +alias sqnz show interface counter queue | nz +alias srnz show interface counter rate | nz +alias intdesc + !! Usage: intdesc interface-name description + 10 config + 20 int %1 + 30 desc %2 + 40 exit +! +dns domain arista.lab +! +ntp server vrf MGMT 192.168.0.1 iburst source Management0 +! +radius-server host 192.168.0.1 vrf MGMT key 7 0207165218120E +! +aaa group server radius atds + server 192.168.0.1 vrf MGMT +! +aaa authentication login default group atds local +aaa authorization exec default group atds local +aaa authorization commands all default local +! +username Script secret sha512 $6$PNfpb9anSBQ5/aia$phaa3ar5pwkntenD9WHc6Ed5b96lbW0dc0bjtwPnFLaDiCK8D5Cjl6ewP/xdNbl4PtS6Paq.3SssN8pj05NQm. +username admin privilege 15 role network-admin secret 5 $1$5O85YVVn$HrXcfOivJEnISTMb6xrJc. +username arista privilege 15 role network-admin secret 5 $1$4VjIjfd1$XkUVulbNDESHFzcxDU.Tk1 +! +username arista ssh-key ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC+ERvV4GaPq3FzxY8T+5hMF/1T+l8wiPsVCtOrZU4Hy6NCNlAiDBdA/RUtX5/aOu5JvHyPTVHqWJ0qi9BqU3rxCNl/l2/5UZbm9RPzdZ1QCwoYwPB9/j/tYJV8lZdr6t0yGBfxgzD3oW/zF7a+ZtASaMAu7lkgoqPK2pVIGa+Y9ZCsA0Xq756XpLCw+d3pHKHvIkgWLCo9FoeIv8f/bu5u/ztzRE+Nvl+o5add6MxnjsXz3s7BnW2FX6JNjyp0Z+OXjupQc2gcfFvpd/dA2lCNuuaCHkRgyPwIZtWPmNqMRXPp37mlPwV43qDJRVPQkvh0xPxwS35BbzUxWdT+ZLZv +! +ip radius source-interface Management0 +! +ip routing vrf MGMT +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 +! +management api http-commands + no shutdown + vrf MGMT + no shutdown +! +hostname borderleaf1-DC1 +! +interface Management0 + vrf MGMT + ip address 192.168.0.25/24 +! +service routing protocols model multi-agent +! +ip routing +! diff --git a/topologies/training-level7-part2/files/ceos/borderleaf1-DC2/ceos-config b/topologies/training-level7-part2/files/ceos/borderleaf1-DC2/ceos-config new file mode 100644 index 000000000..0fe64677f --- /dev/null +++ b/topologies/training-level7-part2/files/ceos/borderleaf1-DC2/ceos-config @@ -0,0 +1,2 @@ +SERIALNUMBER=borderleaf1-DC2 +SYSTEMMACADDR=00:1c:73:d5:c6:01 diff --git a/topologies/training-level7-part2/files/ceos/borderleaf1-DC2/startup-config b/topologies/training-level7-part2/files/ceos/borderleaf1-DC2/startup-config new file mode 100644 index 000000000..083df3baf --- /dev/null +++ b/topologies/training-level7-part2/files/ceos/borderleaf1-DC2/startup-config @@ -0,0 +1,61 @@ +vrf instance MGMT +! +daemon TerminAttr + exec /usr/bin/TerminAttr -disableaaa -ingestgrpcurl=192.168.0.5:9910 -taillogs -ingestauth=key,atd-lab -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent -ingestvrf=MGMT + no shutdown +! +alias mlag-reload bash /mnt/flash/shut_intfs && sudo shutdown now -r +alias conint sh interface | i connected +alias senz show interface counter error | nz +alias shmc show int | awk '/^[A-Z]/ { intf = $1 } /, address is/ { print intf, $6 }' +alias snz show interface counter | nz +alias spd show port-channel %1 detail all +alias sqnz show interface counter queue | nz +alias srnz show interface counter rate | nz +alias intdesc + !! Usage: intdesc interface-name description + 10 config + 20 int %1 + 30 desc %2 + 40 exit +! +dns domain arista.lab +! +ntp server vrf MGMT 192.168.0.1 iburst source Management0 +! +radius-server host 192.168.0.1 vrf MGMT key 7 0207165218120E +! +aaa group server radius atds + server 192.168.0.1 vrf MGMT +! +aaa authentication login default group atds local +aaa authorization exec default group atds local +aaa authorization commands all default local +! +username Script secret sha512 $6$PNfpb9anSBQ5/aia$phaa3ar5pwkntenD9WHc6Ed5b96lbW0dc0bjtwPnFLaDiCK8D5Cjl6ewP/xdNbl4PtS6Paq.3SssN8pj05NQm. +username admin privilege 15 role network-admin secret 5 $1$5O85YVVn$HrXcfOivJEnISTMb6xrJc. +username arista privilege 15 role network-admin secret 5 $1$4VjIjfd1$XkUVulbNDESHFzcxDU.Tk1 +! +username arista ssh-key ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC+ERvV4GaPq3FzxY8T+5hMF/1T+l8wiPsVCtOrZU4Hy6NCNlAiDBdA/RUtX5/aOu5JvHyPTVHqWJ0qi9BqU3rxCNl/l2/5UZbm9RPzdZ1QCwoYwPB9/j/tYJV8lZdr6t0yGBfxgzD3oW/zF7a+ZtASaMAu7lkgoqPK2pVIGa+Y9ZCsA0Xq756XpLCw+d3pHKHvIkgWLCo9FoeIv8f/bu5u/ztzRE+Nvl+o5add6MxnjsXz3s7BnW2FX6JNjyp0Z+OXjupQc2gcfFvpd/dA2lCNuuaCHkRgyPwIZtWPmNqMRXPp37mlPwV43qDJRVPQkvh0xPxwS35BbzUxWdT+ZLZv +! +ip radius source-interface Management0 +! +ip routing vrf MGMT +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 +! +management api http-commands + no shutdown + vrf MGMT + no shutdown +! +hostname borderleaf1-DC2 +! +interface Management0 + vrf MGMT + ip address 192.168.0.35/24 +! +service routing protocols model multi-agent +! +ip routing +! diff --git a/topologies/training-level7-part2/files/ceos/borderleaf2-DC1/ceos-config b/topologies/training-level7-part2/files/ceos/borderleaf2-DC1/ceos-config new file mode 100644 index 000000000..274998e45 --- /dev/null +++ b/topologies/training-level7-part2/files/ceos/borderleaf2-DC1/ceos-config @@ -0,0 +1,2 @@ +SERIALNUMBER=borderleaf2-DC1 +SYSTEMMACADDR=00:1c:73:c6:c6:01 diff --git a/topologies/training-level7-part2/files/ceos/borderleaf2-DC1/startup-config b/topologies/training-level7-part2/files/ceos/borderleaf2-DC1/startup-config new file mode 100644 index 000000000..12b623064 --- /dev/null +++ b/topologies/training-level7-part2/files/ceos/borderleaf2-DC1/startup-config @@ -0,0 +1,61 @@ +vrf instance MGMT +! +daemon TerminAttr + exec /usr/bin/TerminAttr -disableaaa -ingestgrpcurl=192.168.0.5:9910 -taillogs -ingestauth=key,atd-lab -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent -ingestvrf=MGMT + no shutdown +! +alias mlag-reload bash /mnt/flash/shut_intfs && sudo shutdown now -r +alias conint sh interface | i connected +alias senz show interface counter error | nz +alias shmc show int | awk '/^[A-Z]/ { intf = $1 } /, address is/ { print intf, $6 }' +alias snz show interface counter | nz +alias spd show port-channel %1 detail all +alias sqnz show interface counter queue | nz +alias srnz show interface counter rate | nz +alias intdesc + !! Usage: intdesc interface-name description + 10 config + 20 int %1 + 30 desc %2 + 40 exit +! +dns domain arista.lab +! +ntp server vrf MGMT 192.168.0.1 iburst source Management0 +! +radius-server host 192.168.0.1 vrf MGMT key 7 0207165218120E +! +aaa group server radius atds + server 192.168.0.1 vrf MGMT +! +aaa authentication login default group atds local +aaa authorization exec default group atds local +aaa authorization commands all default local +! +username Script secret sha512 $6$PNfpb9anSBQ5/aia$phaa3ar5pwkntenD9WHc6Ed5b96lbW0dc0bjtwPnFLaDiCK8D5Cjl6ewP/xdNbl4PtS6Paq.3SssN8pj05NQm. +username admin privilege 15 role network-admin secret 5 $1$5O85YVVn$HrXcfOivJEnISTMb6xrJc. +username arista privilege 15 role network-admin secret 5 $1$4VjIjfd1$XkUVulbNDESHFzcxDU.Tk1 +! +username arista ssh-key ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC+ERvV4GaPq3FzxY8T+5hMF/1T+l8wiPsVCtOrZU4Hy6NCNlAiDBdA/RUtX5/aOu5JvHyPTVHqWJ0qi9BqU3rxCNl/l2/5UZbm9RPzdZ1QCwoYwPB9/j/tYJV8lZdr6t0yGBfxgzD3oW/zF7a+ZtASaMAu7lkgoqPK2pVIGa+Y9ZCsA0Xq756XpLCw+d3pHKHvIkgWLCo9FoeIv8f/bu5u/ztzRE+Nvl+o5add6MxnjsXz3s7BnW2FX6JNjyp0Z+OXjupQc2gcfFvpd/dA2lCNuuaCHkRgyPwIZtWPmNqMRXPp37mlPwV43qDJRVPQkvh0xPxwS35BbzUxWdT+ZLZv +! +ip radius source-interface Management0 +! +ip routing vrf MGMT +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 +! +management api http-commands + no shutdown + vrf MGMT + no shutdown +! +hostname borderleaf2-DC1 +! +interface Management0 + vrf MGMT + ip address 192.168.0.26/24 +! +service routing protocols model multi-agent +! +ip routing +! diff --git a/topologies/training-level7-part2/files/ceos/borderleaf2-DC2/ceos-config b/topologies/training-level7-part2/files/ceos/borderleaf2-DC2/ceos-config new file mode 100644 index 000000000..87f33c9c9 --- /dev/null +++ b/topologies/training-level7-part2/files/ceos/borderleaf2-DC2/ceos-config @@ -0,0 +1,2 @@ +SERIALNUMBER=borderleaf2-DC2 +SYSTEMMACADDR=00:1c:73:d6:c6:01 diff --git a/topologies/training-level7-part2/files/ceos/borderleaf2-DC2/startup-config b/topologies/training-level7-part2/files/ceos/borderleaf2-DC2/startup-config new file mode 100644 index 000000000..4fb058cc8 --- /dev/null +++ b/topologies/training-level7-part2/files/ceos/borderleaf2-DC2/startup-config @@ -0,0 +1,60 @@ +vrf instance MGMT +! +daemon TerminAttr + exec /usr/bin/TerminAttr -disableaaa -ingestgrpcurl=192.168.0.5:9910 -taillogs -ingestauth=key,atd-lab -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent -ingestvrf=MGMT + no shutdown +! +alias mlag-reload bash /mnt/flash/shut_intfs && sudo shutdown now -r +alias conint sh interface | i connected +alias senz show interface counter error | nz +alias shmc show int | awk '/^[A-Z]/ { intf = $1 } /, address is/ { print intf, $6 }' +alias snz show interface counter | nz +alias spd show port-channel %1 detail all +alias sqnz show interface counter queue | nz +alias srnz show interface counter rate | nz +alias intdesc + !! Usage: intdesc interface-name description + 10 config + 20 int %1 + 30 desc %2 + 40 exit +! +dns domain arista.lab +! +ntp server vrf MGMT 192.168.0.1 iburst source Management0 +! +radius-server host 192.168.0.1 vrf MGMT key 7 0207165218120E +! +aaa group server radius atds + server 192.168.0.1 vrf MGMT +! +aaa authentication login default group atds local +aaa authorization exec default group atds local +aaa authorization commands all default local +! +username Script secret sha512 $6$PNfpb9anSBQ5/aia$phaa3ar5pwkntenD9WHc6Ed5b96lbW0dc0bjtwPnFLaDiCK8D5Cjl6ewP/xdNbl4PtS6Paq.3SssN8pj05NQm. +username admin privilege 15 role network-admin secret 5 $1$5O85YVVn$HrXcfOivJEnISTMb6xrJc. +username arista privilege 15 role network-admin secret 5 $1$4VjIjfd1$XkUVulbNDESHFzcxDU.Tk1 +! +username arista ssh-key ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC+ERvV4GaPq3FzxY8T+5hMF/1T+l8wiPsVCtOrZU4Hy6NCNlAiDBdA/RUtX5/aOu5JvHyPTVHqWJ0qi9BqU3rxCNl/l2/5UZbm9RPzdZ1QCwoYwPB9/j/tYJV8lZdr6t0yGBfxgzD3oW/zF7a+ZtASaMAu7lkgoqPK2pVIGa+Y9ZCsA0Xq756XpLCw+d3pHKHvIkgWLCo9FoeIv8f/bu5u/ztzRE+Nvl+o5add6MxnjsXz3s7BnW2FX6JNjyp0Z+OXjupQc2gcfFvpd/dA2lCNuuaCHkRgyPwIZtWPmNqMRXPp37mlPwV43qDJRVPQkvh0xPxwS35BbzUxWdT+ZLZv +! +ip radius source-interface Management0 +! +ip routing vrf MGMT +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 +! +management api http-commands + no shutdown + vrf MGMT + no shutdown +! +hostname borderleaf2-DC2 +! +interface Management0 + vrf MGMT + ip address 192.168.0.36/24 +! +service routing protocols model multi-agent +! +ip routing diff --git a/topologies/training-level7-part2/files/ceos/core1-isp1/ceos-config b/topologies/training-level7-part2/files/ceos/core1-isp1/ceos-config new file mode 100644 index 000000000..8ee81c3cb --- /dev/null +++ b/topologies/training-level7-part2/files/ceos/core1-isp1/ceos-config @@ -0,0 +1,2 @@ +SERIALNUMBER=core1-isp1 +SYSTEMMACADDR=00:1c:73:11:c6:01 diff --git a/topologies/training-level7-part2/files/ceos/core1-isp1/startup-config b/topologies/training-level7-part2/files/ceos/core1-isp1/startup-config new file mode 100644 index 000000000..4ecc7824b --- /dev/null +++ b/topologies/training-level7-part2/files/ceos/core1-isp1/startup-config @@ -0,0 +1,61 @@ +vrf instance MGMT +! +daemon TerminAttr + exec /usr/bin/TerminAttr -disableaaa -ingestgrpcurl=192.168.0.5:9910 -taillogs -ingestauth=key,atd-lab -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent -ingestvrf=MGMT + no shutdown +! +alias mlag-reload bash /mnt/flash/shut_intfs && sudo shutdown now -r +alias conint sh interface | i connected +alias senz show interface counter error | nz +alias shmc show int | awk '/^[A-Z]/ { intf = $1 } /, address is/ { print intf, $6 }' +alias snz show interface counter | nz +alias spd show port-channel %1 detail all +alias sqnz show interface counter queue | nz +alias srnz show interface counter rate | nz +alias intdesc + !! Usage: intdesc interface-name description + 10 config + 20 int %1 + 30 desc %2 + 40 exit +! +dns domain arista.lab +! +ntp server vrf MGMT 192.168.0.1 iburst source Management0 +! +radius-server host 192.168.0.1 vrf MGMT key 7 0207165218120E +! +aaa group server radius atds + server 192.168.0.1 vrf MGMT +! +aaa authentication login default group atds local +aaa authorization exec default group atds local +aaa authorization commands all default local +! +username Script secret sha512 $6$PNfpb9anSBQ5/aia$phaa3ar5pwkntenD9WHc6Ed5b96lbW0dc0bjtwPnFLaDiCK8D5Cjl6ewP/xdNbl4PtS6Paq.3SssN8pj05NQm. +username admin privilege 15 role network-admin secret 5 $1$5O85YVVn$HrXcfOivJEnISTMb6xrJc. +username arista privilege 15 role network-admin secret 5 $1$4VjIjfd1$XkUVulbNDESHFzcxDU.Tk1 +! +username arista ssh-key ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC+ERvV4GaPq3FzxY8T+5hMF/1T+l8wiPsVCtOrZU4Hy6NCNlAiDBdA/RUtX5/aOu5JvHyPTVHqWJ0qi9BqU3rxCNl/l2/5UZbm9RPzdZ1QCwoYwPB9/j/tYJV8lZdr6t0yGBfxgzD3oW/zF7a+ZtASaMAu7lkgoqPK2pVIGa+Y9ZCsA0Xq756XpLCw+d3pHKHvIkgWLCo9FoeIv8f/bu5u/ztzRE+Nvl+o5add6MxnjsXz3s7BnW2FX6JNjyp0Z+OXjupQc2gcfFvpd/dA2lCNuuaCHkRgyPwIZtWPmNqMRXPp37mlPwV43qDJRVPQkvh0xPxwS35BbzUxWdT+ZLZv +! +ip radius source-interface Management0 +! +ip routing vrf MGMT +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 +! +management api http-commands + no shutdown + vrf MGMT + no shutdown +! +service routing protocols model multi-agent +! +hostname core1-ISP1 +! +interface Management0 + vrf MGMT + ip address 192.168.0.71/24 +! +ip routing +! diff --git a/topologies/training-level7-part2/files/ceos/core1-isp2/ceos-config b/topologies/training-level7-part2/files/ceos/core1-isp2/ceos-config new file mode 100644 index 000000000..d9268e5c4 --- /dev/null +++ b/topologies/training-level7-part2/files/ceos/core1-isp2/ceos-config @@ -0,0 +1,2 @@ +SERIALNUMBER=core1-isp2 +SYSTEMMACADDR=00:1c:73:13:c6:01 diff --git a/topologies/training-level7-part2/files/ceos/core1-isp2/startup-config b/topologies/training-level7-part2/files/ceos/core1-isp2/startup-config new file mode 100644 index 000000000..a2cf63d78 --- /dev/null +++ b/topologies/training-level7-part2/files/ceos/core1-isp2/startup-config @@ -0,0 +1,61 @@ +vrf instance MGMT +! +daemon TerminAttr + exec /usr/bin/TerminAttr -disableaaa -ingestgrpcurl=192.168.0.5:9910 -taillogs -ingestauth=key,atd-lab -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent -ingestvrf=MGMT + no shutdown +! +alias mlag-reload bash /mnt/flash/shut_intfs && sudo shutdown now -r +alias conint sh interface | i connected +alias senz show interface counter error | nz +alias shmc show int | awk '/^[A-Z]/ { intf = $1 } /, address is/ { print intf, $6 }' +alias snz show interface counter | nz +alias spd show port-channel %1 detail all +alias sqnz show interface counter queue | nz +alias srnz show interface counter rate | nz +alias intdesc + !! Usage: intdesc interface-name description + 10 config + 20 int %1 + 30 desc %2 + 40 exit +! +dns domain arista.lab +! +ntp server vrf MGMT 192.168.0.1 iburst source Management0 +! +radius-server host 192.168.0.1 vrf MGMT key 7 0207165218120E +! +aaa group server radius atds + server 192.168.0.1 vrf MGMT +! +aaa authentication login default group atds local +aaa authorization exec default group atds local +aaa authorization commands all default local +! +username Script secret sha512 $6$PNfpb9anSBQ5/aia$phaa3ar5pwkntenD9WHc6Ed5b96lbW0dc0bjtwPnFLaDiCK8D5Cjl6ewP/xdNbl4PtS6Paq.3SssN8pj05NQm. +username admin privilege 15 role network-admin secret 5 $1$5O85YVVn$HrXcfOivJEnISTMb6xrJc. +username arista privilege 15 role network-admin secret 5 $1$4VjIjfd1$XkUVulbNDESHFzcxDU.Tk1 +! +username arista ssh-key ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC+ERvV4GaPq3FzxY8T+5hMF/1T+l8wiPsVCtOrZU4Hy6NCNlAiDBdA/RUtX5/aOu5JvHyPTVHqWJ0qi9BqU3rxCNl/l2/5UZbm9RPzdZ1QCwoYwPB9/j/tYJV8lZdr6t0yGBfxgzD3oW/zF7a+ZtASaMAu7lkgoqPK2pVIGa+Y9ZCsA0Xq756XpLCw+d3pHKHvIkgWLCo9FoeIv8f/bu5u/ztzRE+Nvl+o5add6MxnjsXz3s7BnW2FX6JNjyp0Z+OXjupQc2gcfFvpd/dA2lCNuuaCHkRgyPwIZtWPmNqMRXPp37mlPwV43qDJRVPQkvh0xPxwS35BbzUxWdT+ZLZv +! +ip radius source-interface Management0 +! +ip routing vrf MGMT +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 +! +management api http-commands + no shutdown + vrf MGMT + no shutdown +! +service routing protocols model multi-agent +! +hostname core1-ISP2 +! +interface Management0 + vrf MGMT + ip address 192.168.0.73/24 +! +ip routing +! diff --git a/topologies/training-level7-part2/files/ceos/core2-isp1/ceos-config b/topologies/training-level7-part2/files/ceos/core2-isp1/ceos-config new file mode 100644 index 000000000..8555b2328 --- /dev/null +++ b/topologies/training-level7-part2/files/ceos/core2-isp1/ceos-config @@ -0,0 +1,2 @@ +SERIALNUMBER=core2-isp1 +SYSTEMMACADDR=00:1c:73:12:c6:01 diff --git a/topologies/training-level7-part2/files/ceos/core2-isp1/startup-config b/topologies/training-level7-part2/files/ceos/core2-isp1/startup-config new file mode 100644 index 000000000..14590ed77 --- /dev/null +++ b/topologies/training-level7-part2/files/ceos/core2-isp1/startup-config @@ -0,0 +1,61 @@ +vrf instance MGMT +! +daemon TerminAttr + exec /usr/bin/TerminAttr -disableaaa -ingestgrpcurl=192.168.0.5:9910 -taillogs -ingestauth=key,atd-lab -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent -ingestvrf=MGMT + no shutdown +! +alias mlag-reload bash /mnt/flash/shut_intfs && sudo shutdown now -r +alias conint sh interface | i connected +alias senz show interface counter error | nz +alias shmc show int | awk '/^[A-Z]/ { intf = $1 } /, address is/ { print intf, $6 }' +alias snz show interface counter | nz +alias spd show port-channel %1 detail all +alias sqnz show interface counter queue | nz +alias srnz show interface counter rate | nz +alias intdesc + !! Usage: intdesc interface-name description + 10 config + 20 int %1 + 30 desc %2 + 40 exit +! +dns domain arista.lab +! +ntp server vrf MGMT 192.168.0.1 iburst source Management0 +! +radius-server host 192.168.0.1 vrf MGMT key 7 0207165218120E +! +aaa group server radius atds + server 192.168.0.1 vrf MGMT +! +aaa authentication login default group atds local +aaa authorization exec default group atds local +aaa authorization commands all default local +! +username Script secret sha512 $6$PNfpb9anSBQ5/aia$phaa3ar5pwkntenD9WHc6Ed5b96lbW0dc0bjtwPnFLaDiCK8D5Cjl6ewP/xdNbl4PtS6Paq.3SssN8pj05NQm. +username admin privilege 15 role network-admin secret 5 $1$5O85YVVn$HrXcfOivJEnISTMb6xrJc. +username arista privilege 15 role network-admin secret 5 $1$4VjIjfd1$XkUVulbNDESHFzcxDU.Tk1 +! +username arista ssh-key ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC+ERvV4GaPq3FzxY8T+5hMF/1T+l8wiPsVCtOrZU4Hy6NCNlAiDBdA/RUtX5/aOu5JvHyPTVHqWJ0qi9BqU3rxCNl/l2/5UZbm9RPzdZ1QCwoYwPB9/j/tYJV8lZdr6t0yGBfxgzD3oW/zF7a+ZtASaMAu7lkgoqPK2pVIGa+Y9ZCsA0Xq756XpLCw+d3pHKHvIkgWLCo9FoeIv8f/bu5u/ztzRE+Nvl+o5add6MxnjsXz3s7BnW2FX6JNjyp0Z+OXjupQc2gcfFvpd/dA2lCNuuaCHkRgyPwIZtWPmNqMRXPp37mlPwV43qDJRVPQkvh0xPxwS35BbzUxWdT+ZLZv +! +ip radius source-interface Management0 +! +ip routing vrf MGMT +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 +! +management api http-commands + no shutdown + vrf MGMT + no shutdown +! +service routing protocols model multi-agent +! +hostname core2-ISP1 +! +interface Management0 + vrf MGMT + ip address 192.168.0.72/24 +! +ip routing +! diff --git a/topologies/training-level7-part2/files/ceos/core2-isp2/ceos-config b/topologies/training-level7-part2/files/ceos/core2-isp2/ceos-config new file mode 100644 index 000000000..6c8713b9a --- /dev/null +++ b/topologies/training-level7-part2/files/ceos/core2-isp2/ceos-config @@ -0,0 +1,2 @@ +SERIALNUMBER=core2-isp2 +SYSTEMMACADDR=00:1c:73:14:c6:01 diff --git a/topologies/training-level7-part2/files/ceos/core2-isp2/startup-config b/topologies/training-level7-part2/files/ceos/core2-isp2/startup-config new file mode 100644 index 000000000..73430e463 --- /dev/null +++ b/topologies/training-level7-part2/files/ceos/core2-isp2/startup-config @@ -0,0 +1,61 @@ +vrf instance MGMT +! +daemon TerminAttr + exec /usr/bin/TerminAttr -disableaaa -ingestgrpcurl=192.168.0.5:9910 -taillogs -ingestauth=key,atd-lab -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent -ingestvrf=MGMT + no shutdown +! +alias mlag-reload bash /mnt/flash/shut_intfs && sudo shutdown now -r +alias conint sh interface | i connected +alias senz show interface counter error | nz +alias shmc show int | awk '/^[A-Z]/ { intf = $1 } /, address is/ { print intf, $6 }' +alias snz show interface counter | nz +alias spd show port-channel %1 detail all +alias sqnz show interface counter queue | nz +alias srnz show interface counter rate | nz +alias intdesc + !! Usage: intdesc interface-name description + 10 config + 20 int %1 + 30 desc %2 + 40 exit +! +dns domain arista.lab +! +ntp server vrf MGMT 192.168.0.1 iburst source Management0 +! +radius-server host 192.168.0.1 vrf MGMT key 7 0207165218120E +! +aaa group server radius atds + server 192.168.0.1 vrf MGMT +! +aaa authentication login default group atds local +aaa authorization exec default group atds local +aaa authorization commands all default local +! +username Script secret sha512 $6$PNfpb9anSBQ5/aia$phaa3ar5pwkntenD9WHc6Ed5b96lbW0dc0bjtwPnFLaDiCK8D5Cjl6ewP/xdNbl4PtS6Paq.3SssN8pj05NQm. +username admin privilege 15 role network-admin secret 5 $1$5O85YVVn$HrXcfOivJEnISTMb6xrJc. +username arista privilege 15 role network-admin secret 5 $1$4VjIjfd1$XkUVulbNDESHFzcxDU.Tk1 +! +username arista ssh-key ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC+ERvV4GaPq3FzxY8T+5hMF/1T+l8wiPsVCtOrZU4Hy6NCNlAiDBdA/RUtX5/aOu5JvHyPTVHqWJ0qi9BqU3rxCNl/l2/5UZbm9RPzdZ1QCwoYwPB9/j/tYJV8lZdr6t0yGBfxgzD3oW/zF7a+ZtASaMAu7lkgoqPK2pVIGa+Y9ZCsA0Xq756XpLCw+d3pHKHvIkgWLCo9FoeIv8f/bu5u/ztzRE+Nvl+o5add6MxnjsXz3s7BnW2FX6JNjyp0Z+OXjupQc2gcfFvpd/dA2lCNuuaCHkRgyPwIZtWPmNqMRXPp37mlPwV43qDJRVPQkvh0xPxwS35BbzUxWdT+ZLZv +! +ip radius source-interface Management0 +! +ip routing vrf MGMT +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 +! +management api http-commands + no shutdown + vrf MGMT + no shutdown +! +service routing protocols model multi-agent +! +hostname core2-ISP2 +! +interface Management0 + vrf MGMT + ip address 192.168.0.74/24 +! +ip routing +! diff --git a/topologies/training-level7-part2/files/ceos/host1-DC1/ceos-config b/topologies/training-level7-part2/files/ceos/host1-DC1/ceos-config new file mode 100644 index 000000000..f554f97db --- /dev/null +++ b/topologies/training-level7-part2/files/ceos/host1-DC1/ceos-config @@ -0,0 +1,2 @@ +SERIALNUMBER=host1-DC1 +SYSTEMMACADDR=00:1c:73:f1:c6:01 diff --git a/topologies/training-level7-part2/files/ceos/host1-DC1/startup-config b/topologies/training-level7-part2/files/ceos/host1-DC1/startup-config new file mode 100644 index 000000000..13bef3cb1 --- /dev/null +++ b/topologies/training-level7-part2/files/ceos/host1-DC1/startup-config @@ -0,0 +1,62 @@ +vrf instance MGMT +! +daemon TerminAttr + exec /usr/bin/TerminAttr -disableaaa -ingestgrpcurl=192.168.0.5:9910 -taillogs -ingestauth=key,atd-lab -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent -ingestvrf=MGMT + no shutdown +! +alias mlag-reload bash /mnt/flash/shut_intfs && sudo shutdown now -r +alias conint sh interface | i connected +alias senz show interface counter error | nz +alias shmc show int | awk '/^[A-Z]/ { intf = $1 } /, address is/ { print intf, $6 }' +alias snz show interface counter | nz +alias spd show port-channel %1 detail all +alias sqnz show interface counter queue | nz +alias srnz show interface counter rate | nz +alias intdesc + !! Usage: intdesc interface-name description + 10 config + 20 int %1 + 30 desc %2 + 40 exit +! +dns domain arista.lab +! +ntp server vrf MGMT 192.168.0.1 iburst source Management0 +! +radius-server host 192.168.0.1 vrf MGMT key 7 0207165218120E +! +aaa group server radius atds + server 192.168.0.1 vrf MGMT +! +aaa authentication login default group atds local +aaa authorization exec default group atds local +aaa authorization commands all default local +! +username Script secret sha512 $6$PNfpb9anSBQ5/aia$phaa3ar5pwkntenD9WHc6Ed5b96lbW0dc0bjtwPnFLaDiCK8D5Cjl6ewP/xdNbl4PtS6Paq.3SssN8pj05NQm. +username admin privilege 15 role network-admin secret 5 $1$5O85YVVn$HrXcfOivJEnISTMb6xrJc. +username arista privilege 15 role network-admin secret 5 $1$4VjIjfd1$XkUVulbNDESHFzcxDU.Tk1 +! +username arista ssh-key ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC+ERvV4GaPq3FzxY8T+5hMF/1T+l8wiPsVCtOrZU4Hy6NCNlAiDBdA/RUtX5/aOu5JvHyPTVHqWJ0qi9BqU3rxCNl/l2/5UZbm9RPzdZ1QCwoYwPB9/j/tYJV8lZdr6t0yGBfxgzD3oW/zF7a+ZtASaMAu7lkgoqPK2pVIGa+Y9ZCsA0Xq756XpLCw+d3pHKHvIkgWLCo9FoeIv8f/bu5u/ztzRE+Nvl+o5add6MxnjsXz3s7BnW2FX6JNjyp0Z+OXjupQc2gcfFvpd/dA2lCNuuaCHkRgyPwIZtWPmNqMRXPp37mlPwV43qDJRVPQkvh0xPxwS35BbzUxWdT+ZLZv +! +ip radius source-interface Management0 +! +ip routing vrf MGMT +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 +! +management api http-commands + no shutdown + vrf MGMT + no shutdown +! +hostname host1-DC1 +! +spanning-tree mode none +! +service routing protocols model multi-agent +! +interface Management0 + vrf MGMT + ip address 192.168.0.51/24 +! +ip routing \ No newline at end of file diff --git a/topologies/training-level7-part2/files/ceos/host1-DC2/ceos-config b/topologies/training-level7-part2/files/ceos/host1-DC2/ceos-config new file mode 100644 index 000000000..cd09f1595 --- /dev/null +++ b/topologies/training-level7-part2/files/ceos/host1-DC2/ceos-config @@ -0,0 +1,2 @@ +SERIALNUMBER=host1-DC2 +SYSTEMMACADDR=00:1c:73:f3:c6:01 diff --git a/topologies/training-level7-part2/files/ceos/host1-DC2/startup-config b/topologies/training-level7-part2/files/ceos/host1-DC2/startup-config new file mode 100644 index 000000000..da68c62a0 --- /dev/null +++ b/topologies/training-level7-part2/files/ceos/host1-DC2/startup-config @@ -0,0 +1,62 @@ +vrf instance MGMT +! +daemon TerminAttr + exec /usr/bin/TerminAttr -disableaaa -ingestgrpcurl=192.168.0.5:9910 -taillogs -ingestauth=key,atd-lab -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent -ingestvrf=MGMT + no shutdown +! +alias mlag-reload bash /mnt/flash/shut_intfs && sudo shutdown now -r +alias conint sh interface | i connected +alias senz show interface counter error | nz +alias shmc show int | awk '/^[A-Z]/ { intf = $1 } /, address is/ { print intf, $6 }' +alias snz show interface counter | nz +alias spd show port-channel %1 detail all +alias sqnz show interface counter queue | nz +alias srnz show interface counter rate | nz +alias intdesc + !! Usage: intdesc interface-name description + 10 config + 20 int %1 + 30 desc %2 + 40 exit +! +dns domain arista.lab +! +ntp server vrf MGMT 192.168.0.1 iburst source Management0 +! +radius-server host 192.168.0.1 vrf MGMT key 7 0207165218120E +! +aaa group server radius atds + server 192.168.0.1 vrf MGMT +! +aaa authentication login default group atds local +aaa authorization exec default group atds local +aaa authorization commands all default local +! +username Script secret sha512 $6$PNfpb9anSBQ5/aia$phaa3ar5pwkntenD9WHc6Ed5b96lbW0dc0bjtwPnFLaDiCK8D5Cjl6ewP/xdNbl4PtS6Paq.3SssN8pj05NQm. +username admin privilege 15 role network-admin secret 5 $1$5O85YVVn$HrXcfOivJEnISTMb6xrJc. +username arista privilege 15 role network-admin secret 5 $1$4VjIjfd1$XkUVulbNDESHFzcxDU.Tk1 +! +username arista ssh-key ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC+ERvV4GaPq3FzxY8T+5hMF/1T+l8wiPsVCtOrZU4Hy6NCNlAiDBdA/RUtX5/aOu5JvHyPTVHqWJ0qi9BqU3rxCNl/l2/5UZbm9RPzdZ1QCwoYwPB9/j/tYJV8lZdr6t0yGBfxgzD3oW/zF7a+ZtASaMAu7lkgoqPK2pVIGa+Y9ZCsA0Xq756XpLCw+d3pHKHvIkgWLCo9FoeIv8f/bu5u/ztzRE+Nvl+o5add6MxnjsXz3s7BnW2FX6JNjyp0Z+OXjupQc2gcfFvpd/dA2lCNuuaCHkRgyPwIZtWPmNqMRXPp37mlPwV43qDJRVPQkvh0xPxwS35BbzUxWdT+ZLZv +! +ip radius source-interface Management0 +! +ip routing vrf MGMT +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 +! +management api http-commands + no shutdown + vrf MGMT + no shutdown +! +hostname host1-DC2 +! +spanning-tree mode none +! +service routing protocols model multi-agent +! +interface Management0 + vrf MGMT + ip address 192.168.0.53/24 +! +ip routing \ No newline at end of file diff --git a/topologies/training-level7-part2/files/ceos/host1-DC3/ceos-config b/topologies/training-level7-part2/files/ceos/host1-DC3/ceos-config new file mode 100644 index 000000000..09b2eeb0b --- /dev/null +++ b/topologies/training-level7-part2/files/ceos/host1-DC3/ceos-config @@ -0,0 +1,2 @@ +SERIALNUMBER=host1-DC3 +SYSTEMMACADDR=00:1c:73:22:c6:01 diff --git a/topologies/training-level7-part2/files/ceos/host1-DC3/startup-config b/topologies/training-level7-part2/files/ceos/host1-DC3/startup-config new file mode 100644 index 000000000..577d41cba --- /dev/null +++ b/topologies/training-level7-part2/files/ceos/host1-DC3/startup-config @@ -0,0 +1,64 @@ +vrf instance MGMT +! +daemon TerminAttr + exec /usr/bin/TerminAttr -disableaaa -ingestgrpcurl=192.168.0.5:9910 -taillogs -ingestauth=key,atd-lab -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent -ingestvrf=MGMT + no shutdown +! +alias mlag-reload bash /mnt/flash/shut_intfs && sudo shutdown now -r +alias conint sh interface | i connected +alias senz show interface counter error | nz +alias shmc show int | awk '/^[A-Z]/ { intf = $1 } /, address is/ { print intf, $6 }' +alias snz show interface counter | nz +alias spd show port-channel %1 detail all +alias sqnz show interface counter queue | nz +alias srnz show interface counter rate | nz +alias intdesc + !! Usage: intdesc interface-name description + 10 config + 20 int %1 + 30 desc %2 + 40 exit +! +dns domain arista.lab +! +ntp server vrf MGMT 192.168.0.1 iburst source Management0 +! +radius-server host 192.168.0.1 vrf MGMT key 7 0207165218120E +! +aaa group server radius atds + server 192.168.0.1 vrf MGMT +! +aaa authentication login default group atds local +aaa authorization exec default group atds local +aaa authorization commands all default local +! +username Script secret sha512 $6$PNfpb9anSBQ5/aia$phaa3ar5pwkntenD9WHc6Ed5b96lbW0dc0bjtwPnFLaDiCK8D5Cjl6ewP/xdNbl4PtS6Paq.3SssN8pj05NQm. +username admin privilege 15 role network-admin secret 5 $1$5O85YVVn$HrXcfOivJEnISTMb6xrJc. +username arista privilege 15 role network-admin secret 5 $1$4VjIjfd1$XkUVulbNDESHFzcxDU.Tk1 +! +username arista ssh-key ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC+ERvV4GaPq3FzxY8T+5hMF/1T+l8wiPsVCtOrZU4Hy6NCNlAiDBdA/RUtX5/aOu5JvHyPTVHqWJ0qi9BqU3rxCNl/l2/5UZbm9RPzdZ1QCwoYwPB9/j/tYJV8lZdr6t0yGBfxgzD3oW/zF7a+ZtASaMAu7lkgoqPK2pVIGa+Y9ZCsA0Xq756XpLCw+d3pHKHvIkgWLCo9FoeIv8f/bu5u/ztzRE+Nvl+o5add6MxnjsXz3s7BnW2FX6JNjyp0Z+OXjupQc2gcfFvpd/dA2lCNuuaCHkRgyPwIZtWPmNqMRXPp37mlPwV43qDJRVPQkvh0xPxwS35BbzUxWdT+ZLZv +! +ip radius source-interface Management0 +! +ip routing vrf MGMT +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 +! +management api http-commands + no shutdown + vrf MGMT + no shutdown +! +hostname host1-DC3 +! +spanning-tree mode none +! +service routing protocols model multi-agent +! +interface Management0 + vrf MGMT + ip address 192.168.0.82/24 +! +service routing protocols model multi-agent +! +ip routing diff --git a/topologies/training-level7-part2/files/ceos/host2-DC1/ceos-config b/topologies/training-level7-part2/files/ceos/host2-DC1/ceos-config new file mode 100644 index 000000000..855945bed --- /dev/null +++ b/topologies/training-level7-part2/files/ceos/host2-DC1/ceos-config @@ -0,0 +1,2 @@ +SERIALNUMBER=host2-DC1 +SYSTEMMACADDR=00:1c:73:f2:c6:01 diff --git a/topologies/training-level7-part2/files/ceos/host2-DC1/startup-config b/topologies/training-level7-part2/files/ceos/host2-DC1/startup-config new file mode 100644 index 000000000..8b20601ec --- /dev/null +++ b/topologies/training-level7-part2/files/ceos/host2-DC1/startup-config @@ -0,0 +1,62 @@ +vrf instance MGMT +! +daemon TerminAttr + exec /usr/bin/TerminAttr -disableaaa -ingestgrpcurl=192.168.0.5:9910 -taillogs -ingestauth=key,atd-lab -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent -ingestvrf=MGMT + no shutdown +! +alias mlag-reload bash /mnt/flash/shut_intfs && sudo shutdown now -r +alias conint sh interface | i connected +alias senz show interface counter error | nz +alias shmc show int | awk '/^[A-Z]/ { intf = $1 } /, address is/ { print intf, $6 }' +alias snz show interface counter | nz +alias spd show port-channel %1 detail all +alias sqnz show interface counter queue | nz +alias srnz show interface counter rate | nz +alias intdesc + !! Usage: intdesc interface-name description + 10 config + 20 int %1 + 30 desc %2 + 40 exit +! +dns domain arista.lab +! +ntp server vrf MGMT 192.168.0.1 iburst source Management0 +! +radius-server host 192.168.0.1 vrf MGMT key 7 0207165218120E +! +aaa group server radius atds + server 192.168.0.1 vrf MGMT +! +aaa authentication login default group atds local +aaa authorization exec default group atds local +aaa authorization commands all default local +! +username Script secret sha512 $6$PNfpb9anSBQ5/aia$phaa3ar5pwkntenD9WHc6Ed5b96lbW0dc0bjtwPnFLaDiCK8D5Cjl6ewP/xdNbl4PtS6Paq.3SssN8pj05NQm. +username admin privilege 15 role network-admin secret 5 $1$5O85YVVn$HrXcfOivJEnISTMb6xrJc. +username arista privilege 15 role network-admin secret 5 $1$4VjIjfd1$XkUVulbNDESHFzcxDU.Tk1 +! +username arista ssh-key ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC+ERvV4GaPq3FzxY8T+5hMF/1T+l8wiPsVCtOrZU4Hy6NCNlAiDBdA/RUtX5/aOu5JvHyPTVHqWJ0qi9BqU3rxCNl/l2/5UZbm9RPzdZ1QCwoYwPB9/j/tYJV8lZdr6t0yGBfxgzD3oW/zF7a+ZtASaMAu7lkgoqPK2pVIGa+Y9ZCsA0Xq756XpLCw+d3pHKHvIkgWLCo9FoeIv8f/bu5u/ztzRE+Nvl+o5add6MxnjsXz3s7BnW2FX6JNjyp0Z+OXjupQc2gcfFvpd/dA2lCNuuaCHkRgyPwIZtWPmNqMRXPp37mlPwV43qDJRVPQkvh0xPxwS35BbzUxWdT+ZLZv +! +ip radius source-interface Management0 +! +ip routing vrf MGMT +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 +! +management api http-commands + no shutdown + vrf MGMT + no shutdown +! +hostname host2-DC1 +! +spanning-tree mode none +! +service routing protocols model multi-agent +! +interface Management0 + vrf MGMT + ip address 192.168.0.52/24 +! +ip routing \ No newline at end of file diff --git a/topologies/training-level7-part2/files/ceos/host2-DC2/ceos-config b/topologies/training-level7-part2/files/ceos/host2-DC2/ceos-config new file mode 100644 index 000000000..cdece32c2 --- /dev/null +++ b/topologies/training-level7-part2/files/ceos/host2-DC2/ceos-config @@ -0,0 +1,2 @@ +SERIALNUMBER=host2-DC2 +SYSTEMMACADDR=00:1c:73:f4:c6:01 diff --git a/topologies/training-level7-part2/files/ceos/host2-DC2/startup-config b/topologies/training-level7-part2/files/ceos/host2-DC2/startup-config new file mode 100644 index 000000000..1d4ca9bf3 --- /dev/null +++ b/topologies/training-level7-part2/files/ceos/host2-DC2/startup-config @@ -0,0 +1,62 @@ +vrf instance MGMT +! +daemon TerminAttr + exec /usr/bin/TerminAttr -disableaaa -ingestgrpcurl=192.168.0.5:9910 -taillogs -ingestauth=key,atd-lab -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent -ingestvrf=MGMT + no shutdown +! +alias mlag-reload bash /mnt/flash/shut_intfs && sudo shutdown now -r +alias conint sh interface | i connected +alias senz show interface counter error | nz +alias shmc show int | awk '/^[A-Z]/ { intf = $1 } /, address is/ { print intf, $6 }' +alias snz show interface counter | nz +alias spd show port-channel %1 detail all +alias sqnz show interface counter queue | nz +alias srnz show interface counter rate | nz +alias intdesc + !! Usage: intdesc interface-name description + 10 config + 20 int %1 + 30 desc %2 + 40 exit +! +dns domain arista.lab +! +ntp server vrf MGMT 192.168.0.1 iburst source Management0 +! +radius-server host 192.168.0.1 vrf MGMT key 7 0207165218120E +! +aaa group server radius atds + server 192.168.0.1 vrf MGMT +! +aaa authentication login default group atds local +aaa authorization exec default group atds local +aaa authorization commands all default local +! +username Script secret sha512 $6$PNfpb9anSBQ5/aia$phaa3ar5pwkntenD9WHc6Ed5b96lbW0dc0bjtwPnFLaDiCK8D5Cjl6ewP/xdNbl4PtS6Paq.3SssN8pj05NQm. +username admin privilege 15 role network-admin secret 5 $1$5O85YVVn$HrXcfOivJEnISTMb6xrJc. +username arista privilege 15 role network-admin secret 5 $1$4VjIjfd1$XkUVulbNDESHFzcxDU.Tk1 +! +username arista ssh-key ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC+ERvV4GaPq3FzxY8T+5hMF/1T+l8wiPsVCtOrZU4Hy6NCNlAiDBdA/RUtX5/aOu5JvHyPTVHqWJ0qi9BqU3rxCNl/l2/5UZbm9RPzdZ1QCwoYwPB9/j/tYJV8lZdr6t0yGBfxgzD3oW/zF7a+ZtASaMAu7lkgoqPK2pVIGa+Y9ZCsA0Xq756XpLCw+d3pHKHvIkgWLCo9FoeIv8f/bu5u/ztzRE+Nvl+o5add6MxnjsXz3s7BnW2FX6JNjyp0Z+OXjupQc2gcfFvpd/dA2lCNuuaCHkRgyPwIZtWPmNqMRXPp37mlPwV43qDJRVPQkvh0xPxwS35BbzUxWdT+ZLZv +! +ip radius source-interface Management0 +! +ip routing vrf MGMT +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 +! +management api http-commands + no shutdown + vrf MGMT + no shutdown +! +hostname host2-DC2 +! +spanning-tree mode none +! +service routing protocols model multi-agent +! +interface Management0 + vrf MGMT + ip address 192.168.0.54/24 +! +ip routing \ No newline at end of file diff --git a/topologies/training-level7-part2/files/ceos/host2-DC3/ceos-config b/topologies/training-level7-part2/files/ceos/host2-DC3/ceos-config new file mode 100644 index 000000000..941e4f147 --- /dev/null +++ b/topologies/training-level7-part2/files/ceos/host2-DC3/ceos-config @@ -0,0 +1,2 @@ +SERIALNUMBER=host2-DC3 +SYSTEMMACADDR=00:1c:73:23:c6:01 diff --git a/topologies/training-level7-part2/files/ceos/host2-DC3/startup-config b/topologies/training-level7-part2/files/ceos/host2-DC3/startup-config new file mode 100644 index 000000000..77eea090f --- /dev/null +++ b/topologies/training-level7-part2/files/ceos/host2-DC3/startup-config @@ -0,0 +1,63 @@ +vrf instance MGMT +! +daemon TerminAttr + exec /usr/bin/TerminAttr -disableaaa -ingestgrpcurl=192.168.0.5:9910 -taillogs -ingestauth=key,atd-lab -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent -ingestvrf=MGMT + no shutdown +! +alias mlag-reload bash /mnt/flash/shut_intfs && sudo shutdown now -r +alias conint sh interface | i connected +alias senz show interface counter error | nz +alias shmc show int | awk '/^[A-Z]/ { intf = $1 } /, address is/ { print intf, $6 }' +alias snz show interface counter | nz +alias spd show port-channel %1 detail all +alias sqnz show interface counter queue | nz +alias srnz show interface counter rate | nz +alias intdesc + !! Usage: intdesc interface-name description + 10 config + 20 int %1 + 30 desc %2 + 40 exit +! +dns domain arista.lab +! +ntp server vrf MGMT 192.168.0.1 iburst source Management0 +! +radius-server host 192.168.0.1 vrf MGMT key 7 0207165218120E +! +aaa group server radius atds + server 192.168.0.1 vrf MGMT +! +aaa authentication login default group atds local +aaa authorization exec default group atds local +aaa authorization commands all default local +! +username Script secret sha512 $6$PNfpb9anSBQ5/aia$phaa3ar5pwkntenD9WHc6Ed5b96lbW0dc0bjtwPnFLaDiCK8D5Cjl6ewP/xdNbl4PtS6Paq.3SssN8pj05NQm. +username admin privilege 15 role network-admin secret 5 $1$5O85YVVn$HrXcfOivJEnISTMb6xrJc. +username arista privilege 15 role network-admin secret 5 $1$4VjIjfd1$XkUVulbNDESHFzcxDU.Tk1 +! +username arista ssh-key ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC+ERvV4GaPq3FzxY8T+5hMF/1T+l8wiPsVCtOrZU4Hy6NCNlAiDBdA/RUtX5/aOu5JvHyPTVHqWJ0qi9BqU3rxCNl/l2/5UZbm9RPzdZ1QCwoYwPB9/j/tYJV8lZdr6t0yGBfxgzD3oW/zF7a+ZtASaMAu7lkgoqPK2pVIGa+Y9ZCsA0Xq756XpLCw+d3pHKHvIkgWLCo9FoeIv8f/bu5u/ztzRE+Nvl+o5add6MxnjsXz3s7BnW2FX6JNjyp0Z+OXjupQc2gcfFvpd/dA2lCNuuaCHkRgyPwIZtWPmNqMRXPp37mlPwV43qDJRVPQkvh0xPxwS35BbzUxWdT+ZLZv +! +ip radius source-interface Management0 +! +ip routing vrf MGMT +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 +! +management api http-commands + no shutdown + vrf MGMT + no shutdown +! +hostname host2-DC3 +! +spanning-tree mode none +! +interface Management0 + vrf MGMT + ip address 192.168.0.83/24 +! +service routing protocols model multi-agent +! +ip routing +! \ No newline at end of file diff --git a/topologies/training-level7-part2/files/ceos/internet/ceos-config b/topologies/training-level7-part2/files/ceos/internet/ceos-config new file mode 100644 index 000000000..cea0a4d9f --- /dev/null +++ b/topologies/training-level7-part2/files/ceos/internet/ceos-config @@ -0,0 +1,2 @@ +SERIALNUMBER=internet +SYSTEMMACADDR=00:1c:73:15:c6:01 diff --git a/topologies/training-level7-part2/files/ceos/internet/startup-config b/topologies/training-level7-part2/files/ceos/internet/startup-config new file mode 100644 index 000000000..eeb9c3ca2 --- /dev/null +++ b/topologies/training-level7-part2/files/ceos/internet/startup-config @@ -0,0 +1,61 @@ +vrf instance MGMT +! +daemon TerminAttr + exec /usr/bin/TerminAttr -disableaaa -ingestgrpcurl=192.168.0.5:9910 -taillogs -ingestauth=key,atd-lab -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent -ingestvrf=MGMT + no shutdown +! +alias mlag-reload bash /mnt/flash/shut_intfs && sudo shutdown now -r +alias conint sh interface | i connected +alias senz show interface counter error | nz +alias shmc show int | awk '/^[A-Z]/ { intf = $1 } /, address is/ { print intf, $6 }' +alias snz show interface counter | nz +alias spd show port-channel %1 detail all +alias sqnz show interface counter queue | nz +alias srnz show interface counter rate | nz +alias intdesc + !! Usage: intdesc interface-name description + 10 config + 20 int %1 + 30 desc %2 + 40 exit +! +dns domain arista.lab +! +ntp server vrf MGMT 192.168.0.1 iburst source Management0 +! +radius-server host 192.168.0.1 vrf MGMT key 7 0207165218120E +! +aaa group server radius atds + server 192.168.0.1 vrf MGMT +! +aaa authentication login default group atds local +aaa authorization exec default group atds local +aaa authorization commands all default local +! +username Script secret sha512 $6$PNfpb9anSBQ5/aia$phaa3ar5pwkntenD9WHc6Ed5b96lbW0dc0bjtwPnFLaDiCK8D5Cjl6ewP/xdNbl4PtS6Paq.3SssN8pj05NQm. +username admin privilege 15 role network-admin secret 5 $1$5O85YVVn$HrXcfOivJEnISTMb6xrJc. +username arista privilege 15 role network-admin secret 5 $1$4VjIjfd1$XkUVulbNDESHFzcxDU.Tk1 +! +username arista ssh-key ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC+ERvV4GaPq3FzxY8T+5hMF/1T+l8wiPsVCtOrZU4Hy6NCNlAiDBdA/RUtX5/aOu5JvHyPTVHqWJ0qi9BqU3rxCNl/l2/5UZbm9RPzdZ1QCwoYwPB9/j/tYJV8lZdr6t0yGBfxgzD3oW/zF7a+ZtASaMAu7lkgoqPK2pVIGa+Y9ZCsA0Xq756XpLCw+d3pHKHvIkgWLCo9FoeIv8f/bu5u/ztzRE+Nvl+o5add6MxnjsXz3s7BnW2FX6JNjyp0Z+OXjupQc2gcfFvpd/dA2lCNuuaCHkRgyPwIZtWPmNqMRXPp37mlPwV43qDJRVPQkvh0xPxwS35BbzUxWdT+ZLZv +! +ip radius source-interface Management0 +! +ip routing vrf MGMT +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 +! +management api http-commands + no shutdown + vrf MGMT + no shutdown +! +service routing protocols model multi-agent +! +hostname internet +! +interface Management0 + vrf MGMT + ip address 192.168.0.75/24 +! +ip routing +! \ No newline at end of file diff --git a/topologies/training-level7-part2/files/ceos/leaf1-DC1/ceos-config b/topologies/training-level7-part2/files/ceos/leaf1-DC1/ceos-config new file mode 100644 index 000000000..fdda85218 --- /dev/null +++ b/topologies/training-level7-part2/files/ceos/leaf1-DC1/ceos-config @@ -0,0 +1,2 @@ +SERIALNUMBER=leaf1-DC1 +SYSTEMMACADDR=00:1c:73:c1:c6:01 diff --git a/topologies/training-level7-part2/files/ceos/leaf1-DC1/startup-config b/topologies/training-level7-part2/files/ceos/leaf1-DC1/startup-config new file mode 100644 index 000000000..33286dc33 --- /dev/null +++ b/topologies/training-level7-part2/files/ceos/leaf1-DC1/startup-config @@ -0,0 +1,61 @@ +vrf instance MGMT +! +daemon TerminAttr + exec /usr/bin/TerminAttr -disableaaa -ingestgrpcurl=192.168.0.5:9910 -taillogs -ingestauth=key,atd-lab -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent -ingestvrf=MGMT + no shutdown +! +alias mlag-reload bash /mnt/flash/shut_intfs && sudo shutdown now -r +alias conint sh interface | i connected +alias senz show interface counter error | nz +alias shmc show int | awk '/^[A-Z]/ { intf = $1 } /, address is/ { print intf, $6 }' +alias snz show interface counter | nz +alias spd show port-channel %1 detail all +alias sqnz show interface counter queue | nz +alias srnz show interface counter rate | nz +alias intdesc + !! Usage: intdesc interface-name description + 10 config + 20 int %1 + 30 desc %2 + 40 exit +! +dns domain arista.lab +! +ntp server vrf MGMT 192.168.0.1 iburst source Management0 +! +radius-server host 192.168.0.1 vrf MGMT key 7 0207165218120E +! +aaa group server radius atds + server 192.168.0.1 vrf MGMT +! +aaa authentication login default group atds local +aaa authorization exec default group atds local +aaa authorization commands all default local +! +username Script secret sha512 $6$PNfpb9anSBQ5/aia$phaa3ar5pwkntenD9WHc6Ed5b96lbW0dc0bjtwPnFLaDiCK8D5Cjl6ewP/xdNbl4PtS6Paq.3SssN8pj05NQm. +username admin privilege 15 role network-admin secret 5 $1$5O85YVVn$HrXcfOivJEnISTMb6xrJc. +username arista privilege 15 role network-admin secret 5 $1$4VjIjfd1$XkUVulbNDESHFzcxDU.Tk1 +! +username arista ssh-key ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC+ERvV4GaPq3FzxY8T+5hMF/1T+l8wiPsVCtOrZU4Hy6NCNlAiDBdA/RUtX5/aOu5JvHyPTVHqWJ0qi9BqU3rxCNl/l2/5UZbm9RPzdZ1QCwoYwPB9/j/tYJV8lZdr6t0yGBfxgzD3oW/zF7a+ZtASaMAu7lkgoqPK2pVIGa+Y9ZCsA0Xq756XpLCw+d3pHKHvIkgWLCo9FoeIv8f/bu5u/ztzRE+Nvl+o5add6MxnjsXz3s7BnW2FX6JNjyp0Z+OXjupQc2gcfFvpd/dA2lCNuuaCHkRgyPwIZtWPmNqMRXPp37mlPwV43qDJRVPQkvh0xPxwS35BbzUxWdT+ZLZv +! +ip radius source-interface Management0 +! +ip routing vrf MGMT +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 +! +management api http-commands + no shutdown + vrf MGMT + no shutdown +! +hostname leaf1-DC1 +! +interface Management0 + vrf MGMT + ip address 192.168.0.21/24 +! +service routing protocols model multi-agent +! +ip routing +! diff --git a/topologies/training-level7-part2/files/ceos/leaf1-DC2/ceos-config b/topologies/training-level7-part2/files/ceos/leaf1-DC2/ceos-config new file mode 100644 index 000000000..77de88785 --- /dev/null +++ b/topologies/training-level7-part2/files/ceos/leaf1-DC2/ceos-config @@ -0,0 +1,2 @@ +SERIALNUMBER=leaf1-DC2 +SYSTEMMACADDR=00:1c:73:d1:c6:01 diff --git a/topologies/training-level7-part2/files/ceos/leaf1-DC2/startup-config b/topologies/training-level7-part2/files/ceos/leaf1-DC2/startup-config new file mode 100644 index 000000000..04f01412f --- /dev/null +++ b/topologies/training-level7-part2/files/ceos/leaf1-DC2/startup-config @@ -0,0 +1,60 @@ +vrf instance MGMT +! +daemon TerminAttr + exec /usr/bin/TerminAttr -disableaaa -ingestgrpcurl=192.168.0.5:9910 -taillogs -ingestauth=key,atd-lab -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent -ingestvrf=MGMT + no shutdown +! +alias mlag-reload bash /mnt/flash/shut_intfs && sudo shutdown now -r +alias conint sh interface | i connected +alias senz show interface counter error | nz +alias shmc show int | awk '/^[A-Z]/ { intf = $1 } /, address is/ { print intf, $6 }' +alias snz show interface counter | nz +alias spd show port-channel %1 detail all +alias sqnz show interface counter queue | nz +alias srnz show interface counter rate | nz +alias intdesc + !! Usage: intdesc interface-name description + 10 config + 20 int %1 + 30 desc %2 + 40 exit +! +dns domain arista.lab +! +ntp server vrf MGMT 192.168.0.1 iburst source Management0 +! +radius-server host 192.168.0.1 vrf MGMT key 7 0207165218120E +! +aaa group server radius atds + server 192.168.0.1 vrf MGMT +! +aaa authentication login default group atds local +aaa authorization exec default group atds local +aaa authorization commands all default local +! +username Script secret sha512 $6$PNfpb9anSBQ5/aia$phaa3ar5pwkntenD9WHc6Ed5b96lbW0dc0bjtwPnFLaDiCK8D5Cjl6ewP/xdNbl4PtS6Paq.3SssN8pj05NQm. +username admin privilege 15 role network-admin secret 5 $1$5O85YVVn$HrXcfOivJEnISTMb6xrJc. +username arista privilege 15 role network-admin secret 5 $1$4VjIjfd1$XkUVulbNDESHFzcxDU.Tk1 +! +username arista ssh-key ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC+ERvV4GaPq3FzxY8T+5hMF/1T+l8wiPsVCtOrZU4Hy6NCNlAiDBdA/RUtX5/aOu5JvHyPTVHqWJ0qi9BqU3rxCNl/l2/5UZbm9RPzdZ1QCwoYwPB9/j/tYJV8lZdr6t0yGBfxgzD3oW/zF7a+ZtASaMAu7lkgoqPK2pVIGa+Y9ZCsA0Xq756XpLCw+d3pHKHvIkgWLCo9FoeIv8f/bu5u/ztzRE+Nvl+o5add6MxnjsXz3s7BnW2FX6JNjyp0Z+OXjupQc2gcfFvpd/dA2lCNuuaCHkRgyPwIZtWPmNqMRXPp37mlPwV43qDJRVPQkvh0xPxwS35BbzUxWdT+ZLZv +! +ip radius source-interface Management0 +! +ip routing vrf MGMT +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 +! +management api http-commands + no shutdown + vrf MGMT + no shutdown +! +hostname leaf1-DC2 +! +interface Management0 + vrf MGMT + ip address 192.168.0.31/24 +! +service routing protocols model multi-agent +! +ip routing diff --git a/topologies/training-level7-part2/files/ceos/leaf1-DC3/ceos-config b/topologies/training-level7-part2/files/ceos/leaf1-DC3/ceos-config new file mode 100644 index 000000000..85451dd71 --- /dev/null +++ b/topologies/training-level7-part2/files/ceos/leaf1-DC3/ceos-config @@ -0,0 +1,2 @@ +SERIALNUMBER=leaf1-DC3 +SYSTEMMACADDR=00:1c:73:20:c6:01 diff --git a/topologies/training-level7-part2/files/ceos/leaf1-DC3/startup-config b/topologies/training-level7-part2/files/ceos/leaf1-DC3/startup-config new file mode 100644 index 000000000..5f006aa90 --- /dev/null +++ b/topologies/training-level7-part2/files/ceos/leaf1-DC3/startup-config @@ -0,0 +1,61 @@ +vrf instance MGMT +! +daemon TerminAttr + exec /usr/bin/TerminAttr -disableaaa -ingestgrpcurl=192.168.0.5:9910 -taillogs -ingestauth=key,atd-lab -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent -ingestvrf=MGMT + no shutdown +! +alias mlag-reload bash /mnt/flash/shut_intfs && sudo shutdown now -r +alias conint sh interface | i connected +alias senz show interface counter error | nz +alias shmc show int | awk '/^[A-Z]/ { intf = $1 } /, address is/ { print intf, $6 }' +alias snz show interface counter | nz +alias spd show port-channel %1 detail all +alias sqnz show interface counter queue | nz +alias srnz show interface counter rate | nz +alias intdesc + !! Usage: intdesc interface-name description + 10 config + 20 int %1 + 30 desc %2 + 40 exit +! +dns domain arista.lab +! +ntp server vrf MGMT 192.168.0.1 iburst source Management0 +! +radius-server host 192.168.0.1 vrf MGMT key 7 0207165218120E +! +aaa group server radius atds + server 192.168.0.1 vrf MGMT +! +aaa authentication login default group atds local +aaa authorization exec default group atds local +aaa authorization commands all default local +! +username Script secret sha512 $6$PNfpb9anSBQ5/aia$phaa3ar5pwkntenD9WHc6Ed5b96lbW0dc0bjtwPnFLaDiCK8D5Cjl6ewP/xdNbl4PtS6Paq.3SssN8pj05NQm. +username admin privilege 15 role network-admin secret 5 $1$5O85YVVn$HrXcfOivJEnISTMb6xrJc. +username arista privilege 15 role network-admin secret 5 $1$4VjIjfd1$XkUVulbNDESHFzcxDU.Tk1 +! +username arista ssh-key ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC+ERvV4GaPq3FzxY8T+5hMF/1T+l8wiPsVCtOrZU4Hy6NCNlAiDBdA/RUtX5/aOu5JvHyPTVHqWJ0qi9BqU3rxCNl/l2/5UZbm9RPzdZ1QCwoYwPB9/j/tYJV8lZdr6t0yGBfxgzD3oW/zF7a+ZtASaMAu7lkgoqPK2pVIGa+Y9ZCsA0Xq756XpLCw+d3pHKHvIkgWLCo9FoeIv8f/bu5u/ztzRE+Nvl+o5add6MxnjsXz3s7BnW2FX6JNjyp0Z+OXjupQc2gcfFvpd/dA2lCNuuaCHkRgyPwIZtWPmNqMRXPp37mlPwV43qDJRVPQkvh0xPxwS35BbzUxWdT+ZLZv +! +ip radius source-interface Management0 +! +ip routing vrf MGMT +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 +! +management api http-commands + no shutdown + vrf MGMT + no shutdown +! +hostname leaf1-DC3 +! +interface Management0 + vrf MGMT + ip address 192.168.0.80/24 +! +service routing protocols model multi-agent +! +ip routing +! \ No newline at end of file diff --git a/topologies/training-level7-part2/files/ceos/leaf2-DC1/ceos-config b/topologies/training-level7-part2/files/ceos/leaf2-DC1/ceos-config new file mode 100644 index 000000000..0e53a9721 --- /dev/null +++ b/topologies/training-level7-part2/files/ceos/leaf2-DC1/ceos-config @@ -0,0 +1,2 @@ +SERIALNUMBER=leaf2-DC1 +SYSTEMMACADDR=00:1c:73:c2:c6:01 diff --git a/topologies/training-level7-part2/files/ceos/leaf2-DC1/startup-config b/topologies/training-level7-part2/files/ceos/leaf2-DC1/startup-config new file mode 100644 index 000000000..b06471fae --- /dev/null +++ b/topologies/training-level7-part2/files/ceos/leaf2-DC1/startup-config @@ -0,0 +1,61 @@ +vrf instance MGMT +! +daemon TerminAttr + exec /usr/bin/TerminAttr -disableaaa -ingestgrpcurl=192.168.0.5:9910 -taillogs -ingestauth=key,atd-lab -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent -ingestvrf=MGMT + no shutdown +! +alias mlag-reload bash /mnt/flash/shut_intfs && sudo shutdown now -r +alias conint sh interface | i connected +alias senz show interface counter error | nz +alias shmc show int | awk '/^[A-Z]/ { intf = $1 } /, address is/ { print intf, $6 }' +alias snz show interface counter | nz +alias spd show port-channel %1 detail all +alias sqnz show interface counter queue | nz +alias srnz show interface counter rate | nz +alias intdesc + !! Usage: intdesc interface-name description + 10 config + 20 int %1 + 30 desc %2 + 40 exit +! +dns domain arista.lab +! +ntp server vrf MGMT 192.168.0.1 iburst source Management0 +! +radius-server host 192.168.0.1 vrf MGMT key 7 0207165218120E +! +aaa group server radius atds + server 192.168.0.1 vrf MGMT +! +aaa authentication login default group atds local +aaa authorization exec default group atds local +aaa authorization commands all default local +! +username Script secret sha512 $6$PNfpb9anSBQ5/aia$phaa3ar5pwkntenD9WHc6Ed5b96lbW0dc0bjtwPnFLaDiCK8D5Cjl6ewP/xdNbl4PtS6Paq.3SssN8pj05NQm. +username admin privilege 15 role network-admin secret 5 $1$5O85YVVn$HrXcfOivJEnISTMb6xrJc. +username arista privilege 15 role network-admin secret 5 $1$4VjIjfd1$XkUVulbNDESHFzcxDU.Tk1 +! +username arista ssh-key ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC+ERvV4GaPq3FzxY8T+5hMF/1T+l8wiPsVCtOrZU4Hy6NCNlAiDBdA/RUtX5/aOu5JvHyPTVHqWJ0qi9BqU3rxCNl/l2/5UZbm9RPzdZ1QCwoYwPB9/j/tYJV8lZdr6t0yGBfxgzD3oW/zF7a+ZtASaMAu7lkgoqPK2pVIGa+Y9ZCsA0Xq756XpLCw+d3pHKHvIkgWLCo9FoeIv8f/bu5u/ztzRE+Nvl+o5add6MxnjsXz3s7BnW2FX6JNjyp0Z+OXjupQc2gcfFvpd/dA2lCNuuaCHkRgyPwIZtWPmNqMRXPp37mlPwV43qDJRVPQkvh0xPxwS35BbzUxWdT+ZLZv +! +ip radius source-interface Management0 +! +ip routing vrf MGMT +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 +! +management api http-commands + no shutdown + vrf MGMT + no shutdown +! +hostname leaf2-DC1 +! +interface Management0 + vrf MGMT + ip address 192.168.0.22/24 +! +service routing protocols model multi-agent +! +ip routing +! diff --git a/topologies/training-level7-part2/files/ceos/leaf2-DC2/ceos-config b/topologies/training-level7-part2/files/ceos/leaf2-DC2/ceos-config new file mode 100644 index 000000000..ed05147ad --- /dev/null +++ b/topologies/training-level7-part2/files/ceos/leaf2-DC2/ceos-config @@ -0,0 +1,2 @@ +SERIALNUMBER=leaf2-DC2 +SYSTEMMACADDR=00:1c:73:d2:c6:01 diff --git a/topologies/training-level7-part2/files/ceos/leaf2-DC2/startup-config b/topologies/training-level7-part2/files/ceos/leaf2-DC2/startup-config new file mode 100644 index 000000000..82e6c9c83 --- /dev/null +++ b/topologies/training-level7-part2/files/ceos/leaf2-DC2/startup-config @@ -0,0 +1,60 @@ +vrf instance MGMT +! +daemon TerminAttr + exec /usr/bin/TerminAttr -disableaaa -ingestgrpcurl=192.168.0.5:9910 -taillogs -ingestauth=key,atd-lab -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent -ingestvrf=MGMT + no shutdown +! +alias mlag-reload bash /mnt/flash/shut_intfs && sudo shutdown now -r +alias conint sh interface | i connected +alias senz show interface counter error | nz +alias shmc show int | awk '/^[A-Z]/ { intf = $1 } /, address is/ { print intf, $6 }' +alias snz show interface counter | nz +alias spd show port-channel %1 detail all +alias sqnz show interface counter queue | nz +alias srnz show interface counter rate | nz +alias intdesc + !! Usage: intdesc interface-name description + 10 config + 20 int %1 + 30 desc %2 + 40 exit +! +dns domain arista.lab +! +ntp server vrf MGMT 192.168.0.1 iburst source Management0 +! +radius-server host 192.168.0.1 vrf MGMT key 7 0207165218120E +! +aaa group server radius atds + server 192.168.0.1 vrf MGMT +! +aaa authentication login default group atds local +aaa authorization exec default group atds local +aaa authorization commands all default local +! +username Script secret sha512 $6$PNfpb9anSBQ5/aia$phaa3ar5pwkntenD9WHc6Ed5b96lbW0dc0bjtwPnFLaDiCK8D5Cjl6ewP/xdNbl4PtS6Paq.3SssN8pj05NQm. +username admin privilege 15 role network-admin secret 5 $1$5O85YVVn$HrXcfOivJEnISTMb6xrJc. +username arista privilege 15 role network-admin secret 5 $1$4VjIjfd1$XkUVulbNDESHFzcxDU.Tk1 +! +username arista ssh-key ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC+ERvV4GaPq3FzxY8T+5hMF/1T+l8wiPsVCtOrZU4Hy6NCNlAiDBdA/RUtX5/aOu5JvHyPTVHqWJ0qi9BqU3rxCNl/l2/5UZbm9RPzdZ1QCwoYwPB9/j/tYJV8lZdr6t0yGBfxgzD3oW/zF7a+ZtASaMAu7lkgoqPK2pVIGa+Y9ZCsA0Xq756XpLCw+d3pHKHvIkgWLCo9FoeIv8f/bu5u/ztzRE+Nvl+o5add6MxnjsXz3s7BnW2FX6JNjyp0Z+OXjupQc2gcfFvpd/dA2lCNuuaCHkRgyPwIZtWPmNqMRXPp37mlPwV43qDJRVPQkvh0xPxwS35BbzUxWdT+ZLZv +! +ip radius source-interface Management0 +! +ip routing vrf MGMT +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 +! +management api http-commands + no shutdown + vrf MGMT + no shutdown +! +hostname leaf2-DC2 +! +interface Management0 + vrf MGMT + ip address 192.168.0.32/24 +! +service routing protocols model multi-agent +! +ip routing diff --git a/topologies/training-level7-part2/files/ceos/leaf2-DC3/ceos-config b/topologies/training-level7-part2/files/ceos/leaf2-DC3/ceos-config new file mode 100644 index 000000000..e53fcfcdf --- /dev/null +++ b/topologies/training-level7-part2/files/ceos/leaf2-DC3/ceos-config @@ -0,0 +1,2 @@ +SERIALNUMBER=leaf2-DC3 +SYSTEMMACADDR=00:1c:73:21:c6:01 diff --git a/topologies/training-level7-part2/files/ceos/leaf2-DC3/startup-config b/topologies/training-level7-part2/files/ceos/leaf2-DC3/startup-config new file mode 100644 index 000000000..d7a0b3a91 --- /dev/null +++ b/topologies/training-level7-part2/files/ceos/leaf2-DC3/startup-config @@ -0,0 +1,61 @@ +vrf instance MGMT +! +daemon TerminAttr + exec /usr/bin/TerminAttr -disableaaa -ingestgrpcurl=192.168.0.5:9910 -taillogs -ingestauth=key,atd-lab -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent -ingestvrf=MGMT + no shutdown +! +alias mlag-reload bash /mnt/flash/shut_intfs && sudo shutdown now -r +alias conint sh interface | i connected +alias senz show interface counter error | nz +alias shmc show int | awk '/^[A-Z]/ { intf = $1 } /, address is/ { print intf, $6 }' +alias snz show interface counter | nz +alias spd show port-channel %1 detail all +alias sqnz show interface counter queue | nz +alias srnz show interface counter rate | nz +alias intdesc + !! Usage: intdesc interface-name description + 10 config + 20 int %1 + 30 desc %2 + 40 exit +! +dns domain arista.lab +! +ntp server vrf MGMT 192.168.0.1 iburst source Management0 +! +radius-server host 192.168.0.1 vrf MGMT key 7 0207165218120E +! +aaa group server radius atds + server 192.168.0.1 vrf MGMT +! +aaa authentication login default group atds local +aaa authorization exec default group atds local +aaa authorization commands all default local +! +username Script secret sha512 $6$PNfpb9anSBQ5/aia$phaa3ar5pwkntenD9WHc6Ed5b96lbW0dc0bjtwPnFLaDiCK8D5Cjl6ewP/xdNbl4PtS6Paq.3SssN8pj05NQm. +username admin privilege 15 role network-admin secret 5 $1$5O85YVVn$HrXcfOivJEnISTMb6xrJc. +username arista privilege 15 role network-admin secret 5 $1$4VjIjfd1$XkUVulbNDESHFzcxDU.Tk1 +! +username arista ssh-key ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC+ERvV4GaPq3FzxY8T+5hMF/1T+l8wiPsVCtOrZU4Hy6NCNlAiDBdA/RUtX5/aOu5JvHyPTVHqWJ0qi9BqU3rxCNl/l2/5UZbm9RPzdZ1QCwoYwPB9/j/tYJV8lZdr6t0yGBfxgzD3oW/zF7a+ZtASaMAu7lkgoqPK2pVIGa+Y9ZCsA0Xq756XpLCw+d3pHKHvIkgWLCo9FoeIv8f/bu5u/ztzRE+Nvl+o5add6MxnjsXz3s7BnW2FX6JNjyp0Z+OXjupQc2gcfFvpd/dA2lCNuuaCHkRgyPwIZtWPmNqMRXPp37mlPwV43qDJRVPQkvh0xPxwS35BbzUxWdT+ZLZv +! +ip radius source-interface Management0 +! +ip routing vrf MGMT +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 +! +management api http-commands + no shutdown + vrf MGMT + no shutdown +! +hostname leaf2-DC3 +! +interface Management0 + vrf MGMT + ip address 192.168.0.81/24 +! +service routing protocols model multi-agent +! +ip routing +! \ No newline at end of file diff --git a/topologies/training-level7-part2/files/ceos/leaf3-DC1/ceos-config b/topologies/training-level7-part2/files/ceos/leaf3-DC1/ceos-config new file mode 100644 index 000000000..5c7abf034 --- /dev/null +++ b/topologies/training-level7-part2/files/ceos/leaf3-DC1/ceos-config @@ -0,0 +1,2 @@ +SERIALNUMBER=leaf3-DC1 +SYSTEMMACADDR=00:1c:73:c3:c6:01 diff --git a/topologies/training-level7-part2/files/ceos/leaf3-DC1/startup-config b/topologies/training-level7-part2/files/ceos/leaf3-DC1/startup-config new file mode 100644 index 000000000..23534faa0 --- /dev/null +++ b/topologies/training-level7-part2/files/ceos/leaf3-DC1/startup-config @@ -0,0 +1,61 @@ +vrf instance MGMT +! +daemon TerminAttr + exec /usr/bin/TerminAttr -disableaaa -ingestgrpcurl=192.168.0.5:9910 -taillogs -ingestauth=key,atd-lab -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent -ingestvrf=MGMT + no shutdown +! +alias mlag-reload bash /mnt/flash/shut_intfs && sudo shutdown now -r +alias conint sh interface | i connected +alias senz show interface counter error | nz +alias shmc show int | awk '/^[A-Z]/ { intf = $1 } /, address is/ { print intf, $6 }' +alias snz show interface counter | nz +alias spd show port-channel %1 detail all +alias sqnz show interface counter queue | nz +alias srnz show interface counter rate | nz +alias intdesc + !! Usage: intdesc interface-name description + 10 config + 20 int %1 + 30 desc %2 + 40 exit +! +dns domain arista.lab +! +ntp server vrf MGMT 192.168.0.1 iburst source Management0 +! +radius-server host 192.168.0.1 vrf MGMT key 7 0207165218120E +! +aaa group server radius atds + server 192.168.0.1 vrf MGMT +! +aaa authentication login default group atds local +aaa authorization exec default group atds local +aaa authorization commands all default local +! +username Script secret sha512 $6$PNfpb9anSBQ5/aia$phaa3ar5pwkntenD9WHc6Ed5b96lbW0dc0bjtwPnFLaDiCK8D5Cjl6ewP/xdNbl4PtS6Paq.3SssN8pj05NQm. +username admin privilege 15 role network-admin secret 5 $1$5O85YVVn$HrXcfOivJEnISTMb6xrJc. +username arista privilege 15 role network-admin secret 5 $1$4VjIjfd1$XkUVulbNDESHFzcxDU.Tk1 +! +username arista ssh-key ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC+ERvV4GaPq3FzxY8T+5hMF/1T+l8wiPsVCtOrZU4Hy6NCNlAiDBdA/RUtX5/aOu5JvHyPTVHqWJ0qi9BqU3rxCNl/l2/5UZbm9RPzdZ1QCwoYwPB9/j/tYJV8lZdr6t0yGBfxgzD3oW/zF7a+ZtASaMAu7lkgoqPK2pVIGa+Y9ZCsA0Xq756XpLCw+d3pHKHvIkgWLCo9FoeIv8f/bu5u/ztzRE+Nvl+o5add6MxnjsXz3s7BnW2FX6JNjyp0Z+OXjupQc2gcfFvpd/dA2lCNuuaCHkRgyPwIZtWPmNqMRXPp37mlPwV43qDJRVPQkvh0xPxwS35BbzUxWdT+ZLZv +! +ip radius source-interface Management0 +! +ip routing vrf MGMT +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 +! +management api http-commands + no shutdown + vrf MGMT + no shutdown +! +hostname leaf3-DC1 +! +interface Management0 + vrf MGMT + ip address 192.168.0.23/24 +! +service routing protocols model multi-agent +! +ip routing +! diff --git a/topologies/training-level7-part2/files/ceos/leaf3-DC2/ceos-config b/topologies/training-level7-part2/files/ceos/leaf3-DC2/ceos-config new file mode 100644 index 000000000..ce9360f0b --- /dev/null +++ b/topologies/training-level7-part2/files/ceos/leaf3-DC2/ceos-config @@ -0,0 +1,2 @@ +SERIALNUMBER=leaf3-DC2 +SYSTEMMACADDR=00:1c:73:d3:c6:01 diff --git a/topologies/training-level7-part2/files/ceos/leaf3-DC2/startup-config b/topologies/training-level7-part2/files/ceos/leaf3-DC2/startup-config new file mode 100644 index 000000000..463c68523 --- /dev/null +++ b/topologies/training-level7-part2/files/ceos/leaf3-DC2/startup-config @@ -0,0 +1,60 @@ +vrf instance MGMT +! +daemon TerminAttr + exec /usr/bin/TerminAttr -disableaaa -ingestgrpcurl=192.168.0.5:9910 -taillogs -ingestauth=key,atd-lab -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent -ingestvrf=MGMT + no shutdown +! +alias mlag-reload bash /mnt/flash/shut_intfs && sudo shutdown now -r +alias conint sh interface | i connected +alias senz show interface counter error | nz +alias shmc show int | awk '/^[A-Z]/ { intf = $1 } /, address is/ { print intf, $6 }' +alias snz show interface counter | nz +alias spd show port-channel %1 detail all +alias sqnz show interface counter queue | nz +alias srnz show interface counter rate | nz +alias intdesc + !! Usage: intdesc interface-name description + 10 config + 20 int %1 + 30 desc %2 + 40 exit +! +dns domain arista.lab +! +ntp server vrf MGMT 192.168.0.1 iburst source Management0 +! +radius-server host 192.168.0.1 vrf MGMT key 7 0207165218120E +! +aaa group server radius atds + server 192.168.0.1 vrf MGMT +! +aaa authentication login default group atds local +aaa authorization exec default group atds local +aaa authorization commands all default local +! +username Script secret sha512 $6$PNfpb9anSBQ5/aia$phaa3ar5pwkntenD9WHc6Ed5b96lbW0dc0bjtwPnFLaDiCK8D5Cjl6ewP/xdNbl4PtS6Paq.3SssN8pj05NQm. +username admin privilege 15 role network-admin secret 5 $1$5O85YVVn$HrXcfOivJEnISTMb6xrJc. +username arista privilege 15 role network-admin secret 5 $1$4VjIjfd1$XkUVulbNDESHFzcxDU.Tk1 +! +username arista ssh-key ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC+ERvV4GaPq3FzxY8T+5hMF/1T+l8wiPsVCtOrZU4Hy6NCNlAiDBdA/RUtX5/aOu5JvHyPTVHqWJ0qi9BqU3rxCNl/l2/5UZbm9RPzdZ1QCwoYwPB9/j/tYJV8lZdr6t0yGBfxgzD3oW/zF7a+ZtASaMAu7lkgoqPK2pVIGa+Y9ZCsA0Xq756XpLCw+d3pHKHvIkgWLCo9FoeIv8f/bu5u/ztzRE+Nvl+o5add6MxnjsXz3s7BnW2FX6JNjyp0Z+OXjupQc2gcfFvpd/dA2lCNuuaCHkRgyPwIZtWPmNqMRXPp37mlPwV43qDJRVPQkvh0xPxwS35BbzUxWdT+ZLZv +! +ip radius source-interface Management0 +! +ip routing vrf MGMT +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 +! +management api http-commands + no shutdown + vrf MGMT + no shutdown +! +hostname leaf3-DC2 +! +interface Management0 + vrf MGMT + ip address 192.168.0.33/24 +! +service routing protocols model multi-agent +! +ip routing diff --git a/topologies/training-level7-part2/files/ceos/leaf4-DC1/ceos-config b/topologies/training-level7-part2/files/ceos/leaf4-DC1/ceos-config new file mode 100644 index 000000000..a0c1fbd9c --- /dev/null +++ b/topologies/training-level7-part2/files/ceos/leaf4-DC1/ceos-config @@ -0,0 +1,2 @@ +SERIALNUMBER=leaf4-DC1 +SYSTEMMACADDR=00:1c:73:c4:c6:01 diff --git a/topologies/training-level7-part2/files/ceos/leaf4-DC1/startup-config b/topologies/training-level7-part2/files/ceos/leaf4-DC1/startup-config new file mode 100644 index 000000000..cb67868fb --- /dev/null +++ b/topologies/training-level7-part2/files/ceos/leaf4-DC1/startup-config @@ -0,0 +1,61 @@ +vrf instance MGMT +! +daemon TerminAttr + exec /usr/bin/TerminAttr -disableaaa -ingestgrpcurl=192.168.0.5:9910 -taillogs -ingestauth=key,atd-lab -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent -ingestvrf=MGMT + no shutdown +! +alias mlag-reload bash /mnt/flash/shut_intfs && sudo shutdown now -r +alias conint sh interface | i connected +alias senz show interface counter error | nz +alias shmc show int | awk '/^[A-Z]/ { intf = $1 } /, address is/ { print intf, $6 }' +alias snz show interface counter | nz +alias spd show port-channel %1 detail all +alias sqnz show interface counter queue | nz +alias srnz show interface counter rate | nz +alias intdesc + !! Usage: intdesc interface-name description + 10 config + 20 int %1 + 30 desc %2 + 40 exit +! +dns domain arista.lab +! +ntp server vrf MGMT 192.168.0.1 iburst source Management0 +! +radius-server host 192.168.0.1 vrf MGMT key 7 0207165218120E +! +aaa group server radius atds + server 192.168.0.1 vrf MGMT +! +aaa authentication login default group atds local +aaa authorization exec default group atds local +aaa authorization commands all default local +! +username Script secret sha512 $6$PNfpb9anSBQ5/aia$phaa3ar5pwkntenD9WHc6Ed5b96lbW0dc0bjtwPnFLaDiCK8D5Cjl6ewP/xdNbl4PtS6Paq.3SssN8pj05NQm. +username admin privilege 15 role network-admin secret 5 $1$5O85YVVn$HrXcfOivJEnISTMb6xrJc. +username arista privilege 15 role network-admin secret 5 $1$4VjIjfd1$XkUVulbNDESHFzcxDU.Tk1 +! +username arista ssh-key ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC+ERvV4GaPq3FzxY8T+5hMF/1T+l8wiPsVCtOrZU4Hy6NCNlAiDBdA/RUtX5/aOu5JvHyPTVHqWJ0qi9BqU3rxCNl/l2/5UZbm9RPzdZ1QCwoYwPB9/j/tYJV8lZdr6t0yGBfxgzD3oW/zF7a+ZtASaMAu7lkgoqPK2pVIGa+Y9ZCsA0Xq756XpLCw+d3pHKHvIkgWLCo9FoeIv8f/bu5u/ztzRE+Nvl+o5add6MxnjsXz3s7BnW2FX6JNjyp0Z+OXjupQc2gcfFvpd/dA2lCNuuaCHkRgyPwIZtWPmNqMRXPp37mlPwV43qDJRVPQkvh0xPxwS35BbzUxWdT+ZLZv +! +ip radius source-interface Management0 +! +ip routing vrf MGMT +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 +! +management api http-commands + no shutdown + vrf MGMT + no shutdown +! +hostname leaf4-DC1 +! +interface Management0 + vrf MGMT + ip address 192.168.0.24/24 +! +service routing protocols model multi-agent +! +ip routing +! diff --git a/topologies/training-level7-part2/files/ceos/leaf4-DC2/ceos-config b/topologies/training-level7-part2/files/ceos/leaf4-DC2/ceos-config new file mode 100644 index 000000000..47d05306c --- /dev/null +++ b/topologies/training-level7-part2/files/ceos/leaf4-DC2/ceos-config @@ -0,0 +1,2 @@ +SERIALNUMBER=leaf4-DC2 +SYSTEMMACADDR=00:1c:73:d4:c6:01 diff --git a/topologies/training-level7-part2/files/ceos/leaf4-DC2/startup-config b/topologies/training-level7-part2/files/ceos/leaf4-DC2/startup-config new file mode 100644 index 000000000..36332b266 --- /dev/null +++ b/topologies/training-level7-part2/files/ceos/leaf4-DC2/startup-config @@ -0,0 +1,60 @@ +vrf instance MGMT +! +daemon TerminAttr + exec /usr/bin/TerminAttr -disableaaa -ingestgrpcurl=192.168.0.5:9910 -taillogs -ingestauth=key,atd-lab -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent -ingestvrf=MGMT + no shutdown +! +alias mlag-reload bash /mnt/flash/shut_intfs && sudo shutdown now -r +alias conint sh interface | i connected +alias senz show interface counter error | nz +alias shmc show int | awk '/^[A-Z]/ { intf = $1 } /, address is/ { print intf, $6 }' +alias snz show interface counter | nz +alias spd show port-channel %1 detail all +alias sqnz show interface counter queue | nz +alias srnz show interface counter rate | nz +alias intdesc + !! Usage: intdesc interface-name description + 10 config + 20 int %1 + 30 desc %2 + 40 exit +! +dns domain arista.lab +! +ntp server vrf MGMT 192.168.0.1 iburst source Management0 +! +radius-server host 192.168.0.1 vrf MGMT key 7 0207165218120E +! +aaa group server radius atds + server 192.168.0.1 vrf MGMT +! +aaa authentication login default group atds local +aaa authorization exec default group atds local +aaa authorization commands all default local +! +username Script secret sha512 $6$PNfpb9anSBQ5/aia$phaa3ar5pwkntenD9WHc6Ed5b96lbW0dc0bjtwPnFLaDiCK8D5Cjl6ewP/xdNbl4PtS6Paq.3SssN8pj05NQm. +username admin privilege 15 role network-admin secret 5 $1$5O85YVVn$HrXcfOivJEnISTMb6xrJc. +username arista privilege 15 role network-admin secret 5 $1$4VjIjfd1$XkUVulbNDESHFzcxDU.Tk1 +! +username arista ssh-key ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC+ERvV4GaPq3FzxY8T+5hMF/1T+l8wiPsVCtOrZU4Hy6NCNlAiDBdA/RUtX5/aOu5JvHyPTVHqWJ0qi9BqU3rxCNl/l2/5UZbm9RPzdZ1QCwoYwPB9/j/tYJV8lZdr6t0yGBfxgzD3oW/zF7a+ZtASaMAu7lkgoqPK2pVIGa+Y9ZCsA0Xq756XpLCw+d3pHKHvIkgWLCo9FoeIv8f/bu5u/ztzRE+Nvl+o5add6MxnjsXz3s7BnW2FX6JNjyp0Z+OXjupQc2gcfFvpd/dA2lCNuuaCHkRgyPwIZtWPmNqMRXPp37mlPwV43qDJRVPQkvh0xPxwS35BbzUxWdT+ZLZv +! +ip radius source-interface Management0 +! +ip routing vrf MGMT +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 +! +management api http-commands + no shutdown + vrf MGMT + no shutdown +! +hostname leaf4-DC2 +! +interface Management0 + vrf MGMT + ip address 192.168.0.34/24 +! +service routing protocols model multi-agent +! +ip routing diff --git a/topologies/training-level7-part2/files/ceos/spine1-DC1/ceos-config b/topologies/training-level7-part2/files/ceos/spine1-DC1/ceos-config new file mode 100644 index 000000000..9b7d61422 --- /dev/null +++ b/topologies/training-level7-part2/files/ceos/spine1-DC1/ceos-config @@ -0,0 +1,2 @@ +SERIALNUMBER=spine1-DC1 +SYSTEMMACADDR=00:1c:73:b1:c6:01 diff --git a/topologies/training-level7-part2/files/ceos/spine1-DC1/startup-config b/topologies/training-level7-part2/files/ceos/spine1-DC1/startup-config new file mode 100644 index 000000000..6fac483c4 --- /dev/null +++ b/topologies/training-level7-part2/files/ceos/spine1-DC1/startup-config @@ -0,0 +1,61 @@ +vrf instance MGMT +! +daemon TerminAttr + exec /usr/bin/TerminAttr -disableaaa -ingestgrpcurl=192.168.0.5:9910 -taillogs -ingestauth=key,atd-lab -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent -ingestvrf=MGMT + no shutdown +! +alias mlag-reload bash /mnt/flash/shut_intfs && sudo shutdown now -r +alias conint sh interface | i connected +alias senz show interface counter error | nz +alias shmc show int | awk '/^[A-Z]/ { intf = $1 } /, address is/ { print intf, $6 }' +alias snz show interface counter | nz +alias spd show port-channel %1 detail all +alias sqnz show interface counter queue | nz +alias srnz show interface counter rate | nz +alias intdesc + !! Usage: intdesc interface-name description + 10 config + 20 int %1 + 30 desc %2 + 40 exit +! +dns domain arista.lab +! +ntp server vrf MGMT 192.168.0.1 iburst source Management0 +! +radius-server host 192.168.0.1 vrf MGMT key 7 0207165218120E +! +aaa group server radius atds + server 192.168.0.1 vrf MGMT +! +aaa authentication login default group atds local +aaa authorization exec default group atds local +aaa authorization commands all default local +! +username Script secret sha512 $6$PNfpb9anSBQ5/aia$phaa3ar5pwkntenD9WHc6Ed5b96lbW0dc0bjtwPnFLaDiCK8D5Cjl6ewP/xdNbl4PtS6Paq.3SssN8pj05NQm. +username admin privilege 15 role network-admin secret 5 $1$5O85YVVn$HrXcfOivJEnISTMb6xrJc. +username arista privilege 15 role network-admin secret 5 $1$4VjIjfd1$XkUVulbNDESHFzcxDU.Tk1 +! +username arista ssh-key ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC+ERvV4GaPq3FzxY8T+5hMF/1T+l8wiPsVCtOrZU4Hy6NCNlAiDBdA/RUtX5/aOu5JvHyPTVHqWJ0qi9BqU3rxCNl/l2/5UZbm9RPzdZ1QCwoYwPB9/j/tYJV8lZdr6t0yGBfxgzD3oW/zF7a+ZtASaMAu7lkgoqPK2pVIGa+Y9ZCsA0Xq756XpLCw+d3pHKHvIkgWLCo9FoeIv8f/bu5u/ztzRE+Nvl+o5add6MxnjsXz3s7BnW2FX6JNjyp0Z+OXjupQc2gcfFvpd/dA2lCNuuaCHkRgyPwIZtWPmNqMRXPp37mlPwV43qDJRVPQkvh0xPxwS35BbzUxWdT+ZLZv +! +ip radius source-interface Management0 +! +ip routing vrf MGMT +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 +! +management api http-commands + no shutdown + vrf MGMT + no shutdown +! +hostname spine1-DC1 +! +interface Management0 + vrf MGMT + ip address 192.168.0.11/24 +! +service routing protocols model multi-agent +! +ip routing +! diff --git a/topologies/training-level7-part2/files/ceos/spine1-DC2/ceos-config b/topologies/training-level7-part2/files/ceos/spine1-DC2/ceos-config new file mode 100644 index 000000000..431bc4267 --- /dev/null +++ b/topologies/training-level7-part2/files/ceos/spine1-DC2/ceos-config @@ -0,0 +1,2 @@ +SERIALNUMBER=spine1-DC2 +SYSTEMMACADDR=00:1c:73:b4:c6:01 diff --git a/topologies/training-level7-part2/files/ceos/spine1-DC2/startup-config b/topologies/training-level7-part2/files/ceos/spine1-DC2/startup-config new file mode 100644 index 000000000..6f25c5064 --- /dev/null +++ b/topologies/training-level7-part2/files/ceos/spine1-DC2/startup-config @@ -0,0 +1,60 @@ +vrf instance MGMT +! +daemon TerminAttr + exec /usr/bin/TerminAttr -disableaaa -ingestgrpcurl=192.168.0.5:9910 -taillogs -ingestauth=key,atd-lab -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent -ingestvrf=MGMT + no shutdown +! +alias mlag-reload bash /mnt/flash/shut_intfs && sudo shutdown now -r +alias conint sh interface | i connected +alias senz show interface counter error | nz +alias shmc show int | awk '/^[A-Z]/ { intf = $1 } /, address is/ { print intf, $6 }' +alias snz show interface counter | nz +alias spd show port-channel %1 detail all +alias sqnz show interface counter queue | nz +alias srnz show interface counter rate | nz +alias intdesc + !! Usage: intdesc interface-name description + 10 config + 20 int %1 + 30 desc %2 + 40 exit +! +dns domain arista.lab +! +ntp server vrf MGMT 192.168.0.1 iburst source Management0 +! +radius-server host 192.168.0.1 vrf MGMT key 7 0207165218120E +! +aaa group server radius atds + server 192.168.0.1 vrf MGMT +! +aaa authentication login default group atds local +aaa authorization exec default group atds local +aaa authorization commands all default local +! +username Script secret sha512 $6$PNfpb9anSBQ5/aia$phaa3ar5pwkntenD9WHc6Ed5b96lbW0dc0bjtwPnFLaDiCK8D5Cjl6ewP/xdNbl4PtS6Paq.3SssN8pj05NQm. +username admin privilege 15 role network-admin secret 5 $1$5O85YVVn$HrXcfOivJEnISTMb6xrJc. +username arista privilege 15 role network-admin secret 5 $1$4VjIjfd1$XkUVulbNDESHFzcxDU.Tk1 +! +username arista ssh-key ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC+ERvV4GaPq3FzxY8T+5hMF/1T+l8wiPsVCtOrZU4Hy6NCNlAiDBdA/RUtX5/aOu5JvHyPTVHqWJ0qi9BqU3rxCNl/l2/5UZbm9RPzdZ1QCwoYwPB9/j/tYJV8lZdr6t0yGBfxgzD3oW/zF7a+ZtASaMAu7lkgoqPK2pVIGa+Y9ZCsA0Xq756XpLCw+d3pHKHvIkgWLCo9FoeIv8f/bu5u/ztzRE+Nvl+o5add6MxnjsXz3s7BnW2FX6JNjyp0Z+OXjupQc2gcfFvpd/dA2lCNuuaCHkRgyPwIZtWPmNqMRXPp37mlPwV43qDJRVPQkvh0xPxwS35BbzUxWdT+ZLZv +! +ip radius source-interface Management0 +! +ip routing vrf MGMT +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 +! +management api http-commands + no shutdown + vrf MGMT + no shutdown +! +hostname spine1-DC2 +! +interface Management0 + vrf MGMT + ip address 192.168.0.14/24 +! +service routing protocols model multi-agent +! +ip routing \ No newline at end of file diff --git a/topologies/training-level7-part2/files/ceos/spine1-DC3/ceos-config b/topologies/training-level7-part2/files/ceos/spine1-DC3/ceos-config new file mode 100644 index 000000000..174608c63 --- /dev/null +++ b/topologies/training-level7-part2/files/ceos/spine1-DC3/ceos-config @@ -0,0 +1,2 @@ +SERIALNUMBER=spine1-DC3 +SYSTEMMACADDR=00:1c:73:17:c6:01 diff --git a/topologies/training-level7-part2/files/ceos/spine1-DC3/startup-config b/topologies/training-level7-part2/files/ceos/spine1-DC3/startup-config new file mode 100644 index 000000000..b553b8e63 --- /dev/null +++ b/topologies/training-level7-part2/files/ceos/spine1-DC3/startup-config @@ -0,0 +1,61 @@ +vrf instance MGMT +! +daemon TerminAttr + exec /usr/bin/TerminAttr -disableaaa -ingestgrpcurl=192.168.0.5:9910 -taillogs -ingestauth=key,atd-lab -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent -ingestvrf=MGMT + no shutdown +! +alias mlag-reload bash /mnt/flash/shut_intfs && sudo shutdown now -r +alias conint sh interface | i connected +alias senz show interface counter error | nz +alias shmc show int | awk '/^[A-Z]/ { intf = $1 } /, address is/ { print intf, $6 }' +alias snz show interface counter | nz +alias spd show port-channel %1 detail all +alias sqnz show interface counter queue | nz +alias srnz show interface counter rate | nz +alias intdesc + !! Usage: intdesc interface-name description + 10 config + 20 int %1 + 30 desc %2 + 40 exit +! +dns domain arista.lab +! +ntp server vrf MGMT 192.168.0.1 iburst source Management0 +! +radius-server host 192.168.0.1 vrf MGMT key 7 0207165218120E +! +aaa group server radius atds + server 192.168.0.1 vrf MGMT +! +aaa authentication login default group atds local +aaa authorization exec default group atds local +aaa authorization commands all default local +! +username Script secret sha512 $6$PNfpb9anSBQ5/aia$phaa3ar5pwkntenD9WHc6Ed5b96lbW0dc0bjtwPnFLaDiCK8D5Cjl6ewP/xdNbl4PtS6Paq.3SssN8pj05NQm. +username admin privilege 15 role network-admin secret 5 $1$5O85YVVn$HrXcfOivJEnISTMb6xrJc. +username arista privilege 15 role network-admin secret 5 $1$4VjIjfd1$XkUVulbNDESHFzcxDU.Tk1 +! +username arista ssh-key ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC+ERvV4GaPq3FzxY8T+5hMF/1T+l8wiPsVCtOrZU4Hy6NCNlAiDBdA/RUtX5/aOu5JvHyPTVHqWJ0qi9BqU3rxCNl/l2/5UZbm9RPzdZ1QCwoYwPB9/j/tYJV8lZdr6t0yGBfxgzD3oW/zF7a+ZtASaMAu7lkgoqPK2pVIGa+Y9ZCsA0Xq756XpLCw+d3pHKHvIkgWLCo9FoeIv8f/bu5u/ztzRE+Nvl+o5add6MxnjsXz3s7BnW2FX6JNjyp0Z+OXjupQc2gcfFvpd/dA2lCNuuaCHkRgyPwIZtWPmNqMRXPp37mlPwV43qDJRVPQkvh0xPxwS35BbzUxWdT+ZLZv +! +ip radius source-interface Management0 +! +ip routing vrf MGMT +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 +! +management api http-commands + no shutdown + vrf MGMT + no shutdown +! +hostname spine1-DC3 +! +interface Management0 + vrf MGMT + ip address 192.168.0.77/24 +! +service routing protocols model multi-agent +! +ip routing +! \ No newline at end of file diff --git a/topologies/training-level7-part2/files/ceos/spine2-DC1/ceos-config b/topologies/training-level7-part2/files/ceos/spine2-DC1/ceos-config new file mode 100644 index 000000000..79d76b2fd --- /dev/null +++ b/topologies/training-level7-part2/files/ceos/spine2-DC1/ceos-config @@ -0,0 +1,2 @@ +SERIALNUMBER=spine2-DC1 +SYSTEMMACADDR=00:1c:73:b2:c6:01 diff --git a/topologies/training-level7-part2/files/ceos/spine2-DC1/startup-config b/topologies/training-level7-part2/files/ceos/spine2-DC1/startup-config new file mode 100644 index 000000000..cf7e132a9 --- /dev/null +++ b/topologies/training-level7-part2/files/ceos/spine2-DC1/startup-config @@ -0,0 +1,61 @@ +vrf instance MGMT +! +daemon TerminAttr + exec /usr/bin/TerminAttr -disableaaa -ingestgrpcurl=192.168.0.5:9910 -taillogs -ingestauth=key,atd-lab -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent -ingestvrf=MGMT + no shutdown +! +alias mlag-reload bash /mnt/flash/shut_intfs && sudo shutdown now -r +alias conint sh interface | i connected +alias senz show interface counter error | nz +alias shmc show int | awk '/^[A-Z]/ { intf = $1 } /, address is/ { print intf, $6 }' +alias snz show interface counter | nz +alias spd show port-channel %1 detail all +alias sqnz show interface counter queue | nz +alias srnz show interface counter rate | nz +alias intdesc + !! Usage: intdesc interface-name description + 10 config + 20 int %1 + 30 desc %2 + 40 exit +! +dns domain arista.lab +! +ntp server vrf MGMT 192.168.0.1 iburst source Management0 +! +radius-server host 192.168.0.1 vrf MGMT key 7 0207165218120E +! +aaa group server radius atds + server 192.168.0.1 vrf MGMT +! +aaa authentication login default group atds local +aaa authorization exec default group atds local +aaa authorization commands all default local +! +username Script secret sha512 $6$PNfpb9anSBQ5/aia$phaa3ar5pwkntenD9WHc6Ed5b96lbW0dc0bjtwPnFLaDiCK8D5Cjl6ewP/xdNbl4PtS6Paq.3SssN8pj05NQm. +username admin privilege 15 role network-admin secret 5 $1$5O85YVVn$HrXcfOivJEnISTMb6xrJc. +username arista privilege 15 role network-admin secret 5 $1$4VjIjfd1$XkUVulbNDESHFzcxDU.Tk1 +! +username arista ssh-key ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC+ERvV4GaPq3FzxY8T+5hMF/1T+l8wiPsVCtOrZU4Hy6NCNlAiDBdA/RUtX5/aOu5JvHyPTVHqWJ0qi9BqU3rxCNl/l2/5UZbm9RPzdZ1QCwoYwPB9/j/tYJV8lZdr6t0yGBfxgzD3oW/zF7a+ZtASaMAu7lkgoqPK2pVIGa+Y9ZCsA0Xq756XpLCw+d3pHKHvIkgWLCo9FoeIv8f/bu5u/ztzRE+Nvl+o5add6MxnjsXz3s7BnW2FX6JNjyp0Z+OXjupQc2gcfFvpd/dA2lCNuuaCHkRgyPwIZtWPmNqMRXPp37mlPwV43qDJRVPQkvh0xPxwS35BbzUxWdT+ZLZv +! +ip radius source-interface Management0 +! +ip routing vrf MGMT +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 +! +management api http-commands + no shutdown + vrf MGMT + no shutdown +! +hostname spine2-DC1 +! +interface Management0 + vrf MGMT + ip address 192.168.0.12/24 +! +service routing protocols model multi-agent +! +ip routing +! diff --git a/topologies/training-level7-part2/files/ceos/spine2-DC2/ceos-config b/topologies/training-level7-part2/files/ceos/spine2-DC2/ceos-config new file mode 100644 index 000000000..afd5ce2a8 --- /dev/null +++ b/topologies/training-level7-part2/files/ceos/spine2-DC2/ceos-config @@ -0,0 +1,2 @@ +SERIALNUMBER=spine2-DC2 +SYSTEMMACADDR=00:1c:73:b5:c6:01 diff --git a/topologies/training-level7-part2/files/ceos/spine2-DC2/startup-config b/topologies/training-level7-part2/files/ceos/spine2-DC2/startup-config new file mode 100644 index 000000000..40c19e41f --- /dev/null +++ b/topologies/training-level7-part2/files/ceos/spine2-DC2/startup-config @@ -0,0 +1,60 @@ +vrf instance MGMT +! +daemon TerminAttr + exec /usr/bin/TerminAttr -disableaaa -ingestgrpcurl=192.168.0.5:9910 -taillogs -ingestauth=key,atd-lab -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent -ingestvrf=MGMT + no shutdown +! +alias mlag-reload bash /mnt/flash/shut_intfs && sudo shutdown now -r +alias conint sh interface | i connected +alias senz show interface counter error | nz +alias shmc show int | awk '/^[A-Z]/ { intf = $1 } /, address is/ { print intf, $6 }' +alias snz show interface counter | nz +alias spd show port-channel %1 detail all +alias sqnz show interface counter queue | nz +alias srnz show interface counter rate | nz +alias intdesc + !! Usage: intdesc interface-name description + 10 config + 20 int %1 + 30 desc %2 + 40 exit +! +dns domain arista.lab +! +ntp server vrf MGMT 192.168.0.1 iburst source Management0 +! +radius-server host 192.168.0.1 vrf MGMT key 7 0207165218120E +! +aaa group server radius atds + server 192.168.0.1 vrf MGMT +! +aaa authentication login default group atds local +aaa authorization exec default group atds local +aaa authorization commands all default local +! +username Script secret sha512 $6$PNfpb9anSBQ5/aia$phaa3ar5pwkntenD9WHc6Ed5b96lbW0dc0bjtwPnFLaDiCK8D5Cjl6ewP/xdNbl4PtS6Paq.3SssN8pj05NQm. +username admin privilege 15 role network-admin secret 5 $1$5O85YVVn$HrXcfOivJEnISTMb6xrJc. +username arista privilege 15 role network-admin secret 5 $1$4VjIjfd1$XkUVulbNDESHFzcxDU.Tk1 +! +username arista ssh-key ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC+ERvV4GaPq3FzxY8T+5hMF/1T+l8wiPsVCtOrZU4Hy6NCNlAiDBdA/RUtX5/aOu5JvHyPTVHqWJ0qi9BqU3rxCNl/l2/5UZbm9RPzdZ1QCwoYwPB9/j/tYJV8lZdr6t0yGBfxgzD3oW/zF7a+ZtASaMAu7lkgoqPK2pVIGa+Y9ZCsA0Xq756XpLCw+d3pHKHvIkgWLCo9FoeIv8f/bu5u/ztzRE+Nvl+o5add6MxnjsXz3s7BnW2FX6JNjyp0Z+OXjupQc2gcfFvpd/dA2lCNuuaCHkRgyPwIZtWPmNqMRXPp37mlPwV43qDJRVPQkvh0xPxwS35BbzUxWdT+ZLZv +! +ip radius source-interface Management0 +! +ip routing vrf MGMT +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 +! +management api http-commands + no shutdown + vrf MGMT + no shutdown +! +hostname spine2-DC2 +! +interface Management0 + vrf MGMT + ip address 192.168.0.15/24 +! +service routing protocols model multi-agent +! +ip routing diff --git a/topologies/training-level7-part2/files/ceos/spine2-DC3/ceos-config b/topologies/training-level7-part2/files/ceos/spine2-DC3/ceos-config new file mode 100644 index 000000000..4d8312c42 --- /dev/null +++ b/topologies/training-level7-part2/files/ceos/spine2-DC3/ceos-config @@ -0,0 +1,2 @@ +SERIALNUMBER=spine2-DC3 +SYSTEMMACADDR=00:1c:73:18:c6:01 diff --git a/topologies/training-level7-part2/files/ceos/spine2-DC3/startup-config b/topologies/training-level7-part2/files/ceos/spine2-DC3/startup-config new file mode 100644 index 000000000..6c0094cb4 --- /dev/null +++ b/topologies/training-level7-part2/files/ceos/spine2-DC3/startup-config @@ -0,0 +1,61 @@ +vrf instance MGMT +! +daemon TerminAttr + exec /usr/bin/TerminAttr -disableaaa -ingestgrpcurl=192.168.0.5:9910 -taillogs -ingestauth=key,atd-lab -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent -ingestvrf=MGMT + no shutdown +! +alias mlag-reload bash /mnt/flash/shut_intfs && sudo shutdown now -r +alias conint sh interface | i connected +alias senz show interface counter error | nz +alias shmc show int | awk '/^[A-Z]/ { intf = $1 } /, address is/ { print intf, $6 }' +alias snz show interface counter | nz +alias spd show port-channel %1 detail all +alias sqnz show interface counter queue | nz +alias srnz show interface counter rate | nz +alias intdesc + !! Usage: intdesc interface-name description + 10 config + 20 int %1 + 30 desc %2 + 40 exit +! +dns domain arista.lab +! +ntp server vrf MGMT 192.168.0.1 iburst source Management0 +! +radius-server host 192.168.0.1 vrf MGMT key 7 0207165218120E +! +aaa group server radius atds + server 192.168.0.1 vrf MGMT +! +aaa authentication login default group atds local +aaa authorization exec default group atds local +aaa authorization commands all default local +! +username Script secret sha512 $6$PNfpb9anSBQ5/aia$phaa3ar5pwkntenD9WHc6Ed5b96lbW0dc0bjtwPnFLaDiCK8D5Cjl6ewP/xdNbl4PtS6Paq.3SssN8pj05NQm. +username admin privilege 15 role network-admin secret 5 $1$5O85YVVn$HrXcfOivJEnISTMb6xrJc. +username arista privilege 15 role network-admin secret 5 $1$4VjIjfd1$XkUVulbNDESHFzcxDU.Tk1 +! +username arista ssh-key ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC+ERvV4GaPq3FzxY8T+5hMF/1T+l8wiPsVCtOrZU4Hy6NCNlAiDBdA/RUtX5/aOu5JvHyPTVHqWJ0qi9BqU3rxCNl/l2/5UZbm9RPzdZ1QCwoYwPB9/j/tYJV8lZdr6t0yGBfxgzD3oW/zF7a+ZtASaMAu7lkgoqPK2pVIGa+Y9ZCsA0Xq756XpLCw+d3pHKHvIkgWLCo9FoeIv8f/bu5u/ztzRE+Nvl+o5add6MxnjsXz3s7BnW2FX6JNjyp0Z+OXjupQc2gcfFvpd/dA2lCNuuaCHkRgyPwIZtWPmNqMRXPp37mlPwV43qDJRVPQkvh0xPxwS35BbzUxWdT+ZLZv +! +ip radius source-interface Management0 +! +ip routing vrf MGMT +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 +! +management api http-commands + no shutdown + vrf MGMT + no shutdown +! +hostname spine2-DC3 +! +interface Management0 + vrf MGMT + ip address 192.168.0.78/24 +! +service routing protocols model multi-agent +! +ip routing +! \ No newline at end of file diff --git a/topologies/training-level7-part2/files/ceos/spine3-DC1/ceos-config b/topologies/training-level7-part2/files/ceos/spine3-DC1/ceos-config new file mode 100644 index 000000000..ed947aed5 --- /dev/null +++ b/topologies/training-level7-part2/files/ceos/spine3-DC1/ceos-config @@ -0,0 +1,2 @@ +SERIALNUMBER=spine3-DC1 +SYSTEMMACADDR=00:1c:73:b3:c6:01 diff --git a/topologies/training-level7-part2/files/ceos/spine3-DC1/startup-config b/topologies/training-level7-part2/files/ceos/spine3-DC1/startup-config new file mode 100644 index 000000000..52903513d --- /dev/null +++ b/topologies/training-level7-part2/files/ceos/spine3-DC1/startup-config @@ -0,0 +1,61 @@ +vrf instance MGMT +! +daemon TerminAttr + exec /usr/bin/TerminAttr -disableaaa -ingestgrpcurl=192.168.0.5:9910 -taillogs -ingestauth=key,atd-lab -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent -ingestvrf=MGMT + no shutdown +! +alias mlag-reload bash /mnt/flash/shut_intfs && sudo shutdown now -r +alias conint sh interface | i connected +alias senz show interface counter error | nz +alias shmc show int | awk '/^[A-Z]/ { intf = $1 } /, address is/ { print intf, $6 }' +alias snz show interface counter | nz +alias spd show port-channel %1 detail all +alias sqnz show interface counter queue | nz +alias srnz show interface counter rate | nz +alias intdesc + !! Usage: intdesc interface-name description + 10 config + 20 int %1 + 30 desc %2 + 40 exit +! +dns domain arista.lab +! +ntp server vrf MGMT 192.168.0.1 iburst source Management0 +! +radius-server host 192.168.0.1 vrf MGMT key 7 0207165218120E +! +aaa group server radius atds + server 192.168.0.1 vrf MGMT +! +aaa authentication login default group atds local +aaa authorization exec default group atds local +aaa authorization commands all default local +! +username Script secret sha512 $6$PNfpb9anSBQ5/aia$phaa3ar5pwkntenD9WHc6Ed5b96lbW0dc0bjtwPnFLaDiCK8D5Cjl6ewP/xdNbl4PtS6Paq.3SssN8pj05NQm. +username admin privilege 15 role network-admin secret 5 $1$5O85YVVn$HrXcfOivJEnISTMb6xrJc. +username arista privilege 15 role network-admin secret 5 $1$4VjIjfd1$XkUVulbNDESHFzcxDU.Tk1 +! +username arista ssh-key ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC+ERvV4GaPq3FzxY8T+5hMF/1T+l8wiPsVCtOrZU4Hy6NCNlAiDBdA/RUtX5/aOu5JvHyPTVHqWJ0qi9BqU3rxCNl/l2/5UZbm9RPzdZ1QCwoYwPB9/j/tYJV8lZdr6t0yGBfxgzD3oW/zF7a+ZtASaMAu7lkgoqPK2pVIGa+Y9ZCsA0Xq756XpLCw+d3pHKHvIkgWLCo9FoeIv8f/bu5u/ztzRE+Nvl+o5add6MxnjsXz3s7BnW2FX6JNjyp0Z+OXjupQc2gcfFvpd/dA2lCNuuaCHkRgyPwIZtWPmNqMRXPp37mlPwV43qDJRVPQkvh0xPxwS35BbzUxWdT+ZLZv +! +ip radius source-interface Management0 +! +ip routing vrf MGMT +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 +! +management api http-commands + no shutdown + vrf MGMT + no shutdown +! +hostname spine3-DC1 +! +interface Management0 + vrf MGMT + ip address 192.168.0.13/24 +! +service routing protocols model multi-agent +! +ip routing +! diff --git a/topologies/training-level7-part2/files/ceos/spine3-DC2/ceos-config b/topologies/training-level7-part2/files/ceos/spine3-DC2/ceos-config new file mode 100644 index 000000000..f07be990a --- /dev/null +++ b/topologies/training-level7-part2/files/ceos/spine3-DC2/ceos-config @@ -0,0 +1,2 @@ +SERIALNUMBER=spine3-DC2 +SYSTEMMACADDR=00:1c:73:b6:c6:01 diff --git a/topologies/training-level7-part2/files/ceos/spine3-DC2/startup-config b/topologies/training-level7-part2/files/ceos/spine3-DC2/startup-config new file mode 100644 index 000000000..16e2d98e6 --- /dev/null +++ b/topologies/training-level7-part2/files/ceos/spine3-DC2/startup-config @@ -0,0 +1,61 @@ +vrf instance MGMT +! +daemon TerminAttr + exec /usr/bin/TerminAttr -disableaaa -ingestgrpcurl=192.168.0.5:9910 -taillogs -ingestauth=key,atd-lab -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent -ingestvrf=MGMT + no shutdown +! +alias mlag-reload bash /mnt/flash/shut_intfs && sudo shutdown now -r +alias conint sh interface | i connected +alias senz show interface counter error | nz +alias shmc show int | awk '/^[A-Z]/ { intf = $1 } /, address is/ { print intf, $6 }' +alias snz show interface counter | nz +alias spd show port-channel %1 detail all +alias sqnz show interface counter queue | nz +alias srnz show interface counter rate | nz +alias intdesc + !! Usage: intdesc interface-name description + 10 config + 20 int %1 + 30 desc %2 + 40 exit +! +dns domain arista.lab +! +ntp server vrf MGMT 192.168.0.1 iburst source Management0 +! +radius-server host 192.168.0.1 vrf MGMT key 7 0207165218120E +! +aaa group server radius atds + server 192.168.0.1 vrf MGMT +! +aaa authentication login default group atds local +aaa authorization exec default group atds local +aaa authorization commands all default local +! +username Script secret sha512 $6$PNfpb9anSBQ5/aia$phaa3ar5pwkntenD9WHc6Ed5b96lbW0dc0bjtwPnFLaDiCK8D5Cjl6ewP/xdNbl4PtS6Paq.3SssN8pj05NQm. +username admin privilege 15 role network-admin secret 5 $1$5O85YVVn$HrXcfOivJEnISTMb6xrJc. +username arista privilege 15 role network-admin secret 5 $1$4VjIjfd1$XkUVulbNDESHFzcxDU.Tk1 +! +username arista ssh-key ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC+ERvV4GaPq3FzxY8T+5hMF/1T+l8wiPsVCtOrZU4Hy6NCNlAiDBdA/RUtX5/aOu5JvHyPTVHqWJ0qi9BqU3rxCNl/l2/5UZbm9RPzdZ1QCwoYwPB9/j/tYJV8lZdr6t0yGBfxgzD3oW/zF7a+ZtASaMAu7lkgoqPK2pVIGa+Y9ZCsA0Xq756XpLCw+d3pHKHvIkgWLCo9FoeIv8f/bu5u/ztzRE+Nvl+o5add6MxnjsXz3s7BnW2FX6JNjyp0Z+OXjupQc2gcfFvpd/dA2lCNuuaCHkRgyPwIZtWPmNqMRXPp37mlPwV43qDJRVPQkvh0xPxwS35BbzUxWdT+ZLZv +! +ip radius source-interface Management0 +! +ip routing vrf MGMT +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 +! +management api http-commands + no shutdown + vrf MGMT + no shutdown +! +hostname spine3-DC2 +! +interface Management0 + vrf MGMT + ip address 192.168.0.16/24 +! +service routing protocols model multi-agent +! +ip routing +! \ No newline at end of file diff --git a/topologies/training-level7-part2/files/cvp/cvp_info.yaml b/topologies/training-level7-part2/files/cvp/cvp_info.yaml new file mode 100644 index 000000000..5edcdeb32 --- /dev/null +++ b/topologies/training-level7-part2/files/cvp/cvp_info.yaml @@ -0,0 +1,194 @@ +cvp_info: + containers: + Tenant: + nodes: + DC1: + parent: Tenant + nodes: + Leaf-DC1: + parent: DC1 + nodes: + - borderleaf1-DC1 + - borderleaf2-DC1 + - leaf1-DC1 + - leaf2-DC1 + - leaf3-DC1 + - leaf4-DC1 + Spine-DC1: + parent: DC1 + nodes: + - spine1-DC1 + - spine2-DC1 + - spine3-DC1 + Host-DC1: + parent: DC1 + nodes: + - host1-DC1 + - host2-DC1 + DC2: + parent: Tenant + nodes: + Leaf-DC2: + parent: DC2 + nodes: + - borderleaf1-DC2 + - borderleaf2-DC2 + - leaf1-DC2 + - leaf2-DC2 + - leaf3-DC2 + - leaf4-DC2 + Spine-DC2: + parent: DC2 + nodes: + - spine1-DC2 + - spine2-DC2 + - spine3-DC2 + Host-DC2: + parent: DC2 + nodes: + - host1-DC2 + - host2-DC2 + DC3: + parent: Tenant + nodes: + Spine-DC3: + parent: DC3 + nodes: + - spine1-DC3 + - spine2-DC3 + Leaf-DC3: + parent: DC3 + nodes: + - leaf1-DC3 + - leaf2-DC3 + Host-DC3: + parent: DC3 + nodes: + - host1-DC3 + - host2-DC3 + Provider Network: + parent: Tenant + nodes: + ISP: + parent: "Provider Network" + nodes: + - PE11 + - PE12 + - PE21 + - PE22 + - PE31 + - P1 + - P2 + - P3 + - P4 + - RR + OOB: + parent: Tenant + nodes: + - OOB-DC1 + - OOB-DC2 + - OOB-CORE + snapshots: + configlets: + containers: + Tenant: + - ATD-INFRA + netelements: + borderleaf1-DC1: + - borderleaf1-DC1-BASE + borderleaf2-DC1: + - borderleaf2-DC1-BASE + leaf1-DC1: + - leaf1-DC1-BASE + leaf2-DC1: + - leaf2-DC1-BASE + leaf3-DC1: + - leaf3-DC1-BASE + leaf4-DC1: + - leaf4-DC1-BASE + spine1-DC1: + - spine1-DC1-BASE + spine2-DC1: + - spine2-DC1-BASE + spine3-DC1: + - spine3-DC1-BASE + host1-DC1: + - host1-DC1-BASE + - host1-DC1-START + host2-DC1: + - host2-DC1-BASE + - host2-DC1-START + borderleaf1-DC2: + - borderleaf1-DC2-BASE + - borderleaf1-DC2-START + borderleaf2-DC2: + - borderleaf2-DC2-BASE + - borderleaf2-DC2-START + leaf1-DC2: + - leaf1-DC2-BASE + - leaf1-DC2-START + leaf2-DC2: + - leaf2-DC2-BASE + - leaf2-DC2-START + leaf3-DC2: + - leaf3-DC2-BASE + - leaf3-DC2-START + leaf4-DC2: + - leaf4-DC2-BASE + - leaf4-DC2-START + spine1-DC2: + - spine1-DC2-BASE + - Spine1-DC2-START + spine2-DC2: + - spine2-DC2-BASE + - Spine2-DC2-START + spine3-DC2: + - spine3-DC2-BASE + - Spine3-DC2-START + host1-DC2: + - host1-DC2-BASE + - host1-DC2-START + host2-DC2: + - host2-DC2-BASE + - host2-DC2-START + host1-DC3: + - host1-DC3-BASE + - host1-DC3-START + host2-DC3: + - host2-DC3-BASE + - host2-DC3-START + PE11: + - PE11-BASE + PE12: + - PE12-BASE + PE21: + - PE21-BASE + PE22: + - PE22-BASE + PE31: + - PE31-BASE + P1: + - P1-BASE + P2: + - P2-BASE + P3: + - P3-BASE + P4: + - P4-BASE + RR: + - RR-BASE + OOB-CORE: + - OOB-CORE-BASE + OOB-DC1: + - OOB-DC1-BASE + OOB-DC2: + - OOB-DC2-BASE + spine1-DC3: + - spine1-DC3-BASE + spine2-DC3: + - spine2-DC3-BASE + leaf1-DC3: + - leaf1-DC3-BASE + leaf2-DC3: + - leaf2-DC3-BASE + diff --git a/topologies/training-level7-part2/files/hosts b/topologies/training-level7-part2/files/hosts new file mode 100644 index 000000000..20bac87b4 --- /dev/null +++ b/topologies/training-level7-part2/files/hosts @@ -0,0 +1,34 @@ +127.0.0.1 localhost +192.168.0.11 spine1-DC1 +192.168.0.12 spine2-DC1 +192.168.0.13 spine3-DC1 +192.168.0.14 spine1-DC2 +192.168.0.15 spine2-DC2 +192.168.0.16 spine3-DC2 +192.168.0.21 leaf1-DC1 +192.168.0.22 leaf2-DC1 +192.168.0.23 leaf3-DC1 +192.168.0.24 leaf4-DC1 +192.168.0.25 borderleaf1-DC1 +192.168.0.26 borderleaf2-DC1 +192.168.0.31 leaf1-DC2 +192.168.0.32 leaf2-DC2 +192.168.0.33 leaf3-DC2 +192.168.0.34 leaf4-DC2 +192.168.0.35 borderleaf1-DC2 +192.168.0.36 borderleaf2-DC2 +192.168.0.51 host1-DC1 +192.168.0.52 host2-DC1 +192.168.0.53 host1-DC2 +192.168.0.54 host2-DC2 +192.168.0.62 OOB-DC1 +192.168.0.63 OOB-DC2 +192.168.0.61 OOB-CORE +192.168.0.71 core1-isp1 +192.168.0.72 core2-isp1 +192.168.0.73 core1-isp2 +192.168.0.74 core2-isp2 +192.168.0.75 internet +192.168.0.76 DCI +192.168.0.4 CVX +192.168.0.5 cvp diff --git a/topologies/training-level7-part2/files/menus/default.yaml b/topologies/training-level7-part2/files/menus/default.yaml new file mode 100644 index 000000000..88e29c3e2 --- /dev/null +++ b/topologies/training-level7-part2/files/menus/default.yaml @@ -0,0 +1,2 @@ +--- +default_menu: ssh \ No newline at end of file diff --git a/topologies/training-level7-part2/files/scripts/Authenticate-CVP b/topologies/training-level7-part2/files/scripts/Authenticate-CVP new file mode 100644 index 000000000..144bb13eb --- /dev/null +++ b/topologies/training-level7-part2/files/scripts/Authenticate-CVP @@ -0,0 +1,32 @@ +import requests +import json + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + +# Print user details + +print "User Name:%s\n "%output['username'] +print "First Name: %s\n "%output['user']['firstName'] +print "Last Name: %s\n "%output['user']['lastName'] +print "User Permissions: %s\n "%output['permissionList'] +print "Cookie Jar: %s\n "%cookies diff --git a/topologies/training-level7-part2/files/scripts/Authenticate-CVP2 b/topologies/training-level7-part2/files/scripts/Authenticate-CVP2 new file mode 100644 index 000000000..3f6bf9190 --- /dev/null +++ b/topologies/training-level7-part2/files/scripts/Authenticate-CVP2 @@ -0,0 +1,48 @@ +import requests +import json + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + +# Print user details + +print "User Name:%s\n "%output['username'] +print "First Name: %s\n "%output['user']['firstName'] +print "Last Name: %s\n "%output['user']['lastName'] +print "User Permissions: %s\n "%output['permissionList'] +print "Cookie Jar: %s\n "%cookies + +#Create an HTTP GET request to the CVP server + +getConfigletURL = "/cvpservice/configlet/getConfiglets.do?" +getConfigletParams = {'startIndex':'0','endIndex':'0','type':'Configlet'} +response = requests.get(url+getConfigletURL,cookies=cookies, params=getConfigletParams,verify=False) +assert response.ok +outputConfiglets = response.json() + +# Print Configlet details + +for configlet in outputConfiglets['data']: + print "ConfigletName: %s"%configlet['name'] + print "ConfigletKey: %s"%configlet['key'] + print "\n" + diff --git a/topologies/training-level7-part2/files/scripts/Authenticate-CVP3 b/topologies/training-level7-part2/files/scripts/Authenticate-CVP3 new file mode 100644 index 000000000..2445806ea --- /dev/null +++ b/topologies/training-level7-part2/files/scripts/Authenticate-CVP3 @@ -0,0 +1,95 @@ +import requests +import json + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + +# Print user details + +print "User Name:%s\n "%output['username'] +print "First Name: %s\n "%output['user']['firstName'] +print "Last Name: %s\n "%output['user']['lastName'] +print "User Permissions: %s\n "%output['permissionList'] +print "Cookie Jar: %s\n "%cookies + +#Create an HTTP GET request to the CVP server + +getConfigletURL = "/cvpservice/configlet/getConfiglets.do?" +getConfigletParams = {'startIndex':'0','endIndex':'0','type':'Configlet'} +response = requests.get(url+getConfigletURL,cookies=cookies, params=getConfigletParams,verify=False) +assert response.ok +outputConfiglets = response.json() + +# Print Configlet details + +for configlet in outputConfiglets['data']: + print "ConfigletName: %s"%configlet['name'] + print "ConfigletKey: %s"%configlet['key'] + print "\n" +# Create an HTTP GET request to the CVP server + +getConfigletHistoryURL = "/cvpservice/configlet/getConfigletHistory.do?" +getConfigletParams = {'configletId':'configlet_32_438214998013','startIndex':'0','endIndex':'0'} +response = requests.get(url+getConfigletHistoryURL,cookies=cookies, params=getConfigletParams,verify=False) +assert response.ok +outputConfigletHistory = response.json() + +# Print Configlet details + +for entry in outputConfigletHistory['configletHistory']: + print "ConfigletKey: %s"%entry['key'] + print "ConfigletOldConfig: %s"%entry['oldConfig'] + print "ConfigletNewConfig: %s"%entry['newConfig'] + print "\n" + + +# Create an HTTP GET request to the CVP server + +getConfigletDetailURL = "/cvpservice/configlet/getConfigletByName.do?" +getConfigletParams = {'name':'VLANs'} +response = requests.get(url+getConfigletDetailURL,cookies=cookies, params=getConfigletParams,verify=False) +assert response.ok +outputConfigletDetail = response.json() + +# Print Configlet details + +print "ConfigletKey: %s"%outputConfigletDetail['key'] +print "ConfigletName: %s"%outputConfigletDetail['name'] +print "ConfigletConfig: %s"%outputConfigletDetail['config'] +print "ConfigletNote: %s"%outputConfigletDetail['note'] +print "\n" + + +# Create an HTTP POST request to the CVP server + +headers = { 'Content-Type': 'application/json' } +postConfigletChangeURL = "/cvpservice/configlet/updateConfiglet.do" +changeData = json.dumps({"config": "! some configuration here", "key": "configlet_32_438214998013", "name": "VLANs"}) +response = requests.post(url+postConfigletChangeURL, cookies=cookies, data=changeData,headers=headers,verify=False) +assert response.ok +outputConfigletChange = response.json() + +# Print Configlet details + +print "ConfigletChange: %s"%outputConfigletChange['data'] +print "\n" + diff --git a/topologies/training-level7-part2/files/scripts/Configlet1 b/topologies/training-level7-part2/files/scripts/Configlet1 new file mode 100644 index 000000000..3f6bf9190 --- /dev/null +++ b/topologies/training-level7-part2/files/scripts/Configlet1 @@ -0,0 +1,48 @@ +import requests +import json + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + +# Print user details + +print "User Name:%s\n "%output['username'] +print "First Name: %s\n "%output['user']['firstName'] +print "Last Name: %s\n "%output['user']['lastName'] +print "User Permissions: %s\n "%output['permissionList'] +print "Cookie Jar: %s\n "%cookies + +#Create an HTTP GET request to the CVP server + +getConfigletURL = "/cvpservice/configlet/getConfiglets.do?" +getConfigletParams = {'startIndex':'0','endIndex':'0','type':'Configlet'} +response = requests.get(url+getConfigletURL,cookies=cookies, params=getConfigletParams,verify=False) +assert response.ok +outputConfiglets = response.json() + +# Print Configlet details + +for configlet in outputConfiglets['data']: + print "ConfigletName: %s"%configlet['name'] + print "ConfigletKey: %s"%configlet['key'] + print "\n" + diff --git a/topologies/training-level7-part2/files/scripts/ConfigletChange b/topologies/training-level7-part2/files/scripts/ConfigletChange new file mode 100644 index 000000000..691ff5864 --- /dev/null +++ b/topologies/training-level7-part2/files/scripts/ConfigletChange @@ -0,0 +1,40 @@ +import requests +import json + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + + +# Create an HTTP POST request to the CVP server + +headers = { 'Content-Type': 'application/json' } +postConfigletChangeURL = "/cvpservice/configlet/addNoteToConfiglet.do" +changeData = json.dumps({"note": "Configlet Changed by API", "key": "configlet_516_7018635812307"}) +response = requests.post(url+postConfigletChangeURL, cookies=cookies, data=changeData,headers=headers,verify=False) +assert response.ok +outputConfigletChange = response.json() + +# Print Configlet details + +print "ConfigletChange: %s"%outputConfigletChange['data'] +print "\n" + diff --git a/topologies/training-level7-part2/files/scripts/ConfigletDetail b/topologies/training-level7-part2/files/scripts/ConfigletDetail new file mode 100644 index 000000000..eb2a85937 --- /dev/null +++ b/topologies/training-level7-part2/files/scripts/ConfigletDetail @@ -0,0 +1,43 @@ +import requests +import json + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + +# Create an HTTP GET request to the CVP server + +getConfigletDetailURL = "/cvpservice/configlet/getConfigletByName.do?" +getConfigletParams = {'name':'VLANs'} +response = requests.get(url+getConfigletDetailURL,cookies=cookies, params=getConfigletParams,verify=False) +assert response.ok +outputConfigletDetail = response.json() + +# Print Configlet details + +print "ConfigletKey: %s"%outputConfigletDetail['key'] +print "ConfigletName: %s"%outputConfigletDetail['name'] +print "ConfigletConfig: %s"%outputConfigletDetail['config'] +print "ConfigletNote: %s"%outputConfigletDetail['note'] +print "\n" + + + diff --git a/topologies/training-level7-part2/files/scripts/ConfigletHistory b/topologies/training-level7-part2/files/scripts/ConfigletHistory new file mode 100644 index 000000000..71f1ac693 --- /dev/null +++ b/topologies/training-level7-part2/files/scripts/ConfigletHistory @@ -0,0 +1,41 @@ +import requests +import json + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + +# Create an HTTP GET request to the CVP server + +getConfigletHistoryURL = "/cvpservice/configlet/getConfigletHistory.do?" +getConfigletParams = {'configletId':'configlet_344_7351420097365','startIndex':'0','endIndex':'0'} +response = requests.get(url+getConfigletHistoryURL,cookies=cookies, params=getConfigletParams,verify=False) +assert response.ok +outputConfigletHistory = response.json() + +# Print Configlet details + +for entry in outputConfigletHistory['configletHistory']: + print "ConfigletKey: %s"%entry['key'] + print "ConfigletOldConfig: \n%s"%entry['oldConfig'] + print "ConfigletNewConfig: \n%s"%entry['newConfig'] + print "\n" + diff --git a/topologies/training-level7-part2/files/scripts/TaskBase b/topologies/training-level7-part2/files/scripts/TaskBase new file mode 100644 index 000000000..6f8deccaf --- /dev/null +++ b/topologies/training-level7-part2/files/scripts/TaskBase @@ -0,0 +1,59 @@ +import requests +import json + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + + +# Create an HTTP GET request to the CVP server + +getTasksURL = "/cvpservice/task/getTasks.do?" +getTasksParams = {'startIndex':'0','endIndex':'0','queryparam':'Pending'} +response = requests.get(url+getTasksURL,cookies=cookies, params=getTasksParams,verify=False) +assert response.ok +outputPendingTasks = response.json() + + +# Print Tasks Created by Current User +taskList = [ ] +for entry in outputPendingTasks['data']: + if str(entry['createdBy']) == str(CVP_USER): + print "TaskNumber: %s"%entry['workOrderId'] + taskList.append(str(entry['workOrderId'])) +print "TaskList: %s"%taskList + + + +# Create an HTTP POST request to the CVP server + +headers = { 'Content-Type': 'application/json' } +postTaskLogURL = "/cvpservice/workflow/addWorkOrderLog.do" +taskLogData = json.dumps({"taskId": taskList[1],"message": "This is a test Change","source": "CVP REST API"}) +response = requests.post(url+postTaskLogURL, cookies=cookies, data=taskLogData,headers=headers,verify=False) +assert response.ok +outputTaskLog = response.json() + +# Print Configlet details + +print "TaskLogAmmend: %s"%outputTaskLog['data'] +print "\n" + diff --git a/topologies/training-level7-part2/files/scripts/TaskCVP1 b/topologies/training-level7-part2/files/scripts/TaskCVP1 new file mode 100644 index 000000000..1ebd05764 --- /dev/null +++ b/topologies/training-level7-part2/files/scripts/TaskCVP1 @@ -0,0 +1,48 @@ +import requests +import json + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + +# Print user details + +print "User Name:%s\n "%output['username'] +print "First Name: %s\n "%output['user']['firstName'] +print "Last Name: %s\n "%output['user']['lastName'] + + +getTasksURL = "/cvpservice/task/getTasks.do?" +getTasksParams = {'startIndex':'0','endIndex':'0'} +response = requests.get(url+getTasksURL,cookies=cookies, params=getTasksParams,verify=False) +assert response.ok +outputPendingTasks = response.json() + + +# Print Tasks Created by Current User +taskList = [ ] +for entry in outputPendingTasks['data']: + if str(entry['createdBy']) == str(CVP_USER): + print( "TaskNumber: %s Description: %s" %(entry['workOrderId'],entry['description'])) + taskList.append(str(entry['workOrderId'])) +#print "TaskList: %s"%taskList + + diff --git a/topologies/training-level7-part2/files/scripts/TaskExecute b/topologies/training-level7-part2/files/scripts/TaskExecute new file mode 100644 index 000000000..3db487284 --- /dev/null +++ b/topologies/training-level7-part2/files/scripts/TaskExecute @@ -0,0 +1,56 @@ +import requests +import json + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + + +# Create an HTTP GET request to the CVP server + +getTasksURL = "/cvpservice/task/getTasks.do?" +getTasksParams = {'startIndex':'0','endIndex':'0','queryparam':'Pending'} +response = requests.get(url+getTasksURL,cookies=cookies, params=getTasksParams,verify=False) +assert response.ok +outputPendingTasks = response.json() + + +# Print Tasks Created by Current User +taskList = [ ] +for entry in outputPendingTasks['data']: + if str(entry['createdBy']) == str(CVP_USER): + print "TaskNumber: %s"%entry['workOrderId'] + taskList.append(str(entry['workOrderId'])) +print "TaskList: %s"%taskList + + + +headers = { 'Content-Type': 'application/json' } +postTaskExecuteURL = "/cvpservice/task/executeTask.do" +for taskNumber in taskList: + executeData = json.dumps({'data': [taskNumber]}) + response = requests.post(url+postTaskExecuteURL, cookies=cookies,data=executeData,headers=headers,verify=False) + assert response.ok + outputExecuteTask = response.json() + print (outputExecuteTask['data']) + print "Task: "+str(taskNumber)+" Execute: "+str(outputExecuteTask['data']) + print "\n" + diff --git a/topologies/training-level7-part2/files/scripts/TaskLog b/topologies/training-level7-part2/files/scripts/TaskLog new file mode 100644 index 000000000..c835008b8 --- /dev/null +++ b/topologies/training-level7-part2/files/scripts/TaskLog @@ -0,0 +1,59 @@ +import requests +import json + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + + +# Create an HTTP GET request to the CVP server + +getTasksURL = "/cvpservice/task/getTasks.do?" +getTasksParams = {'startIndex':'0','endIndex':'0'} +response = requests.get(url+getTasksURL,cookies=cookies, params=getTasksParams,verify=False) +assert response.ok +outputTasks = response.json() + + +# Print Tasks Created by Current User +taskList = [ ] +for entry in outputTasks['data']: + if str(entry['createdBy']) == str(CVP_USER): + print "TaskNumber: %s"%entry['workOrderId'] + taskList.append(str(entry['workOrderId'])) +print "TaskList: %s"%taskList + + + +# Create an HTTP POST request to the CVP server + +headers = { 'Content-Type': 'application/json' } +postTaskLogURL = "/cvpservice/workflow/addWorkOrderLog.do" +taskLogData = json.dumps({"taskId": taskList[0],"message": "This is a test Change","source": "CVP REST API"}) +response = requests.post(url+postTaskLogURL, cookies=cookies, data=taskLogData,headers=headers,verify=False) +assert response.ok +outputTaskLog = response.json() + +# Print Configlet details + +print "TaskLogAmmend: %s"%outputTaskLog['data'] +print "\n" + diff --git a/topologies/training-level7-part2/files/scripts/TaskLog1 b/topologies/training-level7-part2/files/scripts/TaskLog1 new file mode 100644 index 000000000..c835008b8 --- /dev/null +++ b/topologies/training-level7-part2/files/scripts/TaskLog1 @@ -0,0 +1,59 @@ +import requests +import json + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + + +# Create an HTTP GET request to the CVP server + +getTasksURL = "/cvpservice/task/getTasks.do?" +getTasksParams = {'startIndex':'0','endIndex':'0'} +response = requests.get(url+getTasksURL,cookies=cookies, params=getTasksParams,verify=False) +assert response.ok +outputTasks = response.json() + + +# Print Tasks Created by Current User +taskList = [ ] +for entry in outputTasks['data']: + if str(entry['createdBy']) == str(CVP_USER): + print "TaskNumber: %s"%entry['workOrderId'] + taskList.append(str(entry['workOrderId'])) +print "TaskList: %s"%taskList + + + +# Create an HTTP POST request to the CVP server + +headers = { 'Content-Type': 'application/json' } +postTaskLogURL = "/cvpservice/workflow/addWorkOrderLog.do" +taskLogData = json.dumps({"taskId": taskList[0],"message": "This is a test Change","source": "CVP REST API"}) +response = requests.post(url+postTaskLogURL, cookies=cookies, data=taskLogData,headers=headers,verify=False) +assert response.ok +outputTaskLog = response.json() + +# Print Configlet details + +print "TaskLogAmmend: %s"%outputTaskLog['data'] +print "\n" + diff --git a/topologies/training-level7-part2/files/scripts/TaskLogView b/topologies/training-level7-part2/files/scripts/TaskLogView new file mode 100644 index 000000000..7b34904dd --- /dev/null +++ b/topologies/training-level7-part2/files/scripts/TaskLogView @@ -0,0 +1,51 @@ +import requests +import json +import pprint + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + + +# Create an HTTP GET request to the CVP server + +getTasksURL = "/cvpservice/task/getTasks.do?" +getTasksParams = {'startIndex':'0','endIndex':'0'} +response = requests.get(url+getTasksURL,cookies=cookies, params=getTasksParams,verify=False) +assert response.ok +outputTasks = response.json() + +taskList = [ ] +for entry in outputTasks['data']: + if str(entry['createdBy']) == str(CVP_USER): + taskList.append(str(entry['workOrderId'])) + +getTaskLogURL = "/cvpservice/task/getLogsById.do?" +#getTaskLogParams = {'startIndex':'0','endIndex':'0','id':'0'} +getTaskLogParams = {'startIndex':'0','endIndex':'0','id':taskList[0]} +response = requests.get(url+getTaskLogURL,cookies=cookies, params=getTaskLogParams,verify=False) +assert response.ok +outputTaskLog = response.json() + +# Print TaskLog details +print "TaskLogOutput: %s" %outputTaskLog['data'] +print "\n" + diff --git a/topologies/training-level7-part2/files/scripts/TaskNote b/topologies/training-level7-part2/files/scripts/TaskNote new file mode 100644 index 000000000..6cd1d6cfd --- /dev/null +++ b/topologies/training-level7-part2/files/scripts/TaskNote @@ -0,0 +1,52 @@ +import requests +import json +import pprint + +# Set Script Variables + +CVP_HOST = "192.168.0.5" +CVP_USER = "arista" +CVP_PASS = "arista" + +# Fix for requests certification issue + +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# Create an HTTP session to the CVP server + +url = "https://%s"%CVP_HOST +headers = { 'Content-Type': 'application/json' } +loginURL = "/web/login/authenticate.do" +authenticateData = json.dumps({'userId' : CVP_USER, 'password' : CVP_PASS}) +response = requests.post(url+loginURL,data=authenticateData,headers=headers,verify=False) +assert response.ok +cookies = response.cookies +output = response.json() + + +# Create an HTTP GET request to the CVP server + +getTasksURL = "/cvpservice/task/getTasks.do?" +getTasksParams = {'startIndex':'0','endIndex':'0'} +response = requests.get(url+getTasksURL,cookies=cookies, params=getTasksParams,verify=False) +assert response.ok +outputTasks = response.json() + +taskList = [ ] +for entry in outputTasks['data']: + if str(entry['createdBy']) == str(CVP_USER): + taskList.append(str(entry['workOrderId'])) + +headers = { 'Content-Type': 'application/json' } +postTaskNoteURL = "/cvpservice/task/addNoteToTask.do" +taskNoteData = json.dumps({"workOrderId": taskList[0],"note": "This is a test Change using the API"}) +response = requests.post(url+postTaskNoteURL, cookies=cookies, data=taskNoteData,headers=headers,verify=False) +assert response.ok +outputTaskNote = response.json() + +# Print Task details + +print "TaskNoteAmmend: %s"%outputTaskNote['data'] +print "\n" + diff --git a/topologies/training-level7-part2/labguides/.gitignore b/topologies/training-level7-part2/labguides/.gitignore new file mode 100644 index 000000000..ed86553f4 --- /dev/null +++ b/topologies/training-level7-part2/labguides/.gitignore @@ -0,0 +1,2 @@ +.DS_Store +build/ diff --git a/topologies/training-level7-part2/labguides/Makefile b/topologies/training-level7-part2/labguides/Makefile new file mode 100644 index 000000000..874ed2529 --- /dev/null +++ b/topologies/training-level7-part2/labguides/Makefile @@ -0,0 +1,20 @@ +# Minimal makefile for Sphinx documentation +# + +# You can set these variables from the command line. +SPHINXOPTS = +SPHINXBUILD = python -msphinx +SPHINXPROJ = ATD +SOURCEDIR = source +BUILDDIR = build + +# Put it first so that "make" without argument is like "make help". +help: + @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) + +.PHONY: help Makefile + +# Catch-all target: route all unknown targets to Sphinx using the new +# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). +%: Makefile + @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) \ No newline at end of file diff --git a/topologies/training-level7-part2/labguides/readme.md b/topologies/training-level7-part2/labguides/readme.md new file mode 100644 index 000000000..5a5369ecd --- /dev/null +++ b/topologies/training-level7-part2/labguides/readme.md @@ -0,0 +1,12 @@ +# Lab Guides +In this folder are rST (restructured text) formatted lab guides for the ATD event. + +## Building +To build the documentation, you will need to install Sphinx and sphinx_bootstrap_theme with `pip`: + +`pip install sphinx sphinx_bootstrap_theme` + +## Contributing +At some point, this section may expand, but for now please make sure to review existing files for formatting guidelines. + +Please see https://github.com/ralsina/rst-cheatsheet/blob/master/rst-cheatsheet.rst for a cheat sheet. \ No newline at end of file diff --git a/topologies/training-level7-part2/labguides/source/_static/arista_logo.png b/topologies/training-level7-part2/labguides/source/_static/arista_logo.png new file mode 100644 index 000000000..2376e72b9 Binary files /dev/null and b/topologies/training-level7-part2/labguides/source/_static/arista_logo.png differ diff --git a/topologies/training-level7-part2/labguides/source/_static/arista_logo_160by26.png b/topologies/training-level7-part2/labguides/source/_static/arista_logo_160by26.png new file mode 100644 index 000000000..d0d0cbeec Binary files /dev/null and b/topologies/training-level7-part2/labguides/source/_static/arista_logo_160by26.png differ diff --git a/topologies/training-level7-part2/labguides/source/_static/arista_logo_320by52.png b/topologies/training-level7-part2/labguides/source/_static/arista_logo_320by52.png new file mode 100644 index 000000000..43dfa7ed2 Binary files /dev/null and b/topologies/training-level7-part2/labguides/source/_static/arista_logo_320by52.png differ diff --git a/topologies/training-level7-part2/labguides/source/_static/cloudvision-icon.png b/topologies/training-level7-part2/labguides/source/_static/cloudvision-icon.png new file mode 100644 index 000000000..c309ed98e Binary files /dev/null and b/topologies/training-level7-part2/labguides/source/_static/cloudvision-icon.png differ diff --git a/topologies/training-level7-part2/labguides/source/_static/logo.jpg b/topologies/training-level7-part2/labguides/source/_static/logo.jpg new file mode 100644 index 000000000..6eda41f7e Binary files /dev/null and b/topologies/training-level7-part2/labguides/source/_static/logo.jpg differ diff --git a/topologies/training-level7-part2/labguides/source/_static/my-styles.css b/topologies/training-level7-part2/labguides/source/_static/my-styles.css new file mode 100644 index 000000000..1150528ee --- /dev/null +++ b/topologies/training-level7-part2/labguides/source/_static/my-styles.css @@ -0,0 +1,41 @@ +body { + background-color: #FFFFFF; + color: #002859 +} + +.navbar-inverse { + background-image: -webkit-linear-gradient(#6d94bf, #446e9b 50%, #002859); + background-image: -o-linear-gradient(#6d94bf, #446e9b 50%, #002859); + background-image: -webkit-gradient(linear, left top, left bottom, from(#6d94bf), color-stop(50%, #446e9b), to(#002859)); + background-image: linear-gradient(#6d94bf, #446e9b 50%, #002859); + background-repeat: no-repeat; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff6d94bf', endColorstr='#ff002859', GradientType=0); + -webkit-filter: none; + filter: none; + border: 1px solid #345578; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.3) +} + +.navbar-brand { + background: url("arista_logo_320by52.png") center / contain no-repeat; + display: inline-block; + width: 1px; + padding: 0 10px 0 60px; + margin-right: 30px; + margin-left: -30px; +} + +.navbar-brand>img { + display: inline-block; + padding: 0 100px 0 0px; + margin-right: 20px; +} +a.navbar-brand { + display: inline-block; + padding: 15px 0 0 120px; +} + +footer { + background-color: #002859; + color: #FFFFFF; +} diff --git a/topologies/training-level7-part2/labguides/source/conf.py b/topologies/training-level7-part2/labguides/source/conf.py new file mode 100644 index 000000000..afccec09c --- /dev/null +++ b/topologies/training-level7-part2/labguides/source/conf.py @@ -0,0 +1,247 @@ +# -*- coding: utf-8 -*- +# +# ATD documentation build configuration file, created by +# sphinx-quickstart on Tue Apr 17 10:00:04 2018. +# +# This file is execfile()d with the current directory set to its +# containing dir. +# +# Note that not all possible configuration values are present in this +# autogenerated file. +# +# All configuration values have a default; values that are commented out +# serve to show the default. + +# If extensions (or modules to document with autodoc) are in another directory, +# add these directories to sys.path here. If the directory is relative to the +# documentation root, use os.path.abspath to make it absolute, like shown here. +# +# import os +# import sys +# sys.path.insert(0, os.path.abspath('.')) + +import sphinx_bootstrap_theme + +# Importing datetime module to auto update copyright year +from datetime import date + +# -- General configuration ------------------------------------------------ + +# If your documentation needs a minimal Sphinx version, state it here. +# +# needs_sphinx = '1.0' + +# Add any Sphinx extension module names here, as strings. They can be +# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom +# ones. + +# Add any paths that contain templates here, relative to this directory. +templates_path = ['_templates'] + +# The suffix(es) of source filenames. +# You can specify multiple suffix as a list of string: +# +# source_suffix = ['.rst', '.md'] +source_suffix = '.rst' + +# The master toctree document. +master_doc = 'index' + +# General information about the project. +# Updating copyright var to auto update with current year +project = u'Arista ATD' +copyright = u'{0}, Arista Networks'.format(date.today().year) +author = u'Arista ATD atd-help@arista.com' + +# Show Source +html_show_sourcelink = False + +# The version info for the project you're documenting, acts as replacement for +# |version| and |release|, also used in various other places throughout the +# built documents. +# +# The short X.Y version. +version = u'Version 3.0' +# The full version, including alpha/beta/rc tags. +release = u'1' + +# The language for content autogenerated by Sphinx. Refer to documentation +# for a list of supported languages. +# +# This is also used if you do content translation via gettext catalogs. +# Usually you set "language" from the command line for these cases. +language = None + +# List of patterns, relative to source directory, that match files and +# directories to ignore when looking for source files. +# This patterns also effect to html_static_path and html_extra_path +exclude_patterns = [] + +# The name of the Pygments (syntax highlighting) style to use. +pygments_style = 'sphinx' + +# If true, `todo` and `todoList` produce output, else they produce nothing. +todo_include_todos = False + + +# -- Options for HTML output ---------------------------------------------- + +# The theme to use for HTML and HTML Help pages. See the documentation for +# a list of builtin themes. +# +#html_theme = 'alabaster' +html_theme = 'bootstrap' +html_theme_path = sphinx_bootstrap_theme.get_html_theme_path() + +# Add any paths that contain custom static files (such as style sheets) here, +# relative to this directory. They are copied after the builtin static files, +# so a file named "default.css" will overwrite the builtin "default.css". +html_static_path = ['_static'] + +# Theme options are theme-specific and customize the look and feel of a theme +# further. For a list of options available for each theme, see the +# documentation. +# +html_theme_options = { + # Navigation bar title. (Default: ``project`` value) + 'navbar_title': "ATD", + + # Tab name for entire site. (Default: "Site") + 'navbar_site_name': "Table of Contents", + + # A list of tuples containing pages or urls to link to. + # Valid tuples should be in the following forms: + # (name, page) # a link to a page + # (name, "/aa/bb", 1) # a link to an arbitrary relative url + # (name, "http://example.com", True) # arbitrary absolute url + # Note the "1" or "True" value above as the third argument to indicate + # an arbitrary url. + 'navbar_links': [ + ("Arista", "http://www.arista.com", True), + ], + + # Render the next and previous page links in navbar. (Default: true) + 'navbar_sidebarrel': True, + + # Render the current pages TOC in the navbar. (Default: true) + 'navbar_pagenav': False, + + # Tab name for the current pages TOC. (Default: "Page") + 'navbar_pagenav_name': "Page", + + # Global TOC depth for "site" navbar tab. (Default: 1) + # Switching to -1 shows all levels. + 'globaltoc_depth': 2, + + # Include hidden TOCs in Site navbar? + # + # Note: If this is "false", you cannot have mixed ``:hidden:`` and + # non-hidden ``toctree`` directives in the same page, or else the build + # will break. + # + # Values: "true" (default) or "false" + 'globaltoc_includehidden': "true", + + # HTML navbar class (Default: "navbar") to attach to
    element. + # For black navbar, do "navbar navbar-inverse" + #'navbar_class': "navbar navbar-inverse", + 'navbar_class': "navbar", + + # Fix navigation bar to top of page? + # Values: "true" (default) or "false" + 'navbar_fixed_top': "true", + + # Location of link to source. + # Options are "nav" (default), "footer" or anything else to exclude. + #'source_link_position': "nav", + + # Bootswatch (http://bootswatch.com/) theme. + # + # Options are nothing (default) or the name of a valid theme + # such as "cosmo" or "sandstone". + # + # The set of valid themes depend on the version of Bootstrap + # that's used (the next config option). + # + # Currently, the supported themes are: + # - Bootstrap 2: https://bootswatch.com/2 + # - Bootstrap 3: https://bootswatch.com/3 + 'bootswatch_theme': "spacelab", + + # Choose Bootstrap version. + # Values: "3" (default) or "2" (in quotes) + 'bootstrap_version': "3", +} + +# The name for this set of Sphinx documents. If None, it defaults to +# " v documentation". +#html_title = "AristaATD" + +# A shorter title for the navigation bar. Default is the same as html_title. +#html_short_title = "Demo" + +# (Optional) Logo. Should be small enough to fit the navbar (ideally 24x24). +# Path should be relative to the ``_static`` files directory. +#html_logo = "cloudvision-icon.png" + +# -- Options for HTMLHelp output ------------------------------------------ + +# Output file base name for HTML help builder. +htmlhelp_basename = 'AristaATD' + + +# -- Options for LaTeX output --------------------------------------------- + +latex_elements = { + # The paper size ('letterpaper' or 'a4paper'). + # + # 'papersize': 'letterpaper', + + # The font size ('10pt', '11pt' or '12pt'). + # + # 'pointsize': '10pt', + + # Additional stuff for the LaTeX preamble. + # + # 'preamble': '', + + # Latex figure (float) alignment + # + # 'figure_align': 'htbp', +} + +# Grouping the document tree into LaTeX files. List of tuples +# (source start file, target name, title, +# author, documentclass [howto, manual, or own class]). +latex_documents = [ + (master_doc, 'ATD.tex', u'ATD Lab Guide', + u'ATD Help (atd-help@arista.com)', 'manual'), +] + + +# -- Options for manual page output --------------------------------------- + +# One entry per manual page. List of tuples +# (source start file, name, description, authors, manual section). +man_pages = [ + (master_doc, 'atd', u'ATD Lab Guide', + [author], 1) +] + + +# -- Options for Texinfo output ------------------------------------------- + +# Grouping the document tree into Texinfo files. List of tuples +# (source start file, target name, title, author, +# dir menu entry, description, category) +texinfo_documents = [ + (master_doc, 'ATD', u'ATD Lab Guide', + author, 'ATD', 'Lab Documentation.', + 'Miscellaneous'), +] + + +def setup(app): + app.add_stylesheet("my-styles.css") # also can be a full URL + # app.add_stylesheet("ANOTHER.css") + # app.add_stylesheet("AND_ANOTHER.css") diff --git a/topologies/training-level7-part2/labguides/source/connecting.rst b/topologies/training-level7-part2/labguides/source/connecting.rst new file mode 100644 index 000000000..10ae589ef --- /dev/null +++ b/topologies/training-level7-part2/labguides/source/connecting.rst @@ -0,0 +1,28 @@ +Connecting +========== + +1. Log into the Arista Test Drive portal with your assigned URL. If you + don’t have one, please see your ATD staff. + +.. image:: images/connecting/nested_connecting_1.png + +2. SSH to the public address assigned to the LabAccess jumphost server (this is the Topology Address shown in the "Welcome to Arista's Test Drive!" picture above). The username is ``arista`` and the password is ``{REPLACE_PWD}``: + + .. code-block:: text + + ssh arista@{unique_address}.topo.testdrive.arista.com + +| + +.. image:: images/connecting/nested_connecting_2.png + :align: center + +| + +3. The LabAccess menu allows users to connect to each device and specify + lab topology. It is recommended to open multiple SSH sessions or use + the Screen option (under the SSH Menu) to jump between devices rapidly. + + You can also Access the LabAccess Menu from your browser by clicking on `Console Access` + +.. image:: images/connecting/nested_connecting_3.png diff --git a/topologies/training-level7-part2/labguides/source/images/connecting/nested_connecting_1.png b/topologies/training-level7-part2/labguides/source/images/connecting/nested_connecting_1.png new file mode 100644 index 000000000..aa76597b8 Binary files /dev/null and b/topologies/training-level7-part2/labguides/source/images/connecting/nested_connecting_1.png differ diff --git a/topologies/training-level7-part2/labguides/source/images/connecting/nested_connecting_2.png b/topologies/training-level7-part2/labguides/source/images/connecting/nested_connecting_2.png new file mode 100644 index 000000000..2c6b51a2b Binary files /dev/null and b/topologies/training-level7-part2/labguides/source/images/connecting/nested_connecting_2.png differ diff --git a/topologies/training-level7-part2/labguides/source/images/connecting/nested_connecting_3.png b/topologies/training-level7-part2/labguides/source/images/connecting/nested_connecting_3.png new file mode 100644 index 000000000..1cc7402a3 Binary files /dev/null and b/topologies/training-level7-part2/labguides/source/images/connecting/nested_connecting_3.png differ diff --git a/topologies/training-level7-part2/labguides/source/images/logo.jpg b/topologies/training-level7-part2/labguides/source/images/logo.jpg new file mode 100644 index 000000000..6eda41f7e Binary files /dev/null and b/topologies/training-level7-part2/labguides/source/images/logo.jpg differ diff --git a/topologies/training-level7-part2/labguides/source/index.rst b/topologies/training-level7-part2/labguides/source/index.rst new file mode 100644 index 000000000..bb76aaa2e --- /dev/null +++ b/topologies/training-level7-part2/labguides/source/index.rst @@ -0,0 +1,8 @@ +Welcome to the Arista Training documentation! +======================================== + +.. toctree:: + :maxdepth: 1 + :caption: EOS Configuration + + connecting.rst diff --git a/topologies/training-level7-part2/topo_build.yml b/topologies/training-level7-part2/topo_build.yml new file mode 100644 index 000000000..061c0421b --- /dev/null +++ b/topologies/training-level7-part2/topo_build.yml @@ -0,0 +1,1110 @@ +host_cpu: 4 +cvp_cpu: 24 +cvp_nodes: 1 +veos_cpu: 2 +nodes: +# Spines DC1 + - spine1-DC1: + ip_addr: 192.168.0.11 + sys_mac: 00:1c:73:b1:c6:01 + neighbors: + # connection to spine2 + - neighborDevice: spine2-DC1 + neighborPort: Ethernet1 + port: Ethernet1 + # connections to leafs + - neighborDevice: leaf1-DC1 + neighborPort: Ethernet3 + port: Ethernet2 + - neighborDevice: leaf2-DC1 + neighborPort: Ethernet3 + port: Ethernet3 + - neighborDevice: leaf3-DC1 + neighborPort: Ethernet3 + port: Ethernet4 + - neighborDevice: leaf4-DC1 + neighborPort: Ethernet3 + port: Ethernet5 + # connections to border-leafs + - neighborDevice: borderleaf1-DC1 + neighborPort: Ethernet3 + port: Ethernet6 + - neighborDevice: borderleaf2-DC1 + neighborPort: Ethernet3 + port: Ethernet7 + - neighborDevice: OOB-DC1 + neighborPort: Ethernet2 + port: Ethernet15 + + - spine2-DC1: + ip_addr: 192.168.0.12 + sys_mac: 00:1c:73:b2:c6:01 + neighbors: + # connection to spine2 + - neighborDevice: spine1-DC1 + neighborPort: Ethernet1 + port: Ethernet1 + # connections to leafs + - neighborDevice: leaf1-DC1 + neighborPort: Ethernet4 + port: Ethernet2 + - neighborDevice: leaf2-DC1 + neighborPort: Ethernet4 + port: Ethernet3 + - neighborDevice: leaf3-DC1 + neighborPort: Ethernet4 + port: Ethernet4 + - neighborDevice: leaf4-DC1 + neighborPort: Ethernet4 + port: Ethernet5 + # connections to border-leafs + - neighborDevice: borderleaf1-DC1 + neighborPort: Ethernet4 + port: Ethernet6 + - neighborDevice: borderleaf2-DC1 + neighborPort: Ethernet4 + port: Ethernet7 + - neighborDevice: OOB-DC1 + neighborPort: Ethernet3 + port: Ethernet15 + + - spine3-DC1: + ip_addr: 192.168.0.13 + sys_mac: 00:1c:73:b3:c6:01 + neighbors: + # connections to leafs + - neighborDevice: leaf1-DC1 + neighborPort: Ethernet5 + port: Ethernet2 + - neighborDevice: leaf2-DC1 + neighborPort: Ethernet5 + port: Ethernet3 + - neighborDevice: leaf3-DC1 + neighborPort: Ethernet5 + port: Ethernet4 + - neighborDevice: leaf4-DC1 + neighborPort: Ethernet5 + port: Ethernet5 + # connections to border-leafs + - neighborDevice: borderleaf1-DC1 + neighborPort: Ethernet5 + port: Ethernet6 + - neighborDevice: borderleaf2-DC1 + neighborPort: Ethernet5 + port: Ethernet7 + - neighborDevice: OOB-DC1 + neighborPort: Ethernet4 + port: Ethernet15 + +# Spines DC2 + + - spine1-DC2: + ip_addr: 192.168.0.14 + sys_mac: 00:1c:73:b4:c6:01 + neighbors: + # connection to spine2 + - neighborDevice: spine2-DC2 + neighborPort: Ethernet1 + port: Ethernet1 + # connections to leafs + - neighborDevice: leaf1-DC2 + neighborPort: Ethernet3 + port: Ethernet2 + - neighborDevice: leaf2-DC2 + neighborPort: Ethernet3 + port: Ethernet3 + - neighborDevice: leaf3-DC2 + neighborPort: Ethernet3 + port: Ethernet4 + - neighborDevice: leaf4-DC2 + neighborPort: Ethernet3 + port: Ethernet5 + # connections to border-leafs + - neighborDevice: borderleaf1-DC2 + neighborPort: Ethernet3 + port: Ethernet6 + - neighborDevice: borderleaf2-DC2 + neighborPort: Ethernet3 + port: Ethernet7 + - neighborDevice: OOB-DC2 + neighborPort: Ethernet2 + port: Ethernet15 + + - spine2-DC2: + ip_addr: 192.168.0.15 + sys_mac: 00:1c:73:b5:c6:01 + neighbors: + # connection to spine2 + - neighborDevice: spine1-DC2 + neighborPort: Ethernet1 + port: Ethernet1 + # connections to leafs + - neighborDevice: leaf1-DC2 + neighborPort: Ethernet4 + port: Ethernet2 + - neighborDevice: leaf2-DC2 + neighborPort: Ethernet4 + port: Ethernet3 + - neighborDevice: leaf3-DC2 + neighborPort: Ethernet4 + port: Ethernet4 + - neighborDevice: leaf4-DC2 + neighborPort: Ethernet4 + port: Ethernet5 + # connections to border-leafs + - neighborDevice: borderleaf1-DC2 + neighborPort: Ethernet4 + port: Ethernet6 + - neighborDevice: borderleaf2-DC2 + neighborPort: Ethernet4 + port: Ethernet7 + - neighborDevice: OOB-DC2 + neighborPort: Ethernet3 + port: Ethernet15 + + - spine3-DC2: + ip_addr: 192.168.0.16 + sys_mac: 00:1c:73:b6:c6:01 + neighbors: + # connections to leafs + - neighborDevice: leaf1-DC2 + neighborPort: Ethernet5 + port: Ethernet2 + - neighborDevice: leaf2-DC2 + neighborPort: Ethernet5 + port: Ethernet3 + - neighborDevice: leaf3-DC2 + neighborPort: Ethernet5 + port: Ethernet4 + - neighborDevice: leaf4-DC2 + neighborPort: Ethernet5 + port: Ethernet5 + # connections to border-leafs + - neighborDevice: borderleaf1-DC2 + neighborPort: Ethernet5 + port: Ethernet6 + - neighborDevice: borderleaf2-DC2 + neighborPort: Ethernet5 + port: Ethernet7 + - neighborDevice: OOB-DC2 + neighborPort: Ethernet4 + port: Ethernet15 + +# Spines DC3 + - spine1-DC3: + ip_addr: 192.168.0.77 + sys_mac: 00:1c:73:17:c6:01 + neighbors: + - neighborDevice: spine2-DC3 + neighborPort: Ethernet3 + port: Ethernet3 + - neighborDevice: spine2-DC3 + neighborPort: Ethernet4 + port: Ethernet4 + - neighborDevice: leaf1-DC3 + neighborPort: Ethernet5 + port: Ethernet5 + - neighborDevice: leaf2-DC3 + neighborPort: Ethernet6 + port: Ethernet6 + - neighborDevice: PE31 + neighborPort: Ethernet3 + port: Ethernet7 + + - spine2-DC3: + ip_addr: 192.168.0.78 + sys_mac: 00:1c:73:18:c6:01 + neighbors: + - neighborDevice: spine1-DC3 + neighborPort: Ethernet3 + port: Ethernet3 + - neighborDevice: spine1-DC3 + neighborPort: Ethernet4 + port: Ethernet4 + - neighborDevice: leaf2-DC3 + neighborPort: Ethernet5 + port: Ethernet5 + - neighborDevice: leaf1-DC3 + neighborPort: Ethernet6 + port: Ethernet6 + - neighborDevice: PE31 + neighborPort: Ethernet4 + port: Ethernet7 + +# Leafs DC1 + - leaf1-DC1: + ip_addr: 192.168.0.21 + sys_mac: 00:1c:73:c1:c6:01 + neighbors: + # connections to leafs + - neighborDevice: leaf2-DC1 + neighborPort: Ethernet1 + port: Ethernet1 + - neighborDevice: leaf2-DC1 + neighborPort: Ethernet2 + port: Ethernet2 + # connections to spines + - neighborDevice: spine1-DC1 + neighborPort: Ethernet2 + port: Ethernet3 + - neighborDevice: spine2-DC1 + neighborPort: Ethernet2 + port: Ethernet4 + - neighborDevice: spine3-DC1 + neighborPort: Ethernet2 + port: Ethernet5 + # connections to host-switches + - neighborDevice: host1-DC1 + neighborPort: Ethernet1 + port: Ethernet6 + - neighborDevice: host1-DC1 + neighborPort: Ethernet3 + port: Ethernet7 + - neighborDevice: OOB-DC1 + neighborPort: Ethernet5 + port: Ethernet15 + + + - leaf2-DC1: + ip_addr: 192.168.0.22 + sys_mac: 00:1c:73:c2:c6:01 + neighbors: + # connections to leafs + - neighborDevice: leaf1-DC1 + neighborPort: Ethernet1 + port: Ethernet1 + - neighborDevice: leaf1-DC1 + neighborPort: Ethernet2 + port: Ethernet2 + # connections to spines + - neighborDevice: spine1-DC1 + neighborPort: Ethernet3 + port: Ethernet3 + - neighborDevice: spine2-DC1 + neighborPort: Ethernet3 + port: Ethernet4 + - neighborDevice: spine3-DC1 + neighborPort: Ethernet3 + port: Ethernet5 + # connections to host-switches + - neighborDevice: host1-DC1 + neighborPort: Ethernet2 + port: Ethernet6 + - neighborDevice: host1-DC1 + neighborPort: Ethernet4 + port: Ethernet7 + - neighborDevice: OOB-DC1 + neighborPort: Ethernet6 + port: Ethernet15 + + + - leaf3-DC1: + ip_addr: 192.168.0.23 + sys_mac: 00:1c:73:c3:c6:01 + neighbors: + # connections to leafs + - neighborDevice: leaf4-DC1 + neighborPort: Ethernet1 + port: Ethernet1 + - neighborDevice: leaf4-DC1 + neighborPort: Ethernet2 + port: Ethernet2 + # connections to spines + - neighborDevice: spine1-DC1 + neighborPort: Ethernet4 + port: Ethernet3 + - neighborDevice: spine2-DC1 + neighborPort: Ethernet4 + port: Ethernet4 + - neighborDevice: spine3-DC1 + neighborPort: Ethernet4 + port: Ethernet5 + # connections to host-switches + - neighborDevice: host2-DC1 + neighborPort: Ethernet1 + port: Ethernet6 + - neighborDevice: host2-DC1 + neighborPort: Ethernet3 + port: Ethernet7 + - neighborDevice: OOB-DC1 + neighborPort: Ethernet7 + port: Ethernet15 + + + - leaf4-DC1: + ip_addr: 192.168.0.24 + sys_mac: 00:1c:73:c4:c6:01 + neighbors: + # connections to leafs + - neighborDevice: leaf3-DC1 + neighborPort: Ethernet1 + port: Ethernet1 + - neighborDevice: leaf3-DC1 + neighborPort: Ethernet2 + port: Ethernet2 + # connections to spines + - neighborDevice: spine1-DC1 + neighborPort: Ethernet5 + port: Ethernet3 + - neighborDevice: spine2-DC1 + neighborPort: Ethernet5 + port: Ethernet4 + - neighborDevice: spine3-DC1 + neighborPort: Ethernet5 + port: Ethernet5 + # connections to host-switches + - neighborDevice: host2-DC1 + neighborPort: Ethernet2 + port: Ethernet6 + - neighborDevice: host2-DC1 + neighborPort: Ethernet4 + port: Ethernet7 + - neighborDevice: OOB-DC1 + neighborPort: Ethernet8 + port: Ethernet15 + + + # Border-leafs + - borderleaf1-DC1: + ip_addr: 192.168.0.25 + sys_mac: 00:1c:73:c5:c6:01 + neighbors: + # connections to Border-leafs + - neighborDevice: borderleaf2-DC1 + neighborPort: Ethernet1 + port: Ethernet1 + - neighborDevice: borderleaf2-DC1 + neighborPort: Ethernet2 + port: Ethernet2 + # connections to spines + - neighborDevice: spine1-DC1 + neighborPort: Ethernet6 + port: Ethernet3 + - neighborDevice: spine2-DC1 + neighborPort: Ethernet6 + port: Ethernet4 + - neighborDevice: spine3-DC1 + neighborPort: Ethernet6 + port: Ethernet5 + - neighborDevice: PE11 + neighborPort: Ethernet2 + port: Ethernet10 + - neighborDevice: PE12 + neighborPort: Ethernet2 + port: Ethernet12 + - neighborDevice: OOB-DC1 + neighborPort: Ethernet9 + port: Ethernet15 + + + + - borderleaf2-DC1: + ip_addr: 192.168.0.26 + sys_mac: 00:1c:73:c6:c6:01 + neighbors: + # connections to Border-leafs + - neighborDevice: borderleaf1-DC1 + neighborPort: Ethernet1 + port: Ethernet1 + - neighborDevice: borderleaf1-DC1 + neighborPort: Ethernet2 + port: Ethernet2 + # connections to spines + - neighborDevice: spine1-DC1 + neighborPort: Ethernet7 + port: Ethernet3 + - neighborDevice: spine2-DC1 + neighborPort: Ethernet7 + port: Ethernet4 + - neighborDevice: spine3-DC1 + neighborPort: Ethernet7 + port: Ethernet5 + - neighborDevice: PE12 + neighborPort: Ethernet3 + port: Ethernet10 + - neighborDevice: PE11 + neighborPort: Ethernet3 + port: Ethernet12 + - neighborDevice: OOB-DC1 + neighborPort: Ethernet10 + port: Ethernet15 + + +# Leafs DC2 + - leaf1-DC2: + ip_addr: 192.168.0.31 + sys_mac: 00:1c:73:d1:c6:01 + neighbors: + # connections to leafs + - neighborDevice: leaf2-DC2 + neighborPort: Ethernet1 + port: Ethernet1 + - neighborDevice: leaf2-DC2 + neighborPort: Ethernet2 + port: Ethernet2 + # connections to spines + - neighborDevice: spine1-DC2 + neighborPort: Ethernet2 + port: Ethernet3 + - neighborDevice: spine2-DC2 + neighborPort: Ethernet2 + port: Ethernet4 + - neighborDevice: spine3-DC2 + neighborPort: Ethernet2 + port: Ethernet5 + # connections to host-switches + - neighborDevice: host1-DC2 + neighborPort: Ethernet1 + port: Ethernet6 + - neighborDevice: host1-DC2 + neighborPort: Ethernet3 + port: Ethernet7 + - neighborDevice: OOB-DC2 + neighborPort: Ethernet5 + port: Ethernet15 + + + - leaf2-DC2: + ip_addr: 192.168.0.32 + sys_mac: 00:1c:73:d2:c6:01 + neighbors: + # connections to leafs + - neighborDevice: leaf1-DC2 + neighborPort: Ethernet1 + port: Ethernet1 + - neighborDevice: leaf1-DC2 + neighborPort: Ethernet2 + port: Ethernet2 + # connections to spines + - neighborDevice: spine1-DC2 + neighborPort: Ethernet3 + port: Ethernet3 + - neighborDevice: spine2-DC2 + neighborPort: Ethernet3 + port: Ethernet4 + - neighborDevice: spine3-DC2 + neighborPort: Ethernet3 + port: Ethernet5 + # connections to host-switches + - neighborDevice: host1-DC2 + neighborPort: Ethernet2 + port: Ethernet6 + - neighborDevice: host1-DC2 + neighborPort: Ethernet4 + port: Ethernet7 + - neighborDevice: OOB-DC2 + neighborPort: Ethernet6 + port: Ethernet15 + + + - leaf3-DC2: + ip_addr: 192.168.0.33 + sys_mac: 00:1c:73:d3:c6:01 + neighbors: + # connections to leafs + - neighborDevice: leaf4-DC2 + neighborPort: Ethernet1 + port: Ethernet1 + - neighborDevice: leaf4-DC2 + neighborPort: Ethernet2 + port: Ethernet2 + # connections to spines + - neighborDevice: spine1-DC2 + neighborPort: Ethernet4 + port: Ethernet3 + - neighborDevice: spine2-DC2 + neighborPort: Ethernet4 + port: Ethernet4 + - neighborDevice: spine3-DC2 + neighborPort: Ethernet4 + port: Ethernet5 + # connections to host-switches + - neighborDevice: host2-DC2 + neighborPort: Ethernet1 + port: Ethernet6 + - neighborDevice: host2-DC2 + neighborPort: Ethernet3 + port: Ethernet7 + - neighborDevice: OOB-DC2 + neighborPort: Ethernet7 + port: Ethernet15 + + + - leaf4-DC2: + ip_addr: 192.168.0.34 + sys_mac: 00:1c:73:d4:c6:01 + neighbors: + # connections to leafs + - neighborDevice: leaf3-DC2 + neighborPort: Ethernet1 + port: Ethernet1 + - neighborDevice: leaf3-DC2 + neighborPort: Ethernet2 + port: Ethernet2 + # connections to spines + - neighborDevice: spine1-DC2 + neighborPort: Ethernet5 + port: Ethernet3 + - neighborDevice: spine2-DC2 + neighborPort: Ethernet5 + port: Ethernet4 + - neighborDevice: spine3-DC2 + neighborPort: Ethernet5 + port: Ethernet5 + # connections to host-switches + - neighborDevice: host2-DC2 + neighborPort: Ethernet2 + port: Ethernet6 + - neighborDevice: host2-DC2 + neighborPort: Ethernet4 + port: Ethernet7 + - neighborDevice: OOB-DC2 + neighborPort: Ethernet8 + port: Ethernet15 + + + # Border-leafs + - borderleaf1-DC2: + ip_addr: 192.168.0.35 + sys_mac: 00:1c:73:d5:c6:01 + neighbors: + # connections to Borderleafs + - neighborDevice: borderleaf2-DC2 + neighborPort: Ethernet1 + port: Ethernet1 + - neighborDevice: borderleaf2-DC2 + neighborPort: Ethernet2 + port: Ethernet2 + # connections to spines + - neighborDevice: spine1-DC2 + neighborPort: Ethernet6 + port: Ethernet3 + - neighborDevice: spine2-DC2 + neighborPort: Ethernet6 + port: Ethernet4 + - neighborDevice: spine3-DC2 + neighborPort: Ethernet6 + port: Ethernet5 + - neighborDevice: PE21 + neighborPort: Ethernet3 + port: Ethernet10 + - neighborDevice: PE22 + neighborPort: Ethernet3 + port: Ethernet12 + - neighborDevice: OOB-DC2 + neighborPort: Ethernet9 + port: Ethernet15 + + - borderleaf2-DC2: + ip_addr: 192.168.0.36 + sys_mac: 00:1c:73:d6:c6:01 + neighbors: + # connections to Borderleafs + - neighborDevice: borderleaf1-DC2 + neighborPort: Ethernet1 + port: Ethernet1 + - neighborDevice: borderleaf1-DC2 + neighborPort: Ethernet2 + port: Ethernet2 + # connections to spines + - neighborDevice: spine1-DC2 + neighborPort: Ethernet7 + port: Ethernet3 + - neighborDevice: spine2-DC2 + neighborPort: Ethernet7 + port: Ethernet4 + - neighborDevice: spine3-DC2 + neighborPort: Ethernet7 + port: Ethernet5 + - neighborDevice: PE22 + neighborPort: Ethernet2 + port: Ethernet10 + - neighborDevice: PE21 + neighborPort: Ethernet2 + port: Ethernet12 + - neighborDevice: OOB-DC2 + neighborPort: Ethernet10 + port: Ethernet15 + +# Leafs DC3 + - leaf1-DC3: + ip_addr: 192.168.0.80 + sys_mac: 00:1c:73:20:c6:01 + neighbors: + - neighborDevice: leaf2-DC3 + neighborPort: Ethernet3 + port: Ethernet3 + - neighborDevice: leaf2-DC3 + neighborPort: Ethernet4 + port: Ethernet4 + - neighborDevice: spine1-DC3 + neighborPort: Ethernet5 + port: Ethernet5 + - neighborDevice: spine2-DC3 + neighborPort: Ethernet6 + port: Ethernet6 + - neighborDevice: host1-DC3 + neighborPort: Ethernet1 + port: Ethernet1 + - neighborDevice: host2-DC3 + neighborPort: Ethernet2 + port: Ethernet2 + + - leaf2-DC3: + ip_addr: 192.168.0.81 + sys_mac: 00:1c:73:21:c6:01 + neighbors: + - neighborDevice: leaf1-DC3 + neighborPort: Ethernet3 + port: Ethernet3 + - neighborDevice: leaf1-DC3 + neighborPort: Ethernet4 + port: Ethernet4 + - neighborDevice: spine2-DC3 + neighborPort: Ethernet5 + port: Ethernet5 + - neighborDevice: spine1-DC3 + neighborPort: Ethernet6 + port: Ethernet6 + - neighborDevice: host2-DC3 + neighborPort: Ethernet1 + port: Ethernet1 + - neighborDevice: host1-DC3 + neighborPort: Ethernet2 + port: Ethernet2 + +# Hosts DC1 + - host1-DC1: + ip_addr: 192.168.0.51 + sys_mac: 00:1c:73:f1:c6:01 + neighbors: + # connections to leafs + - neighborDevice: leaf1-DC1 + neighborPort: Ethernet6 + port: Ethernet1 + - neighborDevice: leaf1-DC1 + neighborPort: Ethernet7 + port: Ethernet3 + - neighborDevice: leaf2-DC1 + neighborPort: Ethernet6 + port: Ethernet2 + - neighborDevice: leaf2-DC1 + neighborPort: Ethernet7 + port: Ethernet4 + - neighborDevice: OOB-DC1 + neighborPort: Ethernet11 + port: Ethernet15 + + - host2-DC1: + ip_addr: 192.168.0.52 + sys_mac: 00:1c:73:f2:c6:01 + neighbors: + # connections to leafs + - neighborDevice: leaf3-DC1 + neighborPort: Ethernet6 + port: Ethernet1 + - neighborDevice: leaf3-DC1 + neighborPort: Ethernet7 + port: Ethernet3 + - neighborDevice: leaf4-DC1 + neighborPort: Ethernet6 + port: Ethernet2 + - neighborDevice: leaf4-DC1 + neighborPort: Ethernet7 + port: Ethernet4 + - neighborDevice: OOB-DC1 + neighborPort: Ethernet12 + port: Ethernet15 + +# Hosts DC2 + - host1-DC2: + ip_addr: 192.168.0.53 + sys_mac: 00:1c:73:f3:c6:01 + neighbors: + # connections to leafs + - neighborDevice: leaf1-DC2 + neighborPort: Ethernet6 + port: Ethernet1 + - neighborDevice: leaf1-DC2 + neighborPort: Ethernet7 + port: Ethernet3 + - neighborDevice: leaf2-DC2 + neighborPort: Ethernet6 + port: Ethernet2 + - neighborDevice: leaf2-DC2 + neighborPort: Ethernet7 + port: Ethernet4 + - neighborDevice: OOB-DC2 + neighborPort: Ethernet11 + port: Ethernet15 + + - host2-DC2: + ip_addr: 192.168.0.54 + sys_mac: 00:1c:73:f4:c6:01 + neighbors: + # connections to leafs + - neighborDevice: leaf3-DC2 + neighborPort: Ethernet6 + port: Ethernet1 + - neighborDevice: leaf3-DC2 + neighborPort: Ethernet7 + port: Ethernet3 + - neighborDevice: leaf4-DC2 + neighborPort: Ethernet6 + port: Ethernet2 + - neighborDevice: leaf4-DC2 + neighborPort: Ethernet7 + port: Ethernet4 + - neighborDevice: OOB-DC2 + neighborPort: Ethernet12 + port: Ethernet15 + +# OOB + - OOB-DC1: + ip_addr: 192.168.0.62 + sys_mac: 00:1c:73:02:c6:01 + neighbors: + - neighborDevice: OOB-CORE + neighborPort: Ethernet1 + port: Ethernet1 + - neighborDevice: spine1-DC1 + neighborPort: Ethernet15 + port: Ethernet2 + - neighborDevice: spine2-DC1 + neighborPort: Ethernet15 + port: Ethernet3 + - neighborDevice: spine3-DC1 + neighborPort: Ethernet15 + port: Ethernet4 + - neighborDevice: leaf1-DC1 + neighborPort: Ethernet15 + port: Ethernet5 + - neighborDevice: leaf2-DC1 + neighborPort: Ethernet15 + port: Ethernet6 + - neighborDevice: leaf3-DC1 + neighborPort: Ethernet15 + port: Ethernet7 + - neighborDevice: leaf4-DC1 + neighborPort: Ethernet15 + port: Ethernet8 + - neighborDevice: borderleaf1-DC1 + neighborPort: Ethernet15 + port: Ethernet9 + - neighborDevice: borderleaf2-DC1 + neighborPort: Ethernet15 + port: Ethernet10 + - neighborDevice: host1-DC1 + neighborPort: Ethernet15 + port: Ethernet11 + - neighborDevice: host2-DC1 + neighborPort: Ethernet15 + port: Ethernet12 + + - OOB-DC2: + ip_addr: 192.168.0.63 + sys_mac: 00:1c:73:03:c6:01 + neighbors: + - neighborDevice: OOB-CORE + neighborPort: Ethernet2 + port: Ethernet1 + - neighborDevice: spine1-DC2 + neighborPort: Ethernet15 + port: Ethernet2 + - neighborDevice: spine2-DC2 + neighborPort: Ethernet15 + port: Ethernet3 + - neighborDevice: spine3-DC2 + neighborPort: Ethernet15 + port: Ethernet4 + - neighborDevice: leaf1-DC2 + neighborPort: Ethernet15 + port: Ethernet5 + - neighborDevice: leaf2-DC2 + neighborPort: Ethernet15 + port: Ethernet6 + - neighborDevice: leaf3-DC2 + neighborPort: Ethernet15 + port: Ethernet7 + - neighborDevice: leaf4-DC2 + neighborPort: Ethernet15 + port: Ethernet8 + - neighborDevice: borderleaf1-DC2 + neighborPort: Ethernet15 + port: Ethernet9 + - neighborDevice: borderleaf2-DC2 + neighborPort: Ethernet15 + port: Ethernet10 + - neighborDevice: host1-DC2 + neighborPort: Ethernet15 + port: Ethernet11 + - neighborDevice: host2-DC2 + neighborPort: Ethernet15 + port: Ethernet12 + + - OOB-CORE: + ip_addr: 192.168.0.61 + sys_mac: 00:1c:73:04:c6:01 + neighbors: + - neighborDevice: OOB-DC1 + neighborPort: Ethernet1 + port: Ethernet1 + - neighborDevice: OOB-DC2 + neighborPort: Ethernet1 + port: Ethernet2 + +# WAN-DC1-Side + - PE11: + ip_addr: 192.168.0.91 + sys_mac: 00:1c:73:91:c6:01 + neighbors: + - neighborDevice: P1 + neighborPort: Ethernet1 + port: Ethernet1 + - neighborDevice: borderleaf1-DC1 + neighborPort: Ethernet10 + port: Ethernet2 + - neighborDevice: borderleaf2-DC1 + neighborPort: Ethernet12 + port: Ethernet3 + - neighborDevice: P2 + neighborPort: Ethernet3 + port: Ethernet4 + - neighborDevice: RR + neighborPort: Ethernet1 + port: Ethernet5 + + - PE12: + ip_addr: 192.168.0.92 + sys_mac: 00:1c:73:92:c6:01 + neighbors: + - neighborDevice: P2 + neighborPort: Ethernet1 + port: Ethernet1 + - neighborDevice: borderleaf1-DC1 + neighborPort: Ethernet12 + port: Ethernet2 + - neighborDevice: borderleaf2-DC1 + neighborPort: Ethernet10 + port: Ethernet3 + - neighborDevice: RR + neighborPort: Ethernet2 + port: Ethernet4 + - neighborDevice: P1 + neighborPort: Ethernet5 + port: Ethernet5 + + - P1: + ip_addr: 192.168.0.93 + sys_mac: 00:1c:73:93:c6:01 + neighbors: + - neighborDevice: PE11 + neighborPort: Ethernet1 + port: Ethernet1 + - neighborDevice: P3 + neighborPort: Ethernet2 + port: Ethernet2 + - neighborDevice: PE31 + neighborPort: Ethernet1 + port: Ethernet3 + - neighborDevice: P2 + neighborPort: Ethernet4 + port: Ethernet4 + - neighborDevice: PE12 + neighborPort: Ethernet5 + port: Ethernet5 + - neighborDevice: RR + neighborPort: Ethernet3 + port: Ethernet6 + + - P2: + ip_addr: 192.168.0.94 + sys_mac: 00:1c:73:94:c6:01 + neighbors: + - neighborDevice: PE12 + neighborPort: Ethernet1 + port: Ethernet1 + - neighborDevice: P4 + neighborPort: Ethernet2 + port: Ethernet2 + - neighborDevice: PE11 + neighborPort: Ethernet4 + port: Ethernet3 + - neighborDevice: P1 + neighborPort: Ethernet4 + port: Ethernet4 + - neighborDevice: RR + neighborPort: Ethernet4 + port: Ethernet5 + +# WAN-DC2-Side + - PE21: + ip_addr: 192.168.0.95 + sys_mac: 00:1c:73:95:c6:01 + neighbors: + - neighborDevice: P3 + neighborPort: Ethernet1 + port: Ethernet1 + - neighborDevice: borderleaf2-DC2 + neighborPort: Ethernet12 + port: Ethernet2 + - neighborDevice: borderleaf1-DC2 + neighborPort: Ethernet10 + port: Ethernet3 + - neighborDevice: P4 + neighborPort: Ethernet3 + port: Ethernet4 + - neighborDevice: RR + neighborPort: Ethernet5 + port: Ethernet5 + + - PE22: + ip_addr: 192.168.0.96 + sys_mac: 00:1c:73:96:c6:01 + neighbors: + - neighborDevice: P4 + neighborPort: Ethernet1 + port: Ethernet1 + - neighborDevice: borderleaf2-DC2 + neighborPort: Ethernet10 + port: Ethernet2 + - neighborDevice: borderleaf1-DC2 + neighborPort: Ethernet12 + port: Ethernet3 + - neighborDevice: RR + neighborPort: Ethernet6 + port: Ethernet4 + - neighborDevice: P3 + neighborPort: Ethernet5 + port: Ethernet5 + + - P3: + ip_addr: 192.168.0.97 + sys_mac: 00:1c:73:97:c6:01 + neighbors: + - neighborDevice: PE21 + neighborPort: Ethernet1 + port: Ethernet1 + - neighborDevice: P1 + neighborPort: Ethernet2 + port: Ethernet2 + - neighborDevice: PE31 + neighborPort: Ethernet2 + port: Ethernet3 + - neighborDevice: P4 + neighborPort: Ethernet4 + port: Ethernet4 + - neighborDevice: PE22 + neighborPort: Ethernet5 + port: Ethernet5 + - neighborDevice: RR + neighborPort: Ethernet7 + port: Ethernet6 + + - P4: + ip_addr: 192.168.0.98 + sys_mac: 00:1c:73:98:c6:01 + neighbors: + - neighborDevice: PE22 + neighborPort: Ethernet1 + port: Ethernet1 + - neighborDevice: P2 + neighborPort: Ethernet2 + port: Ethernet2 + - neighborDevice: PE21 + neighborPort: Ethernet4 + port: Ethernet3 + - neighborDevice: P3 + neighborPort: Ethernet4 + port: Ethernet4 + - neighborDevice: RR + neighborPort: Ethernet8 + port: Ethernet5 + +# WAN-DC3-Side + - PE31: + ip_addr: 192.168.0.99 + sys_mac: 00:1c:73:99:c6:01 + neighbors: + - neighborDevice: P1 + neighborPort: Ethernet3 + port: Ethernet1 + - neighborDevice: P3 + neighborPort: Ethernet3 + port: Ethernet2 + - neighborDevice: spine1-DC3 + neighborPort: Ethernet7 + port: Ethernet3 + - neighborDevice: spine2-DC3 + neighborPort: Ethernet7 + port: Ethernet4 + - neighborDevice: RR + neighborPort: Ethernet9 + port: Ethernet5 + + +# WAN RR + - RR: + ip_addr: 192.168.0.90 + sys_mac: 00:1c:73:90:c6:01 + neighbors: + - neighborDevice: PE11 + neighborPort: Ethernet5 + port: Ethernet1 + - neighborDevice: PE12 + neighborPort: Ethernet4 + port: Ethernet2 + - neighborDevice: P1 + neighborPort: Ethernet6 + port: Ethernet3 + - neighborDevice: P2 + neighborPort: Ethernet5 + port: Ethernet4 + - neighborDevice: PE21 + neighborPort: Ethernet5 + port: Ethernet5 + - neighborDevice: PE22 + neighborPort: Ethernet4 + port: Ethernet6 + - neighborDevice: P3 + neighborPort: Ethernet6 + port: Ethernet7 + - neighborDevice: P4 + neighborPort: Ethernet5 + port: Ethernet8 + - neighborDevice: PE31 + neighborPort: Ethernet5 + port: Ethernet9 + + + + +# Hosts DC3 + - host1-DC3: + ip_addr: 192.168.0.82 + sys_mac: 00:1c:73:22:c6:01 + neighbors: + - neighborDevice: leaf1-DC3 + neighborPort: Ethernet1 + port: Ethernet1 + - neighborDevice: leaf2-DC3 + neighborPort: Ethernet2 + port: Ethernet2 + + - host2-DC3: + ip_addr: 192.168.0.83 + sys_mac: 00:1c:73:23:c6:01 + neighbors: + - neighborDevice: leaf2-DC3 + neighborPort: Ethernet1 + port: Ethernet1 + - neighborDevice: leaf1-DC3 + neighborPort: Ethernet2 + port: Ethernet2 + +# CVX + # - CVX: + # ip_addr: 192.168.0.4 + # sys_mac: 00:1c:73:a4:c6:01 + # neighbors: [] +additional_ssh_nodes: \ No newline at end of file diff --git a/topologies/training-level7-part3/configlets/ATD-INFRA b/topologies/training-level7-part3/configlets/ATD-INFRA index 420852c7c..de87bc743 100644 --- a/topologies/training-level7-part3/configlets/ATD-INFRA +++ b/topologies/training-level7-part3/configlets/ATD-INFRA @@ -1,7 +1,7 @@ vrf instance MGMT ! daemon TerminAttr - exec /usr/bin/TerminAttr -disableaaa -ingestgrpcurl=192.168.0.5:9910 -taillogs -ingestauth=key,atd-lab -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent -ingestvrf=MGMT + exec /usr/bin/TerminAttr -cvcompression=gzip -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent -cvaddr=192.168.0.5:9910 -cvauth=token,/tmp/token -cvvrf=MGMT -taillogs -disableaaa no shutdown ! alias mlag-reload bash /mnt/flash/shut_intfs && sudo shutdown now -r @@ -12,16 +12,18 @@ alias snz show interface counter | nz alias spd show port-channel %1 detail all alias sqnz show interface counter queue | nz alias srnz show interface counter rate | nz -alias intdesc +alias intdesc !! Usage: intdesc interface-name description - 10 config - 20 int %1 - 30 desc %2 + 10 config + 20 int %1 + 30 desc %2 40 exit ! dns domain arista.lab ! -ntp server vrf MGMT 192.168.0.1 iburst source Management1 +service routing protocols model multi-agent +! +ntp server vrf MGMT 192.168.0.1 iburst source Management0 ! radius-server host 192.168.0.1 vrf MGMT key 7 0207165218120E ! @@ -38,7 +40,7 @@ username arista privilege 15 role network-admin secret 5 $1$4VjIjfd1$XkUVulbNDES ! username arista ssh-key ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC+ERvV4GaPq3FzxY8T+5hMF/1T+l8wiPsVCtOrZU4Hy6NCNlAiDBdA/RUtX5/aOu5JvHyPTVHqWJ0qi9BqU3rxCNl/l2/5UZbm9RPzdZ1QCwoYwPB9/j/tYJV8lZdr6t0yGBfxgzD3oW/zF7a+ZtASaMAu7lkgoqPK2pVIGa+Y9ZCsA0Xq756XpLCw+d3pHKHvIkgWLCo9FoeIv8f/bu5u/ztzRE+Nvl+o5add6MxnjsXz3s7BnW2FX6JNjyp0Z+OXjupQc2gcfFvpd/dA2lCNuuaCHkRgyPwIZtWPmNqMRXPp37mlPwV43qDJRVPQkvh0xPxwS35BbzUxWdT+ZLZv ! -ip radius source-interface Management1 +ip radius source-interface Management0 ! ip routing vrf MGMT ! diff --git a/topologies/training-level7-part3/configlets/CVX-BASE b/topologies/training-level7-part3/configlets/CVX-BASE index 0eaa52b8a..f85e7ce1d 100644 --- a/topologies/training-level7-part3/configlets/CVX-BASE +++ b/topologies/training-level7-part3/configlets/CVX-BASE @@ -1,6 +1,6 @@ hostname cvx ! -interface Management1 +interface Management0 vrf MGMT ip address 192.168.0.4/24 ! diff --git a/topologies/training-level7-part3/configlets/DCI-BASE b/topologies/training-level7-part3/configlets/DCI-BASE index 6b493f5b0..435fb7e6e 100644 --- a/topologies/training-level7-part3/configlets/DCI-BASE +++ b/topologies/training-level7-part3/configlets/DCI-BASE @@ -2,7 +2,7 @@ service routing protocols model multi-agent ! hostname DCI ! -interface Management1 +interface Management0 vrf MGMT ip address 192.168.0.76/24 ! diff --git a/topologies/training-level7-part3/configlets/OOB-CORE-BASE b/topologies/training-level7-part3/configlets/OOB-CORE-BASE index 261cdd01b..d20149498 100644 --- a/topologies/training-level7-part3/configlets/OOB-CORE-BASE +++ b/topologies/training-level7-part3/configlets/OOB-CORE-BASE @@ -2,7 +2,7 @@ service routing protocols model multi-agent ! hostname OOB-CORE ! -interface Management1 +interface Management0 vrf MGMT ip address 192.168.0.61/24 ! diff --git a/topologies/training-level7-part3/configlets/OOB-DC1-BASE b/topologies/training-level7-part3/configlets/OOB-DC1-BASE index 2c74bf790..2a8ece18a 100644 --- a/topologies/training-level7-part3/configlets/OOB-DC1-BASE +++ b/topologies/training-level7-part3/configlets/OOB-DC1-BASE @@ -2,7 +2,7 @@ service routing protocols model multi-agent ! hostname OOB-DC1 ! -interface Management1 +interface Management0 vrf MGMT ip address 192.168.0.62/24 ! diff --git a/topologies/training-level7-part3/configlets/OOB-DC2-BASE b/topologies/training-level7-part3/configlets/OOB-DC2-BASE index d3e276624..b3fcab3d1 100644 --- a/topologies/training-level7-part3/configlets/OOB-DC2-BASE +++ b/topologies/training-level7-part3/configlets/OOB-DC2-BASE @@ -2,7 +2,7 @@ service routing protocols model multi-agent ! hostname OOB-DC2 ! -interface Management1 +interface Management0 vrf MGMT ip address 192.168.0.63/24 ! diff --git a/topologies/training-level7-part3/configlets/borderleaf1-DC1-BASE b/topologies/training-level7-part3/configlets/borderleaf1-DC1-BASE index c7eac21d8..d25f6add8 100644 --- a/topologies/training-level7-part3/configlets/borderleaf1-DC1-BASE +++ b/topologies/training-level7-part3/configlets/borderleaf1-DC1-BASE @@ -1,6 +1,6 @@ hostname borderleaf1-DC1 ! -interface Management1 +interface Management0 vrf MGMT ip address 192.168.0.25/24 ! diff --git a/topologies/training-level7-part3/configlets/borderleaf1-DC1-START b/topologies/training-level7-part3/configlets/borderleaf1-DC1-START new file mode 100644 index 000000000..27b9d8576 --- /dev/null +++ b/topologies/training-level7-part3/configlets/borderleaf1-DC1-START @@ -0,0 +1,7 @@ +interface Ethernet12 + no switchport + ip address 10.201.0.1/30 +! +router bgp 65100 + neighbor 10.201.0.2 remote-as 65000 +! \ No newline at end of file diff --git a/topologies/training-level7-part3/configlets/borderleaf1-DC2-BASE b/topologies/training-level7-part3/configlets/borderleaf1-DC2-BASE index 5e4618a7a..d3ca37d56 100644 --- a/topologies/training-level7-part3/configlets/borderleaf1-DC2-BASE +++ b/topologies/training-level7-part3/configlets/borderleaf1-DC2-BASE @@ -1,6 +1,6 @@ hostname borderleaf1-DC2 ! -interface Management1 +interface Management0 vrf MGMT ip address 192.168.0.35/24 ! diff --git a/topologies/training-level7-part3/configlets/borderleaf1-DC2-START b/topologies/training-level7-part3/configlets/borderleaf1-DC2-START index 74d935a52..edb33a410 100644 --- a/topologies/training-level7-part3/configlets/borderleaf1-DC2-START +++ b/topologies/training-level7-part3/configlets/borderleaf1-DC2-START @@ -1,6 +1,6 @@ interface Ethernet12 no switchport ip address 10.201.0.5/30 - -router bgp 65220 - neighbor 10.201.0.6 remote-as 65500 \ No newline at end of file + +router bgp 65200 + neighbor 10.201.0.6 remote-as 65500 diff --git a/topologies/training-level7-part3/configlets/borderleaf2-DC1-BASE b/topologies/training-level7-part3/configlets/borderleaf2-DC1-BASE index a6fbf092d..c342c4cc8 100644 --- a/topologies/training-level7-part3/configlets/borderleaf2-DC1-BASE +++ b/topologies/training-level7-part3/configlets/borderleaf2-DC1-BASE @@ -1,6 +1,6 @@ hostname borderleaf2-DC1 ! -interface Management1 +interface Management0 vrf MGMT ip address 192.168.0.26/24 ! diff --git a/topologies/training-level7-part3/configlets/borderleaf2-DC2-BASE b/topologies/training-level7-part3/configlets/borderleaf2-DC2-BASE index 107e68d98..617be043a 100644 --- a/topologies/training-level7-part3/configlets/borderleaf2-DC2-BASE +++ b/topologies/training-level7-part3/configlets/borderleaf2-DC2-BASE @@ -1,6 +1,6 @@ hostname borderleaf2-DC2 ! -interface Management1 +interface Management0 vrf MGMT ip address 192.168.0.36/24 ! diff --git a/topologies/training-level7-part3/configlets/core1-ISP1-BASE b/topologies/training-level7-part3/configlets/core1-isp1-BASE similarity index 85% rename from topologies/training-level7-part3/configlets/core1-ISP1-BASE rename to topologies/training-level7-part3/configlets/core1-isp1-BASE index 429220cbe..a116d4c3b 100644 --- a/topologies/training-level7-part3/configlets/core1-ISP1-BASE +++ b/topologies/training-level7-part3/configlets/core1-isp1-BASE @@ -2,7 +2,7 @@ service routing protocols model multi-agent ! hostname core1-ISP1 ! -interface Management1 +interface Management0 vrf MGMT ip address 192.168.0.71/24 ! diff --git a/topologies/training-level7/configlets/core1-ISP2-BASE b/topologies/training-level7-part3/configlets/core1-isp2-BASE similarity index 85% rename from topologies/training-level7/configlets/core1-ISP2-BASE rename to topologies/training-level7-part3/configlets/core1-isp2-BASE index 3be412ddf..ac6a9d85b 100644 --- a/topologies/training-level7/configlets/core1-ISP2-BASE +++ b/topologies/training-level7-part3/configlets/core1-isp2-BASE @@ -2,7 +2,7 @@ service routing protocols model multi-agent ! hostname core1-ISP2 ! -interface Management1 +interface Management0 vrf MGMT ip address 192.168.0.73/24 ! diff --git a/topologies/training-level7/configlets/core2-ISP1-BASE b/topologies/training-level7-part3/configlets/core2-isp1-BASE similarity index 85% rename from topologies/training-level7/configlets/core2-ISP1-BASE rename to topologies/training-level7-part3/configlets/core2-isp1-BASE index 2324d0e3a..67e935197 100644 --- a/topologies/training-level7/configlets/core2-ISP1-BASE +++ b/topologies/training-level7-part3/configlets/core2-isp1-BASE @@ -2,7 +2,7 @@ service routing protocols model multi-agent ! hostname core2-ISP1 ! -interface Management1 +interface Management0 vrf MGMT ip address 192.168.0.72/24 ! diff --git a/topologies/training-level7/configlets/core2-ISP2-BASE b/topologies/training-level7-part3/configlets/core2-isp2-BASE similarity index 85% rename from topologies/training-level7/configlets/core2-ISP2-BASE rename to topologies/training-level7-part3/configlets/core2-isp2-BASE index 46490ccd4..ce0c82606 100644 --- a/topologies/training-level7/configlets/core2-ISP2-BASE +++ b/topologies/training-level7-part3/configlets/core2-isp2-BASE @@ -2,7 +2,7 @@ service routing protocols model multi-agent ! hostname core2-ISP2 ! -interface Management1 +interface Management0 vrf MGMT ip address 192.168.0.74/24 ! diff --git a/topologies/training-level7-part3/configlets/host1-DC1-BASE b/topologies/training-level7-part3/configlets/host1-DC1-BASE index 8c8752300..41724a2aa 100644 --- a/topologies/training-level7-part3/configlets/host1-DC1-BASE +++ b/topologies/training-level7-part3/configlets/host1-DC1-BASE @@ -1,156 +1,11 @@ +service routing protocols model multi-agent +! hostname host1-DC1 ! spanning-tree mode none ! -vrf instance OOB -! -ip routing vrf OOB -interface Ethernet15 - vrf OOB - no shutdown - no switchport - ip address 192.168.1.51/24 -ip route vrf OOB 0.0.0.0/0 192.168.1.254 +interface Management0 + vrf MGMT + ip address 192.168.0.51/24 ! -int ethernet 1 - 4 - no shutdown - no ip address - switchport - channel-group 10 mode active -int loopback 0 - ip address 192.168.255.51/32 - -interface port-Channel 10 - no shut - switchport mode trunk - -vlan 10 -name VLAN10 - -vlan 11 -name VLAN11 - -vlan 12 -name VLAN12 - -vlan 13 -name VLAN13 - -vlan 14 -name VLAN14 - -vlan 15 -name VLAN15 - -vlan 16 -name VLAN16 - -vlan 17 -name VLAN17 - -vlan 18 -name VLAN18 - -vlan 19 -name VLAN19 - - -vrf instance VLAN10 -vrf instance VLAN11 -vrf instance VLAN12 -vrf instance VLAN13 -vrf instance VLAN14 -vrf instance VLAN15 -vrf instance VLAN16 -vrf instance VLAN17 -vrf instance VLAN18 -vrf instance VLAN19 - - -ip routing vrf VLAN10 -ip routing vrf VLAN11 -ip routing vrf VLAN12 -ip routing vrf VLAN13 -ip routing vrf VLAN14 -ip routing vrf VLAN15 -ip routing vrf VLAN16 -ip routing vrf VLAN17 -ip routing vrf VLAN18 -ip routing vrf VLAN19 - -interface VLAN10 -vrf VLAN10 -ip address 172.16.10.51/24 -no shutdown - -interface VLAN11 -vrf VLAN11 -ip address 172.16.11.51/24 -no shutdown - -interface VLAN12 -vrf VLAN12 -ip address 172.16.12.51/24 -no shutdown - -interface VLAN13 -vrf VLAN13 -ip address 172.16.13.51/24 -no shutdown - -interface VLAN14 -vrf VLAN14 -ip address 172.16.14.51/24 -no shutdown - -interface VLAN15 -vrf VLAN15 -ip address 172.16.15.51/24 -no shutdown - -interface VLAN16 -vrf VLAN16 -ip address 172.16.16.51/24 -no shutdown - -interface VLAN17 -vrf VLAN17 -ip address 172.16.17.51/24 -no shutdown - -interface VLAN18 -vrf VLAN18 -ip address 172.16.18.51/24 -no shutdown - -interface VLAN19 -vrf VLAN19 -ip address 172.16.19.51/24 -no shutdown - -ip route vrf VLAN10 0.0.0.0/0 172.16.10.254 -!ip route vrf VLAN11 0.0.0.0/0 172.16.11.254 - removed for BGP -ip route vrf VLAN12 0.0.0.0/0 172.16.12.254 -ip route vrf VLAN13 0.0.0.0/0 172.16.13.254 -ip route vrf VLAN14 0.0.0.0/0 172.16.14.254 -ip route vrf VLAN15 0.0.0.0/0 172.16.15.254 -ip route vrf VLAN16 0.0.0.0/0 172.16.16.254 -ip route vrf VLAN17 0.0.0.0/0 172.16.17.254 -ip route vrf VLAN18 0.0.0.0/0 172.16.18.254 -ip route vrf VLAN19 0.0.0.0/0 172.16.19.254 - -router bgp 65151 - vrf VLAN11 - neighbor 172.16.11.21 remote-as 65012 - neighbor 172.16.11.21 maximum-routes 12000 - neighbor 172.16.11.22 remote-as 65012 - neighbor 172.16.11.22 maximum-routes 12000 - redistribute connected - ! - address-family ipv4 - neighbor 172.16.11.21 activate - neighbor 172.16.11.22 activate - -interface lo1 - vrf VLAN11 - ip address 172.16.220.51/24 \ No newline at end of file +ip routing \ No newline at end of file diff --git a/topologies/training-level7-part3/configlets/host1-DC2-BASE b/topologies/training-level7-part3/configlets/host1-DC2-BASE index 24aa8e243..24987f3cc 100644 --- a/topologies/training-level7-part3/configlets/host1-DC2-BASE +++ b/topologies/training-level7-part3/configlets/host1-DC2-BASE @@ -1,139 +1,11 @@ +service routing protocols model multi-agent +! hostname host1-DC2 ! spanning-tree mode none ! -vrf instance OOB -ip routing vrf OOB -interface Ethernet15 - vrf OOB - no shutdown - no switchport - ip address 192.168.2.53/24 -ip route vrf OOB 0.0.0.0/0 192.168.2.254 - -int ethernet 1 - 4 - no shutdown - no ip address - switchport - channel-group 10 mode active -int loopback 0 - ip address 192.168.255.53/32 - -interface port-Channel 10 - no shut - switchport mode trunk - -vlan 20 -name VLAN20 - -vlan 21 -name VLAN21 - -vlan 22 -name VLAN22 - -vlan 23 -name VLAN23 - -vlan 24 -name VLAN24 - -vlan 15 -name VLAN15 - -vlan 16 -name VLAN16 - -vlan 17 -name VLAN17 - -vlan 18 -name VLAN18 - -vlan 19 -name VLAN19 - - -vrf instance VLAN20 -vrf instance VLAN21 -vrf instance VLAN22 -vrf instance VLAN23 -vrf instance VLAN24 -vrf instance VLAN15 -vrf instance VLAN16 -vrf instance VLAN17 -vrf instance VLAN18 -vrf instance VLAN19 - - -ip routing vrf VLAN20 -ip routing vrf VLAN21 -ip routing vrf VLAN22 -ip routing vrf VLAN23 -ip routing vrf VLAN24 -ip routing vrf VLAN15 -ip routing vrf VLAN16 -ip routing vrf VLAN17 -ip routing vrf VLAN18 -ip routing vrf VLAN19 - -interface VLAN20 -vrf VLAN20 -ip address 172.16.20.53/24 -no shutdown - -interface VLAN21 -vrf VLAN21 -ip address 172.16.21.53/24 -no shutdown - -interface VLAN22 -vrf VLAN22 -ip address 172.16.22.53/24 -no shutdown - -interface VLAN23 -vrf VLAN23 -ip address 172.16.23.53/24 -no shutdown - -interface VLAN24 -vrf VLAN24 -ip address 172.16.24.53/24 -no shutdown - -interface VLAN15 -vrf VLAN15 -ip address 172.16.15.53/24 -no shutdown - -interface VLAN16 -vrf VLAN16 -ip address 172.16.16.53/24 -no shutdown - -interface VLAN17 -vrf VLAN17 -ip address 172.16.17.53/24 -no shutdown - -interface VLAN18 -vrf VLAN18 -ip address 172.16.18.53/24 -no shutdown - -interface VLAN19 -vrf VLAN19 -ip address 172.16.19.53/24 -no shutdown - -ip route vrf VLAN20 0.0.0.0/0 172.16.20.254 -ip route vrf VLAN21 0.0.0.0/0 172.16.21.254 -ip route vrf VLAN22 0.0.0.0/0 172.16.22.254 -ip route vrf VLAN23 0.0.0.0/0 172.16.23.254 -ip route vrf VLAN24 0.0.0.0/0 172.16.24.254 -ip route vrf VLAN15 0.0.0.0/0 172.16.15.254 -ip route vrf VLAN16 0.0.0.0/0 172.16.16.254 -ip route vrf VLAN17 0.0.0.0/0 172.16.17.254 -ip route vrf VLAN18 0.0.0.0/0 172.16.18.254 -ip route vrf VLAN19 0.0.0.0/0 172.16.19.254 \ No newline at end of file +interface Management0 + vrf MGMT + ip address 192.168.0.53/24 +! +ip routing diff --git a/topologies/training-level7-part3/configlets/host1-DC3-BASE b/topologies/training-level7-part3/configlets/host1-DC3-BASE index e10cd64f0..8efae5d91 100644 --- a/topologies/training-level7-part3/configlets/host1-DC3-BASE +++ b/topologies/training-level7-part3/configlets/host1-DC3-BASE @@ -2,7 +2,7 @@ hostname host1-DC3 ! spanning-tree mode none ! -interface Management1 +interface Management0 vrf MGMT ip address 192.168.0.82/24 ! diff --git a/topologies/training-level7-part3/configlets/host1-DC3-START b/topologies/training-level7-part3/configlets/host1-DC3-START index c6f3d93ed..80198329a 100644 --- a/topologies/training-level7-part3/configlets/host1-DC3-START +++ b/topologies/training-level7-part3/configlets/host1-DC3-START @@ -122,7 +122,7 @@ vrf VLAN19 ip address 172.16.19.82/24 no shutdown -interface Ethernet1 +int ethernet 1 mtu 9100 switchport trunk allowed vlan 130-134 switchport mode trunk diff --git a/topologies/training-level7-part3/configlets/host2-DC1-BASE b/topologies/training-level7-part3/configlets/host2-DC1-BASE index 3de7f3c10..651c3ae6e 100644 --- a/topologies/training-level7-part3/configlets/host2-DC1-BASE +++ b/topologies/training-level7-part3/configlets/host2-DC1-BASE @@ -1,145 +1,12 @@ +service routing protocols model multi-agent +! hostname host2-DC1 ! spanning-tree mode none ! -vrf instance OOB -ip routing vrf OOB -interface Ethernet15 - vrf OOB - no shutdown - no switchport - ip address 192.168.1.52/24 -ip route vrf OOB 0.0.0.0/0 192.168.1.254 - -int ethernet 1 - 4 - no shutdown - no ip address - switchport - channel-group 10 mode active -int loopback 0 - ip address 192.168.255.51/32 - -interface port-Channel 10 - no shut - switchport mode trunk - -vlan 110 -name VLAN110 - -vlan 111 -name VLAN111 - -vlan 112 -name VLAN112 - -vlan 113 -name VLAN113 - -vlan 114 -name VLAN114 - -vlan 15 -name VLAN15 - -vlan 16 -name VLAN16 - -vlan 17 -name VLAN17 - -vlan 18 -name VLAN18 - -vlan 19 -name VLAN19 - - -vrf instance VLAN110 -vrf instance VLAN111 -vrf instance VLAN112 -vrf instance VLAN113 -vrf instance VLAN114 -vrf instance VLAN15 -vrf instance VLAN16 -vrf instance VLAN17 -vrf instance VLAN18 -vrf instance VLAN19 - - -interface VLAN110 -vrf VLAN110 -ip address 172.16.110.52/24 -no shutdown - -interface VLAN111 -vrf VLAN111 -ip address 172.16.111.52/24 -no shutdown - -interface VLAN112 -vrf VLAN112 -ip address 172.16.112.52/24 -no shutdown - -interface VLAN113 -vrf VLAN113 -ip address 172.16.113.52/24 -no shutdown - -interface VLAN114 -vrf VLAN114 -ip address 172.16.114.52/24 -no shutdown - -interface VLAN15 -vrf VLAN15 -ip address 172.16.15.52/24 -no shutdown - -interface VLAN16 -vrf VLAN16 -ip address 172.16.16.52/24 -no shutdown - -interface VLAN17 -vrf VLAN17 -ip address 172.16.17.52/24 -no shutdown - -interface VLAN18 -vrf VLAN18 -ip address 172.16.18.52/24 -no shutdown - -interface VLAN19 -vrf VLAN19 -ip address 172.16.19.52/24 -no shutdown - -ip routing vrf VLAN110 -ip routing vrf VLAN111 -ip routing vrf VLAN112 -ip routing vrf VLAN113 -ip routing vrf VLAN114 -ip routing vrf VLAN15 -ip routing vrf VLAN16 -ip routing vrf VLAN17 -ip routing vrf VLAN18 -ip routing vrf VLAN19 - - - -ip route vrf VLAN110 0.0.0.0/0 172.16.110.254 -ip route vrf VLAN111 0.0.0.0/0 172.16.111.254 -ip route vrf VLAN112 0.0.0.0/0 172.16.112.254 -ip route vrf VLAN113 0.0.0.0/0 172.16.113.254 -ip route vrf VLAN114 0.0.0.0/0 172.16.114.254 -ip route vrf VLAN15 0.0.0.0/0 172.16.15.254 -ip route vrf VLAN16 0.0.0.0/0 172.16.16.254 -ip route vrf VLAN17 0.0.0.0/0 172.16.17.254 -ip route vrf VLAN18 0.0.0.0/0 172.16.18.254 -ip route vrf VLAN19 0.0.0.0/0 172.16.19.254 +interface Management0 + vrf MGMT + ip address 192.168.0.52/24 +! +ip routing -interface lo1 - vrf VLAN111 - ip address 172.16.221.52/24 diff --git a/topologies/training-level7-part3/configlets/host2-DC2-BASE b/topologies/training-level7-part3/configlets/host2-DC2-BASE index c4cc254a7..17a25b9e0 100644 --- a/topologies/training-level7-part3/configlets/host2-DC2-BASE +++ b/topologies/training-level7-part3/configlets/host2-DC2-BASE @@ -1,140 +1,12 @@ +service routing protocols model multi-agent +! hostname host2-DC2 ! spanning-tree mode none ! -vrf instance OOB -ip routing vrf OOB -interface Ethernet15 - vrf OOB - no shutdown - no switchport - ip address 192.168.2.54/24 -ip route vrf OOB 0.0.0.0/0 192.168.2.254 - - -int ethernet 1 - 4 - no shutdown - no ip address - switchport - channel-group 10 mode active -int loopback 0 - ip address 192.168.255.54/32 - -interface port-Channel 10 - no shut - switchport mode trunk - -vlan 120 -name VLAN120 - -vlan 121 -name VLAN121 - -vlan 122 -name VLAN122 - -vlan 123 -name VLAN123 - -vlan 124 -name VLAN124 - -vlan 15 -name VLAN15 - -vlan 16 -name VLAN16 - -vlan 17 -name VLAN17 - -vlan 18 -name VLAN18 - -vlan 19 -name VLAN19 - - -vrf instance VLAN120 -vrf instance VLAN121 -vrf instance VLAN122 -vrf instance VLAN123 -vrf instance VLAN124 -vrf instance VLAN15 -vrf instance VLAN16 -vrf instance VLAN17 -vrf instance VLAN18 -vrf instance VLAN19 - - -ip routing vrf VLAN120 -ip routing vrf VLAN121 -ip routing vrf VLAN122 -ip routing vrf VLAN123 -ip routing vrf VLAN124 -ip routing vrf VLAN15 -ip routing vrf VLAN16 -ip routing vrf VLAN17 -ip routing vrf VLAN18 -ip routing vrf VLAN19 - -interface VLAN120 -vrf VLAN120 -ip address 172.16.120.54/24 -no shutdown - -interface VLAN121 -vrf VLAN121 -ip address 172.16.121.54/24 -no shutdown - -interface VLAN122 -vrf VLAN122 -ip address 172.16.122.54/24 -no shutdown - -interface VLAN123 -vrf VLAN123 -ip address 172.16.123.54/24 -no shutdown - -interface VLAN124 -vrf VLAN124 -ip address 172.16.124.54/24 -no shutdown - -interface VLAN15 -vrf VLAN15 -ip address 172.16.15.54/24 -no shutdown - -interface VLAN16 -vrf VLAN16 -ip address 172.16.16.54/24 -no shutdown - -interface VLAN17 -vrf VLAN17 -ip address 172.16.17.54/24 -no shutdown - -interface VLAN18 -vrf VLAN18 -ip address 172.16.18.54/24 -no shutdown - -interface VLAN19 -vrf VLAN19 -ip address 172.16.19.54/24 -no shutdown +interface Management0 + vrf MGMT + ip address 192.168.0.54/24 +! +ip routing -ip route vrf VLAN120 0.0.0.0/0 172.16.120.254 -ip route vrf VLAN121 0.0.0.0/0 172.16.121.254 -ip route vrf VLAN122 0.0.0.0/0 172.16.122.254 -ip route vrf VLAN123 0.0.0.0/0 172.16.123.254 -ip route vrf VLAN124 0.0.0.0/0 172.16.124.254 -ip route vrf VLAN15 0.0.0.0/0 172.16.15.254 -ip route vrf VLAN16 0.0.0.0/0 172.16.16.254 -ip route vrf VLAN17 0.0.0.0/0 172.16.17.254 -ip route vrf VLAN18 0.0.0.0/0 172.16.18.254 -ip route vrf VLAN19 0.0.0.0/0 172.16.19.254 \ No newline at end of file diff --git a/topologies/training-level7-part3/configlets/host2-DC3-BASE b/topologies/training-level7-part3/configlets/host2-DC3-BASE index 6674c8d8b..9ae4043b1 100644 --- a/topologies/training-level7-part3/configlets/host2-DC3-BASE +++ b/topologies/training-level7-part3/configlets/host2-DC3-BASE @@ -2,7 +2,7 @@ hostname host2-DC3 ! spanning-tree mode none ! -interface Management1 +interface Management0 vrf MGMT ip address 192.168.0.83/24 ! diff --git a/topologies/training-level7-part3/configlets/host2-DC3-START b/topologies/training-level7-part3/configlets/host2-DC3-START index 3d4afc835..4b652246e 100644 --- a/topologies/training-level7-part3/configlets/host2-DC3-START +++ b/topologies/training-level7-part3/configlets/host2-DC3-START @@ -122,23 +122,13 @@ vrf VLAN19 ip address 172.16.19.82/24 no shutdown -## additional config - -int ethernet 1 -mtu 9100 -no shutdown -no ip address -switchport -switchport mode trunk -switchport trunk allowed vlan 15-19 - -int ethernet 2 -mtu 9100 -no shutdown -no ip address -switchport -switchport mode trunk -switchport trunk allowed vlan 15-19 +interface Ethernet1 + switchport access vlan 130 + mtu 9098 +! +interface Ethernet2 + switchport access vlan 130 + mtu 9098 ! interface Vlan15 vrf VLAN15 diff --git a/topologies/training-level7-part3/configlets/internet-BASE b/topologies/training-level7-part3/configlets/internet-BASE index 8c6844df1..fc0413b12 100644 --- a/topologies/training-level7-part3/configlets/internet-BASE +++ b/topologies/training-level7-part3/configlets/internet-BASE @@ -2,7 +2,7 @@ service routing protocols model multi-agent ! hostname internet ! -interface Management1 +interface Management0 vrf MGMT ip address 192.168.0.75/24 ! diff --git a/topologies/training-level7-part3/configlets/leaf1-DC1-BASE b/topologies/training-level7-part3/configlets/leaf1-DC1-BASE index 985847d82..45f9433c8 100644 --- a/topologies/training-level7-part3/configlets/leaf1-DC1-BASE +++ b/topologies/training-level7-part3/configlets/leaf1-DC1-BASE @@ -1,6 +1,6 @@ hostname leaf1-DC1 ! -interface Management1 +interface Management0 vrf MGMT ip address 192.168.0.21/24 ! diff --git a/topologies/training-level7-part3/configlets/leaf1-DC2-BASE b/topologies/training-level7-part3/configlets/leaf1-DC2-BASE index 6bc4e992b..0cf772a02 100644 --- a/topologies/training-level7-part3/configlets/leaf1-DC2-BASE +++ b/topologies/training-level7-part3/configlets/leaf1-DC2-BASE @@ -1,6 +1,6 @@ hostname leaf1-DC2 ! -interface Management1 +interface Management0 vrf MGMT ip address 192.168.0.31/24 ! diff --git a/topologies/training-level7-part3/configlets/leaf1-DC3-BASE b/topologies/training-level7-part3/configlets/leaf1-DC3-BASE index 32634eb75..24970ecc5 100644 --- a/topologies/training-level7-part3/configlets/leaf1-DC3-BASE +++ b/topologies/training-level7-part3/configlets/leaf1-DC3-BASE @@ -1,6 +1,6 @@ hostname leaf1-DC3 ! -interface Management1 +interface Management0 vrf MGMT ip address 192.168.0.80/24 ! diff --git a/topologies/training-level7-part3/configlets/leaf2-DC1-BASE b/topologies/training-level7-part3/configlets/leaf2-DC1-BASE index b59439779..4937708dd 100644 --- a/topologies/training-level7-part3/configlets/leaf2-DC1-BASE +++ b/topologies/training-level7-part3/configlets/leaf2-DC1-BASE @@ -1,6 +1,6 @@ hostname leaf2-DC1 ! -interface Management1 +interface Management0 vrf MGMT ip address 192.168.0.22/24 ! diff --git a/topologies/training-level7-part3/configlets/leaf2-DC2-BASE b/topologies/training-level7-part3/configlets/leaf2-DC2-BASE index 9ea311fea..faa5f3f3a 100644 --- a/topologies/training-level7-part3/configlets/leaf2-DC2-BASE +++ b/topologies/training-level7-part3/configlets/leaf2-DC2-BASE @@ -1,6 +1,6 @@ hostname leaf2-DC2 ! -interface Management1 +interface Management0 vrf MGMT ip address 192.168.0.32/24 ! diff --git a/topologies/training-level7-part3/configlets/leaf2-DC3-BASE b/topologies/training-level7-part3/configlets/leaf2-DC3-BASE index 07d0b04f8..88941c209 100644 --- a/topologies/training-level7-part3/configlets/leaf2-DC3-BASE +++ b/topologies/training-level7-part3/configlets/leaf2-DC3-BASE @@ -1,6 +1,6 @@ hostname leaf2-DC3 ! -interface Management1 +interface Management0 vrf MGMT ip address 192.168.0.81/24 ! diff --git a/topologies/training-level7-part3/configlets/leaf3-DC1-BASE b/topologies/training-level7-part3/configlets/leaf3-DC1-BASE index c5d02fa93..b71e2e86d 100644 --- a/topologies/training-level7-part3/configlets/leaf3-DC1-BASE +++ b/topologies/training-level7-part3/configlets/leaf3-DC1-BASE @@ -1,6 +1,6 @@ hostname leaf3-DC1 ! -interface Management1 +interface Management0 vrf MGMT ip address 192.168.0.23/24 ! diff --git a/topologies/training-level7-part3/configlets/leaf3-DC2-BASE b/topologies/training-level7-part3/configlets/leaf3-DC2-BASE index 49eb3ae57..262a9cabe 100644 --- a/topologies/training-level7-part3/configlets/leaf3-DC2-BASE +++ b/topologies/training-level7-part3/configlets/leaf3-DC2-BASE @@ -1,6 +1,6 @@ hostname leaf3-DC2 ! -interface Management1 +interface Management0 vrf MGMT ip address 192.168.0.33/24 ! diff --git a/topologies/training-level7-part3/configlets/leaf4-DC1-BASE b/topologies/training-level7-part3/configlets/leaf4-DC1-BASE index 8cd7c0153..e317855e9 100644 --- a/topologies/training-level7-part3/configlets/leaf4-DC1-BASE +++ b/topologies/training-level7-part3/configlets/leaf4-DC1-BASE @@ -1,6 +1,6 @@ hostname leaf4-DC1 ! -interface Management1 +interface Management0 vrf MGMT ip address 192.168.0.24/24 ! diff --git a/topologies/training-level7-part3/configlets/leaf4-DC2-BASE b/topologies/training-level7-part3/configlets/leaf4-DC2-BASE index 0921d6601..c1b25eb45 100644 --- a/topologies/training-level7-part3/configlets/leaf4-DC2-BASE +++ b/topologies/training-level7-part3/configlets/leaf4-DC2-BASE @@ -1,6 +1,6 @@ hostname leaf4-DC2 ! -interface Management1 +interface Management0 vrf MGMT ip address 192.168.0.34/24 ! diff --git a/topologies/training-level7-part3/configlets/spine1-DC1-BASE b/topologies/training-level7-part3/configlets/spine1-DC1-BASE index 420da14df..153b74f2c 100644 --- a/topologies/training-level7-part3/configlets/spine1-DC1-BASE +++ b/topologies/training-level7-part3/configlets/spine1-DC1-BASE @@ -1,6 +1,6 @@ hostname spine1-DC1 ! -interface Management1 +interface Management0 vrf MGMT ip address 192.168.0.11/24 ! diff --git a/topologies/training-level7-part3/configlets/spine1-DC2-BASE b/topologies/training-level7-part3/configlets/spine1-DC2-BASE index 98609ea23..dff91254c 100644 --- a/topologies/training-level7-part3/configlets/spine1-DC2-BASE +++ b/topologies/training-level7-part3/configlets/spine1-DC2-BASE @@ -1,6 +1,6 @@ hostname spine1-DC2 ! -interface Management1 +interface Management0 vrf MGMT ip address 192.168.0.14/24 ! diff --git a/topologies/training-level7-part3/configlets/spine1-DC3-BASE b/topologies/training-level7-part3/configlets/spine1-DC3-BASE index c8edeb06c..7edf1b6ff 100644 --- a/topologies/training-level7-part3/configlets/spine1-DC3-BASE +++ b/topologies/training-level7-part3/configlets/spine1-DC3-BASE @@ -1,6 +1,6 @@ hostname spine1-DC3 ! -interface Management1 +interface Management0 vrf MGMT ip address 192.168.0.77/24 ! diff --git a/topologies/training-level7-part3/configlets/spine2-DC1-BASE b/topologies/training-level7-part3/configlets/spine2-DC1-BASE index 52411fe04..d9b12344f 100644 --- a/topologies/training-level7-part3/configlets/spine2-DC1-BASE +++ b/topologies/training-level7-part3/configlets/spine2-DC1-BASE @@ -1,6 +1,6 @@ hostname spine2-DC1 ! -interface Management1 +interface Management0 vrf MGMT ip address 192.168.0.12/24 ! diff --git a/topologies/training-level7-part3/configlets/spine2-DC2-BASE b/topologies/training-level7-part3/configlets/spine2-DC2-BASE index ead1990a6..0a5209409 100644 --- a/topologies/training-level7-part3/configlets/spine2-DC2-BASE +++ b/topologies/training-level7-part3/configlets/spine2-DC2-BASE @@ -1,6 +1,6 @@ hostname spine2-DC2 ! -interface Management1 +interface Management0 vrf MGMT ip address 192.168.0.15/24 ! diff --git a/topologies/training-level7-part3/configlets/spine2-DC3-BASE b/topologies/training-level7-part3/configlets/spine2-DC3-BASE index 3a8187ae6..cf74a4f02 100644 --- a/topologies/training-level7-part3/configlets/spine2-DC3-BASE +++ b/topologies/training-level7-part3/configlets/spine2-DC3-BASE @@ -1,6 +1,6 @@ hostname spine2-DC3 ! -interface Management1 +interface Management0 vrf MGMT ip address 192.168.0.78/24 ! diff --git a/topologies/training-level7-part3/configlets/spine3-DC1-BASE b/topologies/training-level7-part3/configlets/spine3-DC1-BASE index 17d9b05bf..87d85a6c7 100644 --- a/topologies/training-level7-part3/configlets/spine3-DC1-BASE +++ b/topologies/training-level7-part3/configlets/spine3-DC1-BASE @@ -1,6 +1,6 @@ hostname spine3-DC1 ! -interface Management1 +interface Management0 vrf MGMT ip address 192.168.0.13/24 ! diff --git a/topologies/training-level7-part3/configlets/spine3-DC2-BASE b/topologies/training-level7-part3/configlets/spine3-DC2-BASE index 0d73d5286..d3b9c4d00 100644 --- a/topologies/training-level7-part3/configlets/spine3-DC2-BASE +++ b/topologies/training-level7-part3/configlets/spine3-DC2-BASE @@ -1,6 +1,6 @@ hostname spine3-DC2 ! -interface Management1 +interface Management0 vrf MGMT ip address 192.168.0.16/24 ! diff --git a/topologies/training-level7-part3/files/apps/uilanding/modules.yaml b/topologies/training-level7-part3/files/apps/uilanding/modules.yaml index 88a1ddfe3..ad03ca750 100644 --- a/topologies/training-level7-part3/files/apps/uilanding/modules.yaml +++ b/topologies/training-level7-part3/files/apps/uilanding/modules.yaml @@ -34,3 +34,4 @@ topology: Host2: coords: "589,647,774,733" ip: "192.168.0.52" + servers: diff --git a/topologies/training-level7-part3/files/cvp/cvp_info.yaml b/topologies/training-level7-part3/files/cvp/cvp_info.yaml index c8bdc5d9e..db1c8461a 100644 --- a/topologies/training-level7-part3/files/cvp/cvp_info.yaml +++ b/topologies/training-level7-part3/files/cvp/cvp_info.yaml @@ -154,16 +154,16 @@ cvp_info: - host2-DC3-BASE - host2-DC3-START core1-isp1: - - core1-ISP1-BASE + - core1-isp1-BASE - core1-ISP1-START core2-isp1: - - core2-ISP1-BASE + - core2-isp1-BASE - core2-ISP1-START core1-isp2: - - core1-ISP2-BASE + - core1-isp2-BASE - core1-ISP2-START core2-isp2: - - core2-ISP2-BASE + - core2-isp2-BASE - core2-ISP2-START internet: - internet-BASE diff --git a/topologies/training-level7-part3/topo_build.yml b/topologies/training-level7-part3/topo_build.yml index 39ae928d6..04bf3f4ac 100644 --- a/topologies/training-level7-part3/topo_build.yml +++ b/topologies/training-level7-part3/topo_build.yml @@ -283,7 +283,7 @@ nodes: neighborPort: Ethernet3 port: Ethernet4 - neighborDevice: spine3-DC1 - neighborPort: Ethernet2 + neighborPort: Ethernet3 port: Ethernet5 # connections to host-switches - neighborDevice: host1-DC1 @@ -343,10 +343,10 @@ nodes: port: Ethernet2 # connections to spines - neighborDevice: spine1-DC1 - neighborPort: Ethernet4 + neighborPort: Ethernet5 port: Ethernet3 - neighborDevice: spine2-DC1 - neighborPort: Ethernet4 + neighborPort: Ethernet5 port: Ethernet4 - neighborDevice: spine3-DC1 neighborPort: Ethernet5 @@ -398,9 +398,6 @@ nodes: - neighborDevice: OOB-DC1 neighborPort: Ethernet9 port: Ethernet15 - - - - borderleaf2-DC1: ip_addr: 192.168.0.26 sys_mac: 00:1c:73:c6:c6:01 @@ -469,8 +466,6 @@ nodes: - neighborDevice: OOB-DC2 neighborPort: Ethernet5 port: Ethernet15 - - - leaf2-DC2: ip_addr: 192.168.0.32 sys_mac: 00:1c:73:d2:c6:01 @@ -490,7 +485,7 @@ nodes: neighborPort: Ethernet3 port: Ethernet4 - neighborDevice: spine3-DC2 - neighborPort: Ethernet2 + neighborPort: Ethernet3 port: Ethernet5 # connections to host-switches - neighborDevice: host1-DC2 @@ -502,8 +497,6 @@ nodes: - neighborDevice: OOB-DC2 neighborPort: Ethernet6 port: Ethernet15 - - - leaf3-DC2: ip_addr: 192.168.0.33 sys_mac: 00:1c:73:d3:c6:01 @@ -535,8 +528,6 @@ nodes: - neighborDevice: OOB-DC2 neighborPort: Ethernet7 port: Ethernet15 - - - leaf4-DC2: ip_addr: 192.168.0.34 sys_mac: 00:1c:73:d4:c6:01 @@ -550,10 +541,10 @@ nodes: port: Ethernet2 # connections to spines - neighborDevice: spine1-DC2 - neighborPort: Ethernet4 + neighborPort: Ethernet5 port: Ethernet3 - neighborDevice: spine2-DC2 - neighborPort: Ethernet4 + neighborPort: Ethernet5 port: Ethernet4 - neighborDevice: spine3-DC2 neighborPort: Ethernet5 @@ -695,16 +686,16 @@ nodes: neighbors: # connections to leafs - neighborDevice: leaf1-DC1 - neighborPort: Ethernet5 + neighborPort: Ethernet6 port: Ethernet1 - neighborDevice: leaf1-DC1 - neighborPort: Ethernet6 + neighborPort: Ethernet7 port: Ethernet3 - neighborDevice: leaf2-DC1 - neighborPort: Ethernet5 + neighborPort: Ethernet6 port: Ethernet2 - neighborDevice: leaf2-DC1 - neighborPort: Ethernet6 + neighborPort: Ethernet7 port: Ethernet4 - neighborDevice: OOB-DC1 neighborPort: Ethernet11 @@ -716,16 +707,16 @@ nodes: neighbors: # connections to leafs - neighborDevice: leaf3-DC1 - neighborPort: Ethernet5 + neighborPort: Ethernet6 port: Ethernet1 - neighborDevice: leaf3-DC1 - neighborPort: Ethernet6 + neighborPort: Ethernet7 port: Ethernet3 - neighborDevice: leaf4-DC1 - neighborPort: Ethernet5 + neighborPort: Ethernet6 port: Ethernet2 - neighborDevice: leaf4-DC1 - neighborPort: Ethernet6 + neighborPort: Ethernet7 port: Ethernet4 - neighborDevice: OOB-DC1 neighborPort: Ethernet12 @@ -738,16 +729,16 @@ nodes: neighbors: # connections to leafs - neighborDevice: leaf1-DC2 - neighborPort: Ethernet5 + neighborPort: Ethernet6 port: Ethernet1 - neighborDevice: leaf1-DC2 - neighborPort: Ethernet6 + neighborPort: Ethernet7 port: Ethernet3 - neighborDevice: leaf2-DC2 - neighborPort: Ethernet5 + neighborPort: Ethernet6 port: Ethernet2 - neighborDevice: leaf2-DC2 - neighborPort: Ethernet6 + neighborPort: Ethernet7 port: Ethernet4 - neighborDevice: OOB-DC2 neighborPort: Ethernet11 @@ -759,16 +750,16 @@ nodes: neighbors: # connections to leafs - neighborDevice: leaf3-DC2 - neighborPort: Ethernet5 + neighborPort: Ethernet6 port: Ethernet1 - neighborDevice: leaf3-DC2 - neighborPort: Ethernet6 + neighborPort: Ethernet7 port: Ethernet3 - neighborDevice: leaf4-DC2 - neighborPort: Ethernet5 + neighborPort: Ethernet6 port: Ethernet2 - neighborDevice: leaf4-DC2 - neighborPort: Ethernet6 + neighborPort: Ethernet7 port: Ethernet4 - neighborDevice: OOB-DC2 neighborPort: Ethernet12 @@ -780,7 +771,7 @@ nodes: sys_mac: 00:1c:73:02:c6:01 neighbors: - neighborDevice: OOB-CORE - neighborPort: Ethernet 1 + neighborPort: Ethernet1 port: Ethernet1 - neighborDevice: spine1-DC1 neighborPort: Ethernet15 @@ -821,7 +812,7 @@ nodes: sys_mac: 00:1c:73:03:c6:01 neighbors: - neighborDevice: OOB-CORE - neighborPort: Ethernet 2 + neighborPort: Ethernet2 port: Ethernet1 - neighborDevice: spine1-DC2 neighborPort: Ethernet15 @@ -918,7 +909,7 @@ nodes: neighborPort: Ethernet10 port: Ethernet10 - neighborDevice: borderleaf1-DC1 - neighborPort: Ethernet1 + neighborPort: Ethernet11 port: Ethernet11 - core2-isp2: @@ -955,10 +946,10 @@ nodes: - neighborDevice: core2-isp2 neighborPort: Ethernet2 port: Ethernet4 - - neighborDevice: Spine1-DC3 + - neighborDevice: spine1-DC3 neighborPort: Ethernet1 port: Ethernet5 - - neighborDevice: Spine2-DC3 + - neighborDevice: spine2-DC3 neighborPort: Ethernet1 port: Ethernet6 @@ -1008,4 +999,6 @@ nodes: # ip_addr: 192.168.0.4 # sys_mac: 00:1c:73:a4:c6:01 # neighbors: [] -additional_ssh_nodes: \ No newline at end of file +additional_ssh_nodes: +servers: +additional_clab_nodes: diff --git a/topologies/training-level7/configlets/ATD-INFRA b/topologies/training-level7/configlets/ATD-INFRA index 420852c7c..de87bc743 100644 --- a/topologies/training-level7/configlets/ATD-INFRA +++ b/topologies/training-level7/configlets/ATD-INFRA @@ -1,7 +1,7 @@ vrf instance MGMT ! daemon TerminAttr - exec /usr/bin/TerminAttr -disableaaa -ingestgrpcurl=192.168.0.5:9910 -taillogs -ingestauth=key,atd-lab -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent -ingestvrf=MGMT + exec /usr/bin/TerminAttr -cvcompression=gzip -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata -ingestexclude=/Sysdb/cell/1/agent,/Sysdb/cell/2/agent -cvaddr=192.168.0.5:9910 -cvauth=token,/tmp/token -cvvrf=MGMT -taillogs -disableaaa no shutdown ! alias mlag-reload bash /mnt/flash/shut_intfs && sudo shutdown now -r @@ -12,16 +12,18 @@ alias snz show interface counter | nz alias spd show port-channel %1 detail all alias sqnz show interface counter queue | nz alias srnz show interface counter rate | nz -alias intdesc +alias intdesc !! Usage: intdesc interface-name description - 10 config - 20 int %1 - 30 desc %2 + 10 config + 20 int %1 + 30 desc %2 40 exit ! dns domain arista.lab ! -ntp server vrf MGMT 192.168.0.1 iburst source Management1 +service routing protocols model multi-agent +! +ntp server vrf MGMT 192.168.0.1 iburst source Management0 ! radius-server host 192.168.0.1 vrf MGMT key 7 0207165218120E ! @@ -38,7 +40,7 @@ username arista privilege 15 role network-admin secret 5 $1$4VjIjfd1$XkUVulbNDES ! username arista ssh-key ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC+ERvV4GaPq3FzxY8T+5hMF/1T+l8wiPsVCtOrZU4Hy6NCNlAiDBdA/RUtX5/aOu5JvHyPTVHqWJ0qi9BqU3rxCNl/l2/5UZbm9RPzdZ1QCwoYwPB9/j/tYJV8lZdr6t0yGBfxgzD3oW/zF7a+ZtASaMAu7lkgoqPK2pVIGa+Y9ZCsA0Xq756XpLCw+d3pHKHvIkgWLCo9FoeIv8f/bu5u/ztzRE+Nvl+o5add6MxnjsXz3s7BnW2FX6JNjyp0Z+OXjupQc2gcfFvpd/dA2lCNuuaCHkRgyPwIZtWPmNqMRXPp37mlPwV43qDJRVPQkvh0xPxwS35BbzUxWdT+ZLZv ! -ip radius source-interface Management1 +ip radius source-interface Management0 ! ip routing vrf MGMT ! diff --git a/topologies/training-level7/configlets/CVX-BASE b/topologies/training-level7/configlets/CVX-BASE index 0eaa52b8a..f85e7ce1d 100644 --- a/topologies/training-level7/configlets/CVX-BASE +++ b/topologies/training-level7/configlets/CVX-BASE @@ -1,6 +1,6 @@ hostname cvx ! -interface Management1 +interface Management0 vrf MGMT ip address 192.168.0.4/24 ! diff --git a/topologies/training-level7/configlets/DCI-BASE b/topologies/training-level7/configlets/DCI-BASE index 6b493f5b0..435fb7e6e 100644 --- a/topologies/training-level7/configlets/DCI-BASE +++ b/topologies/training-level7/configlets/DCI-BASE @@ -2,7 +2,7 @@ service routing protocols model multi-agent ! hostname DCI ! -interface Management1 +interface Management0 vrf MGMT ip address 192.168.0.76/24 ! diff --git a/topologies/training-level7/configlets/DCI-START b/topologies/training-level7/configlets/DCI-START index d3743fa91..a152ba1ec 100644 --- a/topologies/training-level7/configlets/DCI-START +++ b/topologies/training-level7/configlets/DCI-START @@ -7,4 +7,18 @@ interface Ethernet3 router bgp 65500 neighbor 10.201.0.1 remote-as 65210 - neighbor 10.201.0.5 remote-as 65220 \ No newline at end of file + neighbor 10.201.0.5 remote-as 65220 + +! Multicast routing +ip multicast-routing +router multicast + ipv4 + routing + software-forwarding sfe + +router pim sparse-mode + ipv4 + rp address 192.168.255.111 + +interface Ethernet1,3 + pim ipv4 sparse-mode \ No newline at end of file diff --git a/topologies/training-level7/configlets/OOB-CORE-BASE b/topologies/training-level7/configlets/OOB-CORE-BASE index 261cdd01b..d20149498 100644 --- a/topologies/training-level7/configlets/OOB-CORE-BASE +++ b/topologies/training-level7/configlets/OOB-CORE-BASE @@ -2,7 +2,7 @@ service routing protocols model multi-agent ! hostname OOB-CORE ! -interface Management1 +interface Management0 vrf MGMT ip address 192.168.0.61/24 ! diff --git a/topologies/training-level7/configlets/OOB-DC1-BASE b/topologies/training-level7/configlets/OOB-DC1-BASE index 2c74bf790..2a8ece18a 100644 --- a/topologies/training-level7/configlets/OOB-DC1-BASE +++ b/topologies/training-level7/configlets/OOB-DC1-BASE @@ -2,7 +2,7 @@ service routing protocols model multi-agent ! hostname OOB-DC1 ! -interface Management1 +interface Management0 vrf MGMT ip address 192.168.0.62/24 ! diff --git a/topologies/training-level7/configlets/OOB-DC2-BASE b/topologies/training-level7/configlets/OOB-DC2-BASE index d3e276624..b3fcab3d1 100644 --- a/topologies/training-level7/configlets/OOB-DC2-BASE +++ b/topologies/training-level7/configlets/OOB-DC2-BASE @@ -2,7 +2,7 @@ service routing protocols model multi-agent ! hostname OOB-DC2 ! -interface Management1 +interface Management0 vrf MGMT ip address 192.168.0.63/24 ! diff --git a/topologies/training-level7/configlets/Spine1-DC2-START b/topologies/training-level7/configlets/Spine1-DC2-START index eb9bd4519..8119e1065 100644 --- a/topologies/training-level7/configlets/Spine1-DC2-START +++ b/topologies/training-level7/configlets/Spine1-DC2-START @@ -1,51 +1,44 @@ -service routing protocols model multi-agent -! -hostname spine1-DC2 -! + interface Ethernet1 no switchport ip address 10.21.0.25/30 + pim ipv4 sparse-mode ! interface Ethernet2 no switchport ip address 10.20.0.2/30 + pim ipv4 sparse-mode ! interface Ethernet3 no switchport ip address 10.20.0.14/30 + pim ipv4 sparse-mode ! interface Ethernet4 no switchport ip address 10.20.0.26/30 + pim ipv4 sparse-mode ! interface Ethernet5 no switchport ip address 10.20.0.38/30 + pim ipv4 sparse-mode ! interface Ethernet6 no switchport ip address 10.21.0.2/30 + pim ipv4 sparse-mode ! interface Ethernet7 no switchport ip address 10.21.0.14/30 + pim ipv4 sparse-mode ! interface Ethernet15 ! interface Loopback0 ip address 192.168.255.14/32 -! -interface Management0 - vrf MGMT - ip address 192.168.0.14/24 -! -ip routing -ip routing vrf MGMT -! -ip route vrf MGMT 0.0.0.0/0 192.168.0.1 -! -ip radius source-interface Management0 -! +!! router bgp 65220 router-id 192.168.255.14 bgp listen range 192.168.255.0/24 peer-group EVPN remote-as 65220 @@ -71,37 +64,38 @@ router bgp 65220 neighbor LEAFS maximum-routes 12000 neighbor 192.168.255.77 peer group DC3-EVPN neighbor 192.168.255.78 peer group DC3-EVPN + neighbor DCI-EVPN peer group + neighbor DCI-EVPN remote-as 65110 + neighbor DCI-EVPN update-source Loopback0 + neighbor DCI-EVPN ebgp-multihop 5 + neighbor DCI-EVPN send-community extended + neighbor DCI-EVPN next-hop-unchanged + neighbor 192.168.255.11 peer group DCI-EVPN + neighbor 192.168.255.12 peer group DCI-EVPN + neighbor 192.168.255.13 peer group DCI-EVPN ! address-family evpn neighbor DC3-EVPN activate neighbor EVPN activate no neighbor LEAFS activate + neighbor DCI-EVPN activate + ! address-family ipv4 no neighbor DC3-EVPN activate + no neighbor DCI-EVPN activate no neighbor EVPN activate neighbor LEAFS activate network 192.168.255.14/32 ! -management api http-commands - no shutdown - ! - vrf MGMT - no shutdown -! +! Multicast routing +ip multicast-routing +router multicast + ipv4 + routing + software-forwarding sfe -router bgp 65220 - neighbor DCI-EVPN peer group - neighbor DCI-EVPN remote-as 65110 - neighbor DCI-EVPN update-source Loopback0 - neighbor DCI-EVPN ebgp-multihop 5 - neighbor DCI-EVPN send-community extended - neighbor DCI-EVPN next-hop-unchanged - neighbor 192.168.255.11 peer group DCI-EVPN - neighbor 192.168.255.12 peer group DCI-EVPN - neighbor 192.168.255.13 peer group DCI-EVPN - address-family evpn - neighbor DCI-EVPN activate - ! - address-family ipv4 - no neighbor DCI-EVPN activate \ No newline at end of file +router pim sparse-mode + ipv4 + rp address 192.168.255.111 + \ No newline at end of file diff --git a/topologies/training-level7/configlets/borderleaf1-DC1-BASE b/topologies/training-level7/configlets/borderleaf1-DC1-BASE index c7eac21d8..d25f6add8 100644 --- a/topologies/training-level7/configlets/borderleaf1-DC1-BASE +++ b/topologies/training-level7/configlets/borderleaf1-DC1-BASE @@ -1,6 +1,6 @@ hostname borderleaf1-DC1 ! -interface Management1 +interface Management0 vrf MGMT ip address 192.168.0.25/24 ! diff --git a/topologies/training-level7/configlets/borderleaf1-DC2-BASE b/topologies/training-level7/configlets/borderleaf1-DC2-BASE index 5e4618a7a..d3ca37d56 100644 --- a/topologies/training-level7/configlets/borderleaf1-DC2-BASE +++ b/topologies/training-level7/configlets/borderleaf1-DC2-BASE @@ -1,6 +1,6 @@ hostname borderleaf1-DC2 ! -interface Management1 +interface Management0 vrf MGMT ip address 192.168.0.35/24 ! diff --git a/topologies/training-level7/configlets/borderleaf1-DC2-START b/topologies/training-level7/configlets/borderleaf1-DC2-START index 74d935a52..77a2d9a31 100644 --- a/topologies/training-level7/configlets/borderleaf1-DC2-START +++ b/topologies/training-level7/configlets/borderleaf1-DC2-START @@ -1,6 +1,69 @@ + + +router bgp 65220 + + interface Ethernet1 +! +interface Ethernet2 +! +interface Ethernet3 + no switchport + ip address 10.21.0.1/30 + pim ipv4 sparse-mode +! +interface Ethernet4 + no switchport + ip address 10.21.0.5/30 + pim ipv4 sparse-mod +! +interface Ethernet5 + no switchport + ip address 10.21.0.9/30 + pim ipv4 sparse-mode +! +interface Ethernet10 + no switchport +! +interface Ethernet10.100 + encapsulation dot1q vlan 100 + ip address 10.102.0.1/30 +! +interface Ethernet10.200 + encapsulation dot1q vlan 200 + ip address 10.102.0.5/30 +! +interface Ethernet10.300 + encapsulation dot1q vlan 300 + ip address 10.102.0.9/30 +! +interface Ethernet11 +! interface Ethernet12 no switchport ip address 10.201.0.5/30 - + pim ipv4 sparse-mode +! +interface Ethernet15 +! router bgp 65220 - neighbor 10.201.0.6 remote-as 65500 \ No newline at end of file + neighbor 10.201.0.6 remote-as 65500 + neighbor LEAFS peer group + neighbor LEAFS remote-as 65220 + neighbor LEAFS next-hop-self + neighbor LEAFS maximum-routes 12000 + neighbor 10.21.0.2 peer group LEAFS + neighbor 10.21.0.6 peer group LEAFS + neighbor 10.21.0.10 peer group LEAFS + neighbor 10.102.0.2 remote-as 2 + neighbor 10.102.0.2 maximum-routes 12000 +! +! Multicast routing +ip multicast-routing +router multicast + ipv4 + routing + software-forwarding sfe + +router pim sparse-mode + ipv4 + rp address 192.168.255.111 diff --git a/topologies/training-level7/configlets/borderleaf2-DC1-BASE b/topologies/training-level7/configlets/borderleaf2-DC1-BASE index a6fbf092d..c342c4cc8 100644 --- a/topologies/training-level7/configlets/borderleaf2-DC1-BASE +++ b/topologies/training-level7/configlets/borderleaf2-DC1-BASE @@ -1,6 +1,6 @@ hostname borderleaf2-DC1 ! -interface Management1 +interface Management0 vrf MGMT ip address 192.168.0.26/24 ! diff --git a/topologies/training-level7/configlets/borderleaf2-DC2-BASE b/topologies/training-level7/configlets/borderleaf2-DC2-BASE index 107e68d98..617be043a 100644 --- a/topologies/training-level7/configlets/borderleaf2-DC2-BASE +++ b/topologies/training-level7/configlets/borderleaf2-DC2-BASE @@ -1,6 +1,6 @@ hostname borderleaf2-DC2 ! -interface Management1 +interface Management0 vrf MGMT ip address 192.168.0.36/24 ! diff --git a/topologies/training-level7/configlets/borderleaf2-DC2-START b/topologies/training-level7/configlets/borderleaf2-DC2-START index 8af151bb8..2bc666623 100644 --- a/topologies/training-level7/configlets/borderleaf2-DC2-START +++ b/topologies/training-level7/configlets/borderleaf2-DC2-START @@ -35,20 +35,8 @@ interface Ethernet12 ! interface Ethernet15 ! -interface Management0 - vrf MGMT - ip address 192.168.0.36/24 -! -ip routing -ip routing vrf MGMT -! -ip route vrf MGMT 0.0.0.0/0 192.168.0.1 -! -ip radius source-interface Management0 -! router bgp 65220 neighbor LEAFS peer group - neighbor LEAFS remote-as 65220 neighbor LEAFS next-hop-self neighbor LEAFS maximum-routes 12000 neighbor 10.21.0.14 peer group LEAFS diff --git a/topologies/training-level7/configlets/core1-ISP1-BASE b/topologies/training-level7/configlets/core1-isp1-BASE similarity index 85% rename from topologies/training-level7/configlets/core1-ISP1-BASE rename to topologies/training-level7/configlets/core1-isp1-BASE index 429220cbe..a116d4c3b 100644 --- a/topologies/training-level7/configlets/core1-ISP1-BASE +++ b/topologies/training-level7/configlets/core1-isp1-BASE @@ -2,7 +2,7 @@ service routing protocols model multi-agent ! hostname core1-ISP1 ! -interface Management1 +interface Management0 vrf MGMT ip address 192.168.0.71/24 ! diff --git a/topologies/training-level7/configlets/core1-ISP1-START b/topologies/training-level7/configlets/core1-isp1-START similarity index 100% rename from topologies/training-level7/configlets/core1-ISP1-START rename to topologies/training-level7/configlets/core1-isp1-START diff --git a/topologies/training-level7-part3/configlets/core1-ISP2-BASE b/topologies/training-level7/configlets/core1-isp2-BASE similarity index 85% rename from topologies/training-level7-part3/configlets/core1-ISP2-BASE rename to topologies/training-level7/configlets/core1-isp2-BASE index 3be412ddf..ac6a9d85b 100644 --- a/topologies/training-level7-part3/configlets/core1-ISP2-BASE +++ b/topologies/training-level7/configlets/core1-isp2-BASE @@ -2,7 +2,7 @@ service routing protocols model multi-agent ! hostname core1-ISP2 ! -interface Management1 +interface Management0 vrf MGMT ip address 192.168.0.73/24 ! diff --git a/topologies/training-level7/configlets/core1-ISP2-START b/topologies/training-level7/configlets/core1-isp2-START similarity index 85% rename from topologies/training-level7/configlets/core1-ISP2-START rename to topologies/training-level7/configlets/core1-isp2-START index 26a4a35a1..e8550d61a 100644 --- a/topologies/training-level7/configlets/core1-ISP2-START +++ b/topologies/training-level7/configlets/core1-isp2-START @@ -32,17 +32,6 @@ interface Loopback0 isis enable ISP isis passive ! -interface Management0 - vrf MGMT - ip address 192.168.0.73/24 -! -ip routing -ip routing vrf MGMT -! -ip route vrf MGMT 0.0.0.0/0 192.168.0.1 -! -ip radius source-interface Management0 -! router bgp 2 neighbor 10.102.0.1 remote-as 65220 neighbor 10.102.0.1 ebgp-multihop 3 @@ -68,10 +57,4 @@ router isis ISP advertise passive-only ! address-family ipv4 unicast -! -management api http-commands - no shutdown - ! - vrf MGMT - no shutdown ! \ No newline at end of file diff --git a/topologies/training-level7/configlets/core2-ISP1-START b/topologies/training-level7/configlets/core2-ISP1-START deleted file mode 100644 index 5dbf57bb3..000000000 --- a/topologies/training-level7/configlets/core2-ISP1-START +++ /dev/null @@ -1,64 +0,0 @@ -interface Ethernet1 - no shutdown - no switchport - ip address 10.200.0.3/31 -interface Ethernet2 - no shutdown - no switchport - ip address 10.200.0.4/31 -interface Ethernet10 - no shutdown - no switchport -interface Ethernet10.100 - no shutdown - encapsulation dot1q vlan 100 - ip address 10.101.0.14/30 -interface Ethernet10.200 - no shutdown - encapsulation dot1q vlan 200 - ip address 10.101.0.18/30 -interface Ethernet10.300 - no shutdown - encapsulation dot1q vlan 300 - ip address 10.101.0.22/30 -int loopback 0 - ip address 192.168.255.72/32 - -service routing protocols model multi-agent - ! - router isis ISP - net 49.0001.0000.0000.0072.00 - is-type level-2 - advertise passive-only - ! - address-family ipv4 unicast - ! - interface Loopback0 - isis enable ISP - isis passive - ! - interface Ethernet1 - isis enable ISP - isis network point-to-point - ! - interface Ethernet2 - isis enable ISP - isis network point-to-point - -router bgp 1 - neighbor 192.168.255.71 remote-as 1 - neighbor 192.168.255.71 update-source Loopback0 - neighbor 192.168.255.71 send-community standard extended - neighbor 192.168.255.75 remote-as 3 - neighbor 192.168.255.75 update-source Loopback0 - neighbor 192.168.255.75 send-community standard extended - neighbor 192.168.255.75 ebgp-multihop 3 - - ! - address-family ipv4 - no neighbor 192.168.255.71 activate - no neighbor 192.168.255.75 activate - ! - address-family evpn - neighbor 192.168.255.71 activate - neighbor 192.168.255.75 activate \ No newline at end of file diff --git a/topologies/training-level7-part3/configlets/core2-ISP1-BASE b/topologies/training-level7/configlets/core2-isp1-BASE similarity index 85% rename from topologies/training-level7-part3/configlets/core2-ISP1-BASE rename to topologies/training-level7/configlets/core2-isp1-BASE index 2324d0e3a..67e935197 100644 --- a/topologies/training-level7-part3/configlets/core2-ISP1-BASE +++ b/topologies/training-level7/configlets/core2-isp1-BASE @@ -2,7 +2,7 @@ service routing protocols model multi-agent ! hostname core2-ISP1 ! -interface Management1 +interface Management0 vrf MGMT ip address 192.168.0.72/24 ! diff --git a/topologies/training-level7/configlets/core2-isp1-START b/topologies/training-level7/configlets/core2-isp1-START new file mode 100644 index 000000000..ebf65cfaf --- /dev/null +++ b/topologies/training-level7/configlets/core2-isp1-START @@ -0,0 +1,70 @@ +interface Ethernet1 + no switchport + ip address 10.200.0.9/31 + isis enable ISP + isis network point-to-point +! +interface Ethernet2 + no switchport + ip address 10.200.0.10/31 + isis enable ISP + isis network point-to-point +! +interface Ethernet10 + no switchport +! +interface Ethernet10.100 + encapsulation dot1q vlan 100 + ip address 10.102.0.14/30 +! +interface Ethernet10.200 + encapsulation dot1q vlan 200 + ip address 10.102.0.18/30 +! +interface Ethernet10.300 + encapsulation dot1q vlan 300 + ip address 10.102.0.22/30 +! +interface Ethernet11 +! +interface Loopback0 + ip address 192.168.255.72/32 + isis enable ISP + isis passive +! +interface Management0 + vrf MGMT + ip address 192.168.0.72/24 +! +ip routing +ip routing vrf MGMT +! +ip route vrf MGMT 0.0.0.0/0 192.168.0.1 +! +ip radius source-interface Management0 +! +router bgp 2 + neighbor 10.102.0.13 remote-as 65220 + neighbor 10.102.0.13 maximum-routes 12000 + neighbor 192.168.255.73 remote-as 2 + neighbor 192.168.255.73 update-source Loopback0 + neighbor 192.168.255.73 send-community standard extended + neighbor 192.168.255.73 maximum-routes 12000 + neighbor 192.168.255.75 remote-as 3 + neighbor 192.168.255.75 update-source Loopback0 + neighbor 192.168.255.75 ebgp-multihop 3 + neighbor 192.168.255.75 send-community standard extended + neighbor 192.168.255.75 maximum-routes 12000 + ! + address-family ipv4 + no neighbor 10.102.0.13 activate + neighbor 192.168.255.73 activate + neighbor 192.168.255.75 activate +! +router isis ISP + net 49.0002.0000.0000.0074.00 + is-type level-2 + advertise passive-only + ! + address-family ipv4 unicast +! \ No newline at end of file diff --git a/topologies/training-level7-part3/configlets/core2-ISP2-BASE b/topologies/training-level7/configlets/core2-isp2-BASE similarity index 85% rename from topologies/training-level7-part3/configlets/core2-ISP2-BASE rename to topologies/training-level7/configlets/core2-isp2-BASE index 46490ccd4..ce0c82606 100644 --- a/topologies/training-level7-part3/configlets/core2-ISP2-BASE +++ b/topologies/training-level7/configlets/core2-isp2-BASE @@ -2,7 +2,7 @@ service routing protocols model multi-agent ! hostname core2-ISP2 ! -interface Management1 +interface Management0 vrf MGMT ip address 192.168.0.74/24 ! diff --git a/topologies/training-level7/configlets/core2-ISP2-START b/topologies/training-level7/configlets/core2-isp2-START similarity index 95% rename from topologies/training-level7/configlets/core2-ISP2-START rename to topologies/training-level7/configlets/core2-isp2-START index 7a3431d93..da5af263a 100644 --- a/topologies/training-level7/configlets/core2-ISP2-START +++ b/topologies/training-level7/configlets/core2-isp2-START @@ -67,10 +67,4 @@ router isis ISP advertise passive-only ! address-family ipv4 unicast -! -management api http-commands - no shutdown - ! - vrf MGMT - no shutdown ! \ No newline at end of file diff --git a/topologies/training-level7/configlets/host1-DC1-BASE b/topologies/training-level7/configlets/host1-DC1-BASE index 9364ac42b..41724a2aa 100644 --- a/topologies/training-level7/configlets/host1-DC1-BASE +++ b/topologies/training-level7/configlets/host1-DC1-BASE @@ -1,138 +1,11 @@ +service routing protocols model multi-agent +! hostname host1-DC1 ! spanning-tree mode none ! -vrf instance VLAN10 -vrf instance VLAN11 -vrf instance VLAN12 -vrf instance VLAN13 -vrf instance VLAN14 -vrf instance VLAN15 -vrf instance VLAN16 -vrf instance VLAN17 -vrf instance VLAN18 -vrf instance VLAN19 -vrf instance OOB -! -vlan 10 - name VLAN10 -vlan 11 - name VLAN11 -vlan 12 - name VLAN12 -vlan 13 - name VLAN13 -vlan 14 - name VLAN14 -vlan 15 - name VLAN15 -vlan 16 - name VLAN16 -vlan 17 - name VLAN17 -vlan 18 - name VLAN18 -vlan 19 - name VLAN19 -! -interface port-Channel 10 - no shut - switchport mode trunk -! -interface Ethernet15 - vrf OOB - no shutdown - no switchport - ip address 192.168.1.51/24 -! -int ethernet 1-4 - no shutdown - no ip address - switchport - channel-group 10 mode active -! -int loopback 0 - ip address 192.168.255.51/32 -! -interface lo1 - vrf VLAN11 - ip address 172.16.220.51/24 -! -interface VLAN10 - vrf VLAN10 - ip address 172.16.10.51/24 - no shutdown -interface VLAN11 - vrf VLAN11 - ip address 172.16.11.51/24 - no shutdown -interface VLAN12 - vrf VLAN12 - ip address 172.16.12.51/24 - no shutdown -interface VLAN13 - vrf VLAN13 - ip address 172.16.13.51/24 - no shutdown -interface VLAN14 - vrf VLAN14 - ip address 172.16.14.51/24 - no shutdown -interface VLAN15 - vrf VLAN15 - ip address 172.16.15.51/24 - no shutdown -interface VLAN16 - vrf VLAN16 - ip address 172.16.16.51/24 - no shutdown -interface VLAN17 - vrf VLAN17 - ip address 172.16.17.51/24 - no shutdown -interface VLAN18 - vrf VLAN18 - ip address 172.16.18.51/24 - no shutdown -interface VLAN19 - vrf VLAN19 - ip address 172.16.19.51/24 - no shutdown -interface Management1 +interface Management0 vrf MGMT ip address 192.168.0.51/24 ! -ip routing -ip routing vrf OOB -ip routing vrf VLAN10 -ip routing vrf VLAN11 -ip routing vrf VLAN12 -ip routing vrf VLAN13 -ip routing vrf VLAN14 -ip routing vrf VLAN15 -ip routing vrf VLAN16 -ip routing vrf VLAN17 -ip routing vrf VLAN18 -ip routing vrf VLAN19 -ip route vrf VLAN10 0.0.0.0/0 172.16.10.254 -ip route vrf VLAN12 0.0.0.0/0 172.16.12.254 -ip route vrf VLAN13 0.0.0.0/0 172.16.13.254 -ip route vrf VLAN14 0.0.0.0/0 172.16.14.254 -ip route vrf VLAN15 0.0.0.0/0 172.16.15.254 -ip route vrf VLAN16 0.0.0.0/0 172.16.16.254 -ip route vrf VLAN17 0.0.0.0/0 172.16.17.254 -ip route vrf VLAN18 0.0.0.0/0 172.16.18.254 -ip route vrf VLAN19 0.0.0.0/0 172.16.19.254 -ip route vrf OOB 0.0.0.0/0 192.168.1.254 -! -router bgp 65151 - vrf VLAN11 - neighbor 172.16.11.21 remote-as 65012 - neighbor 172.16.11.21 maximum-routes 12000 - neighbor 172.16.11.22 remote-as 65012 - neighbor 172.16.11.22 maximum-routes 12000 - redistribute connected - ! - address-family ipv4 - neighbor 172.16.11.21 activate - neighbor 172.16.11.22 activate \ No newline at end of file +ip routing \ No newline at end of file diff --git a/topologies/training-level7/configlets/host1-DC1-START b/topologies/training-level7/configlets/host1-DC1-START index 2a9cc4360..d1ccda801 100644 --- a/topologies/training-level7/configlets/host1-DC1-START +++ b/topologies/training-level7/configlets/host1-DC1-START @@ -125,7 +125,6 @@ ip address 172.16.19.51/24 no shutdown ip route vrf VLAN10 0.0.0.0/0 172.16.10.254 -!ip route vrf VLAN11 0.0.0.0/0 172.16.11.254 - removed for BGP ip route vrf VLAN12 0.0.0.0/0 172.16.12.254 ip route vrf VLAN13 0.0.0.0/0 172.16.13.254 ip route vrf VLAN14 0.0.0.0/0 172.16.14.254 diff --git a/topologies/training-level7/configlets/host1-DC2-BASE b/topologies/training-level7/configlets/host1-DC2-BASE index 8d08a5f1f..24987f3cc 100644 --- a/topologies/training-level7/configlets/host1-DC2-BASE +++ b/topologies/training-level7/configlets/host1-DC2-BASE @@ -1,125 +1,11 @@ +service routing protocols model multi-agent +! hostname host1-DC2 ! spanning-tree mode none ! -vrf instance VLAN20 -vrf instance VLAN21 -vrf instance VLAN22 -vrf instance VLAN23 -vrf instance VLAN24 -vrf instance VLAN15 -vrf instance VLAN16 -vrf instance VLAN17 -vrf instance VLAN18 -vrf instance VLAN19 -vrf instance OOB -! -vlan 20 - name VLAN20 -vlan 21 - name VLAN21 -vlan 22 - name VLAN22 -vlan 23 - name VLAN23 -vlan 24 - name VLAN24 -vlan 15 - name VLAN15 -vlan 16 - name VLAN16 -vlan 17 - name VLAN17 -vlan 18 - name VLAN18 -vlan 19 - name VLAN19 -! -interface port-Channel 10 - no shut - switchport mode trunk -! -int ethernet 1 - 4 - no shutdown - no ip address - switchport - channel-group 10 mode active -! -interface Ethernet15 - vrf OOB - no shutdown - no switchport - ip address 192.168.2.53/24 -! -interface VLAN20 - vrf VLAN20 - ip address 172.16.20.53/24 - no shutdown -interface VLAN21 - vrf VLAN21 - ip address 172.16.21.53/24 - no shutdown -interface VLAN22 - vrf VLAN22 - ip address 172.16.22.53/24 - no shutdown -interface VLAN23 - vrf VLAN23 - ip address 172.16.23.53/24 - no shutdown -interface VLAN24 - vrf VLAN24 - ip address 172.16.24.53/24 - no shutdown -interface VLAN15 - vrf VLAN15 - ip address 172.16.15.53/24 - no shutdown -interface VLAN16 - vrf VLAN16 - ip address 172.16.16.53/24 - no shutdown -interface VLAN17 - vrf VLAN17 - ip address 172.16.17.53/24 - no shutdown -interface VLAN18 - vrf VLAN18 - ip address 172.16.18.53/24 - no shutdown -interface VLAN19 - vrf VLAN19 - ip address 172.16.19.53/24 - no shutdown -! -int loopback 0 - ip address 192.168.255.53/32 -! -interface Management1 +interface Management0 vrf MGMT ip address 192.168.0.53/24 ! ip routing -ip routing vrf VLAN20 -ip routing vrf VLAN21 -ip routing vrf VLAN22 -ip routing vrf VLAN23 -ip routing vrf VLAN24 -ip routing vrf VLAN15 -ip routing vrf VLAN16 -ip routing vrf VLAN17 -ip routing vrf VLAN18 -ip routing vrf VLAN19 -ip routing vrf OOB -! -ip route vrf OOB 0.0.0.0/0 192.168.2.254 -ip route vrf VLAN20 0.0.0.0/0 172.16.20.254 -ip route vrf VLAN21 0.0.0.0/0 172.16.21.254 -ip route vrf VLAN22 0.0.0.0/0 172.16.22.254 -ip route vrf VLAN23 0.0.0.0/0 172.16.23.254 -ip route vrf VLAN24 0.0.0.0/0 172.16.24.254 -ip route vrf VLAN15 0.0.0.0/0 172.16.15.254 -ip route vrf VLAN16 0.0.0.0/0 172.16.16.254 -ip route vrf VLAN17 0.0.0.0/0 172.16.17.254 -ip route vrf VLAN18 0.0.0.0/0 172.16.18.254 -ip route vrf VLAN19 0.0.0.0/0 172.16.19.254 \ No newline at end of file diff --git a/topologies/training-level7/configlets/host1-DC3-BASE b/topologies/training-level7/configlets/host1-DC3-BASE index e10cd64f0..8efae5d91 100644 --- a/topologies/training-level7/configlets/host1-DC3-BASE +++ b/topologies/training-level7/configlets/host1-DC3-BASE @@ -2,7 +2,7 @@ hostname host1-DC3 ! spanning-tree mode none ! -interface Management1 +interface Management0 vrf MGMT ip address 192.168.0.82/24 ! diff --git a/topologies/training-level7/configlets/host1-DC3-START b/topologies/training-level7/configlets/host1-DC3-START index c6f3d93ed..74857c167 100644 --- a/topologies/training-level7/configlets/host1-DC3-START +++ b/topologies/training-level7/configlets/host1-DC3-START @@ -1,5 +1,5 @@ - int ethernet 1 + mtu 9098 no shutdown no ip address switchport @@ -7,6 +7,7 @@ int ethernet 1 switchport trunk allowed vlan 130-134 int ethernet 2 + mtu 9098 no shutdown no ip address switchport @@ -73,114 +74,64 @@ ip routing vrf VLAN18 ip routing vrf VLAN19 interface VLAN130 +mtu 9098 vrf VLAN130 ip address 172.16.130.82/24 no shutdown interface VLAN131 +mtu 9098 vrf VLAN131 ip address 172.16.131.82/24 no shutdown interface VLAN132 +mtu 9098 vrf VLAN132 ip address 172.16.132.82/24 no shutdown interface VLAN133 +mtu 9098 vrf VLAN133 ip address 172.16.133.82/24 no shutdown interface VLAN134 +mtu 9098 vrf VLAN134 ip address 172.16.134.82/24 no shutdown interface VLAN15 +mtu 9098 vrf VLAN15 ip address 172.16.15.82/24 no shutdown interface VLAN16 +mtu 9098 vrf VLAN16 ip address 172.16.16.82/24 no shutdown interface VLAN17 +mtu 9098 vrf VLAN17 ip address 172.16.17.82/24 no shutdown interface VLAN18 +mtu 9098 vrf VLAN18 ip address 172.16.18.82/24 no shutdown interface VLAN19 +mtu 9098 vrf VLAN19 ip address 172.16.19.82/24 no shutdown -interface Ethernet1 - mtu 9100 - switchport trunk allowed vlan 130-134 - switchport mode trunk -! -interface Ethernet2 - mtu 9100 - switchport trunk allowed vlan 15-19 - switchport mode trunk -! -interface Vlan15 - vrf VLAN15 - mtu 9100 - ip address 172.16.15.82/24 -! -interface Vlan16 - vrf VLAN16 - mtu 9100 - ip address 172.16.16.82/24 -! -interface Vlan17 - vrf VLAN17 - mtu 9100 - ip address 172.16.17.82/24 -! -interface Vlan18 - vrf VLAN18 - mtu 9100 - ip address 172.16.18.82/24 -! -interface Vlan19 - vrf VLAN19 - mtu 9100 - ip address 172.16.19.82/24 -! -interface Vlan130 - vrf VLAN130 - mtu 9100 - ip address 172.16.130.82/24 -! -interface Vlan131 - vrf VLAN131 - mtu 9100 - ip address 172.16.131.82/24 -! -interface Vlan132 - vrf VLAN132 - mtu 9100 - ip address 172.16.132.82/24 -! -interface Vlan133 - vrf VLAN133 - mtu 9100 - ip address 172.16.133.82/24 -! -interface Vlan134 - vrf VLAN134 - mtu 9100 - ip address 172.16.134.82/24 - ip route vrf VLAN130 0.0.0.0/0 172.16.130.254 ip route vrf VLAN15 0.0.0.0/0 172.16.15.254 \ No newline at end of file diff --git a/topologies/training-level7/configlets/host2-DC1-BASE b/topologies/training-level7/configlets/host2-DC1-BASE index 0a475a827..651c3ae6e 100644 --- a/topologies/training-level7/configlets/host2-DC1-BASE +++ b/topologies/training-level7/configlets/host2-DC1-BASE @@ -1,129 +1,12 @@ +service routing protocols model multi-agent +! hostname host2-DC1 ! spanning-tree mode none ! -vrf instance OOB -vrf instance VLAN110 -vrf instance VLAN111 -vrf instance VLAN112 -vrf instance VLAN113 -vrf instance VLAN114 -vrf instance VLAN15 -vrf instance VLAN16 -vrf instance VLAN17 -vrf instance VLAN18 -vrf instance VLAN19 -! -vlan 110 - name VLAN110 -vlan 111 - name VLAN111 -vlan 112 - name VLAN112 -vlan 113 - name VLAN113 -vlan 114 - name VLAN114 -vlan 15 - name VLAN15 -vlan 16 - name VLAN16 -vlan 17 - name VLAN17 -vlan 18 - name VLAN18 -vlan 19 - name VLAN19 - -! -interface port-Channel 10 - no shut - switchport mode trunk -! -int ethernet 1-4 - no shutdown - no ip address - switchport - channel-group 10 mode active -! -interface Ethernet15 - vrf OOB - no shutdown - no switchport - ip address 192.168.1.52/24 -! -interface VLAN110 - vrf VLAN110 - ip address 172.16.110.52/24 - no shutdown -interface VLAN111 - vrf VLAN111 - ip address 172.16.111.52/24 - no shutdown -interface VLAN112 - vrf VLAN112 - ip address 172.16.112.52/24 - no shutdown -interface VLAN113 - vrf VLAN113 - ip address 172.16.113.52/24 - no shutdown -interface VLAN114 - vrf VLAN114 - ip address 172.16.114.52/24 - no shutdown -interface VLAN15 - vrf VLAN15 - ip address 172.16.15.52/24 - no shutdown -interface VLAN16 - vrf VLAN16 - ip address 172.16.16.52/24 - no shutdown -interface VLAN17 - vrf VLAN17 - ip address 172.16.17.52/24 - no shutdown -interface VLAN18 - vrf VLAN18 - ip address 172.16.18.52/24 - no shutdown -interface VLAN19 - vrf VLAN19 - ip address 172.16.19.52/24 - no shutdown -! -int loopback 0 - ip address 192.168.255.51/32 -! -interface lo1 - vrf VLAN111 - ip address 172.16.221.52/24 -! -interface Management1 +interface Management0 vrf MGMT ip address 192.168.0.52/24 ! ip routing -ip routing vrf OOB -ip routing vrf VLAN110 -ip routing vrf VLAN111 -ip routing vrf VLAN112 -ip routing vrf VLAN113 -ip routing vrf VLAN114 -ip routing vrf VLAN15 -ip routing vrf VLAN16 -ip routing vrf VLAN17 -ip routing vrf VLAN18 -ip routing vrf VLAN19 -ip route vrf OOB 0.0.0.0/0 192.168.1.254 -ip route vrf VLAN110 0.0.0.0/0 172.16.110.254 -ip route vrf VLAN111 0.0.0.0/0 172.16.111.254 -ip route vrf VLAN112 0.0.0.0/0 172.16.112.254 -ip route vrf VLAN113 0.0.0.0/0 172.16.113.254 -ip route vrf VLAN114 0.0.0.0/0 172.16.114.254 -ip route vrf VLAN15 0.0.0.0/0 172.16.15.254 -ip route vrf VLAN16 0.0.0.0/0 172.16.16.254 -ip route vrf VLAN17 0.0.0.0/0 172.16.17.254 -ip route vrf VLAN18 0.0.0.0/0 172.16.18.254 -ip route vrf VLAN19 0.0.0.0/0 172.16.19.254 + diff --git a/topologies/training-level7/configlets/host2-DC2-BASE b/topologies/training-level7/configlets/host2-DC2-BASE index ef0642a68..17a25b9e0 100644 --- a/topologies/training-level7/configlets/host2-DC2-BASE +++ b/topologies/training-level7/configlets/host2-DC2-BASE @@ -1,124 +1,12 @@ +service routing protocols model multi-agent +! hostname host2-DC2 ! spanning-tree mode none ! -vrf instance OOB -vrf instance VLAN120 -vrf instance VLAN121 -vrf instance VLAN122 -vrf instance VLAN123 -vrf instance VLAN124 -vrf instance VLAN15 -vrf instance VLAN16 -vrf instance VLAN17 -vrf instance VLAN18 -vrf instance VLAN19 -! -vlan 120 - name VLAN120 -vlan 121 - name VLAN121 -vlan 122 - name VLAN122 -vlan 123 - name VLAN123 -vlan 124 - name VLAN124 -vlan 15 - name VLAN15 -vlan 16 - name VLAN16 -vlan 17 - name VLAN17 -vlan 18 - name VLAN18 -vlan 19 - name VLAN19 -! -interface port-Channel 10 - no shut - switchport mode trunk -int ethernet 1-4 - no shutdown - no ip address - switchport - channel-group 10 mode active -! -interface Ethernet15 - vrf OOB - no shutdown - no switchport - ip address 192.168.2.54/24 -! -interface VLAN120 - vrf VLAN120 - ip address 172.16.120.54/24 - no shutdown -interface VLAN121 - vrf VLAN121 - ip address 172.16.121.54/24 - no shutdown -interface VLAN122 - vrf VLAN122 - ip address 172.16.122.54/24 - no shutdown -interface VLAN123 - vrf VLAN123 - ip address 172.16.123.54/24 - no shutdown -interface VLAN124 - vrf VLAN124 - ip address 172.16.124.54/24 - no shutdown -interface VLAN15 - vrf VLAN15 - ip address 172.16.15.54/24 - no shutdown -interface VLAN16 - vrf VLAN16 - ip address 172.16.16.54/24 - no shutdown -interface VLAN17 - vrf VLAN17 - ip address 172.16.17.54/24 - no shutdown -interface VLAN18 - vrf VLAN18 - ip address 172.16.18.54/24 - no shutdown -interface VLAN19 - vrf VLAN19 - ip address 172.16.19.54/24 - no shutdown -! -int loopback 0 - ip address 192.168.255.54/32 -! -interface Management1 +interface Management0 vrf MGMT ip address 192.168.0.54/24 ! ip routing -ip routing vrf OOB -ip routing vrf VLAN120 -ip routing vrf VLAN121 -ip routing vrf VLAN122 -ip routing vrf VLAN123 -ip routing vrf VLAN124 -ip routing vrf VLAN15 -ip routing vrf VLAN16 -ip routing vrf VLAN17 -ip routing vrf VLAN18 -ip routing vrf VLAN19 -! -ip route vrf OOB 0.0.0.0/0 192.168.2.254 -ip route vrf VLAN120 0.0.0.0/0 172.16.120.254 -ip route vrf VLAN121 0.0.0.0/0 172.16.121.254 -ip route vrf VLAN122 0.0.0.0/0 172.16.122.254 -ip route vrf VLAN123 0.0.0.0/0 172.16.123.254 -ip route vrf VLAN124 0.0.0.0/0 172.16.124.254 -ip route vrf VLAN15 0.0.0.0/0 172.16.15.254 -ip route vrf VLAN16 0.0.0.0/0 172.16.16.254 -ip route vrf VLAN17 0.0.0.0/0 172.16.17.254 -ip route vrf VLAN18 0.0.0.0/0 172.16.18.254 -ip route vrf VLAN19 0.0.0.0/0 172.16.19.254 + diff --git a/topologies/training-level7/configlets/host2-DC3-BASE b/topologies/training-level7/configlets/host2-DC3-BASE index afc9aae85..4276624f5 100644 --- a/topologies/training-level7/configlets/host2-DC3-BASE +++ b/topologies/training-level7/configlets/host2-DC3-BASE @@ -2,7 +2,7 @@ hostname host2-DC3 ! spanning-tree mode none ! -interface Management1 +interface Management0 vrf MGMT ip address 192.168.0.83/24 ! diff --git a/topologies/training-level7/configlets/host2-DC3-START b/topologies/training-level7/configlets/host2-DC3-START index d5eddafa7..40087642e 100644 --- a/topologies/training-level7/configlets/host2-DC3-START +++ b/topologies/training-level7/configlets/host2-DC3-START @@ -1,4 +1,5 @@ int ethernet 1 + mtu 9098 no shutdown no ip address switchport @@ -6,6 +7,7 @@ int ethernet 1 switchport access vlan 130 int ethernet 2 + mtu 9098 no shutdown no ip address switchport @@ -72,113 +74,64 @@ ip routing vrf VLAN18 ip routing vrf VLAN19 interface VLAN130 +mtu 9098 vrf VLAN130 ip address 172.16.130.83/24 no shutdown interface VLAN131 +mtu 9098 vrf VLAN131 ip address 172.16.131.83/24 no shutdown interface VLAN132 +mtu 9098 vrf VLAN132 ip address 172.16.132.83/24 no shutdown interface VLAN133 +mtu 9098 vrf VLAN133 ip address 172.16.133.83/24 no shutdown interface VLAN134 +mtu 9098 vrf VLAN134 ip address 172.16.134.83/24 no shutdown interface VLAN15 +mtu 9098 vrf VLAN15 ip address 172.16.15.83/24 no shutdown interface VLAN16 +mtu 9098 vrf VLAN16 ip address 172.16.16.83/24 no shutdown interface VLAN17 +mtu 9098 vrf VLAN17 ip address 172.16.17.83/24 no shutdown interface VLAN18 +mtu 9098 vrf VLAN18 ip address 172.16.18.83/24 no shutdown interface VLAN19 +mtu 9098 vrf VLAN19 ip address 172.16.19.83/24 no shutdown - -interface Ethernet1 - switchport access vlan 130 - mtu 9100 -! -interface Ethernet2 - switchport access vlan 130 - mtu 9100 -! -interface Vlan15 - vrf VLAN15 - mtu 9100 - ip address 172.16.15.83/24 -! -interface Vlan16 - vrf VLAN16 - mtu 9100 - ip address 172.16.16.83/24 -! -interface Vlan17 - vrf VLAN17 - mtu 9100 - ip address 172.16.17.83/24 -! -interface Vlan18 - vrf VLAN18 - mtu 9100 - ip address 172.16.18.83/24 -! -interface Vlan19 - vrf VLAN19 - mtu 9100 - ip address 172.16.19.83/24 -! -interface Vlan130 - vrf VLAN130 - mtu 9100 - ip address 172.16.130.83/24 -! -interface Vlan131 - vrf VLAN131 - mtu 9100 - ip address 172.16.131.83/24 -! -interface Vlan132 - vrf VLAN132 - mtu 9100 - ip address 172.16.132.83/24 -! -interface Vlan133 - vrf VLAN133 - mtu 9100 - ip address 172.16.133.83/24 -! -interface Vlan134 - vrf VLAN134 - mtu 9100 - ip address 172.16.134.83/24 - ip route vrf VLAN130 0.0.0.0/0 172.16.130.254 -ip route vrf VLAN15 0.0.0.0/0 172.16.15.254 +ip route vrf VLAN15 0.0.0.0/0 172.16.15.254 \ No newline at end of file diff --git a/topologies/training-level7/configlets/internet-BASE b/topologies/training-level7/configlets/internet-BASE index 8c6844df1..fc0413b12 100644 --- a/topologies/training-level7/configlets/internet-BASE +++ b/topologies/training-level7/configlets/internet-BASE @@ -2,7 +2,7 @@ service routing protocols model multi-agent ! hostname internet ! -interface Management1 +interface Management0 vrf MGMT ip address 192.168.0.75/24 ! diff --git a/topologies/training-level7/configlets/internet-START b/topologies/training-level7/configlets/internet-START index ffb41f5c1..3bc3149fa 100644 --- a/topologies/training-level7/configlets/internet-START +++ b/topologies/training-level7/configlets/internet-START @@ -27,23 +27,14 @@ interface Ethernet5 ip address 10.103.0.2/30 ! interface Ethernet6 + no switchport + ip address 10.103.0.6/30 ! interface Loopback0 ip address 192.168.255.75/32 isis enable ISP isis passive ! -interface Management0 - vrf MGMT - ip address 192.168.0.75/24 -! -ip routing -ip routing vrf MGMT -! -ip route vrf MGMT 0.0.0.0/0 192.168.0.1 -! -ip radius source-interface Management0 -! router bgp 3 neighbor DC3 peer group neighbor DC3 remote-as 65230 @@ -69,9 +60,3 @@ router isis ISP advertise passive-only ! address-family ipv4 unicast -! -management api http-commands - no shutdown - ! - vrf MGMT - no shutdown \ No newline at end of file diff --git a/topologies/training-level7/configlets/leaf1-DC1-BASE b/topologies/training-level7/configlets/leaf1-DC1-BASE index 985847d82..45f9433c8 100644 --- a/topologies/training-level7/configlets/leaf1-DC1-BASE +++ b/topologies/training-level7/configlets/leaf1-DC1-BASE @@ -1,6 +1,6 @@ hostname leaf1-DC1 ! -interface Management1 +interface Management0 vrf MGMT ip address 192.168.0.21/24 ! diff --git a/topologies/training-level7/configlets/leaf1-DC2-BASE b/topologies/training-level7/configlets/leaf1-DC2-BASE index 6bc4e992b..0cf772a02 100644 --- a/topologies/training-level7/configlets/leaf1-DC2-BASE +++ b/topologies/training-level7/configlets/leaf1-DC2-BASE @@ -1,6 +1,6 @@ hostname leaf1-DC2 ! -interface Management1 +interface Management0 vrf MGMT ip address 192.168.0.31/24 ! diff --git a/topologies/training-level7/configlets/leaf1-DC2-START b/topologies/training-level7/configlets/leaf1-DC2-START index 3e6fc1f43..0b7630d9b 100644 --- a/topologies/training-level7/configlets/leaf1-DC2-START +++ b/topologies/training-level7/configlets/leaf1-DC2-START @@ -31,8 +31,6 @@ vlan 24 vlan 4094 trunk group mlag-peer ! -vrf instance MGMT -! interface Port-Channel1 switchport mode trunk switchport trunk group mlag-peer @@ -56,14 +54,17 @@ interface Ethernet2 interface Ethernet3 no switchport ip address 10.20.0.1/30 + pim ipv4 sparse-mode ! interface Ethernet4 no switchport ip address 10.20.0.5/30 + pim ipv4 sparse-mode ! interface Ethernet5 no switchport ip address 10.20.0.9/30 + pim ipv4 sparse-mode ! interface Ethernet6 channel-group 10 mode active @@ -79,10 +80,6 @@ interface Loopback0 interface Loopback1 ip address 192.168.255.212/32 ! -interface Management0 - vrf MGMT - ip address 192.168.0.31/24 -! interface Vlan15 ip address 172.16.15.31/24 ip virtual-router address 172.16.15.254 @@ -129,14 +126,11 @@ interface Vlan4094 interface Vxlan1 vxlan source-interface Loopback1 vxlan udp-port 4789 - vxlan vlan 15 vni 15 + vxlan vlan 15 vni 10015 vxlan learn-restrict any ! ip virtual-router mac-address de:ad:fa:ce:be:ef ! -ip routing -ip routing vrf MGMT -! mlag configuration domain-id mlag1 local-interface Vlan4094 @@ -145,10 +139,6 @@ mlag configuration peer-link Port-Channel1 dual-primary detection delay 10 action errdisable all-interfaces ! -ip route vrf MGMT 0.0.0.0/0 192.168.0.1 -! -ip radius source-interface Management0 -! router bgp 65220 router-id 192.168.255.31 neighbor EVPN peer group @@ -183,8 +173,13 @@ router bgp 65220 network 192.168.255.31/32 network 192.168.255.212/32 ! -management api http-commands - no shutdown - ! - vrf MGMT - no shutdown \ No newline at end of file +! Multicast routing +ip multicast-routing +router multicast + ipv4 + routing + software-forwarding sfe + +router pim sparse-mode + ipv4 + rp address 192.168.255.111 diff --git a/topologies/training-level7/configlets/leaf1-DC3-BASE b/topologies/training-level7/configlets/leaf1-DC3-BASE index 32634eb75..24970ecc5 100644 --- a/topologies/training-level7/configlets/leaf1-DC3-BASE +++ b/topologies/training-level7/configlets/leaf1-DC3-BASE @@ -1,6 +1,6 @@ hostname leaf1-DC3 ! -interface Management1 +interface Management0 vrf MGMT ip address 192.168.0.80/24 ! diff --git a/topologies/training-level7/configlets/leaf2-DC1-BASE b/topologies/training-level7/configlets/leaf2-DC1-BASE index b59439779..4937708dd 100644 --- a/topologies/training-level7/configlets/leaf2-DC1-BASE +++ b/topologies/training-level7/configlets/leaf2-DC1-BASE @@ -1,6 +1,6 @@ hostname leaf2-DC1 ! -interface Management1 +interface Management0 vrf MGMT ip address 192.168.0.22/24 ! diff --git a/topologies/training-level7/configlets/leaf2-DC2-BASE b/topologies/training-level7/configlets/leaf2-DC2-BASE index 9ea311fea..faa5f3f3a 100644 --- a/topologies/training-level7/configlets/leaf2-DC2-BASE +++ b/topologies/training-level7/configlets/leaf2-DC2-BASE @@ -1,6 +1,6 @@ hostname leaf2-DC2 ! -interface Management1 +interface Management0 vrf MGMT ip address 192.168.0.32/24 ! diff --git a/topologies/training-level7/configlets/leaf2-DC2-START b/topologies/training-level7/configlets/leaf2-DC2-START index 8e64044e3..551140fca 100644 --- a/topologies/training-level7/configlets/leaf2-DC2-START +++ b/topologies/training-level7/configlets/leaf2-DC2-START @@ -31,8 +31,6 @@ vlan 24 vlan 4094 trunk group mlag-peer ! -vrf instance MGMT -! interface Port-Channel1 switchport mode trunk switchport trunk group mlag-peer @@ -56,14 +54,17 @@ interface Ethernet2 interface Ethernet3 no switchport ip address 10.20.0.13/30 + pim ipv4 sparse-mode ! interface Ethernet4 no switchport ip address 10.20.0.17/30 + pim ipv4 sparse-mode ! interface Ethernet5 no switchport ip address 10.20.0.21/30 + pim ipv4 sparse-mode ! interface Ethernet6 channel-group 10 mode active @@ -79,10 +80,6 @@ interface Loopback0 interface Loopback1 ip address 192.168.255.212/32 ! -interface Management0 - vrf MGMT - ip address 192.168.0.32/24 -! interface Vlan15 ip address 172.16.15.32/24 ip virtual-router address 172.16.15.254 @@ -129,14 +126,11 @@ interface Vlan4094 interface Vxlan1 vxlan source-interface Loopback1 vxlan udp-port 4789 - vxlan vlan 15 vni 15 + vxlan vlan 15 vni 10015 vxlan learn-restrict any ! ip virtual-router mac-address de:ad:fa:ce:be:ef ! -ip routing -ip routing vrf MGMT -! mlag configuration domain-id mlag1 local-interface Vlan4094 @@ -145,10 +139,6 @@ mlag configuration peer-link Port-Channel1 dual-primary detection delay 10 action errdisable all-interfaces ! -ip route vrf MGMT 0.0.0.0/0 192.168.0.1 -! -ip radius source-interface Management0 -! router bgp 65220 router-id 192.168.255.32 neighbor EVPN peer group @@ -183,8 +173,13 @@ router bgp 65220 network 192.168.255.32/32 network 192.168.255.212/32 ! -management api http-commands - no shutdown - ! - vrf MGMT - no shutdown +! Multicast routing +ip multicast-routing +router multicast + ipv4 + routing + software-forwarding sfe + +router pim sparse-mode + ipv4 + rp address 192.168.255.111 diff --git a/topologies/training-level7/configlets/leaf2-DC3-BASE b/topologies/training-level7/configlets/leaf2-DC3-BASE index 07d0b04f8..88941c209 100644 --- a/topologies/training-level7/configlets/leaf2-DC3-BASE +++ b/topologies/training-level7/configlets/leaf2-DC3-BASE @@ -1,6 +1,6 @@ hostname leaf2-DC3 ! -interface Management1 +interface Management0 vrf MGMT ip address 192.168.0.81/24 ! diff --git a/topologies/training-level7/configlets/leaf3-DC1-BASE b/topologies/training-level7/configlets/leaf3-DC1-BASE index c5d02fa93..b71e2e86d 100644 --- a/topologies/training-level7/configlets/leaf3-DC1-BASE +++ b/topologies/training-level7/configlets/leaf3-DC1-BASE @@ -1,6 +1,6 @@ hostname leaf3-DC1 ! -interface Management1 +interface Management0 vrf MGMT ip address 192.168.0.23/24 ! diff --git a/topologies/training-level7/configlets/leaf3-DC2-BASE b/topologies/training-level7/configlets/leaf3-DC2-BASE index 49eb3ae57..262a9cabe 100644 --- a/topologies/training-level7/configlets/leaf3-DC2-BASE +++ b/topologies/training-level7/configlets/leaf3-DC2-BASE @@ -1,6 +1,6 @@ hostname leaf3-DC2 ! -interface Management1 +interface Management0 vrf MGMT ip address 192.168.0.33/24 ! diff --git a/topologies/training-level7/configlets/leaf3-DC2-START b/topologies/training-level7/configlets/leaf3-DC2-START index 31d05c3c2..75ed911e3 100644 --- a/topologies/training-level7/configlets/leaf3-DC2-START +++ b/topologies/training-level7/configlets/leaf3-DC2-START @@ -31,8 +31,6 @@ vlan 124 vlan 4094 trunk group mlag-peer ! -vrf instance MGMT -! interface Port-Channel1 switchport mode trunk switchport trunk group mlag-peer @@ -56,14 +54,17 @@ interface Ethernet2 interface Ethernet3 no switchport ip address 10.20.0.25/30 + pim ipv4 sparse-mode ! interface Ethernet4 no switchport ip address 10.20.0.29/30 + pim ipv4 sparse-mode ! interface Ethernet5 no switchport ip address 10.20.0.33/30 + pim ipv4 sparse-mode ! interface Ethernet6 channel-group 10 mode active @@ -79,10 +80,6 @@ interface Loopback0 interface Loopback1 ip address 192.168.255.234/32 ! -interface Management0 - vrf MGMT - ip address 192.168.0.33/24 -! interface Vlan15 ip address 172.16.15.33/24 ip virtual-router address 172.16.15.254 @@ -129,14 +126,9 @@ interface Vlan4094 interface Vxlan1 vxlan source-interface Loopback1 vxlan udp-port 4789 - vxlan vlan 15 vni 15 + vxlan vlan 15 vni 10015 vxlan learn-restrict any ! -ip virtual-router mac-address de:ad:fa:ce:be:ef -! -ip routing -ip routing vrf MGMT -! mlag configuration domain-id mlag1 local-interface Vlan4094 @@ -145,10 +137,6 @@ mlag configuration peer-link Port-Channel1 dual-primary detection delay 10 action errdisable all-interfaces ! -ip route vrf MGMT 0.0.0.0/0 192.168.0.1 -! -ip radius source-interface Management0 -! router bgp 65220 router-id 192.168.255.33 neighbor EVPN peer group @@ -183,8 +171,14 @@ router bgp 65220 network 192.168.255.33/32 network 192.168.255.234/32 ! -management api http-commands - no shutdown - ! - vrf MGMT - no shutdown \ No newline at end of file +! Multicast routing +ip multicast-routing +router multicast + ipv4 + routing + software-forwarding sfe + +router pim sparse-mode + ipv4 + rp address 192.168.255.111 + diff --git a/topologies/training-level7/configlets/leaf4-DC1-BASE b/topologies/training-level7/configlets/leaf4-DC1-BASE index 8cd7c0153..e317855e9 100644 --- a/topologies/training-level7/configlets/leaf4-DC1-BASE +++ b/topologies/training-level7/configlets/leaf4-DC1-BASE @@ -1,6 +1,6 @@ hostname leaf4-DC1 ! -interface Management1 +interface Management0 vrf MGMT ip address 192.168.0.24/24 ! diff --git a/topologies/training-level7/configlets/leaf4-DC2-BASE b/topologies/training-level7/configlets/leaf4-DC2-BASE index 0921d6601..c1b25eb45 100644 --- a/topologies/training-level7/configlets/leaf4-DC2-BASE +++ b/topologies/training-level7/configlets/leaf4-DC2-BASE @@ -1,6 +1,6 @@ hostname leaf4-DC2 ! -interface Management1 +interface Management0 vrf MGMT ip address 192.168.0.34/24 ! diff --git a/topologies/training-level7/configlets/leaf4-DC2-START b/topologies/training-level7/configlets/leaf4-DC2-START index 332a5b341..ccc167dd4 100644 --- a/topologies/training-level7/configlets/leaf4-DC2-START +++ b/topologies/training-level7/configlets/leaf4-DC2-START @@ -31,8 +31,6 @@ vlan 124 vlan 4094 trunk group mlag-peer ! -vrf instance MGMT -! interface Port-Channel1 switchport mode trunk switchport trunk group mlag-peer @@ -56,14 +54,17 @@ interface Ethernet2 interface Ethernet3 no switchport ip address 10.20.0.37/30 + pim ipv4 sparse-mode ! interface Ethernet4 no switchport ip address 10.20.0.41/30 + pim ipv4 sparse-mode ! interface Ethernet5 no switchport ip address 10.20.0.45/30 + pim ipv4 sparse-mode ! interface Ethernet6 channel-group 10 mode active @@ -79,10 +80,6 @@ interface Loopback0 interface Loopback1 ip address 192.168.255.234/32 ! -interface Management0 - vrf MGMT - ip address 192.168.0.34/24 -! interface Vlan15 ip address 172.16.15.34/24 ip virtual-router address 172.16.15.254 @@ -129,14 +126,11 @@ interface Vlan4094 interface Vxlan1 vxlan source-interface Loopback1 vxlan udp-port 4789 - vxlan vlan 15 vni 15 + vxlan vlan 15 vni 10015 vxlan learn-restrict any ! ip virtual-router mac-address de:ad:fa:ce:be:ef ! -ip routing -ip routing vrf MGMT -! mlag configuration domain-id mlag1 local-interface Vlan4094 @@ -186,8 +180,13 @@ router bgp 65220 network 192.168.255.34/32 network 192.168.255.234/32 ! -management api http-commands - no shutdown - ! - vrf MGMT - no shutdown \ No newline at end of file +! Multicast routing +ip multicast-routing +router multicast + ipv4 + routing + software-forwarding sfe + +router pim sparse-mode + ipv4 + rp address 192.168.255.111 diff --git a/topologies/training-level7/configlets/spine1-DC1-BASE b/topologies/training-level7/configlets/spine1-DC1-BASE index 420da14df..153b74f2c 100644 --- a/topologies/training-level7/configlets/spine1-DC1-BASE +++ b/topologies/training-level7/configlets/spine1-DC1-BASE @@ -1,6 +1,6 @@ hostname spine1-DC1 ! -interface Management1 +interface Management0 vrf MGMT ip address 192.168.0.11/24 ! diff --git a/topologies/training-level7/configlets/spine1-DC2-BASE b/topologies/training-level7/configlets/spine1-DC2-BASE index 98609ea23..dff91254c 100644 --- a/topologies/training-level7/configlets/spine1-DC2-BASE +++ b/topologies/training-level7/configlets/spine1-DC2-BASE @@ -1,6 +1,6 @@ hostname spine1-DC2 ! -interface Management1 +interface Management0 vrf MGMT ip address 192.168.0.14/24 ! diff --git a/topologies/training-level7/configlets/spine1-DC3-BASE b/topologies/training-level7/configlets/spine1-DC3-BASE index c8edeb06c..7edf1b6ff 100644 --- a/topologies/training-level7/configlets/spine1-DC3-BASE +++ b/topologies/training-level7/configlets/spine1-DC3-BASE @@ -1,6 +1,6 @@ hostname spine1-DC3 ! -interface Management1 +interface Management0 vrf MGMT ip address 192.168.0.77/24 ! diff --git a/topologies/training-level7/configlets/spine2-DC1-BASE b/topologies/training-level7/configlets/spine2-DC1-BASE index 52411fe04..d9b12344f 100644 --- a/topologies/training-level7/configlets/spine2-DC1-BASE +++ b/topologies/training-level7/configlets/spine2-DC1-BASE @@ -1,6 +1,6 @@ hostname spine2-DC1 ! -interface Management1 +interface Management0 vrf MGMT ip address 192.168.0.12/24 ! diff --git a/topologies/training-level7/configlets/spine2-DC2-BASE b/topologies/training-level7/configlets/spine2-DC2-BASE index ead1990a6..0a5209409 100644 --- a/topologies/training-level7/configlets/spine2-DC2-BASE +++ b/topologies/training-level7/configlets/spine2-DC2-BASE @@ -1,6 +1,6 @@ hostname spine2-DC2 ! -interface Management1 +interface Management0 vrf MGMT ip address 192.168.0.15/24 ! diff --git a/topologies/training-level7/configlets/spine2-DC2-START b/topologies/training-level7/configlets/spine2-DC2-START index 7698650f6..916acabf7 100644 --- a/topologies/training-level7/configlets/spine2-DC2-START +++ b/topologies/training-level7/configlets/spine2-DC2-START @@ -31,17 +31,6 @@ interface Ethernet15 interface Loopback0 ip address 192.168.255.15/32 ! -interface Management0 - vrf MGMT - ip address 192.168.0.15/24 -! -ip routing -ip routing vrf MGMT -! -ip route vrf MGMT 0.0.0.0/0 192.168.0.1 -! -ip radius source-interface Management0 -! router bgp 65220 router-id 192.168.255.15 bgp listen range 192.168.255.0/24 peer-group EVPN remote-as 65220 @@ -67,36 +56,27 @@ router bgp 65220 neighbor LEAFS maximum-routes 12000 neighbor 192.168.255.77 peer group DC3-EVPN neighbor 192.168.255.78 peer group DC3-EVPN + neighbor DCI-EVPN peer group + neighbor DCI-EVPN remote-as 65110 + neighbor DCI-EVPN update-source Loopback0 + neighbor DCI-EVPN ebgp-multihop 5 + neighbor DCI-EVPN send-community extended + neighbor DCI-EVPN next-hop-unchanged + neighbor 192.168.255.11 peer group DCI-EVPN + neighbor 192.168.255.12 peer group DCI-EVPN + neighbor 192.168.255.13 peer group DCI-EVPN ! address-family evpn + neighbor DCI-EVPN activate neighbor DC3-EVPN activate neighbor EVPN activate no neighbor LEAFS activate ! address-family ipv4 + no neighbor DCI-EVPN activate no neighbor DC3-EVPN activate no neighbor EVPN activate neighbor LEAFS activate network 192.168.255.15/32 ! -management api http-commands - no shutdown - ! - vrf MGMT - no shutdown -! -router bgp 65220 - neighbor DCI-EVPN peer group - neighbor DCI-EVPN remote-as 65110 - neighbor DCI-EVPN update-source Loopback0 - neighbor DCI-EVPN ebgp-multihop 5 - neighbor DCI-EVPN send-community extended - neighbor DCI-EVPN next-hop-unchanged - neighbor 192.168.255.11 peer group DCI-EVPN - neighbor 192.168.255.12 peer group DCI-EVPN - neighbor 192.168.255.13 peer group DCI-EVPN - address-family evpn - neighbor DCI-EVPN activate - ! - address-family ipv4 - no neighbor DCI-EVPN activate \ No newline at end of file + diff --git a/topologies/training-level7/configlets/spine2-DC3-BASE b/topologies/training-level7/configlets/spine2-DC3-BASE index 3a8187ae6..cf74a4f02 100644 --- a/topologies/training-level7/configlets/spine2-DC3-BASE +++ b/topologies/training-level7/configlets/spine2-DC3-BASE @@ -1,6 +1,6 @@ hostname spine2-DC3 ! -interface Management1 +interface Management0 vrf MGMT ip address 192.168.0.78/24 ! diff --git a/topologies/training-level7/configlets/spine3-DC1-BASE b/topologies/training-level7/configlets/spine3-DC1-BASE index 17d9b05bf..87d85a6c7 100644 --- a/topologies/training-level7/configlets/spine3-DC1-BASE +++ b/topologies/training-level7/configlets/spine3-DC1-BASE @@ -1,6 +1,6 @@ hostname spine3-DC1 ! -interface Management1 +interface Management0 vrf MGMT ip address 192.168.0.13/24 ! diff --git a/topologies/training-level7/configlets/spine3-DC2-BASE b/topologies/training-level7/configlets/spine3-DC2-BASE index 0d73d5286..d3b9c4d00 100644 --- a/topologies/training-level7/configlets/spine3-DC2-BASE +++ b/topologies/training-level7/configlets/spine3-DC2-BASE @@ -1,6 +1,6 @@ hostname spine3-DC2 ! -interface Management1 +interface Management0 vrf MGMT ip address 192.168.0.16/24 ! diff --git a/topologies/training-level7/configlets/spine3-DC2-START b/topologies/training-level7/configlets/spine3-DC2-START index 5d054ee4c..e449c6adc 100644 --- a/topologies/training-level7/configlets/spine3-DC2-START +++ b/topologies/training-level7/configlets/spine3-DC2-START @@ -27,17 +27,6 @@ interface Ethernet15 interface Loopback0 ip address 192.168.255.16/32 ! -interface Management0 - vrf MGMT - ip address 192.168.0.16/24 -! -ip routing -ip routing vrf MGMT -! -ip route vrf MGMT 0.0.0.0/0 192.168.0.1 -! -ip radius source-interface Management0 -! router bgp 65220 router-id 192.168.255.16 bgp listen range 192.168.255.0/24 peer-group EVPN remote-as 65220 @@ -63,36 +52,27 @@ router bgp 65220 neighbor LEAFS maximum-routes 12000 neighbor 192.168.255.77 peer group DC3-EVPN neighbor 192.168.255.78 peer group DC3-EVPN + neighbor DCI-EVPN peer group + neighbor DCI-EVPN remote-as 65110 + neighbor DCI-EVPN update-source Loopback0 + neighbor DCI-EVPN ebgp-multihop 5 + neighbor DCI-EVPN send-community extended + neighbor DCI-EVPN next-hop-unchanged + neighbor 192.168.255.11 peer group DCI-EVPN + neighbor 192.168.255.12 peer group DCI-EVPN + neighbor 192.168.255.13 peer group DCI-EVPN ! address-family evpn + neighbor DCI-EVPN activate neighbor DC3-EVPN activate neighbor EVPN activate no neighbor LEAFS activate ! address-family ipv4 + no neighbor DCI-EVPN activate no neighbor DC3-EVPN activate no neighbor EVPN activate neighbor LEAFS activate network 192.168.255.16/32 ! -management api http-commands - no shutdown - ! - vrf MGMT - no shutdown -router bgp 65220 - neighbor DCI-EVPN peer group - neighbor DCI-EVPN remote-as 65110 - neighbor DCI-EVPN update-source Loopback0 - neighbor DCI-EVPN ebgp-multihop 5 - neighbor DCI-EVPN send-community extended - neighbor DCI-EVPN next-hop-unchanged - neighbor 192.168.255.11 peer group DCI-EVPN - neighbor 192.168.255.12 peer group DCI-EVPN - neighbor 192.168.255.13 peer group DCI-EVPN - address-family evpn - neighbor DCI-EVPN activate - ! - address-family ipv4 - no neighbor DCI-EVPN activate \ No newline at end of file diff --git a/topologies/training-level7/files/apps/uilanding/modules.yaml b/topologies/training-level7/files/apps/uilanding/modules.yaml index 88a1ddfe3..ad03ca750 100644 --- a/topologies/training-level7/files/apps/uilanding/modules.yaml +++ b/topologies/training-level7/files/apps/uilanding/modules.yaml @@ -34,3 +34,4 @@ topology: Host2: coords: "589,647,774,733" ip: "192.168.0.52" + servers: diff --git a/topologies/training-level7/files/ceos/DCI/startup-config b/topologies/training-level7/files/ceos/DCI/startup-config index 1e4aa9ec7..79f22d764 100644 --- a/topologies/training-level7/files/ceos/DCI/startup-config +++ b/topologies/training-level7/files/ceos/DCI/startup-config @@ -58,4 +58,4 @@ interface Management0 ip address 192.168.0.76/24 ! ip routing -! + diff --git a/topologies/training-level7/files/ceos/borderleaf2-DC2/startup-config b/topologies/training-level7/files/ceos/borderleaf2-DC2/startup-config index fb7528850..4fb058cc8 100644 --- a/topologies/training-level7/files/ceos/borderleaf2-DC2/startup-config +++ b/topologies/training-level7/files/ceos/borderleaf2-DC2/startup-config @@ -58,4 +58,3 @@ interface Management0 service routing protocols model multi-agent ! ip routing -! diff --git a/topologies/training-level7/files/ceos/host1-DC1/startup-config b/topologies/training-level7/files/ceos/host1-DC1/startup-config index c80852389..13bef3cb1 100644 --- a/topologies/training-level7/files/ceos/host1-DC1/startup-config +++ b/topologies/training-level7/files/ceos/host1-DC1/startup-config @@ -53,137 +53,10 @@ hostname host1-DC1 ! spanning-tree mode none ! -vrf instance VLAN10 -vrf instance VLAN11 -vrf instance VLAN12 -vrf instance VLAN13 -vrf instance VLAN14 -vrf instance VLAN15 -vrf instance VLAN16 -vrf instance VLAN17 -vrf instance VLAN18 -vrf instance VLAN19 -vrf instance OOB -! -vlan 10 - name VLAN10 -vlan 11 - name VLAN11 -vlan 12 - name VLAN12 -vlan 13 - name VLAN13 -vlan 14 - name VLAN14 -vlan 15 - name VLAN15 -vlan 16 - name VLAN16 -vlan 17 - name VLAN17 -vlan 18 - name VLAN18 -vlan 19 - name VLAN19 -! -interface port-Channel 10 - no shut - switchport mode trunk -! -interface Ethernet15 - vrf OOB - no shutdown - no switchport - ip address 192.168.1.51/24 -! -int ethernet 1-4 - no shutdown - no ip address - switchport - channel-group 10 mode active -! -int loopback 0 - ip address 192.168.255.51/32 +service routing protocols model multi-agent ! -interface lo1 - vrf VLAN11 - ip address 172.16.220.51/24 -! -interface VLAN10 - vrf VLAN10 - ip address 172.16.10.51/24 - no shutdown -interface VLAN11 - vrf VLAN11 - ip address 172.16.11.51/24 - no shutdown -interface VLAN12 - vrf VLAN12 - ip address 172.16.12.51/24 - no shutdown -interface VLAN13 - vrf VLAN13 - ip address 172.16.13.51/24 - no shutdown -interface VLAN14 - vrf VLAN14 - ip address 172.16.14.51/24 - no shutdown -interface VLAN15 - vrf VLAN15 - ip address 172.16.15.51/24 - no shutdown -interface VLAN16 - vrf VLAN16 - ip address 172.16.16.51/24 - no shutdown -interface VLAN17 - vrf VLAN17 - ip address 172.16.17.51/24 - no shutdown -interface VLAN18 - vrf VLAN18 - ip address 172.16.18.51/24 - no shutdown -interface VLAN19 - vrf VLAN19 - ip address 172.16.19.51/24 - no shutdown interface Management0 vrf MGMT ip address 192.168.0.51/24 ! -ip routing -ip routing vrf OOB -ip routing vrf VLAN10 -ip routing vrf VLAN11 -ip routing vrf VLAN12 -ip routing vrf VLAN13 -ip routing vrf VLAN14 -ip routing vrf VLAN15 -ip routing vrf VLAN16 -ip routing vrf VLAN17 -ip routing vrf VLAN18 -ip routing vrf VLAN19 -ip route vrf VLAN10 0.0.0.0/0 172.16.10.254 -ip route vrf VLAN12 0.0.0.0/0 172.16.12.254 -ip route vrf VLAN13 0.0.0.0/0 172.16.13.254 -ip route vrf VLAN14 0.0.0.0/0 172.16.14.254 -ip route vrf VLAN15 0.0.0.0/0 172.16.15.254 -ip route vrf VLAN16 0.0.0.0/0 172.16.16.254 -ip route vrf VLAN17 0.0.0.0/0 172.16.17.254 -ip route vrf VLAN18 0.0.0.0/0 172.16.18.254 -ip route vrf VLAN19 0.0.0.0/0 172.16.19.254 -ip route vrf OOB 0.0.0.0/0 192.168.1.254 -! -router bgp 65151 - vrf VLAN11 - neighbor 172.16.11.21 remote-as 65012 - neighbor 172.16.11.21 maximum-routes 12000 - neighbor 172.16.11.22 remote-as 65012 - neighbor 172.16.11.22 maximum-routes 12000 - redistribute connected - ! - address-family ipv4 - neighbor 172.16.11.21 activate - neighbor 172.16.11.22 activate \ No newline at end of file +ip routing \ No newline at end of file diff --git a/topologies/training-level7/files/ceos/host1-DC2/startup-config b/topologies/training-level7/files/ceos/host1-DC2/startup-config index c5a04b390..da68c62a0 100644 --- a/topologies/training-level7/files/ceos/host1-DC2/startup-config +++ b/topologies/training-level7/files/ceos/host1-DC2/startup-config @@ -53,124 +53,10 @@ hostname host1-DC2 ! spanning-tree mode none ! -vrf instance VLAN20 -vrf instance VLAN21 -vrf instance VLAN22 -vrf instance VLAN23 -vrf instance VLAN24 -vrf instance VLAN15 -vrf instance VLAN16 -vrf instance VLAN17 -vrf instance VLAN18 -vrf instance VLAN19 -vrf instance OOB -! -vlan 20 - name VLAN20 -vlan 21 - name VLAN21 -vlan 22 - name VLAN22 -vlan 23 - name VLAN23 -vlan 24 - name VLAN24 -vlan 15 - name VLAN15 -vlan 16 - name VLAN16 -vlan 17 - name VLAN17 -vlan 18 - name VLAN18 -vlan 19 - name VLAN19 -! -interface port-Channel 10 - no shut - switchport mode trunk -! -int ethernet 1 - 4 - no shutdown - no ip address - switchport - channel-group 10 mode active -! -interface Ethernet15 - vrf OOB - no shutdown - no switchport - ip address 192.168.2.53/24 -! -interface VLAN20 - vrf VLAN20 - ip address 172.16.20.53/24 - no shutdown -interface VLAN21 - vrf VLAN21 - ip address 172.16.21.53/24 - no shutdown -interface VLAN22 - vrf VLAN22 - ip address 172.16.22.53/24 - no shutdown -interface VLAN23 - vrf VLAN23 - ip address 172.16.23.53/24 - no shutdown -interface VLAN24 - vrf VLAN24 - ip address 172.16.24.53/24 - no shutdown -interface VLAN15 - vrf VLAN15 - ip address 172.16.15.53/24 - no shutdown -interface VLAN16 - vrf VLAN16 - ip address 172.16.16.53/24 - no shutdown -interface VLAN17 - vrf VLAN17 - ip address 172.16.17.53/24 - no shutdown -interface VLAN18 - vrf VLAN18 - ip address 172.16.18.53/24 - no shutdown -interface VLAN19 - vrf VLAN19 - ip address 172.16.19.53/24 - no shutdown -! -int loopback 0 - ip address 192.168.255.53/32 +service routing protocols model multi-agent ! interface Management0 vrf MGMT ip address 192.168.0.53/24 ! -ip routing -ip routing vrf VLAN20 -ip routing vrf VLAN21 -ip routing vrf VLAN22 -ip routing vrf VLAN23 -ip routing vrf VLAN24 -ip routing vrf VLAN15 -ip routing vrf VLAN16 -ip routing vrf VLAN17 -ip routing vrf VLAN18 -ip routing vrf VLAN19 -ip routing vrf OOB -! -ip route vrf OOB 0.0.0.0/0 192.168.2.254 -ip route vrf VLAN20 0.0.0.0/0 172.16.20.254 -ip route vrf VLAN21 0.0.0.0/0 172.16.21.254 -ip route vrf VLAN22 0.0.0.0/0 172.16.22.254 -ip route vrf VLAN23 0.0.0.0/0 172.16.23.254 -ip route vrf VLAN24 0.0.0.0/0 172.16.24.254 -ip route vrf VLAN15 0.0.0.0/0 172.16.15.254 -ip route vrf VLAN16 0.0.0.0/0 172.16.16.254 -ip route vrf VLAN17 0.0.0.0/0 172.16.17.254 -ip route vrf VLAN18 0.0.0.0/0 172.16.18.254 -ip route vrf VLAN19 0.0.0.0/0 172.16.19.254 \ No newline at end of file +ip routing \ No newline at end of file diff --git a/topologies/training-level7/files/ceos/host1-DC3/startup-config b/topologies/training-level7/files/ceos/host1-DC3/startup-config index 740d09e18..577d41cba 100644 --- a/topologies/training-level7/files/ceos/host1-DC3/startup-config +++ b/topologies/training-level7/files/ceos/host1-DC3/startup-config @@ -53,6 +53,8 @@ hostname host1-DC3 ! spanning-tree mode none ! +service routing protocols model multi-agent +! interface Management0 vrf MGMT ip address 192.168.0.82/24 @@ -60,4 +62,3 @@ interface Management0 service routing protocols model multi-agent ! ip routing -! \ No newline at end of file diff --git a/topologies/training-level7/files/ceos/host2-DC1/startup-config b/topologies/training-level7/files/ceos/host2-DC1/startup-config index d61638536..8b20601ec 100644 --- a/topologies/training-level7/files/ceos/host2-DC1/startup-config +++ b/topologies/training-level7/files/ceos/host2-DC1/startup-config @@ -53,128 +53,10 @@ hostname host2-DC1 ! spanning-tree mode none ! -vrf instance OOB -vrf instance VLAN110 -vrf instance VLAN111 -vrf instance VLAN112 -vrf instance VLAN113 -vrf instance VLAN114 -vrf instance VLAN15 -vrf instance VLAN16 -vrf instance VLAN17 -vrf instance VLAN18 -vrf instance VLAN19 -! -vlan 110 - name VLAN110 -vlan 111 - name VLAN111 -vlan 112 - name VLAN112 -vlan 113 - name VLAN113 -vlan 114 - name VLAN114 -vlan 15 - name VLAN15 -vlan 16 - name VLAN16 -vlan 17 - name VLAN17 -vlan 18 - name VLAN18 -vlan 19 - name VLAN19 - -! -interface port-Channel 10 - no shut - switchport mode trunk -! -int ethernet 1-4 - no shutdown - no ip address - switchport - channel-group 10 mode active -! -interface Ethernet15 - vrf OOB - no shutdown - no switchport - ip address 192.168.1.52/24 -! -interface VLAN110 - vrf VLAN110 - ip address 172.16.110.52/24 - no shutdown -interface VLAN111 - vrf VLAN111 - ip address 172.16.111.52/24 - no shutdown -interface VLAN112 - vrf VLAN112 - ip address 172.16.112.52/24 - no shutdown -interface VLAN113 - vrf VLAN113 - ip address 172.16.113.52/24 - no shutdown -interface VLAN114 - vrf VLAN114 - ip address 172.16.114.52/24 - no shutdown -interface VLAN15 - vrf VLAN15 - ip address 172.16.15.52/24 - no shutdown -interface VLAN16 - vrf VLAN16 - ip address 172.16.16.52/24 - no shutdown -interface VLAN17 - vrf VLAN17 - ip address 172.16.17.52/24 - no shutdown -interface VLAN18 - vrf VLAN18 - ip address 172.16.18.52/24 - no shutdown -interface VLAN19 - vrf VLAN19 - ip address 172.16.19.52/24 - no shutdown -! -int loopback 0 - ip address 192.168.255.51/32 -! -interface lo1 - vrf VLAN111 - ip address 172.16.221.52/24 +service routing protocols model multi-agent ! interface Management0 vrf MGMT ip address 192.168.0.52/24 ! -ip routing -ip routing vrf OOB -ip routing vrf VLAN110 -ip routing vrf VLAN111 -ip routing vrf VLAN112 -ip routing vrf VLAN113 -ip routing vrf VLAN114 -ip routing vrf VLAN15 -ip routing vrf VLAN16 -ip routing vrf VLAN17 -ip routing vrf VLAN18 -ip routing vrf VLAN19 -ip route vrf OOB 0.0.0.0/0 192.168.1.254 -ip route vrf VLAN110 0.0.0.0/0 172.16.110.254 -ip route vrf VLAN111 0.0.0.0/0 172.16.111.254 -ip route vrf VLAN112 0.0.0.0/0 172.16.112.254 -ip route vrf VLAN113 0.0.0.0/0 172.16.113.254 -ip route vrf VLAN114 0.0.0.0/0 172.16.114.254 -ip route vrf VLAN15 0.0.0.0/0 172.16.15.254 -ip route vrf VLAN16 0.0.0.0/0 172.16.16.254 -ip route vrf VLAN17 0.0.0.0/0 172.16.17.254 -ip route vrf VLAN18 0.0.0.0/0 172.16.18.254 -ip route vrf VLAN19 0.0.0.0/0 172.16.19.254 +ip routing \ No newline at end of file diff --git a/topologies/training-level7/files/ceos/host2-DC2/startup-config b/topologies/training-level7/files/ceos/host2-DC2/startup-config index b645bcc5d..1d4ca9bf3 100644 --- a/topologies/training-level7/files/ceos/host2-DC2/startup-config +++ b/topologies/training-level7/files/ceos/host2-DC2/startup-config @@ -53,123 +53,10 @@ hostname host2-DC2 ! spanning-tree mode none ! -vrf instance OOB -vrf instance VLAN120 -vrf instance VLAN121 -vrf instance VLAN122 -vrf instance VLAN123 -vrf instance VLAN124 -vrf instance VLAN15 -vrf instance VLAN16 -vrf instance VLAN17 -vrf instance VLAN18 -vrf instance VLAN19 -! -vlan 120 - name VLAN120 -vlan 121 - name VLAN121 -vlan 122 - name VLAN122 -vlan 123 - name VLAN123 -vlan 124 - name VLAN124 -vlan 15 - name VLAN15 -vlan 16 - name VLAN16 -vlan 17 - name VLAN17 -vlan 18 - name VLAN18 -vlan 19 - name VLAN19 -! -interface port-Channel 10 - no shut - switchport mode trunk -int ethernet 1-4 - no shutdown - no ip address - switchport - channel-group 10 mode active -! -interface Ethernet15 - vrf OOB - no shutdown - no switchport - ip address 192.168.2.54/24 -! -interface VLAN120 - vrf VLAN120 - ip address 172.16.120.54/24 - no shutdown -interface VLAN121 - vrf VLAN121 - ip address 172.16.121.54/24 - no shutdown -interface VLAN122 - vrf VLAN122 - ip address 172.16.122.54/24 - no shutdown -interface VLAN123 - vrf VLAN123 - ip address 172.16.123.54/24 - no shutdown -interface VLAN124 - vrf VLAN124 - ip address 172.16.124.54/24 - no shutdown -interface VLAN15 - vrf VLAN15 - ip address 172.16.15.54/24 - no shutdown -interface VLAN16 - vrf VLAN16 - ip address 172.16.16.54/24 - no shutdown -interface VLAN17 - vrf VLAN17 - ip address 172.16.17.54/24 - no shutdown -interface VLAN18 - vrf VLAN18 - ip address 172.16.18.54/24 - no shutdown -interface VLAN19 - vrf VLAN19 - ip address 172.16.19.54/24 - no shutdown -! -int loopback 0 - ip address 192.168.255.54/32 +service routing protocols model multi-agent ! interface Management0 vrf MGMT ip address 192.168.0.54/24 ! -ip routing -ip routing vrf OOB -ip routing vrf VLAN120 -ip routing vrf VLAN121 -ip routing vrf VLAN122 -ip routing vrf VLAN123 -ip routing vrf VLAN124 -ip routing vrf VLAN15 -ip routing vrf VLAN16 -ip routing vrf VLAN17 -ip routing vrf VLAN18 -ip routing vrf VLAN19 -! -ip route vrf OOB 0.0.0.0/0 192.168.2.254 -ip route vrf VLAN120 0.0.0.0/0 172.16.120.254 -ip route vrf VLAN121 0.0.0.0/0 172.16.121.254 -ip route vrf VLAN122 0.0.0.0/0 172.16.122.254 -ip route vrf VLAN123 0.0.0.0/0 172.16.123.254 -ip route vrf VLAN124 0.0.0.0/0 172.16.124.254 -ip route vrf VLAN15 0.0.0.0/0 172.16.15.254 -ip route vrf VLAN16 0.0.0.0/0 172.16.16.254 -ip route vrf VLAN17 0.0.0.0/0 172.16.17.254 -ip route vrf VLAN18 0.0.0.0/0 172.16.18.254 -ip route vrf VLAN19 0.0.0.0/0 172.16.19.254 +ip routing \ No newline at end of file diff --git a/topologies/training-level7/files/ceos/internet/startup-config b/topologies/training-level7/files/ceos/internet/startup-config index c0bc7e0d4..eeb9c3ca2 100644 --- a/topologies/training-level7/files/ceos/internet/startup-config +++ b/topologies/training-level7/files/ceos/internet/startup-config @@ -58,4 +58,4 @@ interface Management0 ip address 192.168.0.75/24 ! ip routing -! +! \ No newline at end of file diff --git a/topologies/training-level7/files/ceos/leaf1-DC2/startup-config b/topologies/training-level7/files/ceos/leaf1-DC2/startup-config index f51f3ff3e..04f01412f 100644 --- a/topologies/training-level7/files/ceos/leaf1-DC2/startup-config +++ b/topologies/training-level7/files/ceos/leaf1-DC2/startup-config @@ -58,4 +58,3 @@ interface Management0 service routing protocols model multi-agent ! ip routing -! diff --git a/topologies/training-level7/files/ceos/leaf2-DC2/startup-config b/topologies/training-level7/files/ceos/leaf2-DC2/startup-config index 3de201192..82e6c9c83 100644 --- a/topologies/training-level7/files/ceos/leaf2-DC2/startup-config +++ b/topologies/training-level7/files/ceos/leaf2-DC2/startup-config @@ -58,4 +58,3 @@ interface Management0 service routing protocols model multi-agent ! ip routing -! diff --git a/topologies/training-level7/files/ceos/leaf3-DC2/startup-config b/topologies/training-level7/files/ceos/leaf3-DC2/startup-config index 01d2dc236..463c68523 100644 --- a/topologies/training-level7/files/ceos/leaf3-DC2/startup-config +++ b/topologies/training-level7/files/ceos/leaf3-DC2/startup-config @@ -58,4 +58,3 @@ interface Management0 service routing protocols model multi-agent ! ip routing -! diff --git a/topologies/training-level7/files/ceos/leaf4-DC2/startup-config b/topologies/training-level7/files/ceos/leaf4-DC2/startup-config index 4fb324fa6..36332b266 100644 --- a/topologies/training-level7/files/ceos/leaf4-DC2/startup-config +++ b/topologies/training-level7/files/ceos/leaf4-DC2/startup-config @@ -58,4 +58,3 @@ interface Management0 service routing protocols model multi-agent ! ip routing -! diff --git a/topologies/training-level7/files/ceos/spine1-DC2/startup-config b/topologies/training-level7/files/ceos/spine1-DC2/startup-config index 3a3bb1a54..6f25c5064 100644 --- a/topologies/training-level7/files/ceos/spine1-DC2/startup-config +++ b/topologies/training-level7/files/ceos/spine1-DC2/startup-config @@ -57,5 +57,4 @@ interface Management0 ! service routing protocols model multi-agent ! -ip routing -! +ip routing \ No newline at end of file diff --git a/topologies/training-level7/files/ceos/spine2-DC2/startup-config b/topologies/training-level7/files/ceos/spine2-DC2/startup-config index acf040c32..40c19e41f 100644 --- a/topologies/training-level7/files/ceos/spine2-DC2/startup-config +++ b/topologies/training-level7/files/ceos/spine2-DC2/startup-config @@ -58,4 +58,3 @@ interface Management0 service routing protocols model multi-agent ! ip routing -! diff --git a/topologies/training-level7/files/ceos/spine3-DC2/startup-config b/topologies/training-level7/files/ceos/spine3-DC2/startup-config index 2cf6f831d..16e2d98e6 100644 --- a/topologies/training-level7/files/ceos/spine3-DC2/startup-config +++ b/topologies/training-level7/files/ceos/spine3-DC2/startup-config @@ -58,4 +58,4 @@ interface Management0 service routing protocols model multi-agent ! ip routing -! +! \ No newline at end of file diff --git a/topologies/training-level7/topo_build.yml b/topologies/training-level7/topo_build.yml index 39ae928d6..996db6612 100644 --- a/topologies/training-level7/topo_build.yml +++ b/topologies/training-level7/topo_build.yml @@ -283,7 +283,7 @@ nodes: neighborPort: Ethernet3 port: Ethernet4 - neighborDevice: spine3-DC1 - neighborPort: Ethernet2 + neighborPort: Ethernet3 port: Ethernet5 # connections to host-switches - neighborDevice: host1-DC1 @@ -343,10 +343,10 @@ nodes: port: Ethernet2 # connections to spines - neighborDevice: spine1-DC1 - neighborPort: Ethernet4 + neighborPort: Ethernet5 port: Ethernet3 - neighborDevice: spine2-DC1 - neighborPort: Ethernet4 + neighborPort: Ethernet5 port: Ethernet4 - neighborDevice: spine3-DC1 neighborPort: Ethernet5 @@ -490,7 +490,7 @@ nodes: neighborPort: Ethernet3 port: Ethernet4 - neighborDevice: spine3-DC2 - neighborPort: Ethernet2 + neighborPort: Ethernet3 port: Ethernet5 # connections to host-switches - neighborDevice: host1-DC2 @@ -550,10 +550,10 @@ nodes: port: Ethernet2 # connections to spines - neighborDevice: spine1-DC2 - neighborPort: Ethernet4 + neighborPort: Ethernet5 port: Ethernet3 - neighborDevice: spine2-DC2 - neighborPort: Ethernet4 + neighborPort: Ethernet5 port: Ethernet4 - neighborDevice: spine3-DC2 neighborPort: Ethernet5 @@ -695,16 +695,16 @@ nodes: neighbors: # connections to leafs - neighborDevice: leaf1-DC1 - neighborPort: Ethernet5 + neighborPort: Ethernet6 port: Ethernet1 - neighborDevice: leaf1-DC1 - neighborPort: Ethernet6 + neighborPort: Ethernet7 port: Ethernet3 - neighborDevice: leaf2-DC1 - neighborPort: Ethernet5 + neighborPort: Ethernet6 port: Ethernet2 - neighborDevice: leaf2-DC1 - neighborPort: Ethernet6 + neighborPort: Ethernet7 port: Ethernet4 - neighborDevice: OOB-DC1 neighborPort: Ethernet11 @@ -716,16 +716,16 @@ nodes: neighbors: # connections to leafs - neighborDevice: leaf3-DC1 - neighborPort: Ethernet5 + neighborPort: Ethernet6 port: Ethernet1 - neighborDevice: leaf3-DC1 - neighborPort: Ethernet6 + neighborPort: Ethernet7 port: Ethernet3 - neighborDevice: leaf4-DC1 - neighborPort: Ethernet5 + neighborPort: Ethernet6 port: Ethernet2 - neighborDevice: leaf4-DC1 - neighborPort: Ethernet6 + neighborPort: Ethernet7 port: Ethernet4 - neighborDevice: OOB-DC1 neighborPort: Ethernet12 @@ -738,16 +738,16 @@ nodes: neighbors: # connections to leafs - neighborDevice: leaf1-DC2 - neighborPort: Ethernet5 + neighborPort: Ethernet6 port: Ethernet1 - neighborDevice: leaf1-DC2 - neighborPort: Ethernet6 + neighborPort: Ethernet7 port: Ethernet3 - neighborDevice: leaf2-DC2 - neighborPort: Ethernet5 + neighborPort: Ethernet6 port: Ethernet2 - neighborDevice: leaf2-DC2 - neighborPort: Ethernet6 + neighborPort: Ethernet7 port: Ethernet4 - neighborDevice: OOB-DC2 neighborPort: Ethernet11 @@ -759,16 +759,16 @@ nodes: neighbors: # connections to leafs - neighborDevice: leaf3-DC2 - neighborPort: Ethernet5 + neighborPort: Ethernet6 port: Ethernet1 - neighborDevice: leaf3-DC2 - neighborPort: Ethernet6 + neighborPort: Ethernet7 port: Ethernet3 - neighborDevice: leaf4-DC2 - neighborPort: Ethernet5 + neighborPort: Ethernet6 port: Ethernet2 - neighborDevice: leaf4-DC2 - neighborPort: Ethernet6 + neighborPort: Ethernet7 port: Ethernet4 - neighborDevice: OOB-DC2 neighborPort: Ethernet12 @@ -780,7 +780,7 @@ nodes: sys_mac: 00:1c:73:02:c6:01 neighbors: - neighborDevice: OOB-CORE - neighborPort: Ethernet 1 + neighborPort: Ethernet1 port: Ethernet1 - neighborDevice: spine1-DC1 neighborPort: Ethernet15 @@ -821,7 +821,7 @@ nodes: sys_mac: 00:1c:73:03:c6:01 neighbors: - neighborDevice: OOB-CORE - neighborPort: Ethernet 2 + neighborPort: Ethernet2 port: Ethernet1 - neighborDevice: spine1-DC2 neighborPort: Ethernet15 @@ -918,7 +918,7 @@ nodes: neighborPort: Ethernet10 port: Ethernet10 - neighborDevice: borderleaf1-DC1 - neighborPort: Ethernet1 + neighborPort: Ethernet11 port: Ethernet11 - core2-isp2: @@ -955,10 +955,10 @@ nodes: - neighborDevice: core2-isp2 neighborPort: Ethernet2 port: Ethernet4 - - neighborDevice: Spine1-DC3 + - neighborDevice: spine1-DC3 neighborPort: Ethernet1 port: Ethernet5 - - neighborDevice: Spine2-DC3 + - neighborDevice: spine2-DC3 neighborPort: Ethernet1 port: Ethernet6 @@ -1008,4 +1008,6 @@ nodes: # ip_addr: 192.168.0.4 # sys_mac: 00:1c:73:a4:c6:01 # neighbors: [] -additional_ssh_nodes: \ No newline at end of file +additional_ssh_nodes: +servers: +additional_clab_nodes: