(CommandList
  children: [
    (C {(set)} {(-o)} {(errexit)})
    (C {(set)} {(-o)} {(nounset)})
    (C {(set)} {(-o)} {(pipefail)})
    (FuncDef
      name: check_for_ppa
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:repo)
                  op: Equal
                  rhs: {(DQ ($ VSub_Number "$1"))}
                  spids: [76]
                )
              ]
              spids: [74]
            )
            (C {(grep)} {(-qsw)} {($ VSub_Name "$repo")} {(/etc/apt/sources.list)} 
              {(/etc/apt/sources.list.d/) (Lit_Other "*")}
            )
          ]
          spids: [71]
        )
      spids: [65 70]
    )
    (FuncDef
      name: package_status
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:pkgname)
                  op: Equal
                  rhs: {($ VSub_Number "$1")}
                  spids: [107]
                )
              ]
              spids: [105]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [(assign_pair lhs:(LhsName name:pkgstatus) op:Equal spids:[113])]
              spids: [111]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:pkgstatus)
                  op: Equal
                  rhs: 
                    {
                      (CommandSubPart
                        command_list: 
                          (CommandList
                            children: [
                              (C {(dpkg-query)} {(-W)} 
                                {(--showformat) (Lit_Other "=") (SQ <"${Status}\\n">)} {(DQ (${ VSub_Name pkgname))}
                              )
                            ]
                          )
                        left_token: <Left_CommandSub "$(">
                        spids: [117 133]
                      )
                    }
                  spids: [116]
                )
              ]
              spids: [116]
            )
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (DBracket
                          expr: 
                            (BoolBinary
                              op_id: BoolBinary_GlobNEqual
                              left: {(DQ (${ VSub_Name pkgstatus))}
                              right: {(DQ ("install ok installed"))}
                            )
                        )
                      terminator: <Op_Semi ";">
                    )
                  ]
                  action: [
                    (C {(echo)} {(DQ ("Missing package ") (${ VSub_Name pkgname))})
                    (C {(sudo)} {(apt-get)} {(--force-yes)} {(--yes)} {(install)} {(${ VSub_Name pkgname)})
                  ]
                  spids: [-1 155]
                )
              ]
              spids: [-1 183]
            )
          ]
          spids: [102]
        )
      spids: [96 101]
    )
    (FuncDef
      name: gather_installation_reqs
      body: 
        (BraceGroup
          children: [
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: (Pipeline children:[(C {(check_for_ppa)} {(DQ (juju))})] negated:True)
                      terminator: <Op_Semi ";">
                    )
                  ]
                  action: [
                    (C {(echo)} {(DQ ("... Detected missing dependencies.. running"))})
                    (C {(echo)} {(DQ ("... add-apt-repository ppa:juju/stable"))})
                    (C {(sudo)} {(add-apt-repository)} {(-y)} {(ppa) (Lit_Other ":") (juju/stable)})
                    (C {(sudo)} {(apt-get)} {(update)})
                  ]
                  spids: [-1 208]
                )
              ]
              spids: [-1 243]
            )
            (C {(package_status)} {(SQ <juju>)})
            (C {(package_status)} {(SQ <charm-tools>)})
          ]
          spids: [194]
        )
      spids: [188 193]
    )
  ]
)