(CommandList
  children: [
    (C {(set)} {(-eu)})
    (ForEach
      iter_name: CMD
      iter_words: [{(VBoxManage)} {(git)} {(pcregrep)}]
      do_arg_iter: False
      body: 
        (DoGroup
          children: [
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (Pipeline
                          children: [
                            (SimpleCommand
                              words: [{(which)} {($ VSub_Name "$CMD")}]
                              redirects: [
                                (Redir
                                  op_id: Redir_Great
                                  fd: -1
                                  arg_word: {(/dev/null)}
                                  spids: [64]
                                )
                              ]
                            )
                          ]
                          negated: True
                        )
                      terminator: <Op_Semi ";">
                    )
                  ]
                  action: [
                    (SimpleCommand
                      words: [
                        {(echo)}
                        {(DQ ("Could not find ") ($ VSub_Name "$CMD") (" on PATH, exiting."))}
                      ]
                      redirects: [(Redir op_id:Redir_GreatAnd fd:-1 arg_word:{(2)} spids:[79])]
                    )
                    (C {(exit)} {(1)})
                  ]
                  spids: [-1 68]
                )
              ]
              spids: [-1 88]
            )
          ]
          spids: [53 90]
        )
      spids: [45 51]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:REPO_ROOT)
          op: Equal
          rhs: 
            {
              (CommandSubPart
                command_list: (CommandList children:[(C {(git)} {(rev-parse)} {(--show-toplevel)})])
                left_token: <Left_CommandSub "$(">
                spids: [97 103]
              )
            }
          spids: [96]
        )
      ]
      spids: [96]
    )
    (C {(source)} {($ VSub_Name "$REPO_ROOT") (/bootstrap/config/bootstrap_config.sh.defaults)})
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:CONFIG_OVERRIDES)
          op: Equal
          rhs: {($ VSub_Name "$REPO_ROOT") (/bootstrap/config/bootstrap_config.sh.overrides)}
          spids: [114]
        )
      ]
      spids: [114]
    )
    (If
      arms: [
        (if_arm
          cond: [
            (Sentence
              child: 
                (DBracket
                  expr: (BoolUnary op_id:BoolUnary_f child:{($ VSub_Name "$CONFIG_OVERRIDES")})
                )
              terminator: <Op_Semi ";">
            )
          ]
          action: [(C {(source)} {($ VSub_Name "$CONFIG_OVERRIDES")})]
          spids: [-1 130]
        )
      ]
      spids: [-1 137]
    )
    (If
      arms: [
        (if_arm
          cond: [
            (Sentence
              child: 
                (DBracket
                  expr: 
                    (BoolBinary
                      op_id: BoolBinary_GlobDEqual
                      left: 
                        {
                          (CommandSubPart
                            command_list: (CommandList children:[(C {(uname)})])
                            left_token: <Left_CommandSub "$(">
                            spids: [147 149]
                          )
                        }
                      right: {(DQ (Darwin))}
                    )
                )
              terminator: <Op_Semi ";">
            )
          ]
          action: [
            (Assignment
              keyword: Assign_None
              pairs: [(assign_pair lhs:(LhsName name:SED) op:Equal rhs:{(DQ ("sed -E"))} spids:[163])]
              spids: [163]
            )
          ]
          spids: [-1 160]
        )
      ]
      else_action: [
        (Assignment
          keyword: Assign_None
          pairs: [(assign_pair lhs:(LhsName name:SED) op:Equal rhs:{(DQ ("sed -r"))} spids:[171])]
          spids: [171]
        )
      ]
      spids: [168 176]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:DMF_SET)
          op: Equal
          rhs: 
            {
              (CommandSubPart
                command_list: 
                  (CommandList
                    children: [
                      (Pipeline
                        children: [
                          (C {(VBoxManage)} {(list)} {(systemproperties)})
                          (C {(grep)} {(SQ <"^Default machine folder:">)})
                        ]
                        negated: False
                      )
                    ]
                  )
                left_token: <Left_CommandSub "$(">
                spids: [179 193]
              )
            }
          spids: [178]
        )
      ]
      spids: [178]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:OLD_DMF_PATH)
          op: Equal
          rhs: 
            {
              (CommandSubPart
                command_list: 
                  (CommandList
                    children: [
                      (Pipeline
                        children: [
                          (C {(echo)} {(DQ ($ VSub_Name "$DMF_SET"))})
                          (C {($ VSub_Name "$SED")} 
                            {(SQ <"s/^Default machine folder:[[:space:]]+(.+)$/\\1/">)}
                          )
                        ]
                        negated: False
                      )
                    ]
                  )
                left_token: <Left_CommandSub "$(">
                spids: [196 210]
              )
            }
          spids: [195]
        )
      ]
      spids: [195]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:DMF_PATH)
          op: Equal
          rhs: 
            {
              (DQ 
                (BracedVarSub
                  token: <VSub_Name ANSIBLE_VM_DIR>
                  suffix_op: 
                    (StringUnary
                      op_id: VTest_ColonHyphen
                      arg_word: {($ VSub_Name "$OLD_DMF_PATH")}
                    )
                  spids: [214 218]
                )
              )
            }
          spids: [212]
        )
      ]
      spids: [212]
    )
    (C {($ VSub_Name "$REPO_ROOT") (/bootstrap/ansible_scripts/scripts/vbox_clean.sh)})
    (AndOr
      children: [(C {(VBoxManage)} {(hostonlyif)} {(remove)} {(vboxnet0)}) (C {(true)})]
      op_id: Op_DAmp
    )
    (AndOr
      children: [(C {(VBoxManage)} {(hostonlyif)} {(remove)} {(vboxnet1)}) (C {(true)})]
      op_id: Op_DAmp
    )
    (AndOr
      children: [(C {(VBoxManage)} {(hostonlyif)} {(remove)} {(vboxnet2)}) (C {(true)})]
      op_id: Op_DAmp
    )
    (C {(VBoxManage)} {(hostonlyif)} {(create)})
    (C {(VBoxManage)} {(hostonlyif)} {(ipconfig)} {(vboxnet0)} {(--ip)} {(10.0.100.2)} {(--netmask)} 
      {(255.255.255.0)}
    )
    (C {(VBoxManage)} {(hostonlyif)} {(create)})
    (C {(VBoxManage)} {(hostonlyif)} {(ipconfig)} {(vboxnet1)} {(--ip)} {(172.16.100.2)} {(--netmask)} 
      {(255.255.255.0)}
    )
    (C {(VBoxManage)} {(hostonlyif)} {(create)})
    (C {(VBoxManage)} {(hostonlyif)} {(ipconfig)} {(vboxnet2)} {(--ip)} {(192.168.100.2)} {(--netmask)} 
      {(255.255.255.0)}
    )
    (AndOr
      children: [(C {(VBoxManage)} {(dhcpserver)} {(remove)} {(--ifname)} {(vboxnet0)}) (C {(true)})]
      op_id: Op_DAmp
    )
    (AndOr
      children: [(C {(VBoxManage)} {(dhcpserver)} {(remove)} {(--ifname)} {(vboxnet1)}) (C {(true)})]
      op_id: Op_DAmp
    )
    (AndOr
      children: [(C {(VBoxManage)} {(dhcpserver)} {(remove)} {(--ifname)} {(vboxnet2)}) (C {(true)})]
      op_id: Op_DAmp
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:VMS)
          op: Equal
          rhs: {(DQ ("ansible-bcpc-vm1 ansible-bcpc-vm2 ansible-bcpc-vm3"))}
          spids: [384]
        )
      ]
      spids: [384]
    )
    (If
      arms: [
        (if_arm
          cond: [
            (Sentence
              child: 
                (C {(Lit_Other "[")} {($ VSub_Name "$MONITORING_NODES")} {(-gt)} {(0)} {(Lit_Other "]")})
              terminator: <Op_Semi ";">
            )
          ]
          action: [
            (Assignment
              keyword: Assign_None
              pairs: [(assign_pair lhs:(LhsName name:i) op:Equal rhs:{(1)} spids:[405])]
              spids: [405]
            )
            (While
              cond: [
                (Sentence
                  child: 
                    (C {(Lit_Other "[")} {($ VSub_Name "$i")} {(-le)} {($ VSub_Name "$MONITORING_NODES")} 
                      {(Lit_Other "]")}
                    )
                  terminator: <Op_Semi ";">
                )
              ]
              body: 
                (DoGroup
                  children: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:MON_VM)
                          op: Equal
                          rhs: 
                            {
                              (DQ (ansible-bcpc-vm) 
                                (CommandSubPart
                                  command_list: 
                                    (CommandList
                                      children: [
                                        (C {(expr)} {(3)} {(Lit_Other "+")} {($ VSub_Name "$i")})
                                      ]
                                    )
                                  left_token: <Left_Backtick "`">
                                  spids: [428 436]
                                )
                              )
                            }
                          spids: [425]
                        )
                      ]
                      spids: [425]
                    )
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:VMS)
                          op: Equal
                          rhs: {(DQ ($ VSub_Name "$VMS") (" ") ($ VSub_Name "$MON_VM"))}
                          spids: [440]
                        )
                      ]
                      spids: [440]
                    )
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:i)
                          op: Equal
                          rhs: 
                            {
                              (CommandSubPart
                                command_list: 
                                  (CommandList
                                    children: [
                                      (C {(expr)} {($ VSub_Name "$i")} {(Lit_Other "+")} {(1)})
                                    ]
                                  )
                                left_token: <Left_Backtick "`">
                                spids: [449 457]
                              )
                            }
                          spids: [448]
                        )
                      ]
                      spids: [448]
                    )
                  ]
                  spids: [422 460]
                )
            )
          ]
          spids: [-1 402]
        )
      ]
      spids: [-1 462]
    )
    (C {(echo)} {(DQ ("Creating bootstrap VM"))})
    (C {(VBoxManage)} {(createvm)} {(--basefolder)} {(DQ ($ VSub_Name "$DMF_PATH"))} {(--name)} 
      {(ansible-bcpc-bootstrap)} {(--register)}
    )
    (C {(VBoxManage)} {(modifyvm)} {(ansible-bcpc-bootstrap)} {(--ostype)} {(Ubuntu_64)})
    (C {(VBoxManage)} {(modifyvm)} {(ansible-bcpc-bootstrap)} {(--memory)} 
      {($ VSub_Name "$BOOTSTRAP_VM_MEM")}
    )
    (C {(VBoxManage)} {(modifyvm)} {(ansible-bcpc-bootstrap)} {(--cpus)} 
      {($ VSub_Name "$BOOTSTRAP_VM_CPUS")}
    )
    (C {(VBoxManage)} {(modifyvm)} {(ansible-bcpc-bootstrap)} {(--nic1)} {(nat)})
    (C {(VBoxManage)} {(modifyvm)} {(ansible-bcpc-bootstrap)} {(--nictype1)} {(82543GC)})
    (C {(VBoxManage)} {(modifyvm)} {(ansible-bcpc-bootstrap)} {(--nic2)} {(hostonly)})
    (C {(VBoxManage)} {(modifyvm)} {(ansible-bcpc-bootstrap)} {(--nictype2)} {(82543GC)})
    (C {(VBoxManage)} {(modifyvm)} {(ansible-bcpc-bootstrap)} {(--hostonlyadapter2)} {(vboxnet0)})
    (C {(VBoxManage)} {(modifyvm)} {(ansible-bcpc-bootstrap)} {(--nic3)} {(hostonly)})
    (C {(VBoxManage)} {(modifyvm)} {(ansible-bcpc-bootstrap)} {(--nictype3)} {(82543GC)})
    (C {(VBoxManage)} {(modifyvm)} {(ansible-bcpc-bootstrap)} {(--hostonlyadapter3)} {(vboxnet1)})
    (C {(VBoxManage)} {(modifyvm)} {(ansible-bcpc-bootstrap)} {(--nic4)} {(hostonly)})
    (C {(VBoxManage)} {(modifyvm)} {(ansible-bcpc-bootstrap)} {(--nictype4)} {(82543GC)})
    (C {(VBoxManage)} {(modifyvm)} {(ansible-bcpc-bootstrap)} {(--hostonlyadapter4)} {(vboxnet2)})
    (C {(VBoxManage)} {(storagectl)} {(ansible-bcpc-bootstrap)} {(--name)} {(DQ (SATA))} {(--add)} {(sata)} 
      {(--portcount)} {(3)} {(--hostiocache)} {(on)}
    )
    (C {(VBoxManage)} {(createhd)} {(--filename)} 
      {(DQ ($ VSub_Name "$DMF_PATH") (/ansible-bcpc-bootstrap/ansible-bcpc-bootstrap-sda.vdi))} {(--size)} {($ VSub_Name "$BOOTSTRAP_VM_DRIVE_SIZE")}
    )
    (C {(VBoxManage)} {(storageattach)} {(ansible-bcpc-bootstrap)} {(--storagectl)} {(DQ (SATA))} 
      {(--device)} {(0)} {(--port)} {(0)} {(--type)} {(hdd)} {(--medium)} 
      {(DQ ($ VSub_Name "$DMF_PATH") (/ansible-bcpc-bootstrap/ansible-bcpc-bootstrap-sda.vdi))}
    )
    (C {(VBoxManage)} {(createhd)} {(--filename)} 
      {(DQ ($ VSub_Name "$DMF_PATH") (/ansible-bcpc-bootstrap/ansible-bcpc-bootstrap-sdb.vdi))} {(--size)} {(8192)}
    )
    (C {(VBoxManage)} {(storageattach)} {(ansible-bcpc-bootstrap)} {(--storagectl)} {(DQ (SATA))} 
      {(--device)} {(0)} {(--port)} {(1)} {(--type)} {(hdd)} {(--medium)} 
      {(DQ ($ VSub_Name "$DMF_PATH") (/ansible-bcpc-bootstrap/ansible-bcpc-bootstrap-sdb.vdi))}
    )
    (C {(VBoxManage)} {(createhd)} {(--filename)} 
      {(DQ ($ VSub_Name "$DMF_PATH") (/ansible-bcpc-bootstrap/ansible-bcpc-bootstrap-sdc.vdi))} {(--size)} {($ VSub_Name "$BOOTSTRAP_VM_DRIVE_SIZE")}
    )
    (C {(VBoxManage)} {(storageattach)} {(ansible-bcpc-bootstrap)} {(--storagectl)} {(DQ (SATA))} 
      {(--device)} {(0)} {(--port)} {(2)} {(--type)} {(hdd)} {(--medium)} 
      {(DQ ($ VSub_Name "$DMF_PATH") (/ansible-bcpc-bootstrap/ansible-bcpc-bootstrap-sdc.vdi))}
    )
    (C {(VBoxManage)} {(storagectl)} {(ansible-bcpc-bootstrap)} {(--name)} {(DQ (IDE))} {(--add)} {(ide)})
    (C {(VBoxManage)} {(storageattach)} {(ansible-bcpc-bootstrap)} {(--storagectl)} {(DQ (IDE))} 
      {(--device)} {(0)} {(--port)} {(0)} {(--type)} {(dvddrive)} {(--medium)} {(emptydrive)}
    )
    (C {(VBoxManage)} {(modifyvm)} {(ansible-bcpc-bootstrap)} {(--boot1)} {(dvd)})
    (ForEach
      iter_name: VM
      iter_words: [{($ VSub_Name "$VMS")}]
      do_arg_iter: False
      body: 
        (DoGroup
          children: [
            (C {(echo)} {(DQ ("Creating cluster VM ") ($ VSub_Name "$VM"))})
            (C {(VBoxManage)} {(createvm)} {(--basefolder)} {(DQ ($ VSub_Name "$DMF_PATH"))} {(--name)} 
              {($ VSub_Name "$VM")} {(--register)}
            )
            (C {(VBoxManage)} {(modifyvm)} {($ VSub_Name "$VM")} {(--ostype)} {(Ubuntu_64)})
            (C {(VBoxManage)} {(modifyvm)} {($ VSub_Name "$VM")} {(--memory)} 
              {($ VSub_Name "$CLUSTER_VM_MEM")}
            )
            (C {(VBoxManage)} {(modifyvm)} {($ VSub_Name "$VM")} {(--cpus)} 
              {($ VSub_Name "$CLUSTER_VM_CPUS")}
            )
            (C {(VBoxManage)} {(modifyvm)} {($ VSub_Name "$VM")} {(--nic1)} {(hostonly)})
            (C {(VBoxManage)} {(modifyvm)} {($ VSub_Name "$VM")} {(--nictype1)} {(82543GC)})
            (C {(VBoxManage)} {(modifyvm)} {($ VSub_Name "$VM")} {(--hostonlyadapter1)} {(vboxnet0)})
            (C {(VBoxManage)} {(modifyvm)} {($ VSub_Name "$VM")} {(--nic2)} {(hostonly)})
            (C {(VBoxManage)} {(modifyvm)} {($ VSub_Name "$VM")} {(--nictype2)} {(82543GC)})
            (C {(VBoxManage)} {(modifyvm)} {($ VSub_Name "$VM")} {(--hostonlyadapter2)} {(vboxnet1)})
            (C {(VBoxManage)} {(modifyvm)} {($ VSub_Name "$VM")} {(--nic3)} {(hostonly)})
            (C {(VBoxManage)} {(modifyvm)} {($ VSub_Name "$VM")} {(--nictype3)} {(82543GC)})
            (C {(VBoxManage)} {(modifyvm)} {($ VSub_Name "$VM")} {(--hostonlyadapter3)} {(vboxnet2)})
            (C {(VBoxManage)} {(storagectl)} {($ VSub_Name "$VM")} {(--name)} {(DQ (SATA))} {(--add)} 
              {(sata)} {(--portcount)} {(5)} {(--hostiocache)} {(on)}
            )
            (Assignment
              keyword: Assign_None
              pairs: [(assign_pair lhs:(LhsName name:PORT) op:Equal rhs:{(0)} spids:[1054])]
              spids: [1054]
            )
            (ForEach
              iter_name: DISK
              iter_words: [{(a)} {(b)} {(c)} {(d)} {(e)}]
              do_arg_iter: False
              body: 
                (DoGroup
                  children: [
                    (C {(VBoxManage)} {(createhd)} {(--filename)} 
                      {
                        (DQ ($ VSub_Name "$DMF_PATH") (/) ($ VSub_Name "$VM") (/) ($ VSub_Name "$VM") 
                          (-sd) ($ VSub_Name "$DISK") (.vdi)
                        )
                      } {(--size)} {($ VSub_Name "$CLUSTER_VM_DRIVE_SIZE")}
                    )
                    (C {(VBoxManage)} {(storageattach)} {($ VSub_Name "$VM")} {(--storagectl)} 
                      {(DQ (SATA))} {(--device)} {(0)} {(--port)} {($ VSub_Name "$PORT")} {(--type)} {(hdd)} {(--medium)} 
                      {
                        (DQ ($ VSub_Name "$DMF_PATH") (/) ($ VSub_Name "$VM") (/) ($ VSub_Name "$VM") 
                          (-sd) ($ 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: [1139 1144]
                              )
                            }
                          spids: [1138]
                        )
                      ]
                      spids: [1138]
                    )
                  ]
                  spids: [1075 1147]
                )
              spids: [1063 1073]
            )
            (C {(VBoxManage)} {(setextradata)} {($ VSub_Name "$VM")} 
              {(VBoxInternal/Devices/pcbios/0/Config/LanBootRom)} {(DQ ($ VSub_Name "$BOOTSTRAP_CACHE_DIR") (/gpxe-1.0.1-80861004.rom))}
            )
          ]
          spids: [868 1168]
        )
      spids: [864 866]
    )
    (ForEach
      iter_name: VM
      iter_words: [{(ansible-bcpc-bootstrap)} {($ VSub_Name "$VMS")}]
      do_arg_iter: False
      body: 
        (DoGroup
          children: [
            (C {(VBoxManage)} {(modifyvm)} {($ VSub_Name "$VM")} {(--vram)} {(16)})
            (C {(VBoxManage)} {(modifyvm)} {($ VSub_Name "$VM")} {(--largepages)} {(on)})
            (C {(VBoxManage)} {(modifyvm)} {($ VSub_Name "$VM")} {(--nestedpaging)} {(on)})
            (C {(VBoxManage)} {(modifyvm)} {($ VSub_Name "$VM")} {(--vtxvpid)} {(on)})
            (C {(VBoxManage)} {(modifyvm)} {($ VSub_Name "$VM")} {(--hwvirtex)} {(on)})
            (C {(VBoxManage)} {(modifyvm)} {($ VSub_Name "$VM")} {(--ioapic)} {(on)})
            (C {(VBoxManage)} {(modifyvm)} {($ VSub_Name "$VM")} {(--uart1)} {(0x3F8)} {(4)})
            (C {(VBoxManage)} {(modifyvm)} {($ VSub_Name "$VM")} {(--uart2)} {(0x2F8)} {(3)})
            (C {(VBoxManage)} {(modifyvm)} {($ VSub_Name "$VM")} {(--uartmode1)} {(disconnected)})
            (C {(VBoxManage)} {(modifyvm)} {($ VSub_Name "$VM")} {(--uartmode2)} {(disconnected)})
          ]
          spids: [1185 1301]
        )
      spids: [1179 1183]
    )
    (FuncDef
      name: get_node_role
      body: 
        (BraceGroup
          children: [
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (DBracket
                          expr: 
                            (BoolBinary
                              op_id: BoolBinary_GlobDEqual
                              left: {($ VSub_Number "$1")}
                              right: {(SQ <ansible-bcpc-bootstrap>)}
                            )
                        )
                      terminator: <Op_Semi ";">
                    )
                  ]
                  action: [(C {(echo)} {(SQ <bootstrap>)})]
                  spids: [-1 1329]
                )
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (DBracket
                          expr: 
                            (BoolBinary
                              op_id: BoolBinary_GlobDEqual
                              left: {($ VSub_Number "$1")}
                              right: {(SQ <ansible-bcpc-vm1>)}
                            )
                        )
                      terminator: <Op_Semi ";">
                    )
                  ]
                  action: [(C {(echo)} {(SQ <head>)})]
                  spids: [1339 1354]
                )
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (DBracket
                          expr: 
                            (BoolBinary
                              op_id: BoolBinary_GlobDEqual
                              left: {($ VSub_Number "$1")}
                              right: {(SQ <ansible-bcpc-vm2>)}
                            )
                        )
                      terminator: <Op_Semi ";">
                    )
                  ]
                  action: [(C {(echo)} {(SQ <work>)})]
                  spids: [1364 1379]
                )
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (DBracket
                          expr: 
                            (BoolBinary
                              op_id: BoolBinary_GlobDEqual
                              left: {($ VSub_Number "$1")}
                              right: {(DQ (ansible-bcpc-vm3))}
                            )
                        )
                      terminator: <Op_Semi ";">
                    )
                  ]
                  action: [(C {(echo)} {(SQ <work-ephemeral>)})]
                  spids: [1389 1404]
                )
              ]
              else_action: [(C {(echo)} {(SQ <reserved>)})]
              spids: [1414 1424]
            )
          ]
          spids: [1311]
        )
      spids: [1307 1310]
    )
    (FuncDef
      name: get_node_ip
      body: 
        (BraceGroup
          children: [
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (DBracket
                          expr: 
                            (BoolBinary
                              op_id: BoolBinary_GlobDEqual
                              left: {($ VSub_Number "$1")}
                              right: {(SQ <ansible-bcpc-bootstrap>)}
                            )
                        )
                      terminator: <Op_Semi ";">
                    )
                  ]
                  action: [(C {(echo)} {(SQ <10.0.100.3>)})]
                  spids: [-1 1451]
                )
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (DBracket
                          expr: 
                            (BoolBinary
                              op_id: BoolBinary_GlobDEqual
                              left: {($ VSub_Number "$1")}
                              right: {(SQ <ansible-bcpc-vm1>)}
                            )
                        )
                      terminator: <Op_Semi ";">
                    )
                  ]
                  action: [(C {(echo)} {(SQ <10.0.100.11>)})]
                  spids: [1461 1476]
                )
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (DBracket
                          expr: 
                            (BoolBinary
                              op_id: BoolBinary_GlobDEqual
                              left: {($ VSub_Number "$1")}
                              right: {(SQ <ansible-bcpc-vm2>)}
                            )
                        )
                      terminator: <Op_Semi ";">
                    )
                  ]
                  action: [(C {(echo)} {(SQ <10.0.100.12>)})]
                  spids: [1486 1501]
                )
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (DBracket
                          expr: 
                            (BoolBinary
                              op_id: BoolBinary_GlobDEqual
                              left: {($ VSub_Number "$1")}
                              right: {(DQ (ansible-bcpc-vm3))}
                            )
                        )
                      terminator: <Op_Semi ";">
                    )
                  ]
                  action: [(C {(echo)} {(SQ <10.0.100.13>)})]
                  spids: [1511 1526]
                )
              ]
              else_action: [(C {(echo)} {(SQ <169.254.1.1>)})]
              spids: [1536 1546]
            )
          ]
          spids: [1433]
        )
      spids: [1429 1432]
    )
    (C {(echo)} {(DQ (-------------------------------------------))})
    (C {(echo)} {(DQ ("Generated below is a sample cluster.yml file"))})
    (C {(echo)} {(DQ ("Sample cluster.yml file:"))})
    (C {(echo)})
    (SimpleCommand
      words: [{(cat)}]
      redirects: [
        (HereDoc
          op_id: Redir_DLess
          fd: -1
          body: {(DQ ("---\n") ("cluster_name: Test-Laptop-Ansible\n") ("nodes:\n"))}
          do_expansion: True
          here_end: YAML_HEAD
          was_filled: True
          spids: [1576]
        )
      ]
    )
    (ForEach
      iter_name: VM
      iter_words: [{(ansible-bcpc-bootstrap)} {($ VSub_Name "$VMS")}]
      do_arg_iter: False
      body: 
        (DoGroup
          children: [
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:MAC_ADDRESS)
                  op: Equal
                  rhs: 
                    {
                      (CommandSubPart
                        command_list: 
                          (CommandList
                            children: [
                              (Pipeline
                                children: [
                                  (C {(VBoxManage)} {(showvminfo)} {(--machinereadable)} 
                                    {($ VSub_Name "$VM")}
                                  )
                                  (C {(pcregrep)} {(-o1)} {(-M)} 
                                    {
                                      (SQ 
                                        <
"^hostonlyadapter\\d=\"vboxnet0\"$\\n*^macaddress\\d=\"(.+)\""
                                        >
                                      )
                                    }
                                  )
                                  (C {($ VSub_Name "$SED")} 
                                    {(SQ <"s/^(..)(..)(..)(..)(..)(..)$/\\1:\\2:\\3:\\4:\\5:\\6/">)}
                                  )
                                ]
                                negated: False
                              )
                            ]
                          )
                        left_token: <Left_CommandSub "$(">
                        spids: [1598 1626]
                      )
                    }
                  spids: [1597]
                )
              ]
              spids: [1597]
            )
            (SimpleCommand
              words: [{(cat)}]
              redirects: [
                (HereDoc
                  op_id: Redir_DLess
                  fd: -1
                  body: 
                    {
                      (DQ ("  ") ($ VSub_Name "$VM") (":\n") ("    domain: bcpc.example.com\n") 
                        ("    hardware_type: Virtual\n") ("    ip_address: ") 
                        (CommandSubPart
                          command_list: 
                            (CommandList
                              children: [(C {(get_node_ip)} {($ VSub_Name "$VM")})]
                            )
                          left_token: <Left_CommandSub "$(">
                          spids: [1641 1645]
                        ) ("\n") ("    ipmi_address:\n") ("    mac_address: ") ($ VSub_Name "$MAC_ADDRESS") ("\n") ("    role: ") 
                        (CommandSubPart
                          command_list: 
                            (CommandList
                              children: [(C {(get_node_role)} {($ VSub_Name "$VM")})]
                            )
                          left_token: <Left_CommandSub "$(">
                          spids: [1652 1656]
                        ) ("\n")
                      )
                    }
                  do_expansion: True
                  here_end: EoF
                  was_filled: True
                  spids: [1631]
                )
              ]
            )
          ]
          spids: [1594 1658]
        )
      spids: [1588 1592]
    )
  ]
)