2bf0aa3c6e59eeeaff016d422d8d7d6f01226d5c
[icn.git] / deploy / metal3-vm / lib / common.sh
1 #!/bin/bash
2
3 eval "$(go env)"
4
5 SCRIPTDIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
6 USER=`whoami`
7
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."
14     fi
15     CONFIG="${SCRIPTDIR}/../config_${USER}.sh"
16 fi
17 source $CONFIG
18
19 # Set variables
20 # Additional DNS
21 ADDN_DNS=${ADDN_DNS:-}
22 # External interface for routing traffic through the host
23 EXT_IF=${EXT_IF:-}
24 # Provisioning interface
25 PRO_IF=${PRO_IF:-}
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
32 INT_IF=${INT_IF:-}
33 #Root disk to deploy coreOS - use /dev/sda on BM
34 ROOT_DISK_NAME=${ROOT_DISK_NAME-"/dev/sda"}
35 #Container runtime
36 CONTAINER_RUNTIME=${CONTAINER_RUNTIME:-"docker"}
37
38 export EXTERNAL_SUBNET="192.168.111.0/24"
39
40 export SSH_PUB_KEY=~/.ssh/id_rsa.pub
41
42 FILESYSTEM=${FILESYSTEM:="/"}
43
44 WORKING_DIR=${WORKING_DIR:-"/opt/metal3-vm"}
45 NODES_FILE=${NODES_FILE:-"${WORKING_DIR}/ironic_nodes.json"}
46 NODES_PLATFORM=${NODES_PLATFORM:-"libvirt"}
47
48 export NUM_MASTERS=${NUM_MASTERS:-"1"}
49 export NUM_WORKERS=${NUM_WORKERS:-"1"}
50 export VM_EXTRADISKS=${VM_EXTRADISKS:-"false"}
51
52 # Ironic vars
53 export IRONIC_IMAGE=${IRONIC_IMAGE:-"quay.io/metal3-io/ironic:master"}
54 export IRONIC_INSPECTOR_IMAGE=${IRONIC_INSPECTOR_IMAGE:-"quay.io/metal3-io/ironic-inspector"}
55 export IRONIC_DATA_DIR="$WORKING_DIR/ironic"
56
57 # Verify requisites/permissions
58 # Connect to system libvirt
59 export LIBVIRT_DEFAULT_URI=qemu:///system
60 if [ "$USER" != "root" -a "${XDG_RUNTIME_DIR:-}" == "/run/user/0" ] ; then
61     echo "Please use a non-root user, WITH a login shell (e.g. su - USER)"
62     exit 1
63 fi
64
65 # Check if sudo privileges without password
66 if ! sudo -n uptime &> /dev/null ; then
67   echo "sudo without password is required"
68   exit 1
69 fi
70
71 # Check OS
72 OS=$(awk -F= '/^ID=/ { print $2 }' /etc/os-release | tr -d '"')
73 if [[ ! $OS =~ ^(centos|rhel|ubuntu)$ ]]; then
74   echo "Unsupported OS"
75   exit 1
76 fi
77
78 # Check CentOS version
79 os_version=$(awk -F= '/^VERSION_ID=/ { print $2 }' /etc/os-release | tr -d '"' | cut -f1 -d'.')
80 if [[ ${os_version} -ne 7 ]] && [[ ${os_version} -ne 18 ]]; then
81   echo "Required CentOS 7 or RHEL 7 or Ubuntu 18.04"
82   exit 1
83 fi
84
85 # Check d_type support
86 FSTYPE=$(df ${FILESYSTEM} --output=fstype | grep -v Type)
87
88 case ${FSTYPE} in
89   'ext4'|'btrfs')
90   ;;
91   'xfs')
92     if [[ $(xfs_info ${FILESYSTEM} | grep -q "ftype=1") ]]; then
93       echo "Filesystem not supported"
94       exit 1
95     fi
96   ;;
97   *)
98     echo "Filesystem not supported"
99     exit 1
100   ;;
101 esac
102
103 if [ ! -d "$WORKING_DIR" ]; then
104   echo "Creating Working Dir"
105   sudo mkdir "$WORKING_DIR"
106   sudo chown "${USER}:${USER}" "$WORKING_DIR"
107   chmod 755 "$WORKING_DIR"
108 fi
109
110 function list_nodes() {
111     # Includes -machine and -machine-namespace
112     cat $NODES_FILE | \
113         jq '.nodes[] | {
114            name,
115            driver,
116            address:.driver_info.ipmi_address,
117            port:.driver_info.ipmi_port,
118            user:.driver_info.ipmi_username,
119            password:.driver_info.ipmi_password,
120            mac: .ports[0].address
121            } |
122            .name + " " +
123            .driver + "://" + .address + (if .port then ":" + .port else "" end)  + " " +
124            .user + " " + .password + " " + .mac' \
125        | sed 's/"//g'
126 }