From e7ed329bd81c2273c03e94c93c9ce9c1d01cdc86 Mon Sep 17 00:00:00 2001
From: "Suren A. Chilingaryan" <csa@suren.me>
Date: Sat, 1 Apr 2017 04:53:28 +0200
Subject: Initial import

---
 roles/ands_vagrant_vm/README                   | 19 ++++++++++
 roles/ands_vagrant_vm/defaults/main.yml        |  8 ++++
 roles/ands_vagrant_vm/files/rebuild.sh         |  9 +++++
 roles/ands_vagrant_vm/files/run.sh             | 12 ++++++
 roles/ands_vagrant_vm/handlers/main.yml        |  2 +
 roles/ands_vagrant_vm/tasks/main.yml           | 20 ++++++++++
 roles/ands_vagrant_vm/templates/Vagrantfile.j2 | 51 ++++++++++++++++++++++++++
 7 files changed, 121 insertions(+)
 create mode 100644 roles/ands_vagrant_vm/README
 create mode 100644 roles/ands_vagrant_vm/defaults/main.yml
 create mode 100644 roles/ands_vagrant_vm/files/rebuild.sh
 create mode 100755 roles/ands_vagrant_vm/files/run.sh
 create mode 100644 roles/ands_vagrant_vm/handlers/main.yml
 create mode 100644 roles/ands_vagrant_vm/tasks/main.yml
 create mode 100644 roles/ands_vagrant_vm/templates/Vagrantfile.j2

(limited to 'roles/ands_vagrant_vm')

diff --git a/roles/ands_vagrant_vm/README b/roles/ands_vagrant_vm/README
new file mode 100644
index 0000000..ca4f0d5
--- /dev/null
+++ b/roles/ands_vagrant_vm/README
@@ -0,0 +1,19 @@
+Dependencies:
+ - Executed on a single virtualization node
+ - The node should have vagrant configured
+ 
+Parameters:
+ - vagrant_hostname_template                            - The name prefix of generated hosts. I.e. if 'ipekatrin' is specified, the ipekatrin1, ipekatrin2, ... nodes will be produced
+ - vagrant_project                                      - The vagrant project name, just specifies a subdirectory with virtual machines to allow parallel execution of VMs for testing and staging setups
+ - vagrant_projects_dir                                 - Location of all vagrant projects
+ - vagrant_project_dir                                  - Location of this specific vagrant project, normally is vagrant_projects_dir/vagrant_project
+ - vagrant_hosts                                        - Number of VMs to generate, defaults to number of configured ands_hosts (i.e. OpenShift nodes currently)
+ - vagrant_cpu_cores                                    - Number of CPU cores for each VM
+ - vagrant_mem_size                                     - Memory per VM in GB
+ - vagrant_disk_size                                    - Data disk size per VM in GB
+
+Facts:
+
+
+Actions:
+ - Creates and starts VMs
diff --git a/roles/ands_vagrant_vm/defaults/main.yml b/roles/ands_vagrant_vm/defaults/main.yml
new file mode 100644
index 0000000..93d92b6
--- /dev/null
+++ b/roles/ands_vagrant_vm/defaults/main.yml
@@ -0,0 +1,8 @@
+vagrant_hostname_template: ipeands
+vagrant_project: testing
+vagrant_projects_dir: /home/vagrant/projects
+vagrant_project_dir: "/home/vagrant/projects/{{vagrant_project}}"
+vagrant_disk_size: 60200
+vagrant_mem_size: 16384
+vagrant_cpu_cores: 4
+vagrant_hosts: {{ groups.ands_hosts | length }}
diff --git a/roles/ands_vagrant_vm/files/rebuild.sh b/roles/ands_vagrant_vm/files/rebuild.sh
new file mode 100644
index 0000000..73e100d
--- /dev/null
+++ b/roles/ands_vagrant_vm/files/rebuild.sh
@@ -0,0 +1,9 @@
+#! /bin/bash
+
+(
+    cd configs
+
+    vagrant destroy -f
+    vagrant up --parallel
+    vagrant provision
+)
diff --git a/roles/ands_vagrant_vm/files/run.sh b/roles/ands_vagrant_vm/files/run.sh
new file mode 100755
index 0000000..2fceb3d
--- /dev/null
+++ b/roles/ands_vagrant_vm/files/run.sh
@@ -0,0 +1,12 @@
+#! /bin/bash
+
+(
+    cd configs
+
+    VBoxManage hostonlyif ipconfig vboxnet0 --ip 192.168.12.254 --netmask 255.255.255.0
+#    ( ip addr show | grep 12 ) || ip addr add 192.168.12.254/24 dev vboxnet0
+    ( ip addr show | grep 212 ) || ip addr add 192.168.212.254/24 dev vboxnet0
+
+    vagrant up --parallel
+    vagrant provision
+)
diff --git a/roles/ands_vagrant_vm/handlers/main.yml b/roles/ands_vagrant_vm/handlers/main.yml
new file mode 100644
index 0000000..8c4f35d
--- /dev/null
+++ b/roles/ands_vagrant_vm/handlers/main.yml
@@ -0,0 +1,2 @@
+- name: vagrant
+  command: ./run.sh chdir="{{ vagrant_project_dir }}"
diff --git a/roles/ands_vagrant_vm/tasks/main.yml b/roles/ands_vagrant_vm/tasks/main.yml
new file mode 100644
index 0000000..7c3310d
--- /dev/null
+++ b/roles/ands_vagrant_vm/tasks/main.yml
@@ -0,0 +1,20 @@
+---
+- name: Ensure vagrant project dir is existing
+  file: name="{{ vagrant_project_dir }}/{{ item }}" state=directory
+  with_items:
+    - configs
+    - disks
+
+- name: Copy authorized_keys
+  copy: src="~/.ssh/authorized_keys" dest="{{ vagrant_project_dir }}/configs/authorized_keys" owner="root" group="root"
+
+- name: Copy scripts
+  copy: src="{{ item }}" dest="{{ vagrant_project_dir }}/{{ item }}" mode="0755"
+  with_items:
+    - run.sh
+    - rebuild.sh
+
+- name: Install Vagrantfile
+  template: src="Vagrantfile.j2" dest="{{ vagrant_project_dir }}/configs/Vagrantfile"
+  notify:
+    - vagrant
diff --git a/roles/ands_vagrant_vm/templates/Vagrantfile.j2 b/roles/ands_vagrant_vm/templates/Vagrantfile.j2
new file mode 100644
index 0000000..54128d4
--- /dev/null
+++ b/roles/ands_vagrant_vm/templates/Vagrantfile.j2
@@ -0,0 +1,51 @@
+# -*- mode: ruby -*-
+# vi: set ft=ruby :
+{% set net = ands_openshift_network | ipaddr('network') | ipaddr(0) | regex_replace('\.\d+$', '')  %}
+{% set storage_net = ands_storage_network | ipaddr('network') | ipaddr(0) | regex_replace('\.\d+$', '') %}
+{% set netid = (  net | regex_replace('^.*\.', '') ) %}
+{% set storage_netid = (  storage_net | regex_replace('^.*\.', '') ) %}
+{% set macid = ( (netid | length) > 2 ) | ternary(netid, "0" ~ netid) %}
+
+Vagrant.configure("2") do |config|
+  (1..{{ vagrant_hosts }}).each do |i|
+    config.vm.define "{{ vagrant_hostname_template }}#{i}" do |node|
+        node.vm.network "public_network", bridge: "br0", mac: "080027{{ macid  }}02#{i}", ip: "{{ net }}.#{i}"
+        node.vm.network "private_network",  mac: "080027{{ macid }}12#{i}", ip: "{{ storage_net }}.#{i}", name: "vboxnet0"
+        node.vm.box = "centos/7"
+        node.vm.hostname = "{{ vagrant_hostname_template }}#{i}.ipe.kit.edu"
+#	node.vm.synced_folder "../data", "/root/data"
+
+# Configuring DHCP in 'vm.network' causes 2 DHCP clients (dhclinet & nm) running in parallel and getting 2 IPs.
+        node.vm.provision "shell", run: "always", inline: "( ip addr show | grep -v 141.52.64.15 | grep -v 141.52.64.17 | grep -v 141.52.64.28 | grep 141.52 ) || dhclient -cf /var/lib/NetworkManager/dhclient-eth0.conf eth1"
+        node.vm.provision "shell", run: "always", inline: "( ip addr show | grep {{ netid }}.#{i} ) || ip addr add 192.168.{{ netid }}.#{i}/24 dev eth1"
+        node.vm.provision "shell", run: "always", inline: "( ip addr show | grep {{ storage_netid }}.#{i} ) || ifcfg eth2 192.168.{{ storage_netid }}.#{i}"
+        node.vm.provision "shell", run: "always", inline: "chmod +r /etc/sysconfig/network-scripts/ifcfg-eth*"
+        node.vm.provision "shell", run: "always", inline: "chcon --reference /etc/sysconfig/network-scripts/ifcfg-eth0 /etc/sysconfig/network-scripts/ifcfg-eth*"
+        
+        node.vm.provision "shell" do |s|
+            ssh_pub_key = File.readlines("authorized_keys").first.strip
+            s.inline = <<-SHELL
+                mkdir -p /root/.ssh/
+                echo #{ssh_pub_key} >> /root/.ssh/authorized_keys
+            SHELL
+        end
+
+        node.vm.provider "virtualbox" do |vb|
+            vb.memory = "{{ 1024 * (vagrant_mem_size | int) }}"
+            vb.cpus = {{ vagrant_cpu_cores }}
+            #vb.gui = true
+            vb.customize [
+                "modifyvm", :id,
+#               "--ostype", "Linux_64",
+                "--audio", "none",
+            ]
+            vb.customize [
+        	'createhd', '--filename', "../disks/#{i}", '--format', 'VDI', '--size', {{ 1024 * (vagrant_disk_size | int) }}
+            ]
+            vb.customize [
+        	'storageattach', :id, '--storagectl', 'IDE Controller', '--port', 1, '--device', 0,'--type', 'hdd', '--medium', "../disks/#{i}.vdi"
+            ]
+        end
+    end
+  end
+end
-- 
cgit v1.2.3