in internal/pkg/cli/deploy.go [117:221]
func newDeployOpts(vars deployVars) (*deployOpts, error) {
sessProvider := sessions.ImmutableProvider(sessions.UserAgentExtras("deploy"))
defaultSess, err := sessProvider.Default()
if err != nil {
return nil, fmt.Errorf("default session: %v", err)
}
store := config.NewSSMStore(identity.New(defaultSess), ssm.New(defaultSess), aws.StringValue(defaultSess.Config.Region))
ws, err := workspace.Use(afero.NewOsFs())
if err != nil {
return nil, err
}
prompter := prompt.New()
return &deployOpts{
deployVars: vars,
store: store,
sel: selector.NewLocalWorkloadSelector(prompter, store, ws),
ws: ws,
prompt: prompter,
newWorkloadAdder: func() wkldInitializerWithoutManifest {
return &initialize.WorkloadInitializer{
Store: store,
Deployer: cloudformation.New(defaultSess),
Ws: ws,
Prog: termprogress.NewSpinner(log.DiagnosticWriter),
}
},
newDeployEnvCmd: func(o *deployOpts) (cmd, error) {
// This command passes flags down from
return newEnvDeployOpts(deployEnvVars{
appName: o.appName,
name: o.envName,
forceNewUpdate: o.forceNewUpdate,
disableRollback: o.disableRollback,
showDiff: o.showDiff,
skipDiffPrompt: o.skipDiffPrompt,
allowEnvDowngrade: o.allowWkldDowngrade,
detach: o.detach,
})
},
newInitEnvCmd: func(o *deployOpts) (cmd, error) {
// This vars struct sets "default config" so that no vpc questions are asked during env init and the manifest
// is not written. It passes in credential flags and allow-downgrade from the parent command.
return newInitEnvOpts(initEnvVars{
appName: o.appName,
name: o.envName,
profile: o.profile,
defaultConfig: true,
allowAppDowngrade: o.allowWkldDowngrade,
tempCreds: o.tempCreds,
region: o.region,
})
},
setupDeployCmd: func(o *deployOpts, workloadName, workloadType string) (actionCommand, error) {
switch {
case slices.Contains(manifestinfo.JobTypes(), workloadType):
opts := &deployJobOpts{
deployWkldVars: o.deployWkldVars,
store: o.store,
ws: o.ws,
newInterpolator: newManifestInterpolator,
unmarshal: manifest.UnmarshalWorkload,
sel: selector.NewLocalWorkloadSelector(o.prompt, o.store, ws),
cmd: exec.NewCmd(),
templateVersion: version.LatestTemplateVersion(),
sessProvider: sessProvider,
}
opts.newJobDeployer = func() (workloadDeployer, error) {
return newJobDeployer(opts)
}
opts.name = workloadName
return opts, nil
case slices.Contains(manifestinfo.ServiceTypes(), workloadType):
opts := &deploySvcOpts{
deployWkldVars: o.deployWkldVars,
store: o.store,
ws: o.ws,
newInterpolator: newManifestInterpolator,
unmarshal: manifest.UnmarshalWorkload,
spinner: termprogress.NewSpinner(log.DiagnosticWriter),
sel: selector.NewLocalWorkloadSelector(o.prompt, o.store, ws),
prompt: o.prompt,
cmd: exec.NewCmd(),
sessProvider: sessProvider,
templateVersion: version.LatestTemplateVersion(),
}
opts.newSvcDeployer = func() (workloadDeployer, error) {
return newSvcDeployer(opts)
}
opts.name = workloadName
// Multi-deployments can have flags specified which are not compatible with all service types.
// Currently only forceNewUpdate is incompatible with Static Site types.
if workloadType == manifestinfo.StaticSiteType {
opts.forceNewUpdate = false
}
return opts, nil
}
return nil, fmt.Errorf("unrecognized workload type %s", workloadType)
},
}, nil
}