diff --git a/group_vars/dev_environments.yml b/group_vars/dev_environments.yml new file mode 100644 index 0000000000000000000000000000000000000000..60ccfbbc17ad7285838f8d5b6387652ac9c4f9d9 --- /dev/null +++ b/group_vars/dev_environments.yml @@ -0,0 +1,18 @@ +s3: + access_key: AKIA6DQFYS5WRMJU4FW6 + secret_key: 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 + region: eu-west-3 + bucket: geant-emulation-images + +normal_images: + - filename: cEOS-lab-4.28.2.1F.tar + image_name: ceos + image_tag: 4.28.1.1F + +vrnetlab_images: + - vm_image: vmx-bundle-18.2R1.9.tgz + integration: vmx + image_name: vrnetlab/vr-vmx + image_tag: 18.2R1.9 + +nat_user: nat diff --git a/roles/dev_images/tasks/build_image.yml b/roles/dev_images/tasks/build_image.yml new file mode 100644 index 0000000000000000000000000000000000000000..e33f4289b586c1d4d91ab2a6c8a6f0fd6bc10aa1 --- /dev/null +++ b/roles/dev_images/tasks/build_image.yml @@ -0,0 +1,22 @@ +- name: Inspect a single image + community.docker.docker_image_info: + name: "{{ image.image_name }}:{{ image.image_tag }}" + register: image_exists + +- name: Stop if image exists + ansible.builtin.meta: end_play + when: image_exists.images | length > 0 + +- name: Get VM image + amazon.aws.aws_s3: + aws_access_key: "{{ s3.access_key }}" + aws_secret_key: "{{ s3.secret_key }}" + region: "{{ s3.region }}" + bucket: "{{ s3.bucket }}" + object: "{{ image.vm_image }}" + dest: "$HOME/vrnetlab/{{ image.integration }}/{{ image.vm_image }}" + mode: get + +- name: Build/install the docker image + community.general.make: + chdir: "$HOME/vrnetlab/{{ image.integration }}" diff --git a/roles/dev_images/tasks/import_image.yml b/roles/dev_images/tasks/import_image.yml new file mode 100644 index 0000000000000000000000000000000000000000..8144ec18d9105166855bcea98bf8ee6f7b976b7e --- /dev/null +++ b/roles/dev_images/tasks/import_image.yml @@ -0,0 +1,42 @@ +- name: Inspect a single image + community.docker.docker_image_info: + name: "{{ image.image_name }}:{{ image.image_tag }}" + register: image_exists + +- name: Stop if image exists + ansible.builtin.meta: end_play + when: image_exists.images | length > 0 + +- name: Get VM images + amazon.aws.aws_s3: + aws_access_key: "{{ s3.access_key }}" + aws_secret_key: "{{ s3.secret_key }}" + region: "{{ s3.region }}" + bucket: "{{ s3.bucket }}" + object: "{{ image.filename }}" + dest: "/tmp/{{ image.filename }}" + mode: get + +# - name: Add docker images +# community.docker.docker_image: +# docker_host: "unix:/run/docker.sock" +# name: "{{ item.image_name }}" +# tag: "{{ item.image_tag }}" +# load_path: "/tmp/{{ item.filename }}" +# source: load +# state: present +# loop: +# - filename: cEOS-lab-4.28.2.1F.tar +# image_name: ceos +# image_tag: 4.28.1.1F + + +- name: Add docker images + # community.docker.docker_image doesn't work in this case + ansible.builtin.shell: + cmd: "docker image import /tmp/{{ image.filename }} {{ image.image_name }}:{{ image.image_tag }}" + +- name: Remove downloaded file + ansible.builtin.file: + path: "/tmp/{{ image.filename }}" + state: absent diff --git a/roles/dev_images/tasks/main.yml b/roles/dev_images/tasks/main.yml new file mode 100644 index 0000000000000000000000000000000000000000..5d1180ef47c051a77ff12a614d2aca862c0c4b53 --- /dev/null +++ b/roles/dev_images/tasks/main.yml @@ -0,0 +1,23 @@ +- name: Install Packages + ansible.builtin.apt: + pkg: + - git + - make + +- name: Clone vrnetlab + ansible.builtin.git: + repo: https://github.com/hellt/vrnetlab + version: v0.8.1 + dest: $HOME/vrnetlab + +- name: Build vrnetlab images + ansible.builtin.include_tasks: build_image.yml + loop: "{{ vrnetlab_images }}" + loop_control: + loop_var: image + +- name: Import normal images + ansible.builtin.include_tasks: import_image.yml + loop: "{{ normal_images }}" + loop_control: + loop_var: image diff --git a/roles/dev_networks/files/lab01/vmx1.cfg b/roles/dev_networks/files/lab01/vmx1.cfg new file mode 100644 index 0000000000000000000000000000000000000000..b3b28e0e2ec7bd3cd486c284e42b37442def54d6 --- /dev/null +++ b/roles/dev_networks/files/lab01/vmx1.cfg @@ -0,0 +1,5 @@ +configure +set interfaces ge-0/0/0 unit 0 family inet address 192.168.1.2/24 +set interfaces ge-0/0/1 unit 1 family inet address 192.168.1.3/24 +set interfaces ge-0/0/2 unit 2 family inet address 192.168.1.4/24 +commit \ No newline at end of file diff --git a/roles/dev_networks/files/lab01/vmx2.cfg b/roles/dev_networks/files/lab01/vmx2.cfg new file mode 100644 index 0000000000000000000000000000000000000000..31d78460f025fe1f23a97fc398bdf9aeaa40e895 --- /dev/null +++ b/roles/dev_networks/files/lab01/vmx2.cfg @@ -0,0 +1,5 @@ +configure +set interfaces ge-0/0/0 unit 0 family inet address 192.168.2.2/24 +set interfaces ge-0/0/1 unit 1 family inet address 192.168.2.3/24 +set interfaces ge-0/0/2 unit 2 family inet address 192.168.2.4/24 +commit \ No newline at end of file diff --git a/roles/dev_networks/files/lab01/vr-vmx.clab.yml b/roles/dev_networks/files/lab01/vr-vmx.clab.yml new file mode 100644 index 0000000000000000000000000000000000000000..75f4b8545573db28d93e846b0a1fbd8cbed5d5ff --- /dev/null +++ b/roles/dev_networks/files/lab01/vr-vmx.clab.yml @@ -0,0 +1,15 @@ +name: vr-vmx + +topology: + nodes: + vmx1: + kind: vr-vmx + image: vrnetlab/vr-vmx:18.2R1.9 + startup-config: vmx1.cfg + vmx2: + kind: vr-vmx + image: vrnetlab/vr-vmx:18.2R1.9 + startup-config: vmx2.cfg + + links: + - endpoints: ["vmx1:eth1", "vmx2:eth1"] diff --git a/roles/dev_networks/tasks/main.yml b/roles/dev_networks/tasks/main.yml new file mode 100644 index 0000000000000000000000000000000000000000..fa9b7321a3e782ccd9cebd10048e7173cfc5bd78 --- /dev/null +++ b/roles/dev_networks/tasks/main.yml @@ -0,0 +1,6 @@ +- name: Copy lab01 project to remote + ansible.builtin.copy: + src: lab01 + dest: $HOME + directory_mode: '0755' + mode: '0644' diff --git a/roles/dev_networks/templates/ceosx2.clab.yml.j2 b/roles/dev_networks/templates/ceosx2.clab.yml.j2 new file mode 100644 index 0000000000000000000000000000000000000000..caf1bb07ec41af8c42af2e8f8a81a05733a72456 --- /dev/null +++ b/roles/dev_networks/templates/ceosx2.clab.yml.j2 @@ -0,0 +1,14 @@ +name: ceosx2 + +topology: + nodes: + ceos1: + kind: ceos + image: ceos:4.28.1.1F + ceos2: + kind: ceos + image: ceos:4.28.1.1F + + links: + - endpoints: ["ceos1:eth1", "ceos2:eth1"] + diff --git a/roles/dev_networks/templates/srlceos01.clab.yml.j2 b/roles/dev_networks/templates/srlceos01.clab.yml.j2 new file mode 100644 index 0000000000000000000000000000000000000000..75f1be002dd443b1a116ca94bea9696b53766a78 --- /dev/null +++ b/roles/dev_networks/templates/srlceos01.clab.yml.j2 @@ -0,0 +1,14 @@ +name: srlceos01 + +topology: + nodes: + srl: + kind: srl + image: ghcr.io/nokia/srlinux + ceos: + kind: srl + image: ghcr.io/nokia/srlinux + + links: + - endpoints: ["srl:e1-1", "ceos:e1-1"] +