Documentation ¶
Overview ¶
The config package is responsible for loading and validating the configuration.
Index ¶
- Constants
- Variables
- func Funcs() map[string]ast.Function
- func IsEmptyDir(root string) (bool, error)
- func IsIgnoredFile(name string) bool
- func ProviderConfigName(t string, pcs []*ProviderConfig) string
- func ResourceProviderFullName(resourceType, explicitProvider string) string
- type AtlasConfig
- type Backend
- type Config
- type CountValueType
- type CountVariable
- type ErrNoConfigsFound
- type InterpolatedVariable
- type Local
- type LocalVariable
- type Module
- type ModuleVariable
- type Output
- type PathValueType
- type PathVariable
- type ProviderConfig
- type ProviderVersionConstraint
- type ProviderVersionConstraints
- type Provisioner
- type ProvisionerOnFailure
- type ProvisionerWhen
- type RawConfig
- func (r *RawConfig) Config() map[string]interface{}
- func (r *RawConfig) Copy() *RawConfig
- func (r *RawConfig) GobDecode(b []byte) error
- func (r *RawConfig) GobEncode() ([]byte, error)
- func (r *RawConfig) Interpolate(vs map[string]ast.Variable) error
- func (r *RawConfig) Merge(other *RawConfig) *RawConfig
- func (r *RawConfig) RawMap() map[string]interface{}
- func (r *RawConfig) UnknownKeys() []string
- func (r *RawConfig) Value() interface{}
- type Resource
- type ResourceLifecycle
- type ResourceMode
- type ResourceVariable
- type SelfVariable
- type SimpleVariable
- type Terraform
- type TerraformVariable
- type UserVariable
- type Variable
- type VariableType
Constants ¶
const UnknownVariableValue = "74D93920-ED26-11E3-AC10-0800200C9A66"
UnknownVariableValue is a sentinel value that can be used to denote that the value of a variable is unknown at this time. RawConfig uses this information to build up data about unknown keys.
Variables ¶
var NameRegexp = regexp.MustCompile(`(?i)\A[A-Z0-9_][A-Z0-9\-\_]*\z`)
NameRegexp is the regular expression that all names (modules, providers, resources, etc.) must follow.
var ReservedDataSourceFields = []string{
"connection",
"count",
"depends_on",
"lifecycle",
"provider",
"provisioner",
}
var ReservedProviderFields = []string{
"alias",
"version",
}
var ReservedResourceFields = []string{
"connection",
"count",
"depends_on",
"id",
"lifecycle",
"provider",
"provisioner",
}
Functions ¶
func IsEmptyDir ¶ added in v0.3.0
IsEmptyDir returns true if the directory given has no Terraform configuration files.
func IsIgnoredFile ¶ added in v0.10.1
IsIgnoredFile returns true or false depending on whether the provided file name is a file that should be ignored.
func ProviderConfigName ¶
func ProviderConfigName(t string, pcs []*ProviderConfig) string
ProviderConfigName returns the name of the provider configuration in the given mapping that maps to the proper provider configuration for this resource.
func ResourceProviderFullName ¶ added in v0.10.1
ResourceProviderFullName returns the full (dependable) name of the provider for a hypothetical resource with the given resource type and explicit provider string. If the explicit provider string is empty then the provider name is inferred from the resource type name.
Types ¶
type AtlasConfig ¶ added in v0.4.0
AtlasConfig is the configuration for building in HashiCorp's Atlas.
type Backend ¶ added in v0.9.0
type Backend struct { Type string RawConfig *RawConfig // Hash is a unique hash code representing the original configuration // of the backend. This won't be recomputed unless Rehash is called. Hash uint64 }
Backend is the configuration for the "backend" to use with Terraform. A backend is responsible for all major behavior of Terraform's core. The abstraction layer above the core (the "backend") allows for behavior such as remote operation.
type Config ¶
type Config struct { // Dir is the path to the directory where this configuration was // loaded from. If it is blank, this configuration wasn't loaded from // any meaningful directory. Dir string Terraform *Terraform Atlas *AtlasConfig Modules []*Module ProviderConfigs []*ProviderConfig Resources []*Resource Variables []*Variable Locals []*Local Outputs []*Output // contains filtered or unexported fields }
Config is the configuration that comes from loading a collection of Terraform templates.
func Append ¶
Append appends one configuration to another.
Append assumes that both configurations will not have conflicting variables, resources, etc. If they do, the problems will be caught in the validation phase.
It is possible that c1, c2 on their own are not valid. For example, a resource in c2 may reference a variable in c1. But together, they would be valid.
func LoadDir ¶
LoadDir loads all the Terraform configuration files in a single directory and appends them together.
Special files known as "override files" can also be present, which are merged into the loaded configuration. That is, the non-override files are loaded first to create the configuration. Then, the overrides are merged into the configuration to create the final configuration.
Files are loaded in lexical order.
func LoadFile ¶ added in v0.6.0
LoadFile loads the Terraform configuration from a given file.
This file can be any format that Terraform recognizes, and import any other format that Terraform recognizes.
func LoadJSON ¶ added in v0.6.0
func LoadJSON(raw json.RawMessage) (*Config, error)
LoadJSON loads a single Terraform configuration from a given JSON document.
The document must be a complete Terraform configuration. This function will NOT try to load any additional modules so only the given document is loaded.
func Merge ¶
Merge merges two configurations into a single configuration.
Merge allows for the two configurations to have duplicate resources, because the resources will be merged. This differs from a single Config which must only have unique resources.
func (*Config) InterpolatedVariables ¶ added in v0.3.0
func (c *Config) InterpolatedVariables() map[string][]InterpolatedVariable
InterpolatedVariables is a helper that returns a mapping of all the interpolated variables within the configuration. This is used to verify references are valid in the Validate step.
func (*Config) ProviderConfigsByFullName ¶ added in v0.10.1
func (c *Config) ProviderConfigsByFullName() map[string]*ProviderConfig
ProviderConfigsByFullName returns a map from provider full names (as returned by ProviderConfig.FullName()) to the corresponding provider configs.
This function returns no new information than what's already in c.ProviderConfigs, but returns it in a more convenient shape. If there is more than one provider config with the same full name then the result is undefined, but that is guaranteed not to happen for any config that has passed validation.
func (*Config) RequiredProviders ¶ added in v0.10.1
func (c *Config) RequiredProviders() ProviderVersionConstraints
RequiredProviders returns the ProviderVersionConstraints for this module.
This includes both providers that are explicitly requested by provider blocks and those that are used implicitly by instantiating one of their resource types. In the latter case, the returned semver Range will accept any version of the provider.
func (*Config) TestString ¶ added in v0.3.0
TestString is a Stringer-like function that outputs a string that can be used to easily compare multiple Config structures in unit tests.
This function has no practical use outside of unit tests and debugging.
func (*Config) Validate ¶
func (c *Config) Validate() tfdiags.Diagnostics
Validate does some basic semantic checking of the configuration.
type CountValueType ¶ added in v0.3.0
type CountValueType byte
CountValueType is the type of the count variable that is referenced.
const ( CountValueInvalid CountValueType = iota CountValueIndex )
type CountVariable ¶ added in v0.3.0
type CountVariable struct { Type CountValueType // contains filtered or unexported fields }
CountVariable is a variable for referencing information about the count.
func NewCountVariable ¶ added in v0.3.0
func NewCountVariable(key string) (*CountVariable, error)
func (*CountVariable) FullKey ¶ added in v0.3.0
func (c *CountVariable) FullKey() string
func (CountVariable) SourceRange ¶ added in v0.11.0
func (r CountVariable) SourceRange() tfdiags.SourceRange
type ErrNoConfigsFound ¶ added in v0.8.2
type ErrNoConfigsFound struct {
Dir string
}
ErrNoConfigsFound is the error returned by LoadDir if no Terraform configuration files were found in the given directory.
func (ErrNoConfigsFound) Error ¶ added in v0.8.2
func (e ErrNoConfigsFound) Error() string
type InterpolatedVariable ¶
type InterpolatedVariable interface { FullKey() string SourceRange() tfdiags.SourceRange }
An InterpolatedVariable is a variable reference within an interpolation.
Implementations of this interface represents various sources where variables can come from: user variables, resources, etc.
func DetectVariables ¶ added in v0.3.7
func DetectVariables(root ast.Node) ([]InterpolatedVariable, error)
DetectVariables takes an AST root and returns all the interpolated variables that are detected in the AST tree.
func NewInterpolatedVariable ¶
func NewInterpolatedVariable(v string) (InterpolatedVariable, error)
type LocalVariable ¶ added in v0.10.3
type LocalVariable struct { Name string // contains filtered or unexported fields }
A LocalVariable is a variable that references a local value defined within the current module, via a "locals" block. This looks like "${local.foo}".
func NewLocalVariable ¶ added in v0.10.3
func NewLocalVariable(key string) (*LocalVariable, error)
func (*LocalVariable) FullKey ¶ added in v0.10.3
func (v *LocalVariable) FullKey() string
func (*LocalVariable) GoString ¶ added in v0.10.3
func (v *LocalVariable) GoString() string
func (LocalVariable) SourceRange ¶ added in v0.11.0
func (r LocalVariable) SourceRange() tfdiags.SourceRange
type Module ¶ added in v0.3.0
type Module struct { Name string Source string Version string Providers map[string]string RawConfig *RawConfig }
Module is a module used within a configuration.
This does not represent a module itself, this represents a module call-site within an existing configuration.
type ModuleVariable ¶ added in v0.3.0
A ModuleVariable is a variable that is referencing the output of a module, such as "${module.foo.bar}"
func NewModuleVariable ¶ added in v0.3.0
func NewModuleVariable(key string) (*ModuleVariable, error)
func (*ModuleVariable) FullKey ¶ added in v0.3.0
func (v *ModuleVariable) FullKey() string
func (*ModuleVariable) GoString ¶ added in v0.8.2
func (v *ModuleVariable) GoString() string
func (ModuleVariable) SourceRange ¶ added in v0.11.0
func (r ModuleVariable) SourceRange() tfdiags.SourceRange
type Output ¶
type Output struct { Name string DependsOn []string Description string Sensitive bool RawConfig *RawConfig }
Output is an output defined within the configuration. An output is resulting data that is highlighted by Terraform when finished. An output marked Sensitive will be output in a masked form following application, but will still be available in state.
type PathValueType ¶ added in v0.3.0
type PathValueType byte
const ( PathValueInvalid PathValueType = iota PathValueCwd PathValueModule PathValueRoot )
type PathVariable ¶ added in v0.3.0
type PathVariable struct { Type PathValueType // contains filtered or unexported fields }
A PathVariable is a variable that references path information about the module.
func NewPathVariable ¶ added in v0.3.0
func NewPathVariable(key string) (*PathVariable, error)
func (*PathVariable) FullKey ¶ added in v0.3.0
func (v *PathVariable) FullKey() string
func (PathVariable) SourceRange ¶ added in v0.11.0
func (r PathVariable) SourceRange() tfdiags.SourceRange
type ProviderConfig ¶
ProviderConfig is the configuration for a resource provider.
For example, Terraform needs to set the AWS access keys for the AWS resource provider.
func (*ProviderConfig) FullName ¶ added in v0.5.0
func (c *ProviderConfig) FullName() string
func (*ProviderConfig) GoString ¶ added in v0.6.0
func (c *ProviderConfig) GoString() string
type ProviderVersionConstraint ¶ added in v0.10.1
ProviderVersionConstraint presents a constraint for a particular provider, identified by its full name.
type ProviderVersionConstraints ¶ added in v0.10.1
type ProviderVersionConstraints map[string]ProviderVersionConstraint
ProviderVersionConstraints is a map from provider full name to its associated ProviderVersionConstraint, as produced by Config.RequiredProviders.
func (ProviderVersionConstraints) RequiredRanges ¶ added in v0.10.1
func (cons ProviderVersionConstraints) RequiredRanges() map[string]semver.Range
RequiredRanges returns a semver.Range for each distinct provider type in the constraint map. If the same provider type appears more than once (e.g. because aliases are in use) then their respective constraints are combined such that they must *all* apply.
The result of this method can be passed to the PluginMetaSet.ConstrainVersions method within the plugin/discovery package in order to filter down the available plugins to those which satisfy the given constraints.
This function will panic if any of the constraints within cannot be parsed as semver ranges. This is guaranteed to never happen for a constraint set that was built from a configuration that passed validation.
type Provisioner ¶
type Provisioner struct { Type string RawConfig *RawConfig ConnInfo *RawConfig When ProvisionerWhen OnFailure ProvisionerOnFailure }
Provisioner is a configured provisioner step on a resource.
func (*Provisioner) Copy ¶ added in v0.6.12
func (p *Provisioner) Copy() *Provisioner
Copy returns a copy of this Provisioner
type ProvisionerOnFailure ¶ added in v0.9.0
type ProvisionerOnFailure int
ProvisionerOnFailure is an enum for valid values for on_failure options for provisioners.
const ( ProvisionerOnFailureInvalid ProvisionerOnFailure = iota ProvisionerOnFailureContinue ProvisionerOnFailureFail )
func (ProvisionerOnFailure) String ¶ added in v0.9.0
func (v ProvisionerOnFailure) String() string
type ProvisionerWhen ¶ added in v0.9.0
type ProvisionerWhen int
ProvisionerWhen is an enum for valid values for when to run provisioners.
const ( ProvisionerWhenInvalid ProvisionerWhen = iota ProvisionerWhenCreate ProvisionerWhenDestroy )
func (ProvisionerWhen) String ¶ added in v0.9.0
func (v ProvisionerWhen) String() string
type RawConfig ¶
type RawConfig struct { Key string Raw map[string]interface{} Body hcl2.Body Interpolations []ast.Node Variables map[string]InterpolatedVariable // contains filtered or unexported fields }
RawConfig is a structure that holds a piece of configuration where the overall structure is unknown since it will be used to configure a plugin or some other similar external component.
RawConfigs can be interpolated with variables that come from other resources, user variables, etc.
RawConfig supports a query-like interface to request information from deep within the structure.
func NewRawConfig ¶
NewRawConfig creates a new RawConfig structure and populates the publicly readable struct fields.
func NewRawConfigHCL2 ¶ added in v0.11.0
NewRawConfigHCL2 creates a new RawConfig that is serving as a capsule to transport a hcl2.Body. In this mode, the publicly-readable struct fields are not populated since all operations should instead be diverted to the HCL2 body.
For a RawConfig object constructed with this function, the only valid use is to later retrieve the Body value and call its own methods. Callers may choose to set and then later handle the Key field, in a manner consistent with how it is handled by the Value method, but the Value method itself must not be used.
This is an experimental codepath to be used only by the HCL2 config loader. Non-experimental parsing should _always_ use NewRawConfig to produce a fully-functional RawConfig object.
func TestRawConfig ¶ added in v0.7.8
TestRawConfig is used to create a RawConfig for testing.
func (*RawConfig) Config ¶
Config returns the entire configuration with the variables interpolated from any call to Interpolate.
If any interpolated variables are unknown (value set to UnknownVariableValue), the first non-container (map, slice, etc.) element will be removed from the config. The keys of unknown variables can be found using the UnknownKeys function.
By pruning out unknown keys from the configuration, the raw structure will always successfully decode into its ultimate structure using something like mapstructure.
func (*RawConfig) GobEncode ¶
GobEncode is a custom Gob encoder to use so that we only include the raw configuration. Interpolated variables and such are lost and the tree of interpolated variables is recomputed on decode, since it is referentially transparent.
func (*RawConfig) Interpolate ¶
Interpolate uses the given mapping of variable values and uses those as the values to replace any variables in this raw configuration.
Any prior calls to Interpolate are replaced with this one.
If a variable key is missing, this will panic.
func (*RawConfig) Merge ¶ added in v0.4.0
Merge merges another RawConfig into this one (overriding any conflicting values in this config) and returns a new config. The original config is not modified.
func (*RawConfig) UnknownKeys ¶
UnknownKeys returns the keys of the configuration that are unknown because they had interpolated variables that must be computed.
type Resource ¶
type Resource struct { Mode ResourceMode // which operations the resource supports Name string Type string RawCount *RawConfig RawConfig *RawConfig Provisioners []*Provisioner Provider string DependsOn []string Lifecycle ResourceLifecycle }
A resource represents a single Terraform resource in the configuration. A Terraform resource is something that supports some or all of the usual "create, read, update, delete" operations, depending on the given Mode.
func (*Resource) Copy ¶ added in v0.6.12
Copy returns a copy of this Resource. Helpful for avoiding shared config pointers across multiple pieces of the graph that need to do interpolation.
func (*Resource) ProviderFullName ¶ added in v0.10.1
ProviderFullName returns the full name of the provider for this resource, which may either be specified explicitly using the "provider" meta-argument or implied by the prefix on the resource type name.
type ResourceLifecycle ¶ added in v0.3.0
type ResourceLifecycle struct { CreateBeforeDestroy bool `mapstructure:"create_before_destroy"` PreventDestroy bool `mapstructure:"prevent_destroy"` IgnoreChanges []string `mapstructure:"ignore_changes"` }
ResourceLifecycle is used to store the lifecycle tuning parameters to allow customized behavior
func (*ResourceLifecycle) Copy ¶ added in v0.6.12
func (r *ResourceLifecycle) Copy() *ResourceLifecycle
Copy returns a copy of this ResourceLifecycle
type ResourceMode ¶ added in v0.7.1
type ResourceMode int
const ( ManagedResourceMode ResourceMode = iota DataResourceMode )
func (ResourceMode) String ¶ added in v0.7.1
func (i ResourceMode) String() string
func (ResourceMode) Taintable ¶ added in v0.7.1
func (m ResourceMode) Taintable() bool
type ResourceVariable ¶
type ResourceVariable struct { Mode ResourceMode Type string // Resource type, i.e. "aws_instance" Name string // Resource name Field string // Resource field Multi bool // True if multi-variable: aws_instance.foo.*.id Index int // Index for multi-variable: aws_instance.foo.1.id == 1 // contains filtered or unexported fields }
A ResourceVariable is a variable that is referencing the field of a resource, such as "${aws_instance.foo.ami}"
func NewResourceVariable ¶
func NewResourceVariable(key string) (*ResourceVariable, error)
func (*ResourceVariable) FullKey ¶
func (v *ResourceVariable) FullKey() string
func (*ResourceVariable) ResourceId ¶
func (v *ResourceVariable) ResourceId() string
func (ResourceVariable) SourceRange ¶ added in v0.11.0
func (r ResourceVariable) SourceRange() tfdiags.SourceRange
type SelfVariable ¶ added in v0.4.0
type SelfVariable struct { Field string // contains filtered or unexported fields }
SelfVariable is a variable that is referencing the same resource it is running on: "${self.address}"
func NewSelfVariable ¶ added in v0.4.0
func NewSelfVariable(key string) (*SelfVariable, error)
func (*SelfVariable) FullKey ¶ added in v0.4.0
func (v *SelfVariable) FullKey() string
func (*SelfVariable) GoString ¶ added in v0.4.0
func (v *SelfVariable) GoString() string
func (SelfVariable) SourceRange ¶ added in v0.11.0
func (r SelfVariable) SourceRange() tfdiags.SourceRange
type SimpleVariable ¶ added in v0.6.7
type SimpleVariable struct { Key string // contains filtered or unexported fields }
SimpleVariable is an unprefixed variable, which can show up when users have strings they are passing down to resources that use interpolation internally. The template_file resource is an example of this.
func NewSimpleVariable ¶ added in v0.6.7
func NewSimpleVariable(key string) (*SimpleVariable, error)
func (*SimpleVariable) FullKey ¶ added in v0.6.7
func (v *SimpleVariable) FullKey() string
func (*SimpleVariable) GoString ¶ added in v0.6.7
func (v *SimpleVariable) GoString() string
func (SimpleVariable) SourceRange ¶ added in v0.11.0
func (r SimpleVariable) SourceRange() tfdiags.SourceRange
type Terraform ¶ added in v0.8.2
type Terraform struct { RequiredVersion string `hcl:"required_version"` // Required Terraform version (constraint) Backend *Backend // See Backend struct docs }
Terraform is the Terraform meta-configuration that can be present in configuration files for configuring Terraform itself.
type TerraformVariable ¶ added in v0.9.0
type TerraformVariable struct { Field string // contains filtered or unexported fields }
TerraformVariable is a "terraform."-prefixed variable used to access metadata about the Terraform run.
func NewTerraformVariable ¶ added in v0.9.0
func NewTerraformVariable(key string) (*TerraformVariable, error)
func (*TerraformVariable) FullKey ¶ added in v0.9.0
func (v *TerraformVariable) FullKey() string
func (*TerraformVariable) GoString ¶ added in v0.9.0
func (v *TerraformVariable) GoString() string
func (TerraformVariable) SourceRange ¶ added in v0.11.0
func (r TerraformVariable) SourceRange() tfdiags.SourceRange
type UserVariable ¶
A UserVariable is a variable that is referencing a user variable that is inputted from outside the configuration. This looks like "${var.foo}"
func NewUserVariable ¶
func NewUserVariable(key string) (*UserVariable, error)
func (*UserVariable) FullKey ¶
func (v *UserVariable) FullKey() string
func (*UserVariable) GoString ¶
func (v *UserVariable) GoString() string
func (UserVariable) SourceRange ¶ added in v0.11.0
func (r UserVariable) SourceRange() tfdiags.SourceRange
type Variable ¶
type Variable struct { Name string DeclaredType string `mapstructure:"type"` Default interface{} Description string }
Variable is a module argument defined within the configuration.
func (*Variable) Type ¶
func (v *Variable) Type() VariableType
Type returns the type of variable this is.
func (*Variable) ValidateTypeAndDefault ¶ added in v0.6.11
ValidateTypeAndDefault ensures that default variable value is compatible with the declared type (if one exists), and that the type is one which is known to Terraform
type VariableType ¶
type VariableType byte
VariableType is the type of value a variable is holding, and returned by the Type() function on variables.
const ( VariableTypeUnknown VariableType = iota VariableTypeString VariableTypeList VariableTypeMap )
func (VariableType) Printable ¶ added in v0.6.15
func (v VariableType) Printable() string
Source Files ¶
- append.go
- config.go
- config_string.go
- config_terraform.go
- config_tree.go
- hcl2_shim_util.go
- import_tree.go
- interpolate.go
- interpolate_funcs.go
- interpolate_walk.go
- lang.go
- loader.go
- loader_hcl.go
- loader_hcl2.go
- merge.go
- providers.go
- provisioner_enums.go
- raw_config.go
- resource_mode.go
- resource_mode_string.go
- testing.go
Directories ¶
Path | Synopsis |
---|---|
Package configschema contains types for describing the expected structure of a configuration block whose shape is not known until runtime.
|
Package configschema contains types for describing the expected structure of a configuration block whose shape is not known until runtime. |