in src/main/scala/com/gu/ssm/Main.scala [161:171]
private def execute(awsClients: AWSClients, executionTarget: ExecutionTarget, user: String, toExecute: String): ProgramResult = {
val fProgramResult = for {
config <- IO.getSSMConfig(awsClients.ec2Client, awsClients.stsClient, executionTarget)
_ <- Attempt.fromEither(Logic.checkInstancesList(config))
results <- IO.executeOnInstances(config.targets.map(i => i.id), user, toExecute, awsClients.ssmClient)
incorrectInstancesFromInstancesTag = Logic.computeIncorrectInstances(executionTarget, results.map(_._1))
} yield ResultsWithInstancesNotFound(results, incorrectInstancesFromInstancesTag)
val programResult = Await.result(fProgramResult.asFuture, Duration.Inf)
ProgramResult.convertErrorToResult(programResult.map(UI.output))
}