(command.CommandList children: [ (C {(hash)} {(-r)}) (command.ShFunction name: wait_for_ssh body: (command.BraceGroup children: [ (C {(local)} {(Id.Lit_VarLike 'hostname=') (DQ ($ Id.VSub_Number '$1'))}) (C {(local)} {(Id.Lit_VarLike 'min=') (braced_var_sub token: (Token id:Id.VSub_Number val:2 span_id:27) suffix_op: (suffix_op.Unary op_id:Id.VTest_ColonHyphen arg_word:{(1)}) ) } {(Id.Lit_VarLike 'max=') (braced_var_sub token: (Token id:Id.VSub_Number val:3 span_id:34) suffix_op: (suffix_op.Unary op_id:Id.VTest_ColonHyphen arg_word:{(10)}) ) } ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} {(-z)} {(DQ (${ Id.VSub_Name hostname))} {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:55) ) ] action: [ (command.Sentence child: (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:59) arg_word: {(1)} ) terminator: (Token id:Id.Op_Semi val:';' span_id:63) ) ] spids: [41 57] ) ] ) (command.Simple words: [{(exec)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_GreatAnd val:'3>&' span_id:70) fd: 3 arg_word: {(2)} ) ] ) (command.Simple words: [{(exec)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'2>' span_id:76) fd: 2 arg_word: {(/dev/null)} ) ] ) (command.WhileUntil keyword: (Token id:Id.KW_While val:while span_id:80) cond: [ (command.Sentence child: (C {(true)}) terminator: (Token id:Id.Op_Semi val:';' span_id:84) ) ] body: (command.DoGroup children: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.Simple words: [{(echo)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:93) fd: -1 arg_word: {(/dev/tcp/) (${ Id.VSub_Name hostname) (/22)} ) ] ) terminator: (Token id:Id.Op_Semi val:';' span_id:101) ) ] action: [ (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:106) arg_word: {(0)} ) ] spids: [89 103] ) ] ) (C {(sleep)} { (word_part.ArithSub anode: (arith_expr.Binary op_id: Id.Arith_Plus left: (arith_expr.Binary op_id: Id.Arith_Percent left: (arith_expr.ArithWord w:{($ Id.VSub_DollarName '$RANDOM')}) right: (arith_expr.ArithWord w:{($ Id.VSub_DollarName '$max')}) ) right: (arith_expr.ArithWord w:{($ Id.VSub_DollarName '$min')}) ) ) } ) ] ) ) (command.Simple words: [{(exec)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_GreatAnd val:'2>&' span_id:137) fd: 2 arg_word: {(3)} ) ] ) (command.Simple words: [{(exec)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_GreatAnd val:'3>&' span_id:143) fd: 3 arg_word: {(-)} ) ] ) ] ) ) (command.ShFunction name: setup_headnodes body: (command.BraceGroup children: [ (command.AndOr ops: [Id.Op_DPipe] children: [ (C {(bootstrap_head)} {(bcpc-vm1.bcpc.example.com)} {(10.0.100.11)}) (C {(true)}) ] ) (C {(local)} {(Id.Lit_VarLike 'keyfile=') (Id.Lit_TildeLike '~') (/.ssh/id_rsa.root)}) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} {(Id.KW_Bang '!')} {(-r)} {(DQ (${ Id.VSub_Name keyfile))} {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:193) ) ] action: [ (command.AndOr ops: [Id.Op_DPipe] children: [ (C {(./install_root_key)}) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:keyfile) op: assign_op.Equal rhs: { (word_part.TildeSub token: (Token id:Id.Lit_TildeLike val:'~' span_id:203) ) (/.ssh/id_rsa.bcpc) } spids: [202] ) ] ) ] ) ] spids: [177 195] ) ] ) (C {(echo)} {(DQ ('Proceeding with second chef-client run'))}) (C {(ssh)} {(-i)} {(DQ (${ Id.VSub_Name keyfile))} {(-lroot)} {(10.0.100.11)} {(chef-client)}) ] ) ) (command.ShFunction name: bootstrap_head body: (command.BraceGroup children: [ (C {(local)} {(Id.Lit_VarLike 'nodename=') (DQ ($ Id.VSub_Number '$1'))}) (C {(local)} {(Id.Lit_VarLike 'ip=') (DQ ($ Id.VSub_Number '$2'))}) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} {(-z)} {(DQ (${ Id.VSub_Name ip))} {(-o)} {(-z)} {(DQ (${ Id.VSub_Name nodename))} {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:282) ) ] action: [ (command.Sentence child: (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:286) arg_word: {(1)} ) terminator: (Token id:Id.Op_Semi val:';' span_id:290) ) ] spids: [258 284] ) ] ) (command.TimeBlock pipeline: (C {(-p)} {(wait_for_ssh)} {(DQ (${ Id.VSub_Name ip))}) ) (C {(echo)} {(DQ ('Configuring temporary hosts entry for chef server on ') (${ Id.VSub_Name ip))} ) (C {(add_hosts_entries)} {(DQ (${ Id.VSub_Name ip))} {(DQ (${ Id.VSub_Name hosts_entries))}) (C {(knife)} {(bootstrap)} {(--bootstrap-no-proxy)} {(DQ (${ Id.VSub_Name chef_server_host))} {(${ Id.VSub_Name bootstrap_proxy_args)} {(-i)} {(DQ (${ Id.VSub_Name keyfile))} {(-x)} {(root)} {(--node-ssl-verify-mode) (Id.Lit_Equals '=') (none)} {(--bootstrap-wget-options)} {(DQ (--no-check-certificate))} {(-r)} {(SQ (Token id:Id.Lit_Chars val:'role[BCPC-Headnode]' span_id:380))} {(-E)} {(Test-Laptop)} {(DQ (${ Id.VSub_Name ip))} {(-N)} {(DQ (${ Id.VSub_Name nodename))} ) (command.Simple words: [{(knife)} {(actor)} {(map)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_GreatAnd val:'>&' span_id:408) fd: -1 arg_word: {(2)} ) ] ) (command.Simple words: [{(knife)} {(group)} {(add)} {(actor)} {(admins)} {(DQ (${ Id.VSub_Name nodename))}] redirects: [ (redir.Redir op: (Token id:Id.Redir_GreatAnd val:'>&' span_id:428) fd: -1 arg_word: {(2)} ) ] ) ] ) ) (command.ShFunction name: bootstrap_worker body: (command.BraceGroup children: [ (C {(local)} {(Id.Lit_VarLike 'nodename=') (DQ ($ Id.VSub_Number '$1'))}) (C {(local)} {(Id.Lit_VarLike 'ip=') (DQ ($ Id.VSub_Number '$2'))}) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} {(-z)} {(DQ (${ Id.VSub_Name ip))} {(-o)} {(-z)} {(DQ (${ Id.VSub_Name nodename))} {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:480) ) ] action: [ (command.Sentence child: (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:484) arg_word: {(1)} ) terminator: (Token id:Id.Op_Semi val:';' span_id:488) ) ] spids: [456 482] ) ] ) (command.TimeBlock pipeline: (C {(-p)} {(wait_for_ssh)} {(DQ (${ Id.VSub_Name ip))}) ) (C {(echo)} {(DQ ('Configuring temporary hosts entry for chef server on ') (${ Id.VSub_Name ip))} ) (C {(add_hosts_entries)} {(DQ (${ Id.VSub_Name ip))} {(DQ (${ Id.VSub_Name hosts_entries))}) (C {(knife)} {(bootstrap)} {(--bootstrap-no-proxy)} {(DQ (${ Id.VSub_Name chef_server_host))} {(${ Id.VSub_Name bootstrap_proxy_args)} {(-i)} {(DQ (${ Id.VSub_Name keyfile))} {(-x)} {(root)} {(--bootstrap-wget-options)} {(DQ (--no-check-certificate))} {(-r)} {(SQ (Token id:Id.Lit_Chars val:'role[BCPC-Worknode]' span_id:574))} {(-E)} {(Test-Laptop)} {(DQ ($ Id.VSub_DollarName '$ip'))} {(-N)} {(DQ (${ Id.VSub_Name nodename))} ) ] ) ) (command.ShFunction name: add_hosts_entries body: (command.BraceGroup children: [ (C {(local)} {(Id.Lit_VarLike 'ip=') (DQ ($ Id.VSub_Number '$1'))} {(Id.Lit_VarLike 'entries=') (DQ ($ Id.VSub_Number '$2'))} ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} {(-z)} {(DQ (${ Id.VSub_Name ip))} {(-o)} {(-z)} {(DQ (${ Id.VSub_Name entries))} {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:645) ) ] action: [ (command.Sentence child: (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:649) arg_word: {(1)} ) terminator: (Token id:Id.Op_Semi val:';' span_id:653) ) ] spids: [621 647] ) ] ) (C {(echo)} {($ Id.VSub_DollarName '$entries')}) (command.Simple words: [ {(ssh)} {(-ostricthostkeychecking) (Id.Lit_Equals '=') (no)} {(-i)} {(DQ (${ Id.VSub_Name keyfile))} {(-lroot)} {(DQ (${ Id.VSub_Name ip))} ] redirects: [ (redir.HereDoc op: (Token id:Id.Redir_DLess val:'<<' span_id:685) fd: -1 here_begin: {(EoF)} here_end_span_id: 704 stdin_parts: [ (' if ! getent ahosts bcpc-bootstrap &> /dev/null ; then\n') (' cat <<EoS >> /etc/hosts\n') ('# Added by ') (braced_var_sub token: (Token id:Id.VSub_Number val:0 span_id:692) suffix_op: (suffix_op.Unary op_id: Id.VOp1_DPound arg_word: {('*') (Id.Lit_Slash /)} ) ) ('\n') ($ Id.VSub_DollarName '$entries') ('\n') ('EoS\n') (' fi\n') (' getent hosts bcpc-bootstrap\n') ] ) ] ) ] ) ) (command.ShFunction name: configure_proxy body: (command.BraceGroup children: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DBracket expr: (bool_expr.Unary op_id:Id.BoolUnary_f child:{(./proxy_setup.sh)}) ) terminator: (Token id:Id.Op_Semi val:';' span_id:723) ) ] action: [ (C {(.)} {(./proxy_setup.sh)}) (C {(export)} {(-n)} (word.BracedTree parts: [(http) (word_part.BracedTuple words:[{} {(s)}]) (_proxy)] ) ) ] spids: [714 725] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DBracket expr: (bool_expr.Unary op_id: Id.BoolUnary_n child: {(DQ (${ Id.VSub_Name https_proxy))} ) ) terminator: (Token id:Id.Op_Semi val:';' span_id:765) ) ] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:bootstrap_proxy_args) op: assign_op.Equal rhs: {(DQ ('--bootstrap-proxy ') (${ Id.VSub_Name https_proxy))} spids: [770] ) ] ) ] spids: [751 767] ) ] else_action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:bootstrap_proxy_args) op: assign_op.Equal rhs: {(DQ )} spids: [782] ) ] ) ] ) ] ) ) (command.ShFunction name: ip_to_name body: (command.BraceGroup children: [ (C {(local)} {(Id.Lit_VarLike 'ip=') (DQ ($ Id.VSub_Number '$1'))}) (command.Simple words: [{(read)} {(_)} {(_)} {(_)} {(nodenum)}] redirects: [ (redir.HereDoc op: (Token id:Id.Redir_DLess val:'<<' span_id:828) fd: -1 here_begin: {(EoF)} here_end_span_id: 834 stdin_parts: [($ Id.VSub_DollarName '$ip') ('\n')] ) ] more_env: [ (env_pair name: IFS val: {(SQ (Token id:Id.Lit_Chars val:. span_id:815))} spids: [813] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} {(-z)} {(DQ (${ Id.VSub_Name ip))} {(-o)} {(-z)} {(DQ (${ Id.VSub_Name nodenum))} {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:860) ) ] action: [ (command.Sentence child: (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:864) arg_word: {(1)} ) terminator: (Token id:Id.Op_Semi val:';' span_id:868) ) ] spids: [836 862] ) ] ) (C {(local)} {(Id.Lit_VarLike 'suffix=') (word_part.ArithSub anode: (arith_expr.Binary op_id: Id.Arith_Minus left: (arith_expr.VarRef token: (Token id:Id.Lit_ArithVarLike val:nodenum span_id:877) ) right: (arith_expr.ArithWord w:{(Id.Lit_Digits 10)}) ) ) } ) (C {(echo)} {(bcpc-vm) (${ Id.VSub_Name suffix) (.) (${ Id.VSub_Name domainname)}) ] ) ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:domainname) op: assign_op.Equal rhs: {(bcpc.example.com)} spids: [900] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:chef_server_host) op: assign_op.Equal rhs: {(bcpc-bootstrap)} spids: [903] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:keyfile) op: assign_op.Equal rhs: {(word_part.TildeSub token:(Token id:Id.Lit_TildeLike val:'~' span_id:907)) (/.ssh/id_rsa.bcpc) } spids: [906] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:hosts_entries) op: assign_op.Equal rhs: {(DQ ('10.0.100.3 ') (${ Id.VSub_Name chef_server_host) ('\n'))} spids: [910] ) ] ) (C {(Id.KW_Set set)} {(-e)}) (C {(configure_proxy)}) (C {(setup_headnodes)}) (C {(echo)} {(DQ ('Waiting to bootstrap workers'))}) (C {(Id.KW_Set set)} {(-x)}) (command.ForEach iter_name: ip iter_words: [ (word.BracedTree parts: [(10.0.100.) (word_part.BracedRange kind:Id.Range_Int start:12 end:13 step:1)] ) ] do_arg_iter: F body: (command.DoGroup children: [ (command.Sentence child: (C {(eval)} {(DQ ('bootstrap_worker ')) (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:960) command_list: (command.CommandList children: [(C {(ip_to_name)} {(${ Id.VSub_Name ip)})] ) ) (DQ (' ') (${ Id.VSub_Name ip) (' &')) } ) terminator: (Token id:Id.Op_Semi val:';' span_id:975) ) ] ) ) (C {(wait)}) ] )