fix cpu model for aarch64 kvm
[joid.git] / ci / 03-maasdeploy.sh
index 5ed3934..dcf4b46 100755 (executable)
@@ -12,11 +12,13 @@ if [ ! -e $HOME/.ssh/id_rsa ]; then
 fi
 
 NODE_ARCTYPE=`arch`
+CPU_MODEL="host"
 
 if  [ "ppc64le" == "$NODE_ARCTYPE" ]; then
     NODE_ARCHES="ppc64el"
 elif [ "aarch64" == "$NODE_ARCTYPE" ]; then
     NODE_ARCHES="arm64"
+    CPU_MODEL="host-passthrough"
 else
     NODE_ARCHES="amd64"
 fi
@@ -42,9 +44,21 @@ sudo apt-get install bridge-utils openssh-server bzr git virtinst qemu-kvm libvi
 
 sudo -H pip install --upgrade pip
 
-#first parameter should be custom and second should be either
-# absolute location of file (including file name) or url of the
-# file to download.
+
+usage() {
+  # no xtrace output
+  { set +x; } 2> /dev/null
+
+  echo "OPNFV JOID deployer of the MAAS (Metal as a Service) infrastructure."
+  echo "Usage: $0 custom <path_to_labconfig>"
+  echo "       $0 virtual"
+  exit ${1-0}
+}
+
+if [ "$1" == "help" ] || [ "$1" == "-h" ] || [ "$1" == "--help" ]
+then
+    usage;
+fi
 
 
 #
@@ -52,43 +66,51 @@ sudo -H pip install --upgrade pip
 #
 
 # Get labconfig and generate deployconfig.yaml
-echo_info "Parsing lab configuration file"
+
 case "$labname" in
-    intelpod[569]|orangepod[12]|cengnpod[12] )
-        array=(${labname//pod/ })
-        cp ../labconfig/${array[0]}/pod${array[1]}/labconfig.yaml .
-        python genDeploymentConfig.py -l labconfig.yaml > deployconfig.yaml
-        ;;
-    'attvirpod1' )
-        cp ../labconfig/att/virpod1/labconfig.yaml .
-        python genDeploymentConfig.py -l labconfig.yaml > deployconfig.yaml
-        ;;
     'custom')
+        # Deployment with a custom labconfig file
         labfile=$2
-        if [ -e $labfile ]; then
-            cp $labfile ./labconfig.yaml || true
-        else
-            wget $labconfigfile -t 3 -T 10 -O ./labconfig.yaml || true
+        if [ -z "$labfile" ]; then
+            if [ ! -e ./labconfig.yaml ]; then
+                # no labconfig file was specified and no ci/labconfig.yaml is present
+                echo_error "Labconfig file must be specified when using custom"
+                usage 1
+            else
+                # no labconfig file was specified and but a (backup) ci/labconfig.yaml found
+                echo_warning "Labconfig was not specified, using ./labconfig.yaml instead"
+                # no action needed, ./labconfig.yaml already present
+            fi
+        elif [ ! -e "$labfile" ]; then
+            # labconfig file was specified but does not exist on disk
+            echo_warning "Labconfig not found locally, trying download"
+
+            wget $labfile -t 3 -T 10 -O ./labconfig.yaml || true
             count=`wc -l labconfig.yaml  | cut -d " " -f 1`
             if [ $count -lt 10 ]; then
-                rm -rf labconfig.yaml
+                echo_error "Unable to download labconfig"
+                exit 1
             fi
-        fi
-        if [ ! -e ./labconfig.yaml ]; then
-            virtinstall=1
-            labname="default"
-            cp ../labconfig/default/labconfig.yaml ./
-            cp ../labconfig/default/deployconfig.yaml ./
         else
-            python genDeploymentConfig.py -l labconfig.yaml > deployconfig.yaml
-            labname=`grep "maas_name" deployconfig.yaml | cut -d ':' -f 2 | sed -e 's/ //'`
+            echo_info "Using $labfile to setup deployment"
+            cp $labfile ./labconfig.yaml
         fi
+
+        python genDeploymentConfig.py -l labconfig.yaml > deployconfig.yaml
+        labname=`grep "maas_name" deployconfig.yaml | cut -d ':' -f 2 | sed -e 's/ //'`
         ;;
-    )
-        virtinstall=1
-        labname="default"
+    'virtual'|'')
+        # Virtual deployment using a default labconfig file
+        echo_info "Using default labconfig for virtual install"
         cp ../labconfig/default/labconfig.yaml ./
         python genDeploymentConfig.py -l labconfig.yaml > deployconfig.yaml
+        labname="default"
+        virtinstall=1
+        ;;
+    * )
+        # Unknown argument
+        echo_error "Unknown script argument: $labname"
+        usage 1
         ;;
 esac
 
@@ -376,7 +398,7 @@ addnodes(){
 
     if [ "$virtinstall" -eq 1 ]; then
         netw=" --network bridge=virbr0,model=virtio"
-    elif ([ $VIRSHHOST != "" ]); then
+    elif ([ "$VIRSHHOST" != "" ]); then
         # Get the bridge hosting the remote virsh
         brid=$(ssh $VIRSHHOST "ip a l | grep $VIRSHHOST | perl -pe 's/.* (.*)\$/\$1/g'")
         netw=" --network bridge=$brid,model=virtio"
@@ -410,7 +432,7 @@ addnodes(){
 
     echo_info "Creating and adding bootstrap node"
 
-    virt-install --connect $VIRSHURL --name bootstrap --ram 4098 --cpu host --vcpus 2 \
+    virt-install --connect $VIRSHURL --name bootstrap --ram 4098 --cpu $CPU_MODEL --vcpus 2 \
                  --disk size=20,format=qcow2,bus=virtio,cache=directsync,io=native,pool=default \
                  $netw --boot network,hd,menu=off --noautoconsole \
                  --print-xml | tee bootstrap
@@ -445,7 +467,7 @@ addnodes(){
            units=$(($units - 1));
            NODE_NAME=`cat labconfig.json | jq ".lab.racks[].nodes[$units].name" | cut -d \" -f 2 `
 
-            virt-install --connect $VIRSHURL --name $NODE_NAME --ram 8192 --cpu host --vcpus 4 \
+            virt-install --connect $VIRSHURL --name $NODE_NAME --ram 8192 --cpu $CPU_MODEL --vcpus 4 \
                      --disk size=120,format=qcow2,bus=virtio,cache=directsync,io=native,pool=default \
                      $netw $netw --boot network,hd,menu=off --noautoconsole --print-xml | tee $NODE_NAME