Use Vagrantfile to build virtual site
[icn.git] / deploy / metal3-vm / 02_configure_host.sh
index cf1ca17..c316522 100755 (executable)
@@ -1,5 +1,5 @@
 #!/usr/bin/env bash
-set -xe
+set -eux -o pipefail
 
 # shellcheck disable=SC1091
 source lib/logging.sh
@@ -63,14 +63,14 @@ else
       if [ ! -e /etc/sysconfig/network-scripts/ifcfg-provisioning ] ; then
           echo -e "DEVICE=provisioning\nTYPE=Bridge\nONBOOT=yes\nNM_CONTROLLED=no\nBOOTPROTO=static\nIPADDR=172.22.0.1\nNETMASK=255.255.255.0" | sudo dd of=/etc/sysconfig/network-scripts/ifcfg-provisioning
       fi
-      sudo ifdown provisioning || true
-      sudo ifup provisioning
+      sudo ip link set dev provisioning down || true
+      sudo ip link set dev provisioning up
 
       # Need to pass the provision interface for bare metal
       if [ "$PRO_IF" ]; then
           echo -e "DEVICE=$PRO_IF\nTYPE=Ethernet\nONBOOT=yes\nNM_CONTROLLED=no\nBRIDGE=provisioning" | sudo dd of="/etc/sysconfig/network-scripts/ifcfg-$PRO_IF"
-          sudo ifdown "$PRO_IF" || true
-          sudo ifup "$PRO_IF"
+          sudo ip link set dev "$PRO_IF" down || true
+          sudo ip link set dev "$PRO_IF" up
       fi
   fi
 
@@ -79,8 +79,8 @@ else
       if [ ! -e /etc/sysconfig/network-scripts/ifcfg-baremetal ] ; then
           echo -e "DEVICE=baremetal\nTYPE=Bridge\nONBOOT=yes\nNM_CONTROLLED=no" | sudo dd of=/etc/sysconfig/network-scripts/ifcfg-baremetal
       fi
-      sudo ifdown baremetal || true
-      sudo ifup baremetal
+      sudo ip link set dev baremetal down || true
+      sudo ip link set dev baremetal up
 
       # Add the internal interface to it if requests, this may also be the interface providing
       # external access so we need to make sure we maintain dhcp config if its available
@@ -100,7 +100,7 @@ else
       sudo virsh net-destroy baremetal
       sudo virsh net-start baremetal
       if [ "$INT_IF" ]; then #Need to bring UP the NIC after destroying the libvirt network
-          sudo ifup "$INT_IF"
+          sudo ip link set dev "$INT_IF" up
       fi
   fi
 fi
@@ -145,11 +145,14 @@ if [[ "$MANAGE_BR_BRIDGE" == "y" && $OS == "centos" ]] ; then
   fi
 fi
 
+for name in ironic ironic-inspector dnsmasq httpd mariadb ipa-downloader; do
+    sudo "${CONTAINER_RUNTIME}" ps | grep -w "$name$" && sudo "${CONTAINER_RUNTIME}" kill $name
+    sudo "${CONTAINER_RUNTIME}" ps --all | grep -w "$name$" && sudo "${CONTAINER_RUNTIME}" rm $name -f
+done
+rm -rf "$IRONIC_DATA_DIR"
+
 mkdir -p "$IRONIC_DATA_DIR/html/images"
 pushd "$IRONIC_DATA_DIR/html/images"
-if [ ! -f ironic-python-agent.initramfs ]; then
-    curl --insecure --compressed -L https://images.rdoproject.org/master/rdo_trunk/current-tripleo-rdo/ironic-python-agent.tar | tar -xf -
-fi
 BM_IMAGE=${BM_IMAGE:-"bionic-server-cloudimg-amd64.img"}
 BM_IMAGE_URL=${BM_IMAGE_URL:-"https://cloud-images.ubuntu.com/bionic/current/bionic-server-cloudimg-amd64.img"}
 if [ ! -f ${BM_IMAGE} ] ; then
@@ -158,48 +161,63 @@ if [ ! -f ${BM_IMAGE} ] ; then
 fi
 popd
 
-for IMAGE_VAR in IRONIC_IMAGE IRONIC_INSPECTOR_IMAGE ; do
+for IMAGE_VAR in IRONIC_IMAGE IRONIC_INSPECTOR_IMAGE IPA_DOWNLOADER_IMAGE; do
     IMAGE=${!IMAGE_VAR}
     sudo "${CONTAINER_RUNTIME}" pull "$IMAGE"
 done
 
-for name in ironic ironic-inspector dnsmasq httpd mariadb; do
-    sudo "${CONTAINER_RUNTIME}" ps | grep -w "$name$" && sudo "${CONTAINER_RUNTIME}" kill $name
-    sudo "${CONTAINER_RUNTIME}" ps --all | grep -w "$name$" && sudo "${CONTAINER_RUNTIME}" rm $name -f
-done
-
 # set password for mariadb
 mariadb_password="$(echo "$(date;hostname)"|sha256sum |cut -c-20)"
 
+cat <<EOF > ${PWD}/ironic.env
+PROVISIONING_INTERFACE=provisioning
+DHCP_RANGE=172.22.0.10,172.22.0.100
+IPA_BASEURI=https://images.rdoproject.org/train/rdo_trunk/current-tripleo
+DEPLOY_KERNEL_URL=http://172.22.0.1/images/ironic-python-agent.kernel
+DEPLOY_RAMDISK_URL=http://172.22.0.1/images/ironic-python-agent.initramfs
+IRONIC_ENDPOINT=http://172.22.0.1:6385/v1/
+IRONIC_INSPECTOR_ENDPOINT=http://172.22.0.1:5050/v1/
+CACHEURL=http://172.22.0.1/images
+IRONIC_FAST_TRACK=false
+EOF
 
-if [[ "${CONTAINER_RUNTIME}" == "podman" ]]; then
-  # Remove existing pod
-  if  sudo "${CONTAINER_RUNTIME}" pod exists ironic-pod ; then
-      sudo "${CONTAINER_RUNTIME}" pod rm ironic-pod -f
-  fi
-  # Create pod
-  sudo "${CONTAINER_RUNTIME}" pod create -n ironic-pod
-  POD_NAME="--pod ironic-pod"
-else
-  POD_NAME=""
-fi
-
-mkdir -p "$IRONIC_DATA_DIR"
-
-# Start dnsmasq, http, mariadb, and ironic containers using same image
-sudo "${CONTAINER_RUNTIME}" run -d --net host --privileged --name dnsmasq  ${POD_NAME} \
-     -v "$IRONIC_DATA_DIR":/shared --entrypoint /bin/rundnsmasq "${IRONIC_IMAGE}"
+# Start image downloader container
+sudo "${CONTAINER_RUNTIME}" run -d --net host --privileged --name ipa-downloader \
+    --env-file "${PWD}/ironic.env" \
+    -v "$IRONIC_DATA_DIR:/shared" "${IPA_DOWNLOADER_IMAGE}" /usr/local/bin/get-resource.sh
 
-sudo "${CONTAINER_RUNTIME}" run -d --net host --privileged --name httpd ${POD_NAME} \
-     -v "$IRONIC_DATA_DIR":/shared --entrypoint /bin/runhttpd "${IRONIC_IMAGE}"
+sudo "${CONTAINER_RUNTIME}" wait ipa-downloader
 
-sudo "${CONTAINER_RUNTIME}" run -d --net host --privileged --name mariadb ${POD_NAME} \
-     -v "$IRONIC_DATA_DIR":/shared --entrypoint /bin/runmariadb \
-     --env MARIADB_PASSWORD="$mariadb_password" "${IRONIC_IMAGE}"
+if [ ! -e "$IRONIC_DATA_DIR/html/images/ironic-python-agent.kernel" ] ||
+   [ ! -e "$IRONIC_DATA_DIR/html/images/ironic-python-agent.initramfs" ]; then
+    echo "Failed to get ironic-python-agent"
+    exit 1
+fi
 
-sudo "${CONTAINER_RUNTIME}" run -d --net host --privileged --name ironic ${POD_NAME} \
-     --env MARIADB_PASSWORD="$mariadb_password" \
-     -v "$IRONIC_DATA_DIR":/shared "${IRONIC_IMAGE}"
+# Start dnsmasq, http, mariadb, and ironic containers using same image
+# See this file for env vars you can set, like IP, DHCP_RANGE, INTERFACE
+sudo "${CONTAINER_RUNTIME}" run -d --net host --privileged --name dnsmasq \
+    --env-file "${PWD}/ironic.env" \
+    -v "$IRONIC_DATA_DIR:/shared" --entrypoint /bin/rundnsmasq "${IRONIC_IMAGE}"
+
+# For available env vars, see:
+sudo "${CONTAINER_RUNTIME}" run -d --net host --privileged --name httpd \
+    --env-file "${PWD}/ironic.env" \
+    -v "$IRONIC_DATA_DIR:/shared" --entrypoint /bin/runhttpd "${IRONIC_IMAGE}"
+
+# https://github.com/metal3-io/ironic/blob/master/runmariadb.sh
+sudo "${CONTAINER_RUNTIME}" run -d --net host --privileged --name mariadb \
+    --env-file "${PWD}/ironic.env" \
+    -v "$IRONIC_DATA_DIR:/shared" --entrypoint /bin/runmariadb \
+    --env "MARIADB_PASSWORD=$mariadb_password" "${IRONIC_IMAGE}"
+
+# See this file for additional env vars you may want to pass, like IP and INTERFACE
+sudo "${CONTAINER_RUNTIME}" run -d --net host --privileged --name ironic \
+    --env-file "${PWD}/ironic.env" \
+    --env "MARIADB_PASSWORD=$mariadb_password" \
+    -v "$IRONIC_DATA_DIR:/shared" "${IRONIC_IMAGE}"
 
 # Start Ironic Inspector
-sudo "${CONTAINER_RUNTIME}" run -d --net host --privileged --name ironic-inspector ${POD_NAME} "${IRONIC_INSPECTOR_IMAGE}"
+sudo "${CONTAINER_RUNTIME}" run -d --net host --privileged --name ironic-inspector \
+    --env-file "${PWD}/ironic.env" \
+    -v "$IRONIC_DATA_DIR:/shared" "${IRONIC_INSPECTOR_IMAGE}"