(CommandList
  children: [
    (C {(set)} {(-e)})
    (C {(.)} {($ VSub_Name "$REPO_ROOT") (/bootstrap/shared/shared_functions.sh)})
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:REQUIRED_VARS)
          op: Equal
          rhs: 
            {
              (ArrayLiteralPart
                words: [
                  {(BOOTSTRAP_CHEF_DO_CONVERGE)}
                  {(BOOTSTRAP_CHEF_ENV)}
                  {(BCPC_HYPERVISOR_DOMAIN)}
                  {(FILECACHE_MOUNT_POINT)}
                  {(REPO_MOUNT_POINT)}
                  {(REPO_ROOT)}
                ]
              )
            }
          spids: [17]
        )
      ]
      spids: [17]
    )
    (C {(check_for_envvars)} 
      {
        (BracedVarSub
          token: <VSub_Name REQUIRED_VARS>
          bracket_op: (WholeArray op_id:Lit_At)
          spids: [36 41]
        )
      }
    )
    (C {(cd)} {($ VSub_Name "$REPO_ROOT") (/bootstrap/vagrant_scripts)})
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:KNIFE)
          op: Equal
          rhs: {(/opt/opscode/embedded/bin/knife)}
          spids: [76]
        )
      ]
      spids: [76]
    )
    (If
      arms: [
        (if_arm
          cond: [
            (Sentence
              child: 
                (DBracket
                  expr: (BoolUnary op_id:BoolUnary_n child:{(DQ ($ VSub_Name "$CHEF_SERVER_DEB"))})
                )
              terminator: <Op_Semi ";">
            )
          ]
          action: [
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:debpath)
                  op: Equal
                  rhs: 
                    {
                      (DQ ($ VSub_Name "$FILECACHE_MOUNT_POINT") (/) ($ VSub_Name "$CHEF_SERVER_DEB"))
                    }
                  spids: [102]
                )
              ]
              spids: [102]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:CHEF_SERVER_INSTALL_CMD)
                  op: Equal
                  rhs: {(DQ ("sudo dpkg -i ") ($ VSub_Name "$debpath"))}
                  spids: [110]
                )
              ]
              spids: [110]
            )
          ]
          spids: [-1 99]
        )
      ]
      else_action: [
        (Assignment
          keyword: Assign_None
          pairs: [
            (assign_pair
              lhs: (LhsName name:CHEF_SERVER_INSTALL_CMD)
              op: Equal
              rhs: 
                {
                  (DQ ("sudo dpkg -i ") (EscapedLiteralPart token:<Lit_EscapedChar "\\$">) ("(find ") 
                    ($ VSub_Name "$FILECACHE_MOUNT_POINT") ("/ -name chef-server") (EscapedLiteralPart token:<Lit_EscapedChar "\\*">) ("deb -not -name ") 
                    (EscapedLiteralPart token:<Lit_EscapedChar "\\*">) ("downloaded | tail -1)")
                  )
                }
              spids: [119]
            )
          ]
          spids: [119]
        )
      ]
      spids: [116 132]
    )
    (If
      arms: [
        (if_arm
          cond: [
            (Sentence
              child: 
                (DBracket
                  expr: (BoolUnary op_id:BoolUnary_n child:{(DQ ($ VSub_Name "$CHEF_CLIENT_DEB"))})
                )
              terminator: <Op_Semi ";">
            )
          ]
          action: [
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:debpath)
                  op: Equal
                  rhs: 
                    {
                      (DQ ($ VSub_Name "$FILECACHE_MOUNT_POINT") (/) ($ VSub_Name "$CHEF_CLIENT_DEB"))
                    }
                  spids: [150]
                )
              ]
              spids: [150]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:CHEF_CLIENT_INSTALL_CMD)
                  op: Equal
                  rhs: {(DQ ("sudo dpkg -i ") ($ VSub_Name "$debpath"))}
                  spids: [158]
                )
              ]
              spids: [158]
            )
          ]
          spids: [-1 147]
        )
      ]
      else_action: [
        (Assignment
          keyword: Assign_None
          pairs: [
            (assign_pair
              lhs: (LhsName name:CHEF_CLIENT_INSTALL_CMD)
              op: Equal
              rhs: 
                {
                  (DQ ("sudo dpkg -i ") (EscapedLiteralPart token:<Lit_EscapedChar "\\$">) ("(find ") 
                    ($ VSub_Name "$FILECACHE_MOUNT_POINT") ("/ -name chef_") (EscapedLiteralPart token:<Lit_EscapedChar "\\*">) ("deb -not -name ") 
                    (EscapedLiteralPart token:<Lit_EscapedChar "\\*">) ("downloaded | tail -1)")
                  )
                }
              spids: [167]
            )
          ]
          spids: [167]
        )
      ]
      spids: [164 180]
    )
    (C {(unset)} {(debpath)})
    (C {(do_on_node)} {(vm-bootstrap)} 
      {
        (DQ ($ VSub_Name "$CHEF_SERVER_INSTALL_CMD") (" ") ("  && sudo sh -c ") 
          (EscapedLiteralPart token:<Lit_EscapedChar "\\\"">) ("echo nginx[") (EscapedLiteralPart token:<Lit_EscapedChar "\\'">) (non_ssl_port) 
          (EscapedLiteralPart token:<Lit_EscapedChar "\\'">) ("] = 4000 > /etc/opscode/chef-server.rb") (EscapedLiteralPart token:<Lit_EscapedChar "\\\"">) (" ") 
          ("  && sudo chef-server-ctl reconfigure ") 
          (
"  && sudo chef-server-ctl user-create admin admin admin admin@localhost.com welcome --filename /etc/opscode/admin.pem "
          ) 
          (
"  && sudo chef-server-ctl org-create bcpc BCPC --association admin --filename /etc/opscode/bcpc-validator.pem "
          ) ("  && sudo chmod 0644 /etc/opscode/admin.pem /etc/opscode/bcpc-validator.pem ") ("  && ") 
          ($ VSub_Name "$CHEF_CLIENT_INSTALL_CMD")
        )
      }
    )
    (C {(do_on_node)} {(vm-bootstrap)} 
      {
        (DQ ("mkdir -p ") (EscapedLiteralPart token:<Lit_EscapedChar "\\$">) ("HOME/.chef && echo -e ") 
          (EscapedLiteralPart token:<Lit_EscapedChar "\\\"">) ("chef_server_url 'https://bcpc-vm-bootstrap.") ($ VSub_Name "$BCPC_HYPERVISOR_DOMAIN") 
          ("/organizations/bcpc'") (EscapedLiteralPart token:<Lit_EscapedChar "\\\\">) (EscapedLiteralPart token:<Lit_EscapedChar "\\n">) 
          ("validation_client_name 'bcpc-validator'") (EscapedLiteralPart token:<Lit_EscapedChar "\\\\">) (EscapedLiteralPart token:<Lit_EscapedChar "\\n">) 
          ("validation_key '/etc/opscode/bcpc-validator.pem'") (EscapedLiteralPart token:<Lit_EscapedChar "\\\\">) (EscapedLiteralPart token:<Lit_EscapedChar "\\n">) 
          ("node_name 'admin'") (EscapedLiteralPart token:<Lit_EscapedChar "\\\\">) (EscapedLiteralPart token:<Lit_EscapedChar "\\n">) 
          ("client_key '/etc/opscode/admin.pem'") (EscapedLiteralPart token:<Lit_EscapedChar "\\\\">) (EscapedLiteralPart token:<Lit_EscapedChar "\\n">) 
          ("knife['editor'] = 'vim'") (EscapedLiteralPart token:<Lit_EscapedChar "\\\\">) (EscapedLiteralPart token:<Lit_EscapedChar "\\n">) 
          ("cookbook_path [ ") (EscapedLiteralPart token:<Lit_EscapedChar "\\\\">) (EscapedLiteralPart token:<Lit_EscapedChar "\\\"">) 
          ("#{ENV['HOME']}/chef-bcpc/cookbooks") (EscapedLiteralPart token:<Lit_EscapedChar "\\\\">) (EscapedLiteralPart token:<Lit_EscapedChar "\\\"">) 
          (" ]") (EscapedLiteralPart token:<Lit_EscapedChar "\\\"">) (" > ") 
          (EscapedLiteralPart token:<Lit_EscapedChar "\\$">) ("HOME/.chef/knife.rb ") ("  && ") ($ VSub_Name "$KNIFE") (" ssl fetch ") ("  && ") ($ VSub_Name "$KNIFE") 
          (" bootstrap -x vagrant -P vagrant --sudo 10.0.100.3")
        )
      }
    )
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:vms) op:Equal rhs:{(DQ ("vm1 vm2 vm3"))} spids:[274])]
      spids: [274]
    )
    (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:[295])]
              spids: [295]
            )
            (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 (vm) 
                                (CommandSubPart
                                  command_list: 
                                    (CommandList
                                      children: [
                                        (C {(expr)} {(3)} {(Lit_Other "+")} {($ VSub_Name "$i")})
                                      ]
                                    )
                                  left_token: <Left_Backtick "`">
                                  spids: [318 326]
                                )
                              )
                            }
                          spids: [315]
                        )
                      ]
                      spids: [315]
                    )
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:mon_vms)
                          op: Equal
                          rhs: {(DQ ($ VSub_Name "$mon_vms") (" ") ($ VSub_Name "$mon_vm"))}
                          spids: [330]
                        )
                      ]
                      spids: [330]
                    )
                    (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: [339 347]
                              )
                            }
                          spids: [338]
                        )
                      ]
                      spids: [338]
                    )
                  ]
                  spids: [312 350]
                )
            )
          ]
          spids: [-1 292]
        )
      ]
      spids: [-1 352]
    )
    (C {(do_on_node)} {(vm-bootstrap)} 
      {
        (DQ ("sudo /opt/opscode/embedded/bin/gem install ") ($ VSub_Name "$FILECACHE_MOUNT_POINT") 
          ("/knife-acl-1.0.2.gem ") ("  && rsync -a ") ($ VSub_Name "$REPO_MOUNT_POINT") ("/* ") 
          (EscapedLiteralPart token:<Lit_EscapedChar "\\$">) ("HOME/chef-bcpc ") ("  && cp ") ($ VSub_Name "$FILECACHE_MOUNT_POINT") ("/cookbooks/*.tar.gz ") 
          (EscapedLiteralPart token:<Lit_EscapedChar "\\$">) ("HOME/chef-bcpc/cookbooks ") ("  && cd ") (EscapedLiteralPart token:<Lit_EscapedChar "\\$">) 
          ("HOME/chef-bcpc/cookbooks && ls -1 *.tar.gz | xargs -I% tar xvzf %")
        )
      }
    )
    (C {(do_on_node)} {(vm-bootstrap)} 
      {
        (DQ ("sudo apt-get update ") ("  && cd ") (EscapedLiteralPart token:<Lit_EscapedChar "\\$">) 
          ("HOME/chef-bcpc ") ("  && sudo bash -c 'export FILECACHE_MOUNT_POINT=") ($ VSub_Name "$FILECACHE_MOUNT_POINT") (" ") 
          ("  && source ") (EscapedLiteralPart token:<Lit_EscapedChar "\\$">) 
          ("HOME/proxy_config.sh && bootstrap/shared/shared_build_bins.sh'")
        )
      }
    )
    (C {(do_on_node)} {(vm-bootstrap)} 
      {
        (DQ ($ VSub_Name "$KNIFE") (" cookbook upload -a ") ("  && cd ") 
          (EscapedLiteralPart token:<Lit_EscapedChar "\\$">) ("HOME/chef-bcpc/roles && ") ($ VSub_Name "$KNIFE") (" role from file *.json ") ("  && cd ") 
          (EscapedLiteralPart token:<Lit_EscapedChar "\\$">) ("HOME/chef-bcpc/environments && ") ($ VSub_Name "$KNIFE") (" environment from file ") 
          ($ VSub_Name "$BOOTSTRAP_CHEF_ENV") (.json)
        )
      }
    )
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:i) op:Equal rhs:{(1)} spids:[448])]
      spids: [448]
    )
    (ForEach
      iter_name: vm
      iter_words: [{($ VSub_Name "$vms")} {($ VSub_Name "$mon_vms")}]
      do_arg_iter: False
      body: 
        (DoGroup
          children: [
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (DBracket
                          expr: 
                            (BoolUnary
                              op_id: BoolUnary_z
                              child: {(DQ ($ VSub_Name "$CHEF_CLIENT_DEB"))}
                            )
                        )
                      terminator: <Op_Semi ";">
                    )
                  ]
                  action: [
                    (C {(echo)} 
                      {
                        (DQ ("Installing latest chef-client found in ") ($ VSub_Name "$vm") (":") 
                          ($ VSub_Name "$FILECACHE_MOUNT_POINT")
                        )
                      }
                    )
                  ]
                  spids: [-1 482]
                )
              ]
              spids: [-1 495]
            )
            (C {(do_on_node)} {($ VSub_Name "$vm")} {(DQ ($ VSub_Name "$CHEF_CLIENT_INSTALL_CMD"))})
            (C {(do_on_node)} {(vm-bootstrap)} 
              {
                (DQ ($ VSub_Name "$KNIFE") (" bootstrap -x vagrant -P vagrant --sudo 10.0.100.1") 
                  (${ VSub_Name i)
                )
              }
            )
            (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: [521 529]
                      )
                    }
                  spids: [520]
                )
              ]
              spids: [520]
            )
          ]
          spids: [462 531]
        )
      spids: [456 460]
    )
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:ENVIRONMENT_SET) op:Equal rhs:{(DQ )} spids:[537])]
      spids: [537]
    )
    (ForEach
      iter_name: vm
      iter_words: [{(vm-bootstrap)} {($ VSub_Name "$vms")} {($ VSub_Name "$mon_vms")}]
      do_arg_iter: False
      body: 
        (DoGroup
          children: [
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:ENVIRONMENT_SET)
                  op: Equal
                  rhs: 
                    {
                      (DQ ($ VSub_Name "$ENVIRONMENT_SET") (" ") ($ VSub_Name "$KNIFE") 
                        (" node environment set bcpc-") ($ VSub_Name "$vm") (.) ($ VSub_Name "$BCPC_HYPERVISOR_DOMAIN") (" ") ($ VSub_Name "$BOOTSTRAP_CHEF_ENV") 
                        (" && ")
                      )
                    }
                  spids: [557]
                )
              ]
              spids: [557]
            )
          ]
          spids: [554 571]
        )
      spids: [546 552]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:ENVIRONMENT_SET)
          op: Equal
          rhs: {(DQ ($ VSub_Name "$ENVIRONMENT_SET") (" :"))}
          spids: [573]
        )
      ]
      spids: [573]
    )
    (C {(do_on_node)} {(vm-bootstrap)} {($ VSub_Name "$ENVIRONMENT_SET")})
    (C {(do_on_node)} {(vm-bootstrap)} 
      {
        (DQ ($ VSub_Name "$KNIFE") (" node run_list set bcpc-vm-bootstrap.") 
          ($ VSub_Name "$BCPC_HYPERVISOR_DOMAIN") (" 'role[BCPC-Hardware-Virtual],role[BCPC-Bootstrap]' ") ("  && ") ($ VSub_Name "$KNIFE") 
          (" node run_list set bcpc-vm1.") ($ VSub_Name "$BCPC_HYPERVISOR_DOMAIN") (" 'role[BCPC-Hardware-Virtual],role[BCPC-Headnode]' ") 
          ("  && ") ($ VSub_Name "$KNIFE") (" node run_list set bcpc-vm2.") ($ VSub_Name "$BCPC_HYPERVISOR_DOMAIN") 
          (" 'role[BCPC-Hardware-Virtual],role[BCPC-Worknode]' ") ("  && ") ($ VSub_Name "$KNIFE") (" node run_list set bcpc-vm3.") 
          ($ VSub_Name "$BCPC_HYPERVISOR_DOMAIN") (" 'role[BCPC-Hardware-Virtual],role[BCPC-EphemeralWorknode]'")
        )
      }
    )
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:ADMIN_SET) op:Equal rhs:{(DQ ("true && "))} spids:[619])]
      spids: [619]
    )
    (ForEach
      iter_name: vm
      iter_words: [{(vm-bootstrap)} {(vm1)} {($ VSub_Name "$mon_vms")}]
      do_arg_iter: False
      body: 
        (DoGroup
          children: [
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:ADMIN_SET)
                  op: Equal
                  rhs: 
                    {
                      (DQ ($ VSub_Name "$ADMIN_SET") (" ") ($ VSub_Name "$KNIFE") 
                        (" group add client bcpc-") ($ VSub_Name "$vm") (.) ($ VSub_Name "$BCPC_HYPERVISOR_DOMAIN") (" admins && ")
                      )
                    }
                  spids: [640]
                )
              ]
              spids: [640]
            )
          ]
          spids: [637 652]
        )
      spids: [629 635]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:ADMIN_SET)
          op: Equal
          rhs: {(DQ ($ VSub_Name "$ADMIN_SET") (" :"))}
          spids: [654]
        )
      ]
      spids: [654]
    )
    (C {(do_on_node)} {(vm-bootstrap)} {($ VSub_Name "$ADMIN_SET")})
    (If
      arms: [
        (if_arm
          cond: [
            (Sentence
              child: 
                (DBracket
                  expr: 
                    (BoolBinary
                      op_id: BoolBinary_eq
                      left: {($ VSub_Name "$BOOTSTRAP_CHEF_DO_CONVERGE")}
                      right: {(0)}
                    )
                )
              terminator: <Op_Semi ";">
            )
          ]
          action: [
            (ForEach
              iter_name: vm
              iter_words: [{($ VSub_Name "$mon_vms")}]
              do_arg_iter: False
              body: 
                (DoGroup
                  children: [
                    (C {(do_on_node)} {(vm-bootstrap)} 
                      {
                        (DQ ($ VSub_Name "$KNIFE") (" node run_list set bcpc-") ($ VSub_Name "$vm") (.) 
                          ($ VSub_Name "$BCPC_HYPERVISOR_DOMAIN") (" 'role[BCPC-Monitoring]'")
                        )
                      }
                    )
                  ]
                  spids: [701 718]
                )
              spids: [697 699]
            )
            (C {(echo)} 
              {(DQ ("BOOTSTRAP_CHEF_DO_CONVERGE is set to 0, skipping automatic convergence."))}
            )
            (C {(exit)} {(0)})
          ]
          spids: [-1 689]
        )
      ]
      else_action: [
        (C {(do_on_node)} {(vm-bootstrap)} {(DQ ("sudo chef-client"))})
        (ForEach
          iter_name: vm
          iter_words: [{($ VSub_Name "$vms")}]
          do_arg_iter: False
          body: 
            (DoGroup
              children: [(C {(do_on_node)} {($ VSub_Name "$vm")} {(DQ ("sudo chef-client"))})]
              spids: [757 769]
            )
          spids: [753 755]
        )
        (C {(do_on_node)} {(vm1)} {(DQ ("sudo chef-client"))})
        (ForEach
          iter_name: vm
          iter_words: [{($ VSub_Name "$vms")}]
          do_arg_iter: False
          body: 
            (DoGroup
              children: [(C {(do_on_node)} {($ VSub_Name "$vm")} {(DQ ("sudo hup_openstack || true"))})]
              spids: [798 810]
            )
          spids: [794 796]
        )
        (ForEach
          iter_name: vm
          iter_words: [{($ VSub_Name "$mon_vms")}]
          do_arg_iter: False
          body: 
            (DoGroup
              children: [
                (C {(do_on_node)} {(vm-bootstrap)} 
                  {
                    (DQ ($ VSub_Name "$KNIFE") (" node run_list set bcpc-") ($ VSub_Name "$vm") (.) 
                      ($ VSub_Name "$BCPC_HYPERVISOR_DOMAIN") (" 'role[BCPC-Monitoring]'")
                    )
                  }
                )
                (C {(do_on_node)} {($ VSub_Name "$vm")} {(DQ ("sudo chef-client"))})
              ]
              spids: [826 852]
            )
          spids: [822 824]
        )
        (ForEach
          iter_name: vm
          iter_words: [
            {
              (CommandSubPart
                command_list: 
                  (CommandList
                    children: [
                      (Pipeline
                        children: [
                          (C {(echo)} {($ VSub_Name "$mon_vms")})
                          (C {(awk)} {(SQ <"{$NF=\"\"}1">)})
                        ]
                        negated: False
                      )
                    ]
                  )
                left_token: <Left_CommandSub "$(">
                spids: [865 877]
              )
            }
          ]
          do_arg_iter: False
          body: 
            (DoGroup
              children: [(C {(do_on_node)} {($ VSub_Name "$vm")} {(DQ ("sudo chef-client"))})]
              spids: [880 892]
            )
          spids: [864 878]
        )
      ]
      spids: [732 894]
    )
  ]
)