func newTaskRunOpts()

in internal/pkg/cli/task_run.go [192:263]


func newTaskRunOpts(vars runTaskVars) (*runTaskOpts, error) {
	sessProvider := sessions.ImmutableProvider(sessions.UserAgentExtras("task run"))
	defaultSess, err := sessProvider.Default()
	if err != nil {
		return nil, fmt.Errorf("default session: %v", err)
	}

	prompter := prompt.New()
	store := config.NewSSMStore(identity.New(defaultSess), ssm.New(defaultSess), aws.StringValue(defaultSess.Config.Region))
	opts := runTaskOpts{
		runTaskVars: vars,

		fs:                    &afero.Afero{Fs: afero.NewOsFs()},
		store:                 store,
		prompt:                prompter,
		sel:                   selector.NewAppEnvSelector(prompter, store),
		spinner:               termprogress.NewSpinner(log.DiagnosticWriter),
		provider:              sessProvider,
		secretsManagerSecrets: make(map[string]string),
		ssmParamSecrets:       make(map[string]string),
	}

	opts.configureRuntimeOpts = func() error {
		opts.runner, err = opts.configureRunner()
		if err != nil {
			return fmt.Errorf("configure task runner: %w", err)
		}
		opts.deployer = cloudformation.New(opts.sess, cloudformation.WithProgressTracker(os.Stderr))
		opts.defaultClusterGetter = awsecs.New(opts.sess)
		opts.publicIPGetter = ec2.New(opts.sess)
		return nil
	}

	opts.configureRepository = func() error {
		repoName := fmt.Sprintf(deploy.FmtTaskECRRepoName, opts.groupName)
		opts.repository = repository.New(ecr.New(opts.sess), repoName)
		return nil
	}

	opts.configureEventsWriter = func(tasks []*task.Task) {
		opts.eventsWriter = logging.NewTaskClient(opts.sess, opts.groupName, tasks)
	}

	opts.configureECSServiceDescriber = func(session *session.Session) ecs.ECSServiceDescriber {
		return awsecs.New(session)
	}
	opts.configureServiceDescriber = func(session *session.Session) ecs.ServiceDescriber {
		return ecs.New(session)
	}
	opts.configureJobDescriber = func(session *session.Session) ecs.JobDescriber {
		return ecs.New(session)
	}
	opts.configureUploader = func(session *session.Session) uploader {
		return s3.New(session)
	}
	opts.envCompatibilityChecker = func(app, env string) (versionCompatibilityChecker, error) {
		envDescriber, err := describe.NewEnvDescriber(describe.NewEnvDescriberConfig{
			App:         app,
			Env:         env,
			ConfigStore: opts.store,
		})
		if err != nil {
			return nil, fmt.Errorf("new environment compatibility checker: %v", err)
		}
		return envDescriber, nil
	}

	opts.runTaskRequestFromECSService = ecs.RunTaskRequestFromECSService
	opts.runTaskRequestFromService = ecs.RunTaskRequestFromService
	opts.runTaskRequestFromJob = ecs.RunTaskRequestFromJob
	return &opts, nil
}