func newInitSvcOpts()

in internal/pkg/cli/svc_init.go [186:257]


func newInitSvcOpts(vars initSvcVars) (*initSvcOpts, error) {
	fs := afero.NewOsFs()
	ws, err := workspace.Use(fs)
	if err != nil {
		return nil, err
	}
	sessProvider := sessions.ImmutableProvider(sessions.UserAgentExtras("svc init"))
	sess, err := sessProvider.Default()
	if err != nil {
		return nil, err
	}
	store := config.NewSSMStore(identity.New(sess), ssm.New(sess), aws.StringValue(sess.Config.Region))
	prompter := prompt.New()
	deployStore, err := deploy.NewStore(sessProvider, store)
	if err != nil {
		return nil, err
	}
	snsSel := selector.NewDeploySelect(prompter, store, deployStore)

	initSvc := &initialize.WorkloadInitializer{
		Store:    store,
		Ws:       ws,
		Prog:     termprogress.NewSpinner(log.DiagnosticWriter),
		Deployer: cloudformation.New(sess, cloudformation.WithProgressTracker(os.Stderr)),
	}
	dfSel, err := selector.NewDockerfileSelector(prompter, fs)
	if err != nil {
		return nil, err
	}
	sourceSel, err := selector.NewLocalFileSelector(prompter, fs, ws)
	if err != nil {
		return nil, fmt.Errorf("init a new local file selector: %w", err)
	}
	opts := &initSvcOpts{
		initSvcVars: vars,
		store:       store,
		fs:          fs,
		init:        initSvc,
		prompt:      prompter,
		sel:         dfSel,
		topicSel:    snsSel,
		sourceSel:   sourceSel,
		mftReader:   ws,
		svcLister:   ws,
		newAppVersionGetter: func(appName string) (versionGetter, error) {
			return describe.NewAppDescriber(appName)
		},
		initEnvDescriber: func(appName string, envName string) (envDescriber, error) {
			envDescriber, err := describe.NewEnvDescriber(describe.NewEnvDescriberConfig{
				App:         appName,
				Env:         envName,
				ConfigStore: store,
			})
			if err != nil {
				return nil, err
			}
			return envDescriber, nil
		},
		dockerEngine:    dockerengine.New(exec.NewCmd()),
		wsAppName:       tryReadingAppName(),
		wsRoot:          ws.ProjectRoot(),
		templateVersion: version.LatestTemplateVersion(),
	}
	opts.dockerfile = func(path string) dockerfileParser {
		if opts.df != nil {
			return opts.df
		}
		opts.df = dockerfile.New(opts.fs, opts.dockerfilePath)
		return opts.df
	}
	return opts, nil
}