diff options
author | Georg Kunz <georg.kunz@est.tech> | 2020-08-24 23:09:51 +0200 |
---|---|---|
committer | Rihab Banday <rihab.banday@ericsson.com> | 2020-09-10 10:29:28 +0000 |
commit | cb3895c81c6931482e688a820013f6926644221d (patch) | |
tree | 82f7aa83cb8e407b6437353686dd6177c7227e54 /functions.sh | |
parent | 42b76853c5ba0ad53aa04ae6cab4bd1de2db7b42 (diff) |
Implementing jump VM create via ansible
This patch reimplements the creation of the jump VM as ansible
playbook. The advantage of this approach is a more deterministic
behavior and the ability to render configuration files using
templates based on the pdf and idf.
Moreover, this patch allows to overwrite the VENDOR variable.
This is necessary to allow deployment in different labs via
CI.
The BMRA configuration has not yet been transformed to ansible
template and needs to follow in subsequent patches.
Signed-off-by: Georg Kunz <georg.kunz@est.tech>
Signed-off-by: Victor Morales <v.morales@samsung.com>
Change-Id: I2cde41dcecec7480bddf71ed864f06244a89f1f3
Reviewed-on: https://gerrit.opnfv.org/gerrit/c/kuberef/+/70882
Tested-by: jenkins-ci <jenkins-opnfv-ci@opnfv.org>
Reviewed-by: Victor Morales <chipahuac@hotmail.com>
Diffstat (limited to 'functions.sh')
-rwxr-xr-x | functions.sh | 131 |
1 files changed, 46 insertions, 85 deletions
diff --git a/functions.sh b/functions.sh index 4d75ee1..1229d32 100755 --- a/functions.sh +++ b/functions.sh @@ -1,26 +1,13 @@ #!/bin/bash # SPDX-license-identifier: Apache-2.0 ############################################################################## -# Copyright (c) +# 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 ############################################################################## -# Clean up -clean_up() { - if sudo virsh list --all | grep " ${VM_NAME} .*running" ; then - sudo virsh destroy "$VM_NAME" - fi - if sudo virsh list --all | grep " ${VM_NAME} " ; then - sudo virsh undefine "$VM_NAME" - fi - sudo rm -rf "/var/lib/libvirt/images/$VM_NAME" - sleep 5 -} - - check_prerequisites() { echo "Info : Check prerequisites" @@ -69,84 +56,60 @@ check_prerequisites() { echo "ERROR : Libvirt not found. Please install." exit 1 fi -} - -# Create jumphost VM -create_jump() { -# Create VM image - sudo mkdir -p "/var/lib/libvirt/images/$VM_NAME" - sudo qemu-img create -f qcow2 \ - -o backing_file=/var/lib/libvirt/images/ubuntu-18.04.qcow2 \ - "/var/lib/libvirt/images/$VM_NAME/$VM_NAME.qcow2" 10G - -# Create VM cloud-init configuration files - cat <<EOL > user-data - #cloud-config - users: - - name: $USERNAME - ssh-authorized-keys: - - $(cat "$HOME/.ssh/id_rsa.pub") - sudo: ['ALL=(ALL) NOPASSWD:ALL'] - groups: sudo - shell: /bin/bash -EOL - cat <<EOL > meta-data - local-hostname: $VM_NAME -EOL - -# Create VM - sudo genisoimage -output "/var/lib/libvirt/images/$VM_NAME/$VM_NAME-cidata.iso" \ - -volid cidata -joliet -rock user-data meta-data - sudo virt-customize -a "/var/lib/libvirt/images/$VM_NAME/$VM_NAME.qcow2" \ - --root-password password:"$ROOT_PASSWORD" - sudo virt-install --connect qemu:///system --name "$VM_NAME" \ - --ram 4096 --vcpus=4 --os-type linux --os-variant ubuntu16.04 \ - --disk path="/var/lib/libvirt/images/$VM_NAME/$VM_NAME.qcow2",format=qcow2 \ - --disk "/var/lib/libvirt/images/$VM_NAME/$VM_NAME-cidata.iso",device=cdrom \ - --import --network network=default --network bridge="$BRIDGE",model=rtl8139 --noautoconsole - jumpbox_ip=$(get_vm_ip) - i=0 - while [ -z "$jumpbox_ip" ]; do - sleep $((++i)) - jumpbox_ip=$(get_vm_ip) - done - i=0 - until nc -w5 -z "$jumpbox_ip" 22; do - sleep $((++i)) - done + #------------------------------------------------------------------------------- + # Check if user belongs to libvirt's group + #------------------------------------------------------------------------------- + libvirt_group="libvirt" + # shellcheck disable=SC1091 + source /etc/os-release || source /usr/lib/os-release + if [ "${ID,,}" == "ubuntu" ] && [ "$VERSION_ID" == "16.04" ]; then + libvirt_group+="d" + fi + if ! groups | grep " $libvirt_group "; then + echo "ERROR : $(id -nu) user doesn't belong to $libvirt_group group." + exit 1 + fi } # Get jumphost VM IP -get_vm_ip() { - sudo virsh domifaddr "$VM_NAME" | awk 'FNR == 3 {gsub(/\/.*/, ""); print $4}' -} +get_host_pxe_ip() { + local PXE_NETWORK + local PXE_IF_INDEX + local PXE_IF_IP + + host=$1 + if [[ "$host" == "" ]]; then + echo "ERROR : get_ip - host parameter not provided" + exit 1 + fi -# Setup PXE network -setup_PXE_network() { -# Extract configuration from PDF/IDF - PXE_IF=$(yq r "$CURRENTPATH"/hw_config/"$VENDOR"/idf.yaml engine.pxe_interface) - PXE_IF_INDEX=$(yq r "$CURRENTPATH"/hw_config/"${VENDOR}"/idf.yaml idf.net_config.oob.interface) - if [[ -z $PXE_IF || -z $PXE_IF_INDEX ]]; then - echo 'one or more variables in IDF are undefined' + PXE_NETWORK=$(yq r "$CURRENTPATH"/hw_config/"$VENDOR"/idf.yaml engine.pxe_network) + if [[ "$PXE_NETWORK" == "" ]]; then + echo "ERROR : PXE network for jump VM not defined in IDF." exit 1 fi - PXE_IF_IP=$(yq r "$CURRENTPATH"/hw_config/"$VENDOR"/pdf.yaml jumphost.interfaces.["$PXE_IF_INDEX"].address) - PXE_IF_MAC=$(yq r "$CURRENTPATH"/hw_config/"$VENDOR"/pdf.yaml jumphost.interfaces.["$PXE_IF_INDEX"].mac_address) - if [[ -z $PXE_IF_IP || -z $PXE_IF_MAC ]]; then - echo 'one or more variables in PDF are incorrect' + + PXE_IF_INDEX=$(yq r "$CURRENTPATH"/hw_config/"${VENDOR}"/idf.yaml idf.net_config."$PXE_NETWORK".interface) + if [[ "$PXE_IF_INDEX" == "" ]]; then + echo "ERROR : Index of PXE interface not found in IDF." exit 1 fi - export NETMASK=255.255.255.0 -# SSH to jumphost - # shellcheck disable=SC2087 - ssh -o StrictHostKeyChecking=no -tT "$USERNAME"@"$(get_vm_ip)" << EOF -sudo ifconfig $PXE_IF up -sudo ifconfig $PXE_IF $PXE_IF_IP netmask $NETMASK -sudo ifconfig $PXE_IF hw ether $PXE_IF_MAC -EOF + + PXE_IF_IP=$(yq r "$CURRENTPATH"/hw_config/"${VENDOR}"/pdf.yaml "$host".interfaces["$PXE_IF_INDEX"].address) + if [[ "$PXE_IF_IP" == "" ]]; then + echo "ERROR : IP of PXE interface not found in PDF." + exit 1 + fi + echo "$PXE_IF_IP" } +get_vm_ip() { + ip=$(get_host_pxe_ip "jumphost") + echo "$ip" +} + + # Copy files needed by Infra engine & BMRA in the jumphost VM copy_files_jump() { scp -r -o StrictHostKeyChecking=no \ @@ -174,10 +137,8 @@ EOF # Setup networking on provisioned hosts (Adapt setup_network.sh according to your network setup) setup_network() { -# Extract IPs of provisioned nodes from PDF/IDF. When running this function standalone, ensure -# to set $PXE_IF_INDEX - MASTER_IP=$(yq r "$CURRENTPATH"/hw_config/"$VENDOR"/pdf.yaml nodes.[0].interfaces.["$PXE_IF_INDEX"].address) - WORKER_IP=$(yq r "$CURRENTPATH"/hw_config/"$VENDOR"/pdf.yaml nodes.[1].interfaces.["$PXE_IF_INDEX"].address) + MASTER_IP=$(get_host_pxe_ip "nodes[0]") + WORKER_IP=$(get_host_pxe_ip "nodes[1]") # SSH to jumphost # shellcheck disable=SC2087 ssh -o StrictHostKeyChecking=no -tT "$USERNAME"@"$(get_vm_ip)" << EOF |