Documentation ¶
Index ¶
- Constants
- Variables
- func CleanProjectName(name string) string
- func ConfigurationFilePath() string
- func CredentialsFilePath() string
- func FileExists(path string) bool
- func IsDev() bool
- func IsEnvPresent(s string) bool
- func IsTest() bool
- func RootDir() string
- type AutodetectConfig
- type Config
- func (c *Config) CachePath() string
- func (c *Config) IsSelfHosted() bool
- func (c *Config) LoadFromConfigFile(path string, cmd *cobra.Command) error
- func (c *Config) LoadFromEnv() error
- func (c *Config) LoadGlobalFlags(cmd *cobra.Command) error
- func (c *Config) LogFields() map[string]interface{}
- func (c *Config) LogWriter() io.Writer
- func (c *Config) SetLogDisableTimestamps(v bool)
- func (c *Config) SetLogWriter(w io.Writer)
- func (c *Config) WorkingDirectory() string
- func (c *Config) WriteLevel() string
- type ConfigFileSpec
- type Configuration
- type ContextValues
- type Credentials
- type PathOverride
- type Project
- type ProjectContext
- type ProjectContexter
- type RunContext
- func (r *RunContext) Context() context.Context
- func (r *RunContext) EventEnv() map[string]interface{}
- func (r *RunContext) EventEnvWithProjectContexts(projectContexts []*ProjectContext) map[string]interface{}
- func (r *RunContext) GetParallelism() (int, error)
- func (r *RunContext) IsAutoDetect() bool
- func (r *RunContext) IsCIRun() bool
- func (r *RunContext) IsCloudEnabled() bool
- func (r *RunContext) IsCloudUploadEnabled() bool
- func (r *RunContext) IsCloudUploadExplicitlyEnabled() bool
- func (r *RunContext) IsInfracostComment() bool
- func (r *RunContext) SetIsInfracostComment()
- func (r *RunContext) UUID() uuid.UUID
- func (r *RunContext) VCSRepositoryURL() string
- type State
- type TerraformSourceMap
- type YamlError
Constants ¶
const InfracostDir = ".infracost"
Variables ¶
var ErrorInvalidConfigFile = errors.New("parsing config file failed, check file syntax")
Functions ¶
func CleanProjectName ¶ added in v0.10.36
func ConfigurationFilePath ¶ added in v0.9.6
func ConfigurationFilePath() string
func CredentialsFilePath ¶ added in v0.7.17
func CredentialsFilePath() string
func FileExists ¶ added in v0.9.7
func IsEnvPresent ¶ added in v0.9.5
Types ¶
type AutodetectConfig ¶ added in v0.10.32
type AutodetectConfig struct { // EnvNames is the list of environment names that we should use to group // terraform var files. EnvNames []string `yaml:"env_names,omitempty" ignored:"true"` // ExcludeDirs is a list of directories that the autodetect should ignore. ExcludeDirs []string `yaml:"exclude_dirs,omitempty" ignored:"true"` // IncludeDirs is a list of directories that the autodetect should append // to the already detected directories. IncludeDirs []string `yaml:"include_dirs,omitempty" ignored:"true"` // PathOverrides defines paths that should be overridden with specific // environment variable grouping. PathOverrides []PathOverride `yaml:"path_overrides,omitempty" ignored:"true"` // MaxSearchDepth configures the number of folders that Infracost should // traverse to detect projects. MaxSearchDepth int `yaml:"max_search_depth,omitempty" ignored:"true"` // ForceProjectType is used to force the project type to be a specific value. // This is useful when autodetect collides with two project types, normally // Terragrunt and Terraform and we want to force the project type to be one or // the other. ForceProjectType string `yaml:"force_project_type,omitempty" ignored:"true"` // TerraformVarFileExtensions is a list of suffixes that should be used to group terraform // var files. This is useful when there are non-standard terraform var file // names which use different extensions. TerraformVarFileExtensions []string `yaml:"terraform_var_file_extensions,omitempty" ignored:"true"` }
type Config ¶
type Config struct { Credentials Credentials Configuration Configuration Version string `yaml:"version,omitempty" ignored:"true"` Autodetect AutodetectConfig `yaml:"autodetect,omitempty" ignored:"true"` LogLevel string `yaml:"log_level,omitempty" envconfig:"LOG_LEVEL"` DebugReport bool `ignored:"true"` NoColor bool `yaml:"no_color,omitempty" envconfig:"NO_COLOR"` SkipUpdateCheck bool `yaml:"skip_update_check,omitempty" envconfig:"SKIP_UPDATE_CHECK"` Parallelism *int `envconfig:"PARALLELISM"` APIKey string `envconfig:"API_KEY"` PricingAPIEndpoint string `yaml:"pricing_api_endpoint,omitempty" envconfig:"PRICING_API_ENDPOINT"` PricingCacheDisabled bool `yaml:"pricing_cache_disabled" envconfig:"PRICING_CACHE_DISABLED"` PricingCacheObjectSize int `yaml:"pricing_cache_object_size" envconfig:"PRICING_CACHE_OBJECT_SIZE"` DefaultPricingAPIEndpoint string `yaml:"default_pricing_api_endpoint,omitempty" envconfig:"DEFAULT_PRICING_API_ENDPOINT"` DashboardAPIEndpoint string `yaml:"dashboard_api_endpoint,omitempty" envconfig:"DASHBOARD_API_ENDPOINT"` DashboardEndpoint string `yaml:"dashboard_endpoint,omitempty" envconfig:"DASHBOARD_ENDPOINT"` UsageAPIEndpoint string `yaml:"usage_api_endpoint,omitempty" envconfig:"USAGE_API_ENDPOINT"` UsageActualCosts bool `yaml:"usage_actual_costs,omitempty" envconfig:"USAGE_ACTUAL_COSTS"` PolicyV2APIEndpoint string `yaml:"policy_v2_api_endpoint,omitempty" envconfig:"POLICY_V2_API_ENDPOINT"` PoliciesEnabled bool TagPoliciesEnabled bool EnableDashboard bool `yaml:"enable_dashboard,omitempty" envconfig:"ENABLE_DASHBOARD"` EnableCloud *bool `yaml:"enable_cloud,omitempty" envconfig:"ENABLE_CLOUD"` EnableCloudUpload *bool `yaml:"enable_cloud_upload,omitempty" envconfig:"ENABLE_CLOUD_UPLOAD"` DisableHCLParsing bool `yaml:"disable_hcl_parsing,omitempty" envconfig:"DISABLE_HCL_PARSING"` GraphEvaluator bool `yaml:"graph_evaluator,omitempty" envconfig:"GRAPH_EVALUATOR"` TLSInsecureSkipVerify *bool `envconfig:"TLS_INSECURE_SKIP_VERIFY"` TLSCACertFile string `envconfig:"TLS_CA_CERT_FILE"` Currency string `envconfig:"CURRENCY"` CurrencyFormat string `envconfig:"CURRENCY_FORMAT"` AWSOverrideRegion string `envconfig:"AWS_OVERRIDE_REGION"` AzureOverrideRegion string `envconfig:"AZURE_OVERRIDE_REGION"` GoogleOverrideRegion string `envconfig:"GOOGLE_OVERRIDE_REGION"` // TerraformSourceMap replaces any source URL with the provided value. TerraformSourceMap TerraformSourceMap `envconfig:"TERRAFORM_SOURCE_MAP"` // Org settings EnableCloudForOrganization bool Projects []*Project `yaml:"projects" ignored:"true"` Format string `yaml:"format,omitempty" ignored:"true"` ShowAllProjects bool `yaml:"show_all_projects,omitempty" ignored:"true"` ShowSkipped bool `yaml:"show_skipped,omitempty" ignored:"true"` SyncUsageFile bool `yaml:"sync_usage_file,omitempty" ignored:"true"` Fields []string `yaml:"fields,omitempty" ignored:"true"` CompareTo string GitDiffTarget *string // Base configuration settings // RootPath defines the raw value of the `--path` flag provided by the user RootPath string // ConfigFilePath defines the raw value of the `--config-file` flag provided by the user ConfigFilePath string // UsageFilePath defines the raw value of the `--usage-file` flag provided by the user UsageFilePath string NoCache bool `yaml:"no_cache,omitempty" ignored:"true"` SkipErrLine bool // for testing EventsDisabled bool // contains filtered or unexported fields }
func DefaultConfig ¶ added in v0.7.17
func DefaultConfig() *Config
func (*Config) CachePath ¶ added in v0.10.23
CachePath finds path which contains the .infracost directory. It traverses parent directories until a .infracost folder is found. If no .infracost folders exist then CachePath uses the current wd.
func (*Config) IsSelfHosted ¶ added in v0.9.3
func (*Config) LoadFromConfigFile ¶ added in v0.8.0
func (*Config) LoadFromEnv ¶ added in v0.7.17
func (*Config) LoadGlobalFlags ¶ added in v0.10.22
func (*Config) LogFields ¶ added in v0.10.8
LogFields sets the meta fields that are added to any log line entries.
func (*Config) LogWriter ¶ added in v0.9.7
LogWriter returns the writer the Logger should use to write logs to. In most cases this should be stderr, but it can also be a file.
func (*Config) SetLogDisableTimestamps ¶ added in v0.10.8
SetLogDisableTimestamps sets if logs should contain the timestamp the line is written at.
func (*Config) SetLogWriter ¶ added in v0.10.8
SetLogWriter sets the io.Writer that the logs should be piped to.
func (*Config) WorkingDirectory ¶ added in v0.10.36
WorkingDirectory returns the filepath to either the directory specified by the --path flag or the directory that the binary has been run from.
func (*Config) WriteLevel ¶ added in v0.10.8
WriteLevel is the log level that the Logger writes to LogWriter.
type ConfigFileSpec ¶ added in v0.8.0
type ConfigFileSpec struct { Version string `yaml:"version"` Projects []*Project `yaml:"projects" ignored:"true"` }
func LoadConfigFile ¶ added in v0.8.0
func LoadConfigFile(path string) (ConfigFileSpec, error)
func (*ConfigFileSpec) UnmarshalYAML ¶ added in v0.10.23
func (f *ConfigFileSpec) UnmarshalYAML(unmarshal func(interface{}) error) error
UnmarshalYAML implements the yaml.v2.Unmarshaller interface. Marshalls the yaml into an intermediary struct so that we can catch field violations before the data is set on the main ConfigFileSpec. Note this method must return a YamlError type so that we don't run into error collisions with the base yaml.v2 errors.
type Configuration ¶ added in v0.9.6
type Configuration struct { Version string `yaml:"version"` Currency string `yaml:"currency,omitempty"` EnableDashboard *bool `yaml:"enable_dashboard,omitempty"` DisableHCLParsing *bool `yaml:"disable_hcl_parsing,omitempty"` TLSInsecureSkipVerify *bool `yaml:"tls_insecure_skip_verify,omitempty"` TLSCACertFile string `yaml:"tls_ca_cert_file,omitempty"` EnableCloud *bool `yaml:"enable_cloud"` EnableCloudUpload *bool `yaml:"enable_cloud_upload"` }
func (Configuration) Save ¶ added in v0.9.6
func (c Configuration) Save() error
type ContextValues ¶ added in v0.10.25
type ContextValues struct {
// contains filtered or unexported fields
}
ContextValues is a type that wraps a map with methods that safely handle concurrent reads and writes.
func NewContextValues ¶ added in v0.10.25
func NewContextValues(values map[string]interface{}) *ContextValues
NewContextValues returns a new instance of ContextValues.
func (*ContextValues) GetValue ¶ added in v0.10.25
func (cv *ContextValues) GetValue(key string) (interface{}, bool)
GetValue safely retrieves a value from the map. It locks the mutex for reading, deferring the unlock until the method returns. This prevents a race condition if a separate goroutine writes to the map concurrently.
func (*ContextValues) SetValue ¶ added in v0.10.25
func (cv *ContextValues) SetValue(key string, value interface{})
SetValue safely sets a value in the map. It locks the mutex for writing, deferring the unlock until the method returns. This prevents a race condition if separate goroutines read or write to the map concurrently.
func (*ContextValues) Values ¶ added in v0.10.25
func (cv *ContextValues) Values() map[string]interface{}
Values safely retrieves a copy of the map. This method locks the mutex for reading, deferring the unlock until the method returns. By returning a copy, this prevents a race condition if separate goroutines read or write to the original map concurrently. However, creating a copy may be expensive for large maps.
type Credentials ¶ added in v0.7.17
type Credentials struct { Version string `yaml:"version"` APIKey string `yaml:"api_key,omitempty"` PricingAPIEndpoint string `yaml:"pricing_api_endpoint,omitempty"` }
func (Credentials) Save ¶ added in v0.7.17
func (c Credentials) Save() error
type PathOverride ¶ added in v0.10.33
type Project ¶ added in v0.8.0
type Project struct { // ConfigSha can be provided to identify the configuration used for the project ConfigSha string `yaml:"config_sha,omitempty" ignored:"true"` // Path to the Terraform directory or JSON/plan file. // A path can be repeated with different parameters, e.g. for multiple workspaces. Path string `yaml:"path" ignored:"true"` // ExcludePaths defines a list of directories that the provider should ignore. ExcludePaths []string `yaml:"exclude_paths,omitempty" ignored:"true"` // DependencyPaths is a list of any paths that this project depends on. These paths are relative to the // config file and NOT the project. DependencyPaths []string `yaml:"dependency_paths,omitempty"` // IncludeAllPaths tells autodetect to use all folders with valid project files. IncludeAllPaths bool `yaml:"include_all_paths,omitempty" ignored:"true"` // SkipAutodetect tells autodetect to skip this project. SkipAutodetect bool `yaml:"skip_autodetect,omitempty" ignored:"true"` // Name is a user defined name for the project Name string `yaml:"name,omitempty" ignored:"true"` // TerraformVarFiles is any var files that are to be used with the project. TerraformVarFiles []string `yaml:"terraform_var_files,omitempty"` // TerraformVars is a slice of input vars that are to be used with the project. TerraformVars map[string]interface{} `yaml:"terraform_vars,omitempty"` // TerraformForceCLI will run a project by calling out to the terraform/terragrunt binary to generate a plan JSON file. TerraformForceCLI bool `yaml:"terraform_force_cli,omitempty"` // TerraformPlanFlags are flags to pass to terraform plan with Terraform directory paths TerraformPlanFlags string `yaml:"terraform_plan_flags,omitempty" ignored:"true"` // TerraformInitFlags are flags to pass to terraform init TerraformInitFlags string `yaml:"terraform_init_flags,omitempty" ignored:"true"` // TerraformBinary is an optional field used to change the path to the terraform or terragrunt binary TerraformBinary string `yaml:"terraform_binary,omitempty" envconfig:"TERRAFORM_BINARY"` // TerraformWorkspace is an optional field used to set the Terraform workspace TerraformWorkspace string `yaml:"terraform_workspace,omitempty" envconfig:"TERRAFORM_WORKSPACE"` // TerraformCloudWorkspace is used to override the terraform configuration blocks workspace value. TerraformCloudWorkspace string `yaml:"terraform_cloud_workspace,omitempty" envconfig:"TERRAFORM_CLOUD_WORKSPACE"` // TerraformCloudOrg is used to override the terraform configuration blocks organization value. TerraformCloudOrg string `yaml:"terraform_cloud_org,omitempty" envconfig:"TERRAFORM_CLOUD_ORG"` // TerraformCloudHost is used to override the default app.terraform.io backend host. Only applicable for // terraform cloud/enterprise users. TerraformCloudHost string `yaml:"terraform_cloud_host,omitempty" envconfig:"TERRAFORM_CLOUD_HOST"` // TerraformCloudToken sets the Team API Token or User API Token so infracost can use it to access the plan. // Only applicable for terraform cloud/enterprise users. TerraformCloudToken string `yaml:"terraform_cloud_token,omitempty" envconfig:"TERRAFORM_CLOUD_TOKEN"` // SpaceliftAPIKeyEndpoint is the endpoint that the spacelift API client will communicate with. SpaceliftAPIKeyEndpoint string `yaml:"spacelift_api_key_endpoint,omitempty" envconfig:"SPACELIFT_API_KEY_ENDPOINT"` // SpaceliftAPIKeyID is the spacelift API key ID. This is used in combination // with the API key secret to generate a JWT token. SpaceliftAPIKeyID string `yaml:"spacelift_api_key_id,omitempty" envconfig:"SPACELIFT_API_KEY_ID"` // SpaceliftAPIKeySecret is the spacelift API key secret.This is used in combination // with the API key id to generate a JWT token. SpaceliftAPIKeySecret string `yaml:"spacelift_api_key_secret,omitempty" envconfig:"SPACELIFT_API_KEY_SECRET"` // TerragruntFlags set additional flags that should be passed to terragrunt. TerragruntFlags string `yaml:"terragrunt_flags,omitempty" envconfig:"TERRAGRUNT_FLAGS"` // UsageFile is the full path to usage file that specifies values for usage-based resources UsageFile string `yaml:"usage_file,omitempty" ignored:"true"` // TerraformUseState sets if the users wants to use the terraform state for infracost ops. TerraformUseState bool `yaml:"terraform_use_state,omitempty" ignored:"true"` Env map[string]string `yaml:"env,omitempty" ignored:"true"` // YorConfigPath is the path to a Yor config file, which we can extract default tags from YorConfigPath string `yaml:"yor_config_path,omitempty" ignored:"true"` }
Project defines a specific terraform project config. This can be used specify per folder/project configurations so that users don't have to provide flags every run. Fields are documented below. More info is outlined here: https://www.infracost.io/config-file
type ProjectContext ¶ added in v0.9.3
type ProjectContext struct { RunContext *RunContext ProjectConfig *Project ContextValues *ContextValues UsingCache bool CacheErr string // contains filtered or unexported fields }
func NewProjectContext ¶ added in v0.9.3
func NewProjectContext(runCtx *RunContext, projectCfg *Project, logFields interface{}) *ProjectContext
func (*ProjectContext) Logger ¶ added in v0.10.8
func (c *ProjectContext) Logger() zerolog.Logger
func (*ProjectContext) SetFrom ¶ added in v0.9.15
func (c *ProjectContext) SetFrom(d ProjectContexter)
func (*ProjectContext) SetProjectType ¶ added in v0.10.33
func (c *ProjectContext) SetProjectType(projectType string)
type ProjectContexter ¶ added in v0.9.11
type ProjectContexter interface {
ProjectContext() map[string]interface{}
}
type RunContext ¶ added in v0.9.3
type RunContext struct { Config *Config State *State VCSMetadata vcs.Metadata CMD string ContextValues *ContextValues ModuleMutex *intSync.KeyMutex StartTime int64 OutWriter io.Writer ErrWriter io.Writer Exit func(code int) // contains filtered or unexported fields }
func EmptyRunContext ¶ added in v0.9.3
func EmptyRunContext() *RunContext
func NewRunContextFromEnv ¶ added in v0.9.3
func NewRunContextFromEnv(rootCtx context.Context) (*RunContext, error)
func (*RunContext) Context ¶ added in v0.9.17
func (r *RunContext) Context() context.Context
Context returns the underlying context.
func (*RunContext) EventEnv ¶ added in v0.9.3
func (r *RunContext) EventEnv() map[string]interface{}
func (*RunContext) EventEnvWithProjectContexts ¶ added in v0.9.3
func (r *RunContext) EventEnvWithProjectContexts(projectContexts []*ProjectContext) map[string]interface{}
func (*RunContext) GetParallelism ¶ added in v0.10.16
func (r *RunContext) GetParallelism() (int, error)
func (*RunContext) IsAutoDetect ¶ added in v0.10.33
func (r *RunContext) IsAutoDetect() bool
IsAutoDetect returns true if the command is running with auto-detect functionality.
func (*RunContext) IsCIRun ¶ added in v0.9.12
func (r *RunContext) IsCIRun() bool
func (*RunContext) IsCloudEnabled ¶ added in v0.10.7
func (r *RunContext) IsCloudEnabled() bool
func (*RunContext) IsCloudUploadEnabled ¶ added in v0.10.16
func (r *RunContext) IsCloudUploadEnabled() bool
func (*RunContext) IsCloudUploadExplicitlyEnabled ¶ added in v0.10.18
func (r *RunContext) IsCloudUploadExplicitlyEnabled() bool
IsCloudUploadExplicitlyEnabled returns true if cloud upload has been enabled through one of the env variables ENABLE_CLOUD, ENABLE_CLOUD_UPLOAD, or ENABLE_DASHBOARD
func (*RunContext) IsInfracostComment ¶ added in v0.10.7
func (r *RunContext) IsInfracostComment() bool
func (*RunContext) SetIsInfracostComment ¶ added in v0.10.7
func (r *RunContext) SetIsInfracostComment()
SetIsInfracostComment identifies that the primary command being run is `infracost comment`
func (*RunContext) UUID ¶ added in v0.9.16
func (r *RunContext) UUID() uuid.UUID
UUID returns the underlying run uuid. This can be used to globally identify the run context.
func (*RunContext) VCSRepositoryURL ¶ added in v0.10.12
func (r *RunContext) VCSRepositoryURL() string
type State ¶ added in v0.7.17
type TerraformSourceMap ¶ added in v0.10.23
func (*TerraformSourceMap) Decode ¶ added in v0.10.23
func (s *TerraformSourceMap) Decode(value string) error
type YamlError ¶ added in v0.9.12
type YamlError struct {
// contains filtered or unexported fields
}
YamlError is a custom error type that allows setting multiple error messages under a base message. It is used to decipher between internal errors and the yaml.v2 errors.
func (*YamlError) Error ¶ added in v0.9.12
Error implements the error interface returning the YamlError as a string. If a raw error is set it simply returns the error message from that. Otherwise, it constructs an indented error message out of the base and errors.
YamlError.Error supports multiple nesting and can construct heavily indented output if needed. e.g.
&YamlError{ base: "top message", errors: []error{ errors.New("top error 1"), &YamlError{ base: "child message", errors: []error{ errors.New("child error 1"), }, }, }, }
would output a string like so:
top message: top error 1 child message: child error 1
This can be useful for ui error messages where you need to highlight issues with specific fields/entries.