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
}