From 91bfa17461bc4686ac15dc12da77a0ad8096ff64 Mon Sep 17 00:00:00 2001 From: Jason King Date: Wed, 9 Mar 2022 12:59:10 -0800 Subject: [PATCH] Improvements and bug fixes (#126) --- .ansible-lint | 9 + .github/workflows/ci.yml | 62 +- .gitlab-ci.yml | 2 +- Dockerfile | 71 +- README.md | 6 +- ansible.cfg.docker | 17 - bootstrap-cedge.yml | 60 - build-ca.yml | 9 +- build-vmware.yml | 12 +- check-sdwan.yml | 4 +- check-vmanage.yml | 35 + clean-virl.yml | 12 +- clean-vmware.yml | 21 +- config-ca.yml | 25 - config-sdwan.yml | 16 + config-system.yml | 11 - config-uuid-otp.yml | 34 - config-virl.yml | 58 - config-vmanage.yml | 6 +- config-vmware.yml | 17 - control-node.yml | 92 - deploy-hw-edges.yml | 79 - deploy-virl.yml | 60 +- detach-template.yml | 34 +- docs/gitlab.md | 102 + docs/virl-hq1.md | 7 +- docs/virl-hq2.md | 7 +- docs/vmware-hq2.md | 5 +- export-policy.yml | 37 +- export-templates.yml | 28 +- files/crn1.yaml | 668 --- files/hq1_vmanage_templates_v20.yml | 994 +++- files/hq2_vmanage_templates_v20.yml | 4314 +++++++++-------- ...le_client-0.2.1+b739fc30f-py3-none-any.whl | Bin 25103 -> 0 bytes ...l2_client-0.8.2+b4d055d25-py3-none-any.whl | Bin 25141 -> 0 bytes files/virl2_client-2.1.0b9-py3-none-any.whl | Bin 47447 -> 0 bytes generate-template-all.yml | 127 - get-bootstrap.yml | 4 +- group_vars/all/local.yml | 8 +- inventory.yml | 5 - inventory/hq1/group_vars/all/ping_tests.yml | 30 +- inventory/hq1/group_vars/all/system.yml | 12 +- inventory/hq1/group_vars/all/viptela.yml | 7 - inventory/hq1/group_vars/all/virl.yml | 1 - inventory/hq1/host_vars/internet/virl.yml | 1 - inventory/hq1/sdwan.yml | 118 +- inventory/hq2/sdwan.yml | 149 +- play.sh | 9 +- query-attach.yml | 14 +- requirements.txt | 7 +- roles/ansible-pyats/LICENSE | 80 - roles/ansible-pyats/README.md | 112 - roles/ansible-pyats/defaults/main.yml | 2 - roles/ansible-pyats/filter_plugins/genie.py | 74 - roles/ansible-pyats/filter_plugins/pyats.py | 79 - roles/ansible-pyats/handlers/main.yml | 2 - roles/ansible-pyats/meta/main.yml | 60 - roles/ansible-pyats/tasks/compare.yml | 16 - roles/ansible-pyats/tasks/compare_command.yml | 16 - roles/ansible-pyats/tasks/compare_config.yml | 11 - roles/ansible-pyats/tasks/main.yml | 2 - roles/ansible-pyats/tasks/parse_command.yml | 8 - roles/ansible-pyats/tasks/snapshot.yml | 13 - .../ansible-pyats/tasks/snapshot_command.yml | 9 - roles/ansible-pyats/tasks/snapshot_config.yml | 8 - roles/ansible-pyats/tests/test.yml | 5 - roles/ansible-pyats/vars/main.yml | 2 - roles/sdwan-tests/defaults/main.yml | 2 - roles/sdwan-tests/handlers/main.yml | 2 - roles/sdwan-tests/tasks/ping-test.yml | 13 - roles/sdwan-tests/tests/inventory | 2 - roles/{sdwan-tests => sdwan_tests}/README.md | 0 roles/sdwan_tests/defaults/main.yml | 2 + roles/sdwan_tests/handlers/main.yml | 2 + .../meta/main.yml | 21 +- .../tasks/ping-cedge.yml | 6 +- roles/sdwan_tests/tasks/ping-test.yml | 15 + .../tasks/ping-vedge.yml | 15 +- .../tests/inventory | 0 .../tests/test.yml | 0 .../vars/main.yml | 0 templates/sdwan/netconf.j2 | 34 +- templates/sdwan/user-data.j2 | 153 +- templates/sdwan/vbond_user-data.j2 | 117 +- templates/terraform/control_tfvars.j2 | 28 +- templates/terraform/edges_tfvars.j2 | 24 +- terraform-apply.yml | 9 +- terraform-sdwan | 2 +- update-rtbh-apps.yml | 25 - update-rtbh.yml | 27 - virl-facts.yml | 5 - virl-pipeline.yml | 14 + vmware-pipeline.yml | 21 + 93 files changed, 4009 insertions(+), 4435 deletions(-) create mode 100644 .ansible-lint delete mode 100644 ansible.cfg.docker delete mode 100644 bootstrap-cedge.yml delete mode 100644 config-ca.yml create mode 100644 config-sdwan.yml delete mode 100644 config-system.yml delete mode 100644 config-uuid-otp.yml delete mode 100644 config-virl.yml delete mode 100644 config-vmware.yml delete mode 100644 control-node.yml delete mode 100644 deploy-hw-edges.yml create mode 100644 docs/gitlab.md delete mode 100644 files/crn1.yaml delete mode 100644 files/simple_client-0.2.1+b739fc30f-py3-none-any.whl delete mode 100644 files/virl2_client-0.8.2+b4d055d25-py3-none-any.whl delete mode 100644 files/virl2_client-2.1.0b9-py3-none-any.whl delete mode 100644 generate-template-all.yml delete mode 100644 inventory.yml delete mode 100644 inventory/hq1/group_vars/all/viptela.yml delete mode 100644 inventory/hq1/group_vars/all/virl.yml delete mode 100644 roles/ansible-pyats/LICENSE delete mode 100644 roles/ansible-pyats/README.md delete mode 100644 roles/ansible-pyats/defaults/main.yml delete mode 100644 roles/ansible-pyats/filter_plugins/genie.py delete mode 100644 roles/ansible-pyats/filter_plugins/pyats.py delete mode 100644 roles/ansible-pyats/handlers/main.yml delete mode 100644 roles/ansible-pyats/meta/main.yml delete mode 100644 roles/ansible-pyats/tasks/compare.yml delete mode 100644 roles/ansible-pyats/tasks/compare_command.yml delete mode 100644 roles/ansible-pyats/tasks/compare_config.yml delete mode 100644 roles/ansible-pyats/tasks/main.yml delete mode 100644 roles/ansible-pyats/tasks/parse_command.yml delete mode 100644 roles/ansible-pyats/tasks/snapshot.yml delete mode 100644 roles/ansible-pyats/tasks/snapshot_command.yml delete mode 100644 roles/ansible-pyats/tasks/snapshot_config.yml delete mode 100644 roles/ansible-pyats/tests/test.yml delete mode 100644 roles/ansible-pyats/vars/main.yml delete mode 100644 roles/sdwan-tests/defaults/main.yml delete mode 100644 roles/sdwan-tests/handlers/main.yml delete mode 100644 roles/sdwan-tests/tasks/ping-test.yml delete mode 100644 roles/sdwan-tests/tests/inventory rename roles/{sdwan-tests => sdwan_tests}/README.md (100%) create mode 100644 roles/sdwan_tests/defaults/main.yml create mode 100644 roles/sdwan_tests/handlers/main.yml rename roles/{sdwan-tests => sdwan_tests}/meta/main.yml (69%) rename roles/{sdwan-tests => sdwan_tests}/tasks/ping-cedge.yml (89%) create mode 100644 roles/sdwan_tests/tasks/ping-test.yml rename roles/{sdwan-tests => sdwan_tests}/tasks/ping-vedge.yml (76%) rename roles/{ansible-pyats => sdwan_tests}/tests/inventory (100%) rename roles/{sdwan-tests => sdwan_tests}/tests/test.yml (100%) rename roles/{sdwan-tests => sdwan_tests}/vars/main.yml (100%) delete mode 100644 update-rtbh-apps.yml delete mode 100644 update-rtbh.yml create mode 100644 virl-pipeline.yml create mode 100644 vmware-pipeline.yml diff --git a/.ansible-lint b/.ansible-lint new file mode 100644 index 00000000..39b922f0 --- /dev/null +++ b/.ansible-lint @@ -0,0 +1,9 @@ +exclude_paths: + - terraform-sdwan/ + - .github/ + - files/ + - extras/ + - docs/ + - licenses/ + - myCA/ + \ No newline at end of file diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index d021e220..b9c007d7 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -21,23 +21,30 @@ env: ANSIBLE_VAULT_PASSWORD: '${{ secrets.ANSIBLE_VAULT_PASSWORD }}' jobs: + lint: + runs-on: self-hosted + steps: + - name: Checkout Inventory + uses: actions/checkout@v2 + with: + submodules: recursive + - name: Run ansible-lint + run: ansible-lint test_19_2_1: runs-on: self-hosted concurrency: hq2 + needs: lint env: VIRL_LAB: 'sdwan-devops-hq2' VIPTELA_VERSION: '19.2.1' CLOUDINIT_TYPE: 'v1' IOSXE_SDWAN_IMAGE: 'iosxe-sdwan-16.12.2r' - CSR1000V_IMAGE: 'csr1000v-170101' - + CSR1000V_IMAGE: 'csr1000v-170101' steps: - name: Checkout Inventory uses: actions/checkout@v2 with: submodules: recursive - - name: Install PIP requirements - run: pip install -r requirements.txt - name: Clean Existing Deployment run: ansible-playbook -i inventory/hq2 clean-virl.yml --tags delete - name: Install Licenses @@ -50,7 +57,7 @@ jobs: - name: Build VMware run: ansible-playbook -i inventory/hq2 build-virl.yml - name: Configure Control Plane - run: ansible-playbook -i inventory/hq2 config-virl.yml + run: ansible-playbook -i inventory/hq2 config-sdwan.yml - name: Deploy Edges run: ansible-playbook -i inventory/hq2 deploy-virl.yml - name: Wait for Edges to Sync @@ -58,10 +65,11 @@ jobs: - name: Check SD-WAN run: ansible-playbook -i inventory/hq2 check-sdwan.yml - name: Cleanup - run: ansible-playbook -i inventory/hq2 clean-virl.yml --tags delete + run: ansible-playbook -i inventory/hq2 clean-virl.yml test_20_3_2: runs-on: self-hosted concurrency: hq2 + needs: lint env: VIRL_LAB: 'sdwan-devops-hq2' VIPTELA_VERSION: '20.3.2' @@ -73,8 +81,6 @@ jobs: uses: actions/checkout@v2 with: submodules: recursive - - name: Install PIP requirements - run: pip install -r requirements.txt - name: Clean Existing Deployment run: ansible-playbook -i inventory/hq2 clean-virl.yml --tags delete - name: Install Licenses @@ -87,7 +93,7 @@ jobs: - name: Build VMware run: ansible-playbook -i inventory/hq2 build-virl.yml - name: Configure Control Plane - run: ansible-playbook -i inventory/hq2 config-virl.yml + run: ansible-playbook -i inventory/hq2 config-sdwan.yml - name: Deploy Edges run: ansible-playbook -i inventory/hq2 deploy-virl.yml - name: Wait for Edges to Sync @@ -95,4 +101,40 @@ jobs: - name: Check SD-WAN run: ansible-playbook -i inventory/hq2 check-sdwan.yml - name: Cleanup - run: ansible-playbook -i inventory/hq2 clean-virl.yml --tags delete + run: ansible-playbook -i inventory/hq2 clean-virl.yml + test_20_7_1: + runs-on: self-hosted + concurrency: hq2 + needs: lint + env: + VIRL_LAB: 'sdwan-devops-hq2' + VIPTELA_VERSION: '20.7.1' + CLOUDINIT_TYPE: 'v2' + IOSXE_SDWAN_IMAGE: 'iosxe-sdwan-16.12.2r' + CSR1000V_IMAGE: 'csr1000v-170101' + steps: + - name: Checkout Inventory + uses: actions/checkout@v2 + with: + submodules: recursive + - name: Clean Existing Deployment + run: ansible-playbook -i inventory/hq2 clean-virl.yml + - name: Install Licenses + run: | + mkdir licenses + echo $ANSIBLE_VAULT_PASSWORD > vault-password-file + ansible-vault decrypt --vault-password-file vault-password-file files/serialFile.viptela --output licenses/serialFile.viptela + - name: Build CA + run: ansible-playbook -i inventory/hq2 build-ca.yml + - name: Build VMware + run: ansible-playbook -i inventory/hq2 build-virl.yml + - name: Configure Control Plane + run: ansible-playbook -i inventory/hq2 config-sdwan.yml + - name: Deploy Edges + run: ansible-playbook -i inventory/hq2 deploy-virl.yml + - name: Wait for Edges to Sync + run: ansible-playbook -i inventory/hq2 waitfor-sync.yml + - name: Check SD-WAN + run: ansible-playbook -i inventory/hq2 check-sdwan.yml + - name: Cleanup + run: ansible-playbook -i inventory/hq2 clean-virl.yml diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 6597a810..c08f11b6 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -47,7 +47,7 @@ build-control: config-control: stage: config-control script: - - ansible-playbook config-virl.yml + - ansible-playbook config-sdwan.yml only: changes: - files/hq1.yaml diff --git a/Dockerfile b/Dockerfile index 2c0fd407..c6e4b260 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,8 +1,6 @@ FROM alpine:3.11 ARG build_date=unspecified -ARG terraform_version=0.12.24 -# ARG virl2_client_pkg=virl2_client-2.1.0b9-py3-none-any.whl LABEL org.opencontainers.image.title="Cisco-SDWAN" \ org.opencontainers.image.description="Cisco SDWAN DevOps" \ @@ -10,48 +8,33 @@ LABEL org.opencontainers.image.title="Cisco-SDWAN" \ org.opencontainers.image.created="${build_date}" \ org.opencontainers.image.url="https://github.com/CiscoDevNet/sdwan-devops" +RUN apk add --no-cache gcc musl-dev make + +RUN apk add --no-cache python3 +RUN if [ ! -e /usr/bin/python ]; then ln -sf python3 /usr/bin/python ; fi + +RUN python3 -m ensurepip +# RUN rm -r /usr/lib/python*/ensurepip +RUN pip3 install --no-cache --upgrade pip setuptools wheel +# RUN if [ ! -e /usr/bin/pip ]; then ln -s pip3 /usr/bin/pip ; fi + +RUN apk --update add git sshpass libffi-dev libxml2-dev libxslt-dev python3-dev openssl-dev openssh-keygen + COPY requirements.txt /tmp/requirements.txt -# COPY files/${virl2_client_pkg} /tmp/${virl2_client_pkg} - -RUN echo "===> Installing GCC <===" && \ - apk add --no-cache gcc musl-dev make && \ - \ - \ - echo "===> Installing Python <===" && \ - apk add --no-cache python3 && \ - if [ ! -e /usr/bin/python ]; then ln -sf python3 /usr/bin/python ; fi && \ - \ - \ - echo "===> Installing pip <===" && \ - python3 -m ensurepip && \ - rm -r /usr/lib/python*/ensurepip && \ - pip3 install --no-cache --upgrade pip setuptools wheel && \ - if [ ! -e /usr/bin/pip ]; then ln -s pip3 /usr/bin/pip ; fi && \ - \ - \ - echo "===> Installing dependancies <===" && \ - apk --update add sshpass libffi-dev libxml2-dev libxslt-dev python3-dev openssl-dev openssh-keygen && \ - \ - \ - echo "===> Installing PIP Requirements <===" && \ - pip install -r /tmp/requirements.txt && \ - \ - \ - # echo "===> Installing local virl2 client <===" && \ - # pip install /tmp/${virl2_client_pkg} && \ - # \ - # \ - echo "===> Installing Terraform <===" && \ - apk --update add wget unzip cdrkit curl && \ - \ - \ - wget --quiet https://releases.hashicorp.com/terraform/${terraform_version}/terraform_${terraform_version}_linux_amd64.zip && \ - unzip terraform_${terraform_version}_linux_amd64.zip && \ - mv terraform /usr/bin && \ - rm terraform_${terraform_version}_linux_amd64.zip - -ENV ANSIBLE_HOST_KEY_CHECKING=false \ - ANSIBLE_RETRY_FILES_ENABLED=false \ - ANSIBLE_SSH_PIPELINING=true +RUN pip install -r /tmp/requirements.txt + +ARG terraform_version=0.13.7 + +RUN apk --update add wget unzip cdrkit curl +RUN wget --quiet https://releases.hashicorp.com/terraform/${terraform_version}/terraform_${terraform_version}_linux_amd64.zip +RUN unzip terraform_${terraform_version}_linux_amd64.zip +RUN mv terraform /usr/bin +RUN rm terraform_${terraform_version}_linux_amd64.zip + +ENV ANSIBLE_HOST_KEY_CHECKING=false +ENV ANSIBLE_RETRY_FILES_ENABLED=false +ENV ANSIBLE_SSH_PIPELINING=true +ENV ANSIBLE_LOCAL_TMP=/tmp +ENV ANSIBLE_REMOTE_TMP=/tmp WORKDIR /ansible diff --git a/README.md b/README.md index 8c6e4468..b377f2bc 100644 --- a/README.md +++ b/README.md @@ -26,6 +26,7 @@ If you want to skip all the info and documentation below and just run the automa - [Build the hq1 topology in CML](docs/virl-hq1.md) - [Build the hq2 topology in CML](docs/virl-hq2.md) - [Build the hq2 topology in VMware](docs/vmware-hq2.md) +- [GitLab CI pipeline](docs/gitlab.md) ## Software Dependancies @@ -69,9 +70,8 @@ Simulation can be used for developing new deployments as well as testing changes * `build-virl.yml` or `build-vmware.yml` * Creates Day0 config for VNFs based on the data in the `sdwan.yml` file * Provision and start VNFs on virtual infrastructure -* `config-virl.yml` or `config-vmware.yml` - * Configure setting on vmanage - * Install Enterprise CA when required +* `config-sdwan.yml` + * Configure settings on vmanage * Add vbonds and vsmarts to vmanage * Create CSRs for vbonds and vsmarts * Install certificates into vmanage diff --git a/ansible.cfg.docker b/ansible.cfg.docker deleted file mode 100644 index 77b87e45..00000000 --- a/ansible.cfg.docker +++ /dev/null @@ -1,17 +0,0 @@ -[defaults] -roles_path = ${PWD}/roles -host_key_checking = False -inventory = ./inventory -local_tmp = /tmp/ansible/${USER} -remote_tmp = /tmp/ansible/${USER} - -[persistent_connection] -connect_timeout = 60 -command_timeout = 60 - -# [inventory] -# enable_plugins = auto, yaml, virl - -[ssh_connection] -ssh_args = -C -o ControlMaster=auto -o ControlPersist=60s -control_path = /dev/shm/cp%%h-%%p-%%r diff --git a/bootstrap-cedge.yml b/bootstrap-cedge.yml deleted file mode 100644 index 3f30d8e3..00000000 --- a/bootstrap-cedge.yml +++ /dev/null @@ -1,60 +0,0 @@ -- name: Bootstrap cedge nodes - hosts: "{{ passed }}" - connection: local - gather_facts: no - serial: 1 - # This is a workaround for a bug in vmanage. When multiple requests - # for boostrap are made to vmanage at the same time, it gets corrupted - vars: - ansible_network_os: ios - tasks: - - set_fact: - vmanage_host: "{{ groups.vmanage_hosts | first }}" - - - set_fact: - vmanage_ip: "{{ hostvars[vmanage_host].ansible_host | default(hostvars[vmanage_host].sdwan_transport_ip) }}" - - - set_fact: - bootstrap_config: "/tmp/{{ inventory_hostname }}.cfg" - - - name: Get bootstrap info - vmanage_device_bootstrap: - host: "{{ vmanage_ip }}" - user: "{{ vmanage_user }}" - password: "{{ vmanage_pass }}" - uuid: "{{ sdwan_uuid }}" - register: result - retries: 10 - delay: 10 - until: result is not failed - - - name: Generate day0 config - copy: - content: "{{ result.bootstrap.bootstrapConfig }}" - dest: "{{ bootstrap_config }}" - delegate_to: localhost - when: result.bootstrap.bootstrapConfig is defined - - - stat: - path: "{{ bootstrap_config }}" - register: bootstrap_file - - - name: Copy day0 config to edge - net_put: - src: "{{ bootstrap_config }}" - dest: ciscosdwan_cloud_init.cfg - connection: network_cli - register: copy_result - when: bootstrap_file.stat.exists == true - - - name: Reset edge - cli_command: - command: "request platform software sdwan software reset" - register: command_result - connection: network_cli - when: bootstrap_file.stat.exists == true - - - name: Cleanup day0 config - file: - path: "{{ bootstrap_config }}" - state: absent diff --git a/build-ca.yml b/build-ca.yml index 3eca0353..919b2b62 100644 --- a/build-ca.yml +++ b/build-ca.yml @@ -15,21 +15,24 @@ - name: Generate an OpenSSL private key. openssl_privatekey: cipher: des3 - passphrase: "{{ sdwan_CA_passphrase }}" + passphrase: "{{ sdwan_ca_passphrase }}" path: "{{ sdwan_cert_dir }}/myCA.key" - name: Generate an OpenSSL CSR. openssl_csr: path: "{{ sdwan_cert_dir }}/myCA.csr" privatekey_path: "{{ sdwan_cert_dir }}/myCA.key" - privatekey_passphrase: "{{ sdwan_CA_passphrase }}" + privatekey_passphrase: "{{ sdwan_ca_passphrase }}" + basic_constraints_critical: true + basic_constraints: + - CA:TRUE common_name: viptelaCA.local - name: Generate a Self Signed OpenSSL certificate. openssl_certificate: path: "{{ sdwan_cert_dir }}/myCA.pem" privatekey_path: "{{ sdwan_cert_dir }}/myCA.key" - privatekey_passphrase: "{{ sdwan_CA_passphrase }}" + privatekey_passphrase: "{{ sdwan_ca_passphrase }}" csr_path: "{{ sdwan_cert_dir }}/myCA.csr" # select_crypto_backend: pyopenssl provider: selfsigned \ No newline at end of file diff --git a/build-vmware.yml b/build-vmware.yml index 5b12fdd1..337b9a87 100644 --- a/build-vmware.yml +++ b/build-vmware.yml @@ -1,3 +1,13 @@ +- name: Generate day0 configs for control hosts + hosts: sdwan_control + connection: local + gather_facts: no + tasks: + - name: Generating day0 config + set_fact: + day0_config: "{{ lookup('template', virl_config_template) }}" + when: virl_config_template is defined + - import_playbook: terraform-apply.yml vars: - sdwan_type: control \ No newline at end of file + sdwan_type: control diff --git a/check-sdwan.yml b/check-sdwan.yml index f443b471..0eab5495 100644 --- a/check-sdwan.yml +++ b/check-sdwan.yml @@ -3,7 +3,7 @@ connection: local gather_facts: no roles: - - sdwan-tests + - sdwan_tests vars: vmanage_host: "{{ groups.vmanage_hosts | first }}" vmanage_mgmt_interface: "{{ hostvars[vmanage_host].mgmt_interface | default('ansible_host') }}" @@ -11,7 +11,7 @@ state: present tasks: - include_role: - name: sdwan-tests + name: sdwan_tests tasks_from: ping-test vars: ping_dst_ip: "{{ item.dst_ip }}" diff --git a/check-vmanage.yml b/check-vmanage.yml index d1157f3b..715d9337 100644 --- a/check-vmanage.yml +++ b/check-vmanage.yml @@ -1,3 +1,38 @@ +- name: Wait for vmanage mgmt interface to be available (this could take a few minutes) + hosts: localhost + connection: local + tags: + - check_control + - check_all + - control + - CA + any_errors_fatal: true + gather_facts: no + vars: + vmanage_host: "{{ groups.vmanage_hosts | first }}" + vmanage_mgmt_interface: "{{ hostvars[vmanage_host].mgmt_interface | default('ansible_host') }}" + tasks: + - name: Wait until the mgmt interface comes up + virl_lab_facts: + host: "{{ virl_host }}" + user: "{{ virl_username }}" + password: "{{ virl_password }}" + lab: "{{ virl_lab }}" + register: result + until: result.virl_facts.nodes[vmanage_host][vmanage_mgmt_interface] | default(False) + when: vmanage_mgmt_interface == 'ansible_host' + retries: 12 + delay: 10 + + - name: Refresh Inventory + meta: refresh_inventory + + - set_fact: + vmanage_ip: "{{ hostvars[vmanage_host][vmanage_mgmt_interface] | ipaddr('address') }}" + + - debug: + var: vmanage_ip + - name: Verify that vManage is fully operational hosts: localhost connection: local diff --git a/clean-virl.yml b/clean-virl.yml index 20ad792c..7ce92ad3 100644 --- a/clean-virl.yml +++ b/clean-virl.yml @@ -17,15 +17,12 @@ gather_facts: no tags: - vmanage + vars: + vmanage_host: "{{ groups.vmanage_hosts | first }}" + vmanage_mgmt_interface: "{{ hostvars[vmanage_host].mgmt_interface | default('ansible_host') }}" + vmanage_ip: "{{ hostvars[vmanage_host][vmanage_mgmt_interface] | ipaddr('address') }}" tasks: - block: - - set_fact: - vmanage_host: "{{ groups.vmanage_hosts | first | default('') }}" - - - set_fact: - vmanage_ip: "{{ hostvars[vmanage_host].ansible_host | default('') }}" - when: vmanage_host is defined - - name: Remove device from vManage vmanage_device: host: "{{ vmanage_ip }}" @@ -76,7 +73,6 @@ connection: local gather_facts: no tags: - - never - delete tasks: - name: Delete the lab diff --git a/clean-vmware.yml b/clean-vmware.yml index f49845a6..7dd2b2f1 100644 --- a/clean-vmware.yml +++ b/clean-vmware.yml @@ -54,4 +54,23 @@ vsmart_template: "{{ vmware_vsmart_template }}" vedge_template: "{{ vmware_vedge_template }}" cedge_template: "{{ vmware_cedge_template }}" - when: edges_stat_result.stat.exists == true \ No newline at end of file + cloudinit_type: "{{ cloudinit_type }}" + when: edges_stat_result.stat.exists == true + +- name: Remove terraform state files + hosts: localhost + connection: local + tags: + - delete + - never + gather_facts: no + tasks: + - name: Delete control state + file: + state: absent + path: terraform-sdwan/vmware/terraform.tfstate.d/control/terraform.tfstate + + - name: Delete edge state + file: + state: absent + path: terraform-sdwan/vmware/terraform.tfstate.d/edges/terraform.tfstate \ No newline at end of file diff --git a/config-ca.yml b/config-ca.yml deleted file mode 100644 index c6d50f41..00000000 --- a/config-ca.yml +++ /dev/null @@ -1,25 +0,0 @@ -- name: Copy CA to controllers - hosts: "{{ passed }}" - tags: - - control - - debug - any_errors_fatal: true - gather_facts: no - connection: network_cli - vars: - ansible_network_os: ios - host_mgmt_interface: "{{ hostvars[inventory_hostname].mgmt_interface | default('ansible_host') }}" - ansible_host: "{{ hostvars[inventory_hostname][host_mgmt_interface] | ipaddr('address') }}" - - tasks: - - name: Copy Root CA to controllers - net_put: - src: "{{ sdwan_cert_dir }}/myCA.pem" - dest: /home/admin - register: copy_results - - - name: Install RootCA - cli_command: - command: "request root-cert-chain install /home/admin/myCA.pem" - register: command_result - failed_when: "'Failed' in command_result.stdout" \ No newline at end of file diff --git a/config-sdwan.yml b/config-sdwan.yml new file mode 100644 index 00000000..5f56cb68 --- /dev/null +++ b/config-sdwan.yml @@ -0,0 +1,16 @@ +- import_playbook: check-reqs.yml + +- import_playbook: check-vmanage.yml + +- import_playbook: config-vmanage.yml + +- import_playbook: import-templates.yml + +- import_playbook: import-policy.yml + +- import_playbook: attach-template.yml + vars: + passed: vsmart_hosts + +- import_playbook: activate-policy.yml + diff --git a/config-system.yml b/config-system.yml deleted file mode 100644 index 44fc807a..00000000 --- a/config-system.yml +++ /dev/null @@ -1,11 +0,0 @@ -- name: Push NETCONF template - hosts: "{{ passed }}" - vars: - host_mgmt_interface: "{{ hostvars[inventory_hostname].mgmt_interface | default('ansible_host') }}" - ansible_host: "{{ hostvars[inventory_hostname][host_mgmt_interface] | ipaddr('address') }}" - connection: netconf - any_errors_fatal: true - gather_facts: no - tasks: - - netconf_config: - content: "{{ lookup('template', 'sdwan/netconf/system.j2') }}" \ No newline at end of file diff --git a/config-uuid-otp.yml b/config-uuid-otp.yml deleted file mode 100644 index 83e465c1..00000000 --- a/config-uuid-otp.yml +++ /dev/null @@ -1,34 +0,0 @@ -- name: Activate Vedge Cloud - hosts: "{{ passed | default('sdwan_edges') }}" - gather_facts: no - tags: - - bootstrap - - edges - connection: network_cli - vars: - vmanage_host: "{{ groups.vmanage_hosts | first }}" - vmanage_mgmt_interface: "{{ hostvars[vmanage_host].mgmt_interface | default('ansible_host') }}" - vmanage_ip: "{{ hostvars[vmanage_host][vmanage_mgmt_interface] | ipaddr('address') }}" - ansible_network_os: ios - serial: 1 - # This is a workaround for a bug in vmanage. When multiple requests - # for boostrap are made to vmanage at the same time, it gets corrupted - tasks: - - name: Get OTP for UUID - vmanage_device_bootstrap: - host: "{{ vmanage_ip }}" - user: "{{ vmanage_user }}" - password: "{{ vmanage_pass }}" - uuid: "{{ sdwan_uuid }}" - register: result - retries: 10 - delay: 10 - until: result is not failed - delegate_to: localhost - - - name: Activate vedge cloud with UUID and OTP - cli_command: - command: "request vedge-cloud activate chassis-number {{ sdwan_uuid }} token {{ result.bootstrap.otp }}" - connection: network_cli - register: command_results - diff --git a/config-virl.yml b/config-virl.yml deleted file mode 100644 index 5243a7e5..00000000 --- a/config-virl.yml +++ /dev/null @@ -1,58 +0,0 @@ -- import_playbook: check-reqs.yml - -- name: Wait for vmanage mgmt interface to be available - hosts: localhost - connection: local - tags: - - check_control - - check_all - - control - - CA - any_errors_fatal: true - gather_facts: no - vars: - vmanage_host: "{{ groups.vmanage_hosts | first }}" - vmanage_mgmt_interface: "{{ hostvars[vmanage_host].mgmt_interface | default('ansible_host') }}" - tasks: - - name: Wait until the mgmt interface comes up - virl_lab_facts: - host: "{{ virl_host }}" - user: "{{ virl_username }}" - password: "{{ virl_password }}" - lab: "{{ virl_lab }}" - register: result - until: result.virl_facts.nodes[vmanage_host][vmanage_mgmt_interface] | default(False) - when: vmanage_mgmt_interface == 'ansible_host' - retries: 12 - delay: 10 - - - name: Refresh Inventory - meta: refresh_inventory - - - set_fact: - vmanage_ip: "{{ hostvars[vmanage_host][vmanage_mgmt_interface] | ipaddr('address') }}" - - - debug: - var: vmanage_ip - -- import_playbook: check-vmanage.yml - -- import_playbook: config-vmanage.yml - -- import_playbook: import-templates.yml - tags: - - templates - -- import_playbook: import-policy.yml - tags: - - policy - -- import_playbook: attach-template.yml - tags: - - templates - - attach - -- import_playbook: activate-policy.yml - tags: - - policy - - attach diff --git a/config-vmanage.yml b/config-vmanage.yml index 77755cce..e4d522d3 100644 --- a/config-vmanage.yml +++ b/config-vmanage.yml @@ -28,8 +28,8 @@ host: "{{ vmanage_ip }}" user: "{{ vmanage_user }}" password: "{{ vmanage_pass }}" - device_username: admin - device_password: admin + device_username: "{{ hostvars[item].ansible_user }}" + device_password: "{{ hostvars[item].ansible_password }}" name: "{{ item }}" personality: "{{ hostvars[item].sdwan_personality }}" transport_ip: "{{ hostvars[item].vpn0_ip | ipaddr('address')}}" @@ -79,7 +79,7 @@ provider: ownca ownca_path: "{{ sdwan_cert_dir }}/myCA.pem" ownca_privatekey_path: "{{ sdwan_cert_dir }}/myCA.key" - ownca_privatekey_passphrase: "{{ sdwan_CA_passphrase }}" + ownca_privatekey_passphrase: "{{ sdwan_ca_passphrase }}" loop: "{{ groups.sdwan_control }}" delegate_to: localhost diff --git a/config-vmware.yml b/config-vmware.yml deleted file mode 100644 index 1aafa9d8..00000000 --- a/config-vmware.yml +++ /dev/null @@ -1,17 +0,0 @@ -- import_playbook: check-reqs.yml - -- import_playbook: check-vmanage.yml - -- import_playbook: config-system.yml passed=sdwan_control - -- import_playbook: config-ca.yml passed=vbond_hosts - -- import_playbook: config-ca.yml passed=vsmart_hosts - -- import_playbook: config-vmanage.yml - -- import_playbook: import-templates.yml - -- import_playbook: import-policy.yml - -- import_playbook: attach-template.yml passed=vsmart_hosts \ No newline at end of file diff --git a/control-node.yml b/control-node.yml deleted file mode 100644 index bb54cfad..00000000 --- a/control-node.yml +++ /dev/null @@ -1,92 +0,0 @@ -- hosts: control - gather_facts: no - become: yes - pre_tasks: - - name: Install python for Ansible - raw: bash -c "test -e /usr/bin/python || (apt -qqy update && apt install -qqy python-minimal)" - register: output - changed_when: output.stdout - - name: Gathering Facts - setup: - tasks: - - name: Update and upgrade apt - apt: - upgrade: yes - update_cache: yes - - - name: Install packages - apt: - name: - - python3 - - python3-pip - - libssl-dev - - sshpass - - python3-setuptools - - python-setuptools - - libffi-dev - - - name: Install required PIP packages - pip: - name: "{{ item }}" - executable: pip3 - requirements: requirements.txt - - - - name: Make python 3 the default - alternatives: - name: python - link: /usr/bin/python - path: /usr/bin/python3 - priority: 10 - - - name: Add VIRL hosts to /etc/hosts - lineinfile: - dest: /etc/hosts - regexp: '.*{{ item }}$' - line: "{{ hostvars[item].ansible_host }} {{ item }}" - state: present - when: hostvars[item].ansible_host is defined - with_items: "{{ groups.virl_hosts }}" - - - name: clone the repo - git: - repo: 'https://github.com/CiscoDevNet/ps-crn.git' - dest: /home/virl/ps-crn - become_user: virl - - - name: Creare .virlrc - blockinfile: - path: /home/virl/.virlrc - create: yes - block: | - VIRL_USERNAME={{ virl_username }} - VIRL_PASSWORD={{ virl_password }} - VIRL_HOST=192.133.178.9 - - - name: Create simulation environment directory - file: - path: /home/virl/ps-crn/.virl/default - state: directory - - - name: Create simulation ID file - copy: - dest: /home/virl/ps-crn/.virl/default/id - content: "{{ virl_simulation }}" - - - name: Create license directory - file: - path: /home/virl/ps-crn/licenses - state: directory - - - name: Copy license - copy: - dest: /home/virl/ps-crn/licenses - src: licenses/serialFile.viptela - - - name: Copy viptela.yml - copy: - dest: /home/virl/ps-crn/inventory/group_vars/all/viptela.yml - src: inventory/group_vars/all/viptela.yml - - - debug: - msg: "Control node IP: {{ ansible_host }}" \ No newline at end of file diff --git a/deploy-hw-edges.yml b/deploy-hw-edges.yml deleted file mode 100644 index 6f2c0434..00000000 --- a/deploy-hw-edges.yml +++ /dev/null @@ -1,79 +0,0 @@ -- name: Attach template to device - hosts: sdwan_edge:&physical - connection: local - gather_facts: no - tags: - - attach - - edge - vars: - vmanage_host: "{{ groups.vmanage_hosts | first }}" - vmanage_mgmt_interface: "{{ hostvars[vmanage_host].mgmt_interface | default('ansible_host') }}" - vmanage_ip: "{{ hostvars[vmanage_host][vmanage_mgmt_interface] | ipaddr('address') }}" - tasks: - - name: Attach template to device - vmanage_device_attachment: - host: "{{ vmanage_ip }}" - user: "{{ vmanage_user }}" - password: "{{ vmanage_pass }}" - uuid: "{{ sdwan_uuid }}" - device_name: "{{ inventory_hostname }}" - system_ip: "{{ sdwan_system_ip }}" - site_id: "{{ sdwan_site_id }}" - template: "{{ sdwan_template.name }}" - variables: "{{ sdwan_template.variables | default(omit) }}" - wait: yes - state: present - when: sdwan_template is defined - register: attachment_results - -- name: Configuring SDWAN system information via Netconf - hosts: sdwan_edge:&physical - connection: netconf - tags: - - edge - - netconf - any_errors_fatal: true - gather_facts: no - tasks: - - name: Push NETCONF template - netconf_config: - content: "{{ lookup('template', 'sdwan/netconf/system.j2') }}" - register: configure_result - when: bootstrap_method == "netconf" - -- name: Bootstrap Edge Routers - hosts: sdwan_edge:&physical - gather_facts: no - tags: - - bootstrap - - edge - vars: - ansible_network_os: ios - serial: 1 - # This is a workaround for a bug in vmanage. When multiple requests - # for boostrap are made to vmanage at the same time, it gets corrupted - tasks: - - set_fact: - vmanage_host: "{{ groups.vmanage_hosts | first }}" - - - set_fact: - vmanage_ip: "{{ hostvars[vmanage_host].ansible_host }}" - - - name: Install Root CA on edges routers - block: - - name: Copy Root CA to edge router - copy: - src: "{{ sdwan_cert_dir }}/myCA.pem" - dest: /home/admin - register: copy_results - - - name: Install Root CA - cli_command: - command: "request root-cert-chain install /home/admin/myCA.pem" - register: command_result - connection: network_cli - failed_when: "'Failed' in command_result.stdout" - changed_when: true - when: copy_results.changed - - when: bootstrap_method == "netconf" \ No newline at end of file diff --git a/deploy-virl.yml b/deploy-virl.yml index 9d186c17..e71b1a78 100644 --- a/deploy-virl.yml +++ b/deploy-virl.yml @@ -1,38 +1,13 @@ -- import_playbook: attach-template.yml passed=sdwan_edge:&virl_hosts - -- name: Get the bootstrap for edge nodes - hosts: sdwan_edge:&virl_hosts - connection: local - gather_facts: no - tags: - - start - - edge +- import_playbook: attach-template.yml vars: - vmanage_host: "{{ groups.vmanage_hosts | first }}" - vmanage_mgmt_interface: "{{ hostvars[vmanage_host].mgmt_interface | default('ansible_host') }}" - vmanage_ip: "{{ hostvars[vmanage_host][vmanage_mgmt_interface] | ipaddr('address') }}" - serial: 1 - # This is a workaround for a bug in vmanage. When multiple requests - # for boostrap are made to vmanage at the same time, it gets corrupted - tasks: - - name: Get bootstrap info - vmanage_device_bootstrap: - host: "{{ vmanage_ip }}" - user: "{{ vmanage_user }}" - password: "{{ vmanage_pass }}" - uuid: "{{ sdwan_uuid }}" - register: result - retries: 10 - delay: 10 - until: result is not failed + passed: sdwan_edge - - name: Generating day0 config - set_fact: - day0_config: "{{ result.bootstrap.bootstrapConfig }}" - when: result.bootstrap.bootstrapConfig is defined +- import_playbook: get-bootstrap.yml + vars: + passed: sdwan_edge - name: Start the edge nodes - hosts: sdwan_edge:&virl_hosts + hosts: sdwan_edge connection: local gather_facts: no tags: @@ -49,26 +24,3 @@ state: started image_definition: "{{ virl_image_definition | default(omit) }}" config: "{{ day0_config | default(omit) }}" - -- name: Push Certs to Controllers - hosts: sdwan_edge:&virl_hosts - connection: local - gather_facts: no - tags: - - start - - edge - vars: - vmanage_host: "{{ groups.vmanage_hosts | first }}" - vmanage_ip: "{{ hostvars[vmanage_host].ansible_host | default(hostvars[vmanage_host].vpn0_ip | ipaddr('address')) }}" - tasks: - - name: Push Certs to Controllers - vmanage_device_certificate: - host: "{{ vmanage_ip }}" - user: "{{ vmanage_user }}" - password: "{{ vmanage_pass }}" - state: push - register: result - retries: 10 - delay: 10 - until: result is not failed - run_once: yes diff --git a/detach-template.yml b/detach-template.yml index 60d431c1..4452cdfc 100644 --- a/detach-template.yml +++ b/detach-template.yml @@ -1,5 +1,5 @@ - name: Detach Template - hosts: viptela:&virl_hosts + hosts: "{{ passed | default('sdwan') }}" connection: local gather_facts: no vars: @@ -16,33 +16,7 @@ device: "{{ inventory_hostname }}" wait: yes state: absent - delegate_to: localhost - when: viptela.template is defined + when: sdwan_template is defined + async: 90 + poll: 10 register: attachment_results - -# -## - debug: -## var: attachment_results -# - block: -# - name: Attach template to device -# vmanage_device_action_status: -# user: "{{ ansible_user }}" -# host: "{{ vmanage_ip }}" -# password: "{{ ansible_password }}" -# id: "{{ attachment_results.action_id }}" -# when: attachment_results.action_id is defined -# register: action_status -# until: action_status.json.data[0].statusId != 'in_progress' -# retries: 48 -# delay: 5 -# -# -# - debug: -# msg: "{{ action_status.json.data[0].statusId }}: {{ action_status.json.data[0].currentActivity}}" -# when: attachment_results.changed -# failed_when: action_status.json.data[0].statusId == 'failure' -# -# when: viptela is defined - - - diff --git a/docs/gitlab.md b/docs/gitlab.md new file mode 100644 index 00000000..1ed84c66 --- /dev/null +++ b/docs/gitlab.md @@ -0,0 +1,102 @@ +# Building a CI pipeline with GitLab + +The steps below will build out a CI pipeline for SD-WAN using GitLab. These instructions assume that you are already able to run all the playbooks manually to build out the topology and configure the SD-WAN. If you have not done that first, go back and make sure that the playbooks run successfully before trying them in GitLab CI. + +## Setup + +1. Clone the repo. + ``` + git clone https://github.com/CiscoDevNet/sdwan-devops.git + ``` + +1. Set the organization name. Replace the value below with your organization name. + ``` + export VMANAGE_ORG=myorgname + ``` + +1. Copy a valid license file to `licenses/serialFile.viptela`. + +1. Edit `ansible.cfg` and set the inventory variable to point to hq1. + ``` + inventory = ./inventory/hq1 + ``` + +1. Set the needed environment variables for access to your CML infrastucture. Replace the values below with your server, credentials and lab name. + ``` + export VIRL_HOST=myvirlhost.example.com + export VIRL_USERNAME=myusername + export VIRL_PASSWORD=mypasword + export VIRL_LAB=myusername_sdwan + ``` + +1. Set the version of IOS-XE image to use for edge devices. + ``` + export IOSXE_SDWAN_IMAGE=iosxe-sdwan-16.12.2r + ``` + +1. Set the version of CSR1000v image to use for underlay devices. + ``` + export CSR1000V_IMAGE=csr1000v-170301 + ``` + +1. And finally, set the version of control plane to use. + ``` + export VIPTELA_VERSION=19.2.1 + ``` + +>Note: This value gets appended to the image name (e.g. viptela-manage, viptela-smart, etc.) so make sure these names line up with the image definitions you have in CML. + +1. Log into your GitLab instance and create a GITLAB_API_TOKEN + - In the upper left of console, click on the symbol for your account and then Settings + - In the left menu, click on "Access Tokens" + - Provide a token name, expiration, the api scope, click "Create personal access token", and save the generated TOKEN for the next step + +1. Export the following variables to match your environment. + ``` + export GITLAB_HOST=https://gitlab.example.com + export GITLAB_USER= + export GITLAB_API_TOKEN= + export GITLAB_PROJECT=sdwan-devops + ``` + +## Create a CI pipeline in GitLab + +1. Create the GitLab project and CI/CD variables. + ``` + extras/create-gitlab-project.sh + ``` + +1. Remove the old origin, add new origin and push to GitLab. + ``` + git remote remove origin + git remote add origin $GITLAB_HOST/$GITLAB_USER/$GITLAB_PROJECT.git + git config http.version HTTP/1.1 + ``` + +1. Commit your license file to the repo. + ``` + git add -f licenses/serialFile.viptela + git commit -m "Adding license file" + ``` + +1. Push the repo to GitLab. + ``` + git push --set-upstream origin master + ``` + + >Note: enter your GitLab credentials if asked + +1. From the GitLab web UI, navigate to the CI/CD -> Pipelines page for the project. You should see a pipeline currently active since we committed the model-driven-devops code and we had a `.gitlab-ci.yml` file present. If that file is present, GitLab will automatically try to execute the CI pipeline defined inside. + +1. Use the graphical representation of the pipeline to click through the console output of the various stages. The entire pipeline will take approximately ~8 minutes to complete. Wait until it completes to go onto the next step. + +## Cleanup +1. Remove project from GitLab. + ``` + extras/delete-gitlab-project.sh + ``` + +1. Delete lab from CML. + ``` + ./play.sh clean-virl.yml --tags "delete" + ``` diff --git a/docs/virl-hq1.md b/docs/virl-hq1.md index 6c32323c..5bd5aa95 100644 --- a/docs/virl-hq1.md +++ b/docs/virl-hq1.md @@ -61,7 +61,7 @@ If your CML server does not have the SD-WAN images installed, follow the steps [ 1. Configure the SD-WAN control plane using the supplied inventory data. ``` - ./play.sh config-virl.yml + ./play.sh config-sdwan.yml ``` 1. Provision and bootstrap the edges. @@ -101,8 +101,3 @@ To clean individual nodes, use `--limit`. ``` ./play.sh clean-virl.yml --limit=site1-cedge1 ``` - -To remove the lab completely from the VIRL server. -``` -./play.sh clean-virl.yml --tags=delete -``` diff --git a/docs/virl-hq2.md b/docs/virl-hq2.md index 037a73ff..7c01dc4c 100644 --- a/docs/virl-hq2.md +++ b/docs/virl-hq2.md @@ -72,7 +72,7 @@ If your CML server does not have the SD-WAN images installed, follow the steps [ 1. Configure the SD-WAN control plane using the supplied inventory data. ``` - ./play.sh config-virl.yml + ./play.sh config-sdwan.yml ``` 1. Provision and bootstrap the edges. @@ -112,8 +112,3 @@ To clean individual nodes, use `--limit`. ``` ./play.sh clean-virl.yml --limit=site1-cedge1 ``` - -To remove the lab completely from the VIRL server. -``` -./play.sh clean-virl.yml --tags=delete -``` diff --git a/docs/vmware-hq2.md b/docs/vmware-hq2.md index 80e84e3f..4fb49304 100644 --- a/docs/vmware-hq2.md +++ b/docs/vmware-hq2.md @@ -90,7 +90,7 @@ The VMware playbooks make use of terraform to provision the control plane and ed 1. Configure the SD-WAN control plane using the supplied inventory data. ``` - ./play.sh config-vmware.yml + ./play.sh config-sdwan.yml ``` > Note: sometimes this playbook will fail because an incorrect IP address was detected for vBond. If this happens, simply re-run the `build-vmware.yml` playbook as shown above. This appears to be a bug in the way vBond reports IP addressing to VMware. @@ -110,7 +110,8 @@ The VMware playbooks make use of terraform to provision the control plane and ed ``` ./play.sh check-sdwan.yml ``` - + > Note: Sometimes VMware does not return the correct primary IP address for a given edge device. To refresh the terraform state with updated primary IP addresses you can run `ansible-playbook terraform-apply.yml -e sdwan_type=edges --tags apply`. + ## Clean the topology To delete the entire simulation, including the control plane and edges. diff --git a/export-policy.yml b/export-policy.yml index 0fd9c22d..2121f6cd 100644 --- a/export-policy.yml +++ b/export-policy.yml @@ -5,40 +5,11 @@ vmanage_host: "{{ groups.vmanage_hosts | first }}" vmanage_mgmt_interface: "{{ hostvars[vmanage_host].mgmt_interface | default('ansible_host') }}" vmanage_ip: "{{ hostvars[vmanage_host][vmanage_mgmt_interface] | ipaddr('address') }}" - file: vmanage_policy.yml + file: vmanage-policy.yml gather_facts: no - tasks: - - name: Get policy lists - vmanage_policy_list_facts: + tasks: + - vmanage_export_policy: user: "{{ ansible_user }}" host: "{{ vmanage_ip }}" password: "{{ ansible_password }}" - register: policy_list_facts - - - name: Get policy definitions - vmanage_policy_definition_facts: - user: "{{ ansible_user }}" - host: "{{ vmanage_ip }}" - password: "{{ ansible_password }}" - register: policy_definition_facts - - - name: Get central policies - vmanage_central_policy_facts: - user: "{{ ansible_user }}" - host: "{{ vmanage_ip }}" - password: "{{ ansible_password }}" - register: central_policy_facts - - - set_fact: - vmanage_policy: - vmanage_policy_lists: "{{ policy_list_facts.policy_lists }}" - vmanage_policy_definitions: "{{ policy_definition_facts.policy_definitions }}" - vmanage_central_policies: "{{ central_policy_facts.central_policies }}" - -# - debug: -# var: vmanage_policy - - - name: Write out policies to {{ file }} - copy: - content: "{{ vmanage_policy | to_nice_yaml(indent=2, width=1337) }}" - dest: "{{ file }}" \ No newline at end of file + file: "{{ file }}" diff --git a/export-templates.yml b/export-templates.yml index 71df1f15..3780be9f 100644 --- a/export-templates.yml +++ b/export-templates.yml @@ -1,35 +1,15 @@ -- name: Export vManage Policy Lists +- name: Export vManage Templates hosts: localhost connection: local vars: vmanage_host: "{{ groups.vmanage_hosts | first }}" vmanage_mgmt_interface: "{{ hostvars[vmanage_host].mgmt_interface | default('ansible_host') }}" vmanage_ip: "{{ hostvars[vmanage_host][vmanage_mgmt_interface] | ipaddr('address') }}" - file: vmanage_templates.yml + file: vmanage-templates.yml gather_facts: no tasks: - - name: Get device templates - vmanage_device_template_facts: + - vmanage_template_export: user: "{{ ansible_user }}" host: "{{ vmanage_ip }}" password: "{{ ansible_password }}" - factory_default: no - register: device_template_facts - - - name: Get feature templates - vmanage_feature_template_facts: - user: "{{ ansible_user }}" - host: "{{ vmanage_ip }}" - password: "{{ ansible_password }}" - factory_default: no - register: feature_template_facts - - - set_fact: - viptela_templates: - device_templates: "{{ device_template_facts.device_templates }}" - feature_templates: "{{ feature_template_facts.feature_templates }}" - - - name: Write out templates to {{ file }} - copy: - content: "{{ viptela_templates | to_nice_yaml }}" - dest: "{{ file }}" + file: "{{ file }}" diff --git a/files/crn1.yaml b/files/crn1.yaml deleted file mode 100644 index e8158494..00000000 --- a/files/crn1.yaml +++ /dev/null @@ -1,668 +0,0 @@ -lab: - description: '' - notes: '' - timestamp: 1565995520.8230464 - title: crn - version: 0.0.2 -nodes: - - id: n0 - label: internet - node_definition: csr1000v - x: -150 - y: -100 - configuration: hostname inserthostname_here - image_definition: csr1000v-161101b - tags: [] - interfaces: - - id: i0 - label: Loopback0 - type: loopback - - id: i1 - slot: 0 - label: GigabitEthernet1 - type: physical - - id: i2 - slot: 1 - label: GigabitEthernet2 - type: physical - - id: i3 - slot: 2 - label: GigabitEthernet3 - type: physical - - id: i4 - slot: 3 - label: GigabitEthernet4 - type: physical - - id: i5 - slot: 4 - label: GigabitEthernet5 - type: physical - - id: i6 - slot: 5 - label: GigabitEthernet6 - type: physical - - id: n1 - label: east-rtr1 - node_definition: csr1000v - x: 50 - y: -50 - configuration: hostname inserthostname_here - image_definition: csr1000v-161101b - tags: [] - interfaces: - - id: i0 - label: Loopback0 - type: loopback - - id: i1 - slot: 0 - label: GigabitEthernet1 - type: physical - - id: i2 - slot: 1 - label: GigabitEthernet2 - type: physical - - id: n2 - label: east-fw1 - node_definition: asav - x: 250 - y: 50 - configuration: '' - image_definition: asav-9-12-2 - tags: [] - interfaces: - - id: i0 - slot: 0 - label: Management0/0 - type: physical - - id: i1 - slot: 1 - label: GigabitEthernet0/0 - type: physical - - id: n3 - label: vmanage-0 - node_definition: viptela-manage - x: 500 - y: -150 - configuration: |- - #cloud-config - ssh_authorized_keys: - - your-ssh-pub-key-line-goes-here - image_definition: viptela-manage-19-1-0 - tags: [] - interfaces: [] - - id: n4 - label: vbond-0 - node_definition: viptela-bond - x: 500 - y: 0 - configuration: |- - #cloud-config - ssh_authorized_keys: - - your-ssh-pub-key-line-goes-here - image_definition: viptela-bond-19-1-0 - tags: [] - interfaces: [] - - id: n5 - label: vsmart-0 - node_definition: viptela-smart - x: 500 - y: 150 - configuration: |- - #cloud-config - ssh_authorized_keys: - - your-ssh-pub-key-line-goes-here - image_definition: viptela-smart-19-1-0 - tags: [] - interfaces: [] - - id: n6 - label: east-vedge1 - node_definition: viptela-edge - x: 250 - y: -150 - configuration: |- - #cloud-config - vinitparam: - - otp: 00000000000000000000000000000000 - - vbond: 1.2.3.4 - - uuid: 12345678-dead-beef-cafe-1234567890ab - - org: some-org-string - ssh_authorized_keys: - - your-ssh-pub-key-line-goes-here - image_definition: viptela-edge-19-1-0 - tags: [] - interfaces: - - id: i0 - slot: 0 - label: eth0 - type: physical - - id: i1 - slot: 1 - label: ge0/0 - type: physical - - id: n7 - label: west-rtr1 - node_definition: csr1000v - x: -350 - y: -50 - configuration: hostname inserthostname_here - image_definition: csr1000v-161101b - tags: [] - interfaces: - - id: i0 - label: Loopback0 - type: loopback - - id: i1 - slot: 0 - label: GigabitEthernet1 - type: physical - - id: i2 - slot: 1 - label: GigabitEthernet2 - type: physical - - id: n8 - label: west-fw1 - node_definition: asav - x: -550 - y: 50 - configuration: hostname inserthostname_here - image_definition: asav-9-12-2 - tags: [] - interfaces: - - id: i0 - slot: 0 - label: Management0/0 - type: physical - - id: i1 - slot: 1 - label: GigabitEthernet0/0 - type: physical - - id: n9 - label: west-vedge1 - node_definition: viptela-edge - x: -550 - y: -150 - configuration: |- - #cloud-config - vinitparam: - - otp: 00000000000000000000000000000000 - - vbond: 1.2.3.4 - - uuid: 12345678-dead-beef-cafe-1234567890ab - - org: some-org-string - ssh_authorized_keys: - - your-ssh-pub-key-line-goes-here - image_definition: viptela-edge-19-1-0 - tags: [] - interfaces: - - id: i0 - slot: 0 - label: eth0 - type: physical - - id: i1 - slot: 1 - label: ge0/0 - type: physical - - id: n10 - label: site1-vedge1 - node_definition: viptela-edge - x: -350 - y: 150 - configuration: |- - #cloud-config - vinitparam: - - otp: 00000000000000000000000000000000 - - vbond: 1.2.3.4 - - uuid: 12345678-dead-beef-cafe-1234567890ab - - org: some-org-string - ssh_authorized_keys: - - your-ssh-pub-key-line-goes-here - image_definition: viptela-edge-19-1-0 - tags: [] - interfaces: - - id: i0 - slot: 0 - label: eth0 - type: physical - - id: i1 - slot: 1 - label: ge0/0 - type: physical - - id: n11 - label: csr1000v-2 - node_definition: csr1000v - x: -200 - y: 150 - configuration: hostname inserthostname_here - image_definition: csr1000v-161101b - tags: [] - interfaces: - - id: i0 - label: Loopback0 - type: loopback - - id: i1 - slot: 0 - label: GigabitEthernet1 - type: physical - - id: i2 - slot: 1 - label: GigabitEthernet2 - type: physical - - id: n12 - label: csr1000v-3 - node_definition: csr1000v - x: -50 - y: 150 - configuration: hostname inserthostname_here - image_definition: csr1000v-161101b - tags: [] - interfaces: - - id: i0 - label: Loopback0 - type: loopback - - id: i1 - slot: 0 - label: GigabitEthernet1 - type: physical - - id: i2 - slot: 1 - label: GigabitEthernet2 - type: physical - - id: n13 - label: site2-vedge1 - node_definition: viptela-edge - x: 100 - y: 150 - configuration: |- - #cloud-config - vinitparam: - - otp: 00000000000000000000000000000000 - - vbond: 1.2.3.4 - - uuid: 12345678-dead-beef-cafe-1234567890ab - - org: some-org-string - ssh_authorized_keys: - - your-ssh-pub-key-line-goes-here - image_definition: viptela-edge-19-1-0 - tags: [] - interfaces: - - id: i0 - slot: 0 - label: eth0 - type: physical - - id: i1 - slot: 1 - label: ge0/0 - type: physical - - id: n16 - label: east-wan - node_definition: unmanaged_switch - x: -50 - y: -100 - configuration: '' - tags: [] - interfaces: - - id: i0 - slot: 0 - label: port0 - type: physical - - id: i1 - slot: 1 - label: port1 - type: physical - - id: i2 - slot: 2 - label: port2 - type: physical - - id: n17 - label: west-wan - node_definition: unmanaged_switch - x: -250 - y: -100 - configuration: '' - tags: [] - interfaces: - - id: i0 - slot: 0 - label: port0 - type: physical - - id: i1 - slot: 1 - label: port1 - type: physical - - id: i2 - slot: 2 - label: port2 - type: physical - - id: n18 - label: west-external - node_definition: unmanaged_switch - x: -450 - y: -100 - configuration: '' - tags: [] - interfaces: - - id: i0 - slot: 0 - label: port0 - type: physical - - id: i1 - slot: 1 - label: port1 - type: physical - - id: i2 - slot: 2 - label: port2 - type: physical - - id: i3 - slot: 3 - label: port3 - type: physical - - id: i4 - slot: 4 - label: port4 - type: physical - - id: i5 - slot: 5 - label: port5 - type: physical - - id: n19 - label: east-external - node_definition: unmanaged_switch - x: 150 - y: -100 - configuration: '' - tags: [] - interfaces: - - id: i0 - slot: 0 - label: port0 - type: physical - - id: i1 - slot: 1 - label: port1 - type: physical - - id: i2 - slot: 2 - label: port2 - type: physical - - id: i3 - slot: 3 - label: port3 - type: physical - - id: i4 - slot: 4 - label: port4 - type: physical - - id: i5 - slot: 5 - label: port5 - type: physical - - id: n20 - label: east-rtr2 - node_definition: csr1000v - x: 50 - y: -150 - configuration: hostname inserthostname_here - image_definition: csr1000v-161101b - tags: [] - interfaces: - - id: i0 - label: Loopback0 - type: loopback - - id: i1 - slot: 0 - label: GigabitEthernet1 - type: physical - - id: i2 - slot: 1 - label: GigabitEthernet2 - type: physical - - id: n21 - label: west-rtr2 - node_definition: csr1000v - x: -350 - y: -150 - configuration: hostname inserthostname_here - image_definition: csr1000v-161101b - tags: [] - interfaces: - - id: i0 - label: Loopback0 - type: loopback - - id: i1 - slot: 0 - label: GigabitEthernet1 - type: physical - - id: i2 - slot: 1 - label: GigabitEthernet2 - type: physical - - id: n22 - label: east-fw2 - node_definition: asav - x: 250 - y: -50 - configuration: '' - image_definition: asav-9-12-2 - tags: [] - interfaces: - - id: i0 - slot: 0 - label: Management0/0 - type: physical - - id: i1 - slot: 1 - label: GigabitEthernet0/0 - type: physical - - id: n23 - label: east-vedge2 - node_definition: viptela-edge - x: 250 - y: -250 - configuration: |- - #cloud-config - vinitparam: - - otp: 00000000000000000000000000000000 - - vbond: 1.2.3.4 - - uuid: 12345678-dead-beef-cafe-1234567890ab - - org: some-org-string - ssh_authorized_keys: - - your-ssh-pub-key-line-goes-here - image_definition: viptela-edge-19-1-0 - tags: [] - interfaces: - - id: i0 - slot: 0 - label: eth0 - type: physical - - id: i1 - slot: 1 - label: ge0/0 - type: physical - - id: n24 - label: lxc-0 - node_definition: lxc - x: -200 - y: 300 - configuration: hostname inserthostname_here - image_definition: lxc-alpine-37 - tags: [] - interfaces: - - id: i0 - slot: 0 - label: eth0 - type: physical - - id: n25 - label: lxc-1 - node_definition: lxc - x: -50 - y: 300 - configuration: hostname inserthostname_here - image_definition: lxc-alpine-37 - tags: [] - interfaces: - - id: i0 - slot: 0 - label: eth0 - type: physical - - id: n14 - label: west-fw2 - node_definition: asav - x: -550 - y: -50 - configuration: '' - image_definition: asav-9-12-2 - tags: [] - interfaces: - - id: i0 - slot: 0 - label: Management0/0 - type: physical - - id: i1 - slot: 1 - label: GigabitEthernet0/0 - type: physical - - id: n15 - label: west-vedge2 - node_definition: viptela-edge - x: -550 - y: -250 - configuration: |- - #cloud-config - vinitparam: - - otp: 00000000000000000000000000000000 - - vbond: 1.2.3.4 - - uuid: 12345678-dead-beef-cafe-1234567890ab - - org: some-org-string - ssh_authorized_keys: - - your-ssh-pub-key-line-goes-here - image_definition: viptela-edge-19-1-0 - tags: [] - interfaces: - - id: i0 - slot: 0 - label: eth0 - type: physical - - id: i1 - slot: 1 - label: ge0/0 - type: physical -links: - - id: l1 - i1: i1 - n1: n1 - i2: i1 - n2: n16 - - id: l3 - i1: i1 - n1: n7 - i2: i1 - n2: n17 - - id: l4 - i1: i2 - n1: n1 - i2: i0 - n2: n19 - - id: l5 - i1: i1 - n1: n20 - i2: i2 - n2: n16 - - id: l6 - i1: i2 - n1: n20 - i2: i1 - n2: n19 - - id: l7 - i1: i1 - n1: n2 - i2: i2 - n2: n19 - - id: l8 - i1: i1 - n1: n22 - i2: i3 - n2: n19 - - id: l9 - i1: i1 - n1: n6 - i2: i4 - n2: n19 - - id: l10 - i1: i1 - n1: n23 - i2: i5 - n2: n19 - - id: l0 - i1: i1 - n1: n0 - i2: i1 - n2: n11 - - id: l2 - i1: i2 - n1: n0 - i2: i1 - n2: n12 - - id: l11 - i1: i3 - n1: n0 - i2: i0 - n2: n16 - - id: l12 - i1: i4 - n1: n0 - i2: i0 - n2: n17 - - id: l13 - i1: i5 - n1: n0 - i2: i1 - n2: n10 - - id: l14 - i1: i6 - n1: n0 - i2: i1 - n2: n13 - - id: l15 - i1: i2 - n1: n11 - i2: i0 - n2: n24 - - id: l16 - i1: i2 - n1: n12 - i2: i0 - n2: n25 - - id: l17 - i1: i1 - n1: n21 - i2: i2 - n2: n17 - - id: l18 - i1: i2 - n1: n7 - i2: i0 - n2: n18 - - id: l19 - i1: i2 - n1: n21 - i2: i1 - n2: n18 - - id: l20 - i1: i1 - n1: n8 - i2: i2 - n2: n18 - - id: l21 - i1: i1 - n1: n14 - i2: i3 - n2: n18 - - id: l22 - i1: i1 - n1: n9 - i2: i4 - n2: n18 - - id: l23 - i1: i1 - n1: n15 - i2: i5 - n2: n18 diff --git a/files/hq1_vmanage_templates_v20.yml b/files/hq1_vmanage_templates_v20.yml index 034e0256..17ea1ba7 100644 --- a/files/hq1_vmanage_templates_v20.yml +++ b/files/hq1_vmanage_templates_v20.yml @@ -1,15 +1,100 @@ vmanage_device_templates: -- templateId: 1cf9e280-5ea2-4ec3-98a1-910462a36b07 - templateName: branch-csr1000v-vrrp +- templateName: branch-csr1000v-vrrp templateDescription: Branch CSR1000v Template w/VRRP deviceType: vedge-CSR-1000v - configType: template factoryDefault: false - policyId: '' + configType: template featureTemplateUidRange: [] - connectionPreferenceRequired: true - connectionPreference: true + policyId: '' + securityPolicyId: '' + templateId: 1c8da8e5-43b2-4730-9e4d-fe520de9d580 templateClass: cedge + deviceRole: sdwan-edge + draftMode: false + attached_devices: [] + input: + columns: + - title: Login Banner(banner_login) + property: //banner/login + variable: banner_login + editable: true + optional: false + - title: MOTD Banner(banner_motd) + property: //banner/motd + variable: banner_motd + editable: true + optional: false + - title: Interface Name(vpn1_interface) + property: /1/vpn1_interface/interface/if-name + variable: vpn1_interface + editable: true + optional: false + - title: IPv4 Address/ prefix-length(vpn1_ipv4_address) + property: /1/vpn1_interface/interface/ip/address + variable: vpn1_ipv4_address + editable: true + optional: false + - title: Group ID(vpn1_vrrp_grpid) + property: /1/vpn1_interface/interface/vrrp/vpn1_vrrp_grpid/grp-id + variable: vpn1_vrrp_grpid + editable: true + optional: false + - title: Priority(vpn1_vrrp_priority) + property: /1/vpn1_interface/interface/vrrp/vpn1_vrrp_grpid/priority + variable: vpn1_vrrp_priority + editable: true + optional: false + - title: IP Address(vpn1_vrrp_ipaddress) + property: /1/vpn1_interface/interface/vrrp/vpn1_vrrp_grpid/ipv4/address + variable: vpn1_vrrp_ipaddress + editable: true + optional: false + - title: Interface Name(vpn512_interface) + property: /512/vpn512_interface/interface/if-name + variable: vpn512_interface + editable: true + optional: false + - title: Address(vpn0_default_gateway) + property: /0/vpn-instance/ip/route/0.0.0.0/0/next-hop/vpn0_default_gateway/address + variable: vpn0_default_gateway + editable: true + optional: false + - title: Interface Name(vpn0_interface) + property: /0/vpn0_interface/interface/if-name + variable: vpn0_interface + editable: true + optional: false + - title: IPv4 Address/ prefix-length(vpn0_internet_ipv4_address) + property: /0/vpn0_interface/interface/ip/address + variable: vpn0_internet_ipv4_address + editable: true + optional: false + - title: Hostname(system_host_name) + property: //system/host-name + variable: system_host_name + editable: true + optional: false + - title: Latitude(system_latitude) + property: //system/gps-location/latitude + variable: system_latitude + editable: true + optional: false + - title: Longitude(system_longitude) + property: //system/gps-location/longitude + variable: system_longitude + editable: true + optional: false + - title: System IP(system_system_ip) + property: //system/system-ip + variable: system_system_ip + editable: true + optional: false + - title: Site ID(system_site_id) + property: //system/site-id + variable: system_site_id + editable: true + optional: false + data: [] generalTemplates: - templateName: Factory_Default_AAA_CISCO_Template templateType: cedge_aaa @@ -51,8 +136,80 @@ vmanage_device_templates: featureTemplateUidRange: [] policyId: '' securityPolicyId: '' - templateId: dd053e9e-287d-4e9b-81f3-53cf38599aa1 + templateId: 47dcf8fb-be25-47e9-b292-405115f9ab49 templateClass: cedge + deviceRole: sdwan-edge + draftMode: false + attached_devices: + - site1-cedge1 + input: + columns: + - title: Login Banner(banner_login) + property: //banner/login + variable: banner_login + editable: true + optional: false + - title: MOTD Banner(banner_motd) + property: //banner/motd + variable: banner_motd + editable: true + optional: false + - title: Interface Name(vpn1_interface) + property: /1/vpn1_interface/interface/if-name + variable: vpn1_interface + editable: true + optional: false + - title: IPv4 Address/ prefix-length(vpn1_ipv4_address) + property: /1/vpn1_interface/interface/ip/address + variable: vpn1_ipv4_address + editable: true + optional: false + - title: Interface Name(vpn512_interface) + property: /512/vpn512_interface/interface/if-name + variable: vpn512_interface + editable: true + optional: false + - title: Address(vpn0_default_gateway) + property: /0/vpn-instance/ip/route/0.0.0.0/0/next-hop/vpn0_default_gateway/address + variable: vpn0_default_gateway + editable: true + optional: false + - title: Interface Name(vpn0_interface) + property: /0/vpn0_interface/interface/if-name + variable: vpn0_interface + editable: true + optional: false + - title: IPv4 Address/ prefix-length(vpn0_internet_ipv4_address) + property: /0/vpn0_interface/interface/ip/address + variable: vpn0_internet_ipv4_address + editable: true + optional: false + - title: Hostname(system_host_name) + property: //system/host-name + variable: system_host_name + editable: true + optional: false + - title: Latitude(system_latitude) + property: //system/gps-location/latitude + variable: system_latitude + editable: true + optional: false + - title: Longitude(system_longitude) + property: //system/gps-location/longitude + variable: system_longitude + editable: true + optional: false + - title: System IP(system_system_ip) + property: //system/system-ip + variable: system_system_ip + editable: true + optional: false + - title: Site ID(system_site_id) + property: //system/site-id + variable: system_site_id + editable: true + optional: false + data: [] generalTemplates: - templateName: Factory_Default_AAA_CISCO_Template templateType: cedge_aaa @@ -94,8 +251,85 @@ vmanage_device_templates: featureTemplateUidRange: [] policyId: '' securityPolicyId: '' - templateId: da39b457-b9b5-495b-9371-d73cbb99a660 + templateId: 104b18f8-477b-4bc0-9f86-9f36018bce5c templateClass: cedge + deviceRole: sdwan-edge + draftMode: false + attached_devices: + - hq-cedge1 + input: + columns: + - title: Login Banner(banner_login) + property: //banner/login + variable: banner_login + editable: true + optional: false + - title: MOTD Banner(banner_motd) + property: //banner/motd + variable: banner_motd + editable: true + optional: false + - title: Interface Name(vpn1_interface) + property: /1/vpn1_interface/interface/if-name + variable: vpn1_interface + editable: true + optional: false + - title: IPv4 Address/ prefix-length(vpn1_ipv4_address) + property: /1/vpn1_interface/interface/ip/address + variable: vpn1_ipv4_address + editable: true + optional: false + - title: Interface Name(vpn1_ospf_interface) + property: /1//router/ospf/area/0/interface/vpn1_ospf_interface/name + variable: vpn1_ospf_interface + editable: true + optional: false + - title: Interface Name(vpn512_interface) + property: /512/vpn512_interface/interface/if-name + variable: vpn512_interface + editable: true + optional: false + - title: Address(vpn0_default_gateway) + property: /0/vpn-instance/ip/route/0.0.0.0/0/next-hop/vpn0_default_gateway/address + variable: vpn0_default_gateway + editable: true + optional: false + - title: Interface Name(vpn0_interface) + property: /0/vpn0_interface/interface/if-name + variable: vpn0_interface + editable: true + optional: false + - title: IPv4 Address/ prefix-length(vpn0_internet_ipv4_address) + property: /0/vpn0_interface/interface/ip/address + variable: vpn0_internet_ipv4_address + editable: true + optional: false + - title: Hostname(system_host_name) + property: //system/host-name + variable: system_host_name + editable: true + optional: false + - title: Latitude(system_latitude) + property: //system/gps-location/latitude + variable: system_latitude + editable: true + optional: false + - title: Longitude(system_longitude) + property: //system/gps-location/longitude + variable: system_longitude + editable: true + optional: false + - title: System IP(system_system_ip) + property: //system/system-ip + variable: system_system_ip + editable: true + optional: false + - title: Site ID(system_site_id) + property: //system/site-id + variable: system_site_id + editable: true + optional: false + data: [] generalTemplates: - templateName: Factory_Default_AAA_CISCO_Template templateType: cedge_aaa @@ -131,18 +365,91 @@ vmanage_device_templates: templateType: cedge_global - templateName: cedge_banner templateType: cisco_banner -- templateName: branch-vedge-cloud +- templateId: 4a4c8d1a-435d-4dc6-b0c9-f5a44dac009d + templateName: branch-vedge-cloud templateDescription: Branch vEdge Cloud Template deviceType: vedge-cloud - factoryDefault: false + deviceRole: sdwan-edge configType: template - featureTemplateUidRange: [] + factoryDefault: false policyId: '' - securityPolicyId: '' - templateId: b6635448-e0ab-4842-ab13-755ebf1fa913 + featureTemplateUidRange: [] + draftMode: false + connectionPreferenceRequired: true + connectionPreference: true templateClass: vedge + attached_devices: + - site2-vedge1 + input: + columns: + - title: Login Banner(banner_login) + property: //banner/login + variable: banner_login + editable: true + optional: false + - title: MOTD Banner(banner_motd) + property: //banner/motd + variable: banner_motd + editable: true + optional: false + - title: Interface Name(vpn1_interface) + property: /1/vpn1_interface/interface/if-name + variable: vpn1_interface + editable: true + optional: false + - title: IPv4 Address(vpn1_ipv4_address) + property: /1/vpn1_interface/interface/ip/address + variable: vpn1_ipv4_address + editable: true + optional: false + - title: Interface Name(vpn512_interface) + property: /512/vpn512_interface/interface/if-name + variable: vpn512_interface + editable: true + optional: false + - title: Address(vpn0_default_gateway) + property: /0/vpn-instance/ip/route/0.0.0.0/0/next-hop/vpn0_default_gateway/address + variable: vpn0_default_gateway + editable: true + optional: false + - title: Interface Name(vpn0_interface) + property: /0/vpn0_interface/interface/if-name + variable: vpn0_interface + editable: true + optional: false + - title: IPv4 Address(vpn0_internet_ipv4_address) + property: /0/vpn0_interface/interface/ip/address + variable: vpn0_internet_ipv4_address + editable: true + optional: false + - title: Hostname(system_host_name) + property: //system/host-name + variable: system_host_name + editable: true + optional: false + - title: Latitude(system_latitude) + property: //system/gps-location/latitude + variable: system_latitude + editable: true + optional: false + - title: Longitude(system_longitude) + property: //system/gps-location/longitude + variable: system_longitude + editable: true + optional: false + - title: System IP(system_system_ip) + property: //system/system-ip + variable: system_system_ip + editable: true + optional: false + - title: Site ID(system_site_id) + property: //system/site-id + variable: system_site_id + editable: true + optional: false + data: [] generalTemplates: - - templateName: Factory_Default_AAA_Template + - templateName: aaa templateType: aaa - templateName: Factory_Default_BFD_Template_V01 templateType: bfd-vedge @@ -172,18 +479,49 @@ vmanage_device_templates: templateType: vpn-vedge-interface - templateName: banner templateType: banner -- templateName: vsmart +- templateId: 91d0fd12-0ad8-4886-a591-6f821d5ffb91 + templateName: vsmart templateDescription: vSmart Device Template deviceType: vsmart - factoryDefault: false + deviceRole: sdwan-edge configType: template - featureTemplateUidRange: [] + factoryDefault: false policyId: '' - securityPolicyId: '' - templateId: 0c3e5c2f-1a27-4b7e-8fc1-64bc974394c1 + featureTemplateUidRange: [] + draftMode: false templateClass: vedge + attached_devices: + - vsmart1 + input: + columns: + - title: Address(vpn0_default_gateway) + property: /0/vpn-instance/ip/route/0.0.0.0/0/next-hop/vpn0_default_gateway/address + variable: vpn0_default_gateway + editable: true + optional: false + - title: IPv4 Address(vpn0_internet_ipv4_address) + property: /0/eth1/interface/ip/address + variable: vpn0_internet_ipv4_address + editable: true + optional: false + - title: Hostname + property: //system/host-name + variable: //system/host-name + editable: true + optional: false + - title: System IP + property: //system/system-ip + variable: //system/system-ip + editable: true + optional: false + - title: Site ID + property: //system/site-id + variable: //system/site-id + editable: true + optional: false + data: [] generalTemplates: - - templateName: Factory_Default_AAA_Template + - templateName: aaa templateType: aaa - templateName: Factory_Default_vSmart_OMP_Template templateType: omp-vsmart @@ -205,21 +543,22 @@ vmanage_device_templates: - templateName: vsmart_vpn512_interface templateType: vpn-vsmart-interface vmanage_feature_templates: -- templateId: 5bdc5c41-35c6-4179-ba0a-c4b989f0a2fa +- templateId: e9714a00-1044-4c0f-a468-c1a01a4f9022 templateName: system templateDescription: system templateType: system-vedge deviceType: - vedge-cloud lastUpdatedBy: admin - lastUpdatedOn: 1603228275854 + lastUpdatedOn: 1646360886100 factoryDefault: false - devicesAttached: 0 + devicesAttached: 1 attachedMastersCount: 1 templateMinVersion: 15.0.0 configType: xml createdBy: admin - createdOn: 1603228275854 + createdOn: 1646360886100 + resourceGroup: global templateDefinition: clock: timezone: @@ -373,21 +712,22 @@ vmanage_feature_templates: vipObjectType: tree vipPrimaryKey: - name -- templateId: eb78d26d-4494-4f92-9ded-9430a26bab31 +- templateId: f2a966f3-961e-45b5-9d0a-c675cfdf7a1f templateName: cedge_vpn0 templateDescription: cEdge VPN0 templateType: cisco_vpn deviceType: - vedge-CSR-1000v lastUpdatedBy: admin - lastUpdatedOn: 1603228275124 + lastUpdatedOn: 1646360886539 factoryDefault: false - devicesAttached: 4 + devicesAttached: 2 attachedMastersCount: 3 templateMinVersion: 15.0.0 configType: xml createdBy: admin - createdOn: 1603228275124 + createdOn: 1646360886539 + resourceGroup: global templateDefinition: vpn-id: vipObjectType: object @@ -502,21 +842,22 @@ vmanage_feature_templates: vipObjectType: tree vipPrimaryKey: - protocol -- templateId: 546af756-6bf1-4dab-ba95-df39dfe843a2 +- templateId: 11624046-1563-4256-a01b-8617fd53ae5c templateName: vpn1 templateDescription: vEdge vpn1 templateType: vpn-vedge deviceType: - vedge-cloud lastUpdatedBy: admin - lastUpdatedOn: 1603228277016 + lastUpdatedOn: 1646360887030 factoryDefault: false - devicesAttached: 0 + devicesAttached: 1 attachedMastersCount: 1 templateMinVersion: 15.0.0 configType: xml createdBy: admin - createdOn: 1603228277016 + createdOn: 1646360887030 + resourceGroup: global templateDefinition: vpn-id: vipObjectType: object @@ -578,21 +919,22 @@ vmanage_feature_templates: vipObjectType: tree vipPrimaryKey: - protocol -- templateId: bdc461ad-485a-4494-9f33-ef639d71ff08 +- templateId: b3c1928a-aaf2-4bae-a315-cd58455255ad templateName: cedge_system templateDescription: cEdge System templateType: cisco_system deviceType: - vedge-CSR-1000v lastUpdatedBy: admin - lastUpdatedOn: 1603228276882 + lastUpdatedOn: 1646360887454 factoryDefault: false - devicesAttached: 4 + devicesAttached: 2 attachedMastersCount: 3 templateMinVersion: 15.0.0 configType: xml createdBy: admin - createdOn: 1603228276882 + createdOn: 1646360887454 + resourceGroup: global templateDefinition: clock: timezone: @@ -700,21 +1042,22 @@ vmanage_feature_templates: vipObjectType: tree vipPrimaryKey: - name -- templateId: 443c8e8a-3b79-443d-87d9-cbace4e66a4d +- templateId: c0102500-f0d2-4dc7-99b9-62906d96840d templateName: vpn512_interface templateDescription: vpn512_interface templateType: vpn-vedge-interface deviceType: - vedge-cloud lastUpdatedBy: admin - lastUpdatedOn: 1603228276436 + lastUpdatedOn: 1646360887894 factoryDefault: false - devicesAttached: 0 + devicesAttached: 1 attachedMastersCount: 1 templateMinVersion: 15.0.0 configType: xml createdBy: admin - createdOn: 1603228276436 + createdOn: 1646360887894 + resourceGroup: global templateDefinition: if-name: vipObjectType: object @@ -914,21 +1257,22 @@ vmanage_feature_templates: dot1x: vipType: ignore vipObjectType: node-only -- templateId: 08b88956-9ef7-4058-a147-242c9506bb1b +- templateId: 43704c79-3655-4c4a-b65e-8ccb4a75559e templateName: banner templateDescription: banner templateType: banner deviceType: - vedge-cloud lastUpdatedBy: admin - lastUpdatedOn: 1603228275271 + lastUpdatedOn: 1646360888460 factoryDefault: false - devicesAttached: 0 + devicesAttached: 1 attachedMastersCount: 1 templateMinVersion: 15.0.0 configType: xml createdBy: admin - createdOn: 1603228275271 + createdOn: 1646360888460 + resourceGroup: global templateDefinition: login: vipObjectType: object @@ -940,21 +1284,22 @@ vmanage_feature_templates: vipType: variableName vipValue: '' vipVariableName: banner_motd -- templateId: 3d391810-33ff-45f4-9565-857ce97ebba3 +- templateId: 7380edfc-577c-4118-8621-966526f282fa templateName: cedge_vpn512_interface templateDescription: cEdge VPN512 Interface templateType: cisco_vpn_interface deviceType: - vedge-CSR-1000v lastUpdatedBy: admin - lastUpdatedOn: 1603228276012 + lastUpdatedOn: 1646360889158 factoryDefault: false - devicesAttached: 4 + devicesAttached: 2 attachedMastersCount: 3 templateMinVersion: 15.0.0 configType: xml createdBy: admin - createdOn: 1603228276012 + createdOn: 1646360889158 + resourceGroup: global templateDefinition: if-name: vipObjectType: object @@ -1134,21 +1479,22 @@ vmanage_feature_templates: vipObjectType: tree vipPrimaryKey: - grp-id -- templateId: ce4db743-3d7c-4167-a861-2f792f4acae6 +- templateId: 24cad02d-55c6-4ef2-b9ca-fccb9d38abd8 templateName: cedge_vpn1_interface_vrrp templateDescription: cEdge VPN1 Interface w/VRRP templateType: cisco_vpn_interface deviceType: - vedge-CSR-1000v lastUpdatedBy: admin - lastUpdatedOn: 1603229504188 + lastUpdatedOn: 1646360889698 factoryDefault: false - devicesAttached: 2 + devicesAttached: 0 attachedMastersCount: 1 templateMinVersion: 15.0.0 configType: xml createdBy: admin - createdOn: 1603228936199 + createdOn: 1646360889698 + resourceGroup: global templateDefinition: if-name: vipObjectType: object @@ -1361,21 +1707,22 @@ vmanage_feature_templates: vipObjectType: tree vipPrimaryKey: - grp-id -- templateId: 1c01a33d-6e07-4d67-9798-e699b2d01008 +- templateId: b2fd5631-c83f-4de6-8f43-48ac84db8e51 templateName: vpn0 templateDescription: vEdge vpn0 templateType: vpn-vedge deviceType: - vedge-cloud lastUpdatedBy: admin - lastUpdatedOn: 1603228274983 + lastUpdatedOn: 1646360890113 factoryDefault: false - devicesAttached: 0 + devicesAttached: 1 attachedMastersCount: 1 templateMinVersion: 15.0.0 configType: xml createdBy: admin - createdOn: 1603228274983 + createdOn: 1646360890113 + resourceGroup: global templateDefinition: vpn-id: vipObjectType: object @@ -1470,21 +1817,22 @@ vmanage_feature_templates: vipObjectType: tree vipPrimaryKey: - protocol -- templateId: 7e19cb34-83cb-44a8-9a03-869959cd7619 +- templateId: e5adc8a6-4e3c-4410-a2db-186c815049ac templateName: cedge_vpn512 templateDescription: cEdge VPN512 templateType: cisco_vpn deviceType: - vedge-CSR-1000v lastUpdatedBy: admin - lastUpdatedOn: 1603228274402 + lastUpdatedOn: 1646360890552 factoryDefault: false - devicesAttached: 4 + devicesAttached: 2 attachedMastersCount: 3 templateMinVersion: 15.0.0 configType: xml createdBy: admin - createdOn: 1603228274402 + createdOn: 1646360890552 + resourceGroup: global templateDefinition: vpn-id: vipObjectType: object @@ -1541,21 +1889,22 @@ vmanage_feature_templates: vipObjectType: tree vipPrimaryKey: - protocol -- templateId: e33de980-24f2-4c0b-9847-98766a6e8779 +- templateId: f5deb1f6-1d84-4975-bb33-0cfda6f5761a templateName: vsmart_vpn512_interface templateDescription: vSmart VPN512 Interface templateType: vpn-vsmart-interface deviceType: - vsmart lastUpdatedBy: admin - lastUpdatedOn: 1603228274681 + lastUpdatedOn: 1646360891027 factoryDefault: false devicesAttached: 1 attachedMastersCount: 1 templateMinVersion: 15.0.0 configType: xml createdBy: admin - createdOn: 1603228274681 + createdOn: 1646360891027 + resourceGroup: global templateDefinition: if-name: vipObjectType: object @@ -1635,21 +1984,22 @@ vmanage_feature_templates: vipObjectType: tree vipPrimaryKey: - addr -- templateId: 33d9d92b-49ef-4e3e-b3fe-9ca8f4ca1872 +- templateId: c9aae935-a8f8-4468-ab8e-11060730d261 templateName: vsmart_vpn0_internet_interface templateDescription: vsmart_vpn0_internet_interface templateType: vpn-vsmart-interface deviceType: - vsmart lastUpdatedBy: admin - lastUpdatedOn: 1603228276157 + lastUpdatedOn: 1646360891537 factoryDefault: false devicesAttached: 0 attachedMastersCount: 0 templateMinVersion: 15.0.0 configType: xml createdBy: admin - createdOn: 1603228276157 + createdOn: 1646360891537 + resourceGroup: global templateDefinition: if-name: vipObjectType: object @@ -1803,21 +2153,22 @@ vmanage_feature_templates: vipType: ignore vipValue: 5 vipVariableName: vpn_if_tunnel_nat_refresh_interval -- templateId: 92d91c47-82b6-493f-95a4-ef51580cb6b6 +- templateId: 8f4c799a-511d-4806-b089-19f5d1df1b64 templateName: vsmart_vpn512_mgmt_interface templateDescription: vsmart_vpn512_mgmt_interface templateType: vpn-vsmart-interface deviceType: - vsmart lastUpdatedBy: admin - lastUpdatedOn: 1603228276735 + lastUpdatedOn: 1646360891898 factoryDefault: false devicesAttached: 0 attachedMastersCount: 0 templateMinVersion: 15.0.0 configType: xml createdBy: admin - createdOn: 1603228276735 + createdOn: 1646360891898 + resourceGroup: global templateDefinition: if-name: vipObjectType: object @@ -1902,21 +2253,22 @@ vmanage_feature_templates: vipObjectType: object vipType: ignore vipVariableName: vpn_if_tcp_mss_adjust -- templateId: e5952c76-8d80-4ba4-bbac-b2a96a48ee43 +- templateId: dec0202b-29ec-44d9-a00c-aa242d491006 templateName: test-csr1000v templateDescription: test-csr1000v templateType: cisco_vpn_interface deviceType: - vedge-CSR-1000v lastUpdatedBy: admin - lastUpdatedOn: 1603229301177 + lastUpdatedOn: 1646360892269 factoryDefault: false devicesAttached: 0 attachedMastersCount: 0 templateMinVersion: 15.0.0 configType: xml createdBy: admin - createdOn: 1603229301177 + createdOn: 1646360892269 + resourceGroup: global templateDefinition: if-name: vipObjectType: object @@ -2091,21 +2443,22 @@ vmanage_feature_templates: vipObjectType: tree vipPrimaryKey: - grp-id -- templateId: 1c02087e-f0f4-4f25-aa36-19255b809a45 +- templateId: f28a1930-d7cc-4d2f-85f6-0919635e53d4 templateName: vsmart_vpn0_interface templateDescription: vSmart VPN0 Interface templateType: vpn-vsmart-interface deviceType: - vsmart lastUpdatedBy: admin - lastUpdatedOn: 1603228274099 + lastUpdatedOn: 1646360892765 factoryDefault: false devicesAttached: 1 attachedMastersCount: 1 templateMinVersion: 15.0.0 configType: xml createdBy: admin - createdOn: 1603228274099 + createdOn: 1646360892765 + resourceGroup: global templateDefinition: if-name: vipObjectType: object @@ -2259,21 +2612,22 @@ vmanage_feature_templates: group: vipObjectType: list vipType: ignore -- templateId: d2cca4e6-7698-45b3-b07e-a0c3f0a9ad59 +- templateId: 895d4fa3-5d76-4120-89c7-4bd5cced0fe9 templateName: cedge_banner templateDescription: cEdge Banner templateType: cisco_banner deviceType: - vedge-CSR-1000v lastUpdatedBy: admin - lastUpdatedOn: 1603228274838 + lastUpdatedOn: 1646360893378 factoryDefault: false - devicesAttached: 4 + devicesAttached: 2 attachedMastersCount: 3 templateMinVersion: 15.0.0 configType: xml createdBy: admin - createdOn: 1603228274838 + createdOn: 1646360893378 + resourceGroup: global templateDefinition: login: vipObjectType: object @@ -2285,21 +2639,22 @@ vmanage_feature_templates: vipType: variableName vipValue: '' vipVariableName: banner_motd -- templateId: 85cdd1ec-fb3d-4c7a-a95d-1340cc1cf6e6 +- templateId: 94ab4fdf-7961-4f41-b798-d45dbad1147a templateName: cedge_vpn0_interface templateDescription: cEdge VPN0 Interface templateType: cisco_vpn_interface deviceType: - vedge-CSR-1000v lastUpdatedBy: admin - lastUpdatedOn: 1603228274259 + lastUpdatedOn: 1646360893964 factoryDefault: false - devicesAttached: 4 + devicesAttached: 2 attachedMastersCount: 3 templateMinVersion: 15.0.0 configType: xml createdBy: admin - createdOn: 1603228274259 + createdOn: 1646360893964 + resourceGroup: global templateDefinition: if-name: vipObjectType: object @@ -2646,21 +3001,22 @@ vmanage_feature_templates: vipObjectType: tree vipPrimaryKey: - grp-id -- templateId: 40f42468-69dd-4cad-8006-96628dad0a75 +- templateId: 52127dbf-bd0b-412d-8693-fccc5cd2e09d templateName: vsmart_vpn512 templateDescription: vsmart_vpn512 templateType: vpn-vsmart deviceType: - vsmart lastUpdatedBy: admin - lastUpdatedOn: 1603228275706 + lastUpdatedOn: 1646360894404 factoryDefault: false devicesAttached: 0 attachedMastersCount: 0 templateMinVersion: 15.0.0 configType: xml createdBy: admin - createdOn: 1603228275706 + createdOn: 1646360894404 + resourceGroup: global templateDefinition: vpn-id: vipObjectType: object @@ -2679,21 +3035,22 @@ vmanage_feature_templates: vipObjectType: object vipType: ignore vipVariableName: vpn_name -- templateId: fdd27183-08e1-44c7-b413-7707cd1743bf +- templateId: 75002865-3a21-49a2-aa30-27f1245c8adc templateName: vpn0_interface templateDescription: vpn0_interface templateType: vpn-vedge-interface deviceType: - vedge-cloud lastUpdatedBy: admin - lastUpdatedOn: 1603228277157 + lastUpdatedOn: 1646360894817 factoryDefault: false - devicesAttached: 0 + devicesAttached: 1 attachedMastersCount: 1 templateMinVersion: 15.0.0 configType: xml createdBy: admin - createdOn: 1603228277157 + createdOn: 1646360894817 + resourceGroup: global templateDefinition: if-name: vipObjectType: object @@ -3064,21 +3421,22 @@ vmanage_feature_templates: dot1x: vipType: ignore vipObjectType: node-only -- templateId: 7438ded2-bc4a-4f43-9b12-947330833fe7 +- templateId: 6fa30a5f-5ba8-491e-8798-b9b8c4992af4 templateName: vpn512 templateDescription: vpn512 templateType: vpn-vedge deviceType: - vedge-cloud lastUpdatedBy: admin - lastUpdatedOn: 1603228276585 + lastUpdatedOn: 1646360895424 factoryDefault: false - devicesAttached: 0 + devicesAttached: 1 attachedMastersCount: 1 templateMinVersion: 15.0.0 configType: xml createdBy: admin - createdOn: 1603228276585 + createdOn: 1646360895424 + resourceGroup: global templateDefinition: vpn-id: vipObjectType: object @@ -3140,21 +3498,22 @@ vmanage_feature_templates: vipObjectType: tree vipPrimaryKey: - protocol -- templateId: c1523ded-a033-42b1-8111-d52f7b25c465 +- templateId: f2d9eb18-ab72-445f-848c-08fde45514c3 templateName: cedge_vpn_ospf1 templateDescription: cEdge OSPF for VPN1 templateType: cisco_ospf deviceType: - vedge-CSR-1000v lastUpdatedBy: admin - lastUpdatedOn: 1603228275553 + lastUpdatedOn: 1646360895842 factoryDefault: false - devicesAttached: 2 + devicesAttached: 1 attachedMastersCount: 1 templateMinVersion: 15.0.0 configType: xml createdBy: admin - createdOn: 1603228275553 + createdOn: 1646360895842 + resourceGroup: global templateDefinition: ospf: router-id: @@ -3343,21 +3702,22 @@ vmanage_feature_templates: vipObjectType: tree vipPrimaryKey: - a-num -- templateId: dc4d7e2b-40fb-4e83-9ef1-e1eab23131f5 +- templateId: 51aadda9-f4bd-4931-a02f-d2c2d4a9cc7f templateName: vpn1_interface templateDescription: vpn1_interface templateType: vpn-vedge-interface deviceType: - vedge-cloud lastUpdatedBy: admin - lastUpdatedOn: 1603228277314 + lastUpdatedOn: 1646360896448 factoryDefault: false - devicesAttached: 0 + devicesAttached: 1 attachedMastersCount: 1 templateMinVersion: 15.0.0 configType: xml createdBy: admin - createdOn: 1603228277314 + createdOn: 1646360896448 + resourceGroup: global templateDefinition: if-name: vipObjectType: object @@ -3553,21 +3913,22 @@ vmanage_feature_templates: dot1x: vipType: ignore vipObjectType: node-only -- templateId: 3261d4e9-3dbd-43e1-87bf-1a7b28b013b3 +- templateId: 0c6fc5e7-195c-4282-8749-40a620c35b1e templateName: vsmart_vpn0 templateDescription: vsmart_vpn0 templateType: vpn-vsmart deviceType: - vsmart lastUpdatedBy: admin - lastUpdatedOn: 1603228275419 + lastUpdatedOn: 1646360896836 factoryDefault: false devicesAttached: 1 attachedMastersCount: 1 templateMinVersion: 15.0.0 configType: xml createdBy: admin - createdOn: 1603228275419 + createdOn: 1646360896836 + resourceGroup: global templateDefinition: vpn-id: vipObjectType: object @@ -3619,21 +3980,22 @@ vmanage_feature_templates: vipObjectType: object vipType: ignore vipVariableName: vpn_name -- templateId: 2c00e5b7-0cef-463b-959c-78043dac93f6 +- templateId: 434d3113-fc61-4a0d-b023-b96dabe1cd01 templateName: cedge_vpn1 templateDescription: cEdge VPN1 templateType: cisco_vpn deviceType: - vedge-CSR-1000v lastUpdatedBy: admin - lastUpdatedOn: 1603228274539 + lastUpdatedOn: 1646360897267 factoryDefault: false - devicesAttached: 4 + devicesAttached: 2 attachedMastersCount: 3 templateMinVersion: 15.0.0 configType: xml createdBy: admin - createdOn: 1603228274539 + createdOn: 1646360897267 + resourceGroup: global templateDefinition: vpn-id: vipObjectType: object @@ -3690,21 +4052,22 @@ vmanage_feature_templates: vipObjectType: tree vipPrimaryKey: - protocol -- templateId: be49f1f9-92ca-4fc1-82bd-defecee63dc9 +- templateId: a02ad72f-69a9-449d-89d9-6b4b107dac44 templateName: cedge_vpn1_interface templateDescription: cEdge VPN1 Interface templateType: cisco_vpn_interface deviceType: - vedge-CSR-1000v lastUpdatedBy: admin - lastUpdatedOn: 1603228276297 + lastUpdatedOn: 1646360897627 factoryDefault: false devicesAttached: 2 attachedMastersCount: 2 templateMinVersion: 15.0.0 configType: xml createdBy: admin - createdOn: 1603228276297 + createdOn: 1646360897627 + resourceGroup: global templateDefinition: if-name: vipObjectType: object @@ -3880,3 +4243,410 @@ vmanage_feature_templates: vipObjectType: tree vipPrimaryKey: - grp-id +- templateId: 31fdc418-6a31-4d09-8f4d-71b6f19eb2d3 + templateName: aaa + templateDescription: AAA template settings + templateType: aaa + deviceType: + - vedge-cloud + - vedge-1000 + - vedge-2000 + - vedge-100 + - vedge-100-B + - vedge-100-WM + - vedge-100-M + - vedge-5000 + - vmanage + - vsmart + lastUpdatedBy: admin + lastUpdatedOn: 1646422964793 + factoryDefault: false + devicesAttached: 2 + attachedMastersCount: 2 + templateMinVersion: 15.0.0 + configType: xml + createdBy: admin + createdOn: 1646422964793 + resourceGroup: global + templateDefinition: + aaa: + auth-order: + vipType: constant + vipValue: + - vipType: constant + vipValue: local + vipObjectType: object + - vipType: constant + vipValue: radius + vipObjectType: object + - vipType: constant + vipValue: tacacs + vipObjectType: object + vipObjectType: list + vipVariableName: auth_order + auth-fallback: + vipObjectType: object + vipType: ignore + vipValue: 'false' + vipVariableName: auth_fallback + admin-auth-order: + vipObjectType: object + vipType: ignore + vipValue: 'false' + vipVariableName: admin_auth_order + logs: + audit-disable: + vipObjectType: object + vipType: ignore + vipValue: 'false' + vipVariableName: disable_audit_logs + netconf-disable: + vipObjectType: object + vipType: ignore + vipValue: 'false' + vipVariableName: disable_netconf_logs + radius-servers: + vipObjectType: list + vipType: ignore + vipValue: + - '' + vipVariableName: radius_servers + usergroup: + vipType: constant + vipValue: + - name: + vipObjectType: object + vipType: constant + vipValue: netadmin + viewMode: view + priority-order: + - name + - name: + vipObjectType: object + vipType: constant + vipValue: basic + priority-order: + - name + - task + task: + vipType: constant + vipValue: + - mode: + vipType: constant + vipValue: system + vipObjectType: object + permission: + vipType: constant + vipValue: + - vipType: constant + vipValue: read + vipObjectType: object + - vipType: constant + vipValue: write + vipObjectType: object + vipObjectType: list + priority-order: + - mode + - permission + - mode: + vipType: constant + vipValue: interface + vipObjectType: object + permission: + vipType: constant + vipValue: + - vipType: constant + vipValue: read + vipObjectType: object + - vipType: constant + vipValue: write + vipObjectType: object + vipObjectType: list + priority-order: + - mode + - permission + vipObjectType: tree + vipPrimaryKey: + - mode + - name: + vipObjectType: object + vipType: constant + vipValue: operator + priority-order: + - name + - task + task: + vipType: constant + vipValue: + - mode: + vipType: constant + vipValue: system + vipObjectType: object + permission: + vipType: constant + vipValue: + - vipType: constant + vipValue: read + vipObjectType: object + vipObjectType: list + priority-order: + - mode + - permission + - mode: + vipType: constant + vipValue: interface + vipObjectType: object + permission: + vipType: constant + vipValue: + - vipType: constant + vipValue: read + vipObjectType: object + vipObjectType: list + priority-order: + - mode + - permission + - mode: + vipType: constant + vipValue: policy + vipObjectType: object + permission: + vipType: constant + vipValue: + - vipType: constant + vipValue: read + vipObjectType: object + vipObjectType: list + priority-order: + - mode + - permission + - mode: + vipType: constant + vipValue: routing + vipObjectType: object + permission: + vipType: constant + vipValue: + - vipType: constant + vipValue: read + vipObjectType: object + vipObjectType: list + priority-order: + - mode + - permission + - mode: + vipType: constant + vipValue: security + vipObjectType: object + permission: + vipType: constant + vipValue: + - vipType: constant + vipValue: read + vipObjectType: object + vipObjectType: list + priority-order: + - mode + - permission + vipObjectType: tree + vipPrimaryKey: + - mode + - name: + vipObjectType: object + vipType: constant + vipValue: tenantadmin + priority-order: + - name + - task + task: + vipType: constant + vipValue: + - mode: + vipType: constant + vipValue: system + vipObjectType: object + permission: + vipType: constant + vipValue: + - vipType: constant + vipValue: read + vipObjectType: object + - vipType: constant + vipValue: write + vipObjectType: object + vipObjectType: list + priority-order: + - mode + - permission + - mode: + vipType: constant + vipValue: interface + vipObjectType: object + permission: + vipType: constant + vipValue: + - vipType: constant + vipValue: read + vipObjectType: object + - vipType: constant + vipValue: write + vipObjectType: object + vipObjectType: list + priority-order: + - mode + - permission + - mode: + vipType: constant + vipValue: policy + vipObjectType: object + permission: + vipType: constant + vipValue: + - vipType: constant + vipValue: read + vipObjectType: object + - vipType: constant + vipValue: write + vipObjectType: object + vipObjectType: list + priority-order: + - mode + - permission + - mode: + vipType: constant + vipValue: routing + vipObjectType: object + permission: + vipType: constant + vipValue: + - vipType: constant + vipValue: read + vipObjectType: object + - vipType: constant + vipValue: write + vipObjectType: object + vipObjectType: list + priority-order: + - mode + - permission + - mode: + vipType: constant + vipValue: security + vipObjectType: object + permission: + vipType: constant + vipValue: + - vipType: constant + vipValue: read + vipObjectType: object + - vipType: constant + vipValue: write + vipObjectType: object + vipObjectType: list + priority-order: + - mode + - permission + vipObjectType: tree + vipPrimaryKey: + - mode + vipObjectType: tree + vipPrimaryKey: + - name + user: + vipType: constant + vipValue: + - vipOptional: false + name: + vipObjectType: object + vipType: constant + vipValue: admin + vipVariableName: user_name_0 + password: + vipObjectType: object + vipType: constant + vipValue: $6$NntpCg==$T69.Y4XHgnabPXjwogjseIydWzAHpvJeV6plw.WQsaWmAr9NnZl7BWY/OxZfOwQcPL0wYuvSFN252GUOC9z01/ + pubkey-chain: + vipObjectType: tree + vipType: ignore + vipValue: [] + vipVariableName: user_pubkey_chain_0 + vipPrimaryKey: + - usertag + description: + vipObjectType: object + vipType: ignore + vipValue: '' + group: + vipType: constant + vipValue: [] + vipObjectType: list + priority-order: + - name + - password + - secret + - description + - group + - pubkey-chain + vipObjectType: tree + vipPrimaryKey: + - name + accounting: + key: accounting + description: Enable/disable user accounting + details: Enable/disable user accounting + optionType: + - value: constant + display: Global + iconClass: language + iconColor: icon-global + - value: variable + display: Device Specific + iconClass: router + iconColor: icon-variable + - value: ignore + display: Default + iconClass: check_circle + iconColor: icon-default + originalDefaultOption: ignore + defaultOption: ignore + dataType: + type: boolean + default: 'false' + dataPath: + - aaa + vipObjectType: object + objectType: object + deleteFlag: false + vipValue: 'false' + vipType: ignore + vipVariableName: aaa_accounting + ciscotacro-user: + vipObjectType: object + vipType: constant + vipValue: true + ciscotacrw-user: + vipObjectType: object + vipType: constant + vipValue: true + tacacs: + timeout: + vipObjectType: object + vipType: ignore + vipValue: 5 + vipVariableName: tacacs_timeout + authentication: + vipObjectType: object + vipType: ignore + vipValue: pap + vipVariableName: tacacs_authentication + radius: + timeout: + vipObjectType: object + vipType: ignore + vipValue: 5 + vipVariableName: radius_timeout + retransmit: + vipObjectType: object + vipType: ignore + vipValue: 3 + vipVariableName: retransmit diff --git a/files/hq2_vmanage_templates_v20.yml b/files/hq2_vmanage_templates_v20.yml index 18d6d327..5498cbf6 100644 --- a/files/hq2_vmanage_templates_v20.yml +++ b/files/hq2_vmanage_templates_v20.yml @@ -1,15 +1,86 @@ vmanage_device_templates: -- templateId: 1cf9e280-5ea2-4ec3-98a1-910462a36b07 - templateName: branch-csr1000v-vrrp - templateDescription: Branch CSR1000v Template w/VRRP +- templateName: branch-csr1000v + templateDescription: Branch CSR1000v Template deviceType: vedge-CSR-1000v - configType: template factoryDefault: false - policyId: '' + configType: template featureTemplateUidRange: [] - connectionPreferenceRequired: true - connectionPreference: true + policyId: '' + securityPolicyId: '' + templateId: 2ad5c518-a889-4078-8962-d93bd6559736 templateClass: cedge + deviceRole: sdwan-edge + draftMode: false + attached_devices: + - site1-cedge1 + input: + columns: + - title: Login Banner(banner_login) + property: //banner/login + variable: banner_login + editable: true + optional: false + - title: MOTD Banner(banner_motd) + property: //banner/motd + variable: banner_motd + editable: true + optional: false + - title: Interface Name(vpn1_interface) + property: /1/vpn1_interface/interface/if-name + variable: vpn1_interface + editable: true + optional: false + - title: IPv4 Address/ prefix-length(vpn1_ipv4_address) + property: /1/vpn1_interface/interface/ip/address + variable: vpn1_ipv4_address + editable: true + optional: false + - title: Interface Name(vpn512_interface) + property: /512/vpn512_interface/interface/if-name + variable: vpn512_interface + editable: true + optional: false + - title: Address(vpn0_default_gateway) + property: /0/vpn-instance/ip/route/0.0.0.0/0/next-hop/vpn0_default_gateway/address + variable: vpn0_default_gateway + editable: true + optional: false + - title: Interface Name(vpn0_interface) + property: /0/vpn0_interface/interface/if-name + variable: vpn0_interface + editable: true + optional: false + - title: IPv4 Address/ prefix-length(vpn0_internet_ipv4_address) + property: /0/vpn0_interface/interface/ip/address + variable: vpn0_internet_ipv4_address + editable: true + optional: false + - title: Hostname(system_host_name) + property: //system/host-name + variable: system_host_name + editable: true + optional: false + - title: Latitude(system_latitude) + property: //system/gps-location/latitude + variable: system_latitude + editable: true + optional: false + - title: Longitude(system_longitude) + property: //system/gps-location/longitude + variable: system_longitude + editable: true + optional: false + - title: System IP(system_system_ip) + property: //system/system-ip + variable: system_system_ip + editable: true + optional: false + - title: Site ID(system_site_id) + property: //system/site-id + variable: system_site_id + editable: true + optional: false + data: [] generalTemplates: - templateName: Factory_Default_AAA_CISCO_Template templateType: cedge_aaa @@ -37,22 +108,108 @@ vmanage_device_templates: - templateName: cedge_vpn1 templateType: cisco_vpn subTemplates: - - templateName: cedge_vpn1_interface_vrrp + - templateName: cedge_vpn1_interface templateType: cisco_vpn_interface - templateName: Factory_Default_Global_CISCO_Template templateType: cedge_global - templateName: cedge_banner templateType: cisco_banner -- templateName: branch-csr1000v - templateDescription: Branch CSR1000v Template +- templateName: branch-csr1000v-vrrp + templateDescription: Branch CSR1000v Template w/VRRP deviceType: vedge-CSR-1000v factoryDefault: false configType: template featureTemplateUidRange: [] policyId: '' securityPolicyId: '' - templateId: dd053e9e-287d-4e9b-81f3-53cf38599aa1 + templateId: 8085d1ac-0736-49a7-a090-2baa0c3ed295 templateClass: cedge + deviceRole: sdwan-edge + draftMode: false + attached_devices: [] + input: + columns: + - title: Login Banner(banner_login) + property: //banner/login + variable: banner_login + editable: true + optional: false + - title: MOTD Banner(banner_motd) + property: //banner/motd + variable: banner_motd + editable: true + optional: false + - title: Interface Name(vpn1_interface) + property: /1/vpn1_interface/interface/if-name + variable: vpn1_interface + editable: true + optional: false + - title: IPv4 Address/ prefix-length(vpn1_ipv4_address) + property: /1/vpn1_interface/interface/ip/address + variable: vpn1_ipv4_address + editable: true + optional: false + - title: Group ID(vpn1_vrrp_grpid) + property: /1/vpn1_interface/interface/vrrp/vpn1_vrrp_grpid/grp-id + variable: vpn1_vrrp_grpid + editable: true + optional: false + - title: Priority(vpn1_vrrp_priority) + property: /1/vpn1_interface/interface/vrrp/vpn1_vrrp_grpid/priority + variable: vpn1_vrrp_priority + editable: true + optional: false + - title: IP Address(vpn1_vrrp_ipaddress) + property: /1/vpn1_interface/interface/vrrp/vpn1_vrrp_grpid/ipv4/address + variable: vpn1_vrrp_ipaddress + editable: true + optional: false + - title: Interface Name(vpn512_interface) + property: /512/vpn512_interface/interface/if-name + variable: vpn512_interface + editable: true + optional: false + - title: Address(vpn0_default_gateway) + property: /0/vpn-instance/ip/route/0.0.0.0/0/next-hop/vpn0_default_gateway/address + variable: vpn0_default_gateway + editable: true + optional: false + - title: Interface Name(vpn0_interface) + property: /0/vpn0_interface/interface/if-name + variable: vpn0_interface + editable: true + optional: false + - title: IPv4 Address/ prefix-length(vpn0_internet_ipv4_address) + property: /0/vpn0_interface/interface/ip/address + variable: vpn0_internet_ipv4_address + editable: true + optional: false + - title: Hostname(system_host_name) + property: //system/host-name + variable: system_host_name + editable: true + optional: false + - title: Latitude(system_latitude) + property: //system/gps-location/latitude + variable: system_latitude + editable: true + optional: false + - title: Longitude(system_longitude) + property: //system/gps-location/longitude + variable: system_longitude + editable: true + optional: false + - title: System IP(system_system_ip) + property: //system/system-ip + variable: system_system_ip + editable: true + optional: false + - title: Site ID(system_site_id) + property: //system/site-id + variable: system_site_id + editable: true + optional: false + data: [] generalTemplates: - templateName: Factory_Default_AAA_CISCO_Template templateType: cedge_aaa @@ -80,12 +237,126 @@ vmanage_device_templates: - templateName: cedge_vpn1 templateType: cisco_vpn subTemplates: - - templateName: cedge_vpn1_interface + - templateName: cedge_vpn1_interface_vrrp templateType: cisco_vpn_interface - templateName: Factory_Default_Global_CISCO_Template templateType: cedge_global - templateName: cedge_banner templateType: cisco_banner +- templateId: d77b77a2-9c5e-4259-892f-9c2ae003dec9 + templateName: branch-vedge-cloud + templateDescription: Branch vEdge Cloud Template + deviceType: vedge-cloud + deviceRole: sdwan-edge + configType: template + factoryDefault: false + policyId: '' + featureTemplateUidRange: [] + draftMode: false + connectionPreferenceRequired: true + connectionPreference: true + templateClass: vedge + attached_devices: + - site2-vedge1 + input: + columns: + - title: Login Banner(banner_login) + property: //banner/login + variable: banner_login + editable: true + optional: false + - title: MOTD Banner(banner_motd) + property: //banner/motd + variable: banner_motd + editable: true + optional: false + - title: Interface Name(vpn1_interface) + property: /1/vpn1_interface/interface/if-name + variable: vpn1_interface + editable: true + optional: false + - title: IPv4 Address(vpn1_ipv4_address) + property: /1/vpn1_interface/interface/ip/address + variable: vpn1_ipv4_address + editable: true + optional: false + - title: Interface Name(vpn512_interface) + property: /512/vpn512_interface/interface/if-name + variable: vpn512_interface + editable: true + optional: false + - title: Address(vpn0_default_gateway) + property: /0/vpn-instance/ip/route/0.0.0.0/0/next-hop/vpn0_default_gateway/address + variable: vpn0_default_gateway + editable: true + optional: false + - title: Interface Name(vpn0_interface) + property: /0/vpn0_interface/interface/if-name + variable: vpn0_interface + editable: true + optional: false + - title: IPv4 Address(vpn0_internet_ipv4_address) + property: /0/vpn0_interface/interface/ip/address + variable: vpn0_internet_ipv4_address + editable: true + optional: false + - title: Hostname(system_host_name) + property: //system/host-name + variable: system_host_name + editable: true + optional: false + - title: Latitude(system_latitude) + property: //system/gps-location/latitude + variable: system_latitude + editable: true + optional: false + - title: Longitude(system_longitude) + property: //system/gps-location/longitude + variable: system_longitude + editable: true + optional: false + - title: System IP(system_system_ip) + property: //system/system-ip + variable: system_system_ip + editable: true + optional: false + - title: Site ID(system_site_id) + property: //system/site-id + variable: system_site_id + editable: true + optional: false + data: [] + generalTemplates: + - templateName: aaa + templateType: aaa + - templateName: Factory_Default_BFD_Template_V01 + templateType: bfd-vedge + - templateName: Factory_Default_vEdge_OMP_Template + templateType: omp-vedge + - templateName: Factory_Default_vEdge_Security_Template_V01 + templateType: security-vedge + - templateName: system + templateType: system-vedge + subTemplates: + - templateName: Factory_Default_Logging_Template_V01 + templateType: logging + - templateName: vpn0 + templateType: vpn-vedge + subTemplates: + - templateName: vpn0_interface + templateType: vpn-vedge-interface + - templateName: vpn512 + templateType: vpn-vedge + subTemplates: + - templateName: vpn512_interface + templateType: vpn-vedge-interface + - templateName: vpn1 + templateType: vpn-vedge + subTemplates: + - templateName: vpn1_interface + templateType: vpn-vedge-interface + - templateName: banner + templateType: banner - templateName: hq-csr1000v templateDescription: HQ CSR1000v Template deviceType: vedge-CSR-1000v @@ -94,8 +365,85 @@ vmanage_device_templates: featureTemplateUidRange: [] policyId: '' securityPolicyId: '' - templateId: da39b457-b9b5-495b-9371-d73cbb99a660 + templateId: 3131f594-2c09-48b5-9203-6eb8fe6bf019 templateClass: cedge + deviceRole: sdwan-edge + draftMode: false + attached_devices: + - hq-cedge1 + input: + columns: + - title: Login Banner(banner_login) + property: //banner/login + variable: banner_login + editable: true + optional: false + - title: MOTD Banner(banner_motd) + property: //banner/motd + variable: banner_motd + editable: true + optional: false + - title: Interface Name(vpn1_interface) + property: /1/vpn1_interface/interface/if-name + variable: vpn1_interface + editable: true + optional: false + - title: IPv4 Address/ prefix-length(vpn1_ipv4_address) + property: /1/vpn1_interface/interface/ip/address + variable: vpn1_ipv4_address + editable: true + optional: false + - title: Interface Name(vpn1_ospf_interface) + property: /1//router/ospf/area/0/interface/vpn1_ospf_interface/name + variable: vpn1_ospf_interface + editable: true + optional: false + - title: Interface Name(vpn512_interface) + property: /512/vpn512_interface/interface/if-name + variable: vpn512_interface + editable: true + optional: false + - title: Address(vpn0_default_gateway) + property: /0/vpn-instance/ip/route/0.0.0.0/0/next-hop/vpn0_default_gateway/address + variable: vpn0_default_gateway + editable: true + optional: false + - title: Interface Name(vpn0_interface) + property: /0/vpn0_interface/interface/if-name + variable: vpn0_interface + editable: true + optional: false + - title: IPv4 Address/ prefix-length(vpn0_internet_ipv4_address) + property: /0/vpn0_interface/interface/ip/address + variable: vpn0_internet_ipv4_address + editable: true + optional: false + - title: Hostname(system_host_name) + property: //system/host-name + variable: system_host_name + editable: true + optional: false + - title: Latitude(system_latitude) + property: //system/gps-location/latitude + variable: system_latitude + editable: true + optional: false + - title: Longitude(system_longitude) + property: //system/gps-location/longitude + variable: system_longitude + editable: true + optional: false + - title: System IP(system_system_ip) + property: //system/system-ip + variable: system_system_ip + editable: true + optional: false + - title: Site ID(system_site_id) + property: //system/site-id + variable: system_site_id + editable: true + optional: false + data: [] generalTemplates: - templateName: Factory_Default_AAA_CISCO_Template templateType: cedge_aaa @@ -131,59 +479,49 @@ vmanage_device_templates: templateType: cedge_global - templateName: cedge_banner templateType: cisco_banner -- templateName: branch-vedge-cloud - templateDescription: Branch vEdge Cloud Template - deviceType: vedge-cloud - factoryDefault: false - configType: template - featureTemplateUidRange: [] - policyId: '' - securityPolicyId: '' - templateId: b6635448-e0ab-4842-ab13-755ebf1fa913 - templateClass: vedge - generalTemplates: - - templateName: Factory_Default_AAA_Template - templateType: aaa - - templateName: Factory_Default_BFD_Template_V01 - templateType: bfd-vedge - - templateName: Factory_Default_vEdge_OMP_Template - templateType: omp-vedge - - templateName: Factory_Default_vEdge_Security_Template_V01 - templateType: security-vedge - - templateName: system - templateType: system-vedge - subTemplates: - - templateName: Factory_Default_Logging_Template_V01 - templateType: logging - - templateName: vpn0 - templateType: vpn-vedge - subTemplates: - - templateName: vpn0_interface - templateType: vpn-vedge-interface - - templateName: vpn512 - templateType: vpn-vedge - subTemplates: - - templateName: vpn512_interface - templateType: vpn-vedge-interface - - templateName: vpn1 - templateType: vpn-vedge - subTemplates: - - templateName: vpn1_interface - templateType: vpn-vedge-interface - - templateName: banner - templateType: banner -- templateName: vsmart +- templateId: 7918599c-c4dd-4e7b-b8ee-4a7a1f8765c1 + templateName: vsmart templateDescription: vSmart Device Template deviceType: vsmart - factoryDefault: false + deviceRole: sdwan-edge configType: template - featureTemplateUidRange: [] + factoryDefault: false policyId: '' - securityPolicyId: '' - templateId: 0c3e5c2f-1a27-4b7e-8fc1-64bc974394c1 + featureTemplateUidRange: [] + draftMode: false templateClass: vedge + attached_devices: + - vsmart1 + input: + columns: + - title: Address(vpn0_default_gateway) + property: /0/vpn-instance/ip/route/0.0.0.0/0/next-hop/vpn0_default_gateway/address + variable: vpn0_default_gateway + editable: true + optional: false + - title: IPv4 Address(vpn0_internet_ipv4_address) + property: /0/eth1/interface/ip/address + variable: vpn0_internet_ipv4_address + editable: true + optional: false + - title: Hostname + property: //system/host-name + variable: //system/host-name + editable: true + optional: false + - title: System IP + property: //system/system-ip + variable: //system/system-ip + editable: true + optional: false + - title: Site ID + property: //system/site-id + variable: //system/site-id + editable: true + optional: false + data: [] generalTemplates: - - templateName: Factory_Default_AAA_Template + - templateName: aaa templateType: aaa - templateName: Factory_Default_vSmart_OMP_Template templateType: omp-vsmart @@ -205,65 +543,514 @@ vmanage_device_templates: - templateName: vsmart_vpn512_interface templateType: vpn-vsmart-interface vmanage_feature_templates: -- templateId: 5bdc5c41-35c6-4179-ba0a-c4b989f0a2fa - templateName: system - templateDescription: system - templateType: system-vedge +- templateId: bc9674cf-8e87-4a3b-96af-6011ea0c6308 + templateName: aaa + templateDescription: AAA template settings + templateType: aaa deviceType: - vedge-cloud + - vedge-1000 + - vedge-ISR1100-6G + - vedge-ISR1100X-6G + - vedge-2000 + - vedge-100 + - vedge-ISR1100-4GLTE + - vedge-100-B + - vedge-100-WM + - vedge-100-M + - vedge-5000 + - vmanage + - vsmart + - vedge-ISR1100-4G + - vedge-ISR1100X-4G lastUpdatedBy: admin - lastUpdatedOn: 1603228275854 + lastUpdatedOn: 1644523278793 factoryDefault: false - devicesAttached: 0 - attachedMastersCount: 1 + devicesAttached: 2 + attachedMastersCount: 2 templateMinVersion: 15.0.0 configType: xml createdBy: admin - createdOn: 1603228275854 + createdOn: 1644523278793 + resourceGroup: global templateDefinition: - clock: - timezone: + aaa: + auth-order: + vipType: constant + vipValue: + - vipType: constant + vipValue: local + vipObjectType: object + - vipType: constant + vipValue: radius + vipObjectType: object + - vipType: constant + vipValue: tacacs + vipObjectType: object + vipObjectType: list + vipVariableName: auth_order + auth-fallback: vipObjectType: object vipType: ignore - vipValue: UTC - vipVariableName: system_timezone - gps-location: - latitude: + vipValue: 'false' + vipVariableName: auth_fallback + usergroup: + vipType: constant + vipValue: + - name: + vipObjectType: object + vipType: constant + vipValue: netadmin + viewMode: view + priority-order: + - name + - name: + vipObjectType: object + vipType: constant + vipValue: basic + priority-order: + - name + - task + task: + vipType: constant + vipValue: + - mode: + vipType: constant + vipValue: system + vipObjectType: object + permission: + vipType: constant + vipValue: + - vipType: constant + vipValue: read + vipObjectType: object + - vipType: constant + vipValue: write + vipObjectType: object + vipObjectType: list + priority-order: + - mode + - permission + - mode: + vipType: constant + vipValue: interface + vipObjectType: object + permission: + vipType: constant + vipValue: + - vipType: constant + vipValue: read + vipObjectType: object + - vipType: constant + vipValue: write + vipObjectType: object + vipObjectType: list + priority-order: + - mode + - permission + vipObjectType: tree + vipPrimaryKey: + - mode + viewMode: edit + - name: + vipObjectType: object + vipType: constant + vipValue: operator + priority-order: + - name + - task + task: + vipType: constant + vipValue: + - mode: + vipType: constant + vipValue: system + vipObjectType: object + permission: + vipType: constant + vipValue: + - vipType: constant + vipValue: read + vipObjectType: object + vipObjectType: list + priority-order: + - mode + - permission + - mode: + vipType: constant + vipValue: interface + vipObjectType: object + permission: + vipType: constant + vipValue: + - vipType: constant + vipValue: read + vipObjectType: object + vipObjectType: list + priority-order: + - mode + - permission + - mode: + vipType: constant + vipValue: policy + vipObjectType: object + permission: + vipType: constant + vipValue: + - vipType: constant + vipValue: read + vipObjectType: object + vipObjectType: list + priority-order: + - mode + - permission + - mode: + vipType: constant + vipValue: routing + vipObjectType: object + permission: + vipType: constant + vipValue: + - vipType: constant + vipValue: read + vipObjectType: object + vipObjectType: list + priority-order: + - mode + - permission + - mode: + vipType: constant + vipValue: security + vipObjectType: object + permission: + vipType: constant + vipValue: + - vipType: constant + vipValue: read + vipObjectType: object + vipObjectType: list + priority-order: + - mode + - permission + vipObjectType: tree + vipPrimaryKey: + - mode + viewMode: edit + - name: + vipObjectType: object + vipType: constant + vipValue: tenantadmin + priority-order: + - name + - task + task: + vipType: constant + vipValue: + - mode: + vipType: constant + vipValue: system + vipObjectType: object + permission: + vipType: constant + vipValue: + - vipType: constant + vipValue: read + vipObjectType: object + - vipType: constant + vipValue: write + vipObjectType: object + vipObjectType: list + priority-order: + - mode + - permission + - mode: + vipType: constant + vipValue: interface + vipObjectType: object + permission: + vipType: constant + vipValue: + - vipType: constant + vipValue: read + vipObjectType: object + - vipType: constant + vipValue: write + vipObjectType: object + vipObjectType: list + priority-order: + - mode + - permission + - mode: + vipType: constant + vipValue: policy + vipObjectType: object + permission: + vipType: constant + vipValue: + - vipType: constant + vipValue: read + vipObjectType: object + - vipType: constant + vipValue: write + vipObjectType: object + vipObjectType: list + priority-order: + - mode + - permission + - mode: + vipType: constant + vipValue: routing + vipObjectType: object + permission: + vipType: constant + vipValue: + - vipType: constant + vipValue: read + vipObjectType: object + - vipType: constant + vipValue: write + vipObjectType: object + vipObjectType: list + priority-order: + - mode + - permission + - mode: + vipType: constant + vipValue: security + vipObjectType: object + permission: + vipType: constant + vipValue: + - vipType: constant + vipValue: read + vipObjectType: object + - vipType: constant + vipValue: write + vipObjectType: object + vipObjectType: list + priority-order: + - mode + - permission + vipObjectType: tree + vipPrimaryKey: + - mode + vipObjectType: tree + vipPrimaryKey: + - name + user: + vipType: constant + vipValue: + - name: + vipObjectType: object + vipType: constant + vipValue: admin + vipVariableName: user_name_0 + password: + vipObjectType: object + vipType: constant + vipValue: $6$siwKBQ==$wT2lUa9BSreDPI6gB8sl4E6PAJoVXgMbgv/whJ8F1C6sWdRazdxorYYTLrL6syiG6qnLABTnrE96HJiKF6QRq1 + pubkey-chain: + vipObjectType: tree + vipType: ignore + vipValue: [] + vipVariableName: user_pubkey_chain_0 + vipPrimaryKey: + - usertag + description: + vipObjectType: object + vipType: ignore + vipValue: '' + group: + vipType: ignore + vipValue: [] + vipObjectType: list + priority-order: + - name + - password + - secret + - description + - group + - pubkey-chain + vipObjectType: tree + vipPrimaryKey: + - name + radius-servers: + vipObjectType: list + vipType: ignore + vipValue: + - '' + vipVariableName: radius_servers + admin-auth-order: vipObjectType: object - vipType: variableName - vipValue: '' - vipVariableName: system_latitude - longitude: + vipType: ignore + vipValue: 'false' + vipVariableName: admin_auth_order + logs: + audit-disable: + vipObjectType: object + vipType: ignore + vipValue: 'false' + vipVariableName: disable_audit_logs + netconf-disable: + vipObjectType: object + vipType: ignore + vipValue: 'false' + vipVariableName: disable_netconf_logs + accounting: + key: accounting + description: Enable/disable user accounting + details: Enable/disable user accounting + optionType: + - value: constant + display: Global + iconClass: language + iconColor: icon-global + - value: variable + display: Device Specific + iconClass: router + iconColor: icon-variable + - value: ignore + display: Default + iconClass: check_circle + iconColor: icon-default + originalDefaultOption: ignore + defaultOption: ignore + dataType: + type: boolean + default: 'false' + dataPath: + - aaa vipObjectType: object - vipType: variableName - vipValue: '' - vipVariableName: system_longitude - timer: - dns-cache-timeout: + objectType: object + deleteFlag: false + vipValue: 'false' + vipType: ignore + vipVariableName: aaa_accounting + tacacs: + timeout: vipObjectType: object vipType: ignore - vipValue: 2 - vipVariableName: system_dns_cache_timeout - location: - vipObjectType: object - vipType: ignore - vipVariableName: system_location - system-tunnel-mtu: - vipObjectType: object - vipType: ignore - vipValue: 1024 - vipVariableName: system_system_tunnel_mtu - track-transport: - vipObjectType: object - vipType: ignore - vipValue: 'true' - vipVariableName: system_track_transport - track-interface-tag: - vipObjectType: object - vipType: ignore - vipVariableName: system_track_interface_tag - port-offset: - vipObjectType: object + vipValue: 5 + vipVariableName: tacacs_timeout + authentication: + vipObjectType: object + vipType: ignore + vipValue: pap + vipVariableName: tacacs_authentication + radius: + timeout: + vipObjectType: object + vipType: ignore + vipValue: 5 + vipVariableName: radius_timeout + retransmit: + vipObjectType: object + vipType: ignore + vipValue: 3 + vipVariableName: retransmit +- templateId: ca60036b-73f1-44ba-a2a7-6294a32cbf80 + templateName: banner + templateDescription: banner + templateType: banner + deviceType: + - vedge-cloud + lastUpdatedBy: admin + lastUpdatedOn: 1644522346432 + factoryDefault: false + devicesAttached: 1 + attachedMastersCount: 1 + templateMinVersion: 15.0.0 + configType: xml + createdBy: admin + createdOn: 1644522346432 + resourceGroup: global + templateDefinition: + login: + vipObjectType: object + vipType: variableName + vipValue: '' + vipVariableName: banner_login + motd: + vipObjectType: object + vipType: variableName + vipValue: '' + vipVariableName: banner_motd +- templateId: a7874436-3410-497c-a003-e9e15810b6bc + templateName: cedge_banner + templateDescription: cEdge Banner + templateType: cisco_banner + deviceType: + - vedge-CSR-1000v + lastUpdatedBy: admin + lastUpdatedOn: 1644522350584 + factoryDefault: false + devicesAttached: 2 + attachedMastersCount: 3 + templateMinVersion: 15.0.0 + configType: xml + createdBy: admin + createdOn: 1644522350584 + resourceGroup: global + templateDefinition: + login: + vipObjectType: object + vipType: variableName + vipValue: '' + vipVariableName: banner_login + motd: + vipObjectType: object + vipType: variableName + vipValue: '' + vipVariableName: banner_motd +- templateId: 72aa3cb1-8f6c-43d5-bc1a-8e05a0a859c4 + templateName: cedge_system + templateDescription: cEdge System + templateType: cisco_system + deviceType: + - vedge-CSR-1000v + lastUpdatedBy: admin + lastUpdatedOn: 1644522345418 + factoryDefault: false + devicesAttached: 2 + attachedMastersCount: 3 + templateMinVersion: 15.0.0 + configType: xml + createdBy: admin + createdOn: 1644522345418 + resourceGroup: global + templateDefinition: + clock: + timezone: + vipObjectType: object + vipType: ignore + vipValue: UTC + vipVariableName: system_timezone + gps-location: + latitude: + vipObjectType: object + vipType: variableName + vipValue: '' + vipVariableName: system_latitude + longitude: + vipObjectType: object + vipType: variableName + vipValue: '' + vipVariableName: system_longitude + location: + vipObjectType: object + vipType: ignore + vipVariableName: system_location + track-transport: + vipObjectType: object + vipType: ignore + vipValue: 'true' + vipVariableName: system_track_transport + track-interface-tag: + vipObjectType: object + vipType: ignore + vipVariableName: system_track_interface_tag + port-offset: + vipObjectType: object vipType: ignore vipValue: 0 vipVariableName: system_port_offset @@ -289,11 +1076,6 @@ vmanage_feature_templates: vipObjectType: list vipType: ignore vipVariableName: system_controller_group_list - eco-friendly-mode: - vipObjectType: object - vipType: ignore - vipValue: 'false' - vipVariableName: system_eco_friendly_mode site-id: vipObjectType: object vipType: variableName @@ -316,48 +1098,18 @@ vmanage_feature_templates: vipVariableName: system_host_name console-baud-rate: vipObjectType: object - vipType: ignore - vipValue: _empty + vipType: constant + vipValue: '9600' vipVariableName: system_console_baud_rate max-omp-sessions: vipObjectType: object vipType: ignore vipVariableName: system_max_omp_sessions - usb-controller: - vipObjectType: object - vipType: ignore - vipValue: 'false' - vipVariableName: system_usb_controller track-default-gateway: vipObjectType: object vipType: ignore vipValue: 'true' vipVariableName: system_track_default_gateway - multicast-buffer-percent: - vipObjectType: object - vipType: ignore - vipValue: 20 - vipVariableName: system_multicast_buffer_percent - host-policer-pps: - vipObjectType: object - vipType: ignore - vipValue: 20000 - vipVariableName: system_host_policer_pps - icmp-error-pps: - vipObjectType: object - vipType: ignore - vipValue: 100 - vipVariableName: system_icmp_error_pps - allow-same-site-tunnels: - vipObjectType: object - vipType: ignore - vipValue: 'false' - vipVariableName: system_allow_same_site_tunnels - route-consistency-check: - vipObjectType: object - vipType: ignore - vipValue: 'false' - vipVariableName: system_route_consistency_check idle-timeout: vipObjectType: object vipType: ignore @@ -373,21 +1125,22 @@ vmanage_feature_templates: vipObjectType: tree vipPrimaryKey: - name -- templateId: eb78d26d-4494-4f92-9ded-9430a26bab31 +- templateId: 109badec-030d-4c15-ac17-da36b3f80f18 templateName: cedge_vpn0 templateDescription: cEdge VPN0 templateType: cisco_vpn deviceType: - vedge-CSR-1000v lastUpdatedBy: admin - lastUpdatedOn: 1603228275124 + lastUpdatedOn: 1644522343485 factoryDefault: false - devicesAttached: 4 + devicesAttached: 2 attachedMastersCount: 3 templateMinVersion: 15.0.0 configType: xml createdBy: admin - createdOn: 1603228275124 + createdOn: 1644522343485 + resourceGroup: global templateDefinition: vpn-id: vipObjectType: object @@ -502,274 +1255,58 @@ vmanage_feature_templates: vipObjectType: tree vipPrimaryKey: - protocol -- templateId: 546af756-6bf1-4dab-ba95-df39dfe843a2 - templateName: vpn1 - templateDescription: vEdge vpn1 - templateType: vpn-vedge +- templateId: b26b3faa-ce23-4542-b1a6-7240ac4b244f + templateName: cedge_vpn0_interface + templateDescription: cEdge VPN0 Interface + templateType: cisco_vpn_interface deviceType: - - vedge-cloud + - vedge-CSR-1000v lastUpdatedBy: admin - lastUpdatedOn: 1603228277016 + lastUpdatedOn: 1644522350985 factoryDefault: false - devicesAttached: 0 - attachedMastersCount: 1 + devicesAttached: 2 + attachedMastersCount: 3 templateMinVersion: 15.0.0 configType: xml createdBy: admin - createdOn: 1603228277016 + createdOn: 1644522350985 + resourceGroup: global templateDefinition: - vpn-id: + if-name: vipObjectType: object - vipType: constant - vipValue: 1 - name: + vipType: variableName + vipValue: '' + vipVariableName: vpn0_interface + description: vipObjectType: object vipType: ignore - vipVariableName: vpn_name - ecmp-hash-key: - layer4: - vipObjectType: object - vipType: ignore - vipValue: 'false' - vipVariableName: vpn_layer4 - tcp-optimization: - vipObjectType: node-only - vipType: ignore - vipValue: 'false' - vipVariableName: vpn_tcp_optimization - nat64-global: - prefix: - stateful: {} - nat64: - v4: - pool: - vipType: ignore - vipValue: [] - vipObjectType: tree - vipPrimaryKey: - - name - host: - vipType: ignore - vipValue: [] - vipObjectType: tree - vipPrimaryKey: - - hostname - service: - vipType: ignore - vipValue: [] - vipObjectType: tree - vipPrimaryKey: - - svc-type + vipVariableName: vpn_if_description ip: - gre-route: {} - ipsec-route: {} - service-route: {} - ipv6: {} - omp: - advertise: - vipType: ignore - vipValue: [] - vipObjectType: tree - vipPrimaryKey: - - protocol - ipv6-advertise: + secondary-address: vipType: ignore vipValue: [] vipObjectType: tree vipPrimaryKey: - - protocol -- templateId: bdc461ad-485a-4494-9f33-ef639d71ff08 - templateName: cedge_system - templateDescription: cEdge System - templateType: cisco_system - deviceType: - - vedge-CSR-1000v - lastUpdatedBy: admin - lastUpdatedOn: 1603228276882 - factoryDefault: false - devicesAttached: 4 - attachedMastersCount: 3 - templateMinVersion: 15.0.0 - configType: xml - createdBy: admin - createdOn: 1603228276882 - templateDefinition: - clock: - timezone: - vipObjectType: object - vipType: ignore - vipValue: UTC - vipVariableName: system_timezone - gps-location: - latitude: - vipObjectType: object - vipType: variableName - vipValue: '' - vipVariableName: system_latitude - longitude: + - address + address: vipObjectType: object vipType: variableName vipValue: '' - vipVariableName: system_longitude - location: + vipVariableName: vpn0_internet_ipv4_address + dhcp-helper: + vipObjectType: list + vipType: ignore + vipVariableName: vpn_if_dhcp_helper + flow-control: {} + clear-dont-fragment: {} + pmtu: {} + mtu: vipObjectType: object vipType: ignore - vipVariableName: system_location - track-transport: - vipObjectType: object - vipType: ignore - vipValue: 'true' - vipVariableName: system_track_transport - track-interface-tag: - vipObjectType: object - vipType: ignore - vipVariableName: system_track_interface_tag - port-offset: - vipObjectType: object - vipType: ignore - vipValue: 0 - vipVariableName: system_port_offset - port-hop: - vipObjectType: object - vipType: ignore - vipValue: 'true' - vipVariableName: system_port_hop - control-session-pps: - vipObjectType: object - vipType: ignore - vipValue: 300 - vipVariableName: system_control_session_pps - description: - vipObjectType: object - vipType: ignore - vipVariableName: system_description - device-groups: - vipObjectType: list - vipType: ignore - vipVariableName: system_device_groups - controller-group-list: - vipObjectType: list - vipType: ignore - vipVariableName: system_controller_group_list - site-id: - vipObjectType: object - vipType: variableName - vipValue: '' - vipVariableName: system_site_id - overlay-id: - vipObjectType: object - vipType: ignore - vipValue: 1 - vipVariableName: system_overlay_id - system-ip: - vipObjectType: object - vipType: variableName - vipValue: '' - vipVariableName: system_system_ip - host-name: - vipObjectType: object - vipType: variableName - vipValue: '' - vipVariableName: system_host_name - console-baud-rate: - vipObjectType: object - vipType: constant - vipValue: '9600' - vipVariableName: system_console_baud_rate - max-omp-sessions: - vipObjectType: object - vipType: ignore - vipVariableName: system_max_omp_sessions - track-default-gateway: - vipObjectType: object - vipType: ignore - vipValue: 'true' - vipVariableName: system_track_default_gateway - idle-timeout: - vipObjectType: object - vipType: ignore - vipVariableName: system_idle-timeout - admin-tech-on-failure: - vipObjectType: object - vipType: ignore - vipValue: 'true' - vipVariableName: system_admin_tech_on_failure - tracker: - vipType: ignore - vipValue: [] - vipObjectType: tree - vipPrimaryKey: - - name -- templateId: 443c8e8a-3b79-443d-87d9-cbace4e66a4d - templateName: vpn512_interface - templateDescription: vpn512_interface - templateType: vpn-vedge-interface - deviceType: - - vedge-cloud - lastUpdatedBy: admin - lastUpdatedOn: 1603228276436 - factoryDefault: false - devicesAttached: 0 - attachedMastersCount: 1 - templateMinVersion: 15.0.0 - configType: xml - createdBy: admin - createdOn: 1603228276436 - templateDefinition: - if-name: - vipObjectType: object - vipType: variableName - vipValue: '' - vipVariableName: vpn512_interface - description: - vipObjectType: object - vipType: ignore - vipVariableName: vpn_if_description - ip: - dhcp-client: - vipObjectType: object - vipType: constant - vipValue: 'true' - dhcp-distance: - vipObjectType: object - vipType: ignore - vipValue: 1 - vipVariableName: vpn_if_ipv4_dhcp_distance - secondary-address: - vipType: ignore - vipValue: [] - vipObjectType: tree - vipPrimaryKey: - - address - dhcp-helper: - vipObjectType: list - vipType: ignore - vipVariableName: vpn_if_dhcp_helper - flow-control: - vipObjectType: object - vipType: ignore - vipValue: autoneg - vipVariableName: vpn_if_flow_control - clear-dont-fragment: - vipObjectType: object - vipType: ignore - vipValue: 'false' - vipVariableName: vpn_if_clear_dont_fragment - pmtu: - vipObjectType: object - vipType: ignore - vipValue: 'false' - vipVariableName: vpn_if_pmtu - mtu: - vipObjectType: object - vipType: ignore - vipValue: 1500 - vipVariableName: vpn_if_ip_mtu - static-ingress-qos: - vipObjectType: object - vipType: ignore - vipVariableName: vpn_if_static_ingress_qos - tcp-mss-adjust: + vipValue: 1500 + vipVariableName: vpn_if_ip_mtu + static-ingress-qos: {} + tcp-mss-adjust: vipObjectType: object vipType: ignore vipVariableName: vpn_if_tcp_mss_adjust @@ -790,7 +1327,7 @@ vmanage_feature_templates: shutdown: vipObjectType: object vipType: constant - vipValue: 'true' + vipValue: 'false' vipVariableName: vpn_if_shutdown arp-timeout: vipObjectType: object @@ -836,10 +1373,15 @@ vmanage_feature_templates: vipObjectType: object vipType: ignore vipVariableName: vpn_if_tloc_extension + load-interval: + vipObjectType: object + vipType: ignore + vipValue: 300 + vipVariableName: vpn_if_load_interval icmp-redirect-disable: vipObjectType: object vipType: ignore - vipValue: 'false' + vipValue: 'true' vipVariableName: vpn_if_icmp_redirect_disable tloc-extension-gre-from: src-ip: @@ -856,125 +1398,329 @@ vmanage_feature_templates: vipObjectType: tree vipPrimaryKey: - direction - policer: - vipType: ignore - vipValue: [] - vipObjectType: tree - vipPrimaryKey: - - policer-name - - direction - ip-directed-broadcast: - vipObjectType: object - vipType: ignore - vipValue: 'false' - vipVariableName: vpn_if_ip-directed-broadcast - ipv6: - access-list: - vipType: ignore - vipValue: [] + tunnel-interface: + encapsulation: + vipType: constant + vipValue: + - preference: + vipObjectType: object + vipType: ignore + vipVariableName: vpn_if_tunnel_ipsec_preference + weight: + vipObjectType: object + vipType: ignore + vipValue: 1 + vipVariableName: vpn_if_tunnel_ipsec_weight + encap: + vipType: constant + vipValue: ipsec + vipObjectType: object + priority-order: + - encap + - preference + - weight vipObjectType: tree vipPrimaryKey: - - direction - address: - vipObjectType: object + - encap + group: + vipObjectType: list vipType: ignore - vipValue: '' - vipVariableName: vpn_if_ipv6_ipv6_address - dhcp-helper-v6: + vipVariableName: vpn_if_tunnel_group + border: + vipObjectType: object vipType: ignore - vipValue: [] - vipObjectType: tree - vipPrimaryKey: - - address - secondary-address: + vipValue: 'false' + vipVariableName: vpn_if_tunnel_border + color: + value: + vipObjectType: object + vipType: ignore + vipValue: default + vipVariableName: vpn_if_tunnel_color_value + restrict: + vipObjectType: node-only + vipType: ignore + vipValue: 'false' + carrier: + vipObjectType: object vipType: ignore - vipValue: [] - vipObjectType: tree - vipPrimaryKey: - - address - arp: - ip: + vipValue: default + vipVariableName: vpn_if_tunnel_carrier + bind: + vipObjectType: object vipType: ignore - vipValue: [] - vipObjectType: tree - vipPrimaryKey: - - addr - vrrp: - vipType: ignore - vipValue: [] - vipObjectType: tree - vipPrimaryKey: - - grp-id - ipv6-vrrp: - vipType: ignore - vipValue: [] - vipObjectType: tree - vipPrimaryKey: - - grp-id - dot1x: - vipType: ignore - vipObjectType: node-only -- templateId: 08b88956-9ef7-4058-a147-242c9506bb1b - templateName: banner - templateDescription: banner - templateType: banner + vipVariableName: vpn_if_tunnel_bind + allow-service: + dhcp: + vipObjectType: object + vipType: ignore + vipValue: 'true' + vipVariableName: vpn_if_tunnel_dhcp + dns: + vipObjectType: object + vipType: ignore + vipValue: 'true' + vipVariableName: vpn_if_tunnel_dns + icmp: + vipObjectType: object + vipType: ignore + vipValue: 'true' + vipVariableName: vpn_if_tunnel_icmp + sshd: + vipObjectType: object + vipType: constant + vipValue: 'true' + vipVariableName: vpn_if_tunnel_sshd + ntp: + vipObjectType: object + vipType: ignore + vipValue: 'false' + vipVariableName: vpn_if_tunnel_ntp + stun: + vipObjectType: object + vipType: ignore + vipValue: 'false' + vipVariableName: vpn_if_tunnel_stun + all: + vipObjectType: object + vipType: ignore + vipValue: 'false' + vipVariableName: vpn_if_tunnel_all + bgp: + vipObjectType: object + vipType: ignore + vipValue: 'false' + vipVariableName: vpn_if_tunnel_bgp + ospf: + vipObjectType: object + vipType: ignore + vipValue: 'false' + vipVariableName: vpn_if_tunnel_ospf + netconf: + vipObjectType: object + vipType: constant + vipValue: 'true' + vipVariableName: vpn_if_tunnel_netconf + snmp: + vipObjectType: object + vipType: ignore + vipValue: 'false' + vipVariableName: vpn_if_tunnel_snmp + https: + vipObjectType: object + vipType: ignore + vipValue: 'true' + vipVariableName: vpn_if_tunnel_https + max-control-connections: + vipObjectType: object + vipType: ignore + vipVariableName: vpn_if_tunnel_max_control_connections + vbond-as-stun-server: + vipObjectType: object + vipType: ignore + vipValue: 'false' + vipVariableName: vpn_if_tunnel_vbond_as_stun_server + exclude-controller-group-list: + vipObjectType: list + vipType: ignore + vipVariableName: vpn_if_tunnel_exclude_controller_group_list + vmanage-connection-preference: + vipObjectType: object + vipType: ignore + vipValue: 5 + vipVariableName: vpn_if_tunnel_vmanage_connection_preference + port-hop: + vipObjectType: object + vipType: ignore + vipValue: 'true' + vipVariableName: vpn_if_tunnel_port_hop + low-bandwidth-link: + vipObjectType: object + vipType: ignore + vipValue: 'false' + vipVariableName: vpn_if_tunnel_low_bandwidth_link + last-resort-circuit: + vipObjectType: object + vipType: ignore + vipValue: 'false' + vipVariableName: vpn_if_tunnel_last_resort_circuit + nat-refresh-interval: + vipObjectType: object + vipType: ignore + vipValue: 5 + vipVariableName: vpn_if_tunnel_nat_refresh_interval + hello-interval: + vipObjectType: object + vipType: ignore + vipValue: 1000 + vipVariableName: vpn_if_tunnel_hello_interval + hello-tolerance: + vipObjectType: object + vipType: ignore + vipValue: 12 + vipVariableName: vpn_if_tunnel_hello_tolerance + tloc-extension-gre-to: + dst-ip: + vipObjectType: object + vipType: ignore + vipVariableName: vpn_if_tunnel_tloc_ext_gre_to_dst_ip + control-connections: + vipObjectType: object + vipType: ignore + vipValue: 'true' + vipVariableName: control_connections + ip-directed-broadcast: + vipObjectType: object + vipType: ignore + vipValue: 'false' + vipVariableName: vpn_if_ip-directed-broadcast + ipv6: + access-list: + vipType: ignore + vipValue: [] + vipObjectType: tree + vipPrimaryKey: + - direction + address: + vipObjectType: object + vipType: ignore + vipValue: '' + vipVariableName: vpn_if_ipv6_ipv6_address + dhcp-helper-v6: + vipType: ignore + vipValue: [] + vipObjectType: tree + vipPrimaryKey: + - address + secondary-address: + vipType: ignore + vipValue: [] + vipObjectType: tree + vipPrimaryKey: + - address + arp: + ip: + vipType: ignore + vipValue: [] + vipObjectType: tree + vipPrimaryKey: + - addr + vrrp: + vipType: ignore + vipValue: [] + vipObjectType: tree + vipPrimaryKey: + - grp-id + ipv6-vrrp: + vipType: ignore + vipValue: [] + vipObjectType: tree + vipPrimaryKey: + - grp-id +- templateId: a11428b6-f930-4954-a6b4-60c4eb5cc66a + templateName: cedge_vpn1 + templateDescription: cEdge VPN1 + templateType: cisco_vpn deviceType: - - vedge-cloud + - vedge-CSR-1000v lastUpdatedBy: admin - lastUpdatedOn: 1603228275271 + lastUpdatedOn: 1644522354105 factoryDefault: false - devicesAttached: 0 - attachedMastersCount: 1 + devicesAttached: 2 + attachedMastersCount: 3 templateMinVersion: 15.0.0 configType: xml createdBy: admin - createdOn: 1603228275271 + createdOn: 1644522354105 + resourceGroup: global templateDefinition: - login: + vpn-id: vipObjectType: object - vipType: variableName - vipValue: '' - vipVariableName: banner_login - motd: + vipType: constant + vipValue: 1 + name: vipObjectType: object - vipType: variableName - vipValue: '' - vipVariableName: banner_motd -- templateId: 3d391810-33ff-45f4-9565-857ce97ebba3 - templateName: cedge_vpn512_interface - templateDescription: cEdge VPN512 Interface + vipType: ignore + vipVariableName: vpn_name + ecmp-hash-key: + layer4: + vipObjectType: object + vipType: ignore + vipValue: 'false' + vipVariableName: vpn_layer4 + nat64-global: + prefix: + stateful: {} + nat64: + v4: + pool: + vipType: ignore + vipValue: [] + vipObjectType: tree + vipPrimaryKey: + - name + host: + vipType: ignore + vipValue: [] + vipObjectType: tree + vipPrimaryKey: + - hostname + service: + vipType: ignore + vipValue: [] + vipObjectType: tree + vipPrimaryKey: + - svc-type + ip: + gre-route: {} + ipsec-route: {} + service-route: {} + ipv6: {} + omp: + advertise: + vipType: ignore + vipValue: [] + vipObjectType: tree + vipPrimaryKey: + - protocol + ipv6-advertise: + vipType: ignore + vipValue: [] + vipObjectType: tree + vipPrimaryKey: + - protocol +- templateId: 40b714e9-0738-4bc9-b8b7-7c60b6962953 + templateName: cedge_vpn1_interface + templateDescription: cEdge VPN1 Interface templateType: cisco_vpn_interface deviceType: - vedge-CSR-1000v lastUpdatedBy: admin - lastUpdatedOn: 1603228276012 + lastUpdatedOn: 1644522354444 factoryDefault: false - devicesAttached: 4 - attachedMastersCount: 3 + devicesAttached: 2 + attachedMastersCount: 2 templateMinVersion: 15.0.0 configType: xml createdBy: admin - createdOn: 1603228276012 + createdOn: 1644522354444 + resourceGroup: global templateDefinition: if-name: vipObjectType: object vipType: variableName vipValue: '' - vipVariableName: vpn512_interface + vipVariableName: vpn1_interface description: vipObjectType: object vipType: ignore vipVariableName: vpn_if_description ip: - dhcp-client: - vipObjectType: object - vipType: constant - vipValue: 'true' - dhcp-distance: + address: vipObjectType: object - vipType: ignore - vipValue: 1 - vipVariableName: vpn_if_ipv4_dhcp_distance + vipType: variableName + vipValue: '' + vipVariableName: vpn1_ipv4_address secondary-address: vipType: ignore vipValue: [] @@ -1015,7 +1761,7 @@ vmanage_feature_templates: shutdown: vipObjectType: object vipType: constant - vipValue: 'true' + vipValue: 'false' vipVariableName: vpn_if_shutdown arp-timeout: vipObjectType: object @@ -1134,21 +1880,22 @@ vmanage_feature_templates: vipObjectType: tree vipPrimaryKey: - grp-id -- templateId: ce4db743-3d7c-4167-a861-2f792f4acae6 +- templateId: aa992dc7-79a5-4be8-bbaf-b260ab0dd688 templateName: cedge_vpn1_interface_vrrp templateDescription: cEdge VPN1 Interface w/VRRP templateType: cisco_vpn_interface deviceType: - vedge-CSR-1000v lastUpdatedBy: admin - lastUpdatedOn: 1603229504188 + lastUpdatedOn: 1644522347296 factoryDefault: false - devicesAttached: 2 + devicesAttached: 0 attachedMastersCount: 1 templateMinVersion: 15.0.0 configType: xml createdBy: admin - createdOn: 1603228936199 + createdOn: 1644522347296 + resourceGroup: global templateDefinition: if-name: vipObjectType: object @@ -1361,130 +2108,22 @@ vmanage_feature_templates: vipObjectType: tree vipPrimaryKey: - grp-id -- templateId: 1c01a33d-6e07-4d67-9798-e699b2d01008 - templateName: vpn0 - templateDescription: vEdge vpn0 - templateType: vpn-vedge - deviceType: - - vedge-cloud - lastUpdatedBy: admin - lastUpdatedOn: 1603228274983 - factoryDefault: false - devicesAttached: 0 - attachedMastersCount: 1 - templateMinVersion: 15.0.0 - configType: xml - createdBy: admin - createdOn: 1603228274983 - templateDefinition: - vpn-id: - vipObjectType: object - vipType: constant - vipValue: 0 - name: - vipObjectType: object - vipType: ignore - vipVariableName: vpn_name - ecmp-hash-key: - layer4: - vipObjectType: object - vipType: ignore - vipValue: 'false' - vipVariableName: vpn_layer4 - tcp-optimization: - vipObjectType: node-only - vipType: ignore - vipValue: 'false' - vipVariableName: vpn_tcp_optimization - nat64-global: - prefix: - stateful: {} - nat64: - v4: - pool: - vipType: ignore - vipValue: [] - vipObjectType: tree - vipPrimaryKey: - - name - host: - vipType: ignore - vipValue: [] - vipObjectType: tree - vipPrimaryKey: - - hostname - service: - vipType: ignore - vipValue: [] - vipObjectType: tree - vipPrimaryKey: - - svc-type - ip: - route: - vipType: constant - vipValue: - - prefix: - vipObjectType: object - vipType: constant - vipValue: 0.0.0.0/0 - vipVariableName: vpn_ipv4_ip_prefix - next-hop: - vipType: constant - vipValue: - - address: - vipObjectType: object - vipType: variableName - vipValue: '' - vipVariableName: vpn0_default_gateway - distance: - vipObjectType: object - vipType: ignore - vipValue: 1 - vipVariableName: vpn_next_hop_ip_distance_0 - priority-order: - - address - - distance - vipObjectType: tree - vipPrimaryKey: - - address - priority-order: - - prefix - - next-hop - vipObjectType: tree - vipPrimaryKey: - - prefix - gre-route: {} - ipsec-route: {} - service-route: {} - ipv6: {} - omp: - advertise: - vipType: ignore - vipValue: [] - vipObjectType: tree - vipPrimaryKey: - - protocol - ipv6-advertise: - vipType: ignore - vipValue: [] - vipObjectType: tree - vipPrimaryKey: - - protocol -- templateId: 7e19cb34-83cb-44a8-9a03-869959cd7619 +- templateId: 1f9e15ed-8d41-49db-a7ea-0e57d19a07d0 templateName: cedge_vpn512 templateDescription: cEdge VPN512 templateType: cisco_vpn deviceType: - vedge-CSR-1000v lastUpdatedBy: admin - lastUpdatedOn: 1603228274402 + lastUpdatedOn: 1644522348151 factoryDefault: false - devicesAttached: 4 + devicesAttached: 2 attachedMastersCount: 3 templateMinVersion: 15.0.0 configType: xml createdBy: admin - createdOn: 1603228274402 + createdOn: 1644522348151 + resourceGroup: global templateDefinition: vpn-id: vipObjectType: object @@ -1541,63 +2180,60 @@ vmanage_feature_templates: vipObjectType: tree vipPrimaryKey: - protocol -- templateId: e33de980-24f2-4c0b-9847-98766a6e8779 - templateName: vsmart_vpn512_interface - templateDescription: vSmart VPN512 Interface - templateType: vpn-vsmart-interface +- templateId: 324a0436-b893-45d9-8ab7-a4537d3694b9 + templateName: cedge_vpn512_interface + templateDescription: cEdge VPN512 Interface + templateType: cisco_vpn_interface deviceType: - - vsmart + - vedge-CSR-1000v lastUpdatedBy: admin - lastUpdatedOn: 1603228274681 + lastUpdatedOn: 1644522346942 factoryDefault: false - devicesAttached: 1 - attachedMastersCount: 1 + devicesAttached: 2 + attachedMastersCount: 3 templateMinVersion: 15.0.0 configType: xml createdBy: admin - createdOn: 1603228274681 + createdOn: 1644522346942 + resourceGroup: global templateDefinition: if-name: vipObjectType: object - vipType: constant - vipValue: eth0 - vipVariableName: vpn_if_name + vipType: variableName + vipValue: '' + vipVariableName: vpn512_interface description: vipObjectType: object vipType: ignore vipVariableName: vpn_if_description ip: - address: + dhcp-client: vipObjectType: object - vipType: ignore - vipVariableName: vpn_if_ip_address - ipv6: - address: + vipType: constant + vipValue: 'true' + dhcp-distance: vipObjectType: object vipType: ignore - vipVariableName: vpn_if_ipv6_address - dhcp-rapid-commit: {} - dhcp-helper: {} - flow-control: - vipObjectType: object - vipType: ignore - vipValue: autoneg - vipVariableName: vpn_if_flow_control - clear-dont-fragment: - vipObjectType: object - vipType: ignore - vipValue: 'false' - vipVariableName: vpn_if_clear_dont_fragment - pmtu: - vipObjectType: object + vipValue: 1 + vipVariableName: vpn_if_ipv4_dhcp_distance + secondary-address: + vipType: ignore + vipValue: [] + vipObjectType: tree + vipPrimaryKey: + - address + dhcp-helper: + vipObjectType: list vipType: ignore - vipValue: 'false' - vipVariableName: vpn_if_pmtu + vipVariableName: vpn_if_dhcp_helper + flow-control: {} + clear-dont-fragment: {} + pmtu: {} mtu: vipObjectType: object vipType: ignore vipValue: 1500 - vipVariableName: vpn_if_mtu + vipVariableName: vpn_if_ip_mtu static-ingress-qos: {} tcp-mss-adjust: vipObjectType: object @@ -1620,1080 +2256,624 @@ vmanage_feature_templates: shutdown: vipObjectType: object vipType: constant - vipValue: 'false' + vipValue: 'true' vipVariableName: vpn_if_shutdown - arp-timeout: {} - autonegotiate: + arp-timeout: vipObjectType: object vipType: ignore - vipValue: 'true' - vipVariableName: vpn_if_autonegotiate - arp: - ip: - vipType: ignore - vipValue: [] - vipObjectType: tree - vipPrimaryKey: - - addr -- templateId: 33d9d92b-49ef-4e3e-b3fe-9ca8f4ca1872 - templateName: vsmart_vpn0_internet_interface - templateDescription: vsmart_vpn0_internet_interface - templateType: vpn-vsmart-interface - deviceType: - - vsmart - lastUpdatedBy: admin - lastUpdatedOn: 1603228276157 - factoryDefault: false - devicesAttached: 0 - attachedMastersCount: 0 - templateMinVersion: 15.0.0 - configType: xml - createdBy: admin - createdOn: 1603228276157 - templateDefinition: - if-name: - vipObjectType: object - vipType: constant - vipValue: eth1 - vipVariableName: vpn_if_name - arp: - ip: - vipObjectType: tree - vipPrimaryKey: - - addr - vipType: ignore - vipValue: [] - arp-timeout: {} + vipValue: 1200 + vipVariableName: vpn_if_arp_timeout autonegotiate: vipObjectType: object vipType: ignore vipValue: 'true' vipVariableName: vpn_if_autonegotiate - clear-dont-fragment: + shaping-rate: vipObjectType: object vipType: ignore - vipValue: 'false' - vipVariableName: vpn_if_clear_dont_fragment - description: + vipVariableName: qos_shaping_rate + qos-map: vipObjectType: object vipType: ignore - vipVariableName: vpn_if_description - dhcp-helper: {} - duplex: - vipObjectType: object + vipVariableName: qos_map + tracker: + vipObjectType: list vipType: ignore - vipValue: _empty - vipVariableName: vpn_if_duplex - flow-control: + vipVariableName: vpn_if_tracker + bandwidth-upstream: vipObjectType: object vipType: ignore - vipValue: autoneg - vipVariableName: vpn_if_flow_control - ip: - address: - vipObjectType: object - vipType: variableName - vipValue: '' - vipVariableName: vpn0_internet_ipv4_address - ipv6: - address: - vipObjectType: object - vipType: ignore - vipVariableName: vpn_if_ipv6_address - dhcp-rapid-commit: {} - mac-address: + vipVariableName: vpn_if_bandwidth_upstream + bandwidth-downstream: vipObjectType: object vipType: ignore - vipVariableName: vpn_if_mac_address - mtu: - vipObjectType: object - vipType: ignore - vipValue: 1500 - vipVariableName: vpn_if_mtu - pmtu: + vipVariableName: vpn_if_bandwidth_downstream + block-non-source-ip: vipObjectType: object vipType: ignore vipValue: 'false' - vipVariableName: vpn_if_pmtu - shutdown: + vipVariableName: vpn_if_block_non_source_ip + rewrite-rule: + rule-name: + vipObjectType: object + vipType: ignore + vipVariableName: rewrite_rule_name + tloc-extension: vipObjectType: object - vipType: constant - vipValue: 'false' - vipVariableName: vpn_if_shutdown - speed: + vipType: ignore + vipVariableName: vpn_if_tloc_extension + load-interval: vipObjectType: object vipType: ignore - vipValue: _empty - vipVariableName: vpn_if_speed - static-ingress-qos: {} - tcp-mss-adjust: + vipValue: 300 + vipVariableName: vpn_if_load_interval + icmp-redirect-disable: vipObjectType: object vipType: ignore - vipVariableName: vpn_if_tcp_mss_adjust - tunnel-interface: - allow-service: - all: - vipObjectType: object - vipType: ignore - vipValue: 'false' - vipVariableName: all - bgp: {} - dhcp: - vipObjectType: object - vipType: ignore - vipValue: 'true' - vipVariableName: vpn_if_tunnel_dhcp - dns: - vipObjectType: object - vipType: ignore - vipValue: 'true' - vipVariableName: vpn_if_tunnel_dns - icmp: - vipObjectType: object - vipType: ignore - vipValue: 'true' - vipVariableName: vpn_if_tunnel_icmp - netconf: - vipObjectType: object - vipType: constant - vipValue: 'true' - vipVariableName: vpn_if_tunnel_netconf - ntp: - vipObjectType: object - vipType: ignore - vipValue: 'false' - vipVariableName: vpn_if_tunnel_ntp - sshd: - vipObjectType: object - vipType: ignore - vipValue: 'false' - vipVariableName: vpn_if_tunnel_sshd - stun: - vipObjectType: object - vipType: ignore - vipValue: 'false' - vipVariableName: vpn_if_tunnel_stun - carrier: - vipObjectType: object - vipType: ignore - vipValue: default - vipVariableName: vpn_if_tunnel_carrier - color: - restrict: {} - value: - vipObjectType: object - vipType: ignore - vipValue: default - vipVariableName: vpn_if_tunnel_color_value - group: - vipObjectType: list - vipType: ignore - hello-interval: - vipObjectType: object - vipType: ignore - vipValue: 1000 - vipVariableName: vpn_if_tunnel_hello-interval - hello-tolerance: + vipValue: 'true' + vipVariableName: vpn_if_icmp_redirect_disable + tloc-extension-gre-from: + src-ip: vipObjectType: object vipType: ignore - vipValue: 12 - vipVariableName: vpn_if_tunnel_hello-tolerance - nat-refresh-interval: + vipVariableName: vpn_if_tloc-ext_gre_from_src_ip + xconnect: vipObjectType: object vipType: ignore - vipValue: 5 - vipVariableName: vpn_if_tunnel_nat_refresh_interval -- templateId: 92d91c47-82b6-493f-95a4-ef51580cb6b6 - templateName: vsmart_vpn512_mgmt_interface - templateDescription: vsmart_vpn512_mgmt_interface - templateType: vpn-vsmart-interface - deviceType: - - vsmart - lastUpdatedBy: admin - lastUpdatedOn: 1603228276735 - factoryDefault: false - devicesAttached: 0 - attachedMastersCount: 0 - templateMinVersion: 15.0.0 - configType: xml - createdBy: admin - createdOn: 1603228276735 - templateDefinition: - if-name: - vipObjectType: object - vipType: constant - vipValue: eth0 - vipVariableName: vpn_if_name - arp: - ip: - vipObjectType: tree - vipPrimaryKey: - - addr - vipType: ignore - vipValue: [] - arp-timeout: {} - autonegotiate: - vipObjectType: object + vipVariableName: vpn_if_tloc-ext_gre_from_xconnect + access-list: vipType: ignore - vipValue: 'true' - vipVariableName: vpn_if_autonegotiate - clear-dont-fragment: + vipValue: [] + vipObjectType: tree + vipPrimaryKey: + - direction + ip-directed-broadcast: vipObjectType: object vipType: ignore vipValue: 'false' - vipVariableName: vpn_if_clear_dont_fragment - description: - vipObjectType: object - vipType: ignore - vipVariableName: vpn_if_description - dhcp-helper: {} - duplex: - vipObjectType: object - vipType: ignore - vipValue: _empty - vipVariableName: vpn_if_duplex - flow-control: - vipObjectType: object - vipType: ignore - vipValue: autoneg - vipVariableName: vpn_if_flow_control - ip: - dhcp-client: - vipObjectType: object - vipType: constant - vipValue: 'true' - dhcp-distance: - vipObjectType: object - vipType: ignore - vipValue: 1 - vipVariableName: vpn_if_ip_dhcp-distance + vipVariableName: vpn_if_ip-directed-broadcast ipv6: + access-list: + vipType: ignore + vipValue: [] + vipObjectType: tree + vipPrimaryKey: + - direction address: vipObjectType: object vipType: ignore - vipVariableName: vpn_if_ipv6_address - dhcp-rapid-commit: {} - mac-address: - vipObjectType: object - vipType: ignore - vipVariableName: vpn_if_mac_address - mtu: - vipObjectType: object - vipType: ignore - vipValue: 1500 - vipVariableName: vpn_if_mtu - pmtu: - vipObjectType: object - vipType: ignore - vipValue: 'false' - vipVariableName: vpn_if_pmtu - shutdown: - vipObjectType: object - vipType: constant - vipValue: 'false' - vipVariableName: vpn_if_shutdown - speed: - vipObjectType: object + vipValue: '' + vipVariableName: vpn_if_ipv6_ipv6_address + dhcp-helper-v6: + vipType: ignore + vipValue: [] + vipObjectType: tree + vipPrimaryKey: + - address + secondary-address: + vipType: ignore + vipValue: [] + vipObjectType: tree + vipPrimaryKey: + - address + arp: + ip: + vipType: ignore + vipValue: [] + vipObjectType: tree + vipPrimaryKey: + - addr + vrrp: vipType: ignore - vipValue: _empty - vipVariableName: vpn_if_speed - static-ingress-qos: {} - tcp-mss-adjust: - vipObjectType: object + vipValue: [] + vipObjectType: tree + vipPrimaryKey: + - grp-id + ipv6-vrrp: vipType: ignore - vipVariableName: vpn_if_tcp_mss_adjust -- templateId: e5952c76-8d80-4ba4-bbac-b2a96a48ee43 - templateName: test-csr1000v - templateDescription: test-csr1000v - templateType: cisco_vpn_interface + vipValue: [] + vipObjectType: tree + vipPrimaryKey: + - grp-id +- templateId: 0c8d5e39-1759-4f3e-a82b-729b4d944d19 + templateName: cedge_vpn_ospf1 + templateDescription: cEdge OSPF for VPN1 + templateType: cisco_ospf deviceType: - vedge-CSR-1000v lastUpdatedBy: admin - lastUpdatedOn: 1603229301177 + lastUpdatedOn: 1644522352673 factoryDefault: false - devicesAttached: 0 - attachedMastersCount: 0 + devicesAttached: 1 + attachedMastersCount: 1 templateMinVersion: 15.0.0 configType: xml createdBy: admin - createdOn: 1603229301177 + createdOn: 1644522352673 + resourceGroup: global templateDefinition: - if-name: - vipObjectType: object - vipType: constant - vipValue: ge0/0 - vipVariableName: vpn_if_name - description: - vipObjectType: object - vipType: ignore - vipVariableName: vpn_if_description - ip: - address: + ospf: + router-id: vipObjectType: object vipType: ignore - vipVariableName: vpn_if_ipv4_address - secondary-address: - vipType: ignore - vipValue: [] - vipObjectType: tree - vipPrimaryKey: - - address - dhcp-helper: - vipObjectType: list - vipType: ignore - vipVariableName: vpn_if_dhcp_helper - flow-control: {} - clear-dont-fragment: {} - pmtu: {} - mtu: + vipVariableName: ospf_router_id + auto-cost: + reference-bandwidth: + vipObjectType: object + vipType: ignore + vipValue: 100 + vipVariableName: ospf_reference_bandwidth + compatible: + rfc1583: + vipObjectType: object + vipType: ignore + vipValue: 'true' + vipVariableName: ospf_rfc1583 + distance: + external: + vipObjectType: object + vipType: ignore + vipValue: 110 + vipVariableName: ospf_distance_external + inter-area: + vipObjectType: object + vipType: ignore + vipValue: 110 + vipVariableName: ospf_distance_inter_area + intra-area: + vipObjectType: object + vipType: ignore + vipValue: 110 + vipVariableName: ospf_distance_intra_area + timers: + spf: + delay: + vipObjectType: object + vipType: ignore + vipValue: 200 + vipVariableName: ospf_delay + initial-hold: + vipObjectType: object + vipType: ignore + vipValue: 1000 + vipVariableName: ospf_initial_hold + max-hold: + vipObjectType: object + vipType: ignore + vipValue: 10000 + vipVariableName: ospf_max_hold + redistribute: + vipType: constant + vipValue: + - protocol: + vipObjectType: object + vipType: constant + vipValue: omp + vipVariableName: ospf_redistribute_protocol + route-policy: + vipObjectType: object + vipType: ignore + vipVariableName: ospf_redistribute_route_policy + priority-order: + - protocol + - route-policy + vipObjectType: tree + vipPrimaryKey: + - protocol + max-metric: + router-lsa: + vipType: ignore + vipValue: [] + vipObjectType: tree + vipPrimaryKey: + - ad-type + area: + vipType: constant + vipValue: + - a-num: + originalDefaultOption: constant + dataPath: [] + vipObjectType: object + vipValue: 0 + vipType: constant + vipVariableName: ospf_area_a_num + stub: + no-summary: + vipType: ignore + vipObjectType: node-only + nssa: + no-summary: + vipType: ignore + vipObjectType: node-only + interface: + vipType: constant + vipValue: + - name: + originalDefaultOption: constant + dataPath: [] + vipObjectType: object + vipType: variableName + vipVariableName: vpn1_ospf_interface + vipValue: '' + hello-interval: + originalDefaultOption: ignore + dataPath: [] + vipObjectType: object + vipValue: 10 + vipType: ignore + vipVariableName: ospf_hello_interval + dead-interval: + originalDefaultOption: ignore + dataPath: [] + vipObjectType: object + vipValue: 40 + vipType: ignore + vipVariableName: ospf_dead_interval + retransmit-interval: + originalDefaultOption: ignore + dataPath: [] + vipObjectType: object + vipValue: 5 + vipType: ignore + vipVariableName: ospf_retransmit_interval + cost: + originalDefaultOption: ignore + dataPath: [] + vipObjectType: object + vipType: ignore + vipVariableName: ospf_cost + priority: + originalDefaultOption: ignore + dataPath: [] + vipObjectType: object + vipValue: 1 + vipType: ignore + vipVariableName: ospf_priority + network: + originalDefaultOption: ignore + dataPath: [] + vipObjectType: object + vipValue: broadcast + vipType: ignore + vipVariableName: ospf_network + passive-interface: + originalDefaultOption: ignore + dataPath: [] + vipObjectType: node-only + vipValue: 'false' + vipType: ignore + vipVariableName: ospf_passive_interface + authentication: + type: + vipObjectType: object + vipType: ignore + vipValue: _empty + vipVariableName: ospf_authentication_type + message-digest: + message-digest-key: + vipObjectType: object + vipType: ignore + vipValue: '' + vipVariableName: ospf_message_digest_key + md5: + vipObjectType: object + vipType: ignore + vipValue: '' + vipVariableName: ospf_md5 + priority-order: + - name + - hello-interval + - dead-interval + - retransmit-interval + - cost + - priority + - network + - passive-interface + - authentication + vipObjectType: tree + vipPrimaryKey: + - name + priority-order: + - a-num + - interface + vipObjectType: tree + vipPrimaryKey: + - a-num +- templateId: ca9508b2-291f-4413-b589-461febbddc08 + templateName: system + templateDescription: system + templateType: system-vedge + deviceType: + - vedge-cloud + lastUpdatedBy: admin + lastUpdatedOn: 1644522342996 + factoryDefault: false + devicesAttached: 1 + attachedMastersCount: 1 + templateMinVersion: 15.0.0 + configType: xml + createdBy: admin + createdOn: 1644522342996 + resourceGroup: global + templateDefinition: + clock: + timezone: + vipObjectType: object + vipType: ignore + vipValue: UTC + vipVariableName: system_timezone + gps-location: + latitude: + vipObjectType: object + vipType: variableName + vipValue: '' + vipVariableName: system_latitude + longitude: + vipObjectType: object + vipType: variableName + vipValue: '' + vipVariableName: system_longitude + timer: + dns-cache-timeout: + vipObjectType: object + vipType: ignore + vipValue: 2 + vipVariableName: system_dns_cache_timeout + location: vipObjectType: object vipType: ignore - vipValue: 1500 - vipVariableName: vpn_if_ip_mtu - static-ingress-qos: {} - tcp-mss-adjust: + vipVariableName: system_location + system-tunnel-mtu: vipObjectType: object vipType: ignore - vipVariableName: vpn_if_tcp_mss_adjust - mac-address: + vipValue: 1024 + vipVariableName: system_system_tunnel_mtu + track-transport: vipObjectType: object vipType: ignore - vipVariableName: vpn_if_mac_address - speed: + vipValue: 'true' + vipVariableName: system_track_transport + track-interface-tag: vipObjectType: object vipType: ignore - vipValue: _empty - vipVariableName: vpn_if_speed - duplex: + vipVariableName: system_track_interface_tag + port-offset: vipObjectType: object vipType: ignore - vipValue: _empty - vipVariableName: vpn_if_duplex - shutdown: + vipValue: 0 + vipVariableName: system_port_offset + port-hop: vipObjectType: object vipType: ignore vipValue: 'true' - vipVariableName: vpn_if_shutdown - arp-timeout: + vipVariableName: system_port_hop + control-session-pps: vipObjectType: object vipType: ignore - vipValue: 1200 - vipVariableName: vpn_if_arp_timeout - autonegotiate: + vipValue: 300 + vipVariableName: system_control_session_pps + description: vipObjectType: object vipType: ignore - vipValue: 'true' - vipVariableName: vpn_if_autonegotiate - shaping-rate: - vipObjectType: object + vipVariableName: system_description + device-groups: + vipObjectType: list vipType: ignore - vipVariableName: qos_shaping_rate - qos-map: + vipVariableName: system_device_groups + controller-group-list: + vipObjectType: list + vipType: ignore + vipVariableName: system_controller_group_list + eco-friendly-mode: vipObjectType: object vipType: ignore - vipVariableName: qos_map - tracker: - vipObjectType: list + vipValue: 'false' + vipVariableName: system_eco_friendly_mode + site-id: + vipObjectType: object + vipType: variableName + vipValue: '' + vipVariableName: system_site_id + overlay-id: + vipObjectType: object vipType: ignore - vipVariableName: vpn_if_tracker - bandwidth-upstream: + vipValue: 1 + vipVariableName: system_overlay_id + system-ip: + vipObjectType: object + vipType: variableName + vipValue: '' + vipVariableName: system_system_ip + host-name: + vipObjectType: object + vipType: variableName + vipValue: '' + vipVariableName: system_host_name + console-baud-rate: vipObjectType: object vipType: ignore - vipVariableName: vpn_if_bandwidth_upstream - bandwidth-downstream: + vipValue: _empty + vipVariableName: system_console_baud_rate + max-omp-sessions: vipObjectType: object vipType: ignore - vipVariableName: vpn_if_bandwidth_downstream - block-non-source-ip: + vipVariableName: system_max_omp_sessions + usb-controller: vipObjectType: object vipType: ignore vipValue: 'false' - vipVariableName: vpn_if_block_non_source_ip - rewrite-rule: - rule-name: - vipObjectType: object - vipType: ignore - vipVariableName: rewrite_rule_name - tloc-extension: + vipVariableName: system_usb_controller + track-default-gateway: vipObjectType: object vipType: ignore - vipVariableName: vpn_if_tloc_extension - load-interval: + vipValue: 'true' + vipVariableName: system_track_default_gateway + multicast-buffer-percent: vipObjectType: object vipType: ignore - vipValue: 300 - vipVariableName: vpn_if_load_interval - icmp-redirect-disable: + vipValue: 20 + vipVariableName: system_multicast_buffer_percent + host-policer-pps: vipObjectType: object vipType: ignore - vipValue: 'true' - vipVariableName: vpn_if_icmp_redirect_disable - tloc-extension-gre-from: - src-ip: - vipObjectType: object - vipType: ignore - vipVariableName: vpn_if_tloc-ext_gre_from_src_ip - xconnect: - vipObjectType: object - vipType: ignore - vipVariableName: vpn_if_tloc-ext_gre_from_xconnect - access-list: + vipValue: 20000 + vipVariableName: system_host_policer_pps + icmp-error-pps: + vipObjectType: object vipType: ignore - vipValue: [] - vipObjectType: tree - vipPrimaryKey: - - direction - ip-directed-broadcast: + vipValue: 100 + vipVariableName: system_icmp_error_pps + allow-same-site-tunnels: vipObjectType: object vipType: ignore vipValue: 'false' - vipVariableName: vpn_if_ip-directed-broadcast - ipv6: - access-list: - vipType: ignore - vipValue: [] - vipObjectType: tree - vipPrimaryKey: - - direction - address: - vipObjectType: object - vipType: ignore - vipValue: '' - vipVariableName: vpn_if_ipv6_ipv6_address - dhcp-helper-v6: - vipType: ignore - vipValue: [] - vipObjectType: tree - vipPrimaryKey: - - address - secondary-address: - vipType: ignore - vipValue: [] - vipObjectType: tree - vipPrimaryKey: - - address - arp: - ip: - vipType: ignore - vipValue: [] - vipObjectType: tree - vipPrimaryKey: - - addr - vrrp: + vipVariableName: system_allow_same_site_tunnels + route-consistency-check: + vipObjectType: object vipType: ignore - vipValue: [] - vipObjectType: tree - vipPrimaryKey: - - grp-id - ipv6-vrrp: + vipValue: 'false' + vipVariableName: system_route_consistency_check + idle-timeout: + vipObjectType: object + vipType: ignore + vipVariableName: system_idle-timeout + admin-tech-on-failure: + vipObjectType: object + vipType: ignore + vipValue: 'true' + vipVariableName: system_admin_tech_on_failure + tracker: vipType: ignore vipValue: [] vipObjectType: tree vipPrimaryKey: - - grp-id -- templateId: 1c02087e-f0f4-4f25-aa36-19255b809a45 - templateName: vsmart_vpn0_interface - templateDescription: vSmart VPN0 Interface - templateType: vpn-vsmart-interface + - name +- templateId: 3a279243-0593-47ae-88f2-4a229d173fef + templateName: vpn0 + templateDescription: vEdge vpn0 + templateType: vpn-vedge deviceType: - - vsmart + - vedge-cloud lastUpdatedBy: admin - lastUpdatedOn: 1603228274099 + lastUpdatedOn: 1644522347659 factoryDefault: false devicesAttached: 1 attachedMastersCount: 1 templateMinVersion: 15.0.0 configType: xml createdBy: admin - createdOn: 1603228274099 + createdOn: 1644522347659 + resourceGroup: global templateDefinition: - if-name: + vpn-id: vipObjectType: object vipType: constant - vipValue: eth1 - vipVariableName: vpn_if_name - description: + vipValue: 0 + name: vipObjectType: object vipType: ignore - vipVariableName: vpn_if_description - ip: - address: - vipObjectType: object - vipType: variableName - vipValue: '' - vipVariableName: vpn0_internet_ipv4_address - ipv6: - address: + vipVariableName: vpn_name + ecmp-hash-key: + layer4: vipObjectType: object vipType: ignore - vipVariableName: vpn_if_ipv6_address - dhcp-rapid-commit: {} - dhcp-helper: {} - flow-control: - vipObjectType: object - vipType: ignore - vipValue: autoneg - vipVariableName: vpn_if_flow_control - clear-dont-fragment: - vipObjectType: object - vipType: ignore - vipValue: 'false' - vipVariableName: vpn_if_clear_dont_fragment - pmtu: - vipObjectType: object + vipValue: 'false' + vipVariableName: vpn_layer4 + tcp-optimization: + vipObjectType: node-only vipType: ignore vipValue: 'false' - vipVariableName: vpn_if_pmtu - mtu: - vipObjectType: object - vipType: ignore - vipValue: 1500 - vipVariableName: vpn_if_mtu - static-ingress-qos: {} - tcp-mss-adjust: - vipObjectType: object - vipType: ignore - vipVariableName: vpn_if_tcp_mss_adjust - mac-address: - vipObjectType: object - vipType: ignore - vipVariableName: vpn_if_mac_address - speed: - vipObjectType: object - vipType: ignore - vipValue: _empty - vipVariableName: vpn_if_speed - duplex: - vipObjectType: object + vipVariableName: vpn_tcp_optimization + nat64-global: + prefix: + stateful: {} + nat64: + v4: + pool: + vipType: ignore + vipValue: [] + vipObjectType: tree + vipPrimaryKey: + - name + host: vipType: ignore - vipValue: _empty - vipVariableName: vpn_if_duplex - shutdown: - vipObjectType: object - vipType: constant - vipValue: 'false' - vipVariableName: vpn_if_shutdown - arp-timeout: {} - autonegotiate: - vipObjectType: object - vipType: ignore - vipValue: 'true' - vipVariableName: vpn_if_autonegotiate - arp: - ip: - vipType: ignore - vipValue: [] - vipObjectType: tree - vipPrimaryKey: - - addr - tunnel-interface: - color: - value: - vipObjectType: object - vipType: ignore - vipValue: default - vipVariableName: vpn_if_tunnel_color_value - restrict: {} - carrier: - vipObjectType: object - vipType: ignore - vipValue: default - vipVariableName: vpn_if_tunnel_carrier - hello-interval: - vipObjectType: object - vipType: ignore - vipValue: 1000 - vipVariableName: vpn_if_tunnel_hello-interval - hello-tolerance: - vipObjectType: object - vipType: ignore - vipValue: 12 - vipVariableName: vpn_if_tunnel_hello-tolerance - nat-refresh-interval: - vipObjectType: object - vipType: ignore - vipValue: 5 - vipVariableName: vpn_if_tunnel_nat_refresh_interval - allow-service: - all: - vipObjectType: object - vipType: ignore - vipValue: 'false' - vipVariableName: all - dhcp: - vipObjectType: object - vipType: ignore - vipValue: 'true' - vipVariableName: vpn_if_tunnel_dhcp - dns: - vipObjectType: object - vipType: ignore - vipValue: 'true' - vipVariableName: vpn_if_tunnel_dns - icmp: - vipObjectType: object - vipType: ignore - vipValue: 'true' - vipVariableName: vpn_if_tunnel_icmp - sshd: - vipObjectType: object - vipType: ignore - vipValue: 'false' - vipVariableName: vpn_if_tunnel_sshd - netconf: - vipObjectType: object - vipType: constant - vipValue: 'true' - vipVariableName: vpn_if_tunnel_netconf - ntp: - vipObjectType: object - vipType: ignore - vipValue: 'false' - vipVariableName: vpn_if_tunnel_ntp - stun: - vipObjectType: object - vipType: ignore - vipValue: 'false' - vipVariableName: vpn_if_tunnel_stun - bgp: {} - group: - vipObjectType: list - vipType: ignore -- templateId: d2cca4e6-7698-45b3-b07e-a0c3f0a9ad59 - templateName: cedge_banner - templateDescription: cEdge Banner - templateType: cisco_banner - deviceType: - - vedge-CSR-1000v - lastUpdatedBy: admin - lastUpdatedOn: 1603228274838 - factoryDefault: false - devicesAttached: 4 - attachedMastersCount: 3 - templateMinVersion: 15.0.0 - configType: xml - createdBy: admin - createdOn: 1603228274838 - templateDefinition: - login: - vipObjectType: object - vipType: variableName - vipValue: '' - vipVariableName: banner_login - motd: - vipObjectType: object - vipType: variableName - vipValue: '' - vipVariableName: banner_motd -- templateId: 85cdd1ec-fb3d-4c7a-a95d-1340cc1cf6e6 - templateName: cedge_vpn0_interface - templateDescription: cEdge VPN0 Interface - templateType: cisco_vpn_interface - deviceType: - - vedge-CSR-1000v - lastUpdatedBy: admin - lastUpdatedOn: 1603228274259 - factoryDefault: false - devicesAttached: 4 - attachedMastersCount: 3 - templateMinVersion: 15.0.0 - configType: xml - createdBy: admin - createdOn: 1603228274259 - templateDefinition: - if-name: - vipObjectType: object - vipType: variableName - vipValue: '' - vipVariableName: vpn0_interface - description: - vipObjectType: object - vipType: ignore - vipVariableName: vpn_if_description - ip: - secondary-address: - vipType: ignore - vipValue: [] - vipObjectType: tree - vipPrimaryKey: - - address - address: - vipObjectType: object - vipType: variableName - vipValue: '' - vipVariableName: vpn0_internet_ipv4_address - dhcp-helper: - vipObjectType: list - vipType: ignore - vipVariableName: vpn_if_dhcp_helper - flow-control: {} - clear-dont-fragment: {} - pmtu: {} - mtu: - vipObjectType: object - vipType: ignore - vipValue: 1500 - vipVariableName: vpn_if_ip_mtu - static-ingress-qos: {} - tcp-mss-adjust: - vipObjectType: object - vipType: ignore - vipVariableName: vpn_if_tcp_mss_adjust - mac-address: - vipObjectType: object - vipType: ignore - vipVariableName: vpn_if_mac_address - speed: - vipObjectType: object - vipType: ignore - vipValue: _empty - vipVariableName: vpn_if_speed - duplex: - vipObjectType: object - vipType: ignore - vipValue: _empty - vipVariableName: vpn_if_duplex - shutdown: - vipObjectType: object - vipType: constant - vipValue: 'false' - vipVariableName: vpn_if_shutdown - arp-timeout: - vipObjectType: object - vipType: ignore - vipValue: 1200 - vipVariableName: vpn_if_arp_timeout - autonegotiate: - vipObjectType: object - vipType: ignore - vipValue: 'true' - vipVariableName: vpn_if_autonegotiate - shaping-rate: - vipObjectType: object - vipType: ignore - vipVariableName: qos_shaping_rate - qos-map: - vipObjectType: object - vipType: ignore - vipVariableName: qos_map - tracker: - vipObjectType: list - vipType: ignore - vipVariableName: vpn_if_tracker - bandwidth-upstream: - vipObjectType: object - vipType: ignore - vipVariableName: vpn_if_bandwidth_upstream - bandwidth-downstream: - vipObjectType: object - vipType: ignore - vipVariableName: vpn_if_bandwidth_downstream - block-non-source-ip: - vipObjectType: object - vipType: ignore - vipValue: 'false' - vipVariableName: vpn_if_block_non_source_ip - rewrite-rule: - rule-name: - vipObjectType: object - vipType: ignore - vipVariableName: rewrite_rule_name - tloc-extension: - vipObjectType: object - vipType: ignore - vipVariableName: vpn_if_tloc_extension - load-interval: - vipObjectType: object - vipType: ignore - vipValue: 300 - vipVariableName: vpn_if_load_interval - icmp-redirect-disable: - vipObjectType: object - vipType: ignore - vipValue: 'true' - vipVariableName: vpn_if_icmp_redirect_disable - tloc-extension-gre-from: - src-ip: - vipObjectType: object - vipType: ignore - vipVariableName: vpn_if_tloc-ext_gre_from_src_ip - xconnect: - vipObjectType: object - vipType: ignore - vipVariableName: vpn_if_tloc-ext_gre_from_xconnect - access-list: + vipValue: [] + vipObjectType: tree + vipPrimaryKey: + - hostname + service: vipType: ignore vipValue: [] vipObjectType: tree vipPrimaryKey: - - direction - tunnel-interface: - encapsulation: - vipType: constant - vipValue: - - preference: - vipObjectType: object - vipType: ignore - vipVariableName: vpn_if_tunnel_ipsec_preference - weight: - vipObjectType: object - vipType: ignore - vipValue: 1 - vipVariableName: vpn_if_tunnel_ipsec_weight - encap: - vipType: constant - vipValue: ipsec - vipObjectType: object - priority-order: - - encap - - preference - - weight - vipObjectType: tree - vipPrimaryKey: - - encap - group: - vipObjectType: list - vipType: ignore - vipVariableName: vpn_if_tunnel_group - border: - vipObjectType: object - vipType: ignore - vipValue: 'false' - vipVariableName: vpn_if_tunnel_border - color: - value: - vipObjectType: object - vipType: ignore - vipValue: default - vipVariableName: vpn_if_tunnel_color_value - restrict: - vipObjectType: node-only - vipType: ignore - vipValue: 'false' - carrier: - vipObjectType: object - vipType: ignore - vipValue: default - vipVariableName: vpn_if_tunnel_carrier - bind: - vipObjectType: object - vipType: ignore - vipVariableName: vpn_if_tunnel_bind - allow-service: - dhcp: - vipObjectType: object - vipType: ignore - vipValue: 'true' - vipVariableName: vpn_if_tunnel_dhcp - dns: - vipObjectType: object - vipType: ignore - vipValue: 'true' - vipVariableName: vpn_if_tunnel_dns - icmp: - vipObjectType: object - vipType: ignore - vipValue: 'true' - vipVariableName: vpn_if_tunnel_icmp - sshd: - vipObjectType: object - vipType: constant - vipValue: 'true' - vipVariableName: vpn_if_tunnel_sshd - ntp: - vipObjectType: object - vipType: ignore - vipValue: 'false' - vipVariableName: vpn_if_tunnel_ntp - stun: - vipObjectType: object - vipType: ignore - vipValue: 'false' - vipVariableName: vpn_if_tunnel_stun - all: - vipObjectType: object - vipType: ignore - vipValue: 'false' - vipVariableName: vpn_if_tunnel_all - bgp: - vipObjectType: object - vipType: ignore - vipValue: 'false' - vipVariableName: vpn_if_tunnel_bgp - ospf: - vipObjectType: object - vipType: ignore - vipValue: 'false' - vipVariableName: vpn_if_tunnel_ospf - netconf: - vipObjectType: object - vipType: constant - vipValue: 'true' - vipVariableName: vpn_if_tunnel_netconf - snmp: - vipObjectType: object - vipType: ignore - vipValue: 'false' - vipVariableName: vpn_if_tunnel_snmp - https: - vipObjectType: object - vipType: ignore - vipValue: 'true' - vipVariableName: vpn_if_tunnel_https - max-control-connections: - vipObjectType: object - vipType: ignore - vipVariableName: vpn_if_tunnel_max_control_connections - vbond-as-stun-server: - vipObjectType: object - vipType: ignore - vipValue: 'false' - vipVariableName: vpn_if_tunnel_vbond_as_stun_server - exclude-controller-group-list: - vipObjectType: list - vipType: ignore - vipVariableName: vpn_if_tunnel_exclude_controller_group_list - vmanage-connection-preference: - vipObjectType: object - vipType: ignore - vipValue: 5 - vipVariableName: vpn_if_tunnel_vmanage_connection_preference - port-hop: - vipObjectType: object - vipType: ignore - vipValue: 'true' - vipVariableName: vpn_if_tunnel_port_hop - low-bandwidth-link: - vipObjectType: object - vipType: ignore - vipValue: 'false' - vipVariableName: vpn_if_tunnel_low_bandwidth_link - last-resort-circuit: - vipObjectType: object - vipType: ignore - vipValue: 'false' - vipVariableName: vpn_if_tunnel_last_resort_circuit - nat-refresh-interval: - vipObjectType: object - vipType: ignore - vipValue: 5 - vipVariableName: vpn_if_tunnel_nat_refresh_interval - hello-interval: - vipObjectType: object - vipType: ignore - vipValue: 1000 - vipVariableName: vpn_if_tunnel_hello_interval - hello-tolerance: - vipObjectType: object - vipType: ignore - vipValue: 12 - vipVariableName: vpn_if_tunnel_hello_tolerance - tloc-extension-gre-to: - dst-ip: - vipObjectType: object - vipType: ignore - vipVariableName: vpn_if_tunnel_tloc_ext_gre_to_dst_ip - control-connections: - vipObjectType: object - vipType: ignore - vipValue: 'true' - vipVariableName: control_connections - ip-directed-broadcast: - vipObjectType: object - vipType: ignore - vipValue: 'false' - vipVariableName: vpn_if_ip-directed-broadcast - ipv6: - access-list: - vipType: ignore - vipValue: [] - vipObjectType: tree - vipPrimaryKey: - - direction - address: - vipObjectType: object - vipType: ignore - vipValue: '' - vipVariableName: vpn_if_ipv6_ipv6_address - dhcp-helper-v6: - vipType: ignore - vipValue: [] + - svc-type + ip: + route: + vipType: constant + vipValue: + - prefix: + vipObjectType: object + vipType: constant + vipValue: 0.0.0.0/0 + vipVariableName: vpn_ipv4_ip_prefix + next-hop: + vipType: constant + vipValue: + - address: + vipObjectType: object + vipType: variableName + vipValue: '' + vipVariableName: vpn0_default_gateway + distance: + vipObjectType: object + vipType: ignore + vipValue: 1 + vipVariableName: vpn_next_hop_ip_distance_0 + priority-order: + - address + - distance + vipObjectType: tree + vipPrimaryKey: + - address + priority-order: + - prefix + - next-hop vipObjectType: tree vipPrimaryKey: - - address - secondary-address: + - prefix + gre-route: {} + ipsec-route: {} + service-route: {} + ipv6: {} + omp: + advertise: vipType: ignore vipValue: [] vipObjectType: tree vipPrimaryKey: - - address - arp: - ip: + - protocol + ipv6-advertise: vipType: ignore vipValue: [] vipObjectType: tree vipPrimaryKey: - - addr - vrrp: - vipType: ignore - vipValue: [] - vipObjectType: tree - vipPrimaryKey: - - grp-id - ipv6-vrrp: - vipType: ignore - vipValue: [] - vipObjectType: tree - vipPrimaryKey: - - grp-id -- templateId: 40f42468-69dd-4cad-8006-96628dad0a75 - templateName: vsmart_vpn512 - templateDescription: vsmart_vpn512 - templateType: vpn-vsmart - deviceType: - - vsmart - lastUpdatedBy: admin - lastUpdatedOn: 1603228275706 - factoryDefault: false - devicesAttached: 0 - attachedMastersCount: 0 - templateMinVersion: 15.0.0 - configType: xml - createdBy: admin - createdOn: 1603228275706 - templateDefinition: - vpn-id: - vipObjectType: object - vipType: constant - vipValue: '512' - host: - vipObjectType: tree - vipPrimaryKey: - - hostname - vipType: ignore - vipValue: [] - ip: {} - ipv6: - ipv6: {} - name: - vipObjectType: object - vipType: ignore - vipVariableName: vpn_name -- templateId: fdd27183-08e1-44c7-b413-7707cd1743bf + - protocol +- templateId: 36dbbe03-005f-4de6-8490-cccf46aa585e templateName: vpn0_interface templateDescription: vpn0_interface templateType: vpn-vedge-interface deviceType: - vedge-cloud lastUpdatedBy: admin - lastUpdatedOn: 1603228277157 + lastUpdatedOn: 1644523648030 factoryDefault: false - devicesAttached: 0 + devicesAttached: 1 attachedMastersCount: 1 templateMinVersion: 15.0.0 configType: xml createdBy: admin - createdOn: 1603228277157 + createdOn: 1644522351863 + resourceGroup: global templateDefinition: if-name: vipObjectType: object @@ -2719,6 +2899,7 @@ vmanage_feature_templates: dhcp-helper: vipObjectType: list vipType: ignore + vipVariableName: vpn_if_dhcp_helper flow-control: vipObjectType: object vipType: ignore @@ -2909,7 +3090,7 @@ vmanage_feature_templates: sshd: vipObjectType: object vipType: ignore - vipValue: 'true' + vipValue: 'false' vipVariableName: vpn_if_tunnel_sshd ntp: vipObjectType: object @@ -2923,8 +3104,8 @@ vmanage_feature_templates: vipVariableName: vpn_if_tunnel_stun all: vipObjectType: object - vipType: ignore - vipValue: 'false' + vipType: constant + vipValue: 'true' vipVariableName: vpn_if_tunnel_all bgp: vipObjectType: object @@ -2986,33 +3167,321 @@ vmanage_feature_templates: hold-time: vipObjectType: object vipType: ignore - vipValue: 7000 - vipVariableName: hold-time - nat-refresh-interval: + vipValue: 7000 + vipVariableName: hold-time + nat-refresh-interval: + vipObjectType: object + vipType: ignore + vipValue: 5 + vipVariableName: vpn_if_tunnel_nat_refresh_interval + hello-interval: + vipObjectType: object + vipType: ignore + vipValue: 1000 + vipVariableName: vpn_if_tunnel_hello_interval + hello-tolerance: + vipObjectType: object + vipType: ignore + vipValue: 12 + vipVariableName: vpn_if_tunnel_hello_tolerance + tloc-extension-gre-to: + dst-ip: + vipObjectType: object + vipType: ignore + vipVariableName: vpn_if_tunnel_tloc_ext_gre_to_dst_ip + ip-directed-broadcast: + vipObjectType: object + vipType: ignore + vipValue: 'false' + vipVariableName: vpn_if_ip-directed-broadcast + ipv6: + access-list: + vipType: ignore + vipValue: [] + vipObjectType: tree + vipPrimaryKey: + - direction + address: + vipObjectType: object + vipType: ignore + vipValue: '' + vipVariableName: vpn_if_ipv6_ipv6_address + dhcp-helper-v6: + vipType: ignore + vipValue: [] + vipObjectType: tree + vipPrimaryKey: + - address + secondary-address: + vipType: ignore + vipValue: [] + vipObjectType: tree + vipPrimaryKey: + - address + ipv6-shutdown: + vipObjectType: object + vipType: ignore + vipValue: 'false' + vipVariableName: vpn_if_ipv6_ipv6_shutdown + arp: + ip: + vipType: ignore + vipValue: [] + vipObjectType: tree + vipPrimaryKey: + - addr + vrrp: + vipType: ignore + vipValue: [] + vipObjectType: tree + vipPrimaryKey: + - grp-id + ipv6-vrrp: + vipType: ignore + vipValue: [] + vipObjectType: tree + vipPrimaryKey: + - grp-id + dot1x: + vipType: ignore + vipObjectType: node-only +- templateId: abb78f57-0007-4c2d-af07-d6f1b6c61787 + templateName: vpn1 + templateDescription: vEdge vpn1 + templateType: vpn-vedge + deviceType: + - vedge-cloud + lastUpdatedBy: admin + lastUpdatedOn: 1644522344547 + factoryDefault: false + devicesAttached: 1 + attachedMastersCount: 1 + templateMinVersion: 15.0.0 + configType: xml + createdBy: admin + createdOn: 1644522344547 + resourceGroup: global + templateDefinition: + vpn-id: + vipObjectType: object + vipType: constant + vipValue: 1 + name: + vipObjectType: object + vipType: ignore + vipVariableName: vpn_name + ecmp-hash-key: + layer4: + vipObjectType: object + vipType: ignore + vipValue: 'false' + vipVariableName: vpn_layer4 + tcp-optimization: + vipObjectType: node-only + vipType: ignore + vipValue: 'false' + vipVariableName: vpn_tcp_optimization + nat64-global: + prefix: + stateful: {} + nat64: + v4: + pool: + vipType: ignore + vipValue: [] + vipObjectType: tree + vipPrimaryKey: + - name + host: + vipType: ignore + vipValue: [] + vipObjectType: tree + vipPrimaryKey: + - hostname + service: + vipType: ignore + vipValue: [] + vipObjectType: tree + vipPrimaryKey: + - svc-type + ip: + gre-route: {} + ipsec-route: {} + service-route: {} + ipv6: {} + omp: + advertise: + vipType: ignore + vipValue: [] + vipObjectType: tree + vipPrimaryKey: + - protocol + ipv6-advertise: + vipType: ignore + vipValue: [] + vipObjectType: tree + vipPrimaryKey: + - protocol +- templateId: 4f687315-1c08-48eb-9d05-e6d874220a69 + templateName: vpn1_interface + templateDescription: vpn1_interface + templateType: vpn-vedge-interface + deviceType: + - vedge-cloud + lastUpdatedBy: admin + lastUpdatedOn: 1644522353287 + factoryDefault: false + devicesAttached: 1 + attachedMastersCount: 1 + templateMinVersion: 15.0.0 + configType: xml + createdBy: admin + createdOn: 1644522353287 + resourceGroup: global + templateDefinition: + if-name: + vipObjectType: object + vipType: variableName + vipValue: '' + vipVariableName: vpn1_interface + description: + vipObjectType: object + vipType: ignore + vipVariableName: vpn_if_description + ip: + secondary-address: + vipType: ignore + vipValue: [] + vipObjectType: tree + vipPrimaryKey: + - address + address: vipObjectType: object - vipType: ignore - vipValue: 5 - vipVariableName: vpn_if_tunnel_nat_refresh_interval - hello-interval: + vipType: variableName + vipValue: '' + vipVariableName: vpn1_ipv4_address + dhcp-helper: + vipObjectType: list + vipType: ignore + vipVariableName: vpn_if_dhcp_helper + flow-control: + vipObjectType: object + vipType: ignore + vipValue: autoneg + vipVariableName: vpn_if_flow_control + clear-dont-fragment: + vipObjectType: object + vipType: ignore + vipValue: 'false' + vipVariableName: vpn_if_clear_dont_fragment + pmtu: + vipObjectType: object + vipType: ignore + vipValue: 'false' + vipVariableName: vpn_if_pmtu + mtu: + vipObjectType: object + vipType: ignore + vipValue: 1500 + vipVariableName: vpn_if_ip_mtu + static-ingress-qos: + vipObjectType: object + vipType: ignore + vipVariableName: vpn_if_static_ingress_qos + tcp-mss-adjust: + vipObjectType: object + vipType: ignore + vipVariableName: vpn_if_tcp_mss_adjust + mac-address: + vipObjectType: object + vipType: ignore + vipVariableName: vpn_if_mac_address + speed: + vipObjectType: object + vipType: ignore + vipValue: _empty + vipVariableName: vpn_if_speed + duplex: + vipObjectType: object + vipType: ignore + vipValue: _empty + vipVariableName: vpn_if_duplex + shutdown: + vipObjectType: object + vipType: constant + vipValue: 'false' + vipVariableName: vpn_if_shutdown + arp-timeout: + vipObjectType: object + vipType: ignore + vipValue: 1200 + vipVariableName: vpn_if_arp_timeout + autonegotiate: + vipObjectType: object + vipType: ignore + vipValue: 'true' + vipVariableName: vpn_if_autonegotiate + shaping-rate: + vipObjectType: object + vipType: ignore + vipVariableName: qos_shaping_rate + qos-map: + vipObjectType: object + vipType: ignore + vipVariableName: qos_map + tracker: + vipObjectType: list + vipType: ignore + vipVariableName: vpn_if_tracker + bandwidth-upstream: + vipObjectType: object + vipType: ignore + vipVariableName: vpn_if_bandwidth_upstream + bandwidth-downstream: + vipObjectType: object + vipType: ignore + vipVariableName: vpn_if_bandwidth_downstream + block-non-source-ip: + vipObjectType: object + vipType: ignore + vipValue: 'false' + vipVariableName: vpn_if_block_non_source_ip + rewrite-rule: + rule-name: vipObjectType: object vipType: ignore - vipValue: 1000 - vipVariableName: vpn_if_tunnel_hello_interval - hello-tolerance: + vipVariableName: rewrite_rule_name + tloc-extension: + vipObjectType: object + vipType: ignore + vipVariableName: vpn_if_tloc_extension + icmp-redirect-disable: + vipObjectType: object + vipType: ignore + vipValue: 'false' + vipVariableName: vpn_if_icmp_redirect_disable + tloc-extension-gre-from: + src-ip: vipObjectType: object vipType: ignore - vipValue: 12 - vipVariableName: vpn_if_tunnel_hello_tolerance - tloc-extension-gre-to: - dst-ip: - vipObjectType: object - vipType: ignore - vipVariableName: vpn_if_tunnel_tloc_ext_gre_to_dst_ip - control-connections: + vipVariableName: vpn_if_tloc-ext_gre_from_src_ip + xconnect: vipObjectType: object vipType: ignore - vipValue: 'true' - vipVariableName: control_connections + vipVariableName: vpn_if_tloc-ext_gre_from_xconnect + access-list: + vipType: ignore + vipValue: [] + vipObjectType: tree + vipPrimaryKey: + - direction + policer: + vipType: ignore + vipValue: [] + vipObjectType: tree + vipPrimaryKey: + - policer-name + - direction ip-directed-broadcast: vipObjectType: object vipType: ignore @@ -3064,21 +3533,22 @@ vmanage_feature_templates: dot1x: vipType: ignore vipObjectType: node-only -- templateId: 7438ded2-bc4a-4f43-9b12-947330833fe7 +- templateId: d17a6b7e-5908-4b19-8abf-145eba5c204d templateName: vpn512 templateDescription: vpn512 templateType: vpn-vedge deviceType: - vedge-cloud lastUpdatedBy: admin - lastUpdatedOn: 1603228276585 + lastUpdatedOn: 1644522352258 factoryDefault: false - devicesAttached: 0 + devicesAttached: 1 attachedMastersCount: 1 templateMinVersion: 15.0.0 configType: xml createdBy: admin - createdOn: 1603228276585 + createdOn: 1644522352258 + resourceGroup: global templateDefinition: vpn-id: vipObjectType: object @@ -3118,268 +3588,70 @@ vmanage_feature_templates: - hostname service: vipType: ignore - vipValue: [] - vipObjectType: tree - vipPrimaryKey: - - svc-type - ip: - gre-route: {} - ipsec-route: {} - service-route: {} - ipv6: {} - omp: - advertise: - vipType: ignore - vipValue: [] - vipObjectType: tree - vipPrimaryKey: - - protocol - ipv6-advertise: - vipType: ignore - vipValue: [] - vipObjectType: tree - vipPrimaryKey: - - protocol -- templateId: c1523ded-a033-42b1-8111-d52f7b25c465 - templateName: cedge_vpn_ospf1 - templateDescription: cEdge OSPF for VPN1 - templateType: cisco_ospf - deviceType: - - vedge-CSR-1000v - lastUpdatedBy: admin - lastUpdatedOn: 1603228275553 - factoryDefault: false - devicesAttached: 2 - attachedMastersCount: 1 - templateMinVersion: 15.0.0 - configType: xml - createdBy: admin - createdOn: 1603228275553 - templateDefinition: - ospf: - router-id: - vipObjectType: object - vipType: ignore - vipVariableName: ospf_router_id - auto-cost: - reference-bandwidth: - vipObjectType: object - vipType: ignore - vipValue: 100 - vipVariableName: ospf_reference_bandwidth - compatible: - rfc1583: - vipObjectType: object - vipType: ignore - vipValue: 'true' - vipVariableName: ospf_rfc1583 - distance: - external: - vipObjectType: object - vipType: ignore - vipValue: 110 - vipVariableName: ospf_distance_external - inter-area: - vipObjectType: object - vipType: ignore - vipValue: 110 - vipVariableName: ospf_distance_inter_area - intra-area: - vipObjectType: object - vipType: ignore - vipValue: 110 - vipVariableName: ospf_distance_intra_area - timers: - spf: - delay: - vipObjectType: object - vipType: ignore - vipValue: 200 - vipVariableName: ospf_delay - initial-hold: - vipObjectType: object - vipType: ignore - vipValue: 1000 - vipVariableName: ospf_initial_hold - max-hold: - vipObjectType: object - vipType: ignore - vipValue: 10000 - vipVariableName: ospf_max_hold - redistribute: - vipType: constant - vipValue: - - protocol: - vipObjectType: object - vipType: constant - vipValue: omp - vipVariableName: ospf_redistribute_protocol - route-policy: - vipObjectType: object - vipType: ignore - vipVariableName: ospf_redistribute_route_policy - priority-order: - - protocol - - route-policy + vipValue: [] + vipObjectType: tree + vipPrimaryKey: + - svc-type + ip: + gre-route: {} + ipsec-route: {} + service-route: {} + ipv6: {} + omp: + advertise: + vipType: ignore + vipValue: [] vipObjectType: tree vipPrimaryKey: - protocol - max-metric: - router-lsa: - vipType: ignore - vipValue: [] - vipObjectType: tree - vipPrimaryKey: - - ad-type - area: - vipType: constant - vipValue: - - a-num: - originalDefaultOption: constant - dataPath: [] - vipObjectType: object - vipValue: 0 - vipType: constant - vipVariableName: ospf_area_a_num - stub: - no-summary: - vipType: ignore - vipObjectType: node-only - nssa: - no-summary: - vipType: ignore - vipObjectType: node-only - interface: - vipType: constant - vipValue: - - name: - originalDefaultOption: constant - dataPath: [] - vipObjectType: object - vipType: variableName - vipVariableName: vpn1_ospf_interface - vipValue: '' - hello-interval: - originalDefaultOption: ignore - dataPath: [] - vipObjectType: object - vipValue: 10 - vipType: ignore - vipVariableName: ospf_hello_interval - dead-interval: - originalDefaultOption: ignore - dataPath: [] - vipObjectType: object - vipValue: 40 - vipType: ignore - vipVariableName: ospf_dead_interval - retransmit-interval: - originalDefaultOption: ignore - dataPath: [] - vipObjectType: object - vipValue: 5 - vipType: ignore - vipVariableName: ospf_retransmit_interval - cost: - originalDefaultOption: ignore - dataPath: [] - vipObjectType: object - vipType: ignore - vipVariableName: ospf_cost - priority: - originalDefaultOption: ignore - dataPath: [] - vipObjectType: object - vipValue: 1 - vipType: ignore - vipVariableName: ospf_priority - network: - originalDefaultOption: ignore - dataPath: [] - vipObjectType: object - vipValue: broadcast - vipType: ignore - vipVariableName: ospf_network - passive-interface: - originalDefaultOption: ignore - dataPath: [] - vipObjectType: node-only - vipValue: 'false' - vipType: ignore - vipVariableName: ospf_passive_interface - authentication: - type: - vipObjectType: object - vipType: ignore - vipValue: _empty - vipVariableName: ospf_authentication_type - message-digest: - message-digest-key: - vipObjectType: object - vipType: ignore - vipValue: '' - vipVariableName: ospf_message_digest_key - md5: - vipObjectType: object - vipType: ignore - vipValue: '' - vipVariableName: ospf_md5 - priority-order: - - name - - hello-interval - - dead-interval - - retransmit-interval - - cost - - priority - - network - - passive-interface - - authentication - vipObjectType: tree - vipPrimaryKey: - - name - priority-order: - - a-num - - interface + ipv6-advertise: + vipType: ignore + vipValue: [] vipObjectType: tree vipPrimaryKey: - - a-num -- templateId: dc4d7e2b-40fb-4e83-9ef1-e1eab23131f5 - templateName: vpn1_interface - templateDescription: vpn1_interface + - protocol +- templateId: f6393d3e-9c66-4747-910b-841cebe3d531 + templateName: vpn512_interface + templateDescription: vpn512_interface templateType: vpn-vedge-interface deviceType: - vedge-cloud lastUpdatedBy: admin - lastUpdatedOn: 1603228277314 + lastUpdatedOn: 1644522346001 factoryDefault: false - devicesAttached: 0 + devicesAttached: 1 attachedMastersCount: 1 templateMinVersion: 15.0.0 configType: xml createdBy: admin - createdOn: 1603228277314 + createdOn: 1644522346001 + resourceGroup: global templateDefinition: if-name: vipObjectType: object vipType: variableName vipValue: '' - vipVariableName: vpn1_interface + vipVariableName: vpn512_interface description: vipObjectType: object vipType: ignore vipVariableName: vpn_if_description ip: + dhcp-client: + vipObjectType: object + vipType: constant + vipValue: 'true' + dhcp-distance: + vipObjectType: object + vipType: ignore + vipValue: 1 + vipVariableName: vpn_if_ipv4_dhcp_distance secondary-address: vipType: ignore vipValue: [] vipObjectType: tree vipPrimaryKey: - address - address: - vipObjectType: object - vipType: variableName - vipValue: '' - vipVariableName: vpn1_ipv4_address dhcp-helper: vipObjectType: list vipType: ignore @@ -3429,7 +3701,7 @@ vmanage_feature_templates: shutdown: vipObjectType: object vipType: constant - vipValue: 'false' + vipValue: 'true' vipVariableName: vpn_if_shutdown arp-timeout: vipObjectType: object @@ -3553,21 +3825,22 @@ vmanage_feature_templates: dot1x: vipType: ignore vipObjectType: node-only -- templateId: 3261d4e9-3dbd-43e1-87bf-1a7b28b013b3 +- templateId: cf0da3c3-235a-4e5d-bb3a-baa148408499 templateName: vsmart_vpn0 templateDescription: vsmart_vpn0 templateType: vpn-vsmart deviceType: - vsmart lastUpdatedBy: admin - lastUpdatedOn: 1603228275419 + lastUpdatedOn: 1644522353694 factoryDefault: false devicesAttached: 1 attachedMastersCount: 1 templateMinVersion: 15.0.0 configType: xml createdBy: admin - createdOn: 1603228275419 + createdOn: 1644522353694 + resourceGroup: global templateDefinition: vpn-id: vipObjectType: object @@ -3619,98 +3892,197 @@ vmanage_feature_templates: vipObjectType: object vipType: ignore vipVariableName: vpn_name -- templateId: 2c00e5b7-0cef-463b-959c-78043dac93f6 - templateName: cedge_vpn1 - templateDescription: cEdge VPN1 - templateType: cisco_vpn +- templateId: 6c98c50a-e318-42d2-a2b0-223e0e87c656 + templateName: vsmart_vpn0_interface + templateDescription: vSmart VPN0 Interface + templateType: vpn-vsmart-interface deviceType: - - vedge-CSR-1000v + - vsmart lastUpdatedBy: admin - lastUpdatedOn: 1603228274539 + lastUpdatedOn: 1644522350222 factoryDefault: false - devicesAttached: 4 - attachedMastersCount: 3 + devicesAttached: 1 + attachedMastersCount: 1 templateMinVersion: 15.0.0 configType: xml createdBy: admin - createdOn: 1603228274539 + createdOn: 1644522350222 + resourceGroup: global templateDefinition: - vpn-id: + if-name: vipObjectType: object vipType: constant - vipValue: 1 - name: + vipValue: eth1 + vipVariableName: vpn_if_name + description: vipObjectType: object vipType: ignore - vipVariableName: vpn_name - ecmp-hash-key: - layer4: + vipVariableName: vpn_if_description + ip: + address: + vipObjectType: object + vipType: variableName + vipValue: '' + vipVariableName: vpn0_internet_ipv4_address + ipv6: + address: vipObjectType: object vipType: ignore - vipValue: 'false' - vipVariableName: vpn_layer4 - nat64-global: - prefix: - stateful: {} - nat64: - v4: - pool: - vipType: ignore - vipValue: [] - vipObjectType: tree - vipPrimaryKey: - - name - host: + vipVariableName: vpn_if_ipv6_address + dhcp-rapid-commit: {} + dhcp-helper: {} + flow-control: + vipObjectType: object vipType: ignore - vipValue: [] - vipObjectType: tree - vipPrimaryKey: - - hostname - service: + vipValue: autoneg + vipVariableName: vpn_if_flow_control + clear-dont-fragment: + vipObjectType: object + vipType: ignore + vipValue: 'false' + vipVariableName: vpn_if_clear_dont_fragment + pmtu: + vipObjectType: object + vipType: ignore + vipValue: 'false' + vipVariableName: vpn_if_pmtu + mtu: + vipObjectType: object + vipType: ignore + vipValue: 1500 + vipVariableName: vpn_if_mtu + static-ingress-qos: {} + tcp-mss-adjust: + vipObjectType: object + vipType: ignore + vipVariableName: vpn_if_tcp_mss_adjust + mac-address: + vipObjectType: object + vipType: ignore + vipVariableName: vpn_if_mac_address + speed: + vipObjectType: object + vipType: ignore + vipValue: _empty + vipVariableName: vpn_if_speed + duplex: + vipObjectType: object + vipType: ignore + vipValue: _empty + vipVariableName: vpn_if_duplex + shutdown: + vipObjectType: object + vipType: constant + vipValue: 'false' + vipVariableName: vpn_if_shutdown + arp-timeout: {} + autonegotiate: + vipObjectType: object vipType: ignore - vipValue: [] - vipObjectType: tree - vipPrimaryKey: - - svc-type - ip: - gre-route: {} - ipsec-route: {} - service-route: {} - ipv6: {} - omp: - advertise: + vipValue: 'true' + vipVariableName: vpn_if_autonegotiate + arp: + ip: vipType: ignore vipValue: [] vipObjectType: tree vipPrimaryKey: - - protocol - ipv6-advertise: + - addr + tunnel-interface: + color: + value: + vipObjectType: object + vipType: ignore + vipValue: default + vipVariableName: vpn_if_tunnel_color_value + restrict: {} + carrier: + vipObjectType: object vipType: ignore - vipValue: [] - vipObjectType: tree - vipPrimaryKey: - - protocol -- templateId: be49f1f9-92ca-4fc1-82bd-defecee63dc9 - templateName: cedge_vpn1_interface - templateDescription: cEdge VPN1 Interface - templateType: cisco_vpn_interface + vipValue: default + vipVariableName: vpn_if_tunnel_carrier + hello-interval: + vipObjectType: object + vipType: ignore + vipValue: 1000 + vipVariableName: vpn_if_tunnel_hello-interval + hello-tolerance: + vipObjectType: object + vipType: ignore + vipValue: 12 + vipVariableName: vpn_if_tunnel_hello-tolerance + nat-refresh-interval: + vipObjectType: object + vipType: ignore + vipValue: 5 + vipVariableName: vpn_if_tunnel_nat_refresh_interval + allow-service: + all: + vipObjectType: object + vipType: ignore + vipValue: 'false' + vipVariableName: all + dhcp: + vipObjectType: object + vipType: ignore + vipValue: 'true' + vipVariableName: vpn_if_tunnel_dhcp + dns: + vipObjectType: object + vipType: ignore + vipValue: 'true' + vipVariableName: vpn_if_tunnel_dns + icmp: + vipObjectType: object + vipType: ignore + vipValue: 'true' + vipVariableName: vpn_if_tunnel_icmp + sshd: + vipObjectType: object + vipType: ignore + vipValue: 'false' + vipVariableName: vpn_if_tunnel_sshd + netconf: + vipObjectType: object + vipType: constant + vipValue: 'true' + vipVariableName: vpn_if_tunnel_netconf + ntp: + vipObjectType: object + vipType: ignore + vipValue: 'false' + vipVariableName: vpn_if_tunnel_ntp + stun: + vipObjectType: object + vipType: ignore + vipValue: 'false' + vipVariableName: vpn_if_tunnel_stun + bgp: {} + group: + vipObjectType: list + vipType: ignore +- templateId: 7b4ec535-5d7c-4800-b89a-f5f6d6a01970 + templateName: vsmart_vpn512_interface + templateDescription: vSmart VPN512 Interface + templateType: vpn-vsmart-interface deviceType: - - vedge-CSR-1000v + - vsmart lastUpdatedBy: admin - lastUpdatedOn: 1603228276297 + lastUpdatedOn: 1644522348512 factoryDefault: false - devicesAttached: 2 - attachedMastersCount: 2 + devicesAttached: 1 + attachedMastersCount: 1 templateMinVersion: 15.0.0 configType: xml createdBy: admin - createdOn: 1603228276297 + createdOn: 1644522348512 + resourceGroup: global templateDefinition: if-name: vipObjectType: object - vipType: variableName - vipValue: '' - vipVariableName: vpn1_interface + vipType: constant + vipValue: eth0 + vipVariableName: vpn_if_name description: vipObjectType: object vipType: ignore @@ -3718,27 +4090,35 @@ vmanage_feature_templates: ip: address: vipObjectType: object - vipType: variableName - vipValue: '' - vipVariableName: vpn1_ipv4_address - secondary-address: vipType: ignore - vipValue: [] - vipObjectType: tree - vipPrimaryKey: - - address - dhcp-helper: - vipObjectType: list + vipVariableName: vpn_if_ip_address + ipv6: + address: + vipObjectType: object + vipType: ignore + vipVariableName: vpn_if_ipv6_address + dhcp-rapid-commit: {} + dhcp-helper: {} + flow-control: + vipObjectType: object vipType: ignore - vipVariableName: vpn_if_dhcp_helper - flow-control: {} - clear-dont-fragment: {} - pmtu: {} + vipValue: autoneg + vipVariableName: vpn_if_flow_control + clear-dont-fragment: + vipObjectType: object + vipType: ignore + vipValue: 'false' + vipVariableName: vpn_if_clear_dont_fragment + pmtu: + vipObjectType: object + vipType: ignore + vipValue: 'false' + vipVariableName: vpn_if_pmtu mtu: vipObjectType: object vipType: ignore vipValue: 1500 - vipVariableName: vpn_if_ip_mtu + vipVariableName: vpn_if_mtu static-ingress-qos: {} tcp-mss-adjust: vipObjectType: object @@ -3763,104 +4143,12 @@ vmanage_feature_templates: vipType: constant vipValue: 'false' vipVariableName: vpn_if_shutdown - arp-timeout: - vipObjectType: object - vipType: ignore - vipValue: 1200 - vipVariableName: vpn_if_arp_timeout + arp-timeout: {} autonegotiate: vipObjectType: object vipType: ignore vipValue: 'true' vipVariableName: vpn_if_autonegotiate - shaping-rate: - vipObjectType: object - vipType: ignore - vipVariableName: qos_shaping_rate - qos-map: - vipObjectType: object - vipType: ignore - vipVariableName: qos_map - tracker: - vipObjectType: list - vipType: ignore - vipVariableName: vpn_if_tracker - bandwidth-upstream: - vipObjectType: object - vipType: ignore - vipVariableName: vpn_if_bandwidth_upstream - bandwidth-downstream: - vipObjectType: object - vipType: ignore - vipVariableName: vpn_if_bandwidth_downstream - block-non-source-ip: - vipObjectType: object - vipType: ignore - vipValue: 'false' - vipVariableName: vpn_if_block_non_source_ip - rewrite-rule: - rule-name: - vipObjectType: object - vipType: ignore - vipVariableName: rewrite_rule_name - tloc-extension: - vipObjectType: object - vipType: ignore - vipVariableName: vpn_if_tloc_extension - load-interval: - vipObjectType: object - vipType: ignore - vipValue: 300 - vipVariableName: vpn_if_load_interval - icmp-redirect-disable: - vipObjectType: object - vipType: ignore - vipValue: 'true' - vipVariableName: vpn_if_icmp_redirect_disable - tloc-extension-gre-from: - src-ip: - vipObjectType: object - vipType: ignore - vipVariableName: vpn_if_tloc-ext_gre_from_src_ip - xconnect: - vipObjectType: object - vipType: ignore - vipVariableName: vpn_if_tloc-ext_gre_from_xconnect - access-list: - vipType: ignore - vipValue: [] - vipObjectType: tree - vipPrimaryKey: - - direction - ip-directed-broadcast: - vipObjectType: object - vipType: ignore - vipValue: 'false' - vipVariableName: vpn_if_ip-directed-broadcast - ipv6: - access-list: - vipType: ignore - vipValue: [] - vipObjectType: tree - vipPrimaryKey: - - direction - address: - vipObjectType: object - vipType: ignore - vipValue: '' - vipVariableName: vpn_if_ipv6_ipv6_address - dhcp-helper-v6: - vipType: ignore - vipValue: [] - vipObjectType: tree - vipPrimaryKey: - - address - secondary-address: - vipType: ignore - vipValue: [] - vipObjectType: tree - vipPrimaryKey: - - address arp: ip: vipType: ignore @@ -3868,15 +4156,3 @@ vmanage_feature_templates: vipObjectType: tree vipPrimaryKey: - addr - vrrp: - vipType: ignore - vipValue: [] - vipObjectType: tree - vipPrimaryKey: - - grp-id - ipv6-vrrp: - vipType: ignore - vipValue: [] - vipObjectType: tree - vipPrimaryKey: - - grp-id diff --git a/files/simple_client-0.2.1+b739fc30f-py3-none-any.whl b/files/simple_client-0.2.1+b739fc30f-py3-none-any.whl deleted file mode 100644 index 0e837ecd33c9aab6cda885a5a4235e34f4ee509f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 25103 zcmaI7V{oQX7bW_}M#r{or(@fAW7{@5wr$&X(s9R5I<{@y{%*~!ns4UL{5bVgJ^%LJ z>#VJ_6lK7`(EtDd^uI$4XcFC)PH|WJq&FfY)qXQO-ya=87v(=WIM^asl$30N>bkgb39oS#s41O^b3asyPwZ6n z-_pC|#mq1c6ys`e*2;V$)2VZo{?dfI7E`m{mozR$!);YBKrG-bqBWYMEubm^97@7} zE^hjw;||I3(qYva)tb=KZSUM||D`H;a@*qF(G&766}5>)Kj){o%Ua-x)G+oQuc){e87+-yP?P z_KM20smYM-!JxMHsJkscCZ^`n!!O(GDMZwfP=wHz2N9SWwuLu>`@HfPBvVUCn~u`7 z?w!?BkKhu^*2d~DSm=1erc^F2E>Ci%V0WPgO!yh5Dbw*8cU^3JHNWcW6C_As$Liq5 ziUMQ|N#kVD`fK3~l=@5R9k;!N`O)q5D7HAR&8&qw@iPHNelT-!5G0M3M2#}xbVP5I z4i7Uxqx|_WNem9ZAX$|Q)GYXgo2~R^S=VhT)*Me*K9%zslOv1fI(ZF8@$OF>>daGA zEQtAKMRB+S54{RePH^)=ooV;7 zG**$ElIPmo&x0RjYcRtqQNwQeVV)w3J*XayK}BHbIcyah(5f)1xV+~~W}ZIo5bd0H z(lzy|L)Bl|P)Bv~otqjS1`Q#<Y+RC2A$djMO z@75+SkQDz5r??lJ?%yB)01P+)fbu`%)cOC#D}#e)jEY>;1`~46xrS^`6aqzqF03t4 zSmMIqya>=s3!`W(NwbCoJ0_9syO(r)4XHEat?<>u{>V~XuN#;%R_C@}JDY3R89KN2 zY($K44HBn1l%pmi z?#BU%lGsmLAh6$WNc^;gANb(NvPxSt2Wc?sm}h%;^*Al#kFFEMluZFm8sxNG2)nKo z?*=ec)b3~X!l=Czq5{iW`DnxvNnfr?ag@%SQ_}Re$!skz7@N}9M88kNtPtsQ@8vW* zIrig9PGNFd!IcZ-Wx5C`=o8}_2M@0$5Cpc9FN3}qGdlb6*m{3V!7SsfnU<<@t|kU$ zO_)CyQfBLxdh>O%_U=WLtxpueb7zz^CL*BCS;5^BqJX!+N9Z0aFC%DTBuk(_AFaL3 zF3xhuk(Ya;ZhnSbk$By$hbFG$lvnLZv%-;K+4>J44nfR;%7j~ӑoE1DR2f*cT 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 I`P)+jDbbovFK6p-^<9l7#ocCG^ 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 {{ ping_dst_ip }}: {{ ping_rx }}/{{ ping_tx }}, {{ ping_loss }} loss, Pass(actual/expected) {{ actual_result }}/{{ expected_result }}" - failed_when: actual_result != expected_result - ignore_errors: False - vars: - actual_result: "{{ True if ping_loss != '100%' else False }}" - expected_result: "{{ ping_pass }}" diff --git a/roles/sdwan-tests/tests/inventory b/roles/sdwan-tests/tests/inventory deleted file mode 100644 index 878877b0..00000000 --- a/roles/sdwan-tests/tests/inventory +++ /dev/null @@ -1,2 +0,0 @@ -localhost - diff --git a/roles/sdwan-tests/README.md b/roles/sdwan_tests/README.md similarity index 100% rename from roles/sdwan-tests/README.md rename to roles/sdwan_tests/README.md diff --git a/roles/sdwan_tests/defaults/main.yml b/roles/sdwan_tests/defaults/main.yml new file mode 100644 index 00000000..8ee4af7c --- /dev/null +++ b/roles/sdwan_tests/defaults/main.yml @@ -0,0 +1,2 @@ +--- +# defaults file for sdwan_tests \ No newline at end of file diff --git a/roles/sdwan_tests/handlers/main.yml b/roles/sdwan_tests/handlers/main.yml new file mode 100644 index 00000000..306e0bcb --- /dev/null +++ b/roles/sdwan_tests/handlers/main.yml @@ -0,0 +1,2 @@ +--- +# handlers file for sdwan_tests \ No newline at end of file diff --git a/roles/sdwan-tests/meta/main.yml b/roles/sdwan_tests/meta/main.yml similarity index 69% rename from roles/sdwan-tests/meta/main.yml rename to roles/sdwan_tests/meta/main.yml index 3a212a93..f3123419 100644 --- a/roles/sdwan-tests/meta/main.yml +++ b/roles/sdwan_tests/meta/main.yml @@ -1,20 +1,9 @@ galaxy_info: - author: your name - description: your description - company: your company (optional) + author: Cisco Public Sector + description: Role for checking SD-WAN + company: Cisco Systems Inc. - # If the issue tracker for your role is not on github, uncomment the - # next line and provide a value - # issue_tracker_url: http://example.com/issue/tracker - - # Choose a valid license ID from https://spdx.org - some suggested licenses: - # - BSD-3-Clause (default) - # - MIT - # - GPL-2.0-or-later - # - GPL-3.0-only - # - Apache-2.0 - # - CC-BY-4.0 - license: license (GPL-2.0-or-later, MIT, etc) + license: Cisco Sample Code License min_ansible_version: 2.4 @@ -38,6 +27,8 @@ galaxy_info: # - 1.0 # - 7 # - 99.99 + platforms: + - name: all galaxy_tags: [] # List tags for your role here, one per line. A tag is a keyword that describes diff --git a/roles/sdwan-tests/tasks/ping-cedge.yml b/roles/sdwan_tests/tasks/ping-cedge.yml similarity index 89% rename from roles/sdwan-tests/tasks/ping-cedge.yml rename to roles/sdwan_tests/tasks/ping-cedge.yml index faa4ab80..0d5dad74 100644 --- a/roles/sdwan-tests/tasks/ping-cedge.yml +++ b/roles/sdwan_tests/tasks/ping-cedge.yml @@ -1,4 +1,5 @@ -- ios_ping: +- name: Run the ping + ios_ping: provider: host: "{{ hostvars[ping_vedge].ansible_host }}" username: admin @@ -11,7 +12,8 @@ delegate_to: localhost register: ping -- set_fact: +- name: Record results + set_fact: ping_rx: "{{ ping.packets_rx }}" ping_tx: "{{ ping.packets_tx }}" ping_loss: "{{ ping.packet_loss }}" diff --git a/roles/sdwan_tests/tasks/ping-test.yml b/roles/sdwan_tests/tasks/ping-test.yml new file mode 100644 index 00000000..3cd7aca1 --- /dev/null +++ b/roles/sdwan_tests/tasks/ping-test.yml @@ -0,0 +1,15 @@ +- name: Determine edge type + set_fact: + edge_type: "{{ 'vedge' if hostvars[ping_vedge].sdwan_model is regex('^vedge-[c0-9]') else 'cedge' }}" + +- include_tasks: + file: "ping-{{ edge_type }}.yml" + +- name: Output ping results + debug: + msg: "{{ ping_vedge }}(VPN {{ ping_vpn }}) => {{ ping_dst_ip }}: {{ ping_rx }}/{{ ping_tx }}, {{ ping_loss }} loss, Pass(actual/expected) {{ actual_result }}/{{ expected_result }}" + failed_when: actual_result != expected_result + ignore_errors: False + vars: + actual_result: "{{ True if ping_loss != '100%' else False }}" + expected_result: "{{ ping_pass }}" diff --git a/roles/sdwan-tests/tasks/ping-vedge.yml b/roles/sdwan_tests/tasks/ping-vedge.yml similarity index 76% rename from roles/sdwan-tests/tasks/ping-vedge.yml rename to roles/sdwan_tests/tasks/ping-vedge.yml index 8ebf84c7..1216d71f 100644 --- a/roles/sdwan-tests/tasks/ping-vedge.yml +++ b/roles/sdwan_tests/tasks/ping-vedge.yml @@ -1,4 +1,5 @@ -- vmanage_nping: +- name: Run the ping + vmanage_nping: user: "{{ vmanage_user }}" host: "{{ vmanage_ip }}" password: "{{ vmanage_pass }}" @@ -10,16 +11,12 @@ register: nping delegate_to: localhost -- set_fact: +- name: Record results + set_fact: ping_tx: "{{ nping.json.packetsTransmitted }}" - # ping_rx: "{{ nping.json.packetsReceived }}" ping_rx: "{{ nping.json.rawOutput | select('search', 'Echo reply') | list | length | default('0') }}" - ping_loss: "{{ nping.json.lossPercentage }}" + ping_loss: "{{ (100 - (100 * (ping_rx|int / ping_tx|int))) | int | string }}%" ping_rtt_min: "{{ nping.json.minRoundTrip }}" ping_rtt_max: "{{ nping.json.maxRoundTrip }}" - ping_rtt_avg: "{{ nping.json.avgRoundTrip }}" - - -- set_fact: - ping_loss: "{{ (100 - (100 * (ping_rx|int / ping_tx|int))) | int | string }}%" + ping_rtt_avg: "{{ nping.json.avgRoundTrip }}" \ No newline at end of file diff --git a/roles/ansible-pyats/tests/inventory b/roles/sdwan_tests/tests/inventory similarity index 100% rename from roles/ansible-pyats/tests/inventory rename to roles/sdwan_tests/tests/inventory diff --git a/roles/sdwan-tests/tests/test.yml b/roles/sdwan_tests/tests/test.yml similarity index 100% rename from roles/sdwan-tests/tests/test.yml rename to roles/sdwan_tests/tests/test.yml diff --git a/roles/sdwan-tests/vars/main.yml b/roles/sdwan_tests/vars/main.yml similarity index 100% rename from roles/sdwan-tests/vars/main.yml rename to roles/sdwan_tests/vars/main.yml diff --git a/templates/sdwan/netconf.j2 b/templates/sdwan/netconf.j2 index 529d7326..1a326fa2 100644 --- a/templates/sdwan/netconf.j2 +++ b/templates/sdwan/netconf.j2 @@ -2,8 +2,14 @@ {##} {# #} {##} - + + {% if sdwan_personality is defined and sdwan_personality == 'vbond' %} + vedge + {% endif %} + {% if sdwan_personality is defined and sdwan_personality != 'vbond' %} + {{ sdwan_personality }} + {% endif %} {{ inventory_hostname }} {% if sdwan_system_ip is defined %} {{ sdwan_system_ip }} @@ -11,25 +17,38 @@ {% if sdwan_site_id is defined %} {{ sdwan_site_id }} {% endif %} + {% if sdwan_domain_id is defined %} + {{ sdwan_site_id }} + {% endif %} {% if vmanage_org is defined %} {{ vmanage_org }} {% endif %} {% if sdwan_personality is defined and sdwan_personality == 'vbond' %} - {{ viptela.vbond.remote }} + {{ vpn0_ip | ipaddr('address') }} {% if sdwan_vbond_port is defined %} - {{ sdwan_vbond_port }} + {{ sdwan_vbond_port }} {% endif %} - + {% elif sdwan_vbond is defined %} {{ sdwan_vbond }} {% if sdwan_vbond_port is defined %} - {{ sdwan_vbond_port }} + {{ sdwan_vbond_port }} {% endif %} {% endif %} + + + admin + {% if viptela_encrypted_pass is defined %} + {{ viptela_encrypted_pass }} + {% else %}{# if viptela_encrypted_pass is defined #} + $6$329577c85ea66998$tTtlYqQIpfCGvqNZ2nICRWOSfyIV0/RO0ZWtFwpSJ0bBvlQoCowl6fO9SjzerDwmKYutIbPMAub7B4K/JG4c/0 + {% endif %}{# if viptela_encrypted_pass is defined #} + + {% if omp is defined %} @@ -65,6 +84,11 @@ {% endif %}{# interface.ip #} {% if interface.tunnel_interface is defined %} + {% if interface.tunnel_interface.encapsulation is defined %} + + {{ interface.tunnel_interface.encapsulation }} + + {% endif %}{# interface.tunnel_interface.encapsulation is defined #} {% if interface.tunnel_interface.allow_service is defined %} {% for service in interface.tunnel_interface.allow_service %} diff --git a/templates/sdwan/user-data.j2 b/templates/sdwan/user-data.j2 index a0eb6734..651776ba 100644 --- a/templates/sdwan/user-data.j2 +++ b/templates/sdwan/user-data.j2 @@ -1,23 +1,61 @@ #jinja2: lstrip_blocks: True, trim_blocks: True +{% if cloudinit_type == 'v2' %} +#cloud-config +{% if sdwan_personality == 'vmanage' %} +fs_setup: +- device: "/dev/sdb" + partition: "none" + filesystem: "ext4" +mounts: +- [ sdb, /opt/data ] +{% endif %}{# sdwan_personality == 'vmanage' #} +write_files: +{% if sdwan_personality == 'vmanage' %} +- path: /opt/web-app/etc/persona + owner: vmanage:vmanage-admin + permissions: '0644' + content: '{"persona":"COMPUTE_AND_DATA"}' +- path: /etc/default/personality + content: "vmanage\n" +{% endif %}{# sdwan_personality == 'vmanage' #} +{% if sdwan_personality == 'vsmart' %} +- path: /etc/default/personality + content: "vsmart\n" +{% endif %}{# if sdwan_personality == 'vmsart' #} +{% if sdwan_personality == 'vbond' %} +- path: /etc/default/personality + content: "vedge\n" +{% endif %}{# if sdwan_personality == 'vbond' #} +- path: /etc/default/inited + content: "1\n" +{%if sdwan_ca_cert is defined %} +- path: /usr/share/viptela/symantec-root-ca.crt +- path: /usr/share/viptela/root-ca.crt + content: | +{{ lookup('file', sdwan_ca_cert) | indent(4, True) }} +{% endif %}{# if sdwan_ca_cert is defined #} +- path: /etc/confd/init/zcloud.xml + content: | +{{ lookup('template', 'sdwan/netconf.j2') | indent(4, true) }} +{% else %}{# cloudinit_type == 'v2' #} Content-Type: multipart/mixed; boundary="===============7621452758582633985==" MIME-Version: 1.0 -{% if sdwan_personality == 'vmanage' or sdwan_CA_cert is defined %} +{% if sdwan_personality == 'vmanage' or sdwan_ca_cert is defined %} --===============7621452758582633985== Content-Type: text/cloud-config; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="vedge.cloud-config" -{% if sdwan_CA_cert is defined %} #cloud-config - +{% if sdwan_ca_cert is defined %} ca-certs: remove-defaults: false trusted: - | -{{ lookup('file', sdwan_CA_cert) | indent(7, True) }} -{% endif %}{# sdwan_CA_cert is defined #} +{{ lookup('file', sdwan_ca_cert) | indent(7, True) }} +{% endif %}{# sdwan_ca_cert is defined #} vinitparam: {% if sdwan_personality == 'vmanage' %} - format-partition : 1 @@ -30,11 +68,11 @@ vinitparam: {% if vmanage_org is defined %} - org : "{{ vmanage_org }}" {% endif %}{# sdwan_org is defined #} -{% if sdwan_CA_cert is defined %} +{% if sdwan_ca_cert is defined %} - rcc : | -{{ lookup('file', sdwan_CA_cert) | indent(7, True) }} -{% endif %}{# sdwan_CA_cert is defined #} -{% endif %}{# sdwan_personality == 'vmanage' or sdwan_CA_cert is defined #} +{{ lookup('file', sdwan_ca_cert) | indent(7, True) }} +{% endif %}{# sdwan_ca_cert is defined #} +{% endif %}{# sdwan_personality == 'vmanage' or sdwan_ca_cert is defined #} --===============7621452758582633985== Content-Type: text/cloud-boothook; charset="us-ascii" @@ -49,42 +87,28 @@ system system-ip {{ sdwan_system_ip }} {% endif %}{# sdwan_system_ip is defined #} {% if sdwan_domain_id is defined %} - domain-id {{ sdwan_domain_id }} + domain-id {{ sdwan_domain_id }} {% endif %}{# sdwan_domain_id is defined #} {% if sdwan_site_id is defined %} site-id {{ sdwan_site_id }} {% endif %}{# sdwan_site_id is defined #} - no route-consistency-check {% if vmanage_org is defined %} organization-name "{{ vmanage_org }}" {% endif %}{# sdwan_org is defined #} {% if sdwan_personality == "vbond" %} - vbond {{ vpn0_ip | ipaddr('address') }} local + vbond {{ vpn0_ip | ipaddr('address') }} local {% elif sdwan_vbond is defined %} - vbond {{ sdwan_vbond }} + vbond {{ sdwan_vbond }} {% endif %}{# sdwan_vbond is defined #} ! aaa - auth-order local radius tacacs - usergroup basic - task system read write - task interface read write - ! - - usergroup netadmin - ! - - usergroup operator - task system read - task interface read - task policy read - task routing read - task security read - ! - user admin +{% if vmanage_pass is defined %} + password {{ vmanage_pass }} +{% else %} password $6$u3jhmUlHRY16I1lI$OpkApAwXhGNo2xdKR.j2x7LF7OkRa9P02aSgACGMvmhidKHvxQ2poG6HTulDYp6BXfsm3clE6dz/wvOKLxA8e1 +{% endif %}{# vmanage_pass is defined #} ! ! @@ -96,56 +120,40 @@ system ! {% if vpn_instances is defined %}{# if vpn_instances is defined, use that #} -{% for vpn in vpn_instances %} +{% for vpn in vpn_instances %} vpn {{ vpn.vpn_id }} -{% for interface in vpn.interfaces %} +{% for route in vpn.routes|default([]) %} + ip route {{ route.prefix }} {{ route.next_hop.address }} +{% endfor %}{# for routes #} +{% for interface in vpn.interfaces %} interface {{ interface.if_name }} -{% if interface.ip.address == 'dhcp' %} +{% if interface.ip.dhcp_client is defined %} ip dhcp-client -{% else %} +{% elif interface.ip.address is defined %} ip address {{ interface.ip.address }} -{% endif %}{# interface.ip.address == 'dhcp' #} -{% if interface.tunnel_interface is defined %} +{% endif %}{# interface.ip.dhcp_client is defined #} +{% if interface.tunnel_interface is defined %} tunnel-interface - allow-service dhcp - allow-service dns - allow-service icmp - allow-service sshd - allow-service netconf - allow-service ntp - allow-service stun - allow-service https -{% endif %}{# interface.tunnel_interface is defiend #} -{% if interface.enabled is sameas true %} +{% if interface.tunnel_interface.allow_service is defined %} +{% for service in interface.tunnel_interface.allow_service %} + allow-service {{ service }} +{% endfor %}{# service #} +{% endif %}{# interface.allow_service #} +{% endif %}{# interface.tunnel_inteface #} +{% if interface.enabled is sameas true %} no shutdown -{% else %} +{% else %} shutdown -{% endif %}{# interface.enabled is sameas true #} -{% endfor %}{# for interface #} -{% for route in vpn.routes|default([]) %} - ip route {{ route.prefix }} {{ route.next_hop.address }} -{% endfor %}{# for routes #} -{% endfor %}{# for vpn #} -{% elif vpn0_ip is defined %} +{% endif %}{# interface.enabled is sameas true #} +{% endfor %}{# for interface #} +{% endfor %}{# for vpn #} +{% else %}{# if vpn_instances is defined #} vpn 0 - interface eth1 - ip address {{ vpn0_ip }} - tunnel-interface - allow-service dhcp - allow-service dns - allow-service icmp - allow-service sshd - allow-service netconf - allow-service ntp - allow-service stun - allow-service https - no shutdown -{% if vpn0_gateway is defined %} - ip route 0.0.0.0/0 {{ vpn0_gateway }} -{% endif %}{# if vpn0_gateway is defined #} +{% if sdwan_personality == 'vbond' %} + interface ge0/0 {% else %} -vpn 0 interface eth1 +{% endif %} ip dhcp-client tunnel-interface allow-service dhcp @@ -156,7 +164,6 @@ vpn 0 allow-service ntp allow-service stun allow-service https -{% endif %}{# vpn_instances is defined, etc #} ! vpn 512 interface eth0 @@ -164,4 +171,6 @@ vpn 512 no shutdown ! ! ---===============7621452758582633985== \ No newline at end of file +{% endif %}{# vpn_instances is defined, etc #} +--===============7621452758582633985== +{% endif %}{# cloudinit_type == 'v2' #} \ No newline at end of file diff --git a/templates/sdwan/vbond_user-data.j2 b/templates/sdwan/vbond_user-data.j2 index 9f74acc2..4e1a1576 100644 --- a/templates/sdwan/vbond_user-data.j2 +++ b/templates/sdwan/vbond_user-data.j2 @@ -1,8 +1,47 @@ #jinja2: lstrip_blocks: True, trim_blocks: True +{% if cloudinit_type == 'v2' %} +#cloud-config +{% if sdwan_personality == 'vmanage' %} +fs_setup: +- device: "/dev/sdb" + partition: "none" + filesystem: "ext4" +mounts: +- [ sdb, /opt/data ] +{% endif %}{# sdwan_personality == 'vmanage' #} +write_files: +{% if sdwan_personality == 'vmanage' %} +- path: /opt/web-app/etc/persona + owner: vmanage:vmanage-admin + permissions: '0644' + content: '{"persona":"COMPUTE_AND_DATA"}' +- path: /etc/default/personality + content: "vmanage\n" +{% endif %}{# sdwan_personality == 'vmanage' #} +{% if sdwan_personality == 'vsmart' %} +- path: /etc/default/personality + content: "vsmart\n" +{% endif %}{# if sdwan_personality == 'vmsart' #} +{% if sdwan_personality == 'vbond' %} +- path: /etc/default/personality + content: "vedge\n" +{% endif %}{# if sdwan_personality == 'vbond' #} +- path: /etc/default/inited + content: "1\n" +{%if sdwan_ca_cert is defined %} +- path: /usr/share/viptela/symantec-root-ca.crt +- path: /usr/share/viptela/root-ca.crt + content: | +{{ lookup('file', sdwan_ca_cert) | indent(4, True) }} +{% endif %}{# if sdwan_ca_cert is defined #} +- path: /etc/confd/init/zcloud.xml + content: | +{{ lookup('template', 'sdwan/netconf.j2') | indent(4, true) }} +{% else %}{# cloudinit_type == 'v2' #} Content-Type: multipart/mixed; boundary="===============6560338015520979320==" MIME-Version: 1.0 -{% if sdwan_personality == 'vmanage' or sdwan_CA_cert is defined %} +{% if sdwan_personality == 'vmanage' or sdwan_ca_cert is defined %} --===============6560338015520979320== Content-Type: text/cloud-config; charset="us-ascii" MIME-Version: 1.0 @@ -23,17 +62,17 @@ vinitparam: {% if vmanage_org is defined %} - org : "{{ vmanage_org }}" {% endif %}{# sdwan_org is defined #} -{% if sdwan_CA_cert is defined %} +{% if sdwan_ca_cert is defined %} - rcc : | -{{ lookup('file', sdwan_CA_cert) | indent(7, True) }} +{{ lookup('file', sdwan_ca_cert) | indent(7, True) }} ca-certs: remove-defaults: false trusted: - | -{{ lookup('file', sdwan_CA_cert) | indent(7, True) }} -{% endif %}{# sdwan_CA_cert is defined #} -{% endif %}{# sdwan_personality == 'vmanage' or sdwan_CA_cert is defined #} +{{ lookup('file', sdwan_ca_cert) | indent(7, True) }} +{% endif %}{# sdwan_ca_cert is defined #} +{% endif %}{# sdwan_personality == 'vmanage' or sdwan_ca_cert is defined #} --===============6560338015520979320== Content-Type: text/cloud-boothook; charset="us-ascii" @@ -84,8 +123,11 @@ device-model {{ sdwan_device_model }} task security read ! user admin - password $6$siwKBQ==$wT2lUa9BSreDPI6gB8sl4E6PAJoVXgMbgv/whJ8F1C6sWdRazdxorYYTLrL6syiG6qnLABTnrE96HJiKF6QRq1 - ! +{% if vmanage_pass is defined %} + password {{ vmanage_pass }} +{% else %} + password $6$u3jhmUlHRY16I1lI$OpkApAwXhGNo2xdKR.j2x7LF7OkRa9P02aSgACGMvmhidKHvxQ2poG6HTulDYp6BXfsm3clE6dz/wvOKLxA8e1 +{% endif %}{# vmanage_pass is defined #} ! ! logging disk @@ -107,54 +149,34 @@ device-model {{ sdwan_device_model }} {% if vpn_instances is defined %}{# if vpn_instances is defined, use that #} {% for vpn in vpn_instances %} vpn {{ vpn.vpn_id }} +{% for route in vpn.routes|default([]) %} + ip route {{ route.prefix }} {{ route.next_hop.address }} +{% endfor %}{# for routes #} {% for interface in vpn.interfaces %} interface {{ interface.if_name }} -{% if interface.ip.address == 'dhcp' %} - ip dhcp-client -{% else %} - ip address {{ interface.ip.address }} -{% endif %}{# interface.ip.address == 'dhcp' #} -{% if interface.tunnel_interface is defined %} - tunnel-interface - allow-service dhcp - allow-service dns - allow-service icmp - allow-service sshd - allow-service netconf - allow-service ntp - allow-service stun - allow-service https -{% endif %}{# interface.tunnel_interface is defiend #} +{% if interface.ip.dhcp_client is defined %} + ip dhcp-client +{% elif interface.ip.address is defined %} + ip address {{ interface.ip.address }} +{% endif %} +{% if interface.tunnel_interface is defined %} + tunnel-interface +{% if interface.tunnel_interface.allow_service is defined %} +{% for service in interface.tunnel_interface.allow_service %} + allow-service {{ service }} +{% endfor %}{# service #} +{% endif %}{# interface.allow_service #} +{% endif %}{# interface.tunnel_inteface #} {% if interface.enabled is sameas true %} no shutdown {% else %} shutdown {% endif %}{# interface.enabled is sameas true #} {% endfor %}{# for interface #} -{% for route in vpn.routes|default([]) %} - ip route {{ route.prefix }} {{ route.next_hop.address }} -{% endfor %}{# for routes #} {% endfor %}{# for vpn #} -{% elif vpn0_ip is defined %} - vpn 0 - interface ge0/0 - ip address {{ vpn0_ip }} - tunnel-interface - allow-service dhcp - allow-service dns - allow-service icmp - allow-service sshd - allow-service netconf - allow-service ntp - allow-service stun - allow-service https - no shutdown -{% if vpn0_gateway is defined %} - ip route 0.0.0.0/0 {{ vpn0_gateway }} -{% endif %}{# if vpn0_gateway is defined #} {% else %} vpn 0 - interface eth1 + interface ge0/0 ip dhcp-client tunnel-interface allow-service dhcp @@ -165,7 +187,6 @@ device-model {{ sdwan_device_model }} allow-service ntp allow-service stun allow-service https -{% endif %}{# vpn_instances is defined #} ! vpn 512 interface eth0 @@ -175,4 +196,6 @@ device-model {{ sdwan_device_model }} ! ! ! ---===============6560338015520979320== \ No newline at end of file +{% endif %}{# vpn_instances is defined #} +--===============6560338015520979320== +{% endif %}{# cloudinit_type == 'v2' #} \ No newline at end of file diff --git a/templates/terraform/control_tfvars.j2 b/templates/terraform/control_tfvars.j2 index ec526b21..d3c58d74 100644 --- a/templates/terraform/control_tfvars.j2 +++ b/templates/terraform/control_tfvars.j2 @@ -1,32 +1,32 @@ vmanage_device_list = { - {% for host in groups['vmanage_hosts'] -%} +{% for host in groups['vmanage_hosts'] -%} "{{ hostvars[host]['inventory_hostname'] }}" = { networks = ["{{ hostvars[host]['vpn0_portgroup'] }}", "{{ hostvars[host]['vpn512_portgroup'] }}"] - ipv4_address = "{{ hostvars[host]['vpn0_ip'] }}" - ipv4_gateway = "{{ hostvars[host]['vpn0_gateway'] }}" + day0 = <