From 28d1cee5c7b95ae905a4481245d5d5650c87e101 Mon Sep 17 00:00:00 2001 From: Rihab Banday Date: Thu, 30 Jul 2020 09:16:28 +0000 Subject: [PATCH] Update env variable extraction and VM creation steps This change uses YAML parser to extract environmental variables from PDF and IDF. Additionally it merges the VM creation step with the main functions script. Change-Id: I2089b7a84f15e892d57fbadf06252db8769f0fbf Signed-off-by: Rihab Banday --- create_vm.sh | 41 ------------------------------------ deploy.env | 12 +---------- functions.sh | 55 +++++++++++++++++++++++++++++++++++++++++++++--- hw_config/intel/pdf.yaml | 2 +- 4 files changed, 54 insertions(+), 56 deletions(-) delete mode 100755 create_vm.sh diff --git a/create_vm.sh b/create_vm.sh deleted file mode 100755 index 74435f2..0000000 --- a/create_vm.sh +++ /dev/null @@ -1,41 +0,0 @@ -#!/bin/bash -# SPDX-license-identifier: Apache-2.0 -############################################################################## -# Copyright (c) -# 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 -############################################################################## - -# TODO This will be merged in main functions.sh - -sudo mkdir -p "/var/lib/libvirt/images/$1" -sudo qemu-img create -f qcow2 \ - -o backing_file=/var/lib/libvirt/images/ubuntu-18.04.qcow2 \ - "/var/lib/libvirt/images/$1/${1}.qcow2" 10G - -# Create cloud-init configuration files -cat < user-data -#cloud-config -users: - - name: ubuntu - ssh-authorized-keys: - - $(cat "$HOME/.ssh/id_rsa.pub") - sudo: ['ALL=(ALL) NOPASSWD:ALL'] - groups: sudo - shell: /bin/bash -EOL -cat < meta-data -local-hostname: $VM_NAME -EOL - -sudo genisoimage -output "/var/lib/libvirt/images/$1/$1-cidata.iso" \ - -volid cidata -joliet -rock user-data meta-data - -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/$1/${1}.qcow2",format=qcow2 \ - --disk "/var/lib/libvirt/images/$1/${1}-cidata.iso",device=cdrom \ - --import --network network=default \ - --network bridge="$BRIDGE",model=rtl8139 --noautoconsole diff --git a/deploy.env b/deploy.env index 71a951a..602dfd8 100644 --- a/deploy.env +++ b/deploy.env @@ -7,16 +7,6 @@ export INSTALLER=bmra export BRIDGE=pxebr # Jump VM details -export VM_NAME=kuberef-jump +export VM_NAME=$(yq r $CURRENTPATH/hw_config/$VENDOR/pdf.yaml jumphost.name) export USERNAME=ubuntu export PROJECT_ROOT="/home/ubuntu" - -# Network configuration details of PXE interface in VM -export PXE_IF=ens4 -export PXE_IF_IP=10.10.190.211 -export PXE_IF_MAC=52:54:00:4a:e8:2d -export NETMASK=255.255.255.0 - -# IPs of the provisioned nodes -export MASTER_IP=10.10.190.202 -export WORKER_IP=10.10.190.203 diff --git a/functions.sh b/functions.sh index 129a3a6..b0baf2d 100755 --- a/functions.sh +++ b/functions.sh @@ -22,15 +22,44 @@ clean_up() { # Create jumphost VM create_jump() { - ./create_vm.sh "$VM_NAME" +# 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 < 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 < 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-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 + while [ -z "$jumpbox_ip" ]; do sleep $((++i)) jumpbox_ip=$(get_vm_ip) done i=0 - until nc -w5 -z $jumpbox_ip 22; do + until nc -w5 -z "$jumpbox_ip" 22; do sleep $((++i)) done } @@ -42,6 +71,21 @@ get_vm_ip() { # 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' + 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' + 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 @@ -77,6 +121,11 @@ 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) +# SSH to jumphost # shellcheck disable=SC2087 ssh -tT "$USERNAME"@"$(get_vm_ip)" << EOF ssh -o StrictHostKeyChecking=no root@$MASTER_IP \ diff --git a/hw_config/intel/pdf.yaml b/hw_config/intel/pdf.yaml index 4b7862d..ba0c856 100644 --- a/hw_config/intel/pdf.yaml +++ b/hw_config/intel/pdf.yaml @@ -17,7 +17,7 @@ details: type: baremetal link: http://wiki.opnfv.org/display/pharos/Intel+Hosting jumphost: - name: pod19-jump + name: kuberef-jump node: &nodeparas type: baremetal vendor: Intel -- 2.16.6