mirror of
https://github.com/hashicorp/terraform.git
synced 2026-03-27 04:44:09 -04:00
96 lines
3.1 KiB
Go
96 lines
3.1 KiB
Go
// Copyright IBM Corp. 2014, 2026
|
|
// SPDX-License-Identifier: BUSL-1.1
|
|
|
|
package stackaddrs
|
|
|
|
import (
|
|
"fmt"
|
|
|
|
"github.com/hashicorp/terraform/internal/addrs"
|
|
"github.com/hashicorp/terraform/internal/collections"
|
|
)
|
|
|
|
// ProviderConfigRef is a reference-only address type representing a reference
|
|
// to a particular provider configuration using its local name, since local
|
|
// name is how we refer to providers when they appear in expressions.
|
|
//
|
|
// The referent of a ProviderConfigRef is a [ProviderConfig], so resolving
|
|
// the reference will always require a lookup table from local name to
|
|
// fully-qualified provider address.
|
|
type ProviderConfigRef struct {
|
|
ProviderLocalName string
|
|
Name string
|
|
}
|
|
|
|
func (ProviderConfigRef) referenceableSigil() {}
|
|
|
|
func (r ProviderConfigRef) String() string {
|
|
return "provider." + r.ProviderLocalName + "." + r.Name
|
|
}
|
|
|
|
// ProviderConfig is the address of a "provider" block in a stack configuration.
|
|
type ProviderConfig struct {
|
|
Provider addrs.Provider
|
|
Name string
|
|
}
|
|
|
|
func (ProviderConfig) inStackConfigSigil() {}
|
|
func (ProviderConfig) inStackInstanceSigil() {}
|
|
|
|
func (c ProviderConfig) String() string {
|
|
return fmt.Sprintf("provider[%q].%s", c.Provider, c.Name)
|
|
}
|
|
|
|
func (v ProviderConfig) UniqueKey() collections.UniqueKey[ProviderConfig] {
|
|
return v
|
|
}
|
|
|
|
// A ProviderConfig is its own [collections.UniqueKey].
|
|
func (ProviderConfig) IsUniqueKey(ProviderConfig) {}
|
|
|
|
// ConfigProviderConfig places a [ProviderConfig] in the context of a particular [Stack].
|
|
type ConfigProviderConfig = InStackConfig[ProviderConfig]
|
|
|
|
// AbsProviderConfig places a [ProviderConfig] in the context of a particular [StackInstance].
|
|
type AbsProviderConfig = InStackInstance[ProviderConfig]
|
|
|
|
// ProviderConfigInstance is the address of a specific provider configuration,
|
|
// of which there might potentially be many associated with a given
|
|
// [ProviderConfig] if that block uses the "for_each" argument.
|
|
type ProviderConfigInstance struct {
|
|
ProviderConfig ProviderConfig
|
|
Key addrs.InstanceKey
|
|
}
|
|
|
|
func (ProviderConfigInstance) inStackConfigSigil() {}
|
|
func (ProviderConfigInstance) inStackInstanceSigil() {}
|
|
|
|
func (c ProviderConfigInstance) String() string {
|
|
if c.Key == nil {
|
|
return c.ProviderConfig.String()
|
|
}
|
|
return c.ProviderConfig.String() + c.Key.String()
|
|
}
|
|
|
|
func (v ProviderConfigInstance) UniqueKey() collections.UniqueKey[ProviderConfigInstance] {
|
|
return v
|
|
}
|
|
|
|
// A ProviderConfigInstance is its own [collections.UniqueKey].
|
|
func (ProviderConfigInstance) IsUniqueKey(ProviderConfigInstance) {}
|
|
|
|
// ConfigProviderConfigInstance places a [ProviderConfigInstance] in the context of a particular [Stack].
|
|
type ConfigProviderConfigInstance = InStackConfig[ProviderConfigInstance]
|
|
|
|
// AbsProviderConfigInstance places a [ProviderConfigInstance] in the context of a particular [StackInstance].
|
|
type AbsProviderConfigInstance = InStackInstance[ProviderConfigInstance]
|
|
|
|
func AbsProviderToInstance(addr AbsProviderConfig, ik addrs.InstanceKey) AbsProviderConfigInstance {
|
|
return AbsProviderConfigInstance{
|
|
Stack: addr.Stack,
|
|
Item: ProviderConfigInstance{
|
|
ProviderConfig: addr.Item,
|
|
Key: ik,
|
|
},
|
|
}
|
|
}
|