From c134143e7c974115c69e5061f1fc441f2ddcc603 Mon Sep 17 00:00:00 2001 From: Mohammed Boukhalfa Date: Fri, 3 Mar 2023 09:35:05 +0200 Subject: [PATCH] Add fake_ipa config --- .../Multitenancy/ironic-env/01-vm-setup.sh | 12 +- .../03-images-and-run-local-services.sh | 127 ++++++++++++------ .../ironic-env/04-start-minikube.sh | 10 +- Support/Multitenancy/ironic-env/clean.sh | 47 ++++--- 4 files changed, 131 insertions(+), 65 deletions(-) diff --git a/Support/Multitenancy/ironic-env/01-vm-setup.sh b/Support/Multitenancy/ironic-env/01-vm-setup.sh index 3f8d1df9..a078d47b 100755 --- a/Support/Multitenancy/ironic-env/01-vm-setup.sh +++ b/Support/Multitenancy/ironic-env/01-vm-setup.sh @@ -1,9 +1,11 @@ set -e #install kvm for minikube -dnf -y install qemu-kvm libvirt virt-install net-tools +dnf -y install qemu-kvm libvirt virt-install net-tools podman firewalld systemctl enable --now libvirtd +systemctl start firewalld +systemctl enable firewalld # create provisioning network -cat < provisioning.xml +cat <provisioning.xml @@ -16,7 +18,7 @@ cat < provisioning.xml EOF -cat < baremetal.xml +cat <baremetal.xml baremetal @@ -46,11 +48,11 @@ cat < baremetal.xml EOF # define networks -virsh net-define baremetal.xml +virsh net-define baremetal.xml virsh net-start baremetal virsh net-autostart baremetal -virsh net-define provisioning.xml +virsh net-define provisioning.xml virsh net-start provisioning virsh net-autostart provisioning tee -a /etc/NetworkManager/system-connections/provisioning.nmconnection < /opt/metal3-dev-env/ironic/virtualbmc/sushy-tools/conf.py -SUSHY_EMULATOR_LIBVIRT_URI = "qemu+ssh://root@192.168.111.1/system?&keyfile=/root/ssh/id_rsa_virt_power&no_verify=1&no_tty=1" + +# Start podman registry if it's not already running +if ! podman ps | grep -q "$REGISTRY_NAME"; then + podman run -d -p "$REGISTRY_PORT":"$REGISTRY_PORT" --name "$REGISTRY_NAME" docker.io/library/registry:2.7.1 +fi + +# Pull images, tag to local registry, and push to registry +for NAME in "${IMAGE_NAMES[@]}"; do + # Pull and tag the image + if ! podman images | grep -q "${NAME##*/}"; then + podman pull "$NAME" + podman tag "$NAME" 127.0.0.1:"$REGISTRY_PORT"/localimages/"${NAME##*/}" + fi + + # Push the image to the local registry + if ! podman images | grep -q 127.0.0.1:"$REGISTRY_PORT"/localimages; then + podman push --tls-verify=false 127.0.0.1:5000/localimages/"${NAME##*/}" + fi +done + +# Define variables for repeated values +IRONIC_IMAGE="127.0.0.1:5000/localimages/ironic:latest" +SUSHY_TOOLS_IMAGE="127.0.0.1:5000/localimages/sushy-tools" +LIBVIRT_URI="qemu+ssh://root@192.168.111.1/system?&keyfile=/root/ssh/id_rsa_virt_power&no_verify=1&no_tty=1" +API_URL="http://172.22.0.2:6385" +CALLBACK_URL="http://172.22.0.2:5050/v1/continue" +ADVERTISE_HOST="192.168.111.1" +ADVERTISE_PORT="9999" + +# Create directories +DIRECTORIES=( + "/opt/metal3-dev-env/ironic/virtualbmc" + "/opt/metal3-dev-env/ironic/virtualbmc/sushy-tools" +) +for DIR in "${DIRECTORIES[@]}"; do + mkdir -p "$DIR" + chmod -R 755 "$DIR" +done + +# Generate SSH key +sudo ssh-keygen -f /root/.ssh/id_rsa_virt_power -P "" -q -y +sudo cat /root/.ssh/id_rsa_virt_power.pub | sudo tee -a /root/.ssh/authorized_keys + +# Run httpd container +podman run -d --net host --name httpd-infra \ + --pod infra-pod \ + -v /opt/metal3-dev-env/ironic:/shared \ + -e PROVISIONING_INTERFACE=provisioning \ + -e LISTEN_ALL_INTERFACES=false \ + --entrypoint /bin/runhttpd \ + "$IRONIC_IMAGE" +# Set configuration options +cat </opt/metal3-dev-env/ironic/virtualbmc/sushy-tools/conf.py +import collections + +Host = collections.namedtuple('Host', ['hostname', 'port']) + +SUSHY_EMULATOR_LIBVIRT_URI = "${LIBVIRT_URI}" SUSHY_EMULATOR_IGNORE_BOOT_DEVICE = False SUSHY_EMULATOR_VMEDIA_VERIFY_SSL = False SUSHY_EMULATOR_AUTH_FILE = "/root/sushy/htpasswd" SUSHY_EMULATOR_FAKE_DRIVER = True + +FAKE_IPA_API_URL = "${API_URL}" +FAKE_IPA_INSPECTION_CALLBACK_URL = "${CALLBACK_URL}" +FAKE_IPA_ADVERTISE_ADDRESS = Host(hostname="${ADVERTISE_HOST}", port="${ADVERTISE_PORT}") EOF -cat <<'EOF' > /opt/metal3-dev-env/ironic/virtualbmc/sushy-tools/htpasswd -admin:$2b$12$/dVOBNatORwKpF.ss99KB.vESjfyONOxyH.UgRwNyZi1Xs/W2pGVS + +# Create an htpasswd file +cat </opt/metal3-dev-env/ironic/virtualbmc/sushy-tools/htpasswd +admin:$2b${12}$/dVOBNatORwKpF.ss99KB.vESjfyONOxyH.UgRwNyZi1Xs/W2pGVS EOF -ssh-keygen -f /root/.ssh/id_rsa_virt_power -P "" -/root/.ssh/id_rsa_virt_power.pub | tee -a /root/.ssh/authorized_keys -podman run -d --net host --name sushy-tools --pod infra-pod -v /opt/metal3-dev-env/ironic/virtualbmc/sushy-tools:/root/sushy -v "/root/.ssh":/root/ssh 127.0.0.1:5000/localimages/sushy-tools + +# Generate ssh keys to use for virtual power and add them to authorized_keys +ssh-keygen -f /root/.ssh/id_rsa_virt_power -P "" -q +cat /root/.ssh/id_rsa_virt_power.pub >>/root/.ssh/authorized_keys + +# Create and start a container for sushy-tools +podman run -d --net host --name sushy-tools --pod infra-pod \ + -v /opt/metal3-dev-env/ironic/virtualbmc/sushy-tools:/root/sushy \ + -v /root/.ssh:/root/ssh \ + "${SUSHY_TOOLS_IMAGE}" diff --git a/Support/Multitenancy/ironic-env/04-start-minikube.sh b/Support/Multitenancy/ironic-env/04-start-minikube.sh index c0ca21f7..c3f5faaf 100755 --- a/Support/Multitenancy/ironic-env/04-start-minikube.sh +++ b/Support/Multitenancy/ironic-env/04-start-minikube.sh @@ -1,11 +1,15 @@ set -e + +# Start Minikube with insecure registry flag minikube start --insecure-registry 172.22.0.1:5000 + +# SSH into the Minikube VM and execute the following commands sudo su -l -c "minikube ssh sudo brctl addbr ironicendpoint" "${USER}" sudo su -l -c "minikube ssh sudo ip link set ironicendpoint up" "${USER}" sudo su -l -c "minikube ssh sudo brctl addif ironicendpoint eth2" "${USER}" sudo su -l -c "minikube ssh sudo ip addr add 172.22.0.2/24 dev ironicendpoint" "${USER}" -# Firewall -for i in 8000 80 9999 6385 5050 6180 53 5000; do sudo firewall-cmd --zone=public --add-port=${i}/tcp; done -for i in 69 547 546 68 67 5353 6230 6231 6232 6233 6234 6235; do sudo firewall-cmd --zone=libvirt --add-port=${i}/udp; done +# Firewall rules +for i in 8000 80 9999 6385 5050 6180 53 5000; do sudo firewall-cmd --zone=public --add-port=${i}/tcp; done +for i in 69 547 546 68 67 5353 6230 6231 6232 6233 6234 6235; do sudo firewall-cmd --zone=libvirt --add-port=${i}/udp; done sudo firewall-cmd --zone=libvirt --add-port=8000/tcp diff --git a/Support/Multitenancy/ironic-env/clean.sh b/Support/Multitenancy/ironic-env/clean.sh index 45ebee76..c054c7c8 100755 --- a/Support/Multitenancy/ironic-env/clean.sh +++ b/Support/Multitenancy/ironic-env/clean.sh @@ -1,25 +1,36 @@ +#!/bin/bash +# Delete network connections +sudo nmcli con delete baremetal provisioning -sudo nmcli con delete baremetal -sudo nmcli con delete provisioning -sudo nmcli con delete provisioning +# Disable and delete bridge interfaces +for iface in baremetal provisioning; do + if ip link show $iface &>/dev/null; then + sudo ip link set $iface down + sudo brctl delbr $iface + fi +done -sudo virsh net-undefine provisioning -sudo virsh net-undefine baremetal +# Delete libvirt networks +for net in provisioning baremetal; do + if sudo virsh net-info $net &>/dev/null; then + sudo virsh net-destroy $net + sudo virsh net-undefine $net + fi +done -sudo virsh net-destroy baremetal -sudo virsh net-destroy provisioning - -sudo ip link set provisioning down -sudo ip link set provisioning down -sudo ip link set baremetal down -sudo brctl delbr baremetal -sudo brctl delbr provisioning -sudo brctl delbr provisioning -#sudo rm -rf /opt/metal3-dev-env -sudo rm -rf /opt/metal3-dev-env/ironic/virtualbmc/ -sudo podman stop -a -sudo podman rmi "$(sudo podman images -qa)" -f +# Delete directories +sudo rm -rf /opt/metal3-dev-env +sudo rm -rf "$(dirname "$0")/_clouds_yaml" +# Stop and delete minikube cluster minikube stop minikube delete --all --purge + +# Stop and delete containers +containers=("sushy-tools" "ironic-ipa-downloader" "ironic" "keepalived" "registry" "ironic-client") +for container in "${containers[@]}"; do + echo "Deleting the container: $container" + sudo podman stop "$container" &>/dev/null + sudo podman rm "$container" &>/dev/null +done