diff --git a/addrs/provider_config.go b/addrs/provider_config.go index dfca8c9b1..57d4db6e1 100644 --- a/addrs/provider_config.go +++ b/addrs/provider_config.go @@ -1,5 +1,9 @@ package addrs +import ( + "fmt" +) + // ProviderConfig is the address of a provider configuration. type ProviderConfig struct { Type string @@ -8,3 +12,31 @@ type ProviderConfig struct { // configuration this address refers to. Alias string } + +// Absolute returns an AbsProviderConfig from the receiver and the given module +// instance address. +func (pc ProviderConfig) Absolute(module ModuleInstance) AbsProviderConfig { + return AbsProviderConfig{ + Module: module, + ProviderConfig: pc, + } +} + +func (pc ProviderConfig) String() string { + if pc.Alias != "" { + return fmt.Sprintf("provider.%s.%s", pc.Type, pc.Alias) + } + + return "provider." + pc.Type +} + +// AbsProviderConfig is the absolute address of a provider configuration +// within a particular module instance. +type AbsProviderConfig struct { + Module ModuleInstance + ProviderConfig ProviderConfig +} + +func (pc AbsProviderConfig) String() string { + return fmt.Sprintf("%s.%s", pc.Module.String(), pc.ProviderConfig.String()) +}