From ade35a31489fcc3b858fc6dde814a95c904f711b Mon Sep 17 00:00:00 2001 From: Todd Malsbary Date: Mon, 7 Feb 2022 15:09:29 -0800 Subject: [PATCH] Replace virtualbmc with sushy-emulator Signed-off-by: Todd Malsbary Change-Id: I288d7ace59ed85b6724da87ebee964cfc2e1b479 --- Vagrantfile | 23 ++++++++------------- tools/vagrant/add_machine_to_vbmc.sh | 9 -------- tools/vagrant/remove_machine_from_vbmc.sh | 8 -------- tools/vagrant/start_sushy.sh | 34 +++++++++++++++++++++++++++++++ tools/vagrant/start_vbmc.sh | 22 -------------------- tools/vagrant/stop_sushy.sh | 12 +++++++++++ tools/vagrant/stop_vbmc.sh | 7 ------- 7 files changed, 54 insertions(+), 61 deletions(-) delete mode 100755 tools/vagrant/add_machine_to_vbmc.sh delete mode 100755 tools/vagrant/remove_machine_from_vbmc.sh create mode 100755 tools/vagrant/start_sushy.sh delete mode 100755 tools/vagrant/start_vbmc.sh create mode 100755 tools/vagrant/stop_sushy.sh delete mode 100755 tools/vagrant/stop_vbmc.sh diff --git a/Vagrantfile b/Vagrantfile index abc29f1..00aec4b 100644 --- a/Vagrantfile +++ b/Vagrantfile @@ -34,6 +34,7 @@ if baremetal_cidr.nil? puts "Missing bmcAddress value in site definition, can't determine baremetal network address" exit 1 end +baremetal_gw = IPAddr.new(baremetal_cidr).succ $post_up_message = < "#{site}-provisioning", :type => 'dhcp' - # IPMI control of machines is provided by vbmc on the host + # BMC control of machines is provided by sushy-emulator on the host m.trigger.after [:up] do |trigger| - trigger.name = 'Starting virtualbmc for IPMI network' - trigger.run = {inline: "./tools/vagrant/start_vbmc.sh"} + trigger.name = 'Starting sushy for BMC network' + trigger.run = {inline: "./tools/vagrant/start_sushy.sh #{baremetal_gw}"} end m.trigger.after [:destroy] do |trigger| - trigger.name = 'Stopping virtualbmc for IPMI network' - trigger.run = {inline: "./tools/vagrant/stop_vbmc.sh"} + trigger.name = 'Stopping sushy for BMC network' + trigger.run = {inline: "./tools/vagrant/stop_sushy.sh #{baremetal_gw}"} end m.trigger.after [:up] do |trigger| @@ -139,9 +140,11 @@ Vagrant.configure("2") do |config| machine_name = values['machineName'] boot_mac_address = values['bootMACAddress'] bmc_port = URI.parse(values['bmcAddress']).port + uuid = URI.parse(values['bmcAddress']).path.split('/').last config.vm.define machine_name do |m| m.vm.hostname = machine_name m.vm.provider :libvirt do |libvirt| + libvirt.uuid = "#{uuid}" libvirt.graphics_ip = '0.0.0.0' libvirt.default_prefix = "#{site}-" libvirt.cpu_mode = 'host-passthrough' @@ -165,16 +168,6 @@ Vagrant.configure("2") do |config| m.vm.network :private_network, :libvirt__network_name => "#{site}-baremetal", :type => 'dhcp' - - # IPMI control - m.trigger.after [:up] do |trigger| - trigger.name = 'Adding machine to IPMI network' - trigger.run = {inline: "./tools/vagrant/add_machine_to_vbmc.sh #{site} #{machine_name} #{bmc_port}"} - end - m.trigger.after [:destroy] do |trigger| - trigger.name = 'Removing machine from IPMI network' - trigger.run = {inline: "./tools/vagrant/remove_machine_from_vbmc.sh #{site} #{machine_name} #{bmc_port}"} - end end end end diff --git a/tools/vagrant/add_machine_to_vbmc.sh b/tools/vagrant/add_machine_to_vbmc.sh deleted file mode 100755 index 86b3cd4..0000000 --- a/tools/vagrant/add_machine_to_vbmc.sh +++ /dev/null @@ -1,9 +0,0 @@ -#!/bin/bash -set -eu -o pipefail - -site=$1 -name=$2 -port=$3 - -vbmc --no-daemon add ${site}-${name} --port ${port} --libvirt-uri "qemu:///system?&no_verify=1&no_tty=1" -vbmc --no-daemon start ${site}-${name} diff --git a/tools/vagrant/remove_machine_from_vbmc.sh b/tools/vagrant/remove_machine_from_vbmc.sh deleted file mode 100755 index 4efc15b..0000000 --- a/tools/vagrant/remove_machine_from_vbmc.sh +++ /dev/null @@ -1,8 +0,0 @@ -#!/bin/bash -set -eu -o pipefail - -site=$1 -name=$2 -port=$3 - -vbmc --no-daemon delete ${site}-${name} || true diff --git a/tools/vagrant/start_sushy.sh b/tools/vagrant/start_sushy.sh new file mode 100755 index 0000000..f3d5b53 --- /dev/null +++ b/tools/vagrant/start_sushy.sh @@ -0,0 +1,34 @@ +#!/bin/bash +set -eu -o pipefail + +listen_ip=$1 + +if [[ -f ${HOME}/.sushy/emulator.pid && $(ps -p $(cat ${HOME}/.sushy/emulator.pid) 2>/dev/null) ]]; then + echo sushy-emulator is already started +else + # Install prerequisites + if [[ $(which apt-get 2>/dev/null) ]]; then + DEBIAN_FRONTEND=noninteractive sudo apt-get install -y make apache2-utils libvirt-dev ovmf python3-pip + elif [[ $(which yum) ]]; then + # TODO OVMF doesn't include OVMF_CODE.fd + sudo yum install -y make httpd-tools libvirt-devel OVMF python3-pip + fi + sudo python3 -m pip install libvirt-python sushy-tools + # Add route to provisioning network - sushy-emulator needs to + # fetch ISOs over this during virtual media boot + dev=$(ip -o addr show to ${listen_ip} | awk '{print $2}') + sudo ip route add 172.22.0.0/24 dev ${dev} + # Configure sushy-emulator + mkdir -p ${HOME}/.sushy + openssl req -x509 -newkey rsa:4096 -keyout ${HOME}/.sushy/key.pem -out ${HOME}/.sushy/cert.pem -sha256 -days 365 -nodes -subj "/CN=${listen_ip}" + htpasswd -c -b -B ${HOME}/.sushy/htpasswd admin password + cat <${HOME}/.sushy/emulator.conf +SUSHY_EMULATOR_LISTEN_IP = u'${listen_ip}' +SUSHY_EMULATOR_SSL_CERT = u'${HOME}/.sushy/cert.pem' +SUSHY_EMULATOR_SSL_KEY = u'${HOME}/.sushy/key.pem' +SUSHY_EMULATOR_AUTH_FILE = u'${HOME}/.sushy/htpasswd' +SUSHY_EMULATOR_VMEDIA_VERIFY_SSL = False +EOF + sushy-emulator --config ${HOME}/.sushy/emulator.conf 1>${HOME}/.sushy/emulator-stdout.log 2>${HOME}/.sushy/emulator-stderr.log & + echo $! >${HOME}/.sushy/emulator.pid +fi diff --git a/tools/vagrant/start_vbmc.sh b/tools/vagrant/start_vbmc.sh deleted file mode 100755 index 7187a3f..0000000 --- a/tools/vagrant/start_vbmc.sh +++ /dev/null @@ -1,22 +0,0 @@ -#!/bin/bash -set -eu -o pipefail - -if [[ -f ${HOME}/.vbmc/master.pid && $(ps -p $(cat ${HOME}/.vbmc/master.pid) 2>/dev/null) ]]; then - echo virtualbmc is already started -else - if [[ $(which apt-get 2>/dev/null) ]]; then - DEBIAN_FRONTEND=noninteractive sudo apt-get install -y make libvirt-dev python3-pip - elif [[ $(which yum) ]]; then - sudo yum install -y make libvirt-devel python3-pip - fi - sudo python3 -m pip install libvirt-python virtualbmc - mkdir -p ${HOME}/.vbmc - cat <${HOME}/.vbmc/virtualbmc.conf -[log] -logfile=${HOME}/.vbmc/virtualbmc.log -debug=True -[ipmi] -session_timout=20 -EOF - vbmcd -fi diff --git a/tools/vagrant/stop_sushy.sh b/tools/vagrant/stop_sushy.sh new file mode 100755 index 0000000..2e3f3a8 --- /dev/null +++ b/tools/vagrant/stop_sushy.sh @@ -0,0 +1,12 @@ +#!/bin/bash +set -eu -o pipefail + +listen_ip=$1 + +if [[ -f ${HOME}/.sushy/emulator.pid && $(ps -p $(cat ${HOME}/.sushy/emulator.pid) 2>/dev/null) ]]; then + kill $(cat ${HOME}/.sushy/emulator.pid) + rm ${HOME}/.sushy/emulator.pid + echo Stopped sushy-emulator + dev=$(ip -o addr show to ${listen_ip} | awk '{print $2}') + sudo ip route del 172.22.0.0/24 dev ${dev} +fi diff --git a/tools/vagrant/stop_vbmc.sh b/tools/vagrant/stop_vbmc.sh deleted file mode 100755 index dec76fd..0000000 --- a/tools/vagrant/stop_vbmc.sh +++ /dev/null @@ -1,7 +0,0 @@ -#!/bin/bash -set -eu -o pipefail - -if [[ -f ${HOME}/.vbmc/master.pid && $(ps -p $(cat ${HOME}/.vbmc/master.pid) 2>/dev/null) ]]; then - kill $(cat ${HOME}/.vbmc/master.pid) - echo Stopped virtualbmc -fi -- 2.16.6