#!/bin/bash -e #### NOTE TO SELF SO I DON'T FORGET LATER: you can pass the name of an environment JSON file to this script # (e.g., test-custom instead of Test-Laptop) to build using that one # bash imports source ./virtualbox_env.sh if [[ -f ./vbox_override.sh ]] { source ./vbox_override.sh } if [[ "$OSTYPE" == msys || "$OSTYPE" == cygwin ]] { global WIN := 'TRUE' } set -x if [[ -f ./proxy_setup.sh ]] { source ./proxy_setup.sh } if [[ -z "$CURL" ]] { echo "CURL is not defined" exit } # Bootstrap VM Defaults (these need to be exported for Vagrant's Vagrantfile) # DO NOT EDIT THESE HERE, INSTEAD EDIT THEM IN vbox_override.sh export BOOTSTRAP_APT_MIRROR=$(BOOTSTRAP_APT_MIRROR:-) export BOOTSTRAP_VM_MEM=$(BOOTSTRAP_VM_MEM:-2048) export BOOTSTRAP_VM_CPUS=$(BOOTSTRAP_VM_CPUS:-1) export BOOTSTRAP_VM_DRIVE_SIZE=$(BOOTSTRAP_VM_DRIVE_SIZE:-20480) export CLUSTER_VM_MEM=$(CLUSTER_VM_MEM:-2560) export CLUSTER_VM_CPUS=$(CLUSTER_VM_CPUS:-2) export CLUSTER_VM_DRIVE_SIZE=$(CLUSTER_VM_DRIVE_SIZE:-20480) global BASE_DIR := $[dirname $(BASH_SOURCE[0])] global VBOX_DIR := ""$BASE_DIR/vbox"" global P := $[cd $VBOX_DIR ; /bin/pwd] || exit # from EVW packer branch proc vbm_import { var -r image_name = $1 var -r vm_name = $2 shift 2 # this currently assumes that only one virtual system is imported $VBM import $image_name --vsys 0 --vmname $vm_name @Argv } ###################################################### # Function to download files necessary for VM stand-up # proc download_VM_files { pushd $P global ROM := 'gpxe-1.0.1-80861004.rom' global CACHEDIR := ""~/bcpc-cache if [[ ! -f $ROM ]] { if [[ -f $CACHEDIR/$ROM ]] { cp $CACHEDIR/$ROM . } else { $CURL -o gpxe-1.0.1-80861004.rom "http://rom-o-matic.net/gpxe/gpxe-1.0.1/contrib/rom-o-matic/build.php" -H "Origin: http://rom-o-matic.net" -H "Host: rom-o-matic.net" -H "Content-Type: application/x-www-form-urlencoded" -H "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8" -H "Referer: http://rom-o-matic.net/gpxe/gpxe-1.0.1/contrib/rom-o-matic/build.php" -H "Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3" --data "version=1.0.1&use_flags=1&ofmt=ROM+binary+%28flashable%29+image+%28.rom%29&nic=all-drivers&pci_vendor_code=8086&pci_device_code=1004&PRODUCT_NAME=&PRODUCT_SHORT_NAME=gPXE&CONSOLE_PCBIOS=on&BANNER_TIMEOUT=20&NET_PROTO_IPV4=on&COMCONSOLE=0x3F8&COMSPEED=115200&COMDATA=8&COMPARITY=0&COMSTOP=1&DOWNLOAD_PROTO_TFTP=on&DNS_RESOLVER=on&NMB_RESOLVER=off&IMAGE_ELF=on&IMAGE_NBI=on&IMAGE_MULTIBOOT=on&IMAGE_PXE=on&IMAGE_SCRIPT=on&IMAGE_BZIMAGE=on&IMAGE_COMBOOT=on&AUTOBOOT_CMD=on&NVO_CMD=on&CONFIG_CMD=on&IFMGMT_CMD=on&IWMGMT_CMD=on&ROUTE_CMD=on&IMAGE_CMD=on&DHCP_CMD=on&SANBOOT_CMD=on&LOGIN_CMD=on&embedded_script=&A=Get+Image" } if [[ -d $CACHEDIR && ! -f $CACHEDIR/$ROM ]] { cp $ROM $CACHEDIR/$ROM } } global ISO := 'ubuntu-14.04-mini.iso' # Grab the Ubuntu installer image if [[ ! -f $ISO ]] { if [[ -f $CACHEDIR/$ISO ]] { cp $CACHEDIR/$ISO . } else { #$CURL -o $ISO http://archive.ubuntu.com/ubuntu/dists/trusty/main/installer-amd64/current/images/netboot/mini.iso $CURL -o $ISO http://archive.ubuntu.com/ubuntu/dists/trusty-updates/main/installer-amd64/current/images/netboot/mini.iso } if [[ -d $CACHEDIR && ! -f $CACHEDIR/$ISO ]] { cp $ISO $CACHEDIR } } global BOX := ''trusty-server-cloudimg-amd64-vagrant-disk1.box'' # Can we create the bootstrap VM via Vagrant if hash vagrant !2 > /dev/null { echo "Vagrant detected - downloading Vagrant box for bcpc-bootstrap VM" if [[ ! -f $BOX ]] { if [[ -f $CACHEDIR/$BOX ]] { cp $CACHEDIR/$BOX . } else { $CURL -o $BOX http://cloud-images.ubuntu.com/vagrant/trusty/current/$BOX } if [[ -d $CACHEDIR && ! -f $CACHEDIR/$BOX ]] { cp $BOX $CACHEDIR } } } popd } ################################################################################ # Function to remove VirtualBox DHCP servers # By default, checks for any DHCP server on networks without VM's & removes them # (expecting if a remove fails the function should bail) # If a network is provided, removes that network's DHCP server # (or passes the vboxmanage error and return code up to the caller) # proc remove_DHCPservers { var network_name = $(1-) if [[ -z "$network_name" ]] { # make a list of VM UUID's var vms = $[$VBM list vms|sed 's/^.*{\([0-9a-f-]*\)}/\1/] # make a list of networks (e.g. "vobxnet0 vboxnet1") var vm_networks = $[for vm in [$vms] { \ $VBM showvminfo --details --machinereadable $vm | \ grep -i '^hostonlyadapter[2-9]=' | \ sed -e 's/^.*=//' -e 's/"//g'; \ } | sort -u] # will produce a regular expression string of networks which are in use by VMs # (e.g. ^vboxnet0$|^vboxnet1$) var existing_nets_reg_ex = $[sed -e 's/^/^/' -e '/$/$/' -e 's/ /$|^/g' <<< $vm_networks] $VBM list dhcpservers | grep -E "^NetworkName:\s+HostInterfaceNetworking" | awk '{print $2}' | while read -r network_name { [[ -n $existing_nets_reg_ex ]] && ! egrep -q $existing_nets_reg_ex <<< $network_name && continue remove_DHCPservers $network_name } } else { $VBM dhcpserver remove --netname $network_name && var return = '0' || var return = $Status return $return } } ################################################################### # Function to create the bootstrap VM # uses Vagrant or stands-up the VM in VirtualBox for manual install # proc create_bootstrap_VM { pushd $P remove_DHCPservers if hash vagrant !2 > /dev/null { echo "Vagrant detected - using Vagrant to initialize bcpc-bootstrap VM" cp ../Vagrantfile . vagrant up global keyfile := $[vagrant ssh-config bootstrap | awk '/Host bootstrap/,/^$/{ if ($0 ~ /^ +IdentityFile/) print $2}] if [[ -f "$keyfile" ]] { cp $keyfile insecure_private_key } } else { echo "Vagrant not detected - using raw VirtualBox for bcpc-bootstrap" if [[ -z "$WIN" ]] { # Make the three BCPC networks we'll need, but clear all nets and dhcpservers first for i in [0 1 2 3 4 5 6 7 8 9] { if [[ ! -z `$VBM list hostonlyifs | grep vboxnet$i | cut -f2 -d" "` ]] { $VBM hostonlyif remove vboxnet$i || true } } } else { # On Windows the first interface has no number # The second interface is #2 # Remove in reverse to avoid substring matching issue for i in [10 9 8 7 6 5 4 3 2 1] { if [[ i -gt 1 ]] { global IF := ""VirtualBox Host-Only Ethernet Adapter #$i""; } else { global IF := '"VirtualBox Host-Only Ethernet Adapter'"; } if [[ ! -z `$VBM list hostonlyifs | grep "$IF"` ]] { $VBM hostonlyif remove $IF } } } $VBM hostonlyif create $VBM hostonlyif create $VBM hostonlyif create if [[ -z "$WIN" ]] { remove_DHCPservers vboxnet0 || true remove_DHCPservers vboxnet1 || true remove_DHCPservers vboxnet2 || true # use variable names to refer to our three interfaces to disturb # the remaining code that refers to these as little as possible - # the names are compact on Unix : global VBN0 := 'vboxnet0' global VBN1 := 'vboxnet1' global VBN2 := 'vboxnet2' } else { # However, the names are verbose on Windows : global VBN0 := '"VirtualBox Host-Only Ethernet Adapter'" global VBN1 := '"VirtualBox Host-Only Ethernet Adapter #2'" global VBN2 := '"VirtualBox Host-Only Ethernet Adapter #3'" } $VBM hostonlyif ipconfig $VBN0 --ip 10.0.100.2 --netmask 255.255.255.0 $VBM hostonlyif ipconfig $VBN1 --ip 172.16.100.2 --netmask 255.255.255.0 $VBM hostonlyif ipconfig $VBN2 --ip 192.168.100.2 --netmask 255.255.255.0 # Create bootstrap VM for vm in [bcpc-bootstrap] { # Only if VM doesn't exist if ! $VBM list vms | grep "^\"$(vm)\"" { # define this if you have a pre-built OVA image # (virtualbox exported machine image), for example as # built by # https://github.com/ericvw/chef-bcpc/tree/packer/bootstrap global ARCHIVED_BOOTSTRAP := '../images/build/virtualbox/bcpc-bootstrap/packer-bcpc-bootstrap_ubuntu-14.04.2-amd64.ova' if [[ -n "$ARCHIVED_BOOTSTRAP" && -f "$ARCHIVED_BOOTSTRAP" ]] { vbm_import $ARCHIVED_BOOTSTRAP bcpc-bootstrap } else { exit $VBM createvm --name $vm --ostype Ubuntu_64 --basefolder $P --register $VBM modifyvm $vm --memory $BOOTSTRAP_VM_MEM $VBM modifyvm $vm --cpus $BOOTSTRAP_VM_CPUS $VBM modifyvm $vm --vram 16 $VBM storagectl $vm --name "SATA Controller" --add sata $VBM storagectl $vm --name "IDE Controller" --add ide # Create a number of hard disks global port := '0' for disk in [a] { $VBM createhd --filename $P/$vm/$vm-$disk.vdi --size $BOOTSTRAP_VM_DRIVE_SIZE $VBM storageattach $vm --storagectl "SATA Controller" --device 0 --port $port --type hdd --medium $P/$vm/$vm-$disk.vdi global port := $(port+1) } # Add the bootable mini ISO for installing Ubuntu ISO $VBM storageattach $vm --storagectl "IDE Controller" --device 0 --port 0 --type dvddrive --medium $ISO $VBM modifyvm $vm --boot1 disk } # Add the network interfaces $VBM modifyvm $vm --nic1 nat $VBM modifyvm $vm --nic2 hostonly --hostonlyadapter2 $VBN0 $VBM modifyvm $vm --nic3 hostonly --hostonlyadapter3 $VBN1 $VBM modifyvm $vm --nic4 hostonly --hostonlyadapter4 $VBN2 } } } popd } ################################################################### # Function to create the BCPC cluster VMs # proc create_cluster_VMs { # Gather VirtualBox networks in use by bootstrap VM (Vagrant simply uses the first not in-use so have to see what was picked) global oifs := $IFS global IFS := '$'\n'' global bootstrap_interfaces := '('$($VBM showvminfo bcpc-bootstrap --machinereadable|egrep '^hostonlyadapter[0-9]=' |sort|sed -e 's/.*=//' -e 's/"//g')) global IFS := $oifs global VBN0 := $(bootstrap_interfaces[0]) global VBN1 := $(bootstrap_interfaces[1]) global VBN2 := $(bootstrap_interfaces[2]) # Create each VM for vm in [bcpc-vm1 bcpc-vm2 bcpc-vm3] { # Only if VM doesn't exist if ! $VBM list vms | grep "^\"$(vm)\"" { $VBM createvm --name $vm --ostype Ubuntu_64 --basefolder $P --register $VBM modifyvm $vm --memory $CLUSTER_VM_MEM $VBM modifyvm $vm --cpus $CLUSTER_VM_CPUS $VBM modifyvm $vm --vram 16 $VBM storagectl $vm --name "SATA Controller" --add sata # Create a number of hard disks global port := '0' for disk in [a b c d e] { $VBM createhd --filename $P/$vm/$vm-$disk.vdi --size $CLUSTER_VM_DRIVE_SIZE $VBM storageattach $vm --storagectl "SATA Controller" --device 0 --port $port --type hdd --medium $P/$vm/$vm-$disk.vdi global port := $(port+1) } # Add the network interfaces $VBM modifyvm $vm --nic1 hostonly --hostonlyadapter1 $VBN0 --nictype1 82543GC $VBM setextradata $vm VBoxInternal/Devices/pcbios/0/Config/LanBootRom $P/gpxe-1.0.1-80861004.rom $VBM modifyvm $vm --nic2 hostonly --hostonlyadapter2 $VBN1 $VBM modifyvm $vm --nic3 hostonly --hostonlyadapter3 $VBN2 # Set hardware acceleration options $VBM modifyvm $vm --largepages on --vtxvpid on --hwvirtex on --nestedpaging on --ioapic off } } } proc install_cluster { global environment := $(1-Test-Laptop) global ip := $(2-10.0.100.3) # VMs are now created - if we are using Vagrant, finish the install process. if hash vagrant !2 > /dev/null { # N.B. As of Aug 2013, grub-pc gets confused and wants to prompt re: 3-way # merge. Sigh. #vagrant ssh -c "sudo ucf -p /etc/default/grub" #vagrant ssh -c "sudo ucfr -p grub-pc /etc/default/grub" vagrant ssh -c "test -f /etc/default/grub.ucf-dist && sudo mv /etc/default/grub.ucf-dist /etc/default/grub" || true # Duplicate what d-i's apt-setup generators/50mirror does when set in preseed if test -n $http_proxy { if ! vagrant ssh -c "grep -z '^Acquire::http::Proxy ' /etc/apt/apt.conf" { vagrant ssh -c "echo 'Acquire::http::Proxy \"$http_proxy\";' | sudo tee -a /etc/apt/apt.conf" } # write the proxy to a known absolute location on the filesystem so that it can be sourced by build_bins.sh (and maybe other things) global PROXY_INFO_SH := '"/home/vagrant/proxy_info.sh'" if ! vagrant ssh -c "test -f $PROXY_INFO_SH" { vagrant ssh -c "echo -e 'export http_proxy=$http_proxy\nexport https_proxy=$https_proxy' | sudo tee -a $PROXY_INFO_SH" } global CURLRC := '"/home/vagrant/.curlrc'" if ! vagrant ssh -c "test -f $CURLRC" { vagrant ssh -c "echo -e 'proxy = $http_proxy' | sudo tee -a $CURLRC" } global GITCONFIG := '"/home/vagrant/.gitconfig'" if ! vagrant ssh -c "test -f $GITCONFIG" { vagrant ssh -c "echo -e '[http]\nproxy = $http_proxy' | sudo tee -a $GITCONFIG" } # copy any additional provided CA root certificates to the system store # note that these certificates must follow the restrictions of update-ca-certificates (i.e., end in .crt and be PEM) global CUSTOM_BASE := '"custom'" global CUSTOM_CA_DIR := ""/usr/share/ca-certificates/$CUSTOM_BASE"" for CERT in [$[ls -1 $BASE_DIR/cacerts]] { vagrant ssh -c "sudo mkdir -p $CUSTOM_CA_DIR" vagrant ssh -c "if [[ ! -f $CUSTOM_CA_DIR/$CERT ]]; then sudo cp /chef-bcpc-host/cacerts/$CERT $CUSTOM_CA_DIR/$CERT; fi" vagrant ssh -c "echo $CUSTOM_BASE/$CERT | sudo tee -a /etc/ca-certificates.conf" } vagrant ssh -c "sudo /usr/sbin/update-ca-certificates" } echo "Bootstrap complete - setting up Chef server" echo "N.B. This may take approximately 30-45 minutes to complete." ./bootstrap_chef.sh --vagrant-remote $ip $environment ./enroll_cobbler.sh } else { ./non_vagrant_boot.sh } } # only execute functions if being run and not sourced if [[ "${BASH_SOURCE[0]}" == "${0}" ]] { download_VM_files create_bootstrap_VM create_cluster_VMs install_cluster $ifsjoin(Argv) } (CommandList children: [ (C {(source)} {(./virtualbox_env.sh)}) (If arms: [ (if_arm cond: [ (Sentence child: (DBracket expr:(BoolUnary op_id:BoolUnary_f child:{(./vbox_override.sh)})) terminator: ) ] action: [(C {(source)} {(./vbox_override.sh)})] spids: [-1 29] ) ] spids: [-1 36] ) (If arms: [ (if_arm cond: [ (Sentence child: (DBracket expr: (LogicalOr left: (BoolBinary op_id: BoolBinary_GlobDEqual left: {(DQ ($ VSub_Name "$OSTYPE"))} right: {(msys)} ) right: (BoolBinary op_id: BoolBinary_GlobDEqual left: {(DQ ($ VSub_Name "$OSTYPE"))} right: {(cygwin)} ) ) ) terminator: ) ] action: [ (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:WIN) op:Equal rhs:{(TRUE)} spids:[67])] spids: [67] ) ] spids: [-1 64] ) ] spids: [-1 70] ) (C {(set)} {(-x)}) (If arms: [ (if_arm cond: [ (Sentence child: (DBracket expr:(BoolUnary op_id:BoolUnary_f child:{(./proxy_setup.sh)})) terminator: ) ] action: [(C {(.)} {(./proxy_setup.sh)})] spids: [-1 89] ) ] spids: [-1 96] ) (If arms: [ (if_arm cond: [ (Sentence child: (DBracket expr:(BoolUnary op_id:BoolUnary_z child:{(DQ ($ VSub_Name "$CURL"))})) terminator: ) ] action: [(C {(echo)} {(DQ ("CURL is not defined"))}) (C {(exit)})] spids: [-1 111] ) ] spids: [-1 123] ) (C {(export)} {(Lit_VarLike "BOOTSTRAP_APT_MIRROR=") (BracedVarSub token: suffix_op: (StringUnary op_id:VTest_ColonHyphen arg_word:{}) spids: [135 138] ) } ) (C {(export)} {(Lit_VarLike "BOOTSTRAP_VM_MEM=") (BracedVarSub token: suffix_op: (StringUnary op_id:VTest_ColonHyphen arg_word:{(2048)}) spids: [143 147] ) } ) (C {(export)} {(Lit_VarLike "BOOTSTRAP_VM_CPUS=") (BracedVarSub token: suffix_op: (StringUnary op_id:VTest_ColonHyphen arg_word:{(1)}) spids: [152 156] ) } ) (C {(export)} {(Lit_VarLike "BOOTSTRAP_VM_DRIVE_SIZE=") (BracedVarSub token: suffix_op: (StringUnary op_id:VTest_ColonHyphen arg_word:{(20480)}) spids: [161 165] ) } ) (C {(export)} {(Lit_VarLike "CLUSTER_VM_MEM=") (BracedVarSub token: suffix_op: (StringUnary op_id:VTest_ColonHyphen arg_word:{(2560)}) spids: [170 174] ) } ) (C {(export)} {(Lit_VarLike "CLUSTER_VM_CPUS=") (BracedVarSub token: suffix_op: (StringUnary op_id:VTest_ColonHyphen arg_word:{(2)}) spids: [179 183] ) } ) (C {(export)} {(Lit_VarLike "CLUSTER_VM_DRIVE_SIZE=") (BracedVarSub token: suffix_op: (StringUnary op_id:VTest_ColonHyphen arg_word:{(20480)}) spids: [188 192] ) } ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:BASE_DIR) op: Equal rhs: { (CommandSubPart command_list: (CommandList children: [ (C {(dirname)} { (BracedVarSub token: bracket_op: (ArrayIndex expr:(ArithWord w:{(Lit_Digits 0)})) spids: [199 204] ) } ) ] ) left_token: spids: [196 205] ) } spids: [195] ) ] spids: [195] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:VBOX_DIR) op: Equal rhs: {(DQ ($ VSub_Name "$BASE_DIR") (/vbox))} spids: [207] ) ] spids: [207] ) (AndOr children: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:P) op: Equal rhs: { (DQ (CommandSubPart command_list: (CommandList children: [ (Sentence child: (C {(cd)} {($ VSub_Name "$VBOX_DIR")}) terminator: ) (C {(/bin/pwd)}) ] ) left_token: spids: [215 223] ) ) } spids: [213] ) ] spids: [213] ) (C {(exit)}) ] op_id: Op_DPipe ) (FuncDef name: vbm_import body: (BraceGroup children: [ (Assignment keyword: Assign_Local flags: ["'-r'"] pairs: [ (assign_pair lhs: (LhsName name:image_name) op: Equal rhs: {(DQ ($ VSub_Number "$1"))} spids: [245] ) ] spids: [241] ) (Assignment keyword: Assign_Local flags: ["'-r'"] pairs: [ (assign_pair lhs: (LhsName name:vm_name) op: Equal rhs: {(DQ ($ VSub_Number "$2"))} spids: [255] ) ] spids: [251] ) (C {(shift)} {(2)}) (C {(DQ ($ VSub_Name "$VBM"))} {(import)} {(DQ ($ VSub_Name "$image_name"))} {(--vsys)} {(0)} {(--vmname)} {(DQ ($ VSub_Name "$vm_name"))} {(DQ ($ VSub_At "$@"))} ) ] spids: [238] ) spids: [234 237] ) (FuncDef name: download_VM_files body: (BraceGroup children: [ (C {(pushd)} {($ VSub_Name "$P")}) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:ROM) op: Equal rhs: {(gpxe-1.0.1-80861004.rom)} spids: [319] ) ] spids: [319] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:CACHEDIR) op: Equal rhs: {(TildeSubPart prefix:"") (/bcpc-cache)} spids: [323] ) ] spids: [323] ) (If arms: [ (if_arm cond: [ (Sentence child: (DBracket expr: (LogicalNot child: (BoolUnary op_id:BoolUnary_f child:{($ VSub_Name "$ROM")}) ) ) terminator: ) ] action: [ (If arms: [ (if_arm cond: [ (Sentence child: (DBracket expr: (BoolUnary op_id: BoolUnary_f child: {($ VSub_Name "$CACHEDIR") (/) ($ VSub_Name "$ROM")} ) ) terminator: ) ] action: [ (C {(cp)} {($ VSub_Name "$CACHEDIR") (/) ($ VSub_Name "$ROM")} {(.)}) ] spids: [-1 358] ) ] else_action: [ (C {($ VSub_Name "$CURL")} {(-o)} {(gpxe-1.0.1-80861004.rom)} { (DQ ( "http://rom-o-matic.net/gpxe/gpxe-1.0.1/contrib/rom-o-matic/build.php" ) ) } {(-H)} {(DQ ("Origin: http://rom-o-matic.net"))} {(-H)} {(DQ ("Host: rom-o-matic.net"))} {(-H)} {(DQ ("Content-Type: application/x-www-form-urlencoded"))} {(-H)} {(DQ ("Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"))} {(-H)} { (DQ ( "Referer: http://rom-o-matic.net/gpxe/gpxe-1.0.1/contrib/rom-o-matic/build.php" ) ) } {(-H)} {(DQ ("Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3"))} {(--data)} { (DQ ( "version=1.0.1&use_flags=1&ofmt=ROM+binary+%28flashable%29+image+%28.rom%29&nic=all-drivers&pci_vendor_code=8086&pci_device_code=1004&PRODUCT_NAME=&PRODUCT_SHORT_NAME=gPXE&CONSOLE_PCBIOS=on&BANNER_TIMEOUT=20&NET_PROTO_IPV4=on&COMCONSOLE=0x3F8&COMSPEED=115200&COMDATA=8&COMPARITY=0&COMSTOP=1&DOWNLOAD_PROTO_TFTP=on&DNS_RESOLVER=on&NMB_RESOLVER=off&IMAGE_ELF=on&IMAGE_NBI=on&IMAGE_MULTIBOOT=on&IMAGE_PXE=on&IMAGE_SCRIPT=on&IMAGE_BZIMAGE=on&IMAGE_COMBOOT=on&AUTOBOOT_CMD=on&NVO_CMD=on&CONFIG_CMD=on&IFMGMT_CMD=on&IWMGMT_CMD=on&ROUTE_CMD=on&IMAGE_CMD=on&DHCP_CMD=on&SANBOOT_CMD=on&LOGIN_CMD=on&embedded_script=&A=Get+Image" ) ) } ) ] spids: [370 428] ) (If arms: [ (if_arm cond: [ (Sentence child: (DBracket expr: (LogicalAnd left: (BoolUnary op_id: BoolUnary_d child: {($ VSub_Name "$CACHEDIR")} ) right: (LogicalNot child: (BoolUnary op_id: BoolUnary_f child: {($ VSub_Name "$CACHEDIR") (/) ($ VSub_Name "$ROM")} ) ) ) ) terminator: ) ] action: [ (C {(cp)} {($ VSub_Name "$ROM")} {($ VSub_Name "$CACHEDIR") (/) ($ VSub_Name "$ROM")} ) ] spids: [-1 452] ) ] spids: [-1 464] ) ] spids: [-1 342] ) ] spids: [-1 467] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:ISO) op: Equal rhs: {(ubuntu-14.04-mini.iso)} spids: [471] ) ] spids: [471] ) (If arms: [ (if_arm cond: [ (Sentence child: (DBracket expr: (LogicalNot child: (BoolUnary op_id:BoolUnary_f child:{($ VSub_Name "$ISO")}) ) ) terminator: ) ] action: [ (If arms: [ (if_arm cond: [ (Sentence child: (DBracket expr: (BoolUnary op_id: BoolUnary_f child: {($ VSub_Name "$CACHEDIR") (/) ($ VSub_Name "$ISO")} ) ) terminator: ) ] action: [ (C {(cp)} {($ VSub_Name "$CACHEDIR") (/) ($ VSub_Name "$ISO")} {(.)}) ] spids: [-1 509] ) ] else_action: [ (C {($ VSub_Name "$CURL")} {(-o)} {($ VSub_Name "$ISO")} {(http) (Lit_Other ":") ( //archive.ubuntu.com/ubuntu/dists/trusty-updates/main/installer-amd64/current/images/netboot/mini.iso ) } ) ] spids: [521 539] ) (If arms: [ (if_arm cond: [ (Sentence child: (DBracket expr: (LogicalAnd left: (BoolUnary op_id: BoolUnary_d child: {($ VSub_Name "$CACHEDIR")} ) right: (LogicalNot child: (BoolUnary op_id: BoolUnary_f child: {($ VSub_Name "$CACHEDIR") (/) ($ VSub_Name "$ISO")} ) ) ) ) terminator: ) ] action: [(C {(cp)} {($ VSub_Name "$ISO")} {($ VSub_Name "$CACHEDIR")})] spids: [-1 563] ) ] spids: [-1 573] ) ] spids: [-1 493] ) ] spids: [-1 576] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:BOX) op: Equal rhs: {(SQ )} spids: [580] ) ] spids: [580] ) (If arms: [ (if_arm cond: [ (Sentence child: (SimpleCommand words: [{(hash)} {(vagrant)}] redirects: [ (Redir op_id: Redir_Great fd: 2 arg_word: {(/dev/null)} spids: [597] ) ] ) terminator: ) ] action: [ (C {(echo)} {(DQ ("Vagrant detected - downloading Vagrant box for bcpc-bootstrap VM"))} ) (If arms: [ (if_arm cond: [ (Sentence child: (DBracket expr: (LogicalNot child: (BoolUnary op_id:BoolUnary_f child:{($ VSub_Name "$BOX")}) ) ) terminator: ) ] action: [ (If arms: [ (if_arm cond: [ (Sentence child: (DBracket expr: (BoolUnary op_id: BoolUnary_f child: {($ VSub_Name "$CACHEDIR") (/) ($ VSub_Name "$BOX")} ) ) terminator: ) ] action: [ (C {(cp)} {($ VSub_Name "$CACHEDIR") (/) ($ VSub_Name "$BOX")} {(.)}) ] spids: [-1 642] ) ] else_action: [ (C {($ VSub_Name "$CURL")} {(-o)} {($ VSub_Name "$BOX")} {(http) (Lit_Other ":") (//cloud-images.ubuntu.com/vagrant/trusty/current/) ($ VSub_Name "$BOX") } ) ] spids: [654 669] ) (If arms: [ (if_arm cond: [ (Sentence child: (DBracket expr: (LogicalAnd left: (BoolUnary op_id: BoolUnary_d child: {($ VSub_Name "$CACHEDIR")} ) right: (LogicalNot child: (BoolUnary op_id: BoolUnary_f child: {($ VSub_Name "$CACHEDIR") (/) ($ VSub_Name "$BOX") } ) ) ) ) terminator: ) ] action: [ (C {(cp)} {($ VSub_Name "$BOX")} {($ VSub_Name "$CACHEDIR")}) ] spids: [-1 693] ) ] spids: [-1 703] ) ] spids: [-1 626] ) ] spids: [-1 706] ) ] spids: [-1 603] ) ] spids: [-1 709] ) (C {(popd)}) ] spids: [310] ) spids: [306 309] ) (FuncDef name: remove_DHCPservers body: (BraceGroup children: [ (Assignment keyword: Assign_Local pairs: [ (assign_pair lhs: (LhsName name:network_name) op: Equal rhs: { (BracedVarSub token: suffix_op: (StringUnary op_id:VTest_Hyphen arg_word:{}) spids: [749 752] ) } spids: [748] ) ] spids: [746] ) (If arms: [ (if_arm cond: [ (Sentence child: (DBracket expr: (BoolUnary op_id:BoolUnary_z child:{(DQ ($ VSub_Name "$network_name"))}) ) terminator: ) ] action: [ (Assignment keyword: Assign_Local pairs: [ (assign_pair lhs: (LhsName name:vms) op: Equal rhs: { (CommandSubPart command_list: (CommandList children: [ (Pipeline children: [ (C {($ VSub_Name "$VBM")} {(list)} {(vms)}) (C {(sed)} {(SQ <"s/^.*{\\([0-9a-f-]*\\)}/\\1/">)}) ] negated: False ) ] ) left_token: spids: [778 790] ) } spids: [777] ) ] spids: [775] ) (Assignment keyword: Assign_Local pairs: [ (assign_pair lhs: (LhsName name:vm_networks) op: Equal rhs: { (CommandSubPart command_list: (CommandList children: [ (Pipeline children: [ (ForEach iter_name: vm iter_words: [{($ VSub_Name "$vms")}] do_arg_iter: False body: (DoGroup children: [ (Sentence child: (Pipeline children: [ (C {($ VSub_Name "$VBM")} {(showvminfo)} {(--details)} {(--machinereadable)} {($ VSub_Name "$vm")} ) (C {(grep)} {(-i)} {(SQ <"^hostonlyadapter[2-9]=">)} ) (C {(sed)} {(-e)} {(SQ <"s/^.*=//">)} {(-e)} {(SQ <"s/\"//g">)} ) ] negated: False ) terminator: ) ] spids: [810 857] ) spids: [806 808] ) (C {(sort)} {(-u)}) ] negated: False ) ] ) left_token: spids: [800 864] ) } spids: [799] ) ] spids: [797] ) (Assignment keyword: Assign_Local pairs: [ (assign_pair lhs: (LhsName name:existing_nets_reg_ex) op: Equal rhs: { (CommandSubPart command_list: (CommandList children: [ (SimpleCommand words: [ {(sed)} {(-e)} {(SQ <"s/^/^/">)} {(-e)} {(SQ <"/$/$/">)} {(-e)} {(SQ <"s/ /$|^/g">)} ] redirects: [ (Redir op_id: Redir_TLess fd: -1 arg_word: {(DQ ($ VSub_Name "$vm_networks"))} spids: [899] ) ] ) ] ) left_token: spids: [878 904] ) } spids: [877] ) ] spids: [875] ) (Pipeline children: [ (C {($ VSub_Name "$VBM")} {(list)} {(dhcpservers)}) (C {(grep)} {(-E)} { (DQ ("^NetworkName:") (EscapedLiteralPart token:) ("+HostInterfaceNetworking") ) } ) (C {(awk)} {(SQ <"{print $2}">)}) (While cond: [ (Sentence child: (C {(read)} {(-r)} {(network_name)}) terminator: ) ] body: (DoGroup children: [ (AndOr children: [ (DBracket expr: (BoolUnary op_id: BoolUnary_n child: {($ VSub_Name "$existing_nets_reg_ex")} ) ) (AndOr children: [ (Pipeline children: [ (SimpleCommand words: [ {(egrep)} {(-q)} {($ VSub_Name "$existing_nets_reg_ex")} ] redirects: [ (Redir op_id: Redir_TLess fd: -1 arg_word: {($ VSub_Name "$network_name")} spids: [967] ) ] ) ] negated: True ) (ControlFlow token: ) ] op_id: Op_DAmp ) ] op_id: Op_DAmp ) (C {(remove_DHCPservers)} {($ VSub_Name "$network_name")}) ] spids: [946 981] ) ) ] negated: False ) ] spids: [-1 768] ) ] else_action: [ (AndOr children: [ (C {($ VSub_Name "$VBM")} {(dhcpserver)} {(remove)} {(--netname)} {(DQ ($ VSub_Name "$network_name"))} ) (AndOr children: [ (Assignment keyword: Assign_Local pairs: [ (assign_pair lhs: (LhsName name:return) op: Equal rhs: {(0)} spids: [1003] ) ] spids: [1001] ) (Assignment keyword: Assign_Local pairs: [ (assign_pair lhs: (LhsName name:return) op: Equal rhs: {($ VSub_QMark "$?")} spids: [1010] ) ] spids: [1008] ) ] op_id: Op_DPipe ) ] op_id: Op_DAmp ) (ControlFlow token: arg_word: {($ VSub_Name "$return")} ) ] spids: [984 1019] ) ] spids: [743] ) spids: [739 742] ) (FuncDef name: create_bootstrap_VM body: (BraceGroup children: [ (C {(pushd)} {($ VSub_Name "$P")}) (C {(remove_DHCPservers)}) (If arms: [ (if_arm cond: [ (Sentence child: (SimpleCommand words: [{(hash)} {(vagrant)}] redirects: [ (Redir op_id: Redir_Great fd: 2 arg_word: {(/dev/null)} spids: [1059] ) ] ) terminator: ) ] action: [ (C {(echo)} {(DQ ("Vagrant detected - using Vagrant to initialize bcpc-bootstrap VM"))} ) (C {(cp)} {(../Vagrantfile)} {(.)}) (C {(vagrant)} {(up)}) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:keyfile) op: Equal rhs: { (DQ (CommandSubPart command_list: (CommandList children: [ (Pipeline children: [ (C {(vagrant)} {(ssh-config)} {(bootstrap)}) (C {(awk)} { (SQ < "/Host bootstrap/,/^$/{ if ($0 ~ /^ +IdentityFile/) print $2}" > ) } ) ] negated: False ) ] ) left_token: spids: [1089 1103] ) ) } spids: [1087] ) ] spids: [1087] ) (If arms: [ (if_arm cond: [ (Sentence child: (DBracket expr: (BoolUnary op_id: BoolUnary_f child: {(DQ ($ VSub_Name "$keyfile"))} ) ) terminator: ) ] action: [(C {(cp)} {(DQ ($ VSub_Name "$keyfile"))} {(insecure_private_key)})] spids: [-1 1120] ) ] spids: [-1 1132] ) ] spids: [-1 1065] ) ] else_action: [ (C {(echo)} {(DQ ("Vagrant not detected - using raw VirtualBox for bcpc-bootstrap"))}) (If arms: [ (if_arm cond: [ (Sentence child: (DBracket expr: (BoolUnary op_id:BoolUnary_z child:{(DQ ($ VSub_Name "$WIN"))}) ) terminator: ) ] action: [ (ForEach iter_name: i iter_words: [{(0)} {(1)} {(2)} {(3)} {(4)} {(5)} {(6)} {(7)} {(8)} {(9)}] do_arg_iter: False body: (DoGroup children: [ (If arms: [ (if_arm cond: [ (Sentence child: (DBracket expr: (LogicalNot child: (BoolUnary op_id: BoolUnary_z child: { (CommandSubPart command_list: (CommandList children: [ (Pipeline children: [ (C {($ VSub_Name "$VBM")} {(list)} {(hostonlyifs)} ) (C {(grep)} {(vboxnet) ($ VSub_Name "$i") } ) (C {(cut)} {(-f2)} {(-d) (DQ (" "))} ) ] negated: False ) ] ) left_token: spids: [1203 1227] ) } ) ) ) terminator: ) ] action: [ (AndOr children: [ (C {($ VSub_Name "$VBM")} {(hostonlyif)} {(remove)} {(vboxnet) ($ VSub_Name "$i")} ) (C {(true)}) ] op_id: Op_DPipe ) ] spids: [-1 1232] ) ] spids: [-1 1249] ) ] spids: [1192 1252] ) spids: [1170 1190] ) ] spids: [-1 1158] ) ] else_action: [ (ForEach iter_name: i iter_words: [{(10)} {(9)} {(8)} {(7)} {(6)} {(5)} {(4)} {(3)} {(2)} {(1)}] do_arg_iter: False body: (DoGroup children: [ (If arms: [ (if_arm cond: [ (Sentence child: (DBracket expr: (BoolBinary op_id:BoolBinary_gt left:{(i)} right:{(1)}) ) terminator: ) ] action: [ (Sentence child: (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:IF) op: Equal rhs: { (DQ ("VirtualBox Host-Only Ethernet Adapter #") ($ VSub_Name "$i") ) } spids: [1317] ) ] spids: [1317] ) terminator: ) ] spids: [-1 1314] ) ] else_action: [ (Sentence child: (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:IF) op: Equal rhs: {(DQ ("VirtualBox Host-Only Ethernet Adapter"))} spids: [1328] ) ] spids: [1328] ) terminator: ) ] spids: [1325 1335] ) (If arms: [ (if_arm cond: [ (Sentence child: (DBracket expr: (LogicalNot child: (BoolUnary op_id: BoolUnary_z child: { (CommandSubPart command_list: (CommandList children: [ (Pipeline children: [ (C {($ VSub_Name "$VBM")} {(list)} {(hostonlyifs)} ) (C {(grep)} {(DQ ($ VSub_Name "$IF"))}) ] negated: False ) ] ) left_token: spids: [1346 1360] ) } ) ) ) terminator: ) ] action: [ (C {($ VSub_Name "$VBM")} {(hostonlyif)} {(remove)} {(DQ ($ VSub_Name "$IF"))} ) ] spids: [-1 1365] ) ] spids: [-1 1379] ) ] spids: [1298 1382] ) spids: [1276 1296] ) ] spids: [1256 1385] ) (C {($ VSub_Name "$VBM")} {(hostonlyif)} {(create)}) (C {($ VSub_Name "$VBM")} {(hostonlyif)} {(create)}) (C {($ VSub_Name "$VBM")} {(hostonlyif)} {(create)}) (If arms: [ (if_arm cond: [ (Sentence child: (DBracket expr: (BoolUnary op_id:BoolUnary_z child:{(DQ ($ VSub_Name "$WIN"))}) ) terminator: ) ] action: [ (AndOr children: [(C {(remove_DHCPservers)} {(vboxnet0)}) (C {(true)})] op_id: Op_DPipe ) (AndOr children: [(C {(remove_DHCPservers)} {(vboxnet1)}) (C {(true)})] op_id: Op_DPipe ) (AndOr children: [(C {(remove_DHCPservers)} {(vboxnet2)}) (C {(true)})] op_id: Op_DPipe ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:VBN0) op: Equal rhs: {(vboxnet0)} spids: [1468] ) ] spids: [1468] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:VBN1) op: Equal rhs: {(vboxnet1)} spids: [1472] ) ] spids: [1472] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:VBN2) op: Equal rhs: {(vboxnet2)} spids: [1476] ) ] spids: [1476] ) ] spids: [-1 1426] ) ] else_action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:VBN0) op: Equal rhs: {(DQ ("VirtualBox Host-Only Ethernet Adapter"))} spids: [1487] ) ] spids: [1487] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:VBN1) op: Equal rhs: {(DQ ("VirtualBox Host-Only Ethernet Adapter #2"))} spids: [1493] ) ] spids: [1493] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:VBN2) op: Equal rhs: {(DQ ("VirtualBox Host-Only Ethernet Adapter #3"))} spids: [1499] ) ] spids: [1499] ) ] spids: [1480 1505] ) (C {($ VSub_Name "$VBM")} {(hostonlyif)} {(ipconfig)} {(DQ ($ VSub_Name "$VBN0"))} {(--ip)} {(10.0.100.2)} {(--netmask)} {(255.255.255.0)} ) (C {($ VSub_Name "$VBM")} {(hostonlyif)} {(ipconfig)} {(DQ ($ VSub_Name "$VBN1"))} {(--ip)} {(172.16.100.2)} {(--netmask)} {(255.255.255.0)} ) (C {($ VSub_Name "$VBM")} {(hostonlyif)} {(ipconfig)} {(DQ ($ VSub_Name "$VBN2"))} {(--ip)} {(192.168.100.2)} {(--netmask)} {(255.255.255.0)} ) (ForEach iter_name: vm iter_words: [{(bcpc-bootstrap)}] do_arg_iter: False body: (DoGroup children: [ (If arms: [ (if_arm cond: [ (Sentence child: (Pipeline children: [ (C {($ VSub_Name "$VBM")} {(list)} {(vms)}) (C {(grep)} { (DQ ("^") (EscapedLiteralPart token: ) (${ VSub_Name vm) (EscapedLiteralPart token:) ) } ) ] negated: True ) terminator: ) ] action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:ARCHIVED_BOOTSTRAP) op: Equal rhs: { ( ../images/build/virtualbox/bcpc-bootstrap/packer-bcpc-bootstrap_ubuntu-14.04.2-amd64.ova ) } spids: [1632] ) ] spids: [1632] ) (If arms: [ (if_arm cond: [ (Sentence child: (DBracket expr: (LogicalAnd left: (BoolUnary op_id: BoolUnary_n child: {(DQ ($ VSub_Name "$ARCHIVED_BOOTSTRAP"))} ) right: (BoolUnary op_id: BoolUnary_f child: {(DQ ($ VSub_Name "$ARCHIVED_BOOTSTRAP"))} ) ) ) terminator: ) ] action: [ (C {(vbm_import)} {(DQ ($ VSub_Name "$ARCHIVED_BOOTSTRAP"))} {(bcpc-bootstrap)} ) ] spids: [-1 1658] ) ] else_action: [ (C {(exit)}) (C {($ VSub_Name "$VBM")} {(createvm)} {(--name)} {($ VSub_Name "$vm")} {(--ostype)} {(Ubuntu_64)} {(--basefolder)} {($ VSub_Name "$P")} {(--register)} ) (C {($ VSub_Name "$VBM")} {(modifyvm)} {($ VSub_Name "$vm")} {(--memory)} {($ VSub_Name "$BOOTSTRAP_VM_MEM")} ) (C {($ VSub_Name "$VBM")} {(modifyvm)} {($ VSub_Name "$vm")} {(--cpus)} {($ VSub_Name "$BOOTSTRAP_VM_CPUS")} ) (C {($ VSub_Name "$VBM")} {(modifyvm)} {($ VSub_Name "$vm")} {(--vram)} {(16)} ) (C {($ VSub_Name "$VBM")} {(storagectl)} {($ VSub_Name "$vm")} {(--name)} {(DQ ("SATA Controller"))} {(--add)} {(sata)} ) (C {($ VSub_Name "$VBM")} {(storagectl)} {($ VSub_Name "$vm")} {(--name)} {(DQ ("IDE Controller"))} {(--add)} {(ide)} ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:port) op: Equal rhs: {(0)} spids: [1765] ) ] spids: [1765] ) (ForEach iter_name: disk iter_words: [{(a)}] do_arg_iter: False body: (DoGroup children: [ (C {($ VSub_Name "$VBM")} {(createhd)} {(--filename)} {($ VSub_Name "$P") (/) ($ VSub_Name "$vm") (/) ($ VSub_Name "$vm") (-) ($ VSub_Name "$disk") (.vdi) } {(--size)} {($ VSub_Name "$BOOTSTRAP_VM_DRIVE_SIZE")} ) (C {($ VSub_Name "$VBM")} {(storageattach)} {($ VSub_Name "$vm")} {(--storagectl)} {(DQ ("SATA Controller"))} {(--device)} {(0)} {(--port)} {($ VSub_Name "$port")} {(--type)} {(hdd)} {(--medium)} {($ VSub_Name "$P") (/) ($ VSub_Name "$vm") (/) ($ VSub_Name "$vm") (-) ($ VSub_Name "$disk") (.vdi) } ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:port) op: Equal rhs: { (ArithSubPart anode: (ArithBinary op_id: Arith_Plus left: (ArithVarRef name:port) right: (ArithWord w:{(Lit_Digits 1)}) ) spids: [1838 1843] ) } spids: [1837] ) ] spids: [1837] ) ] spids: [1778 1846] ) spids: [1774 1776] ) (C {($ VSub_Name "$VBM")} {(storageattach)} {($ VSub_Name "$vm")} {(--storagectl)} {(DQ ("IDE Controller"))} {(--device)} {(0)} {(--port)} {(0)} {(--type)} {(dvddrive)} {(--medium)} {($ VSub_Name "$ISO")} ) (C {($ VSub_Name "$VBM")} {(modifyvm)} {($ VSub_Name "$vm")} {(--boot1)} {(disk)} ) ] spids: [1670 1893] ) (C {($ VSub_Name "$VBM")} {(modifyvm)} {($ VSub_Name "$vm")} {(--nic1)} {(nat)} ) (C {($ VSub_Name "$VBM")} {(modifyvm)} {($ VSub_Name "$vm")} {(--nic2)} {(hostonly)} {(--hostonlyadapter2)} {(DQ ($ VSub_Name "$VBN0"))} ) (C {($ VSub_Name "$VBM")} {(modifyvm)} {($ VSub_Name "$vm")} {(--nic3)} {(hostonly)} {(--hostonlyadapter3)} {(DQ ($ VSub_Name "$VBN1"))} ) (C {($ VSub_Name "$VBM")} {(modifyvm)} {($ VSub_Name "$vm")} {(--nic4)} {(hostonly)} {(--hostonlyadapter4)} {(DQ ($ VSub_Name "$VBN2"))} ) ] spids: [-1 1612] ) ] spids: [-1 1962] ) ] spids: [1580 1965] ) spids: [1576 1578] ) ] spids: [1135 1968] ) (C {(popd)}) ] spids: [1040] ) spids: [1036 1039] ) (FuncDef name: create_cluster_VMs body: (BraceGroup children: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:oifs) op: Equal rhs: {(DQ ($ VSub_Name "$IFS"))} spids: [1996] ) ] spids: [1996] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:IFS) op: Equal rhs: {(SQ )} spids: [2002] ) ] spids: [2002] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:bootstrap_interfaces) op: Equal rhs: { (ArrayLiteralPart words: [ { (CommandSubPart command_list: (CommandList children: [ (Pipeline children: [ (C {($ VSub_Name "$VBM")} {(showvminfo)} {(bcpc-bootstrap)} {(--machinereadable)} ) (C {(egrep)} {(SQ <"^hostonlyadapter[0-9]=">)}) (C {(sort)}) (C {(sed)} {(-e)} {(SQ <"s/.*=//">)} {(-e)} {(SQ <"s/\"//g">)}) ] negated: False ) ] ) left_token: spids: [2010 2041] ) } ] ) } spids: [2008] ) ] spids: [2008] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:IFS) op: Equal rhs: {(DQ ($ VSub_Name "$oifs"))} spids: [2045] ) ] spids: [2045] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:VBN0) op: Equal rhs: { (DQ (BracedVarSub token: bracket_op: (ArrayIndex expr:(ArithWord w:{(Lit_Digits 0)})) spids: [2053 2058] ) ) } spids: [2051] ) ] spids: [2051] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:VBN1) op: Equal rhs: { (DQ (BracedVarSub token: bracket_op: (ArrayIndex expr:(ArithWord w:{(Lit_Digits 1)})) spids: [2064 2069] ) ) } spids: [2062] ) ] spids: [2062] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:VBN2) op: Equal rhs: { (DQ (BracedVarSub token: bracket_op: (ArrayIndex expr:(ArithWord w:{(Lit_Digits 2)})) spids: [2075 2080] ) ) } spids: [2073] ) ] spids: [2073] ) (ForEach iter_name: vm iter_words: [{(bcpc-vm1)} {(bcpc-vm2)} {(bcpc-vm3)}] do_arg_iter: False body: (DoGroup children: [ (If arms: [ (if_arm cond: [ (Sentence child: (Pipeline children: [ (C {($ VSub_Name "$VBM")} {(list)} {(vms)}) (C {(grep)} { (DQ ("^") (EscapedLiteralPart token:) (${ VSub_Name vm) (EscapedLiteralPart token:) ) } ) ] negated: True ) terminator: ) ] action: [ (C {($ VSub_Name "$VBM")} {(createvm)} {(--name)} {($ VSub_Name "$vm")} {(--ostype)} {(Ubuntu_64)} {(--basefolder)} {($ VSub_Name "$P")} {(--register)} ) (C {($ VSub_Name "$VBM")} {(modifyvm)} {($ VSub_Name "$vm")} {(--memory)} {($ VSub_Name "$CLUSTER_VM_MEM")} ) (C {($ VSub_Name "$VBM")} {(modifyvm)} {($ VSub_Name "$vm")} {(--cpus)} {($ VSub_Name "$CLUSTER_VM_CPUS")} ) (C {($ VSub_Name "$VBM")} {(modifyvm)} {($ VSub_Name "$vm")} {(--vram)} {(16)}) (C {($ VSub_Name "$VBM")} {(storagectl)} {($ VSub_Name "$vm")} {(--name)} {(DQ ("SATA Controller"))} {(--add)} {(sata)} ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:port) op: Equal rhs: {(0)} spids: [2210] ) ] spids: [2210] ) (ForEach iter_name: disk iter_words: [{(a)} {(b)} {(c)} {(d)} {(e)}] do_arg_iter: False body: (DoGroup children: [ (C {($ VSub_Name "$VBM")} {(createhd)} {(--filename)} {($ VSub_Name "$P") (/) ($ VSub_Name "$vm") (/) ($ VSub_Name "$vm") (-) ($ VSub_Name "$disk") (.vdi) } {(--size)} {($ VSub_Name "$CLUSTER_VM_DRIVE_SIZE")} ) (C {($ VSub_Name "$VBM")} {(storageattach)} {($ VSub_Name "$vm")} {(--storagectl)} {(DQ ("SATA Controller"))} {(--device)} {(0)} {(--port)} {($ VSub_Name "$port")} {(--type)} {(hdd)} {(--medium)} {($ VSub_Name "$P") (/) ($ VSub_Name "$vm") (/) ($ VSub_Name "$vm") (-) ($ VSub_Name "$disk") (.vdi)} ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:port) op: Equal rhs: { (ArithSubPart anode: (ArithBinary op_id: Arith_Plus left: (ArithVarRef name:port) right: (ArithWord w:{(Lit_Digits 1)}) ) spids: [2291 2296] ) } spids: [2290] ) ] spids: [2290] ) ] spids: [2231 2299] ) spids: [2219 2229] ) (C {($ VSub_Name "$VBM")} {(modifyvm)} {($ VSub_Name "$vm")} {(--nic1)} {(hostonly)} {(--hostonlyadapter1)} {(DQ ($ VSub_Name "$VBN0"))} {(--nictype1)} {(82543GC)} ) (C {($ VSub_Name "$VBM")} {(setextradata)} {($ VSub_Name "$vm")} {(VBoxInternal/Devices/pcbios/0/Config/LanBootRom)} {($ VSub_Name "$P") (/gpxe-1.0.1-80861004.rom)} ) (C {($ VSub_Name "$VBM")} {(modifyvm)} {($ VSub_Name "$vm")} {(--nic2)} {(hostonly)} {(--hostonlyadapter2)} {(DQ ($ VSub_Name "$VBN1"))} ) (C {($ VSub_Name "$VBM")} {(modifyvm)} {($ VSub_Name "$vm")} {(--nic3)} {(hostonly)} {(--hostonlyadapter3)} {(DQ ($ VSub_Name "$VBN2"))} ) (C {($ VSub_Name "$VBM")} {(modifyvm)} {($ VSub_Name "$vm")} {(--largepages)} {(on)} {(--vtxvpid)} {(on)} {(--hwvirtex)} {(on)} {(--nestedpaging)} {(on)} {(--ioapic)} {(off)} ) ] spids: [-1 2134] ) ] spids: [-1 2405] ) ] spids: [2102 2408] ) spids: [2094 2100] ) ] spids: [1989] ) spids: [1985 1988] ) (FuncDef name: install_cluster body: (BraceGroup children: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:environment) op: Equal rhs: { (BracedVarSub token: suffix_op: (StringUnary op_id:VTest_Hyphen arg_word:{(Test-Laptop)}) spids: [2420 2424] ) } spids: [2419] ) ] spids: [2419] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:ip) op: Equal rhs: { (BracedVarSub token: suffix_op: (StringUnary op_id:VTest_Hyphen arg_word:{(10.0.100.3)}) spids: [2427 2431] ) } spids: [2426] ) ] spids: [2426] ) (If arms: [ (if_arm cond: [ (Sentence child: (SimpleCommand words: [{(hash)} {(vagrant)}] redirects: [ (Redir op_id: Redir_Great fd: 2 arg_word: {(/dev/null)} spids: [2444] ) ] ) terminator: ) ] action: [ (AndOr children: [ (C {(vagrant)} {(ssh)} {(-c)} { (DQ ( "test -f /etc/default/grub.ucf-dist && sudo mv /etc/default/grub.ucf-dist /etc/default/grub" ) ) } ) (C {(true)}) ] op_id: Op_DPipe ) (If arms: [ (if_arm cond: [ (Sentence child: (C {(Lit_Other "[")} {(-n)} {(DQ ($ VSub_Name "$http_proxy"))} {(Lit_Other "]")} ) terminator: ) ] action: [ (If arms: [ (if_arm cond: [ (Sentence child: (Pipeline children: [ (C {(vagrant)} {(ssh)} {(-c)} { (DQ ( "grep -z '^Acquire::http::Proxy ' /etc/apt/apt.conf" ) ) } ) ] negated: True ) terminator: ) ] action: [ (C {(vagrant)} {(ssh)} {(-c)} { (DQ ("echo 'Acquire::http::Proxy ") (EscapedLiteralPart token: ) ($ VSub_Name "$http_proxy") (EscapedLiteralPart token:) (";' | sudo tee -a /etc/apt/apt.conf") ) } ) ] spids: [-1 2519] ) ] spids: [-1 2537] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:PROXY_INFO_SH) op: Equal rhs: {(DQ (/home/vagrant/proxy_info.sh))} spids: [2545] ) ] spids: [2545] ) (If arms: [ (if_arm cond: [ (Sentence child: (Pipeline children: [ (C {(vagrant)} {(ssh)} {(-c)} {(DQ ("test -f ") ($ VSub_Name "$PROXY_INFO_SH"))} ) ] negated: True ) terminator: ) ] action: [ (C {(vagrant)} {(ssh)} {(-c)} { (DQ ("echo -e 'export http_proxy=") ($ VSub_Name "$http_proxy") (EscapedLiteralPart token:) ("export https_proxy=") ($ VSub_Name "$https_proxy") ("' | sudo tee -a ") ($ VSub_Name "$PROXY_INFO_SH") ) } ) ] spids: [-1 2567] ) ] spids: [-1 2587] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:CURLRC) op: Equal rhs: {(DQ (/home/vagrant/.curlrc))} spids: [2590] ) ] spids: [2590] ) (If arms: [ (if_arm cond: [ (Sentence child: (Pipeline children: [ (C {(vagrant)} {(ssh)} {(-c)} {(DQ ("test -f ") ($ VSub_Name "$CURLRC"))} ) ] negated: True ) terminator: ) ] action: [ (C {(vagrant)} {(ssh)} {(-c)} { (DQ ("echo -e 'proxy = ") ($ VSub_Name "$http_proxy") ("' | sudo tee -a ") ($ VSub_Name "$CURLRC") ) } ) ] spids: [-1 2612] ) ] spids: [-1 2629] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:GITCONFIG) op: Equal rhs: {(DQ (/home/vagrant/.gitconfig))} spids: [2632] ) ] spids: [2632] ) (If arms: [ (if_arm cond: [ (Sentence child: (Pipeline children: [ (C {(vagrant)} {(ssh)} {(-c)} {(DQ ("test -f ") ($ VSub_Name "$GITCONFIG"))} ) ] negated: True ) terminator: ) ] action: [ (C {(vagrant)} {(ssh)} {(-c)} { (DQ ("echo -e '[http]") (EscapedLiteralPart token: ) ("proxy = ") ($ VSub_Name "$http_proxy") ("' | sudo tee -a ") ($ VSub_Name "$GITCONFIG") ) } ) ] spids: [-1 2654] ) ] spids: [-1 2673] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:CUSTOM_BASE) op: Equal rhs: {(DQ (custom))} spids: [2685] ) ] spids: [2685] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:CUSTOM_CA_DIR) op: Equal rhs: {(DQ (/usr/share/ca-certificates/) ($ VSub_Name "$CUSTOM_BASE"))} spids: [2691] ) ] spids: [2691] ) (ForEach iter_name: CERT iter_words: [ { (CommandSubPart command_list: (CommandList children: [ (C {(ls)} {(-1)} {($ VSub_Name "$BASE_DIR") (/cacerts)}) ] ) left_token: spids: [2704 2711] ) } ] do_arg_iter: False body: (DoGroup children: [ (C {(vagrant)} {(ssh)} {(-c)} {(DQ ("sudo mkdir -p ") ($ VSub_Name "$CUSTOM_CA_DIR"))} ) (C {(vagrant)} {(ssh)} {(-c)} { (DQ ("if [[ ! -f ") ($ VSub_Name "$CUSTOM_CA_DIR") (/) ($ VSub_Name "$CERT") (" ]]; then sudo cp /chef-bcpc-host/cacerts/") ($ VSub_Name "$CERT") (" ") ($ VSub_Name "$CUSTOM_CA_DIR") (/) ($ VSub_Name "$CERT") ("; fi") ) } ) (C {(vagrant)} {(ssh)} {(-c)} { (DQ ("echo ") ($ VSub_Name "$CUSTOM_BASE") (/) ($ VSub_Name "$CERT") (" | sudo tee -a /etc/ca-certificates.conf") ) } ) ] spids: [2714 2765] ) spids: [2703 2712] ) (C {(vagrant)} {(ssh)} {(-c)} {(DQ ("sudo /usr/sbin/update-ca-certificates"))}) ] spids: [-1 2501] ) ] spids: [-1 2779] ) (C {(echo)} {(DQ ("Bootstrap complete - setting up Chef server"))}) (C {(echo)} {(DQ ("N.B. This may take approximately 30-45 minutes to complete."))}) (C {(./bootstrap_chef.sh)} {(--vagrant-remote)} {($ VSub_Name "$ip")} {($ VSub_Name "$environment")} ) (C {(./enroll_cobbler.sh)}) ] spids: [-1 2450] ) ] else_action: [(C {(./non_vagrant_boot.sh)})] spids: [2808 2814] ) ] spids: [2417] ) spids: [2413 2416] ) (If arms: [ (if_arm cond: [ (Sentence child: (DBracket expr: (BoolBinary op_id: BoolBinary_GlobDEqual left: { (DQ (BracedVarSub token: bracket_op: (ArrayIndex expr:(ArithWord w:{(Lit_Digits 0)})) spids: [2827 2832] ) ) } right: {(DQ (${ VSub_Number 0))} ) ) terminator: ) ] action: [ (C {(download_VM_files)}) (C {(create_bootstrap_VM)}) (C {(create_cluster_VMs)}) (C {(install_cluster)} {($ VSub_Star "$*")}) ] spids: [-1 2846] ) ] spids: [-1 2862] ) ] )