(CommandList children: [ (C {(hash)} {(-r)}) (FuncDef name: wait_for_ssh body: (BraceGroup children: [ (Assignment keyword: Assign_Local pairs: [ (assign_pair lhs: (LhsName name:hostname) op: Equal rhs: {(DQ ($ VSub_Number "$1"))} spids: [17] ) ] spids: [15] ) (Assignment keyword: Assign_Local pairs: [ (assign_pair lhs: (LhsName name:min) op: Equal rhs: { (BracedVarSub token: <VSub_Number 2> suffix_op: (StringUnary op_id:VTest_ColonHyphen arg_word:{(1)}) spids: [26 30] ) } spids: [25] ) (assign_pair lhs: (LhsName name:max) op: Equal rhs: { (BracedVarSub token: <VSub_Number 3> suffix_op: (StringUnary op_id:VTest_ColonHyphen arg_word:{(10)}) spids: [33 37] ) } spids: [32] ) ] spids: [23] ) (If arms: [ (if_arm cond: [ (Sentence child: (C {(Lit_Other "[")} {(-z)} {(DQ (${ VSub_Name hostname))} {(Lit_Other "]")}) terminator: <Op_Semi ";"> ) ] action: [ (Sentence child: (ControlFlow token:<ControlFlow_Return return> arg_word:{(1)}) terminator: <Op_Semi ";"> ) ] spids: [-1 57] ) ] spids: [-1 65] ) (SimpleCommand words: [{(exec)}] redirects: [(Redir op_id:Redir_GreatAnd fd:3 arg_word:{(2)} spids:[70])] ) (SimpleCommand words: [{(exec)}] redirects: [(Redir op_id:Redir_Great fd:2 arg_word:{(/dev/null)} spids:[76])] ) (While cond: [(Sentence child:(C {(true)}) terminator:<Op_Semi ";">)] body: (DoGroup children: [ (If arms: [ (if_arm cond: [ (Sentence child: (SimpleCommand words: [{(echo)}] redirects: [ (Redir op_id: Redir_Great fd: -1 arg_word: {(/dev/tcp/) (${ VSub_Name hostname) (/22)} spids: [93] ) ] ) terminator: <Op_Semi ";"> ) ] action: [(ControlFlow token:<ControlFlow_Return return> arg_word:{(0)})] spids: [-1 103] ) ] spids: [-1 111] ) (C {(sleep)} { (ArithSubPart anode: (ArithBinary op_id: Arith_Plus left: (ArithBinary op_id: Arith_Percent left: (ArithWord w:{($ VSub_Name "$RANDOM")}) right: (ArithWord w:{($ VSub_Name "$max")}) ) right: (ArithWord w:{($ VSub_Name "$min")}) ) spids: [116 129] ) } ) ] spids: [86 132] ) ) (SimpleCommand words: [{(exec)}] redirects: [(Redir op_id:Redir_GreatAnd fd:2 arg_word:{(3)} spids:[137])] ) (SimpleCommand words: [{(exec)}] redirects: [(Redir op_id:Redir_GreatAnd fd:3 arg_word:{(-)} spids:[143])] ) ] spids: [12] ) spids: [9 12] ) (FuncDef name: setup_headnodes body: (BraceGroup children: [ (AndOr children: [ (C {(bootstrap_head)} {(bcpc-vm1.bcpc.example.com)} {(10.0.100.11)}) (C {(true)}) ] op_id: Op_DPipe ) (Assignment keyword: Assign_Local pairs: [ (assign_pair lhs: (LhsName name:keyfile) op: Equal rhs: {(TildeSubPart prefix:"") (/.ssh/id_rsa.root)} spids: [172] ) ] spids: [170] ) (If arms: [ (if_arm cond: [ (Sentence child: (C {(Lit_Other "[")} {(KW_Bang "!")} {(-r)} {(DQ (${ VSub_Name keyfile))} {(Lit_Other "]")} ) terminator: <Op_Semi ";"> ) ] action: [ (AndOr children: [ (C {(./install_root_key)}) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:keyfile) op: Equal rhs: {(TildeSubPart prefix:"") (/.ssh/id_rsa.bcpc)} spids: [202] ) ] spids: [202] ) ] op_id: Op_DPipe ) ] spids: [-1 195] ) ] spids: [-1 207] ) (C {(echo)} {(DQ ("Proceeding with second chef-client run"))}) (C {(ssh)} {(-i)} {(DQ (${ VSub_Name keyfile))} {(-lroot)} {(10.0.100.11)} {(chef-client)}) ] spids: [152] ) spids: [149 152] ) (FuncDef name: bootstrap_head body: (BraceGroup children: [ (Assignment keyword: Assign_Local pairs: [ (assign_pair lhs: (LhsName name:nodename) op: Equal rhs: {(DQ ($ VSub_Number "$1"))} spids: [244] ) ] spids: [242] ) (Assignment keyword: Assign_Local pairs: [ (assign_pair lhs: (LhsName name:ip) op: Equal rhs: {(DQ ($ VSub_Number "$2"))} spids: [252] ) ] spids: [250] ) (If arms: [ (if_arm cond: [ (Sentence child: (C {(Lit_Other "[")} {(-z)} {(DQ (${ VSub_Name ip))} {(-o)} {(-z)} {(DQ (${ VSub_Name nodename))} {(Lit_Other "]")} ) terminator: <Op_Semi ";"> ) ] action: [ (Sentence child: (ControlFlow token:<ControlFlow_Return return> arg_word:{(1)}) terminator: <Op_Semi ";"> ) ] spids: [-1 284] ) ] spids: [-1 292] ) (TimeBlock pipeline:(C {(-p)} {(wait_for_ssh)} {(DQ (${ VSub_Name ip))})) (C {(echo)} {(DQ ("Configuring temporary hosts entry for chef server on ") (${ VSub_Name ip))} ) (C {(add_hosts_entries)} {(DQ (${ VSub_Name ip))} {(DQ (${ VSub_Name hosts_entries))}) (C {(knife)} {(bootstrap)} {(--bootstrap-no-proxy)} {(DQ (${ VSub_Name chef_server_host))} {(${ VSub_Name bootstrap_proxy_args)} {(-i)} {(DQ (${ VSub_Name keyfile))} {(-x)} {(root)} {(--node-ssl-verify-mode) (Lit_Other "=") (none)} {(--bootstrap-wget-options)} {(DQ (--no-check-certificate))} {(-r)} {(SQ <"role[BCPC-Headnode]">)} {(-E)} {(Test-Laptop)} {(DQ (${ VSub_Name ip))} {(-N)} {(DQ (${ VSub_Name nodename))} ) (SimpleCommand words: [{(knife)} {(actor)} {(map)}] redirects: [(Redir op_id:Redir_GreatAnd fd:-1 arg_word:{(2)} spids:[408])] ) (SimpleCommand words: [{(knife)} {(group)} {(add)} {(actor)} {(admins)} {(DQ (${ VSub_Name nodename))}] redirects: [(Redir op_id:Redir_GreatAnd fd:-1 arg_word:{(2)} spids:[428])] ) ] spids: [239] ) spids: [236 239] ) (FuncDef name: bootstrap_worker body: (BraceGroup children: [ (Assignment keyword: Assign_Local pairs: [ (assign_pair lhs: (LhsName name:nodename) op: Equal rhs: {(DQ ($ VSub_Number "$1"))} spids: [442] ) ] spids: [440] ) (Assignment keyword: Assign_Local pairs: [ (assign_pair lhs: (LhsName name:ip) op: Equal rhs: {(DQ ($ VSub_Number "$2"))} spids: [450] ) ] spids: [448] ) (If arms: [ (if_arm cond: [ (Sentence child: (C {(Lit_Other "[")} {(-z)} {(DQ (${ VSub_Name ip))} {(-o)} {(-z)} {(DQ (${ VSub_Name nodename))} {(Lit_Other "]")} ) terminator: <Op_Semi ";"> ) ] action: [ (Sentence child: (ControlFlow token:<ControlFlow_Return return> arg_word:{(1)}) terminator: <Op_Semi ";"> ) ] spids: [-1 482] ) ] spids: [-1 490] ) (TimeBlock pipeline:(C {(-p)} {(wait_for_ssh)} {(DQ (${ VSub_Name ip))})) (C {(echo)} {(DQ ("Configuring temporary hosts entry for chef server on ") (${ VSub_Name ip))} ) (C {(add_hosts_entries)} {(DQ (${ VSub_Name ip))} {(DQ (${ VSub_Name hosts_entries))}) (C {(knife)} {(bootstrap)} {(--bootstrap-no-proxy)} {(DQ (${ VSub_Name chef_server_host))} {(${ VSub_Name bootstrap_proxy_args)} {(-i)} {(DQ (${ VSub_Name keyfile))} {(-x)} {(root)} {(--bootstrap-wget-options)} {(DQ (--no-check-certificate))} {(-r)} {(SQ <"role[BCPC-Worknode]">)} {(-E)} {(Test-Laptop)} {(DQ ($ VSub_Name "$ip"))} {(-N)} {(DQ (${ VSub_Name nodename))} ) ] spids: [437] ) spids: [434 437] ) (FuncDef name: add_hosts_entries body: (BraceGroup children: [ (Assignment keyword: Assign_Local pairs: [ (assign_pair lhs: (LhsName name:ip) op: Equal rhs: {(DQ ($ VSub_Number "$1"))} spids: [610] ) (assign_pair lhs: (LhsName name:entries) op: Equal rhs: {(DQ ($ VSub_Number "$2"))} spids: [615] ) ] spids: [608] ) (If arms: [ (if_arm cond: [ (Sentence child: (C {(Lit_Other "[")} {(-z)} {(DQ (${ VSub_Name ip))} {(-o)} {(-z)} {(DQ (${ VSub_Name entries))} {(Lit_Other "]")} ) terminator: <Op_Semi ";"> ) ] action: [ (Sentence child: (ControlFlow token:<ControlFlow_Return return> arg_word:{(1)}) terminator: <Op_Semi ";"> ) ] spids: [-1 647] ) ] spids: [-1 655] ) (C {(echo)} {($ VSub_Name "$entries")}) (SimpleCommand words: [ {(ssh)} {(-ostricthostkeychecking) (Lit_Other "=") (no)} {(-i)} {(DQ (${ VSub_Name keyfile))} {(-lroot)} {(DQ (${ VSub_Name ip))} ] redirects: [ (HereDoc op_id: Redir_DLess fd: -1 body: { (DQ (" if ! getent ahosts bcpc-bootstrap &> /dev/null ; then\n") (" cat <<EoS >> /etc/hosts\n") ("# Added by ") (BracedVarSub token: <VSub_Number 0> suffix_op: (StringUnary op_id:VOp1_DPound arg_word:{("*") (Lit_Slash /)}) spids: [691 696] ) ("\n") ($ VSub_Name "$entries") ("\n") ("EoS\n") (" fi\n") (" getent hosts bcpc-bootstrap\n") ) } do_expansion: True here_end: EoF was_filled: True spids: [685] ) ] ) ] spids: [605] ) spids: [602 605] ) (FuncDef name: configure_proxy body: (BraceGroup children: [ (If arms: [ (if_arm cond: [ (Sentence child: (DBracket expr:(BoolUnary op_id:BoolUnary_f child:{(./proxy_setup.sh)})) terminator: <Op_Semi ";"> ) ] action: [ (C {(.)} {(./proxy_setup.sh)}) (C {(export)} {(-n)} (BracedWordTree parts: [(http) (BracedAltPart words:[{}{(s)}]) (_proxy)] ) ) ] spids: [-1 723] ) ] spids: [-1 746] ) (If arms: [ (if_arm cond: [ (Sentence child: (DBracket expr: (BoolUnary op_id:BoolUnary_n child:{(DQ (${ VSub_Name https_proxy))}) ) terminator: <Op_Semi ";"> ) ] action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:bootstrap_proxy_args) op: Equal rhs: {(DQ ("--bootstrap-proxy ") (${ VSub_Name https_proxy))} spids: [768] ) ] spids: [768] ) ] spids: [-1 765] ) ] else_action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:bootstrap_proxy_args) op: Equal rhs: {(DQ )} spids: [780] ) ] spids: [780] ) ] spids: [777 785] ) ] spids: [709] ) spids: [706 709] ) (FuncDef name: ip_to_name body: (BraceGroup children: [ (Assignment keyword: Assign_Local pairs: [ (assign_pair lhs: (LhsName name:ip) op: Equal rhs: {(DQ ($ VSub_Number "$1"))} spids: [801] ) ] spids: [799] ) (SimpleCommand words: [{(read)} {(_)} {(_)} {(_)} {(nodenum)}] redirects: [ (HereDoc op_id: Redir_DLess fd: -1 body: {(DQ ($ VSub_Name "$ip") ("\n"))} do_expansion: True here_end: EoF was_filled: True spids: [826] ) ] more_env: [(env_pair name:IFS val:{(SQ <.>)} spids:[811])] ) (If arms: [ (if_arm cond: [ (Sentence child: (C {(Lit_Other "[")} {(-z)} {(DQ (${ VSub_Name ip))} {(-o)} {(-z)} {(DQ (${ VSub_Name nodenum))} {(Lit_Other "]")} ) terminator: <Op_Semi ";"> ) ] action: [ (Sentence child: (ControlFlow token:<ControlFlow_Return return> arg_word:{(1)}) terminator: <Op_Semi ";"> ) ] spids: [-1 858] ) ] spids: [-1 866] ) (Assignment keyword: Assign_Local pairs: [ (assign_pair lhs: (LhsName name:suffix) op: Equal rhs: { (ArithSubPart anode: (ArithBinary op_id: Arith_Minus left: (ArithVarRef name:nodenum) right: (ArithWord w:{(Lit_Digits 10)}) ) spids: [872 879] ) } spids: [871] ) ] spids: [869] ) (C {(echo)} {(bcpc-vm) (${ VSub_Name suffix) (.) (${ VSub_Name domainname)}) ] spids: [796] ) spids: [793 796] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:domainname) op: Equal rhs: {(bcpc.example.com)} spids: [896] ) ] spids: [896] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:chef_server_host) op: Equal rhs: {(bcpc-bootstrap)} spids: [899] ) ] spids: [899] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:keyfile) op: Equal rhs: {(TildeSubPart prefix:"") (/.ssh/id_rsa.bcpc)} spids: [902] ) ] spids: [902] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:hosts_entries) op: Equal rhs: {(DQ ("10.0.100.3 ") (${ VSub_Name chef_server_host) ("\n"))} spids: [906] ) ] spids: [906] ) (C {(set)} {(-e)}) (C {(configure_proxy)}) (C {(setup_headnodes)}) (C {(echo)} {(DQ ("Waiting to bootstrap workers"))}) (C {(set)} {(-x)}) (ForEach iter_name: ip iter_words: [{(10.0.100.) (Lit_LBrace "{") (12..13) (Lit_RBrace "}")}] do_arg_iter: False body: (DoGroup children: [ (Sentence child: (C {(eval)} {(DQ ("bootstrap_worker ")) (CommandSubPart command_list: (CommandList children:[(C {(ip_to_name)} {(${ VSub_Name ip)})]) left_token: <Left_CommandSub "$("> spids: [956 962] ) (DQ (" ") (${ VSub_Name ip) (" &")) } ) terminator: <Op_Semi ";"> ) ] spids: [949 973] ) spids: [941 947] ) (C {(wait)}) ] )