provider/plugin_framework.go (89 lines of code) (raw):
package provider
import (
"context"
"github.com/elastic/terraform-provider-elasticstack/internal/clients"
"github.com/elastic/terraform-provider-elasticstack/internal/clients/config"
"github.com/elastic/terraform-provider-elasticstack/internal/elasticsearch/index/data_stream_lifecycle"
"github.com/elastic/terraform-provider-elasticstack/internal/elasticsearch/index/index"
"github.com/elastic/terraform-provider-elasticstack/internal/elasticsearch/index/indices"
"github.com/elastic/terraform-provider-elasticstack/internal/elasticsearch/security/api_key"
"github.com/elastic/terraform-provider-elasticstack/internal/fleet/agent_policy"
"github.com/elastic/terraform-provider-elasticstack/internal/fleet/enrollment_tokens"
"github.com/elastic/terraform-provider-elasticstack/internal/fleet/integration"
"github.com/elastic/terraform-provider-elasticstack/internal/fleet/integration_ds"
"github.com/elastic/terraform-provider-elasticstack/internal/fleet/integration_policy"
"github.com/elastic/terraform-provider-elasticstack/internal/fleet/output"
"github.com/elastic/terraform-provider-elasticstack/internal/fleet/server_host"
"github.com/elastic/terraform-provider-elasticstack/internal/kibana/data_view"
"github.com/elastic/terraform-provider-elasticstack/internal/kibana/import_saved_objects"
"github.com/elastic/terraform-provider-elasticstack/internal/kibana/spaces"
"github.com/elastic/terraform-provider-elasticstack/internal/kibana/synthetics"
"github.com/elastic/terraform-provider-elasticstack/internal/kibana/synthetics/private_location"
"github.com/elastic/terraform-provider-elasticstack/internal/schema"
"github.com/hashicorp/terraform-plugin-framework/datasource"
fwprovider "github.com/hashicorp/terraform-plugin-framework/provider"
fwschema "github.com/hashicorp/terraform-plugin-framework/provider/schema"
"github.com/hashicorp/terraform-plugin-framework/resource"
)
// Ensure the implementation satisfies the expected interfaces.
var (
_ fwprovider.Provider = &Provider{}
)
type Provider struct {
version string
}
// NewFrameworkProvider instantiates plugin framework's provider
func NewFrameworkProvider(version string) fwprovider.Provider {
return &Provider{
version: version,
}
}
func (p *Provider) Metadata(_ context.Context, _ fwprovider.MetadataRequest, res *fwprovider.MetadataResponse) {
res.TypeName = "elasticstack"
res.Version = p.version
}
func (p *Provider) Schema(ctx context.Context, req fwprovider.SchemaRequest, res *fwprovider.SchemaResponse) {
res.Schema = fwschema.Schema{
Blocks: map[string]fwschema.Block{
esKeyName: schema.GetEsFWConnectionBlock(esKeyName, true),
kbKeyName: schema.GetKbFWConnectionBlock(),
fleetKeyName: schema.GetFleetFWConnectionBlock(),
},
}
}
func (p *Provider) Configure(ctx context.Context, req fwprovider.ConfigureRequest, res *fwprovider.ConfigureResponse) {
var cfg config.ProviderConfiguration
res.Diagnostics.Append(req.Config.Get(ctx, &cfg)...)
if res.Diagnostics.HasError() {
return
}
client, diags := clients.NewApiClientFromFramework(ctx, cfg, p.version)
res.Diagnostics.Append(diags...)
if res.Diagnostics.HasError() {
return
}
res.DataSourceData = client
res.ResourceData = client
}
func (p *Provider) DataSources(ctx context.Context) []func() datasource.DataSource {
return []func() datasource.DataSource{
indices.NewDataSource,
spaces.NewDataSource,
enrollment_tokens.NewDataSource,
integration_ds.NewDataSource,
}
}
func (p *Provider) Resources(ctx context.Context) []func() resource.Resource {
return []func() resource.Resource{
func() resource.Resource { return &import_saved_objects.Resource{} },
data_view.NewResource,
func() resource.Resource { return &private_location.Resource{} },
func() resource.Resource { return &index.Resource{} },
func() resource.Resource { return &synthetics.Resource{} },
func() resource.Resource { return &api_key.Resource{} },
func() resource.Resource { return &data_stream_lifecycle.Resource{} },
agent_policy.NewResource,
integration.NewResource,
integration_policy.NewResource,
output.NewResource,
server_host.NewResource,
}
}