Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 6 additions & 5 deletions internal/cmd/generate.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ import (

"github.com/hashicorp/cli"
"github.com/pb33f/libopenapi"
high "github.com/pb33f/libopenapi/datamodel/high/v3"
"github.com/pb33f/libopenapi/index"
)

Expand Down Expand Up @@ -148,7 +149,7 @@ func (cmd *GenerateCommand) runInternal(logger *slog.Logger) error {

// 5. Generate provider code spec w/ config
oasExplorer := explorer.NewConfigExplorer(model.Model, *config)
providerCodeSpec, err := generateProviderCodeSpec(logger, oasExplorer, *config)
providerCodeSpec, err := generateProviderCodeSpec(logger, oasExplorer, &model.Model, *config)
if err != nil {
return err
}
Expand Down Expand Up @@ -181,7 +182,7 @@ func (cmd *GenerateCommand) runInternal(logger *slog.Logger) error {
return nil
}

func generateProviderCodeSpec(logger *slog.Logger, dora explorer.Explorer, cfg config.Config) (*spec.Specification, error) {
func generateProviderCodeSpec(logger *slog.Logger, dora explorer.Explorer, document *high.Document, cfg config.Config) (*spec.Specification, error) {
// 1. Find TF resources in OAS
explorerResources, err := dora.FindResources()
if err != nil {
Expand All @@ -201,21 +202,21 @@ func generateProviderCodeSpec(logger *slog.Logger, dora explorer.Explorer, cfg c
}

// 4. Use TF info to generate provider code spec for resources
resourceMapper := mapper.NewResourceMapper(explorerResources, cfg)
resourceMapper := mapper.NewResourceMapper(explorerResources, document, cfg)
resourcesIR, err := resourceMapper.MapToIR(logger)
if err != nil {
return nil, fmt.Errorf("error generating provider code spec for resources: %w", err)
}

// 5. Use TF info to generate provider code spec for data sources
dataSourceMapper := mapper.NewDataSourceMapper(explorerDataSources, cfg)
dataSourceMapper := mapper.NewDataSourceMapper(explorerDataSources, document, cfg)
dataSourcesIR, err := dataSourceMapper.MapToIR(logger)
if err != nil {
return nil, fmt.Errorf("error generating provider code spec for data sources: %w", err)
}

// 6. Use TF info to generate provider code spec for provider
providerMapper := mapper.NewProviderMapper(explorerProvider, cfg)
providerMapper := mapper.NewProviderMapper(explorerProvider, document, cfg)
providerIR, err := providerMapper.MapToIR(logger)
if err != nil {
return nil, fmt.Errorf("error generating provider code spec for provider: %w", err)
Expand Down
14 changes: 10 additions & 4 deletions internal/mapper/datasource_mapper.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ import (
"github.com/hashicorp/terraform-plugin-codegen-openapi/internal/mapper/util"
"github.com/hashicorp/terraform-plugin-codegen-spec/datasource"
"github.com/hashicorp/terraform-plugin-codegen-spec/schema"
high "github.com/pb33f/libopenapi/datamodel/high/v3"
)

var _ DataSourceMapper = dataSourceMapper{}
Expand All @@ -25,13 +26,15 @@ type DataSourceMapper interface {

type dataSourceMapper struct {
dataSources map[string]explorer.DataSource
document *high.Document
//nolint:unused // Might be useful later!
cfg config.Config
}

func NewDataSourceMapper(dataSources map[string]explorer.DataSource, cfg config.Config) DataSourceMapper {
func NewDataSourceMapper(dataSources map[string]explorer.DataSource, document *high.Document, cfg config.Config) DataSourceMapper {
return dataSourceMapper{
dataSources: dataSources,
document: document,
cfg: cfg,
}
}
Expand All @@ -45,7 +48,7 @@ func (m dataSourceMapper) MapToIR(logger *slog.Logger) ([]datasource.DataSource,
dataSource := m.dataSources[name]
dLogger := logger.With("data_source", name)

schema, err := generateDataSourceSchema(dLogger, name, dataSource)
schema, err := generateDataSourceSchema(dLogger, name, dataSource, m.document)
if err != nil {
log.WarnLogOnError(dLogger, err, "skipping data source schema mapping")
continue
Expand All @@ -60,7 +63,7 @@ func (m dataSourceMapper) MapToIR(logger *slog.Logger) ([]datasource.DataSource,
return dataSourceSchemas, nil
}

func generateDataSourceSchema(logger *slog.Logger, name string, dataSource explorer.DataSource) (*datasource.Schema, error) {
func generateDataSourceSchema(logger *slog.Logger, name string, dataSource explorer.DataSource, document *high.Document) (*datasource.Schema, error) {
dataSourceSchema := &datasource.Schema{
Attributes: []datasource.Attribute{},
}
Expand All @@ -75,6 +78,7 @@ func generateDataSourceSchema(logger *slog.Logger, name string, dataSource explo
}
globalSchemaOpts := oas.GlobalSchemaOpts{
OverrideComputability: schema.Computed,
Document: document,
}
readResponseSchema, err := oas.BuildSchemaFromResponse(dataSource.ReadOp, schemaOpts, globalSchemaOpts)
if err != nil {
Expand Down Expand Up @@ -118,7 +122,9 @@ func generateDataSourceSchema(logger *slog.Logger, name string, dataSource explo
OverrideDescription: param.Description,
}

s, schemaErr := oas.BuildSchema(param.Schema, schemaOpts, oas.GlobalSchemaOpts{})
s, schemaErr := oas.BuildSchema(param.Schema, schemaOpts, oas.GlobalSchemaOpts{
Document: document,
})
if schemaErr != nil {
log.WarnLogOnError(pLogger, schemaErr, "skipping mapping of read operation parameter")
continue
Expand Down
Loading