5 SCRIPTDIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
8 # Get variables from the config file
9 if [ -z "${CONFIG:-}" ]; then
10 # See if there's a config_$USER.sh in the SCRIPTDIR
11 if [ ! -f ${SCRIPTDIR}/../config_${USER}.sh ]; then
12 cp ${SCRIPTDIR}/../config_example.sh ${SCRIPTDIR}/../config_${USER}.sh
13 echo "Automatically created config_${USER}.sh with default contents."
15 CONFIG="${SCRIPTDIR}/../config_${USER}.sh"
21 ADDN_DNS=${ADDN_DNS:-}
22 # External interface for routing traffic through the host
24 # Provisioning interface
26 # Does libvirt manage the baremetal bridge (including DNS and DHCP)
27 MANAGE_BR_BRIDGE=${MANAGE_BR_BRIDGE:-y}
28 # Only manage bridges if is set
29 MANAGE_PRO_BRIDGE=${MANAGE_PRO_BRIDGE:-y}
30 MANAGE_INT_BRIDGE=${MANAGE_INT_BRIDGE:-y}
31 # Internal interface, to bridge virbr0
33 #Root disk to deploy coreOS - use /dev/sda on BM
34 ROOT_DISK_NAME=${ROOT_DISK_NAME-"/dev/sda"}
36 CONTAINER_RUNTIME=${CONTAINER_RUNTIME:-"docker"}
38 export EXTERNAL_SUBNET="192.168.111.0/24"
39 #Ironic data directory
40 IRONIC_DATA_DIR=${IRONIC_DATA_DIR:-"/opt/ironic"}
41 export SSH_PUB_KEY=~/.ssh/id_rsa.pub
43 FILESYSTEM=${FILESYSTEM:="/"}
45 WORKING_DIR=${WORKING_DIR:-"/opt/metal3-vm"}
46 NODES_FILE=${NODES_FILE:-"${WORKING_DIR}/ironic_nodes.json"}
47 NODES_PLATFORM=${NODES_PLATFORM:-"libvirt"}
49 export NUM_MASTERS=${NUM_MASTERS:-"1"}
50 export NUM_WORKERS=${NUM_WORKERS:-"1"}
51 export VM_EXTRADISKS=${VM_EXTRADISKS:-"false"}
54 export IRONIC_IMAGE=${IRONIC_IMAGE:-"integratedcloudnative/ironic:v1.0-icn"}
55 export IRONIC_INSPECTOR_IMAGE=${IRONIC_INSPECTOR_IMAGE:-"integratedcloudnative/ironic-inspector:v1.0-icn"}
56 export IRONIC_BAREMETAL_IMAGE=${IRONIC_BAREMETAL_IMAGE:-"integratedcloudnative/baremetal-operator:v1.0-icn"}
57 export IPA_DOWNLOADER_IMAGE=${IPA_DOWNLOADER_IMAGE:-"integratedcloudnative/ironic-ipa-downloader:v1.0-icn"}
59 # Verify requisites/permissions
60 # Connect to system libvirt
61 export LIBVIRT_DEFAULT_URI=qemu:///system
62 if [ "$USER" != "root" -a "${XDG_RUNTIME_DIR:-}" == "/run/user/0" ] ; then
63 echo "Please use a non-root user, WITH a login shell (e.g. su - USER)"
67 # Check if sudo privileges without password
68 if ! sudo -n uptime &> /dev/null ; then
69 echo "sudo without password is required"
74 OS=$(awk -F= '/^ID=/ { print $2 }' /etc/os-release | tr -d '"')
75 if [[ ! $OS =~ ^(centos|rhel|ubuntu)$ ]]; then
80 # Check CentOS version
81 os_version=$(awk -F= '/^VERSION_ID=/ { print $2 }' /etc/os-release | tr -d '"' | cut -f1 -d'.')
82 if [[ ${os_version} -ne 7 ]] && [[ ${os_version} -ne 18 ]]; then
83 echo "Required CentOS 7 or RHEL 7 or Ubuntu 18.04"
87 # Check d_type support
88 FSTYPE=$(df ${FILESYSTEM} --output=fstype | grep -v Type)
94 if [[ $(xfs_info ${FILESYSTEM} | grep -q "ftype=1") ]]; then
95 echo "Filesystem not supported"
100 echo "Filesystem not supported"
105 if [ ! -d "$WORKING_DIR" ]; then
106 echo "Creating Working Dir"
107 sudo mkdir "$WORKING_DIR"
108 sudo chown "${USER}:${USER}" "$WORKING_DIR"
109 chmod 755 "$WORKING_DIR"
112 function list_nodes {
113 # Includes -machine and -machine-namespace
118 address:.driver_info.ipmi_address,
119 port:.driver_info.ipmi_port,
120 user:.driver_info.ipmi_username,
121 password:.driver_info.ipmi_password,
122 mac: .ports[0].address
125 .driver + "://" + .address + (if .port then ":" + .port else "" end) + " " +
126 .user + " " + .password + " " + .mac' \