(command.CommandList
  children: [
    (C {(Id.KW_Set set)} {(-e)})
    (C {(.)} {($ Id.VSub_DollarName '$REPO_ROOT') (/bootstrap/shared/shared_functions.sh)})
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:REQUIRED_VARS)
          op: assign_op.Equal
          rhs: 
            {
              (sh_array_literal
                left: (Token id:Id.Op_LParen val:'(' span_id:18)
                words: [{(BOOTSTRAP_CHEF_ENV)} {(REPO_ROOT)}]
              )
            }
          spids: [17]
        )
      ]
    )
    (C {(check_for_envvars)} 
      {
        (braced_var_sub
          token: (Token id:Id.VSub_Name val:REQUIRED_VARS span_id:29)
          bracket_op: (bracket_op.WholeArray op_id:Id.Lit_At)
        )
      }
    )
    (C {(cd)} {($ Id.VSub_DollarName '$REPO_ROOT') (/bootstrap/vagrant_scripts)})
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:KNIFE)
          op: assign_op.Equal
          rhs: {(/opt/opscode/embedded/bin/knife)}
          spids: [42]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:DATA_BAG)
          op: assign_op.Equal
          rhs: 
            {
              (command_sub
                left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:49)
                command_list: 
                  (command.CommandList
                    children: [
                      (C {(vagrant)} {(ssh)} {(vm-bootstrap)} {(-c)} 
                        {
                          (DQ ($ Id.VSub_DollarName '$KNIFE') (' data bag show configs ') 
                            ($ Id.VSub_DollarName '$BOOTSTRAP_CHEF_ENV') (' -F yaml')
                          )
                        }
                      )
                    ]
                  )
              )
            }
          spids: [48]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:MANAGEMENT_VIP)
          op: assign_op.Equal
          rhs: 
            {
              (command_sub
                left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:70)
                command_list: 
                  (command.CommandList
                    children: [
                      (C {(vagrant)} {(ssh)} {(vm-bootstrap)} {(-c)} 
                        {
                          (DQ ($ Id.VSub_DollarName '$KNIFE') (' environment show ') 
                            ($ Id.VSub_DollarName '$BOOTSTRAP_CHEF_ENV') (" -a override_attributes.bcpc.management.vip | tail -n +2 | awk '{ print ") 
                            (word_part.EscapedLiteral
                              token: (Token id:Id.Lit_EscapedChar val:'\\$' span_id:84)
                            ) ("2 }'")
                          )
                        }
                      )
                    ]
                  )
              )
            }
          spids: [69]
        )
      ]
    )
    (command.ShFunction
      name: extract_value
      body: 
        (command.BraceGroup
          children: [
            (command.Pipeline
              children: [
                (C {(echo)} {(DQ ($ Id.VSub_DollarName '$DATA_BAG'))})
                (C {(grep)} {(DQ ($ Id.VSub_Number '$1') (':'))})
                (C {(awk)} {(SQ (Token id:Id.Lit_Chars val:'{ print $2 }' span_id:123))})
                (C {(tr)} {(-d)} {(SQ (Token id:Id.Lit_Chars val:'\\r\\n' span_id:133))})
              ]
              negated: F
            )
          ]
        )
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:ROOT_PASSWORD)
          op: assign_op.Equal
          rhs: 
            {
              (command_sub
                left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:143)
                command_list: 
                  (command.CommandList
                    children: [
                      (C {(extract_value)} 
                        {(SQ (Token id:Id.Lit_Chars val:cobbler-root-password span_id:147))}
                      )
                    ]
                  )
              )
            }
          spids: [142]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:MYSQL_ROOT_PASSWORD)
          op: assign_op.Equal
          rhs: 
            {
              (command_sub
                left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:152)
                command_list: 
                  (command.CommandList
                    children: [
                      (C {(extract_value)} 
                        {(SQ (Token id:Id.Lit_Chars val:mysql-root-password span_id:156))}
                      )
                    ]
                  )
              )
            }
          spids: [151]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:RABBITMQ_USER)
          op: assign_op.Equal
          rhs: 
            {
              (command_sub
                left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:161)
                command_list: 
                  (command.CommandList
                    children: [
                      (C {(extract_value)} {(SQ (Token id:Id.Lit_Chars val:rabbitmq-user span_id:165))})
                    ]
                  )
              )
            }
          spids: [160]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:RABBITMQ_PASSWORD)
          op: assign_op.Equal
          rhs: 
            {
              (command_sub
                left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:170)
                command_list: 
                  (command.CommandList
                    children: [
                      (C {(extract_value)} 
                        {(SQ (Token id:Id.Lit_Chars val:rabbitmq-password span_id:174))}
                      )
                    ]
                  )
              )
            }
          spids: [169]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:HAPROXY_USER)
          op: assign_op.Equal
          rhs: 
            {
              (command_sub
                left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:179)
                command_list: 
                  (command.CommandList
                    children: [
                      (C {(extract_value)} 
                        {(SQ (Token id:Id.Lit_Chars val:haproxy-stats-user span_id:183))}
                      )
                    ]
                  )
              )
            }
          spids: [178]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:HAPROXY_PASSWORD)
          op: assign_op.Equal
          rhs: 
            {
              (command_sub
                left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:188)
                command_list: 
                  (command.CommandList
                    children: [
                      (C {(extract_value)} 
                        {(SQ (Token id:Id.Lit_Chars val:haproxy-stats-password span_id:192))}
                      )
                    ]
                  )
              )
            }
          spids: [187]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:KEYSTONE_ADMIN_USER)
          op: assign_op.Equal
          rhs: 
            {
              (command_sub
                left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:197)
                command_list: 
                  (command.CommandList
                    children: [
                      (C {(extract_value)} 
                        {(SQ (Token id:Id.Lit_Chars val:keystone-admin-user span_id:201))}
                      )
                    ]
                  )
              )
            }
          spids: [196]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:KEYSTONE_ADMIN_PASSWORD)
          op: assign_op.Equal
          rhs: 
            {
              (command_sub
                left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:206)
                command_list: 
                  (command.CommandList
                    children: [
                      (C {(extract_value)} 
                        {(SQ (Token id:Id.Lit_Chars val:keystone-admin-password span_id:210))}
                      )
                    ]
                  )
              )
            }
          spids: [205]
        )
      ]
    )
    (C {(echo)} {(DQ (------------------------------------------------------------))})
    (C {(echo)} {(DQ ("Everything looks like it's been installed successfully!"))})
    (C {(echo)})
    (C {(echo)} 
      {(DQ ('Access the BCPC landing page at https://') ($ Id.VSub_DollarName '$MANAGEMENT_VIP'))}
    )
    (C {(echo)} {(DQ ('Use these users and passwords to access the different resources:'))})
    (C {(echo)})
    (C {(echo)} 
      {
        (DQ ('Horizon: ') ($ Id.VSub_DollarName '$KEYSTONE_ADMIN_USER') (' / ') 
          ($ Id.VSub_DollarName '$KEYSTONE_ADMIN_PASSWORD')
        )
      }
    )
    (C {(echo)} 
      {
        (DQ ('HAProxy: ') ($ Id.VSub_DollarName '$HAPROXY_USER') (' / ') 
          ($ Id.VSub_DollarName '$HAPROXY_PASSWORD')
        )
      }
    )
    (C {(echo)} 
      {
        (DQ ('RabbitMQ: ') ($ Id.VSub_DollarName '$RABBITMQ_USER') (' / ') 
          ($ Id.VSub_DollarName '$RABBITMQ_PASSWORD')
        )
      }
    )
    (C {(echo)})
    (C {(echo)} {(DQ ('Here are a few additional passwords:'))})
    (C {(echo)} {(DQ ('System root password: ') ($ Id.VSub_DollarName '$ROOT_PASSWORD'))})
    (C {(echo)} {(DQ ('MySQL root password: ') ($ Id.VSub_DollarName '$MYSQL_ROOT_PASSWORD'))})
    (C {(echo)})
    (C {(echo)} {(DQ ('Thanks for using BCPC!'))})
  ]
)