(List (Com {[LIT_CHARS hash]} {[LIT_CHARS -r]}) (FunctionDef wait_for_ssh [] (List (= scope= flags=0 words=[] bindings=[('hostname', {[DQ [VarSub 1]]})]) (= scope= flags=0 words=[] bindings=[('min', {[VarSub 2 test_op=VS_TEST_COLON_HYPHEN {[LIT_CHARS 1]}]}), ('max', {[VarSub 3 test_op=VS_TEST_COLON_HYPHEN {[LIT_CHARS 10]}]})]) (If (Com {[LIT_OTHER "["]} {[LIT_CHARS -z]} {[DQ [VarSub hostname]]} {[LIT_OTHER "]"]}) (Com {[LIT_CHARS return]} {[LIT_CHARS 1]}) ) (Com {[LIT_CHARS exec]} < (DescriptorRedirectNode target={[LIT_CHARS 2]} &"> 3), > ) (Com {[LIT_CHARS exec]} < (FilenameRedirectNode filename={[LIT_CHARS /dev/null]} "> 2), > ) (While (Com {[LIT_CHARS true]}) (List (If (Com {[LIT_CHARS echo]} < (FilenameRedirectNode filename={[LIT_CHARS /dev/tcp/] [VarSub hostname] [LIT_CHARS /22]} "> 1), > ) (Com {[LIT_CHARS return]} {[LIT_CHARS 0]}) ) (Com {[LIT_CHARS sleep]} {[ArithSub {A2 AS_OP_PLUS {A2 AS_OP_PERCENT {A Atom NODE_ARITH_WORD {[VarSub RANDOM]}} {A Atom NODE_ARITH_WORD {[VarSub max]}}} {A Atom NODE_ARITH_WORD {[VarSub min]}}}]}) ) ) (Com {[LIT_CHARS exec]} < (DescriptorRedirectNode target={[LIT_CHARS 3]} &"> 2), > ) (Com {[LIT_CHARS exec]} < (DescriptorRedirectNode target={[LIT_CHARS -]} &"> 3), > ) ) ) (FunctionDef setup_headnodes [] (List (AndOr OP_OR_IF (Com {[LIT_CHARS bootstrap_head]} {[LIT_CHARS bcpc-vm1.bcpc.example.com]} {[LIT_CHARS 10.0.100.11]}) (Com {[LIT_CHARS true]}) ) (= scope= flags=0 words=[] bindings=[('keyfile', {[TildeSub ''] [LIT_CHARS /.ssh/id_rsa.root]})]) (If (Com {[LIT_OTHER "["]} {[LIT_OTHER "!"]} {[LIT_CHARS -r]} {[DQ [VarSub keyfile]]} {[LIT_OTHER "]"]}) (AndOr OP_OR_IF (Com {[LIT_CHARS ./install_root_key]}) (= scope= flags=0 words=[] bindings=[('keyfile', {[TildeSub ''] [LIT_CHARS /.ssh/id_rsa.bcpc]})]) ) ) (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "Proceeding with second chef-client run"]]}) (Com {[LIT_CHARS ssh]} {[LIT_CHARS -i]} {[DQ [VarSub keyfile]]} {[LIT_CHARS -lroot]} {[LIT_CHARS 10.0.100.11]} {[LIT_CHARS chef-client]}) ) ) (FunctionDef bootstrap_head [] (List (= scope= flags=0 words=[] bindings=[('nodename', {[DQ [VarSub 1]]})]) (= scope= flags=0 words=[] bindings=[('ip', {[DQ [VarSub 2]]})]) (If (Com {[LIT_OTHER "["]} {[LIT_CHARS -z]} {[DQ [VarSub ip]]} {[LIT_CHARS -o]} {[LIT_CHARS -z]} {[DQ [VarSub nodename]]} {[LIT_OTHER "]"]}) (Com {[LIT_CHARS return]} {[LIT_CHARS 1]}) ) (Com {[LIT_CHARS time]} {[LIT_CHARS -p]} {[LIT_CHARS wait_for_ssh]} {[DQ [VarSub ip]]}) (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "Configuring temporary hosts entry for chef server on "][VarSub ip]]}) (Com {[LIT_CHARS add_hosts_entries]} {[DQ [VarSub ip]]} {[DQ [VarSub hosts_entries]]}) (Com {[LIT_CHARS knife]} {[LIT_CHARS bootstrap]} {[LIT_CHARS --bootstrap-no-proxy]} {[DQ [VarSub chef_server_host]]} {[VarSub bootstrap_proxy_args]} {[LIT_CHARS -i]} {[DQ [VarSub keyfile]]} {[LIT_CHARS -x]} {[LIT_CHARS root]} {[LIT_CHARS --node-ssl-verify-mode] [LIT_OTHER "="] [LIT_CHARS none]} {[LIT_CHARS --bootstrap-wget-options]} {[DQ [LIT_CHARS --no-check-certificate]]} {[LIT_CHARS -r]} {[SQ ]} {[LIT_CHARS -E]} {[LIT_CHARS Test-Laptop]} {[DQ [VarSub ip]]} {[LIT_CHARS -N]} {[DQ [VarSub nodename]]}) (Com {[LIT_CHARS knife]} {[LIT_CHARS actor]} {[LIT_CHARS map]} < (DescriptorRedirectNode target={[LIT_CHARS 2]} &"> 1), > ) (Com {[LIT_CHARS knife]} {[LIT_CHARS group]} {[LIT_CHARS add]} {[LIT_CHARS actor]} {[LIT_CHARS admins]} {[DQ [VarSub nodename]]} < (DescriptorRedirectNode target={[LIT_CHARS 2]} &"> 1), > ) ) ) (FunctionDef bootstrap_worker [] (List (= scope= flags=0 words=[] bindings=[('nodename', {[DQ [VarSub 1]]})]) (= scope= flags=0 words=[] bindings=[('ip', {[DQ [VarSub 2]]})]) (If (Com {[LIT_OTHER "["]} {[LIT_CHARS -z]} {[DQ [VarSub ip]]} {[LIT_CHARS -o]} {[LIT_CHARS -z]} {[DQ [VarSub nodename]]} {[LIT_OTHER "]"]}) (Com {[LIT_CHARS return]} {[LIT_CHARS 1]}) ) (Com {[LIT_CHARS time]} {[LIT_CHARS -p]} {[LIT_CHARS wait_for_ssh]} {[DQ [VarSub ip]]}) (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "Configuring temporary hosts entry for chef server on "][VarSub ip]]}) (Com {[LIT_CHARS add_hosts_entries]} {[DQ [VarSub ip]]} {[DQ [VarSub hosts_entries]]}) (Com {[LIT_CHARS knife]} {[LIT_CHARS bootstrap]} {[LIT_CHARS --bootstrap-no-proxy]} {[DQ [VarSub chef_server_host]]} {[VarSub bootstrap_proxy_args]} {[LIT_CHARS -i]} {[DQ [VarSub keyfile]]} {[LIT_CHARS -x]} {[LIT_CHARS root]} {[LIT_CHARS --bootstrap-wget-options]} {[DQ [LIT_CHARS --no-check-certificate]]} {[LIT_CHARS -r]} {[SQ ]} {[LIT_CHARS -E]} {[LIT_CHARS Test-Laptop]} {[DQ [VarSub ip]]} {[LIT_CHARS -N]} {[DQ [VarSub nodename]]}) ) ) (FunctionDef add_hosts_entries [] (List (= scope= flags=0 words=[] bindings=[('ip', {[DQ [VarSub 1]]}), ('entries', {[DQ [VarSub 2]]})]) (If (Com {[LIT_OTHER "["]} {[LIT_CHARS -z]} {[DQ [VarSub ip]]} {[LIT_CHARS -o]} {[LIT_CHARS -z]} {[DQ [VarSub entries]]} {[LIT_OTHER "]"]}) (Com {[LIT_CHARS return]} {[LIT_CHARS 1]}) ) (Com {[LIT_CHARS echo]} {[VarSub entries]}) (Com {[LIT_CHARS ssh]} {[LIT_CHARS -ostricthostkeychecking] [LIT_OTHER "="] [LIT_CHARS no]} {[LIT_CHARS -i]} {[DQ [VarSub keyfile]]} {[LIT_CHARS -lroot]} {[DQ [VarSub ip]]} < (HereDocRedirectNode here_end='EoF' do_expansion=True body_word={[DQ [LIT_CHARS " if ! getent ahosts bcpc-bootstrap &> /dev/null ; then\n"][LIT_CHARS " cat <> /etc/hosts\n"][LIT_CHARS "# Added by "][VarSub 0 transform_ops=[VS_UNARY_DPOUND {[LIT_CHARS "*"] [LIT_SLASH /]}]][LIT_CHARS "\n"][VarSub entries][LIT_CHARS "\n"][LIT_CHARS "EoS\n"][LIT_CHARS " fi\n"][LIT_CHARS " getent hosts bcpc-bootstrap\n"]]} 0), > ) ) ) (FunctionDef configure_proxy [] (List (If (DBracket {B1 UNARY_FILE_f {[LIT_CHARS ./proxy_setup.sh]}}) (List (Com {[LIT_CHARS .]} {[LIT_CHARS ./proxy_setup.sh]}) (= scope= flags=1 words=[{[LIT_CHARS -n]}, {[LIT_CHARS http] [LIT_LBRACE "{"] [LIT_COMMA ","] [LIT_CHARS s] [LIT_RBRACE "}"] [LIT_CHARS _proxy]}] bindings=[]) ) ) (If (DBracket {B1 UNARY_STRING_n {[DQ [VarSub https_proxy]]}}) (= scope= flags=0 words=[] bindings=[('bootstrap_proxy_args', {[DQ [LIT_CHARS "--bootstrap-proxy "][VarSub https_proxy]]})]) (ElseTrue) (= scope= flags=0 words=[] bindings=[('bootstrap_proxy_args', {[DQ ]})]) ) ) ) (FunctionDef ip_to_name [] (List (= scope= flags=0 words=[] bindings=[('ip', {[DQ [VarSub 1]]})]) (Com {[LIT_CHARS read]} {[LIT_CHARS _]} {[LIT_CHARS _]} {[LIT_CHARS _]} {[LIT_CHARS nodenum]} < (HereDocRedirectNode here_end='EoF' do_expansion=True body_word={[DQ [VarSub ip][LIT_CHARS "\n"]]} 0), > more_env=[('IFS', {[SQ ]})] ) (If (Com {[LIT_OTHER "["]} {[LIT_CHARS -z]} {[DQ [VarSub ip]]} {[LIT_CHARS -o]} {[LIT_CHARS -z]} {[DQ [VarSub nodenum]]} {[LIT_OTHER "]"]}) (Com {[LIT_CHARS return]} {[LIT_CHARS 1]}) ) (= scope= flags=0 words=[] bindings=[('suffix', {[ArithSub {A2 AS_OP_MINUS {A Atom NODE_ARITH_WORD {[VarSub nodenum]}} {A Atom NODE_ARITH_WORD {[AS_NUM_LITERAL 10]}}}]})]) (Com {[LIT_CHARS echo]} {[LIT_CHARS bcpc-vm] [VarSub suffix] [LIT_CHARS .] [VarSub domainname]}) ) ) (= scope= flags=0 words=[] bindings=[('domainname', {[LIT_CHARS bcpc.example.com]})]) (= scope= flags=0 words=[] bindings=[('chef_server_host', {[LIT_CHARS bcpc-bootstrap]})]) (= scope= flags=0 words=[] bindings=[('keyfile', {[TildeSub ''] [LIT_CHARS /.ssh/id_rsa.bcpc]})]) (= scope= flags=0 words=[] bindings=[('hosts_entries', {[DQ [LIT_CHARS "10.0.100.3 "][VarSub chef_server_host][LIT_CHARS "\n"]]})]) (Com {[LIT_CHARS set]} {[LIT_CHARS -e]}) (Com {[LIT_CHARS configure_proxy]}) (Com {[LIT_CHARS setup_headnodes]}) (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "Waiting to bootstrap workers"]]}) (Com {[LIT_CHARS set]} {[LIT_CHARS -x]}) (For ip [{[LIT_CHARS 10.0.100.] [LIT_LBRACE "{"] [LIT_CHARS 12..13] [LIT_RBRACE "}"]}]) (Com {[LIT_CHARS eval]} {[DQ [LIT_CHARS "bootstrap_worker "]] [ComSub (Com {[LIT_CHARS ip_to_name]} {[VarSub ip]})] [DQ [LIT_CHARS " "][VarSub ip][LIT_CHARS " &"]]}) ) (Com {[LIT_CHARS wait]}) )