From 8094d3de4bdebcb6d54dbae215d41dbb75564791 Mon Sep 17 00:00:00 2001
From: Karel van Klink <karel.vanklink@geant.org>
Date: Tue, 31 Jan 2023 11:52:29 +0100
Subject: [PATCH] Update ContainerLab install and test

Add test topology
Add plays that run test topology, inspect, and destroy when finished
Delete unused groups gap_repos and kvm
Update README.md
---
 README.md                                     | 18 ++++----
 deploy_repos.yaml                             |  5 ---
 group_vars/dev_environments.yml               | 20 ++-------
 roles/containerlab/tasks/main.yml             | 41 +++++++++++++++++++
 .../templates/test_topology.clab.yml          |  9 ++++
 roles/gap_repos/tasks/main.yml                | 37 -----------------
 roles/kvm/tasks/main.yml                      | 10 -----
 7 files changed, 61 insertions(+), 79 deletions(-)
 delete mode 100644 deploy_repos.yaml
 create mode 100644 roles/containerlab/templates/test_topology.clab.yml
 delete mode 100644 roles/gap_repos/tasks/main.yml
 delete mode 100644 roles/kvm/tasks/main.yml

diff --git a/README.md b/README.md
index bc54638..a4c7d21 100644
--- a/README.md
+++ b/README.md
@@ -1,6 +1,6 @@
-Ansible playbook for deploying a containerlab node
+# Ansible playbook for deploying a ContainerLab node
 
-This playbook is used to install containerlab on a VM, and test network configurations.
+This playbook is used to install ContainerLab on a VM, and test network configurations.
 
 To run this playbook:
 
@@ -8,20 +8,16 @@ To run this playbook:
  2. Get the ip address of the new VM, and configure your ssh environment
  3. Create & activate a python virtual environment and install ansible
  4. Update inventory.yml so that your VM is defined in the "dev_environments" goup
- 5. Run ansible like this: ansible-playbook -i inventory.yml playbook.yml
-
- note: to run ansible, you'll also need to update group_vars/dev_environments.yml with the S3 access key & secret
-
-Containerlab project template(s) are installed from here, in the ~nat users's home directory:
-https://gitlab.geant.org/nat/ansible-containerlab/-/tree/main/roles/dev_networks/files
-
+ 5. update group_vars/dev_environments.yml with your gitlab.geant.net username and personal access token  
+ 6. Run ansible like this: ansible-playbook -i inventory.yml playbook.yml
+ 
 To ssh into the nat user's shell, you'll need the containerlab-rsa private key ("b3BlbnNzaC1rZXktdjEAAAAABG5...")
 
-To start containerlab (e.g. project lab01):
+To start ContainerLab (e.g. project lab01):
  1. shell into the nat user
  2. cd lab01
  3. sudo containerlab deploy
 
-To view the currently running containerlab status:
+To view the currently running ContainerLab status:
  1. navigate to the same directory as above (e.g. lab01)
  2. sudo containerlab inspect
diff --git a/deploy_repos.yaml b/deploy_repos.yaml
deleted file mode 100644
index e70253a..0000000
--- a/deploy_repos.yaml
+++ /dev/null
@@ -1,5 +0,0 @@
-- name: System Setup
-  hosts: dev_environments
-  become: true
-  roles:
-    - gap_repos
diff --git a/group_vars/dev_environments.yml b/group_vars/dev_environments.yml
index cb17ff1..ce4e138 100644
--- a/group_vars/dev_environments.yml
+++ b/group_vars/dev_environments.yml
@@ -1,18 +1,6 @@
-s3:
-  access_key: XXXXXXXXXXXXXXXXX
-  secret_key: XXXXXXXXXXXXXXXXX
-  region: eu-central-1
-  bucket: geant-nat-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
+docker:
+  registry_url: gitlab.geant.net:5005/docker/ci_registry
+  username: # first.lastname
+  private_token: # some-secret-token
 
 nat_user: nat
diff --git a/roles/containerlab/tasks/main.yml b/roles/containerlab/tasks/main.yml
index 6cab3f4..d449a89 100644
--- a/roles/containerlab/tasks/main.yml
+++ b/roles/containerlab/tasks/main.yml
@@ -10,3 +10,44 @@
   ansible.builtin.apt:
     pkg:
       - containerlab
+
+- name: Log in on Docker repository
+  community.docker.docker_login:
+    registry_url: '{{ docker.registry_url }}'
+    username: '{{ docker.username }}'
+    password: '{{ docker.private_token }}'
+
+- name: Pull vMX image from Docker repository
+  community.docker.docker_image:
+    name: '{{ docker.registry_url }}/vrnetlab/vr-vmx:18.2R1.9'
+    source: pull
+
+- name: Move test topology onto remote machine
+  ansible.builtin.template:
+    src: test_topology.clab.yml
+    dest: /root/test_topology.clab.yml
+  become: true
+
+- name: Run test topology
+  ansible.builtin.command:
+    chdir: /root
+    cmd: containerlab deploy
+  become: true
+
+- name: Inspect current ContainerLab topology
+  ansible.builtin.command:
+    chdir: /root
+    cmd: containerlab inspect --format json
+  become: true
+  register: deploy_output
+
+- name: Return ContainerLab deploy result
+  ansible.builtin.debug:
+    msg: '{{ deploy_output.stdout }}'
+  when: deploy_output is defined
+
+- name: Destroy ContainerLab test environment
+  ansible.builtin.command:
+    chdir: /root
+    cmd: containerlab destroy
+  become: true
diff --git a/roles/containerlab/templates/test_topology.clab.yml b/roles/containerlab/templates/test_topology.clab.yml
new file mode 100644
index 0000000..484b10b
--- /dev/null
+++ b/roles/containerlab/templates/test_topology.clab.yml
@@ -0,0 +1,9 @@
+name: test_topology
+
+topology:
+  kinds:
+    vr-vmx:
+      image: '{{ docker.registry_url }}/vrnetlab/vr-vmx:18.2R1.9'
+  nodes:
+    vmx1:
+      kind: vr-vmx
diff --git a/roles/gap_repos/tasks/main.yml b/roles/gap_repos/tasks/main.yml
deleted file mode 100644
index 629befb..0000000
--- a/roles/gap_repos/tasks/main.yml
+++ /dev/null
@@ -1,37 +0,0 @@
----
-# tasks file for gap_repos
-#
-#- name: Git clone GAP test inventory 
-#  shell: "git clone git@gitlab.geant.org:nat/gap_test_inventory.git /var/tmp/inventory"
-#  delegate_to: localhost
-- name: Get the username running the deploy
-  become: false
-  local_action: command whoami
-  register: local_username
-
-- name: Git checkout GAP Ansible repo
-  ansible.builtin.git:
-    repo: git@gitlab.geant.org:nat/uat_environment/lab_network_ansible.git
-    dest: /var/tmp/gap_ansible
-    #version: release-0.22
-  delegate_to: localhost
-  become_user: "{{ local_username.stdout }}"
-
-- name: Git checkout GAP reference topology
-  ansible.builtin.git:
-    repo: git@gitlab.geant.org:nat/cl-topologies/reference_topology.git
-    dest: /var/tmp/gap_reference_topology
-    clone: yes
-    #version: release-0.22
-  delegate_to: localhost
-  become_user: "{{ local_username.stdout }}"
-
-- name: Copy GAP Ansible on the target
-  ansible.builtin.copy: 
-    src: /var/tmp/gap_ansible 
-    dest: ~/gap_reference_topolog/gap_ansible
-
-- name: Copy GAP Refernece topoloy on the target
-  ansible.builtin.copy: 
-    src: /var/tmp/gap_reference_topology 
-    dest: ~/
diff --git a/roles/kvm/tasks/main.yml b/roles/kvm/tasks/main.yml
deleted file mode 100644
index da315fb..0000000
--- a/roles/kvm/tasks/main.yml
+++ /dev/null
@@ -1,10 +0,0 @@
-- name: Install Packages
-  ansible.builtin.apt:
-    pkg:
-      - qemu-kvm
-      - virt-manager
-      - libvirt-daemon-system
-      - virtinst
-      - libvirt-clients
-      - bridge-utils
-    update_cache: true
-- 
GitLab