mirror of
https://github.com/opentofu/opentofu.git
synced 2025-01-18 12:42:58 -06:00
1409f30f9c
This is part of a general effort to move all of Terraform's non-library package surface under internal in order to reinforce that these are for internal use within Terraform only. If you were previously importing packages under this prefix into an external codebase, you could pin to an earlier release tag as an interim solution until you've make a plan to achieve the same functionality some other way.
141 lines
5.2 KiB
Go
141 lines
5.2 KiB
Go
package terraform
|
|
|
|
import (
|
|
"fmt"
|
|
"log"
|
|
|
|
"github.com/hashicorp/terraform/internal/providers"
|
|
)
|
|
|
|
// Provider is an implementation of providers.Interface
|
|
type Provider struct {
|
|
// Provider is the schema for the provider itself.
|
|
Schema providers.Schema
|
|
|
|
// DataSources maps the data source name to that data source's schema.
|
|
DataSources map[string]providers.Schema
|
|
}
|
|
|
|
// NewProvider returns a new terraform provider
|
|
func NewProvider() providers.Interface {
|
|
return &Provider{}
|
|
}
|
|
|
|
// GetSchema returns the complete schema for the provider.
|
|
func (p *Provider) GetProviderSchema() providers.GetProviderSchemaResponse {
|
|
return providers.GetProviderSchemaResponse{
|
|
DataSources: map[string]providers.Schema{
|
|
"terraform_remote_state": dataSourceRemoteStateGetSchema(),
|
|
},
|
|
}
|
|
}
|
|
|
|
// ValidateProviderConfig is used to validate the configuration values.
|
|
func (p *Provider) ValidateProviderConfig(req providers.ValidateProviderConfigRequest) providers.ValidateProviderConfigResponse {
|
|
// At this moment there is nothing to configure for the terraform provider,
|
|
// so we will happily return without taking any action
|
|
var res providers.ValidateProviderConfigResponse
|
|
res.PreparedConfig = req.Config
|
|
return res
|
|
}
|
|
|
|
// ValidateDataResourceConfig is used to validate the data source configuration values.
|
|
func (p *Provider) ValidateDataResourceConfig(req providers.ValidateDataResourceConfigRequest) providers.ValidateDataResourceConfigResponse {
|
|
// FIXME: move the backend configuration validate call that's currently
|
|
// inside the read method into here so that we can catch provider configuration
|
|
// errors in terraform validate as well as during terraform plan.
|
|
var res providers.ValidateDataResourceConfigResponse
|
|
|
|
// This should not happen
|
|
if req.TypeName != "terraform_remote_state" {
|
|
res.Diagnostics.Append(fmt.Errorf("Error: unsupported data source %s", req.TypeName))
|
|
return res
|
|
}
|
|
|
|
diags := dataSourceRemoteStateValidate(req.Config)
|
|
res.Diagnostics = diags
|
|
|
|
return res
|
|
}
|
|
|
|
// Configure configures and initializes the provider.
|
|
func (p *Provider) ConfigureProvider(providers.ConfigureProviderRequest) providers.ConfigureProviderResponse {
|
|
// At this moment there is nothing to configure for the terraform provider,
|
|
// so we will happily return without taking any action
|
|
var res providers.ConfigureProviderResponse
|
|
return res
|
|
}
|
|
|
|
// ReadDataSource returns the data source's current state.
|
|
func (p *Provider) ReadDataSource(req providers.ReadDataSourceRequest) providers.ReadDataSourceResponse {
|
|
// call function
|
|
var res providers.ReadDataSourceResponse
|
|
|
|
// This should not happen
|
|
if req.TypeName != "terraform_remote_state" {
|
|
res.Diagnostics.Append(fmt.Errorf("Error: unsupported data source %s", req.TypeName))
|
|
return res
|
|
}
|
|
|
|
newState, diags := dataSourceRemoteStateRead(req.Config)
|
|
|
|
res.State = newState
|
|
res.Diagnostics = diags
|
|
|
|
return res
|
|
}
|
|
|
|
// Stop is called when the provider should halt any in-flight actions.
|
|
func (p *Provider) Stop() error {
|
|
log.Println("[DEBUG] terraform provider cannot Stop")
|
|
return nil
|
|
}
|
|
|
|
// All the Resource-specific functions are below.
|
|
// The terraform provider supplies a single data source, `terraform_remote_state`
|
|
// and no resources.
|
|
|
|
// UpgradeResourceState is called when the state loader encounters an
|
|
// instance state whose schema version is less than the one reported by the
|
|
// currently-used version of the corresponding provider, and the upgraded
|
|
// result is used for any further processing.
|
|
func (p *Provider) UpgradeResourceState(providers.UpgradeResourceStateRequest) providers.UpgradeResourceStateResponse {
|
|
panic("unimplemented - terraform_remote_state has no resources")
|
|
}
|
|
|
|
// ReadResource refreshes a resource and returns its current state.
|
|
func (p *Provider) ReadResource(providers.ReadResourceRequest) providers.ReadResourceResponse {
|
|
panic("unimplemented - terraform_remote_state has no resources")
|
|
}
|
|
|
|
// PlanResourceChange takes the current state and proposed state of a
|
|
// resource, and returns the planned final state.
|
|
func (p *Provider) PlanResourceChange(providers.PlanResourceChangeRequest) providers.PlanResourceChangeResponse {
|
|
panic("unimplemented - terraform_remote_state has no resources")
|
|
}
|
|
|
|
// ApplyResourceChange takes the planned state for a resource, which may
|
|
// yet contain unknown computed values, and applies the changes returning
|
|
// the final state.
|
|
func (p *Provider) ApplyResourceChange(providers.ApplyResourceChangeRequest) providers.ApplyResourceChangeResponse {
|
|
panic("unimplemented - terraform_remote_state has no resources")
|
|
}
|
|
|
|
// ImportResourceState requests that the given resource be imported.
|
|
func (p *Provider) ImportResourceState(providers.ImportResourceStateRequest) providers.ImportResourceStateResponse {
|
|
panic("unimplemented - terraform_remote_state has no resources")
|
|
}
|
|
|
|
// ValidateResourceConfig is used to to validate the resource configuration values.
|
|
func (p *Provider) ValidateResourceConfig(providers.ValidateResourceConfigRequest) providers.ValidateResourceConfigResponse {
|
|
// At this moment there is nothing to configure for the terraform provider,
|
|
// so we will happily return without taking any action
|
|
var res providers.ValidateResourceConfigResponse
|
|
return res
|
|
}
|
|
|
|
// Close is a noop for this provider, since it's run in-process.
|
|
func (p *Provider) Close() error {
|
|
return nil
|
|
}
|