Documentation ¶
Overview ¶
Forecast looks at your account and tries to predict things that will go wrong when you attempt to CREATE, UPDATE, or DELETE a stack
Index ¶
Constants ¶
This section is empty.
Variables ¶
var Cmd = &cobra.Command{ Use: "forecast --experimental <template> [stackName]", Short: "Predict deployment failures", Long: `Outputs warnings about potential deployment failures due to constraints in the account or misconfigurations in the template related to dependencies in the account. NOTE: This is an experimental feature! To use this command, add --experimental or -x as an argument. This command is not a linter! Use cfn-lint for that. The forecast command is concerned with things that could go wrong during deployment, after the template has been checked to make sure it has a valid syntax. This command checks for some common issues across all resources: - The resource already exists - You do not have permissions to create/update/delete the resource - (More to come.. service quotas, drift issues) Resource-specific checks: - S3 bucket is not empty - S3 bucket policy has an invalid principal - (Many more to come...) `, Args: cobra.ExactArgs(2), DisableFlagsInUseLine: true, Run: func(cmd *cobra.Command, args []string) { fn := args[0] base := filepath.Base(fn) var suppliedStackName string if len(args) == 2 { suppliedStackName = args[1] } else { suppliedStackName = "" } if !Experimental { panic("Please add the --experimental arg to use this feature") } config.Debugf("Generating forecast for %v", fn) r, err := os.Open(fn) if err != nil { panic(ui.Errorf(err, "unable to read '%s'", fn)) } input, err := io.ReadAll(r) if err != nil { panic(ui.Errorf(err, "unable to read input")) } source, err := parse.String(string(input)) if err != nil { panic(ui.Errorf(err, "unable to parse input")) } stackName := dc.GetStackName(suppliedStackName, base) spinner.Push(fmt.Sprintf("Checking current status of stack '%s'", stackName)) stack, stackExists := deploy.CheckStack(stackName) spinner.Pop() msg := "" if stackExists { msg = "exists" } else { msg = "does not exist" } config.Debugf("Stack %v %v", stackName, msg) dc, err := dc.GetDeployConfig(tags, params, configFilePath, base, source, stack, stackExists, true, false) if err != nil { panic(err) } if !predict(source, stackName, stack, stackExists, dc) { os.Exit(1) } }, }
Cmd is the forecast command's entrypoint
var Experimental bool
This is an experimental feature that might break between minor releases
var LineNumber int
The current line number in the template
var ResourceType string
The resource type to check (optional --type to limit checks to one type)
var RoleArn string
The role name to use for the IAM policy simulator (optional --role)
var SkipIAM bool
If true, don't perform permissions checks to save time
Functions ¶
This section is empty.
Types ¶
type Forecast ¶
Forecast represents predictions for a single resource in the template
func (*Forecast) Add ¶
Add adds a pass or fail message, formatting it to include the type name and logical id
func (*Forecast) GetNumChecked ¶
func (*Forecast) GetNumFailed ¶
func (*Forecast) GetNumPassed ¶
type PredictionInput ¶
type PredictionInput struct {
// contains filtered or unexported fields
}
Input to forecast prediction functions