(CommandList
  children: [
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:KUBECTL)
          op: Equal
          rhs: 
            {
              (BracedVarSub
                token: <VSub_Name KUBECTL_BIN>
                suffix_op: 
                  (StringUnary
                    op_id: VTest_ColonHyphen
                    arg_word: 
                      {(Lit_Slash /) (usr) (Lit_Slash /) (local) (Lit_Slash /) (bin) (Lit_Slash /) 
                        (kubectl)
                      }
                  )
                spids: [86 97]
              )
            }
          spids: [85]
        )
      ]
      spids: [85]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:KUBECTL_OPTS)
          op: Equal
          rhs: 
            {
              (BracedVarSub
                token: <VSub_Name KUBECTL_OPTS>
                suffix_op: (StringUnary op_id:VTest_ColonHyphen arg_word:{})
                spids: [100 103]
              )
            }
          spids: [99]
        )
      ]
      spids: [99]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:ADDON_CHECK_INTERVAL_SEC)
          op: Equal
          rhs: 
            {
              (BracedVarSub
                token: <VSub_Name TEST_ADDON_CHECK_INTERVAL_SEC>
                suffix_op: (StringUnary op_id:VTest_ColonHyphen arg_word:{(60)})
                spids: [107 111]
              )
            }
          spids: [106]
        )
      ]
      spids: [106]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:ADDON_PATH)
          op: Equal
          rhs: 
            {
              (BracedVarSub
                token: <VSub_Name ADDON_PATH>
                suffix_op: 
                  (StringUnary
                    op_id: VTest_ColonHyphen
                    arg_word: {(Lit_Slash /) (etc) (Lit_Slash /) (kubernetes) (Lit_Slash /) (addons)}
                  )
                spids: [114 123]
              )
            }
          spids: [113]
        )
      ]
      spids: [113]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:SYSTEM_NAMESPACE)
          op: Equal
          rhs: {(kube-system)}
          spids: [126]
        )
      ]
      spids: [126]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:ADDON_MANAGER_LABEL)
          op: Equal
          rhs: {(DQ (addonmanager.kubernetes.io/mode))}
          spids: [139]
        )
      ]
      spids: [139]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:CLUSTER_SERVICE_LABEL)
          op: Equal
          rhs: {(DQ (kubernetes.io/cluster-service))}
          spids: [156]
        )
      ]
      spids: [156]
    )
    (FuncDef
      name: log
      body: 
        (BraceGroup
          children: [
            (Case
              to_match: {($ VSub_Number "$1")}
              arms: [
                (case_arm pat_list:[{(DB3)}] spids:[199201207-1])
                (case_arm pat_list:[{(DB2)}] spids:[210212218-1])
                (case_arm pat_list:[{(DBG)}] spids:[221223229-1])
                (case_arm
                  pat_list: [{(INFO)}]
                  action: [(C {(echo)} {(DQ ($ VSub_Number "$1") (": ") ($ VSub_Number "$2"))})]
                  spids: [232 234 246 -1]
                )
                (case_arm
                  pat_list: [{(WRN)}]
                  action: [(C {(echo)} {(DQ ($ VSub_Number "$1") (": ") ($ VSub_Number "$2"))})]
                  spids: [249 251 263 -1]
                )
                (case_arm
                  pat_list: [{(ERR)}]
                  action: [(C {(echo)} {(DQ ($ VSub_Number "$1") (": ") ($ VSub_Number "$2"))})]
                  spids: [266 268 280 -1]
                )
                (case_arm
                  pat_list: [{(Lit_Other "*")}]
                  action: [
                    (C {(echo)} 
                      {(DQ ("INVALID_LOG_LEVEL ") ($ VSub_Number "$1") (": ") ($ VSub_Number "$2"))}
                    )
                  ]
                  spids: [283 285 298 -1]
                )
              ]
              spids: [192 196 301]
            )
          ]
          spids: [180]
        )
      spids: [174 179]
    )
    (FuncDef
      name: start_addon
      body: 
        (BraceGroup
          children: [
            (Sentence
              child: 
                (Assignment
                  keyword: Assign_Local
                  flags: ["'-r'"]
                  pairs: [
                    (assign_pair
                      lhs: (LhsName name:addon_filename)
                      op: Equal
                      rhs: {($ VSub_Number "$1")}
                      spids: [331]
                    )
                  ]
                  spids: [327]
                )
              terminator: <Op_Semi ";">
            )
            (Sentence
              child: 
                (Assignment
                  keyword: Assign_Local
                  flags: ["'-r'"]
                  pairs: [
                    (assign_pair
                      lhs: (LhsName name:tries)
                      op: Equal
                      rhs: {($ VSub_Number "$2")}
                      spids: [340]
                    )
                  ]
                  spids: [336]
                )
              terminator: <Op_Semi ";">
            )
            (Sentence
              child: 
                (Assignment
                  keyword: Assign_Local
                  flags: ["'-r'"]
                  pairs: [
                    (assign_pair
                      lhs: (LhsName name:delay)
                      op: Equal
                      rhs: {($ VSub_Number "$3")}
                      spids: [349]
                    )
                  ]
                  spids: [345]
                )
              terminator: <Op_Semi ";">
            )
            (Assignment
              keyword: Assign_Local
              flags: ["'-r'"]
              pairs: [
                (assign_pair
                  lhs: (LhsName name:namespace)
                  op: Equal
                  rhs: {($ VSub_Number "$4")}
                  spids: [358]
                )
              ]
              spids: [354]
            )
            (C {(create_resource_from_string)} 
              {
                (DQ 
                  (CommandSubPart
                    command_list: 
                      (CommandList
                        children: [(C {(cat)} {(${ VSub_Name addon_filename)})]
                      )
                    left_token: <Left_CommandSub "$(">
                    spids: [366 372]
                  )
                )
              } {(DQ (${ VSub_Name tries))} {(DQ (${ VSub_Name delay))} {(DQ (${ VSub_Name addon_filename))} 
              {(DQ (${ VSub_Name namespace))}
            )
          ]
          spids: [324]
        )
      spids: [318 323]
    )
    (FuncDef
      name: create_resource_from_string
      body: 
        (BraceGroup
          children: [
            (Sentence
              child: 
                (Assignment
                  keyword: Assign_Local
                  flags: ["'-r'"]
                  pairs: [
                    (assign_pair
                      lhs: (LhsName name:config_string)
                      op: Equal
                      rhs: {($ VSub_Number "$1")}
                      spids: [430]
                    )
                  ]
                  spids: [426]
                )
              terminator: <Op_Semi ";">
            )
            (Sentence
              child: 
                (Assignment
                  keyword: Assign_Local
                  pairs: [
                    (assign_pair
                      lhs: (LhsName name:tries)
                      op: Equal
                      rhs: {($ VSub_Number "$2")}
                      spids: [437]
                    )
                  ]
                  spids: [435]
                )
              terminator: <Op_Semi ";">
            )
            (Sentence
              child: 
                (Assignment
                  keyword: Assign_Local
                  flags: ["'-r'"]
                  pairs: [
                    (assign_pair
                      lhs: (LhsName name:delay)
                      op: Equal
                      rhs: {($ VSub_Number "$3")}
                      spids: [446]
                    )
                  ]
                  spids: [442]
                )
              terminator: <Op_Semi ";">
            )
            (Sentence
              child: 
                (Assignment
                  keyword: Assign_Local
                  flags: ["'-r'"]
                  pairs: [
                    (assign_pair
                      lhs: (LhsName name:config_name)
                      op: Equal
                      rhs: {($ VSub_Number "$4")}
                      spids: [455]
                    )
                  ]
                  spids: [451]
                )
              terminator: <Op_Semi ";">
            )
            (Sentence
              child: 
                (Assignment
                  keyword: Assign_Local
                  flags: ["'-r'"]
                  pairs: [
                    (assign_pair
                      lhs: (LhsName name:namespace)
                      op: Equal
                      rhs: {($ VSub_Number "$5")}
                      spids: [464]
                    )
                  ]
                  spids: [460]
                )
              terminator: <Op_Semi ";">
            )
            (While
              cond: [
                (Sentence
                  child: (C {(Lit_Other "[")} {(${ VSub_Name tries)} {(-gt)} {(0)} {(Lit_Other "]")})
                  terminator: <Op_Semi ";">
                )
              ]
              body: 
                (DoGroup
                  children: [
                    (Sentence
                      child: 
                        (AndOr
                          children: [
                            (Pipeline
                              children: [
                                (C {(echo)} {(DQ (${ VSub_Name config_string))})
                                (C {(${ VSub_Name KUBECTL)} {(${ VSub_Name KUBECTL_OPTS)} 
                                  {(--namespace) (Lit_Other "=") (DQ (${ VSub_Name namespace))} {(apply)} {(-f)} {(-)}
                                )
                              ]
                              negated: False
                            )
                            (AndOr
                              children: [
                                (C {(log)} {(INFO)} 
                                  {
                                    (DQ ("== Successfully started ") (${ VSub_Name config_name) 
                                      (" in namespace ") (${ VSub_Name namespace) (" at ") 
                                      (CommandSubPart
                                        command_list: (CommandList children:[(C {(date)} {(-Is)})])
                                        left_token: <Left_CommandSub "$(">
                                        spids: [537 541]
                                      )
                                    )
                                  }
                                )
                                (ControlFlow
                                  token: <ControlFlow_Return return>
                                  arg_word: {(0)}
                                )
                              ]
                              op_id: Op_DAmp
                            )
                          ]
                          op_id: Op_DAmp
                        )
                      terminator: <Op_Semi ";">
                    )
                    (Sentence
                      child: (C {(let)} {(Lit_VarLike "tries=") (tries-1)})
                      terminator: <Op_Semi ";">
                    )
                    (C {(log)} {(WRN)} 
                      {
                        (DQ ("== Failed to start ") (${ VSub_Name config_name) (" in namespace ") 
                          (${ VSub_Name namespace) (" at ") 
                          (CommandSubPart
                            command_list: (CommandList children:[(C {(date)} {(-Is)})])
                            left_token: <Left_CommandSub "$(">
                            spids: [575 579]
                          ) (". ") (${ VSub_Name tries) (" tries remaining. ==")
                        )
                      }
                    )
                    (Sentence
                      child: (C {(sleep)} {(${ VSub_Name delay)})
                      terminator: <Op_Semi ";">
                    )
                  ]
                  spids: [484 596]
                )
            )
            (Sentence
              child: (ControlFlow token:<ControlFlow_Return return> arg_word:{(1)})
              terminator: <Op_Semi ";">
            )
          ]
          spids: [423]
        )
      spids: [417 422]
    )
    (FuncDef
      name: reconcile_addons
      body: 
        (BraceGroup
          children: [
            (C {(log)} {(INFO)} {(DQ ("== Reconciling with deprecated label =="))})
            (Pipeline
              children: [
                (C {(${ VSub_Name KUBECTL)} {(${ VSub_Name KUBECTL_OPTS)} {(apply)} 
                  {(--namespace) (Lit_Other "=") (${ VSub_Name SYSTEM_NAMESPACE)} {(-f)} {(${ VSub_Name ADDON_PATH)} {(-l)} 
                  {(${ VSub_Name CLUSTER_SERVICE_LABEL) (Lit_Other "=") (true) (Lit_Comma ",") 
                    (${ VSub_Name ADDON_MANAGER_LABEL) (KW_Bang "!") (Lit_Other "=") (EnsureExists)
                  } {(--prune) (Lit_Other "=") (true)} {(--recursive)}
                )
                (C {(grep)} {(-v)} {(configured)})
              ]
              negated: False
            )
            (C {(log)} {(INFO)} {(DQ ("== Reconciling with addon-manager label =="))})
            (Pipeline
              children: [
                (C {(${ VSub_Name KUBECTL)} {(${ VSub_Name KUBECTL_OPTS)} {(apply)} 
                  {(--namespace) (Lit_Other "=") (${ VSub_Name SYSTEM_NAMESPACE)} {(-f)} {(${ VSub_Name ADDON_PATH)} {(-l)} 
                  {(${ VSub_Name CLUSTER_SERVICE_LABEL) (KW_Bang "!") (Lit_Other "=") (true) 
                    (Lit_Comma ",") (${ VSub_Name ADDON_MANAGER_LABEL) (Lit_Other "=") (Reconcile)
                  } {(--prune) (Lit_Other "=") (true)} {(--recursive)}
                )
                (C {(grep)} {(-v)} {(configured)})
              ]
              negated: False
            )
            (C {(log)} {(INFO)} 
              {
                (DQ ("== Kubernetes addon reconcile completed at ") 
                  (CommandSubPart
                    command_list: (CommandList children:[(C {(date)} {(-Is)})])
                    left_token: <Left_CommandSub "$(">
                    spids: [774 778]
                  ) (" ==")
                )
              }
            )
          ]
          spids: [613]
        )
      spids: [607 612]
    )
    (FuncDef
      name: ensure_addons
      body: 
        (BraceGroup
          children: [
            (Pipeline
              children: [
                (SimpleCommand
                  words: [
                    {(${ VSub_Name KUBECTL)}
                    {(${ VSub_Name KUBECTL_OPTS)}
                    {(create)}
                    {(--namespace) (Lit_Other "=") (${ VSub_Name SYSTEM_NAMESPACE)}
                    {(-f)}
                    {(${ VSub_Name ADDON_PATH)}
                    {(-l)}
                    {(${ VSub_Name ADDON_MANAGER_LABEL) (Lit_Other "=") (EnsureExists)}
                    {(--recursive)}
                  ]
                  redirects: [(Redir op_id:Redir_GreatAnd fd:2 arg_word:{(1)} spids:[836])]
                )
                (C {(grep)} {(-v)} {(AlreadyExists)})
              ]
              negated: False
            )
            (C {(log)} {(INFO)} 
              {
                (DQ ("== Kubernetes addon ensure completed at ") 
                  (CommandSubPart
                    command_list: (CommandList children:[(C {(date)} {(-Is)})])
                    left_token: <Left_CommandSub "$(">
                    spids: [855 859]
                  ) (" ==")
                )
              }
            )
          ]
          spids: [791]
        )
      spids: [785 790]
    )
    (C {(log)} {(INFO)} 
      {
        (DQ ("== Kubernetes addon manager started at ") 
          (CommandSubPart
            command_list: (CommandList children:[(C {(date)} {(-Is)})])
            left_token: <Left_CommandSub "$(">
            spids: [881 885]
          ) (" with ADDON_CHECK_INTERVAL_SEC=") (${ VSub_Name ADDON_CHECK_INTERVAL_SEC) (" ==")
        )
      }
    )
    (Sentence
      child: (C {(start_addon)} {(/opt/namespace.yaml)} {(100)} {(10)} {(DQ )})
      terminator: <Op_Amp "&">
    )
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:token_found) op:Equal rhs:{(DQ )} spids:[914])]
      spids: [914]
    )
    (While
      cond: [
        (Sentence
          child: (C {(Lit_Other "[")} {(-z)} {(DQ (${ VSub_Name token_found))} {(Lit_Other "]")})
          terminator: <Op_Semi ";">
        )
      ]
      body: 
        (DoGroup
          children: [
            (C {(sleep)} {(.5)})
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:token_found)
                  op: Equal
                  rhs: 
                    {
                      (CommandSubPart
                        command_list: 
                          (CommandList
                            children: [
                              (C {(${ VSub_Name KUBECTL)} {(${ VSub_Name KUBECTL_OPTS)} {(get)} 
                                {(--namespace) (Lit_Other "=") (DQ (${ VSub_Name SYSTEM_NAMESPACE))} {(serviceaccount)} {(default)} {(-o)} 
                                {(go-template) (Lit_Other "=") 
                                  (DQ ("{{with index .secrets 0}}{{.name}}{{end}}"))
                                }
                              )
                            ]
                          )
                        left_token: <Left_CommandSub "$(">
                        spids: [942 972]
                      )
                    }
                  spids: [941]
                )
              ]
              spids: [941]
            )
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (DBracket
                          expr: (BoolBinary op_id:BoolBinary_ne left:{($ VSub_QMark "$?")} right:{(0)})
                        )
                      terminator: <Op_Semi ";">
                    )
                  ]
                  action: [
                    (Sentence
                      child: 
                        (Assignment
                          keyword: Assign_None
                          pairs: [
                            (assign_pair
                              lhs: (LhsName name:token_found)
                              op: Equal
                              rhs: {(DQ )}
                              spids: [991]
                            )
                          ]
                          spids: [991]
                        )
                      terminator: <Op_Semi ";">
                    )
                    (C {(log)} {(WRN)} 
                      {(DQ ("== Error getting default service account, retry in 0.5 second =="))}
                    )
                  ]
                  spids: [-1 988]
                )
              ]
              spids: [-1 1006]
            )
          ]
          spids: [933 1008]
        )
    )
    (C {(log)} {(INFO)} 
      {
        (DQ ("== Default service account in the ") (${ VSub_Name SYSTEM_NAMESPACE) 
          (" namespace has token ") (${ VSub_Name token_found) (" ==")
        )
      }
    )
    (ForEach
      iter_name: obj
      iter_words: [
        {
          (CommandSubPart
            command_list: 
              (CommandList
                children: [
                  (C {(find)} {(/etc/kubernetes/admission-controls)} 
                    {(EscapedLiteralPart token:<Lit_EscapedChar "\\(">)} {(-name)} {(EscapedLiteralPart token:<Lit_EscapedChar "\\*">) (.yaml)} {(-o)} {(-name)} 
                    {(EscapedLiteralPart token:<Lit_EscapedChar "\\*">) (.json)} {(EscapedLiteralPart token:<Lit_EscapedChar "\\)">)}
                  )
                ]
              )
            left_token: <Left_CommandSub "$(">
            spids: [1043 1063]
          )
        }
      ]
      do_arg_iter: False
      body: 
        (DoGroup
          children: [
            (Sentence
              child: (C {(start_addon)} {(DQ (${ VSub_Name obj))} {(100)} {(10)} {(default)})
              terminator: <Op_Amp "&">
            )
            (C {(log)} {(INFO)} {(DQ ("++ obj ") (${ VSub_Name obj) (" is created ++"))})
          ]
          spids: [1066 1098]
        )
      spids: [1042 1064]
    )
    (C {(log)} {(INFO)} 
      {
        (DQ ("== Entering periodical apply loop at ") 
          (CommandSubPart
            command_list: (CommandList children:[(C {(date)} {(-Is)})])
            left_token: <Left_CommandSub "$(">
            spids: [1116 1120]
          ) (" ==")
        )
      }
    )
    (While
      cond: [(Sentence child:(C {(true)}) terminator:<Op_Semi ";">)]
      body: 
        (DoGroup
          children: [
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:start_sec)
                  op: Equal
                  rhs: 
                    {
                      (CommandSubPart
                        command_list: 
                          (CommandList
                            children: [(C {(date)} {(Lit_Other "+") (DQ ("%s"))})]
                          )
                        left_token: <Left_CommandSub "$(">
                        spids: [1133 1140]
                      )
                    }
                  spids: [1132]
                )
              ]
              spids: [1132]
            )
            (C {(ensure_addons)})
            (C {(reconcile_addons)})
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:end_sec)
                  op: Equal
                  rhs: 
                    {
                      (CommandSubPart
                        command_list: 
                          (CommandList
                            children: [(C {(date)} {(Lit_Other "+") (DQ ("%s"))})]
                          )
                        left_token: <Left_CommandSub "$(">
                        spids: [1150 1157]
                      )
                    }
                  spids: [1149]
                )
              ]
              spids: [1149]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:len_sec)
                  op: Equal
                  rhs: 
                    {
                      (ArithSubPart
                        anode: 
                          (ArithBinary
                            op_id: Arith_Minus
                            left: (ArithWord w:{(${ VSub_Name end_sec)})
                            right: (ArithWord w:{(${ VSub_Name start_sec)})
                          )
                        spids: [1161 1170]
                      )
                    }
                  spids: [1160]
                )
              ]
              spids: [1160]
            )
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (DBracket
                          expr: 
                            (BoolBinary
                              op_id: BoolBinary_lt
                              left: {(${ VSub_Name len_sec)}
                              right: {(${ VSub_Name ADDON_CHECK_INTERVAL_SEC)}
                            )
                        )
                      terminator: <Op_Semi ";">
                    )
                  ]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:sleep_time)
                          op: Equal
                          rhs: 
                            {
                              (ArithSubPart
                                anode: 
                                  (ArithBinary
                                    op_id: Arith_Minus
                                    left: (ArithWord w:{(${ VSub_Name ADDON_CHECK_INTERVAL_SEC)})
                                    right: (ArithWord w:{(${ VSub_Name len_sec)})
                                  )
                                spids: [1198 1207]
                              )
                            }
                          spids: [1197]
                        )
                      ]
                      spids: [1197]
                    )
                    (C {(sleep)} {(${ VSub_Name sleep_time)})
                  ]
                  spids: [-1 1194]
                )
              ]
              spids: [-1 1217]
            )
          ]
          spids: [1129 1219]
        )
    )
  ]
)