(command.CommandList children: [ (C {(Id.KW_Set set)} {(-o)} {(errexit)}) (C {(Id.KW_Set set)} {(-o)} {(nounset)}) (C {(Id.KW_Set set)} {(-o)} {(pipefail)}) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:VERSION_FILE) op: assign_op.Equal rhs: {(DQ (version.txt))} spids: [136] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} {(-n)} { (DQ (braced_var_sub token: (Token id:Id.VSub_Name val:VERSION_CONTENTS span_id:156) suffix_op: (suffix_op.Unary op_id:Id.VTest_ColonHyphen arg_word:(word.Empty)) ) ) } {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:162) ) ] action: [ (command.Simple words: [{(echo)} {(DQ (${ Id.VSub_Name VERSION_CONTENTS))}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:175) fd: -1 arg_word: {(DQ (${ Id.VSub_Name VERSION_FILE))} ) ] ) ] spids: [148 164] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} {(Id.KW_Bang '!')} {(-f)} {(DQ (${ Id.VSub_Name VERSION_FILE))} {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:200) ) ] action: [ (command.Simple words: [{(echo)} {(DQ (2.2.1/etcd2))}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:211) fd: -1 arg_word: {(DQ (${ Id.VSub_Name VERSION_FILE))} ) ] ) ] spids: [185 202] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:VERSION_CONTENTS) op: assign_op.Equal rhs: { (DQ (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:223) command_list: (command.CommandList children: [(C {(cat)} {(${ Id.VSub_Name VERSION_FILE)})] ) ) ) } spids: [221] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:ETCD_VERSION) op: assign_op.Equal rhs: { (DQ (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:234) command_list: (command.CommandList children: [ (command.Pipeline children: [ (C {(echo)} {($ Id.VSub_DollarName '$VERSION_CONTENTS')}) (C {(cut)} {(-d)} {(SQ (Token id:Id.Lit_Chars val:/ span_id:246))} {(-f)} {(1)} ) ] negated: F ) ] ) ) ) } spids: [232] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:ETCD_API) op: assign_op.Equal rhs: { (DQ (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:257) command_list: (command.CommandList children: [ (command.Pipeline children: [ (C {(echo)} {($ Id.VSub_DollarName '$VERSION_CONTENTS')}) (C {(cut)} {(-d)} {(SQ (Token id:Id.Lit_Chars val:/ span_id:269))} {(-f)} {(2)} ) ] negated: F ) ] ) ) ) } spids: [255] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:NAME) op: assign_op.Equal rhs: { (DQ (braced_var_sub token: (Token id:Id.VSub_Name val:NAME span_id:291) suffix_op: (suffix_op.Unary op_id: Id.VTest_ColonHyphen arg_word: {(etcd-) (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:294) command_list: (command.CommandList children:[(C {(hostname)})]) ) } ) ) ) } spids: [288] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:etcd_port) op: assign_op.Equal rhs: {(2379)} spids: [304] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:event_etcd_port) op: assign_op.Equal rhs: {(4002)} spids: [307] ) ] ) (command.ShFunction name: wait_for_etcd_up body: (command.BraceGroup children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:port) op: assign_op.Equal rhs: {($ Id.VSub_Number '$1')} spids: [321] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:health_ok) op: assign_op.Equal rhs: { (DQ ('{') (word_part.EscapedLiteral token: (Token id:Id.Lit_EscapedChar val:'\\"' span_id:340) ) (health) (word_part.EscapedLiteral token:(Token id:Id.Lit_EscapedChar val:'\\"' span_id:342)) (': ') (word_part.EscapedLiteral token: (Token id:Id.Lit_EscapedChar val:'\\"' span_id:344) ) (true) (word_part.EscapedLiteral token:(Token id:Id.Lit_EscapedChar val:'\\"' span_id:346)) ('}') ) } spids: [337] ) ] ) (command.ForEach iter_name: i iter_words: [ { (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:357) command_list: (command.CommandList children:[(C {(seq)} {(120)})]) ) } ] do_arg_iter: F body: (command.DoGroup children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:health) op: assign_op.Equal rhs: { (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:372) command_list: (command.CommandList children: [ (C {(curl)} {(--silent)} {(http) (Id.Lit_Other ':') (//127.0.0.1) (Id.Lit_Other ':') (${ Id.VSub_Name port) (/health) } ) ] ) ) } spids: [371] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} {(DQ (${ Id.VSub_Name health))} {(Id.Lit_Equals '=') (Id.Lit_Equals '=')} {(DQ (${ Id.VSub_Name health_ok))} {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:408) ) ] action: [ (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:413) arg_word: {(0)} ) ] spids: [388 410] ) ] ) (C {(sleep)} {(1)}) ] ) ) (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:429) arg_word: {(1)} ) ] ) ) (command.ShFunction name: wait_for_cluster_healthy body: (command.BraceGroup children: [ (command.ForEach iter_name: i iter_words: [ { (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:452) command_list: (command.CommandList children:[(C {(seq)} {(120)})]) ) } ] do_arg_iter: F body: (command.DoGroup children: [ (command.AndOr ops: [Id.Op_DPipe] children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:cs_status) op: assign_op.Equal rhs: { (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:463) command_list: (command.CommandList children: [ (C {(kubectl)} {(get)} {(componentstatuses)} {(-o)} {(template)} {(--template) (Id.Lit_Equals '=') (SQ (Token id: Id.Lit_Chars val: '{{range .items}}{{with index .conditions 0}}{{.type}}:{{.status}}{{end}}{{"\\n"}}{{end}}' span_id: 477 ) ) } ) ] ) ) } spids: [462] ) ] ) (C {(true)}) ] ) (command.AndOr ops: [Id.Op_DPipe] children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:componentstatuses) op: assign_op.Equal rhs: { (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:487) command_list: (command.CommandList children: [ (command.Pipeline children: [ (C {(echo)} {(DQ (${ Id.VSub_Name cs_status))}) (C {(grep)} {(-c)} { (SQ (Token id: Id.Lit_Chars val: 'Healthy:' span_id: 503 ) ) } ) ] negated: F ) ] ) ) } spids: [486] ) ] ) (C {(true)}) ] ) (command.AndOr ops: [Id.Op_DPipe] children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:healthy) op: assign_op.Equal rhs: { (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:513) command_list: (command.CommandList children: [ (command.Pipeline children: [ (C {(echo)} {(DQ (${ Id.VSub_Name cs_status))}) (C {(grep)} {(-c)} { (SQ (Token id: Id.Lit_Chars val: 'Healthy:True' span_id: 529 ) ) } ) ] negated: F ) ] ) ) } spids: [512] ) ] ) (C {(true)}) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} {(DQ (${ Id.VSub_Name componentstatuses))} {(-eq)} {(DQ (${ Id.VSub_Name healthy))} {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:557) ) ] action: [ (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:562) arg_word: {(0)} ) ] spids: [538 559] ) ] ) (C {(sleep)} {(1)}) ] ) ) (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:578) arg_word: {(1)} ) ] ) ) (command.ShFunction name: wait_for_etcd_and_apiserver_down body: (command.BraceGroup children: [ (command.ForEach iter_name: i iter_words: [ { (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:601) command_list: (command.CommandList children:[(C {(seq)} {(120)})]) ) } ] do_arg_iter: F body: (command.DoGroup children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:etcd) op: assign_op.Equal rhs: { (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:612) command_list: (command.CommandList children: [ (command.Pipeline children: [ (C {(docker)} {(ps)}) (C {(grep)} {(etcd)}) (C {(grep)} {(-v)} {(etcd-empty-dir)}) (C {(grep)} {(-v)} {(etcd-monitor)}) (C {(wc)} {(-l)}) ] negated: F ) ] ) ) } spids: [611] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:apiserver) op: assign_op.Equal rhs: { (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:648) command_list: (command.CommandList children: [ (command.Pipeline children: [ (C {(docker)} {(ps)}) (C {(grep)} {(apiserver)}) (C {(wc)} {(-l)}) ] negated: F ) ] ) ) } spids: [647] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} {(DQ (${ Id.VSub_Name etcd))} {(-eq)} {(DQ (0))} {(-a)} {(DQ (${ Id.VSub_Name apiserver))} {(-eq)} {(DQ (0))} {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:710) ) ] action: [ (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:715) arg_word: {(0)} ) ] spids: [679 712] ) ] ) (C {(sleep)} {(1)}) ] ) ) (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:731) arg_word: {(1)} ) ] ) ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:MANIFEST_DIR) op: assign_op.Equal rhs: {(DQ (/etc/kubernetes/manifests))} spids: [744] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:MANIFEST_BACKUP_DIR) op: assign_op.Equal rhs: {(DQ (/etc/kubernetes/manifests-backups))} spids: [749] ) ] ) (C {(mkdir)} {(-p)} {(DQ (${ Id.VSub_Name MANIFEST_BACKUP_DIR))}) (C {(echo)} {(DQ ('Moving etcd(s) & apiserver manifest files to ') (${ Id.VSub_Name MANIFEST_BACKUP_DIR))} ) (command.AndOr ops: [Id.Op_DPipe] children: [ (C {(mv)} {(DQ (${ Id.VSub_Name MANIFEST_DIR) (/kube-apiserver.manifest))} {(DQ (${ Id.VSub_Name MANIFEST_BACKUP_DIR))} ) (C {(true)}) ] ) (command.AndOr ops: [Id.Op_DPipe] children: [ (C {(mv)} {(DQ (${ Id.VSub_Name MANIFEST_DIR) (/etcd.manifest))} {(DQ (${ Id.VSub_Name MANIFEST_BACKUP_DIR))} ) (C {(true)}) ] ) (command.AndOr ops: [Id.Op_DPipe] children: [ (C {(mv)} {(DQ (${ Id.VSub_Name MANIFEST_DIR) (/etcd-events.manifest))} {(DQ (${ Id.VSub_Name MANIFEST_BACKUP_DIR))} ) (C {(true)}) ] ) (C {(echo)} {(DQ ('Waiting for etcd and kube-apiserver to be down'))}) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.Pipeline children:[(C {(wait_for_etcd_and_apiserver_down)})] negated:T) terminator: (Token id:Id.Op_Semi val:';' span_id:851) ) ] action: [ (C {(echo)} {(DQ ('Downing etcd and apiserver failed'))}) (command.ControlFlow token: (Token id:Id.ControlFlow_Exit val:exit span_id:867) arg_word: {(1)} ) ] spids: [846 853] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:BACKUP_DIR) op: assign_op.Equal rhs: {(DQ (/var/tmp/backup))} spids: [880] ) ] ) (C {(rm)} {(-rf)} {(DQ (${ Id.VSub_Name BACKUP_DIR))}) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} {(DQ (${ Id.VSub_Name ETCD_API))} {(Id.Lit_Equals '=') (Id.Lit_Equals '=')} {(DQ (etcd2))} {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:913) ) ] action: [ (C {(echo)} {(DQ ('Preparing etcd backup data for restore'))}) (C {(echo)} {(DQ ('Copying data to ') (${ Id.VSub_Name BACKUP_DIR) (' and restoring there'))} ) (C {(mkdir)} {(-p)} {(DQ (${ Id.VSub_Name BACKUP_DIR) (/member/snap))}) (C {(mkdir)} {(-p)} {(DQ (${ Id.VSub_Name BACKUP_DIR) (/member/wal))}) (command.AndOr ops: [Id.Op_DPipe] children: [ (C {(mv)} {(Id.Lit_Star '*') (.snap)} {(DQ (${ Id.VSub_Name BACKUP_DIR) (/member/snap/))}) (C {(true)}) ] ) (C {(mv)} {(Id.Lit_Star '*') (.wal)} {(DQ (${ Id.VSub_Name BACKUP_DIR) (/member/wal/))}) (C {(echo)} {(DQ ('Starting etcd ') (${ Id.VSub_Name ETCD_VERSION) (' to restore data'))}) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:image) op: assign_op.Equal rhs: { (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:1027) command_list: (command.CommandList children: [ (C {(docker)} {(run)} {(-d)} {(-v)} {(${ Id.VSub_Name BACKUP_DIR) (Id.Lit_Other ':') (/var/etcd/data)} {(--net) (Id.Lit_Equals '=') (host)} {(-p)} {(${ Id.VSub_Name etcd_port) (Id.Lit_Other ':') (${ Id.VSub_Name etcd_port) } {(DQ ('gcr.io/google_containers/etcd:') (${ Id.VSub_Name ETCD_VERSION))} {(/bin/sh)} {(-c)} { (DQ ( '/usr/local/bin/etcd --data-dir /var/etcd/data --force-new-cluster' ) ) } ) ] ) ) } spids: [1026] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} {(DQ ($ Id.VSub_QMark '$?'))} {(-ne)} {(DQ (0))} {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:1094) ) ] action: [ (C {(echo)} {(DQ ("Docker container didn't started correctly"))}) (command.ControlFlow token: (Token id:Id.ControlFlow_Exit val:exit span_id:1106) arg_word: {(1)} ) ] spids: [1079 1096] ) ] ) (C {(echo)} { (DQ ('Container ') (${ Id.VSub_Name image) (' created, waiting for etcd to report as healthy') ) } ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.Pipeline children: [(C {(wait_for_etcd_up)} {(DQ (${ Id.VSub_Name etcd_port))})] negated: T ) terminator: (Token id:Id.Op_Semi val:';' span_id:1137) ) ] action: [ (C {(echo)} {(DQ ("Etcd didn't come back correctly"))}) (command.ControlFlow token: (Token id:Id.ControlFlow_Exit val:exit span_id:1149) arg_word: {(1)} ) ] spids: [1126 1139] ) ] ) (C {(echo)} {(DQ ('Etcd healthy - killing ') (${ Id.VSub_Name image) (' container'))}) (C {(docker)} {(kill)} {(DQ (${ Id.VSub_Name image))}) ] spids: [895 915] ) (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} {(DQ (${ Id.VSub_Name ETCD_API))} {(Id.Lit_Equals '=') (Id.Lit_Equals '=')} {(DQ (etcd3))} {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:1201) ) ] action: [ (C {(echo)} {(DQ ('Preparing etcd snapshot for restore'))}) (C {(mkdir)} {(-p)} {(DQ (${ Id.VSub_Name BACKUP_DIR))}) (C {(echo)} {(DQ ('Copying data to ') (${ Id.VSub_Name BACKUP_DIR) (' and restoring there'))} ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:number_files) op: assign_op.Equal rhs: { (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:1236) command_list: (command.CommandList children: [ (command.Pipeline children: [ (C {(find)} {(.)} {(-maxdepth)} {(1)} {(-type)} {(f)} {(-name)} {(DQ ('*.db'))} ) (C {(wc)} {(-l)}) ] negated: F ) ] ) ) } spids: [1235] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} {(DQ (${ Id.VSub_Name number_files))} {(-ne)} {(DQ (1))} {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:1280) ) ] action: [ (C {(echo)} {(DQ ('Incorrect number of *.db files - expected 1'))}) (command.ControlFlow token: (Token id:Id.ControlFlow_Exit val:exit span_id:1292) arg_word: {(1)} ) ] spids: [1263 1282] ) ] ) (C {(mv)} {(Id.Lit_Star '*') (.db)} {(DQ (${ Id.VSub_Name BACKUP_DIR) (/))}) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:snapshot) op: assign_op.Equal rhs: { (DQ (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:1315) command_list: (command.CommandList children: [(C {(ls)} {(${ Id.VSub_Name BACKUP_DIR)})] ) ) ) } spids: [1313] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:image) op: assign_op.Equal rhs: { (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:1339) command_list: (command.CommandList children: [ (C {(docker)} {(run)} {(-d)} {(-v)} {(${ Id.VSub_Name BACKUP_DIR) (Id.Lit_Other ':') (/var/tmp/backup)} {(--env)} {(Id.Lit_VarLike 'ETCDCTL_API=') (3)} { (DQ ('gcr.io/google_containers/etcd:') (${ Id.VSub_Name ETCD_VERSION) ) } {(/bin/sh)} {(-c)} { (DQ ('/usr/local/bin/etcdctl snapshot restore ') (${ Id.VSub_Name BACKUP_DIR) (/) (${ Id.VSub_Name snapshot) (' --name ') (${ Id.VSub_Name NAME) (' --initial-cluster ') (${ Id.VSub_Name NAME) ('=http://localhost:2380; mv /') (${ Id.VSub_Name NAME) ('.etcd/member /var/tmp/backup/') ) } ) ] ) ) } spids: [1338] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} {(DQ ($ Id.VSub_QMark '$?'))} {(-ne)} {(DQ (0))} {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:1415) ) ] action: [ (C {(echo)} {(DQ ("Docker container didn't started correctly"))}) (command.ControlFlow token: (Token id:Id.ControlFlow_Exit val:exit span_id:1427) arg_word: {(1)} ) ] spids: [1400 1417] ) ] ) (C {(echo)} { (DQ ('Prepare container exit code: ') (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:1439) command_list: (command.CommandList children: [(C {(docker)} {(wait)} {(${ Id.VSub_Name image)})] ) ) ) } ) (C {(rm)} {(-f)} {(DQ (${ Id.VSub_Name BACKUP_DIR) (/) (${ Id.VSub_Name snapshot))}) ] spids: [1183 1203] ) ] ) (C {(cp)} {(DQ (${ Id.VSub_Name VERSION_FILE))} {(DQ (${ Id.VSub_Name BACKUP_DIR))}) (C {(export)} {(Id.Lit_VarLike 'CVM=') (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:1492) command_list: (command.CommandList children: [ (command.Sentence child: (command.Pipeline children: [ (C {(curl)} {(DQ ('http://metadata/computeMetadata/v1/instance/attributes/'))} {(-H)} {(DQ ('Metadata-Flavor: Google'))} ) (C {(grep)} {(-q)} {(gci)}) ] negated: F stderr_indices: [0] ) terminator: (Token id:Id.Op_Semi val:';' span_id:1512) ) (C {(echo)} {($ Id.VSub_QMark '$?')}) ] ) ) } ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DBracket expr: (bool_expr.Binary op_id: Id.BoolBinary_GlobDEqual left: {(DQ ($ Id.VSub_DollarName '$CVM'))} right: {(DQ (1))} ) ) terminator: (Token id:Id.Op_Semi val:';' span_id:1534) ) ] action: [(C {(export)} {(Id.Lit_VarLike 'MNT_DISK=') (DQ (/mnt/master-pd))})] spids: [1519 1536] ) ] else_action: [(C {(export)} {(Id.Lit_VarLike 'MNT_DISK=') (DQ (/mnt/disks/master-pd))})] ) (C {(rm)} {(-rf)} {(DQ (${ Id.VSub_Name MNT_DISK) (/var/etcd-corrupted))}) (C {(mkdir)} {(-p)} {(DQ (${ Id.VSub_Name MNT_DISK) (/var/etcd-corrupted))}) (C {(echo)} {(DQ ('Saving corrupted data to ') (${ Id.VSub_Name MNT_DISK) (/var/etcd-corrupted))}) (C {(mv)} {(/var/etcd/data)} {(DQ (${ Id.VSub_Name MNT_DISK) (/var/etcd-corrupted))}) (C {(echo)} {(DQ ('Copying restored data to /var/etcd/data'))}) (C {(mv)} {(DQ (${ Id.VSub_Name BACKUP_DIR))} {(/var/etcd/data)}) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} { (DQ (braced_var_sub token: (Token id:Id.VSub_Name val:RESET_EVENT_ETCD span_id:1632) suffix_op: (suffix_op.Unary op_id:Id.VTest_ColonHyphen arg_word:(word.Empty)) ) ) } {(Id.Lit_Equals '=') (Id.Lit_Equals '=')} {(DQ (true))} {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:1645) ) ] action: [ (C {(echo)} {(DQ ('Removing event-etcd corrupted data'))}) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:EVENTS_CORRUPTED_DIR) op: assign_op.Equal rhs: {(DQ (${ Id.VSub_Name MNT_DISK) (/var/etcd-events-corrupted))} spids: [1657] ) ] ) (C {(rm)} {(-rf)} {(DQ (${ Id.VSub_Name EVENTS_CORRUPTED_DIR))}) (C {(mkdir)} {(-p)} {(DQ (${ Id.VSub_Name EVENTS_CORRUPTED_DIR))}) (C {(mv)} {(/var/etcd/data-events)} {(DQ (${ Id.VSub_Name EVENTS_CORRUPTED_DIR))}) ] spids: [1626 1647] ) ] ) (C {(echo)} {(DQ ('Restarting etcd and apiserver from restored snapshot'))}) (C {(mv)} {(DQ (${ Id.VSub_Name MANIFEST_BACKUP_DIR)) (/) (Id.Lit_Star '*')} {(DQ (${ Id.VSub_Name MANIFEST_DIR) (/))} ) (C {(rm)} {(-rf)} {(DQ (${ Id.VSub_Name MANIFEST_BACKUP_DIR))}) (C {(echo)} {(DQ ('Waiting for etcd to come back'))}) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.Pipeline children: [(C {(wait_for_etcd_up)} {(DQ (${ Id.VSub_Name etcd_port))})] negated: T ) terminator: (Token id:Id.Op_Semi val:';' span_id:1762) ) ] action: [ (C {(echo)} {(DQ ("Etcd didn't come back correctly"))}) (command.ControlFlow token: (Token id:Id.ControlFlow_Exit val:exit span_id:1774) arg_word: {(1)} ) ] spids: [1751 1764] ) ] ) (C {(echo)} {(DQ ('Waiting for event etcd to come back'))}) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.Pipeline children: [(C {(wait_for_etcd_up)} {(DQ (${ Id.VSub_Name event_etcd_port))})] negated: T ) terminator: (Token id:Id.Op_Semi val:';' span_id:1801) ) ] action: [ (C {(echo)} {(DQ ("Event etcd didn't come back correctly"))}) (command.ControlFlow token: (Token id:Id.ControlFlow_Exit val:exit span_id:1813) arg_word: {(1)} ) ] spids: [1790 1803] ) ] ) (C {(echo)} {(DQ ('Waiting for apiserver to come back'))}) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.Pipeline children:[(C {(wait_for_cluster_healthy)})] negated:T) terminator: (Token id:Id.Op_Semi val:';' span_id:1834) ) ] action: [ (C {(echo)} {(DQ ("Apiserver didn't come back correctly"))}) (command.ControlFlow token: (Token id:Id.ControlFlow_Exit val:exit span_id:1846) arg_word: {(1)} ) ] spids: [1829 1836] ) ] ) (C {(echo)} {(DQ ('Cluster successfully restored!'))}) ] )