Replace virtualbmc with sushy-emulator 89/4689/1
authorTodd Malsbary <todd.malsbary@intel.com>
Mon, 7 Feb 2022 23:09:29 +0000 (15:09 -0800)
committerTodd Malsbary <todd.malsbary@intel.com>
Tue, 15 Feb 2022 16:38:34 +0000 (08:38 -0800)
Signed-off-by: Todd Malsbary <todd.malsbary@intel.com>
Change-Id: I288d7ace59ed85b6724da87ebee964cfc2e1b479

Vagrantfile
tools/vagrant/add_machine_to_vbmc.sh [deleted file]
tools/vagrant/remove_machine_from_vbmc.sh [deleted file]
tools/vagrant/start_sushy.sh [new file with mode: 0755]
tools/vagrant/start_vbmc.sh [deleted file]
tools/vagrant/stop_sushy.sh [new file with mode: 0755]
tools/vagrant/stop_vbmc.sh [deleted file]

index abc29f1..00aec4b 100644 (file)
@@ -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 = <<MSG
 ------------------------------------------------------
@@ -102,14 +103,14 @@ Vagrant.configure("2") do |config|
                  :libvirt__network_name => "#{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 (executable)
index 86b3cd4..0000000
+++ /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 (executable)
index 4efc15b..0000000
+++ /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 (executable)
index 0000000..f3d5b53
--- /dev/null
@@ -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 <<EOF >${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 (executable)
index 7187a3f..0000000
+++ /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 <<EOF >${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 (executable)
index 0000000..2e3f3a8
--- /dev/null
@@ -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 (executable)
index dec76fd..0000000
+++ /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