(List (If (DBracket {B1 UNARY_STRING_z {[DQ [VarSub 1]]}}) (List (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "Usage "][VarSub 0][LIT_CHARS " 'environment' [role|IP] [verbose]"]]}) (Com {[LIT_CHARS exit]}) ) ) (If (DBracket {B1 UNARY_STRING_z {[ComSub (Com {[LIT_CHARS which]} {[LIT_CHARS fping]})]}}) (List (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "This tool uses fping. You should be able to install fping with "][ComSub (Com {[LIT_CHARS sudo]} {[LIT_CHARS apt-get]} {[LIT_CHARS install]} {[LIT_CHARS fping]})]]}) (Com {[LIT_CHARS exit]}) ) ) (= scope= flags=0 words=[] bindings=[('SOCKETDIR', {[VarSub HOME] [LIT_CHARS /.ssh/sockets]})]) (If (DBracket {B! {B1 UNARY_FILE_d {[VarSub SOCKETDIR]}}}) (List (Com {[LIT_CHARS mkdir]} {[VarSub SOCKETDIR]}) (Com {[LIT_CHARS chmod]} {[LIT_CHARS a] [LIT_OTHER "+"] [LIT_CHARS rwx]} {[VarSub SOCKETDIR]}) ) (ElseTrue) (Com {[LIT_CHARS ls]} {[VarSub SOCKETDIR]}) ) (= scope= flags=0 words=[] bindings=[('SSH_COMMAND_OPTS', {[DQ [LIT_CHARS "-o ControlMaster=auto -o ControlPath="][VarSub SOCKETDIR][LIT_CHARS "/%r@%h-%p -o ControlPersist=600"]]})]) (= scope= flags=0 words=[] bindings=[('SSH_COMMON', {[DQ [LIT_CHARS "-q -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -o VerifyHostKeyDNS=no"]]})]) (Com {[LIT_CHARS echo]} {[DQ [VarSub 0][LIT_CHARS " : Checking which hosts are online..."]]}) (= scope= flags=0 words=[] bindings=[('UPHOSTS', {[ComSub (Com {[LIT_CHARS ./cluster-whatsup-silent.sh]} {[VarSub 2]})]})]) (= scope= flags=0 words=[] bindings=[('ENVIRONMENT', {[DQ [VarSub 1]]})]) (= scope= flags=0 words=[] bindings=[('HOSTWANTED', {[DQ [VarSub 2]]})]) (= scope= flags=0 words=[] bindings=[('VERBOSE', {[DQ [VarSub 3]]})]) (FunctionDef vtrace [] (If (DBracket {B1 UNARY_STRING_n {[DQ [VarSub VERBOSE]]}}) (For STR [{[DQ [VarSub @]]}]) (Com {[LIT_CHARS echo]} {[LIT_CHARS -e]} {[VarSub STR]}) ) ) ) (FunctionDef vftrace [] (If (DBracket {B! {B1 UNARY_STRING_z {[DQ [VarSub VERBOSE]]}}}) (Com {[LIT_CHARS printf]} {[DQ [VarSub @]]}) ) ) (= scope= flags=0 words=[] bindings=[('KNIFESTAT', {[ComSub (Pipeline (Com redirects=[(DescriptorRedirectNode target={[LIT_CHARS 1]} &"> 2)]{[LIT_CHARS knife]} {[LIT_CHARS data]} {[LIT_CHARS bag]} {[LIT_CHARS show]} {[LIT_CHARS configs]} {[VarSub ENVIRONMENT]}) (Com {[LIT_CHARS grep]} {[LIT_CHARS ERROR]}) )]})]) (If (DBracket {B! {B1 UNARY_STRING_z {[DQ [VarSub KNIFESTAT]]}}}) (List (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "knife error "][VarSub KNIFESTAT][LIT_CHARS " when showing the config"]]}) (Com {[LIT_CHARS exit]}) ) ) (= scope= flags=0 words=[] bindings=[('PASSWD', {[ComSub (Pipeline (Com {[LIT_CHARS knife]} {[LIT_CHARS data]} {[LIT_CHARS bag]} {[LIT_CHARS show]} {[LIT_CHARS configs]} {[VarSub ENVIRONMENT]}) (Com {[LIT_CHARS grep]} {[DQ [LIT_CHARS "cobbler-root-password:"]]}) (Com {[LIT_CHARS awk]} {[SQ ]}) )]})]) (If (DBracket {B1 UNARY_STRING_z {[DQ [VarSub PASSWD]]}}) (List (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "Failed to retrieve 'cobbler-root-password'"]]}) (Com {[LIT_CHARS exit]}) ) ) (= scope= flags=0 words=[{[LIT_CHARS -A]}, {[LIT_CHARS HOSTNAMES]}] bindings=[]) (If (DBracket {B1 UNARY_FILE_f {[LIT_CHARS cluster.txt]}}) (List (While (Com {[LIT_CHARS read]} {[LIT_CHARS HOSTNAME]} {[LIT_CHARS MACADDR]} {[LIT_CHARS IPADDR]} {[LIT_CHARS ILOIPADDR]} {[LIT_CHARS DOMAIN]} {[LIT_CHARS ROLE]}) (List (If (DBracket {B2 BINARY_STRING_EQUAL {[VarSub HOSTNAME]} {[DQ [LIT_CHARS end]]}}) (Com {[LIT_CHARS continue]}) ) (If (DBracket {B2 BINARY_STRING_EQUAL {[DQ [VarSub ROLE]]} {[DQ [LIT_CHARS bootstrap]]}}) (Com {[LIT_CHARS continue]}) ) (= scope= flags=0 words=[] bindings=[('THISUP', {[DQ [LIT_CHARS false]]})]) (For UPHOST [{[VarSub UPHOSTS]}]) (If (DBracket {B2 BINARY_STRING_EQUAL {[DQ [VarSub IPADDR]]} {[DQ [VarSub UPHOST]]}}) (List (= scope= flags=0 words=[] bindings=[('THISUP', {[DQ [LIT_CHARS true]]})]) (= scope= flags=0 words=[] bindings=[('UP', {[ArithSub {A2 AS_OP_PLUS {A Atom NODE_ARITH_WORD {[VarSub UP]}} {A Atom NODE_ARITH_WORD {[AS_NUM_LITERAL 1]}}}]})]) ) ) ) (If (DBracket {B? LOGICAL_BINARY_OR {B1 UNARY_STRING_z {[DQ [VarSub HOSTWANTED]]}} {B? LOGICAL_BINARY_OR {B2 BINARY_STRING_EQUAL {[DQ [VarSub HOSTWANTED]]} {[LIT_CHARS all]}} {B? LOGICAL_BINARY_OR {B2 BINARY_STRING_EQUAL {[DQ [VarSub HOSTWANTED]]} {[DQ [VarSub ROLE]]}} {B? LOGICAL_BINARY_OR {B2 BINARY_STRING_EQUAL {[DQ [VarSub HOSTWANTED]]} {[DQ [VarSub IPADDR]]}} {B2 BINARY_STRING_EQUAL {[DQ [VarSub HOSTWANTED]]} {[DQ [VarSub HOSTNAME]]}}}}}}) (List (If (DBracket {B2 BINARY_STRING_EQUAL {[DQ [VarSub THISUP]]} {[DQ [LIT_CHARS false]]}}) (List (Com {[LIT_CHARS echo]} {[DQ [VarSub HOSTNAME][LIT_CHARS " is down"]]}) (Com {[LIT_CHARS continue]}) ) (ElseTrue) (Com {[LIT_CHARS vtrace]} {[DQ [VarSub HOSTNAME][LIT_CHARS " is up"]]}) ) (If (DBracket {B? LOGICAL_BINARY_AND {B! {B2 BINARY_STRING_EQUAL {[DQ [VarSub ROLE]]} {[DQ [LIT_CHARS head]]}}} {B? LOGICAL_BINARY_AND {B! {B2 BINARY_STRING_EQUAL {[DQ [VarSub ROLE]]} {[DQ [LIT_CHARS work]]}}} {B! {B2 BINARY_STRING_EQUAL {[DQ [VarSub ROLE]]} {[DQ [LIT_CHARS storage-work]]}}}}}) (List (Com {[LIT_CHARS vtrace]} {[DQ [VarSub HOSTNAME][LIT_CHARS " : unrecognized "][VarSub ROLE][LIT_CHARS " - skipping "]]}) (= scope= flags=0 words=[] bindings=[('UP', {[ArithSub {A2 AS_OP_MINUS {A Atom NODE_ARITH_WORD {[VarSub UP]}} {A Atom NODE_ARITH_WORD {[AS_NUM_LITERAL 1]}}}]})]) (Com {[LIT_CHARS continue]}) ) ) (= scope= flags=0 words=[] bindings=[('HOSTS', {[DQ [VarSub HOSTS][LIT_CHARS " "][VarSub IPADDR]]})]) (= scope= flags=0 words=[] bindings=[('IDX', {[ComSub (Pipeline (Com {[LIT_CHARS echo]} {[VarSub IPADDR]}) (Com {[LIT_CHARS tr]} {[SQ ]} {[SQ ]}) )]})]) (Com {[LIT_CHARS HOSTNAMES] [LIT_OTHER "["] [DQ [VarSub IDX]] [LIT_OTHER "]"] [LIT_OTHER "="] [DQ [VarSub HOSTNAME]]}) ) ) ) ) (Com {[LIT_CHARS vtrace]} {[DQ [LIT_CHARS "HOSTS = "][VarSub HOSTS]]}) (Com {[LIT_CHARS echo]}) (For HOST [{[VarSub HOSTS]}]) (List (Com {[LIT_CHARS sshpass]} {[LIT_CHARS -p]} {[DQ [VarSub PASSWD]]} {[LIT_CHARS ssh]} {[VarSub SSH_COMMAND_OPTS]} {[VarSub SSH_COMMON]} {[LIT_CHARS -Mn]} {[LIT_CHARS ubuntu] [LIT_OTHER "@"] [VarSub HOST]} < (FilenameRedirectNode filename={[LIT_CHARS /dev/null]} "> 1), (DescriptorRedirectNode target={[LIT_CHARS 1]} &"> 2), > ) (= scope= flags=0 words=[] bindings=[('SSH', {[DQ [LIT_CHARS "ssh "][VarSub SSH_COMMAND_OPTS][LIT_CHARS " "][VarSub SSH_COMMON][LIT_CHARS " ubuntu@"][VarSub HOST]]})]) (= scope= flags=0 words=[] bindings=[('IDX', {[ComSub (Pipeline (Com {[LIT_CHARS echo]} {[VarSub HOST]}) (Com {[LIT_CHARS tr]} {[SQ ]} {[SQ ]}) )]})]) (= scope= flags=0 words=[] bindings=[('NAME', {[VarSub HOSTNAMES bracket_op=(Index {A Atom NODE_ARITH_WORD {[DQ [VarSub IDX]]}})]})]) (Com {[LIT_CHARS vtrace]} {[DQ [LIT_CHARS "Checking "][VarSub NAME][LIT_CHARS " ("][VarSub HOST][LIT_CHARS ")..."]]}) (= scope= flags=0 words=[] bindings=[('ROOTSIZE', {[ComSub (Com {[VarSub SSH]} {[DQ [LIT_CHARS "df -k / | grep -v Filesystem"]]})]})]) (= scope= flags=0 words=[] bindings=[('ROOTSIZE', {[ComSub (Pipeline (Com {[LIT_CHARS echo]} {[VarSub ROOTSIZE]}) (Com {[LIT_CHARS awk]} {[SQ ]}) )]})]) (= scope= flags=0 words=[] bindings=[('ROOTGIGS', {[ArithSub {A2 AS_OP_SLASH {A Atom NODE_ARITH_WORD {[VarSub ROOTSIZE]}} {A2 AS_OP_STAR {A Atom NODE_ARITH_WORD {[AS_NUM_LITERAL 1024]}} {A Atom NODE_ARITH_WORD {[AS_NUM_LITERAL 1024]}}}}]})]) (If (DBracket {B2 BINARY_INT_EQ {[VarSub ROOTSIZE]} {[LIT_CHARS 0]}}) (List (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "Root fileystem size = "][VarSub ROOTSIZE][LIT_CHARS " ("][VarSub ROOTGIGS][LIT_CHARS " GB) !!WARNING!!"]]}) (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "Machine may still be installing the operating system ... skipping"]]}) (Com {[LIT_CHARS continue]}) ) (DBracket {B2 BINARY_INT_LT {[VarSub ROOTSIZE]} {[LIT_CHARS 100] [LIT_OTHER "*"] [LIT_CHARS 1024] [LIT_OTHER "*"] [LIT_CHARS 1024]}}) (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "Root fileystem size = "][VarSub ROOTSIZE][LIT_CHARS " ("][VarSub ROOTGIGS][LIT_CHARS " GB) !!WARNING!!"]]}) (ElseTrue) (Com {[LIT_CHARS vtrace]} {[DQ [LIT_CHARS "Root fileystem size = "][VarSub ROOTSIZE][LIT_CHARS " ("][VarSub ROOTGIGS][LIT_CHARS " GB) "]]}) ) (If (DBracket {B1 UNARY_STRING_z {[ComSub (Com {[VarSub SSH]} {[DQ [LIT_CHARS "ip route show table main | grep default"]]})]}}) (List (Com {[LIT_CHARS echo]} {[DQ [VarSub HOST][LIT_CHARS " no default route in table main !!WARNING!!"]]}) (= scope= flags=0 words=[] bindings=[('BADHOSTS', {[DQ [VarSub BADHOSTS][LIT_CHARS " "][VarSub HOST]]})]) ) (ElseTrue) (List (Com {[LIT_CHARS vtrace]} {[DQ [VarSub HOST][LIT_CHARS " has a default (main) route"]]}) (= scope= flags=0 words=[] bindings=[('MA', {[ArithSub {A2 AS_OP_PLUS {A Atom NODE_ARITH_WORD {[VarSub MA]}} {A Atom NODE_ARITH_WORD {[AS_NUM_LITERAL 1]}}}]})]) ) ) (If (DBracket {B1 UNARY_STRING_z {[ComSub (Com {[VarSub SSH]} {[DQ [LIT_CHARS "ip route show table mgmt | grep default"]]})]}}) (List (Com {[LIT_CHARS echo]} {[DQ [VarSub HOST][LIT_CHARS " no mgmt default route !!WARNING!!"]]}) (= scope= flags=0 words=[] bindings=[('BADHOSTS', {[DQ [VarSub BADHOSTS][LIT_CHARS " "][VarSub HOST]]})]) ) (ElseTrue) (List (Com {[LIT_CHARS vtrace]} {[DQ [VarSub HOST][LIT_CHARS " has a default mgmt route"]]}) (= scope= flags=0 words=[] bindings=[('MG', {[ArithSub {A2 AS_OP_PLUS {A Atom NODE_ARITH_WORD {[VarSub MG]}} {A Atom NODE_ARITH_WORD {[AS_NUM_LITERAL 1]}}}]})]) ) ) (If (DBracket {B1 UNARY_STRING_z {[ComSub (Com {[VarSub SSH]} {[DQ [LIT_CHARS "ip route show table storage | grep default"]]})]}}) (List (Com {[LIT_CHARS echo]} {[DQ [VarSub HOST][LIT_CHARS " has no storage default route !!WARNING!!"]]}) (= scope= flags=0 words=[] bindings=[('BADHOSTS', {[DQ [VarSub BADHOSTS][LIT_CHARS " "][VarSub HOST]]})]) ) (ElseTrue) (List (Com {[LIT_CHARS vtrace]} {[DQ [VarSub HOST][LIT_CHARS " has a default storage route"]]}) (= scope= flags=0 words=[] bindings=[('SG', {[ArithSub {A2 AS_OP_PLUS {A Atom NODE_ARITH_WORD {[VarSub SG]}} {A Atom NODE_ARITH_WORD {[AS_NUM_LITERAL 1]}}}]})]) ) ) (= scope= flags=0 words=[] bindings=[('CHEF', {[ComSub (Com {[VarSub SSH]} {[DQ [LIT_CHARS "which chef-client"]]})]})]) (If (DBracket {B1 UNARY_STRING_z {[DQ [VarSub CHEF]]}}) (List (Com {[LIT_CHARS echo]} {[DQ [VarSub HOST][LIT_CHARS " doesn't seem to have chef installed so probably hasn't been assigned a role"]]}) (Com {[LIT_CHARS echo]}) (Com {[LIT_CHARS continue]}) ) ) (Com {[VarSub SSH]} {[DQ [LIT_CHARS "grep -m1 server /etc/ntp.conf | cut -f2 -d' ' > /tmp/clusterjunk.txt "]]}) (= scope= flags=0 words=[] bindings=[('DNS', {[ComSub (Com {[VarSub SSH]} {[DQ [LIT_CHARS "cat /tmp/clusterjunk.txt | xargs -n1 host"]]})]})]) (If (DBracket {B2 BINARY_STRING_TILDE_EQUAL {[DQ [VarSub DNS]]} {[DQ [LIT_CHARS "not found"]]}}) (Com {[LIT_CHARS echo]} {[DQ [VarSub DNS][LIT_CHARS " !!WARNING!!"]]}) (ElseTrue) (List (Com {[LIT_CHARS vtrace]} {[DQ [VarSub DNS]]}) (= scope= flags=0 words=[] bindings=[('NTP', {[ComSub (Com {[VarSub SSH]} {[DQ [LIT_CHARS "cat /tmp/clusterjunk.txt | xargs -n1 ping -c 1 | grep ttl | cut -f4 -d' ' | cut -f1 -d:"]]})]})]) (If (DBracket {B1 UNARY_STRING_z {[DQ [VarSub NTP]]}}) (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "timeserver couldn't be pinged !!WARNING!!"]]}) (ElseTrue) (List (Com {[LIT_CHARS vtrace]} {[DQ [LIT_CHARS "timeserver pinged ok : "][VarSub NTP]]}) (= scope= flags=0 words=[] bindings=[('TIME', {[ComSub (Com {[LIT_CHARS ./nodessh.sh]} {[VarSub ENVIRONMENT]} {[VarSub HOST]} {[DQ [LIT_CHARS "cat /tmp/clusterjunk.txt | xargs -n1 ntpdate -q -p1"]]})]})]) (If (DBracket {B! {B2 BINARY_STRING_TILDE_EQUAL {[DQ [VarSub TIME]]} {[DQ [LIT_CHARS "time server"]]}}}) (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "timeserver couldn't be used !!WARNING!!"]]}) (ElseTrue) (Com {[LIT_CHARS vtrace]} {[DQ [LIT_CHARS "timeserver queried ok : "][VarSub TIME]]}) ) ) ) ) ) (= scope= flags=0 words=[] bindings=[('STAT', {[ComSub (Com {[VarSub SSH]} {[DQ [LIT_CHARS "ceph -s | grep HEALTH"]]})]})]) (= scope= flags=0 words=[] bindings=[('STAT', {[ComSub (Pipeline (Com {[LIT_CHARS echo]} {[VarSub STAT]}) (Com {[LIT_CHARS cut]} {[LIT_CHARS -f2]} {[LIT_CHARS -d] [LIT_OTHER ":"]}) )]})]) (If (DBracket {B2 BINARY_STRING_TILDE_EQUAL {[DQ [VarSub STAT]]} {[DQ [LIT_CHARS HEALTH_OK]]}}) (= scope= flags=0 words=[] bindings=[('STAT', {[DQ [LIT_CHARS healthy]]})]) ) (Com {[LIT_CHARS vftrace]} {[DQ [VarSub HOST][LIT_CHARS " %20s %s"][\ LIT_ESCAPED_CHAR "\\n"]]} {[LIT_CHARS ceph]} {[DQ [VarSub STAT]]}) (= scope= flags=0 words=[] bindings=[('SERVICE', {[DQ [LIT_CHARS fluentd]]})]) (= scope= flags=0 words=[] bindings=[('FLUENTD', {[ComSub (Com {[VarSub SSH]} {[DQ [LIT_CHARS "ps w -C ruby -C td-agent --no-heading | grep -v chef-client"]]})]})]) (= scope= flags=0 words=[] bindings=[('STAT', {[ComSub (Com {[VarSub SSH]} {[DQ [LIT_CHARS "ps w -C ruby -C td-agent --no-heading | grep -v chef-client | wc -l"]]})]})]) (= scope= flags=0 words=[] bindings=[('STAT', {[ComSub (Pipeline (Com {[LIT_CHARS echo]} {[VarSub STAT]}) (Com {[LIT_CHARS cut]} {[LIT_CHARS -f2]} {[LIT_CHARS -d] [LIT_OTHER ":"]}) )]})]) (If (DBracket {B2 BINARY_STRING_TILDE_EQUAL {[DQ [VarSub STAT]]} {[LIT_CHARS 2]}}) (= scope= flags=0 words=[] bindings=[('STAT', {[DQ [LIT_CHARS " normal"]]})]) (ElseTrue) (= scope= flags=0 words=[] bindings=[('STAT', {[DQ [VarSub FLUENTD]]})]) ) (Com {[LIT_CHARS vftrace]} {[DQ [VarSub HOST][LIT_CHARS " %20s %s"][\ LIT_ESCAPED_CHAR "\\n"]]} {[DQ [VarSub SERVICE]]} {[DQ [VarSub STAT]]}) (For SERVICE [{[LIT_CHARS glance-api]}, {[LIT_CHARS glance-registry]}, {[LIT_CHARS cinder-scheduler]}, {[LIT_CHARS cinder-volume]}, {[LIT_CHARS cinder-api]}, {[LIT_CHARS nova-api]}, {[LIT_CHARS nova-novncproxy]}, {[LIT_CHARS nova-scheduler]}, {[LIT_CHARS nova-consoleauth]}, {[LIT_CHARS nova-cert]}, {[LIT_CHARS nova-conductor]}, {[LIT_CHARS nova-compute]}, {[LIT_CHARS nova-network]}, {[LIT_CHARS haproxy]}, {[LIT_CHARS apache2]}, {[LIT_CHARS tpm]}]) (List (= scope= flags=0 words=[] bindings=[('STAT', {[ComSub (Com {[VarSub SSH]} {[DQ [LIT_CHARS "service "][VarSub SERVICE][LIT_CHARS " status 2>&1"]]})]})]) (If (DBracket {B! {B2 BINARY_STRING_TILDE_EQUAL {[DQ [VarSub STAT]]} {[DQ [LIT_CHARS unrecognized]]}}}) (List (If (DBracket {B2 BINARY_STRING_EQUAL {[DQ [VarSub SERVICE]]} {[DQ [LIT_CHARS apache2]]}}) (List (Com {[LIT_CHARS wget]} {[LIT_CHARS http] [LIT_OTHER ":"] [LIT_CHARS //] [VarSub HOST]} {[LIT_CHARS -O-]} {[LIT_CHARS -t1]} {[LIT_CHARS -T1]} < (FilenameRedirectNode filename={[LIT_CHARS /dev/null]} "> 1), (DescriptorRedirectNode target={[LIT_CHARS 1]} &"> 2), > ) (If (DBracket {B2 BINARY_STRING_NOT_EQUAL {[DQ [VarSub ?]]} {[LIT_CHARS 0]}}) (= scope= flags=0 words=[] bindings=[('STAT', {[DQ [LIT_CHARS " !! not responding !!"]]})]) (ElseTrue) (= scope= flags=0 words=[] bindings=[('STAT', {[DQ [LIT_CHARS " responding"]]})]) ) ) (ElseTrue) (= scope= flags=0 words=[] bindings=[('STAT', {[ComSub (Pipeline (Com {[LIT_CHARS echo]} {[VarSub STAT]}) (Com {[LIT_CHARS cut]} {[LIT_CHARS -f2]} {[LIT_CHARS -d] [DQ [LIT_CHARS ":"]]}) )]})]) ) (If (DBracket {B? LOGICAL_BINARY_AND {B! {B2 BINARY_STRING_TILDE_EQUAL {[DQ [VarSub STAT]]} {[DQ [LIT_CHARS start/running]]}}} {B? LOGICAL_BINARY_AND {B! {B2 BINARY_STRING_TILDE_EQUAL {[DQ [VarSub STAT]]} {[DQ [LIT_CHARS "haproxy is running"]]}}} {B! {B2 BINARY_STRING_TILDE_EQUAL {[DQ [VarSub STAT]]} {[DQ [LIT_CHARS responding]]}}}}}) (List (Com {[LIT_CHARS printf]} {[DQ [VarSub HOST][LIT_CHARS " %20s %s"][\ LIT_ESCAPED_CHAR "\\n"]]} {[DQ [VarSub SERVICE]]} {[DQ [VarSub STAT]]}) (= scope= flags=0 words=[] bindings=[('BADHOSTS', {[DQ [VarSub BADHOSTS][LIT_CHARS " "][VarSub HOST]]})]) ) (ElseTrue) (Com {[LIT_CHARS vftrace]} {[DQ [VarSub HOST][LIT_CHARS " %20s %s"][\ LIT_ESCAPED_CHAR "\\n"]]} {[DQ [VarSub SERVICE]]} {[DQ [VarSub STAT]]}) ) ) (DBracket {B2 BINARY_STRING_EQUAL {[DQ [VarSub SERVICE]]} {[DQ [LIT_CHARS tpm]]}}) (List (= scope= flags=0 words=[] bindings=[('STAT', {[ComSub (Com {[VarSub SSH]} {[DQ [LIT_CHARS "cat /proc/sys/kernel/random/entropy_avail"]]})]})]) (If (DParen {A2 AS_OP_LESS {A Atom NODE_ARITH_WORD {[VarSub STAT]}} {A Atom NODE_ARITH_WORD {[AS_NUM_LITERAL 1000]}}}) (List (Com {[LIT_CHARS printf]} {[DQ [VarSub HOST][LIT_CHARS " %20s %s"][\ LIT_ESCAPED_CHAR "\\n"]]} {[DQ [VarSub SERVICE]]} {[DQ [LIT_CHARS "Entropy low ("][VarSub STAT][LIT_CHARS ")"]]}) (= scope= flags=0 words=[] bindings=[('BADHOSTS', {[DQ [VarSub BADHOSTS][LIT_CHARS " "][VarSub HOST]]})]) ) (ElseTrue) (Com {[LIT_CHARS vftrace]} {[DQ [VarSub HOST][LIT_CHARS "%20s %s"][\ LIT_ESCAPED_CHAR "\\n"]]} {[DQ [VarSub SERVICE]]} {[DQ [LIT_CHARS "Entropy ok ("][VarSub STAT][LIT_CHARS ")"]]}) ) ) ) ) ) (Com {[LIT_CHARS echo]}) (Com {[LIT_CHARS ssh]} {[VarSub SSH_COMMAND_OPTS]} {[LIT_CHARS -O]} {[LIT_CHARS exit]} {[LIT_CHARS ubuntu] [LIT_OTHER "@"] [VarSub HOST]} < (FilenameRedirectNode filename={[LIT_CHARS /dev/null]} "> 1), (DescriptorRedirectNode target={[LIT_CHARS 1]} &"> 2), > ) ) ) ) (ElseTrue) (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "Warning 'cluster.txt' not found"]]}) ) (Com {[LIT_CHARS echo]} {[DQ [VarSub ENVIRONMENT][LIT_CHARS " cluster summary: "][VarSub UP][LIT_CHARS " hosts up. "][VarSub MA][LIT_CHARS " hosts with default main route. "][VarSub MG][LIT_CHARS " hosts with default mgmt route. "][VarSub SG][LIT_CHARS " hosts with default storage route"]]}) (= scope= flags=0 words=[] bindings=[('BADHOSTS', {[ComSub (Pipeline (Com {[LIT_CHARS echo]} {[VarSub BADHOSTS]}) (Com {[LIT_CHARS uniq]}) (Com {[LIT_CHARS sort]}) )]})]) (If (DBracket {B! {B1 UNARY_STRING_z {[DQ [VarSub BADHOSTS]]}}}) (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "Bad hosts "][VarSub BADHOSTS][LIT_CHARS " - definite issues on these"]]}) ) )