Install the CORD-in-a-Box head node into the 'prod' VM
Change-Id: I121130e21ae4268a9dbc9d0a6fb8ff8095ffdcc7
diff --git a/ansible/add-extra-drive.yml b/ansible/add-extra-drive.yml
new file mode 100644
index 0000000..22a3a1b
--- /dev/null
+++ b/ansible/add-extra-drive.yml
@@ -0,0 +1,5 @@
+- hosts: localhost
+ remote_user: vagrant
+ serial: 1
+ roles:
+ - extra-drive
diff --git a/ansible/maas-provision.yml b/ansible/maas-provision.yml
new file mode 100644
index 0000000..9b180c5
--- /dev/null
+++ b/ansible/maas-provision.yml
@@ -0,0 +1,5 @@
+- hosts: localhost
+ remote_user: vagrant
+ serial: 1
+ roles:
+ - maas-provision
diff --git a/ansible/roles/extra-drive/defaults/main.yml b/ansible/roles/extra-drive/defaults/main.yml
new file mode 100644
index 0000000..1d16dac
--- /dev/null
+++ b/ansible/roles/extra-drive/defaults/main.yml
@@ -0,0 +1,6 @@
+extra_disk_dev: /dev/vda
+
+extra_disk_links:
+ - { src: /mnt/lxd, dest: /var/lib/lxd }
+ - { src: /mnt/docker-registry, dest: /docker-registry }
+ - { src: /mnt/lxcfs, dest: /var/lib/lxcfs }
diff --git a/ansible/roles/extra-drive/tasks/main.yml b/ansible/roles/extra-drive/tasks/main.yml
new file mode 100644
index 0000000..edf6bde
--- /dev/null
+++ b/ansible/roles/extra-drive/tasks/main.yml
@@ -0,0 +1,36 @@
+- name: Check if the disk is partitioned
+ stat: path={{ extra_disk_dev }}1
+ register: device_stat
+
+- name: Set disk label
+ command: parted {{ extra_disk_dev }} mklabel msdos
+ when: device_stat.stat.exists == false
+
+- name: Create primary partition
+ command: parted {{ extra_disk_dev }} mkpart primary 1 100%
+ when: device_stat.stat.exists == false
+
+- name: Make filesystem
+ filesystem:
+ fstype: ext4
+ dev: "{{ extra_disk_dev }}1"
+
+- name: Mount extra disk
+ mount:
+ name: /mnt
+ src: "{{ extra_disk_dev }}1"
+ fstype: ext4
+ state: mounted
+
+- name: Create directories
+ file:
+ path: "{{ item.src }}"
+ state: directory
+ with_items: "{{ extra_disk_links }}"
+
+- name: Set up links
+ file:
+ src: "{{ item.src }}"
+ dest: "{{ item.dest }}"
+ state: link
+ with_items: "{{ extra_disk_links }}"
diff --git a/ansible/roles/maas-provision/tasks/main.yml b/ansible/roles/maas-provision/tasks/main.yml
new file mode 100644
index 0000000..32e43ea
--- /dev/null
+++ b/ansible/roles/maas-provision/tasks/main.yml
@@ -0,0 +1,37 @@
+# Doesn't seem to be a MAAS module for Ansible yet
+- name: Get MAAS credentials
+ become: yes
+ command: maas-region-admin apikey --username=cord
+ register: maas_key
+ tags:
+ - skip_ansible_lint
+
+- name: Login to MAAS
+ command: maas login cord http://localhost/MAAS/api/1.0 {{ maas_key.stdout }}
+ tags:
+ - skip_ansible_lint
+
+- name: Wait for node to become ready
+ shell: maas cord nodes list|jq -r '.[] | select(.status == 0).system_id'
+ register: nodeid
+ until: nodeid.stdout
+ retries: 40
+ delay: 15
+ tags:
+ - skip_ansible_lint
+
+# We need to be able to reboot the VM on the physical server running CiaB
+- name: Add remote power state
+ command: maas cord node update {{ nodeid.stdout }} power_type="virsh" power_parameters_power_address="qemu+ssh://{{ maas_user }}@10.100.198.1/system" power_parameters_power_id="{{ vagrant_name }}"
+ tags:
+ - skip_ansible_lint
+
+- name: Wait for node to be fully provisioned
+ become: yes
+ shell: /usr/local/bin/get-node-prov-state |jq '.[] | select(.id == "{{ nodeid.stdout }}").status'
+ register: prov_state
+ until: prov_state.stdout == "2"
+ retries: 80
+ delay: 30
+ tags:
+ - skip_ansible_lint
diff --git a/ansible/roles/vlan-stag-ctag/defaults/main.yml b/ansible/roles/vlan-stag-ctag/defaults/main.yml
new file mode 100644
index 0000000..575532f
--- /dev/null
+++ b/ansible/roles/vlan-stag-ctag/defaults/main.yml
@@ -0,0 +1,3 @@
+olt_if: eth1
+s_tag: 222
+c_tag: 111
diff --git a/ansible/roles/vlan-stag-ctag/handlers/main.yml b/ansible/roles/vlan-stag-ctag/handlers/main.yml
new file mode 100644
index 0000000..fdeefb2
--- /dev/null
+++ b/ansible/roles/vlan-stag-ctag/handlers/main.yml
@@ -0,0 +1,2 @@
+- name: Reboot node
+ command: shutdown -r now
diff --git a/ansible/roles/vlan-stag-ctag/tasks/main.yml b/ansible/roles/vlan-stag-ctag/tasks/main.yml
new file mode 100644
index 0000000..c4c325c
--- /dev/null
+++ b/ansible/roles/vlan-stag-ctag/tasks/main.yml
@@ -0,0 +1,8 @@
+- name: Set up /etc/rc.local (creates VLAN interfaces)
+ template:
+ src: templates/rc.local.j2
+ dest: /etc/rc.local
+ mode: 0755
+ owner: root
+ notify:
+ - Reboot node
diff --git a/ansible/roles/vlan-stag-ctag/templates/rc.local.j2 b/ansible/roles/vlan-stag-ctag/templates/rc.local.j2
new file mode 100644
index 0000000..4632053
--- /dev/null
+++ b/ansible/roles/vlan-stag-ctag/templates/rc.local.j2
@@ -0,0 +1,13 @@
+#!/bin/sh -e
+
+# Set up VLAN tagging interface ("simulated OLT")
+ip link add link {{ olt_if }} name {{ olt_if }}.{{ s_tag }} type vlan id {{ s_tag }}
+ip link add link {{ olt_if }}.{{ s_tag }} name {{ olt_if }}.{{ s_tag }}.{{ c_tag }} type vlan id {{ c_tag }}
+ifconfig {{ olt_if }} up
+ifconfig {{ olt_if }}.{{ s_tag }} up
+ifconfig {{ olt_if }}.{{ s_tag }}.{{ c_tag }} up
+
+# Get IP address from vSG
+dhclient {{ olt_if }}.{{ s_tag }}.{{ c_tag }}
+
+exit 0
diff --git a/ansible/testclient.yml b/ansible/testclient.yml
new file mode 100644
index 0000000..404cecc
--- /dev/null
+++ b/ansible/testclient.yml
@@ -0,0 +1,5 @@
+- hosts: localhost
+ remote_user: vagrant
+ serial: 1
+ roles:
+ - vlan-stag-ctag