(CommandList
  children: [
    (FuncDef
      name: launchmaster
      body: 
        (BraceGroup
          children: [
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (DBracket
                          expr: 
                            (LogicalNot
                              child: (BoolUnary op_id:BoolUnary_e child:{(/redis-master-data)})
                            )
                        )
                      terminator: <Op_Semi ';'>
                    )
                  ]
                  action: [
                    (C {(echo)} {(DQ ("Redis master data doesn't exist, data won't be persistent!"))})
                    (C {(mkdir)} {(/redis-master-data)})
                  ]
                  spids: [16777215 66]
                )
              ]
              spids: [16777215 81]
            )
            (C {(redis-server)} {(/redis-master/redis.conf)} {(--protected-mode)} {(no)})
          ]
          spids: [50]
        )
      spids: [44 49]
    )
    (FuncDef
      name: launchsentinel
      body: 
        (BraceGroup
          children: [
            (While
              cond: [(Sentence child:(C {(true)}) terminator:<Op_Semi ';'>)]
              body: 
                (DoGroup
                  children: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:master)
                          op: Equal
                          rhs: 
                            {
                              (CommandSubPart
                                command_list: 
                                  (CommandList
                                    children: [
                                      (Pipeline
                                        children: [
                                          (C {(redis-cli)} {(-h)} 
                                            {(${ VSub_Name REDIS_SENTINEL_SERVICE_HOST)} {(-p)} {(${ VSub_Name REDIS_SENTINEL_SERVICE_PORT)} {(--csv)} {(SENTINEL)} {(get-master-addr-by-name)} 
                                            {(mymaster)}
                                          )
                                          (C {(tr)} {(SQ <','>)} {(SQ <' '>)})
                                          (C {(cut)} {(-d) (SQ <' '>)} {(-f1)})
                                        ]
                                        negated: False
                                      )
                                    ]
                                  )
                                left_token: <Left_CommandSub '$('>
                                spids: [113 158]
                              )
                            }
                          spids: [112]
                        )
                      ]
                      spids: [112]
                    )
                    (If
                      arms: [
                        (if_arm
                          cond: [
                            (Sentence
                              child: 
                                (DBracket
                                  expr: (BoolUnary op_id:BoolUnary_n child:{(${ VSub_Name master)})
                                )
                              terminator: <Op_Semi ';'>
                            )
                          ]
                          action: [
                            (Assignment
                              keyword: Assign_None
                              pairs: [
                                (assign_pair
                                  lhs: (LhsName name:master)
                                  op: Equal
                                  rhs: 
                                    {
                                      (DQ 
                                        (BracedVarSub
                                          token: <VSub_Name master>
                                          suffix_op: 
                                            (PatSub
                                              pat: {(EscapedLiteralPart token:<Lit_EscapedChar '\\"'>)}
                                              do_all: True
                                              do_prefix: False
                                              do_suffix: False
                                            )
                                          spids: [179 184]
                                        )
                                      )
                                    }
                                  spids: [177]
                                )
                              ]
                              spids: [177]
                            )
                          ]
                          spids: [16777215 174]
                        )
                      ]
                      else_action: [
                        (Assignment
                          keyword: Assign_None
                          pairs: [
                            (assign_pair
                              lhs: (LhsName name:master)
                              op: Equal
                              rhs: 
                                {
                                  (CommandSubPart
                                    command_list: (CommandList children:[(C {(hostname)} {(-i)})])
                                    left_token: <Left_CommandSub '$('>
                                    spids: [192 196]
                                  )
                                }
                              spids: [191]
                            )
                          ]
                          spids: [191]
                        )
                      ]
                      spids: [188 199]
                    )
                    (C {(redis-cli)} {(-h)} {(${ VSub_Name master)} {(INFO)})
                    (If
                      arms: [
                        (if_arm
                          cond: [
                            (Sentence
                              child: 
                                (DBracket
                                  expr: 
                                    (BoolBinary
                                      op_id: BoolBinary_GlobDEqual
                                      left: {(DQ ($ VSub_QMark '$?'))}
                                      right: {(DQ (0))}
                                    )
                                )
                              terminator: <Op_Semi ';'>
                            )
                          ]
                          action: [(ControlFlow token:<ControlFlow_Break break>)]
                          spids: [16777215 231]
                        )
                      ]
                      spids: [16777215 237]
                    )
                    (C {(echo)} {(DQ ('Connecting to master failed.  Waiting...'))})
                    (C {(sleep)} {(10)})
                  ]
                  spids: [109 252]
                )
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:sentinel_conf)
                  op: Equal
                  rhs: {(sentinel.conf)}
                  spids: [256]
                )
              ]
              spids: [256]
            )
            (SimpleCommand
              words: [{(echo)} {(DQ ('sentinel monitor mymaster ') (${ VSub_Name master) (' 6379 2'))}]
              redirects: [
                (Redir
                  op_id: Redir_Great
                  fd: 16777215
                  arg_word: {(${ VSub_Name sentinel_conf)}
                  spids: [271]
                )
              ]
            )
            (SimpleCommand
              words: [{(echo)} {(DQ ('sentinel down-after-milliseconds mymaster 60000'))}]
              redirects: [
                (Redir
                  op_id: Redir_DGreat
                  fd: 16777215
                  arg_word: {(${ VSub_Name sentinel_conf)}
                  spids: [284]
                )
              ]
            )
            (SimpleCommand
              words: [{(echo)} {(DQ ('sentinel failover-timeout mymaster 180000'))}]
              redirects: [
                (Redir
                  op_id: Redir_DGreat
                  fd: 16777215
                  arg_word: {(${ VSub_Name sentinel_conf)}
                  spids: [297]
                )
              ]
            )
            (SimpleCommand
              words: [{(echo)} {(DQ ('sentinel parallel-syncs mymaster 1'))}]
              redirects: [
                (Redir
                  op_id: Redir_DGreat
                  fd: 16777215
                  arg_word: {(${ VSub_Name sentinel_conf)}
                  spids: [310]
                )
              ]
            )
            (SimpleCommand
              words: [{(echo)} {(DQ ('bind 0.0.0.0'))}]
              redirects: [
                (Redir
                  op_id: Redir_DGreat
                  fd: 16777215
                  arg_word: {(${ VSub_Name sentinel_conf)}
                  spids: [323]
                )
              ]
            )
            (C {(redis-sentinel)} {(${ VSub_Name sentinel_conf)} {(--protected-mode)} {(no)})
          ]
          spids: [101]
        )
      spids: [95 100]
    )
    (FuncDef
      name: launchslave
      body: 
        (BraceGroup
          children: [
            (While
              cond: [(Sentence child:(C {(true)}) terminator:<Op_Semi ';'>)]
              body: 
                (DoGroup
                  children: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:master)
                          op: Equal
                          rhs: 
                            {
                              (CommandSubPart
                                command_list: 
                                  (CommandList
                                    children: [
                                      (Pipeline
                                        children: [
                                          (C {(redis-cli)} {(-h)} 
                                            {(${ VSub_Name REDIS_SENTINEL_SERVICE_HOST)} {(-p)} {(${ VSub_Name REDIS_SENTINEL_SERVICE_PORT)} {(--csv)} {(SENTINEL)} {(get-master-addr-by-name)} 
                                            {(mymaster)}
                                          )
                                          (C {(tr)} {(SQ <','>)} {(SQ <' '>)})
                                          (C {(cut)} {(-d) (SQ <' '>)} {(-f1)})
                                        ]
                                        negated: False
                                      )
                                    ]
                                  )
                                left_token: <Left_CommandSub '$('>
                                spids: [362 407]
                              )
                            }
                          spids: [361]
                        )
                      ]
                      spids: [361]
                    )
                    (If
                      arms: [
                        (if_arm
                          cond: [
                            (Sentence
                              child: 
                                (DBracket
                                  expr: (BoolUnary op_id:BoolUnary_n child:{(${ VSub_Name master)})
                                )
                              terminator: <Op_Semi ';'>
                            )
                          ]
                          action: [
                            (Assignment
                              keyword: Assign_None
                              pairs: [
                                (assign_pair
                                  lhs: (LhsName name:master)
                                  op: Equal
                                  rhs: 
                                    {
                                      (DQ 
                                        (BracedVarSub
                                          token: <VSub_Name master>
                                          suffix_op: 
                                            (PatSub
                                              pat: {(EscapedLiteralPart token:<Lit_EscapedChar '\\"'>)}
                                              do_all: True
                                              do_prefix: False
                                              do_suffix: False
                                            )
                                          spids: [428 433]
                                        )
                                      )
                                    }
                                  spids: [426]
                                )
                              ]
                              spids: [426]
                            )
                          ]
                          spids: [16777215 423]
                        )
                      ]
                      else_action: [
                        (C {(echo)} {(DQ ('Failed to find master.'))})
                        (C {(sleep)} {(60)})
                        (C {(exit)} {(1)})
                      ]
                      spids: [437 457]
                    )
                    (C {(redis-cli)} {(-h)} {(${ VSub_Name master)} {(INFO)})
                    (If
                      arms: [
                        (if_arm
                          cond: [
                            (Sentence
                              child: 
                                (DBracket
                                  expr: 
                                    (BoolBinary
                                      op_id: BoolBinary_GlobDEqual
                                      left: {(DQ ($ VSub_QMark '$?'))}
                                      right: {(DQ (0))}
                                    )
                                )
                              terminator: <Op_Semi ';'>
                            )
                          ]
                          action: [(ControlFlow token:<ControlFlow_Break break>)]
                          spids: [16777215 489]
                        )
                      ]
                      spids: [16777215 495]
                    )
                    (C {(echo)} {(DQ ('Connecting to master failed.  Waiting...'))})
                    (C {(sleep)} {(10)})
                  ]
                  spids: [358 510]
                )
            )
            (C {(sed)} {(-i)} {(DQ ('s/%master-ip%/') (${ VSub_Name master) (/))} 
              {(/redis-slave/redis.conf)}
            )
            (C {(sed)} {(-i)} {(DQ ('s/%master-port%/6379/'))} {(/redis-slave/redis.conf)})
            (C {(redis-server)} {(/redis-slave/redis.conf)} {(--protected-mode)} {(no)})
          ]
          spids: [350]
        )
      spids: [344 349]
    )
    (If
      arms: [
        (if_arm
          cond: [
            (Sentence
              child: 
                (DBracket
                  expr: 
                    (BoolBinary
                      op_id: BoolBinary_GlobDEqual
                      left: {(DQ (${ VSub_Name MASTER))}
                      right: {(DQ (true))}
                    )
                )
              terminator: <Op_Semi ';'>
            )
          ]
          action: [(C {(launchmaster)}) (C {(exit)} {(0)})]
          spids: [16777215 569]
        )
      ]
      spids: [16777215 579]
    )
    (If
      arms: [
        (if_arm
          cond: [
            (Sentence
              child: 
                (DBracket
                  expr: 
                    (BoolBinary
                      op_id: BoolBinary_GlobDEqual
                      left: {(DQ (${ VSub_Name SENTINEL))}
                      right: {(DQ (true))}
                    )
                )
              terminator: <Op_Semi ';'>
            )
          ]
          action: [(C {(launchsentinel)}) (C {(exit)} {(0)})]
          spids: [16777215 601]
        )
      ]
      spids: [16777215 611]
    )
    (C {(launchslave)})
  ]
)