def main()

in src/main/scala/com/gu/ssm/Main.scala [13:43]


  def main(args: Array[String]): Unit = {
    val (result, verbose) = argParser.parse(args, Arguments.empty()) match {
      case Some(Arguments(verbose, Some(executionTarget), toExecuteOpt, profile, region, Some(mode), Some(user), sism, _, _, onlyUsePrivateIP, rawOutput, bastionInstanceIdOpt, bastionPortNumberOpt, Some(bastionUser), targetInstancePortNumberOpt, useAgent, preferredAlgs, sourceFileOpt, targetFileOpt, tunnelThroughSystemsManager, useDefaultCredentialsProvider, tunnelTarget, rdsTunnelTarget)) =>
        val awsClients = Logic.getClients(profile, region, useDefaultCredentialsProvider)
        val r = mode match {
          case SsmRepl =>
            new InteractiveProgram(awsClients).main(profile, region, executionTarget)
            ProgramResult(Nil)
          case SsmCmd =>
            toExecuteOpt match {
              case Some(toExecute) => execute(awsClients, executionTarget, user, toExecute)
              case _ => fail
            }
          case SsmSsh => bastionInstanceIdOpt match {
            case None => setUpStandardSSH(awsClients, executionTarget, user, sism, onlyUsePrivateIP, rawOutput, targetInstancePortNumberOpt, preferredAlgs, useAgent, profile, region, tunnelThroughSystemsManager, tunnelTarget.orElse(rdsTunnelTarget))
            case Some(bastionInstance) => setUpBastionSSH(awsClients, executionTarget, user, sism, onlyUsePrivateIP, rawOutput, bastionInstance, bastionPortNumberOpt, bastionUser, targetInstancePortNumberOpt, useAgent, preferredAlgs)
          }
          case SsmScp => (sourceFileOpt, targetFileOpt) match {
            case (Some(sourceFile), Some(targetFile)) => setUpStandardScp(awsClients, executionTarget, user, sism, onlyUsePrivateIP, rawOutput, targetInstancePortNumberOpt, preferredAlgs, useAgent, sourceFile, targetFile, profile, region, tunnelThroughSystemsManager)
            case _ => fail
          }
        }
        r -> verbose
      case Some(_) => fail -> false
      case None => ProgramResult(Nil, Some(ArgumentsError)) -> false // parsing cmd line args failed, help message will have been displayed
    }

    val ui = new UI(verbose)
    ui.printAll(result.output)
    System.exit(result.nonZeroExitCode.map(_.code).getOrElse(0))
  }