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))
}