Skip to content

Commit

Permalink
More support for VMs
Browse files Browse the repository at this point in the history
  • Loading branch information
abays committed Mar 17, 2020
1 parent 737b7d7 commit f56a255
Show file tree
Hide file tree
Showing 6 changed files with 86 additions and 33 deletions.
2 changes: 2 additions & 0 deletions terraform/cluster/masters/ipmi.tf
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@ resource "null_resource" "ipmi_master" {
command = <<EOT
ipmitool -I lanplus -H ${element(split(":", var.master_nodes[count.index]["ipmi_host"]),0)} %{if element(split(":", var.master_nodes[count.index]["ipmi_host"]),1)!=var.master_nodes[count.index]["ipmi_host"]}-p ${element(split(":", var.master_nodes[count.index]["ipmi_host"]),1)}%{ endif } -U ${var.master_nodes[count.index]["ipmi_user"]} -P ${var.master_nodes[count.index]["ipmi_pass"]} chassis bootdev pxe;
ipmitool -I lanplus -H ${element(split(":", var.master_nodes[count.index]["ipmi_host"]),0)} %{if element(split(":", var.master_nodes[count.index]["ipmi_host"]),1)!=var.master_nodes[count.index]["ipmi_host"]}-p ${element(split(":", var.master_nodes[count.index]["ipmi_host"]),1)}%{ endif } -U ${var.master_nodes[count.index]["ipmi_user"]} -P ${var.master_nodes[count.index]["ipmi_pass"]} power cycle || ipmitool -I lanplus -H ${element(split(":", var.master_nodes[count.index]["ipmi_host"]),0)} %{if element(split(":", var.master_nodes[count.index]["ipmi_host"]),1)!=var.master_nodes[count.index]["ipmi_host"]}-p ${element(split(":", var.master_nodes[count.index]["ipmi_host"]),1)}%{ endif } -U ${var.master_nodes[count.index]["ipmi_user"]} -P ${var.master_nodes[count.index]["ipmi_pass"]} power on;
sleep 3;
ipmitool -I lanplus -H ${element(split(":", var.master_nodes[count.index]["ipmi_host"]),0)} %{if element(split(":", var.master_nodes[count.index]["ipmi_host"]),1)!=var.master_nodes[count.index]["ipmi_host"]}-p ${element(split(":", var.master_nodes[count.index]["ipmi_host"]),1)}%{ endif } -U ${var.master_nodes[count.index]["ipmi_user"]} -P ${var.master_nodes[count.index]["ipmi_pass"]} chassis bootdev disk;
EOT
}
}
Expand Down
2 changes: 2 additions & 0 deletions terraform/workers/ipmi.tf
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@ resource "null_resource" "ipmi_worker" {
command = <<EOT
ipmitool -I lanplus -H ${element(split(":", var.worker_nodes[count.index]["ipmi_host"]),0)} %{if element(split(":", var.worker_nodes[count.index]["ipmi_host"]),1)!=var.worker_nodes[count.index]["ipmi_host"]}-p ${element(split(":", var.worker_nodes[count.index]["ipmi_host"]),1)}%{ endif } -U ${var.worker_nodes[count.index]["ipmi_user"]} -P ${var.worker_nodes[count.index]["ipmi_pass"]} chassis bootdev pxe;
ipmitool -I lanplus -H ${element(split(":", var.worker_nodes[count.index]["ipmi_host"]),0)} %{if element(split(":", var.worker_nodes[count.index]["ipmi_host"]),1)!=var.worker_nodes[count.index]["ipmi_host"]}-p ${element(split(":", var.worker_nodes[count.index]["ipmi_host"]),1)}%{ endif } -U ${var.worker_nodes[count.index]["ipmi_user"]} -P ${var.worker_nodes[count.index]["ipmi_pass"]} power cycle || ipmitool -I lanplus -H ${element(split(":", var.worker_nodes[count.index]["ipmi_host"]),0)} %{if element(split(":", var.worker_nodes[count.index]["ipmi_host"]),1)!=var.worker_nodes[count.index]["ipmi_host"]}-p ${element(split(":", var.worker_nodes[count.index]["ipmi_host"]),1)}%{ endif } -U ${var.worker_nodes[count.index]["ipmi_user"]} -P ${var.worker_nodes[count.index]["ipmi_pass"]} power on;
sleep 3;
ipmitool -I lanplus -H ${element(split(":", var.worker_nodes[count.index]["ipmi_host"]),0)} %{if element(split(":", var.worker_nodes[count.index]["ipmi_host"]),1)!=var.worker_nodes[count.index]["ipmi_host"]}-p ${element(split(":", var.worker_nodes[count.index]["ipmi_host"]),1)}%{ endif } -U ${var.worker_nodes[count.index]["ipmi_user"]} -P ${var.worker_nodes[count.index]["ipmi_pass"]} chassis bootdev disk;
EOT
}
}
Expand Down
14 changes: 14 additions & 0 deletions tools/clean-vms.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
#!/bin/bash

source "vbmc-funcs.sh"

CLUSTER_NAME=${1:-testing}

LIBVIRT_STORAGE_POOL="default"

for i in $(sudo virsh list --all | grep $CLUSTER_NAME | awk '{print $2}'); do
delete_vbmc "$i"
sudo virsh destroy $i > /dev/null 2>&1
sudo virsh vol-delete $i.qcow2 --pool=$LIBVIRT_STORAGE_POOL
sudo virsh undefine $i
done
62 changes: 29 additions & 33 deletions tools/provision-vms.sh
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
#!/bin/bash

source "vbmc-funcs.sh"

CLUSTER_NAME=${1:-testing}

NUM_MASTERS=${2:-1}
Expand All @@ -11,39 +13,19 @@ MASTER_BM_MAC_PREFIX="52:54:00:82:69:4"
WORKER_PROV_MAC_PREFIX="52:54:00:82:68:5"
WORKER_BM_MAC_PREFIX="52:54:00:82:69:5"

LIBVIRT_STORAGE_POOL="default"

MASTER_VBMC_PORT_START=623
WORKER_VBMC_PORT_START=624

delete_vbmc() {
local name="$1"

if vbmc show "$name" > /dev/null 2>&1; then
vbmc stop "$name" > /dev/null 2>&1
vbmc delete "$name" > /dev/null 2>&1
fi
}

create_vbmc() {
local name="$1"
local port="$2"
MASTER_VBMC_PORT_START=624
WORKER_VBMC_PORT_START=625

vbmc add "$name" --port "$port" --username ADMIN --password ADMIN
vbmc start "$name" > /dev/null 2>&1
}
LIBVIRT_STORAGE_POOL="default"

for i in $(sudo virsh list --all | grep $CLUSTER_NAME | awk '{print $2}'); do
delete_vbmc "$i"
sudo virsh destroy $i > /dev/null 2>&1
sudo virsh vol-delete $i.qcow2 --pool=$LIBVIRT_STORAGE_POOL
sudo virsh undefine $i
done
(
./clean-vms.sh
) || exit 1

for i in $(seq 1 "$NUM_MASTERS"); do
for i in $(seq 0 $((NUM_MASTERS - 1))); do
name="$CLUSTER_NAME-master-$i"

sudo virt-install --ram 16384 --vcpus 4 --os-variant rhel7 --cpu host-passthrough --disk size=40,pool=$LIBVIRT_STORAGE_POOL,device=disk,bus=virtio,format=qcow2 --import --noautoconsole --vnc --network=bridge:provisioning,mac="$MASTER_PROV_MAC_PREFIX$i" --network=bridge:baremetal,mac="$MASTER_BM_MAC_PREFIX$i" --name "$name" --os-type=linux --events on_reboot=restart --boot hd,network
sudo virt-install --ram 16384 --vcpus 4 --os-variant rhel7 --cpu host-passthrough --disk size=40,pool=$LIBVIRT_STORAGE_POOL,device=disk,bus=virtio,format=qcow2 --import --noautoconsole --vnc --network=bridge:provisioning,mac="$MASTER_PROV_MAC_PREFIX$i" --network=bridge:baremetal,mac="$MASTER_BM_MAC_PREFIX$i" --name "$name" --os-type=linux --events on_reboot=destroy --boot hd,network

vm_ready=false
for k in {1..10}; do
Expand Down Expand Up @@ -73,10 +55,10 @@ for i in $(seq 1 "$NUM_MASTERS"); do
fi
done

for i in $(seq 1 "$NUM_WORKERS"); do
for i in $(seq 0 $((NUM_WORKERS - 1))); do
name="$CLUSTER_NAME-worker-$i"

sudo virt-install --ram 16384 --vcpus 4 --os-variant rhel7 --cpu host-passthrough --disk size=40,pool=$LIBVIRT_STORAGE_POOL,device=disk,bus=virtio,format=qcow2 --import --noautoconsole --vnc --network=bridge:provisioning,mac="$WORKER_PROV_MAC_PREFIX$i" --network=bridge:baremetal,mac="$WORKER_BM_MAC_PREFIX$i" --name "$name" --os-type=linux --events on_reboot=restart --boot hd,network
sudo virt-install --ram 16384 --vcpus 4 --os-variant rhel7 --cpu host-passthrough --disk size=40,pool=$LIBVIRT_STORAGE_POOL,device=disk,bus=virtio,format=qcow2 --import --noautoconsole --vnc --network=bridge:provisioning,mac="$WORKER_PROV_MAC_PREFIX$i" --network=bridge:baremetal,mac="$WORKER_BM_MAC_PREFIX$i" --name "$name" --os-type=linux --events on_reboot=destroy --boot hd,network

vm_ready=false
for k in {1..10}; do
Expand Down Expand Up @@ -108,7 +90,7 @@ done

echo "Put the following in your install-config.yaml..."

for i in $(seq 1 "$NUM_MASTERS"); do
for i in $(seq 0 $((NUM_MASTERS - 1))); do
echo "
- bmc:
address: ipmi://127.0.0.1:$MASTER_VBMC_PORT_START$i
Expand All @@ -123,7 +105,7 @@ echo "
sdnMacAddress: $MASTER_BM_MAC_PREFIX$i"
done

for i in $(seq 1 "$NUM_WORKERS"); do
for i in $(seq 0 $((NUM_MASTERS - 1))); do
echo "
- bmc:
address: ipmi://127.0.0.1:$WORKER_VBMC_PORT_START$i
Expand All @@ -136,4 +118,18 @@ echo "
pxe: bios
role: worker
sdnMacAddress: $WORKER_BM_MAC_PREFIX$i"
done
done

echo "
Also set your controlPlane and compute replicas like so...
compute:
- name: worker
replicas: $NUM_WORKERS
controlPlane:
hyperthreading: Enabled
name: master
platform: {}
replicas: $NUM_MASTERS
"
18 changes: 18 additions & 0 deletions tools/vbmc-funcs.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
#!/bin/bash

delete_vbmc() {
local name="$1"

if vbmc show "$name" > /dev/null 2>&1; then
vbmc stop "$name" > /dev/null 2>&1
vbmc delete "$name" > /dev/null 2>&1
fi
}

create_vbmc() {
local name="$1"
local port="$2"

vbmc add "$name" --port "$port" --username ADMIN --password ADMIN
vbmc start "$name" > /dev/null 2>&1
}
21 changes: 21 additions & 0 deletions tools/vm-boot-helper.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
#!/bin/bash

CLUSTER_NAME=${1:-testing}

LIBVIRT_STORAGE_POOL="default"

while true; do
cluster_present=$(sudo virsh list --all | grep $CLUSTER_NAME)

if [[ -z "$cluster_present" ]]; then
echo "Cluster '$CLUSTER_NAME' VMs not detected; exiting..."
break
fi

for i in $(sudo virsh list --all | grep $CLUSTER_NAME | grep "shut off" | awk '{print $2}'); do
echo "Cluster '$CLUSTER_NAME' node '$i' is offline; booting..."
virsh start $i
done

sleep 5
done

0 comments on commit f56a255

Please sign in to comment.