(command.CommandList children: [ (command.Simple blame_tok: <set> more_env: [] words: [{<set>} {<-o>} {<errexit>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <set> more_env: [] words: [{<set>} {<-o>} {<nounset>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <set> more_env: [] words: [{<set>} {<-o>} {<pipefail>}] redirects: [] do_fork: T ) (command.ShAssignment left: <Id.Lit_VarLike 'VERSION_FILE='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'VERSION_FILE='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'VERSION_FILE='> name:VERSION_FILE) op: assign_op.Equal rhs: {(DQ <version.txt>)} ) ] redirects: [] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {<-n>} { (DQ (BracedVarSub left: <Id.Left_DollarBrace '${'> token: <Id.VSub_Name VERSION_CONTENTS> var_name: VERSION_CONTENTS suffix_op: (suffix_op.Unary op:<Id.VTest_ColonHyphen _> arg_word:(rhs_word__Empty)) right: <Id.Right_DollarBrace '}'> ) ) } {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(DQ (${ Id.VSub_Name VERSION_CONTENTS))}] redirects: [ (Redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {(DQ (${ Id.VSub_Name VERSION_FILE))} ) ] do_fork: T ) ] spids: [148 164] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {<Id.KW_Bang '!'>} {<-f>} {(DQ (${ Id.VSub_Name VERSION_FILE))} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(DQ <'2.2.1/etcd2'>)}] redirects: [ (Redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {(DQ (${ Id.VSub_Name VERSION_FILE))} ) ] do_fork: T ) ] spids: [185 202] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'VERSION_CONTENTS='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'VERSION_CONTENTS='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'VERSION_CONTENTS='> name:VERSION_CONTENTS) op: assign_op.Equal rhs: { (DQ (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <cat> more_env: [] words: [{<cat>} {(${ Id.VSub_Name VERSION_FILE)}] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) ) } ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'ETCD_VERSION='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'ETCD_VERSION='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'ETCD_VERSION='> name:ETCD_VERSION) op: assign_op.Equal rhs: { (DQ (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Pipeline children: [ (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {($ Id.VSub_DollarName VERSION_CONTENTS)}] redirects: [] do_fork: T ) (command.Simple blame_tok: <cut> more_env: [] words: [{<cut>} {<-d>} {(SQ <'/'>)} {<-f>} {<1>}] redirects: [] do_fork: T ) ] ops: [<Id.Op_Pipe _>] ) right: <Id.Eof_RParen _> ) ) } ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'ETCD_API='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'ETCD_API='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'ETCD_API='> name:ETCD_API) op: assign_op.Equal rhs: { (DQ (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Pipeline children: [ (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {($ Id.VSub_DollarName VERSION_CONTENTS)}] redirects: [] do_fork: T ) (command.Simple blame_tok: <cut> more_env: [] words: [{<cut>} {<-d>} {(SQ <'/'>)} {<-f>} {<2>}] redirects: [] do_fork: T ) ] ops: [<Id.Op_Pipe _>] ) right: <Id.Eof_RParen _> ) ) } ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'NAME='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'NAME='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'NAME='> name:NAME) op: assign_op.Equal rhs: { (DQ (BracedVarSub left: <Id.Left_DollarBrace '${'> token: <Id.VSub_Name NAME> var_name: NAME suffix_op: (suffix_op.Unary op: <Id.VTest_ColonHyphen _> arg_word: {<etcd-> (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <hostname> more_env: [] words: [{<hostname>}] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) } ) right: <Id.Right_DollarBrace '}'> ) ) } ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'etcd_port='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'etcd_port='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'etcd_port='> name:etcd_port) op: assign_op.Equal rhs: {<2379>} ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'event_etcd_port='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'event_etcd_port='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'event_etcd_port='> name:event_etcd_port) op: assign_op.Equal rhs: {<4002>} ) ] redirects: [] ) (command.ShFunction name_tok: <wait_for_etcd_up> name: wait_for_etcd_up body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.ShAssignment left: <Id.Lit_VarLike 'port='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'port='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'port='> name:port) op: assign_op.Equal rhs: {($ Id.VSub_Number 1)} ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'health_ok='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'health_ok='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'health_ok='> name:health_ok) op: assign_op.Equal rhs: { (DQ <'{'> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'> ch:'"') <health> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'> ch:'"') <': '> (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\"'> ch: '"' ) <true> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'> ch:'"') <'}'> ) } ) ] redirects: [] ) (command.ForEach keyword: <Id.KW_For for> iter_names: [i] iterable: (for_iter.Words words: [ { (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <seq> more_env: [] words: [{<seq>} {<120>}] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) } ] ) semi_tok: <Id.Op_Semi _> body: (command.DoGroup left: <Id.KW_Do do> children: [ (command.ShAssignment left: <Id.Lit_VarLike 'health='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'health='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'health='> name:health) op: assign_op.Equal rhs: { (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <curl> more_env: [] words: [ {<curl>} {<--silent>} {<http> <Id.Lit_Colon ':'> <'//127.0.0.1'> <Id.Lit_Colon ':'> (${ Id.VSub_Name port) <'/health'> } ] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) } ) ] redirects: [] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(DQ (${ Id.VSub_Name health))} {<Id.Lit_Equals '='> <Id.Lit_Equals '='>} {(DQ (${ Id.VSub_Name health_ok))} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.ControlFlow keyword: <Id.ControlFlow_Return return> arg_word: {<0>} ) ] spids: [388 410] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.Simple blame_tok: <sleep> more_env: [] words: [{<sleep>} {<1>}] redirects: [] do_fork: T ) ] right: <Id.KW_Done done> ) redirects: [] ) (command.ControlFlow keyword:<Id.ControlFlow_Return return> arg_word:{<1>}) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <wait_for_cluster_healthy> name: wait_for_cluster_healthy body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.ForEach keyword: <Id.KW_For for> iter_names: [i] iterable: (for_iter.Words words: [ { (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <seq> more_env: [] words: [{<seq>} {<120>}] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) } ] ) semi_tok: <Id.Op_Semi _> body: (command.DoGroup left: <Id.KW_Do do> children: [ (command.AndOr children: [ (command.ShAssignment left: <Id.Lit_VarLike 'cs_status='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'cs_status='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'cs_status='> name: cs_status ) op: assign_op.Equal rhs: { (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <kubectl> more_env: [] words: [ {<kubectl>} {<get>} {<componentstatuses>} {<-o>} {<template>} {<--template> <Id.Lit_Equals '='> (SQ < '{{range .items}}{{with index .conditions 0}}{{.type}}:{{.status}}{{end}}{{"\\n"}}{{end}}' > ) } ] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) } ) ] redirects: [] ) (command.Simple blame_tok: <true> more_env: [] words: [{<true>}] redirects: [] do_fork: T ) ] ops: [<Id.Op_DPipe _>] ) (command.AndOr children: [ (command.ShAssignment left: <Id.Lit_VarLike 'componentstatuses='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'componentstatuses='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'componentstatuses='> name: componentstatuses ) op: assign_op.Equal rhs: { (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Pipeline children: [ (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(DQ (${ Id.VSub_Name cs_status))}] redirects: [] do_fork: T ) (command.Simple blame_tok: <grep> more_env: [] words: [{<grep>} {<-c>} {(SQ <'Healthy:'>)}] redirects: [] do_fork: T ) ] ops: [<Id.Op_Pipe _>] ) right: <Id.Eof_RParen _> ) } ) ] redirects: [] ) (command.Simple blame_tok: <true> more_env: [] words: [{<true>}] redirects: [] do_fork: T ) ] ops: [<Id.Op_DPipe _>] ) (command.AndOr children: [ (command.ShAssignment left: <Id.Lit_VarLike 'healthy='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'healthy='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'healthy='> name:healthy) op: assign_op.Equal rhs: { (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Pipeline children: [ (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(DQ (${ Id.VSub_Name cs_status))}] redirects: [] do_fork: T ) (command.Simple blame_tok: <grep> more_env: [] words: [{<grep>} {<-c>} {(SQ <'Healthy:True'>)}] redirects: [] do_fork: T ) ] ops: [<Id.Op_Pipe _>] ) right: <Id.Eof_RParen _> ) } ) ] redirects: [] ) (command.Simple blame_tok: <true> more_env: [] words: [{<true>}] redirects: [] do_fork: T ) ] ops: [<Id.Op_DPipe _>] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(DQ (${ Id.VSub_Name componentstatuses))} {<-eq>} {(DQ (${ Id.VSub_Name healthy))} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.ControlFlow keyword: <Id.ControlFlow_Return return> arg_word: {<0>} ) ] spids: [538 559] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.Simple blame_tok: <sleep> more_env: [] words: [{<sleep>} {<1>}] redirects: [] do_fork: T ) ] right: <Id.KW_Done done> ) redirects: [] ) (command.ControlFlow keyword:<Id.ControlFlow_Return return> arg_word:{<1>}) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <wait_for_etcd_and_apiserver_down> name: wait_for_etcd_and_apiserver_down body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.ForEach keyword: <Id.KW_For for> iter_names: [i] iterable: (for_iter.Words words: [ { (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <seq> more_env: [] words: [{<seq>} {<120>}] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) } ] ) semi_tok: <Id.Op_Semi _> body: (command.DoGroup left: <Id.KW_Do do> children: [ (command.ShAssignment left: <Id.Lit_VarLike 'etcd='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'etcd='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'etcd='> name:etcd) op: assign_op.Equal rhs: { (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Pipeline children: [ (command.Simple blame_tok: <docker> more_env: [] words: [{<docker>} {<ps>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <grep> more_env: [] words: [{<grep>} {<etcd>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <grep> more_env: [] words: [{<grep>} {<-v>} {<etcd-empty-dir>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <grep> more_env: [] words: [{<grep>} {<-v>} {<etcd-monitor>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <wc> more_env: [] words: [{<wc>} {<-l>}] redirects: [] do_fork: T ) ] ops: [<Id.Op_Pipe _> <Id.Op_Pipe _> <Id.Op_Pipe _> <Id.Op_Pipe _>] ) right: <Id.Eof_RParen _> ) } ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'apiserver='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'apiserver='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'apiserver='> name:apiserver) op: assign_op.Equal rhs: { (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Pipeline children: [ (command.Simple blame_tok: <docker> more_env: [] words: [{<docker>} {<ps>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <grep> more_env: [] words: [{<grep>} {<apiserver>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <wc> more_env: [] words: [{<wc>} {<-l>}] redirects: [] do_fork: T ) ] ops: [<Id.Op_Pipe _> <Id.Op_Pipe _>] ) right: <Id.Eof_RParen _> ) } ) ] redirects: [] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(DQ (${ Id.VSub_Name etcd))} {<-eq>} {(DQ <0>)} {<-a>} {(DQ (${ Id.VSub_Name apiserver))} {<-eq>} {(DQ <0>)} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.ControlFlow keyword: <Id.ControlFlow_Return return> arg_word: {<0>} ) ] spids: [679 712] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.Simple blame_tok: <sleep> more_env: [] words: [{<sleep>} {<1>}] redirects: [] do_fork: T ) ] right: <Id.KW_Done done> ) redirects: [] ) (command.ControlFlow keyword:<Id.ControlFlow_Return return> arg_word:{<1>}) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShAssignment left: <Id.Lit_VarLike 'MANIFEST_DIR='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'MANIFEST_DIR='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'MANIFEST_DIR='> name:MANIFEST_DIR) op: assign_op.Equal rhs: {(DQ <'/etc/kubernetes/manifests'>)} ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'MANIFEST_BACKUP_DIR='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'MANIFEST_BACKUP_DIR='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'MANIFEST_BACKUP_DIR='> name: MANIFEST_BACKUP_DIR ) op: assign_op.Equal rhs: {(DQ <'/etc/kubernetes/manifests-backups'>)} ) ] redirects: [] ) (command.Simple blame_tok: <mkdir> more_env: [] words: [{<mkdir>} {<-p>} {(DQ (${ Id.VSub_Name MANIFEST_BACKUP_DIR))}] redirects: [] do_fork: T ) (command.Simple blame_tok: <echo> more_env: [] words: [ {<echo>} {(DQ <'Moving etcd(s) & apiserver manifest files to '> (${ Id.VSub_Name MANIFEST_BACKUP_DIR))} ] redirects: [] do_fork: T ) (command.AndOr children: [ (command.Simple blame_tok: <mv> more_env: [] words: [ {<mv>} {(DQ (${ Id.VSub_Name MANIFEST_DIR) <'/kube-apiserver.manifest'>)} {(DQ (${ Id.VSub_Name MANIFEST_BACKUP_DIR))} ] redirects: [] do_fork: T ) (command.Simple blame_tok:<true> more_env:[] words:[{<true>}] redirects:[] do_fork:T) ] ops: [<Id.Op_DPipe _>] ) (command.AndOr children: [ (command.Simple blame_tok: <mv> more_env: [] words: [ {<mv>} {(DQ (${ Id.VSub_Name MANIFEST_DIR) <'/etcd.manifest'>)} {(DQ (${ Id.VSub_Name MANIFEST_BACKUP_DIR))} ] redirects: [] do_fork: T ) (command.Simple blame_tok:<true> more_env:[] words:[{<true>}] redirects:[] do_fork:T) ] ops: [<Id.Op_DPipe _>] ) (command.AndOr children: [ (command.Simple blame_tok: <mv> more_env: [] words: [ {<mv>} {(DQ (${ Id.VSub_Name MANIFEST_DIR) <'/etcd-events.manifest'>)} {(DQ (${ Id.VSub_Name MANIFEST_BACKUP_DIR))} ] redirects: [] do_fork: T ) (command.Simple blame_tok:<true> more_env:[] words:[{<true>}] redirects:[] do_fork:T) ] ops: [<Id.Op_DPipe _>] ) (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(DQ <'Waiting for etcd and kube-apiserver to be down'>)}] redirects: [] do_fork: T ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Pipeline negated: <Id.KW_Bang '!'> children: [ (command.Simple blame_tok: <wait_for_etcd_and_apiserver_down> more_env: [] words: [{<wait_for_etcd_and_apiserver_down>}] redirects: [] do_fork: T ) ] ops: [] ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(DQ <'Downing etcd and apiserver failed'>)}] redirects: [] do_fork: T ) (command.ControlFlow keyword:<Id.ControlFlow_Exit exit> arg_word:{<1>}) ] spids: [846 853] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'BACKUP_DIR='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'BACKUP_DIR='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'BACKUP_DIR='> name:BACKUP_DIR) op: assign_op.Equal rhs: {(DQ <'/var/tmp/backup'>)} ) ] redirects: [] ) (command.Simple blame_tok: <rm> more_env: [] words: [{<rm>} {<-rf>} {(DQ (${ Id.VSub_Name BACKUP_DIR))}] redirects: [] do_fork: T ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(DQ (${ Id.VSub_Name ETCD_API))} {<Id.Lit_Equals '='> <Id.Lit_Equals '='>} {(DQ <etcd2>)} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(DQ <'Preparing etcd backup data for restore'>)}] redirects: [] do_fork: T ) (command.Simple blame_tok: <echo> more_env: [] words: [ {<echo>} {(DQ <'Copying data to '> (${ Id.VSub_Name BACKUP_DIR) <' and restoring there'>)} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <mkdir> more_env: [] words: [{<mkdir>} {<-p>} {(DQ (${ Id.VSub_Name BACKUP_DIR) <'/member/snap'>)}] redirects: [] do_fork: T ) (command.Simple blame_tok: <mkdir> more_env: [] words: [{<mkdir>} {<-p>} {(DQ (${ Id.VSub_Name BACKUP_DIR) <'/member/wal'>)}] redirects: [] do_fork: T ) (command.AndOr children: [ (command.Simple blame_tok: <mv> more_env: [] words: [ {<mv>} {<Id.Lit_Star '*'> <.snap>} {(DQ (${ Id.VSub_Name BACKUP_DIR) <'/member/snap/'>)} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <true> more_env: [] words: [{<true>}] redirects: [] do_fork: T ) ] ops: [<Id.Op_DPipe _>] ) (command.Simple blame_tok: <mv> more_env: [] words: [ {<mv>} {<Id.Lit_Star '*'> <.wal>} {(DQ (${ Id.VSub_Name BACKUP_DIR) <'/member/wal/'>)} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <echo> more_env: [] words: [ {<echo>} {(DQ <'Starting etcd '> (${ Id.VSub_Name ETCD_VERSION) <' to restore data'>)} ] redirects: [] do_fork: T ) (command.ShAssignment left: <Id.Lit_VarLike 'image='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'image='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'image='> name:image) op: assign_op.Equal rhs: { (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <docker> more_env: [] words: [ {<docker>} {<run>} {<-d>} {<-v>} {(${ Id.VSub_Name BACKUP_DIR) <Id.Lit_Colon ':'> <'/var/etcd/data'>} {<--net> <Id.Lit_Equals '='> <host>} {<-p>} {(${ Id.VSub_Name etcd_port) <Id.Lit_Colon ':'> (${ 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' > ) } ] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) } ) ] redirects: [] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(DQ ($ Id.VSub_QMark '?'))} {<-ne>} {(DQ <0>)} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(DQ <'Docker container didn\'t started correctly'>)}] redirects: [] do_fork: T ) (command.ControlFlow keyword: <Id.ControlFlow_Exit exit> arg_word: {<1>} ) ] spids: [1079 1096] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.Simple blame_tok: <echo> more_env: [] words: [ {<echo>} { (DQ <'Container '> (${ Id.VSub_Name image) <' created, waiting for etcd to report as healthy'> ) } ] redirects: [] do_fork: T ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Pipeline negated: <Id.KW_Bang '!'> children: [ (command.Simple blame_tok: <wait_for_etcd_up> more_env: [] words: [{<wait_for_etcd_up>} {(DQ (${ Id.VSub_Name etcd_port))}] redirects: [] do_fork: T ) ] ops: [] ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(DQ <'Etcd didn\'t come back correctly'>)}] redirects: [] do_fork: T ) (command.ControlFlow keyword: <Id.ControlFlow_Exit exit> arg_word: {<1>} ) ] spids: [1126 1139] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(DQ <'Etcd healthy - killing '> (${ Id.VSub_Name image) <' container'>)}] redirects: [] do_fork: T ) (command.Simple blame_tok: <docker> more_env: [] words: [{<docker>} {<kill>} {(DQ (${ Id.VSub_Name image))}] redirects: [] do_fork: T ) ] spids: [895 915] ) (IfArm keyword: <Id.KW_Elif elif> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(DQ (${ Id.VSub_Name ETCD_API))} {<Id.Lit_Equals '='> <Id.Lit_Equals '='>} {(DQ <etcd3>)} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(DQ <'Preparing etcd snapshot for restore'>)}] redirects: [] do_fork: T ) (command.Simple blame_tok: <mkdir> more_env: [] words: [{<mkdir>} {<-p>} {(DQ (${ Id.VSub_Name BACKUP_DIR))}] redirects: [] do_fork: T ) (command.Simple blame_tok: <echo> more_env: [] words: [ {<echo>} {(DQ <'Copying data to '> (${ Id.VSub_Name BACKUP_DIR) <' and restoring there'>)} ] redirects: [] do_fork: T ) (command.ShAssignment left: <Id.Lit_VarLike 'number_files='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'number_files='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'number_files='> name:number_files) op: assign_op.Equal rhs: { (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Pipeline children: [ (command.Simple blame_tok: <find> more_env: [] words: [ {<find>} {<.>} {<-maxdepth>} {<1>} {<-type>} {<f>} {<-name>} {(DQ <'*.db'>)} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <wc> more_env: [] words: [{<wc>} {<-l>}] redirects: [] do_fork: T ) ] ops: [<Id.Op_Pipe _>] ) right: <Id.Eof_RParen _> ) } ) ] redirects: [] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(DQ (${ Id.VSub_Name number_files))} {<-ne>} {(DQ <1>)} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(DQ <'Incorrect number of *.db files - expected 1'>)}] redirects: [] do_fork: T ) (command.ControlFlow keyword: <Id.ControlFlow_Exit exit> arg_word: {<1>} ) ] spids: [1263 1282] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.Simple blame_tok: <mv> more_env: [] words: [{<mv>} {<Id.Lit_Star '*'> <.db>} {(DQ (${ Id.VSub_Name BACKUP_DIR) <'/'>)}] redirects: [] do_fork: T ) (command.ShAssignment left: <Id.Lit_VarLike 'snapshot='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'snapshot='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'snapshot='> name:snapshot) op: assign_op.Equal rhs: { (DQ (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <ls> more_env: [] words: [{<ls>} {(${ Id.VSub_Name BACKUP_DIR)}] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) ) } ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'image='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'image='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'image='> name:image) op: assign_op.Equal rhs: { (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <docker> more_env: [] words: [ {<docker>} {<run>} {<-d>} {<-v>} {(${ Id.VSub_Name BACKUP_DIR) <Id.Lit_Colon ':'> <'/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/'> ) } ] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) } ) ] redirects: [] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(DQ ($ Id.VSub_QMark '?'))} {<-ne>} {(DQ <0>)} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(DQ <'Docker container didn\'t started correctly'>)}] redirects: [] do_fork: T ) (command.ControlFlow keyword: <Id.ControlFlow_Exit exit> arg_word: {<1>} ) ] spids: [1400 1417] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.Simple blame_tok: <echo> more_env: [] words: [ {<echo>} { (DQ <'Prepare container exit code: '> (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <docker> more_env: [] words: [{<docker>} {<wait>} {(${ Id.VSub_Name image)}] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) ) } ] redirects: [] do_fork: T ) (command.Simple blame_tok: <rm> more_env: [] words: [{<rm>} {<-f>} {(DQ (${ Id.VSub_Name BACKUP_DIR) <'/'> (${ Id.VSub_Name snapshot))}] redirects: [] do_fork: T ) ] spids: [1183 1203] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.Simple blame_tok: <cp> more_env: [] words: [{<cp>} {(DQ (${ Id.VSub_Name VERSION_FILE))} {(DQ (${ Id.VSub_Name BACKUP_DIR))}] redirects: [] do_fork: T ) (command.Simple blame_tok: <export> more_env: [] words: [ {<export>} {<Id.Lit_VarLike 'CVM='> (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.CommandList children: [ (command.Sentence child: (command.Pipeline children: [ (command.Simple blame_tok: <curl> more_env: [] words: [ {<curl>} {(DQ <'http://metadata/computeMetadata/v1/instance/attributes/'>)} {<-H>} {(DQ <'Metadata-Flavor: Google'>)} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <grep> more_env: [] words: [{<grep>} {<-q>} {<gci>}] redirects: [] do_fork: T ) ] ops: [<Id.Op_PipeAmp _>] ) terminator: <Id.Op_Semi _> ) (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {($ Id.VSub_QMark '?')}] redirects: [] do_fork: T ) ] ) right: <Id.Eof_RParen _> ) } ] redirects: [] do_fork: T ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.DBracket left: <Id.KW_DLeftBracket '[['> expr: (bool_expr.Binary op_id: Id.BoolBinary_GlobDEqual left: {(DQ ($ Id.VSub_DollarName CVM))} right: {(DQ <1>)} ) right: <Id.Lit_DRightBracket ']]'> redirects: [] ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <export> more_env: [] words: [{<export>} {<Id.Lit_VarLike 'MNT_DISK='> (DQ <'/mnt/master-pd'>)}] redirects: [] do_fork: T ) ] spids: [1519 1536] ) ] else_kw: <Id.KW_Else else> else_action: [ (command.Simple blame_tok: <export> more_env: [] words: [{<export>} {<Id.Lit_VarLike 'MNT_DISK='> (DQ <'/mnt/disks/master-pd'>)}] redirects: [] do_fork: T ) ] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.Simple blame_tok: <rm> more_env: [] words: [{<rm>} {<-rf>} {(DQ (${ Id.VSub_Name MNT_DISK) <'/var/etcd-corrupted'>)}] redirects: [] do_fork: T ) (command.Simple blame_tok: <mkdir> more_env: [] words: [{<mkdir>} {<-p>} {(DQ (${ Id.VSub_Name MNT_DISK) <'/var/etcd-corrupted'>)}] redirects: [] do_fork: T ) (command.Simple blame_tok: <echo> more_env: [] words: [ {<echo>} {(DQ <'Saving corrupted data to '> (${ Id.VSub_Name MNT_DISK) <'/var/etcd-corrupted'>)} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <mv> more_env: [] words: [{<mv>} {<'/var/etcd/data'>} {(DQ (${ Id.VSub_Name MNT_DISK) <'/var/etcd-corrupted'>)}] redirects: [] do_fork: T ) (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(DQ <'Copying restored data to /var/etcd/data'>)}] redirects: [] do_fork: T ) (command.Simple blame_tok: <mv> more_env: [] words: [{<mv>} {(DQ (${ Id.VSub_Name BACKUP_DIR))} {<'/var/etcd/data'>}] redirects: [] do_fork: T ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} { (DQ (BracedVarSub left: <Id.Left_DollarBrace '${'> token: <Id.VSub_Name RESET_EVENT_ETCD> var_name: RESET_EVENT_ETCD suffix_op: (suffix_op.Unary op:<Id.VTest_ColonHyphen _> arg_word:(rhs_word__Empty)) right: <Id.Right_DollarBrace '}'> ) ) } {<Id.Lit_Equals '='> <Id.Lit_Equals '='>} {(DQ <true>)} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(DQ <'Removing event-etcd corrupted data'>)}] redirects: [] do_fork: T ) (command.ShAssignment left: <Id.Lit_VarLike 'EVENTS_CORRUPTED_DIR='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'EVENTS_CORRUPTED_DIR='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'EVENTS_CORRUPTED_DIR='> name: EVENTS_CORRUPTED_DIR ) op: assign_op.Equal rhs: {(DQ (${ Id.VSub_Name MNT_DISK) <'/var/etcd-events-corrupted'>)} ) ] redirects: [] ) (command.Simple blame_tok: <rm> more_env: [] words: [{<rm>} {<-rf>} {(DQ (${ Id.VSub_Name EVENTS_CORRUPTED_DIR))}] redirects: [] do_fork: T ) (command.Simple blame_tok: <mkdir> more_env: [] words: [{<mkdir>} {<-p>} {(DQ (${ Id.VSub_Name EVENTS_CORRUPTED_DIR))}] redirects: [] do_fork: T ) (command.Simple blame_tok: <mv> more_env: [] words: [{<mv>} {<'/var/etcd/data-events'>} {(DQ (${ Id.VSub_Name EVENTS_CORRUPTED_DIR))}] redirects: [] do_fork: T ) ] spids: [1626 1647] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(DQ <'Restarting etcd and apiserver from restored snapshot'>)}] redirects: [] do_fork: T ) (command.Simple blame_tok: <mv> more_env: [] words: [ {<mv>} {(DQ (${ Id.VSub_Name MANIFEST_BACKUP_DIR)) <'/'> <Id.Lit_Star '*'>} {(DQ (${ Id.VSub_Name MANIFEST_DIR) <'/'>)} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <rm> more_env: [] words: [{<rm>} {<-rf>} {(DQ (${ Id.VSub_Name MANIFEST_BACKUP_DIR))}] redirects: [] do_fork: T ) (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(DQ <'Waiting for etcd to come back'>)}] redirects: [] do_fork: T ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Pipeline negated: <Id.KW_Bang '!'> children: [ (command.Simple blame_tok: <wait_for_etcd_up> more_env: [] words: [{<wait_for_etcd_up>} {(DQ (${ Id.VSub_Name etcd_port))}] redirects: [] do_fork: T ) ] ops: [] ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(DQ <'Etcd didn\'t come back correctly'>)}] redirects: [] do_fork: T ) (command.ControlFlow keyword:<Id.ControlFlow_Exit exit> arg_word:{<1>}) ] spids: [1751 1764] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(DQ <'Waiting for event etcd to come back'>)}] redirects: [] do_fork: T ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Pipeline negated: <Id.KW_Bang '!'> children: [ (command.Simple blame_tok: <wait_for_etcd_up> more_env: [] words: [{<wait_for_etcd_up>} {(DQ (${ Id.VSub_Name event_etcd_port))}] redirects: [] do_fork: T ) ] ops: [] ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(DQ <'Event etcd didn\'t come back correctly'>)}] redirects: [] do_fork: T ) (command.ControlFlow keyword:<Id.ControlFlow_Exit exit> arg_word:{<1>}) ] spids: [1790 1803] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(DQ <'Waiting for apiserver to come back'>)}] redirects: [] do_fork: T ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Pipeline negated: <Id.KW_Bang '!'> children: [ (command.Simple blame_tok: <wait_for_cluster_healthy> more_env: [] words: [{<wait_for_cluster_healthy>}] redirects: [] do_fork: T ) ] ops: [] ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(DQ <'Apiserver didn\'t come back correctly'>)}] redirects: [] do_fork: T ) (command.ControlFlow keyword:<Id.ControlFlow_Exit exit> arg_word:{<1>}) ] spids: [1829 1836] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(DQ <'Cluster successfully restored!'>)}] redirects: [] do_fork: T ) ] )