60 lines
1.9 KiB
Go
60 lines
1.9 KiB
Go
package terraform
|
|
|
|
import (
|
|
"fmt"
|
|
"log"
|
|
|
|
"github.com/hashicorp/hcl/v2"
|
|
|
|
"github.com/hashicorp/terraform/internal/addrs"
|
|
"github.com/hashicorp/terraform/internal/configs"
|
|
"github.com/hashicorp/terraform/internal/providers"
|
|
)
|
|
|
|
func buildProviderConfig(ctx EvalContext, addr addrs.AbsProviderConfig, config *configs.Provider) hcl.Body {
|
|
var configBody hcl.Body
|
|
if config != nil {
|
|
configBody = config.Config
|
|
}
|
|
|
|
var inputBody hcl.Body
|
|
inputConfig := ctx.ProviderInput(addr)
|
|
if len(inputConfig) > 0 {
|
|
inputBody = configs.SynthBody("<input-prompt>", inputConfig)
|
|
}
|
|
|
|
switch {
|
|
case configBody != nil && inputBody != nil:
|
|
log.Printf("[TRACE] buildProviderConfig for %s: merging explicit config and input", addr)
|
|
return hcl.MergeBodies([]hcl.Body{inputBody, configBody})
|
|
case configBody != nil:
|
|
log.Printf("[TRACE] buildProviderConfig for %s: using explicit config only", addr)
|
|
return configBody
|
|
case inputBody != nil:
|
|
log.Printf("[TRACE] buildProviderConfig for %s: using input only", addr)
|
|
return inputBody
|
|
default:
|
|
log.Printf("[TRACE] buildProviderConfig for %s: no configuration at all", addr)
|
|
return hcl.EmptyBody()
|
|
}
|
|
}
|
|
|
|
// getProvider returns the providers.Interface and schema for a given provider.
|
|
func getProvider(ctx EvalContext, addr addrs.AbsProviderConfig) (providers.Interface, *ProviderSchema, error) {
|
|
if addr.Provider.Type == "" {
|
|
// Should never happen
|
|
panic("GetProvider used with uninitialized provider configuration address")
|
|
}
|
|
provider := ctx.Provider(addr)
|
|
if provider == nil {
|
|
return nil, &ProviderSchema{}, fmt.Errorf("provider %s not initialized", addr)
|
|
}
|
|
// Not all callers require a schema, so we will leave checking for a nil
|
|
// schema to the callers.
|
|
schema, err := ctx.ProviderSchema(addr)
|
|
if err != nil {
|
|
return nil, &ProviderSchema{}, fmt.Errorf("failed to read schema for provider %s: %w", addr, err)
|
|
}
|
|
return provider, schema, nil
|
|
}
|