summaryrefslogtreecommitdiffstats
path: root/playbooks/roles/jump-vm
diff options
context:
space:
mode:
Diffstat (limited to 'playbooks/roles/jump-vm')
-rw-r--r--playbooks/roles/jump-vm/tasks/main.yaml99
-rw-r--r--playbooks/roles/jump-vm/templates/meta-data.j21
-rw-r--r--playbooks/roles/jump-vm/templates/network-config.j214
-rw-r--r--playbooks/roles/jump-vm/templates/user-data.j213
4 files changed, 127 insertions, 0 deletions
diff --git a/playbooks/roles/jump-vm/tasks/main.yaml b/playbooks/roles/jump-vm/tasks/main.yaml
new file mode 100644
index 0000000..f5f6154
--- /dev/null
+++ b/playbooks/roles/jump-vm/tasks/main.yaml
@@ -0,0 +1,99 @@
+---
+##############################################################################
+# Copyright (c) Ericsson AB and others
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Apache License, Version 2.0
+# which accompanies this distribution, and is available at
+# http://www.apache.org/licenses/LICENSE-2.0
+##############################################################################
+
+- name: get all running VMs
+ virt:
+ command: list_vms
+ state: running
+ register: running_vms
+
+- name: shutdown existing jump VM
+ virt:
+ name: "{{ jumphost.name }}"
+ command: destroy
+ when:
+ jumphost.name in running_vms.list_vms
+
+- name: get all shutdown VMs
+ virt:
+ command: list_vms
+ state: shutdown
+ register: shutdown_vms
+
+- name: undefine existing jump VM
+ virt:
+ name: "{{ jumphost.name }}"
+ command: undefine
+ when:
+ jumphost.name in shutdown_vms.list_vms
+
+- name: clean workspace
+ file:
+ path: "{{ workspace }}"
+ state: absent
+
+- name: create workspace if it does not exist
+ file:
+ path: "{{ workspace }}"
+ state: directory
+ mode: '0755'
+
+- name: create directory for base images
+ file:
+ path: "{{ images_path }}"
+ state: directory
+ mode: '0755'
+
+- name: download Ubuntu image for jump VM
+ get_url:
+ url: https://cloud-images.ubuntu.com/bionic/current/bionic-server-cloudimg-amd64.img
+ dest: "{{ images_path }}/bionic-server-cloudimg-amd64.img"
+ force: false
+ mode: '0666'
+
+- name: create new VM image from base image
+ command: "qemu-img create -f qcow2 -o backing_file={{ images_path }}/bionic-server-cloudimg-amd64.img {{ workspace }}/{{ jumphost.name }}.qcow2 10G"
+
+- name: render config files for jump VM from templates
+ template:
+ src: "{{ kuberef_root }}/playbooks/roles/jump-vm/templates/{{ item }}.j2"
+ dest: "{{ workspace }}/{{ item }}"
+ mode: 0644
+ with_items:
+ - network-config
+ - user-data
+ - meta-data
+
+- name: create config drive
+ command: "genisoimage -output {{ workspace }}/{{ jumphost.name }}-cidata.iso -volid cidata -joliet -rock \
+ {{ workspace }}/user-data {{ workspace }}/meta-data {{ workspace }}/network-config"
+
+# currently commented out because of portability issues between Centos and Ubuntu
+# - name: setting root password for debugging
+# become: true
+# command: "virt-customize -a {{ workspace }}/{{ jumphost.name }}.qcow2 --root-password password:'root'"
+
+- name: define jump VM
+ command: "virt-install --connect qemu:///system --name {{ jumphost.name }} \
+ --ram 4096 --vcpus=4 --os-type linux --os-variant ubuntu16.04 \
+ --disk path={{ workspace }}/kuberef-jump.qcow2,format=qcow2 \
+ --disk {{ workspace }}/kuberef-jump-cidata.iso,device=cdrom \
+ --network network=default,model=virtio,mac='{{ jumphost.interfaces[engine.net_config[engine.public_network].interface].mac_address }}' \
+ --network bridge=pxebr,model=virtio,mac='{{ jumphost.interfaces[engine.net_config[engine.pxe_network].interface].mac_address }}' \
+ --import --noautoconsole"
+
+- name: start jump VM
+ virt:
+ name: "{{ jumphost.name }}"
+ state: running
+
+- name: wait for VM to be reachable
+ wait_for:
+ host: "{{ jumphost.interfaces[idf.net_config[engine.pxe_network].interface].address }}"
+ port: 22
diff --git a/playbooks/roles/jump-vm/templates/meta-data.j2 b/playbooks/roles/jump-vm/templates/meta-data.j2
new file mode 100644
index 0000000..b4cc5e8
--- /dev/null
+++ b/playbooks/roles/jump-vm/templates/meta-data.j2
@@ -0,0 +1 @@
+local-hostname: {{ jumphost.name }}
diff --git a/playbooks/roles/jump-vm/templates/network-config.j2 b/playbooks/roles/jump-vm/templates/network-config.j2
new file mode 100644
index 0000000..ceded54
--- /dev/null
+++ b/playbooks/roles/jump-vm/templates/network-config.j2
@@ -0,0 +1,14 @@
+version: 1
+config:
+ - type: physical
+ name: "{{ jumphost.interfaces[idf.net_config[engine.public_network].interface].name }}"
+ mac_address: "{{ jumphost.interfaces[idf.net_config[engine.public_network].interface].mac_address }}"
+ subnets:
+ - type: dhcp
+ - type: physical
+ name: "{{ jumphost.interfaces[idf.net_config[engine.pxe_network].interface].name }}"
+ mac_address: "{{ jumphost.interfaces[idf.net_config[engine.pxe_network].interface].mac_address }}"
+ subnets:
+ - type: static
+ address: "{{ jumphost.interfaces[idf.net_config[engine.pxe_network].interface].address }}"
+ netmask: "{{ idf.net_config[engine.pxe_network].mask }}"
diff --git a/playbooks/roles/jump-vm/templates/user-data.j2 b/playbooks/roles/jump-vm/templates/user-data.j2
new file mode 100644
index 0000000..648f8d1
--- /dev/null
+++ b/playbooks/roles/jump-vm/templates/user-data.j2
@@ -0,0 +1,13 @@
+ #cloud-config
+ users:
+ - name: ubuntu
+ ssh-authorized-keys:
+ - {{ lookup('file', pub_key ) }}
+ sudo: ['ALL=(ALL) NOPASSWD:ALL']
+ groups: sudo
+ shell: /bin/bash
+ runcmd:
+ # this is requried in labs where the PXE network is different from
+ # the public network. Without internet connectivity, the installation
+ # of BMRA fails
+ - [ iptables, -t, nat, -A, POSTROUTING, -o, ens3, -j, MASQUERADE ]