| // Copyright (c) HashiCorp, Inc. |
| // SPDX-License-Identifier: BUSL-1.1 |
| |
| package schemarepo |
| |
| import ( |
| "github.com/hashicorp/terraform/internal/addrs" |
| "github.com/hashicorp/terraform/internal/configs/configschema" |
| "github.com/hashicorp/terraform/internal/providers" |
| ) |
| |
| // Schemas is a container for various kinds of schema that Terraform needs |
| // during processing. |
| type Schemas struct { |
| Providers map[addrs.Provider]providers.ProviderSchema |
| Provisioners map[string]*configschema.Block |
| } |
| |
| // ProviderSchema returns the entire ProviderSchema object that was produced |
| // by the plugin for the given provider, or nil if no such schema is available. |
| // |
| // It's usually better to go use the more precise methods offered by type |
| // Schemas to handle this detail automatically. |
| func (ss *Schemas) ProviderSchema(provider addrs.Provider) providers.ProviderSchema { |
| return ss.Providers[provider] |
| } |
| |
| // ProviderConfig returns the schema for the provider configuration of the |
| // given provider type, or nil if no such schema is available. |
| func (ss *Schemas) ProviderConfig(provider addrs.Provider) *configschema.Block { |
| return ss.ProviderSchema(provider).Provider.Body |
| } |
| |
| // ResourceTypeConfig returns the schema for the configuration of a given |
| // resource type belonging to a given provider type, or an empty schema |
| // if no such schema is available. |
| // |
| // In many cases the provider type is inferrable from the resource type name, |
| // but this is not always true because users can override the provider for |
| // a resource using the "provider" meta-argument. Therefore it's important to |
| // always pass the correct provider name, even though it many cases it feels |
| // redundant. |
| func (ss *Schemas) ResourceTypeConfig(provider addrs.Provider, resourceMode addrs.ResourceMode, resourceType string) providers.Schema { |
| ps := ss.ProviderSchema(provider) |
| if ps.ResourceTypes == nil { |
| return providers.Schema{} |
| } |
| return ps.SchemaForResourceType(resourceMode, resourceType) |
| } |
| |
| // ProvisionerConfig returns the schema for the configuration of a given |
| // provisioner, or nil of no such schema is available. |
| func (ss *Schemas) ProvisionerConfig(name string) *configschema.Block { |
| return ss.Provisioners[name] |
| } |