summaryrefslogtreecommitdiffstats
path: root/playbooks/roles
diff options
context:
space:
mode:
authorMichael S. Pedersen <michaelx.pedersen@intel.com>2020-10-23 12:24:43 +0000
committerRihab Banday <rihab.banday@ericsson.com>2020-11-13 16:24:54 +0000
commit5d28b70edce08ee912c433386599424f8202f303 (patch)
tree98c1246797f5a03f9417d6e1e6843f5bd90e8e09 /playbooks/roles
parente34b4d93d5e288bdbb5ec798602ea5e8f1bc3985 (diff)
Add support for deploying to Equinix Metal bare-metal servers
Adds an additional hw_config which is simplified (equinix-metal). Adds support for skipping HW provisioning (pre-provisioned through EM). Usage: deploy.sh [k8s] Adds a few new helper functions, and updates existing to support changes. Signed-off-by: Michael S. Pedersen <michaelx.pedersen@intel.com> Signed-off-by: Victor Morales <v.morales@samsung.com> Change-Id: I2f84c662d183ba224e0edd8a218abe8b46c1fe45 Signed-off-by: Victor Morales <v.morales@samsung.com> Reviewed-on: https://gerrit.opnfv.org/gerrit/c/kuberef/+/71301 Tested-by: jenkins-ci <jenkins-opnfv-ci@opnfv.org> Reviewed-by: Rihab Banday <rihab.banday@ericsson.com> Reviewed-by: Victor Morales <chipahuac@hotmail.com>
Diffstat (limited to 'playbooks/roles')
-rw-r--r--playbooks/roles/bmra-config/templates/inventory.ini1
-rw-r--r--playbooks/roles/jump-vm/tasks/main.yaml32
-rw-r--r--playbooks/roles/jump-vm/templates/network-config.j22
-rw-r--r--playbooks/roles/jump-vm/templates/user-data.j227
-rw-r--r--playbooks/roles/pre-install/molecule/default/converge.yml16
-rw-r--r--playbooks/roles/pre-install/molecule/default/molecule.yml26
-rw-r--r--playbooks/roles/pre-install/molecule/default/tests/test_default.py26
-rw-r--r--playbooks/roles/pre-install/tasks/main.yml20
-rw-r--r--playbooks/roles/pre-install/vars/RedHat.yml14
9 files changed, 146 insertions, 18 deletions
diff --git a/playbooks/roles/bmra-config/templates/inventory.ini b/playbooks/roles/bmra-config/templates/inventory.ini
index 48ca5fd..7a9c6ab 100644
--- a/playbooks/roles/bmra-config/templates/inventory.ini
+++ b/playbooks/roles/bmra-config/templates/inventory.ini
@@ -10,7 +10,6 @@
{{ idf.kubespray.hostnames[node.name] }}
{% endif %}
{% endfor %}
-
{% endfor %}
[k8s-cluster:children]
diff --git a/playbooks/roles/jump-vm/tasks/main.yaml b/playbooks/roles/jump-vm/tasks/main.yaml
index 2c0cc37..c5738c3 100644
--- a/playbooks/roles/jump-vm/tasks/main.yaml
+++ b/playbooks/roles/jump-vm/tasks/main.yaml
@@ -33,6 +33,16 @@
when:
jumphost.name in shutdown_vms.list_vms
+- name: remove dhcp leases
+ shell: |
+ jq 'del( .[] | select(.domain == "{{ jumphost.name }}" or .hostname == "{{ jumphost.name }}"))' /var/lib/libvirt/dnsmasq/virbr0.{{ item }} > /tmp/{{ item }}.tmp
+ mv /tmp/{{ item }}.tmp /var/lib/libvirt/dnsmasq/virbr0.{{ item }}
+ with_items:
+ - status
+ - macs
+ become: true
+ when: deployment_type == 'k8s'
+
- name: clean workspace
file:
path: "{{ workspace }}"
@@ -71,8 +81,9 @@
- 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"
+ command: "genisoimage -output {{ workspace }}/{{ jumphost.name }}-cidata.iso -volid cidata -joliet -rock \
+ {{ workspace }}/user-data {{ workspace }}/meta-data \
+ {{ workspace + '/network-config' if deployment_type == 'full' else '' }}"
# currently commented out because of portability issues between Centos and Ubuntu
# - name: setting root password for debugging
@@ -85,7 +96,7 @@
--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=rtl8139,mac='{{ jumphost.interfaces[engine.net_config[engine.pxe_network].interface].mac_address }}' \
+ {{ '--network bridge=pxebr,model=rtl8139,mac=' + jumphost.interfaces[engine.net_config[engine.pxe_network].interface].mac_address if deployment_type == 'full' else '' }} \
--import --noautoconsole"
- name: start jump VM
@@ -93,7 +104,20 @@
name: "{{ jumphost.name }}"
state: running
+- name: wait for ip to be visible
+ shell: virsh domifaddr "{{ jumphost.name }}" --full | grep "{{ jumphost.interfaces[engine.net_config[engine.public_network].interface].mac_address }}" | awk '{print $4}' | tail -n 1
+ register: ipblock
+ retries: 30
+ delay: 1
+ until: ipblock.stdout != ""
+ when: deployment_type == 'k8s'
+
+- name: store ip
+ set_fact:
+ vm_ip: "{{ ipblock.stdout.split('/') }}"
+ when: deployment_type == 'k8s'
+
- name: wait for VM to be reachable
wait_for:
- host: "{{ jumphost.interfaces[idf.net_config[engine.pxe_network].interface].address }}"
+ host: "{{ ( vm_ip is defined and vm_ip.0 or '' ) if 'k8s' in deployment_type else jumphost.interfaces[idf.net_config[engine.pxe_network].interface].address | default('') }}"
port: 22
diff --git a/playbooks/roles/jump-vm/templates/network-config.j2 b/playbooks/roles/jump-vm/templates/network-config.j2
index ceded54..8587a10 100644
--- a/playbooks/roles/jump-vm/templates/network-config.j2
+++ b/playbooks/roles/jump-vm/templates/network-config.j2
@@ -1,3 +1,4 @@
+{% if deployment_type == 'full' %}
version: 1
config:
- type: physical
@@ -12,3 +13,4 @@ config:
- type: static
address: "{{ jumphost.interfaces[idf.net_config[engine.pxe_network].interface].address }}"
netmask: "{{ idf.net_config[engine.pxe_network].mask }}"
+{% endif %}
diff --git a/playbooks/roles/jump-vm/templates/user-data.j2 b/playbooks/roles/jump-vm/templates/user-data.j2
index 648f8d1..2fad2e3 100644
--- a/playbooks/roles/jump-vm/templates/user-data.j2
+++ b/playbooks/roles/jump-vm/templates/user-data.j2
@@ -1,13 +1,14 @@
- #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 ]
+#jinja2:lstrip_blocks: True
+#cloud-config
+users:
+ - name: {{ lookup('env', 'USERNAME') }}
+ 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 ]
diff --git a/playbooks/roles/pre-install/molecule/default/converge.yml b/playbooks/roles/pre-install/molecule/default/converge.yml
new file mode 100644
index 0000000..c7904cf
--- /dev/null
+++ b/playbooks/roles/pre-install/molecule/default/converge.yml
@@ -0,0 +1,16 @@
+---
+# SPDX-license-identifier: Apache-2.0
+##############################################################################
+# Copyright (c) 2020 Samsung Electronics
+# 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: Converge
+ hosts: all
+ gather_facts: true
+ roles:
+ - role: pre-install
+ inventory_path: /home/kuberef/inventory
diff --git a/playbooks/roles/pre-install/molecule/default/molecule.yml b/playbooks/roles/pre-install/molecule/default/molecule.yml
new file mode 100644
index 0000000..a43f45f
--- /dev/null
+++ b/playbooks/roles/pre-install/molecule/default/molecule.yml
@@ -0,0 +1,26 @@
+---
+# SPDX-license-identifier: Apache-2.0
+##############################################################################
+# Copyright (c) 2020 Samsung Electronics
+# 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
+##############################################################################
+dependency:
+ name: galaxy
+driver:
+ name: docker
+lint: |
+ set -e
+ yamllint -c ../../../.yamllint .
+ ansible-lint
+platforms:
+ - name: centos_7
+ image: centos:7
+provisioner:
+ name: ansible
+verifier:
+ name: testinfra
+ lint:
+ name: flake8
diff --git a/playbooks/roles/pre-install/molecule/default/tests/test_default.py b/playbooks/roles/pre-install/molecule/default/tests/test_default.py
new file mode 100644
index 0000000..c992994
--- /dev/null
+++ b/playbooks/roles/pre-install/molecule/default/tests/test_default.py
@@ -0,0 +1,26 @@
+# Copyright 2020 Samsung Electronics
+#
+# Licensed under the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License. You may obtain
+# a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+# License for the specific language governing permissions and limitations
+# under the License.#
+#
+
+import os
+import pytest
+
+import testinfra.utils.ansible_runner
+
+testinfra_hosts = testinfra.utils.ansible_runner.AnsibleRunner(
+ os.environ['MOLECULE_INVENTORY_FILE']
+).get_hosts('all')
+def test_requirements_installed(host):
+ for pkg in ["lshw", "pciutils", "ethtool"]:
+ assert host.package(pkg).is_installed
diff --git a/playbooks/roles/pre-install/tasks/main.yml b/playbooks/roles/pre-install/tasks/main.yml
new file mode 100644
index 0000000..db6534d
--- /dev/null
+++ b/playbooks/roles/pre-install/tasks/main.yml
@@ -0,0 +1,20 @@
+---
+# SPDX-license-identifier: Apache-2.0
+##############################################################################
+# Copyright (c) 2020 Samsung Electronics
+# 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: Load distro variables
+ include_vars:
+ file: "{{ ansible_os_family }}.yml"
+
+- name: Install BRMA requirements
+ become: true
+ package:
+ name: "{{ item }}"
+ state: present
+ with_items: "{{ bmra_pkgs }}"
diff --git a/playbooks/roles/pre-install/vars/RedHat.yml b/playbooks/roles/pre-install/vars/RedHat.yml
new file mode 100644
index 0000000..5adac50
--- /dev/null
+++ b/playbooks/roles/pre-install/vars/RedHat.yml
@@ -0,0 +1,14 @@
+---
+# SPDX-license-identifier: Apache-2.0
+##############################################################################
+# Copyright (c) 2020 Samsung Electronics
+# 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
+##############################################################################
+
+bmra_pkgs:
+ - lshw
+ - pciutils
+ - ethtool