You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
terraform/internal/getproviders/supplymode.go

48 lines
1.6 KiB

// Copyright IBM Corp. 2014, 2026
// SPDX-License-Identifier: BUSL-1.1
package getproviders
// ProviderSupplyMode describes how a provider is being supplied to Terraform.
type ProviderSupplyMode string
const (
// Unset value.
Unset ProviderSupplyMode = ""
// The provider is built into the Terraform binary.
BuiltIn ProviderSupplyMode = "built_in"
// The provider is unmanaged by Terraform, supplied via TF_REATTACH_PROVIDERS by the user/environment.
Reattached ProviderSupplyMode = "reattached"
// The provider is overridden by a development configuration.
DevOverride ProviderSupplyMode = "dev_override"
// The provider is managed by Terraform. This is the "normal" and most common case.
ManagedByTerraform ProviderSupplyMode = "managed_by_terraform"
)
// NotManagedByTerraform returns true if the provider supply mode is any of the modes that aren't managed by Terraform (built-in, reattached, dev override).
// The term "unmanaged" in the past has been used to refer to only reattached providers, however reattached, dev_override and built-in providers are all
// providers that Terraform will not record in the lock file and manage version data for.
//
// This method is intended to be used when that distinction is important.
func (m ProviderSupplyMode) NotManagedByTerraform() bool {
return m != ManagedByTerraform
}
func DetermineProviderSupplyMode(isDevOverride bool, isReattached bool, isBuiltin bool) ProviderSupplyMode {
switch {
case isBuiltin:
return BuiltIn
case isReattached:
return Reattached
case isDevOverride:
return DevOverride
default:
// assume provider is managed if nothing indicates otherwise.
return ManagedByTerraform
}
}