Documentation ¶
Overview ¶
Package remote contains code for configuring remote state storage.
Index ¶
- Constants
- Variables
- func AddLabelsToGCSBucket(gcsClient *storage.Client, config *ExtendedRemoteStateConfigGCS, ...) error
- func ConfigValuesEqual(config map[string]interface{}, existingBackend *TerraformBackend, ...) bool
- func CreateGCSBucket(gcsClient *storage.Client, config *ExtendedRemoteStateConfigGCS, ...) error
- func CreateGCSBucketWithVersioning(gcsClient *storage.Client, config *ExtendedRemoteStateConfigGCS, ...) error
- func CreateGCSClient(gcsConfigRemote RemoteStateConfigGCS) (*storage.Client, error)
- func CreateLogsS3BucketIfNecessary(ctx context.Context, s3Client *s3.S3, logsBucketName *string, ...) error
- func CreateS3Bucket(s3Client *s3.S3, bucket *string, terragruntOptions *options.TerragruntOptions) error
- func CreateS3BucketWithVersioningSSEncryptionAndAccessLogging(ctx context.Context, s3Client *s3.S3, config *ExtendedRemoteStateConfigS3, ...) error
- func CreateS3Client(config *awshelper.AwsSessionConfig, ...) (*s3.S3, error)
- func DoesGCSBucketExist(gcsClient *storage.Client, config *RemoteStateConfigGCS) bool
- func DoesS3BucketExist(s3Client *s3.S3, bucket *string) bool
- func EnableAccessLoggingForS3BucketWide(s3Client *s3.S3, config *ExtendedRemoteStateConfigS3, ...) error
- func EnableEnforcedTLSAccesstoS3Bucket(s3Client *s3.S3, bucket string, config *ExtendedRemoteStateConfigS3, ...) error
- func EnablePublicAccessBlockingForS3Bucket(s3Client *s3.S3, bucketName string, ...) error
- func EnableRootAccesstoS3Bucket(s3Client *s3.S3, config *ExtendedRemoteStateConfigS3, ...) error
- func EnableSSEForS3BucketWide(s3Client *s3.S3, bucketName string, algorithm string, ...) error
- func EnableVersioningForS3Bucket(s3Client *s3.S3, config *RemoteStateConfigS3, ...) error
- func GCSConfigValuesEqual(config map[string]interface{}, existingBackend *TerraformBackend, ...) bool
- func TagS3Bucket(s3Client *s3.S3, config *ExtendedRemoteStateConfigS3, ...) error
- func TagS3BucketAccessLogging(s3Client *s3.S3, config *ExtendedRemoteStateConfigS3, ...) error
- func UpdateLockTableSetSSEncryptionOnIfNecessary(s3Config *RemoteStateConfigS3, config *ExtendedRemoteStateConfigS3, ...) error
- func ValidatePublicAccessBlock(output *s3.GetPublicAccessBlockOutput) (bool, error)
- func ValidateS3Config(extendedConfig *ExtendedRemoteStateConfigS3) error
- func WaitUntilGCSBucketExists(gcsClient *storage.Client, config *RemoteStateConfigGCS, ...) error
- func WaitUntilS3BucketExists(s3Client *s3.S3, config *RemoteStateConfigS3, ...) error
- func WrapMapToSingleLineHcl(m map[string]interface{}) string
- type BucketCreationNotAllowed
- type CantParseTerraformStateFileError
- type ExtendedRemoteStateConfigGCS
- type ExtendedRemoteStateConfigS3
- type GCSInitializer
- func (initializer GCSInitializer) GetTerraformInitArgs(config map[string]interface{}) map[string]interface{}
- func (initializer GCSInitializer) Initialize(ctx context.Context, remoteState *RemoteState, ...) error
- func (initializer GCSInitializer) NeedsInitialization(remoteState *RemoteState, existingBackend *TerraformBackend, ...) (bool, error)
- type InvalidAccessLoggingBucketEncryption
- type MaxRetriesWaitingForS3ACLExceeded
- type MaxRetriesWaitingForS3BucketExceeded
- type MissingRequiredGCSRemoteStateConfig
- type MissingRequiredS3RemoteStateConfig
- type MultipleTagsDeclarations
- type RemoteState
- func (state *RemoteState) DiffersFrom(existingBackend *TerraformBackend, ...) bool
- func (state *RemoteState) FillDefaults()
- func (state *RemoteState) GenerateTerraformCode(terragruntOptions *options.TerragruntOptions) error
- func (state *RemoteState) Initialize(ctx context.Context, terragruntOptions *options.TerragruntOptions) error
- func (state *RemoteState) NeedsInit(terragruntOptions *options.TerragruntOptions) (bool, error)
- func (state *RemoteState) String() string
- func (state RemoteState) ToTerraformInitArgs() []string
- func (state *RemoteState) Validate() error
- type RemoteStateConfigGCS
- type RemoteStateConfigS3
- type RemoteStateConfigS3AssumeRole
- type RemoteStateGenerate
- type RemoteStateInitializer
- type S3BucketUpdatesRequired
- type S3Initializer
- func (s3Initializer S3Initializer) GetTerraformInitArgs(config map[string]interface{}) map[string]interface{}
- func (s3Initializer S3Initializer) Initialize(ctx context.Context, remoteState *RemoteState, ...) error
- func (s3Initializer S3Initializer) NeedsInitialization(remoteState *RemoteState, existingBackend *TerraformBackend, ...) (bool, error)
- type TerraformBackend
- type TerraformState
- type TerraformStateModule
Constants ¶
const ( DefaultS3BucketAccessLoggingTargetPrefix = "TFStateLogs/" SidRootPolicy = "RootAccess" SidEnforcedTLSPolicy = "EnforcedTLS" )
const DefaultPathToLocalStateFile = "terraform.tfstate"
DefaultPathToLocalStateFile is the default path to the tfstate file when storing Terraform state locally.
const DefaultPathToRemoteStateFile = "terraform.tfstate"
DefaultPathToRemoteStateFile is the default folder location for the local copy of the state file when using remote state storage in Terraform.
const MaxRetriesWaitingForGcsBucket = 12
const MaxRetriesWaitingForS3Bucket = 12
const SleepBetweenRetriesWaitingForGcsBucket = 5 * time.Second
const SleepBetweenRetriesWaitingForS3Bucket = 5 * time.Second
Variables ¶
var ( ErrRemoteBackendMissing = goErrors.New("the remote_state.backend field cannot be empty") ErrGenerateCalledWithNoGenerateAttr = goErrors.New("generate code routine called when no generate attribute is configured") )
Custom errors
Functions ¶
func AddLabelsToGCSBucket ¶
func AddLabelsToGCSBucket(gcsClient *storage.Client, config *ExtendedRemoteStateConfigGCS, terragruntOptions *options.TerragruntOptions) error
func ConfigValuesEqual ¶
func ConfigValuesEqual(config map[string]interface{}, existingBackend *TerraformBackend, terragruntOptions *options.TerragruntOptions) bool
ConfigValuesEqual returns true if the given config is in any way different than what is configured for the backend
func CreateGCSBucket ¶
func CreateGCSBucket(gcsClient *storage.Client, config *ExtendedRemoteStateConfigGCS, terragruntOptions *options.TerragruntOptions) error
CreateGCSBucket creates the GCS bucket specified in the given config.
func CreateGCSBucketWithVersioning ¶
func CreateGCSBucketWithVersioning(gcsClient *storage.Client, config *ExtendedRemoteStateConfigGCS, terragruntOptions *options.TerragruntOptions) error
CreateGCSBucketWithVersioning creates the given GCS bucket and enables versioning for it.
func CreateGCSClient ¶
func CreateGCSClient(gcsConfigRemote RemoteStateConfigGCS) (*storage.Client, error)
CreateGCSClient creates an authenticated client for GCS
func CreateS3Bucket ¶
func CreateS3Bucket(s3Client *s3.S3, bucket *string, terragruntOptions *options.TerragruntOptions) error
CreateS3Bucket creates the S3 bucket specified in the given config.
func CreateS3BucketWithVersioningSSEncryptionAndAccessLogging ¶
func CreateS3BucketWithVersioningSSEncryptionAndAccessLogging(ctx context.Context, s3Client *s3.S3, config *ExtendedRemoteStateConfigS3, terragruntOptions *options.TerragruntOptions) error
CreateS3BucketWithVersioningSSEncryptionAndAccessLogging creates the given S3 bucket and enable versioning for it.
func CreateS3Client ¶
func CreateS3Client(config *awshelper.AwsSessionConfig, terragruntOptions *options.TerragruntOptions) (*s3.S3, error)
CreateS3Client creates an authenticated client for DynamoDB.
func DoesGCSBucketExist ¶
func DoesGCSBucketExist(gcsClient *storage.Client, config *RemoteStateConfigGCS) bool
DoesGCSBucketExist returns true if the GCS bucket specified in the given config exists and the current user has the ability to access it.
func DoesS3BucketExist ¶
DoesS3BucketExist checks if the S3 bucket specified in the given config exists.
Returns true if the S3 bucket specified in the given config exists and the current user has the ability to access it.
func EnableAccessLoggingForS3BucketWide ¶
func EnableAccessLoggingForS3BucketWide(s3Client *s3.S3, config *ExtendedRemoteStateConfigS3, terragruntOptions *options.TerragruntOptions) error
EnableAccessLoggingForS3BucketWide enables bucket-wide Access Logging for the AWS S3 bucket specified in the given config.
func EnableEnforcedTLSAccesstoS3Bucket ¶
func EnableEnforcedTLSAccesstoS3Bucket(s3Client *s3.S3, bucket string, config *ExtendedRemoteStateConfigS3, terragruntOptions *options.TerragruntOptions) error
EnableEnforcedTLSAccesstoS3Bucket adds a policy to enforce TLS based access to the bucket.
func EnablePublicAccessBlockingForS3Bucket ¶
func EnablePublicAccessBlockingForS3Bucket(s3Client *s3.S3, bucketName string, terragruntOptions *options.TerragruntOptions) error
EnablePublicAccessBlockingForS3Bucket blocks all public access policies on the bucket and objects. These settings ensure that a misconfiguration of the bucket or objects will not accidentally enable public access to those items. See https://docs.aws.amazon.com/AmazonS3/latest/dev/access-control-block-public-access.html for more information.
func EnableRootAccesstoS3Bucket ¶
func EnableRootAccesstoS3Bucket(s3Client *s3.S3, config *ExtendedRemoteStateConfigS3, terragruntOptions *options.TerragruntOptions) error
EnableRootAccesstoS3Bucket adds a policy to allow root access to the bucket.
func EnableSSEForS3BucketWide ¶
func EnableSSEForS3BucketWide(s3Client *s3.S3, bucketName string, algorithm string, config *ExtendedRemoteStateConfigS3, terragruntOptions *options.TerragruntOptions) error
EnableSSEForS3BucketWide enables bucket-wide Server-Side Encryption for the AWS S3 bucket specified in the given config.
func EnableVersioningForS3Bucket ¶
func EnableVersioningForS3Bucket(s3Client *s3.S3, config *RemoteStateConfigS3, terragruntOptions *options.TerragruntOptions) error
EnableVersioningForS3Bucket enables versioning for the S3 bucket specified in the given config.
func GCSConfigValuesEqual ¶
func GCSConfigValuesEqual(config map[string]interface{}, existingBackend *TerraformBackend, terragruntOptions *options.TerragruntOptions) bool
GCSConfigValuesEqual returns true if the given config is in any way different than what is configured for the backend.
func TagS3Bucket ¶
func TagS3Bucket(s3Client *s3.S3, config *ExtendedRemoteStateConfigS3, terragruntOptions *options.TerragruntOptions) error
func TagS3BucketAccessLogging ¶
func TagS3BucketAccessLogging(s3Client *s3.S3, config *ExtendedRemoteStateConfigS3, terragruntOptions *options.TerragruntOptions) error
func UpdateLockTableSetSSEncryptionOnIfNecessary ¶
func UpdateLockTableSetSSEncryptionOnIfNecessary(s3Config *RemoteStateConfigS3, config *ExtendedRemoteStateConfigS3, terragruntOptions *options.TerragruntOptions) error
UpdateLockTableSetSSEncryptionOnIfNecessary updates a table for locks in DynamoDB if the user has configured a lock table and the table's server-side encryption isn't turned on.
func ValidatePublicAccessBlock ¶
func ValidatePublicAccessBlock(output *s3.GetPublicAccessBlockOutput) (bool, error)
func ValidateS3Config ¶
func ValidateS3Config(extendedConfig *ExtendedRemoteStateConfigS3) error
ValidateS3Config validates all the parameters of the given S3 remote state configuration.
func WaitUntilGCSBucketExists ¶
func WaitUntilGCSBucketExists(gcsClient *storage.Client, config *RemoteStateConfigGCS, terragruntOptions *options.TerragruntOptions) error
WaitUntilGCSBucketExists waits for the GCS bucket specified in the given config to be created.
GCP is eventually consistent, so after creating a GCS bucket, this method can be used to wait until the information about that GCS bucket has propagated everywhere.
func WaitUntilS3BucketExists ¶
func WaitUntilS3BucketExists(s3Client *s3.S3, config *RemoteStateConfigS3, terragruntOptions *options.TerragruntOptions) error
WaitUntilS3BucketExists waits until the given S3 bucket exists.
AWS is eventually consistent, so after creating an S3 bucket, this method can be used to wait until the information about that S3 bucket has propagated everywhere.
func WrapMapToSingleLineHcl ¶
WrapMapToSingleLineHcl - This is a workaround to convert a map[string]interface{} to a single line HCL string.
Types ¶
type BucketCreationNotAllowed ¶
type BucketCreationNotAllowed string
func (BucketCreationNotAllowed) Error ¶
func (bucketName BucketCreationNotAllowed) Error() string
type CantParseTerraformStateFileError ¶
CantParseTerraformStateFileError error that occurs when we can't parse the Terraform state file.
func (CantParseTerraformStateFileError) Error ¶
func (err CantParseTerraformStateFileError) Error() string
type ExtendedRemoteStateConfigGCS ¶
type ExtendedRemoteStateConfigGCS struct { Project string `mapstructure:"project"` Location string `mapstructure:"location"` GCSBucketLabels map[string]string `mapstructure:"gcs_bucket_labels"` SkipBucketVersioning bool `mapstructure:"skip_bucket_versioning"` SkipBucketCreation bool `mapstructure:"skip_bucket_creation"` EnableBucketPolicyOnly bool `mapstructure:"enable_bucket_policy_only"` // contains filtered or unexported fields }
ExtendedRemoteStateConfigGCS is a struct that contains the GCS specific configuration options. * * We use this construct to separate the config key 'gcs_bucket_labels' from the others, as they * are specific to the gcs backend, but only used by terragrunt to tag the gcs bucket in case it * has to create them.
type ExtendedRemoteStateConfigS3 ¶
type ExtendedRemoteStateConfigS3 struct { RemoteStateConfigS3 RemoteStateConfigS3 `mapstructure:",squash"` S3BucketTags map[string]string `mapstructure:"s3_bucket_tags"` DynamotableTags map[string]string `mapstructure:"dynamodb_table_tags"` AccessLoggingBucketTags map[string]string `mapstructure:"accesslogging_bucket_tags"` SkipCredentialsValidation bool `mapstructure:"skip_credentials_validation"` SkipBucketVersioning bool `mapstructure:"skip_bucket_versioning"` SkipBucketSSEncryption bool `mapstructure:"skip_bucket_ssencryption"` SkipBucketAccessLogging bool `mapstructure:"skip_bucket_accesslogging"` SkipBucketRootAccess bool `mapstructure:"skip_bucket_root_access"` SkipBucketEnforcedTLS bool `mapstructure:"skip_bucket_enforced_tls"` SkipBucketPublicAccessBlocking bool `mapstructure:"skip_bucket_public_access_blocking"` DisableBucketUpdate bool `mapstructure:"disable_bucket_update"` EnableLockTableSSEncryption bool `mapstructure:"enable_lock_table_ssencryption"` DisableAWSClientChecksums bool `mapstructure:"disable_aws_client_checksums"` AccessLoggingBucketName string `mapstructure:"accesslogging_bucket_name"` AccessLoggingTargetObjectPartitionDateSource string `mapstructure:"accesslogging_target_object_partition_date_source"` AccessLoggingTargetPrefix string `mapstructure:"accesslogging_target_prefix"` SkipAccessLoggingBucketACL bool `mapstructure:"skip_accesslogging_bucket_acl"` SkipAccessLoggingBucketEnforcedTLS bool `mapstructure:"skip_accesslogging_bucket_enforced_tls"` SkipAccessLoggingBucketPublicAccessBlocking bool `mapstructure:"skip_accesslogging_bucket_public_access_blocking"` SkipAccessLoggingBucketSSEncryption bool `mapstructure:"skip_accesslogging_bucket_ssencryption"` BucketSSEAlgorithm string `mapstructure:"bucket_sse_algorithm"` BucketSSEKMSKeyID string `mapstructure:"bucket_sse_kms_key_id"` }
ExtendedRemoteStateConfigS3 is a struct that contains the RemoteStateConfigS3 struct and additional * configuration options that are specific to the S3 backend. This struct is used to parse the configuration * from the Terragrunt configuration file. * * We use this construct to separate the three config keys 's3_bucket_tags', 'dynamodb_table_tags' * and 'accesslogging_bucket_tags' from the others, as they are specific to the s3 backend, * but only used by terragrunt to tag the s3 bucket, the dynamo db and the s3 bucket used to the * access logs, in case it has to create them.
func ParseExtendedS3Config ¶
func ParseExtendedS3Config(config map[string]interface{}) (*ExtendedRemoteStateConfigS3, error)
ParseExtendedS3Config parses the given map into an extended S3 config.
func (*ExtendedRemoteStateConfigS3) CreateS3LoggingInput ¶
func (c *ExtendedRemoteStateConfigS3) CreateS3LoggingInput() s3.PutBucketLoggingInput
CreateS3LoggingInput builds AWS S3 logging input struct from the configuration.
func (*ExtendedRemoteStateConfigS3) GetAwsSessionConfig ¶
func (c *ExtendedRemoteStateConfigS3) GetAwsSessionConfig() *awshelper.AwsSessionConfig
GetAwsSessionConfig builds a session config for AWS related requests from the RemoteStateConfigS3 configuration.
type GCSInitializer ¶
type GCSInitializer struct{}
func (GCSInitializer) GetTerraformInitArgs ¶
func (initializer GCSInitializer) GetTerraformInitArgs(config map[string]interface{}) map[string]interface{}
GetTerraformInitArgs returns the subset of the given config that should be passed to terraform init when initializing the remote state.
func (GCSInitializer) Initialize ¶
func (initializer GCSInitializer) Initialize(ctx context.Context, remoteState *RemoteState, terragruntOptions *options.TerragruntOptions) error
Initialize the remote state GCS bucket specified in the given config. This function will validate the config parameters, create the GCS bucket if it doesn't already exist, and check that versioning is enabled.
func (GCSInitializer) NeedsInitialization ¶
func (initializer GCSInitializer) NeedsInitialization(remoteState *RemoteState, existingBackend *TerraformBackend, terragruntOptions *options.TerragruntOptions) (bool, error)
NeedsInitialization returns true if the GCS bucket specified in the given config does not exist or if the bucket exists but versioning is not enabled.
Returns true if:
1. Any of the existing backend settings are different than the current config 2. The configured GCS bucket does not exist
type InvalidAccessLoggingBucketEncryption ¶
type InvalidAccessLoggingBucketEncryption struct {
BucketSSEAlgorithm string
}
func (InvalidAccessLoggingBucketEncryption) Error ¶
func (err InvalidAccessLoggingBucketEncryption) Error() string
type MaxRetriesWaitingForS3ACLExceeded ¶
type MaxRetriesWaitingForS3ACLExceeded string
func (MaxRetriesWaitingForS3ACLExceeded) Error ¶
func (err MaxRetriesWaitingForS3ACLExceeded) Error() string
type MaxRetriesWaitingForS3BucketExceeded ¶
type MaxRetriesWaitingForS3BucketExceeded string
func (MaxRetriesWaitingForS3BucketExceeded) Error ¶
func (err MaxRetriesWaitingForS3BucketExceeded) Error() string
type MissingRequiredGCSRemoteStateConfig ¶
type MissingRequiredGCSRemoteStateConfig string
func (MissingRequiredGCSRemoteStateConfig) Error ¶
func (configName MissingRequiredGCSRemoteStateConfig) Error() string
type MissingRequiredS3RemoteStateConfig ¶
type MissingRequiredS3RemoteStateConfig string
func (MissingRequiredS3RemoteStateConfig) Error ¶
func (configName MissingRequiredS3RemoteStateConfig) Error() string
type MultipleTagsDeclarations ¶
type MultipleTagsDeclarations string
func (MultipleTagsDeclarations) Error ¶
func (target MultipleTagsDeclarations) Error() string
type RemoteState ¶
type RemoteState struct { Backend string `mapstructure:"backend" json:"Backend"` DisableInit bool `mapstructure:"disable_init" json:"DisableInit"` DisableDependencyOptimization bool `mapstructure:"disable_dependency_optimization" json:"DisableDependencyOptimization"` Generate *RemoteStateGenerate `mapstructure:"generate" json:"Generate"` Config map[string]interface{} `mapstructure:"config" json:"Config"` }
RemoteState is the configuration for Terraform remote state NOTE: If any attributes are added here, be sure to add it to remoteStateAsCty in config/config_as_cty.go
func (*RemoteState) DiffersFrom ¶
func (state *RemoteState) DiffersFrom(existingBackend *TerraformBackend, terragruntOptions *options.TerragruntOptions) bool
DiffersFrom returns true if this remote state is different than the given remote state that is currently being used by terraform.
func (*RemoteState) FillDefaults ¶
func (state *RemoteState) FillDefaults()
FillDefaults fills in any default configuration for remote state
func (*RemoteState) GenerateTerraformCode ¶
func (state *RemoteState) GenerateTerraformCode(terragruntOptions *options.TerragruntOptions) error
GenerateTerraformCode generates the terraform code for configuring remote state backend.
func (*RemoteState) Initialize ¶
func (state *RemoteState) Initialize(ctx context.Context, terragruntOptions *options.TerragruntOptions) error
Initialize performs any actions necessary to initialize the remote state before it's used for storage. For example, if you're using S3 or GCS for remote state storage, this may create the bucket if it doesn't exist already.
func (*RemoteState) NeedsInit ¶
func (state *RemoteState) NeedsInit(terragruntOptions *options.TerragruntOptions) (bool, error)
NeedsInit returns true if remote state needs to be configured. This will be the case when:
1. Remote state auto-initialization has been disabled 2. Remote state has not already been configured 3. Remote state has been configured, but with a different configuration 4. The remote state initializer for this backend type, if there is one, says initialization is necessary
func (*RemoteState) String ¶
func (state *RemoteState) String() string
func (RemoteState) ToTerraformInitArgs ¶
func (state RemoteState) ToTerraformInitArgs() []string
ToTerraformInitArgs converts the RemoteState config into the format used by the terraform init command
func (*RemoteState) Validate ¶
func (state *RemoteState) Validate() error
Validate that the remote state is configured correctly
type RemoteStateConfigGCS ¶
type RemoteStateConfigGCS struct { Bucket string `mapstructure:"bucket"` Credentials string `mapstructure:"credentials"` AccessToken string `mapstructure:"access_token"` Prefix string `mapstructure:"prefix"` Path string `mapstructure:"path"` EncryptionKey string `mapstructure:"encryption_key"` ImpersonateServiceAccount string `mapstructure:"impersonate_service_account"` ImpersonateServiceAccountDelegates []string `mapstructure:"impersonate_service_account_delegates"` }
RemoteStateConfigGCS is a representation of the configuration options available for GCS remote state.
type RemoteStateConfigS3 ¶
type RemoteStateConfigS3 struct { Encrypt bool `mapstructure:"encrypt"` Bucket string `mapstructure:"bucket"` Key string `mapstructure:"key"` Region string `mapstructure:"region"` Endpoint string `mapstructure:"endpoint"` DynamoDBEndpoint string `mapstructure:"dynamodb_endpoint"` Profile string `mapstructure:"profile"` RoleArn string `mapstructure:"role_arn"` // Deprecated in Terraform version 1.6 or newer. ExternalID string `mapstructure:"external_id"` // Deprecated in Terraform version 1.6 or newer. SessionName string `mapstructure:"session_name"` // Deprecated in Terraform version 1.6 or newer. LockTable string `mapstructure:"lock_table"` // Deprecated in Terraform version 0.13 or newer. DynamoDBTable string `mapstructure:"dynamodb_table"` CredsFilename string `mapstructure:"shared_credentials_file"` S3ForcePathStyle bool `mapstructure:"force_path_style"` AssumeRole RemoteStateConfigS3AssumeRole `mapstructure:"assume_role"` }
RemoteStateConfigS3 is a representation of the configuration options available for S3 remote state.
func (*RemoteStateConfigS3) GetExternalID ¶
func (s3Config *RemoteStateConfigS3) GetExternalID() string
GetExternalID returns the external ID defined in the AssumeRole struct or fallback to the top level argument deprecated in Terraform 1.6 The external ID is used to prevent confused deputy attacks.
func (*RemoteStateConfigS3) GetLockTableName ¶
func (s3Config *RemoteStateConfigS3) GetLockTableName() string
GetLockTableName returns the name of the DynamoDB table used for locking.
The DynamoDB lock table attribute used to be called "lock_table", but has since been renamed to "dynamodb_table", and the old attribute name deprecated. The old attribute name has been eventually removed from Terraform starting with release 0.13. To maintain backwards compatibility, we support both names.
func (*RemoteStateConfigS3) GetSessionName ¶
func (s3Config *RemoteStateConfigS3) GetSessionName() string
func (*RemoteStateConfigS3) GetSessionRoleArn ¶
func (s3Config *RemoteStateConfigS3) GetSessionRoleArn() string
GetSessionRoleArn returns the role defined in the AssumeRole struct or fallback to the top level argument deprecated in Terraform 1.6
type RemoteStateGenerate ¶
type RemoteStateGenerate struct { Path string `cty:"path" mapstructure:"path"` IfExists string `cty:"if_exists" mapstructure:"if_exists"` }
RemoteStateGenerate is code gen configuration for Terraform remote state.
type RemoteStateInitializer ¶
type RemoteStateInitializer interface { // Return true if remote state needs to be initialized NeedsInitialization(remoteState *RemoteState, existingBackend *TerraformBackend, terragruntOptions *options.TerragruntOptions) (bool, error) // Initialize the remote state Initialize(ctx context.Context, remoteState *RemoteState, terragruntOptions *options.TerragruntOptions) error // Return the config that should be passed on to terraform via -backend-config cmd line param // Allows the Backends to filter and/or modify the configuration given from the user GetTerraformInitArgs(config map[string]interface{}) map[string]interface{} }
type S3BucketUpdatesRequired ¶
type S3Initializer ¶
type S3Initializer struct{}
func (S3Initializer) GetTerraformInitArgs ¶
func (s3Initializer S3Initializer) GetTerraformInitArgs(config map[string]interface{}) map[string]interface{}
func (S3Initializer) Initialize ¶
func (s3Initializer S3Initializer) Initialize(ctx context.Context, remoteState *RemoteState, terragruntOptions *options.TerragruntOptions) error
Initialize the remote state S3 bucket specified in the given config. This function will validate the config parameters, create the S3 bucket if it doesn't already exist, and check that versioning is enabled.
func (S3Initializer) NeedsInitialization ¶
func (s3Initializer S3Initializer) NeedsInitialization(remoteState *RemoteState, existingBackend *TerraformBackend, terragruntOptions *options.TerragruntOptions) (bool, error)
NeedsInitialization returns true if the remote state S3 bucket specified in the given config needs to be initialized.
Returns true if:
1. Any of the existing backend settings are different than the current config 2. The configured S3 bucket or DynamoDB table does not exist
type TerraformBackend ¶
type TerraformBackend struct { Type string `json:"Type"` Config map[string]interface{} `json:"Config"` }
TerraformBackend represents the structure of the "backend" section in the Terraform .tfstate file.
type TerraformState ¶
type TerraformState struct { Version int `json:"Version"` Serial int `json:"Serial"` Backend *TerraformBackend `json:"Backend"` Modules []TerraformStateModule `json:"Modules"` }
TerraformState - represents the structure of the Terraform .tfstate file.
func ParseTerraformState ¶
func ParseTerraformState(terraformStateData []byte) (*TerraformState, error)
ParseTerraformState parses the Terraform state file data from the provided byte slice.
func ParseTerraformStateFile ¶
func ParseTerraformStateFile(path string) (*TerraformState, error)
ParseTerraformStateFile parses the Terraform .tfstate file located at the specified path.
func ParseTerraformStateFileFromLocation ¶
func ParseTerraformStateFileFromLocation(backend string, config map[string]interface{}, workingDir, dataDir string) (*TerraformState, error)
ParseTerraformStateFileFromLocation parses the Terraform .tfstate file. If a local backend is used then search the given path, or return nil if the file is missing. If the backend is not local then parse the Terraform .tfstate file from the location specified by workingDir. If no location is specified, search the current directory. If the file doesn't exist at any of the default locations, return nil.
func (*TerraformState) IsRemote ¶
func (state *TerraformState) IsRemote() bool
IsRemote returns true if this Terraform state is configured for remote state storage.
type TerraformStateModule ¶
type TerraformStateModule struct { Path []string `json:"Path"` Outputs map[string]interface{} `json:"Outputs"` Resources map[string]interface{} `json:"Resources"` }
TerraformStateModule represents the structure of a "module" section in the Terraform .tfstate file.