summaryrefslogtreecommitdiffstats
path: root/playbooks
diff options
context:
space:
mode:
Diffstat (limited to 'playbooks')
-rw-r--r--playbooks/bootstrap.yaml17
-rw-r--r--playbooks/jump-vm.yaml16
-rw-r--r--playbooks/roles/bootstrap/tasks/main.yaml20
-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
7 files changed, 180 insertions, 0 deletions
diff --git a/playbooks/bootstrap.yaml b/playbooks/bootstrap.yaml
new file mode 100644
index 0000000..4ef2baa
--- /dev/null
+++ b/playbooks/bootstrap.yaml
@@ -0,0 +1,17 @@
+---
+# SPDX-license-identifier: Apache-2.0
+##############################################################################
+# 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
+##############################################################################
+
+- hosts: localhost
+ connection: local
+ gather_facts: false
+ become: false
+
+ roles:
+ - role: bootstrap
diff --git a/playbooks/jump-vm.yaml b/playbooks/jump-vm.yaml
new file mode 100644
index 0000000..bdad81c
--- /dev/null
+++ b/playbooks/jump-vm.yaml
@@ -0,0 +1,16 @@
+---
+##############################################################################
+# 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
+##############################################################################
+
+- hosts: localhost
+ connection: local
+ gather_facts: false
+ become: false
+
+ roles:
+ - role: jump-vm
diff --git a/playbooks/roles/bootstrap/tasks/main.yaml b/playbooks/roles/bootstrap/tasks/main.yaml
new file mode 100644
index 0000000..ff20552
--- /dev/null
+++ b/playbooks/roles/bootstrap/tasks/main.yaml
@@ -0,0 +1,20 @@
+---
+##############################################################################
+# 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
+##############################################################################
+
+# collected PDF and IDF are copied into group_vars
+# folder in order to ensure we have single PDF and IDF
+- name: Copy collected PDF and IDF to group_vars
+ copy:
+ src: "{{ item.src }}"
+ dest: "{{ item.dest }}"
+ force: true
+ mode: 0644
+ with_items:
+ - {src: "{{ kuberef_root }}/hw_config/{{ lookup('env', 'VENDOR') }}/pdf.yaml", dest: "{{ inventory_path }}/group_vars/all/pdf.yaml"}
+ - {src: "{{ kuberef_root }}/hw_config/{{ lookup('env', 'VENDOR') }}/idf.yaml", dest: "{{ inventory_path }}/group_vars/all/idf.yaml"}
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 ]