Skip to content

Commit 9cd495e

Browse files
committed
Split-out Uuid resource generation into separate functions.
1 parent e84eeeb commit 9cd495e

File tree

10 files changed

+1147
-415
lines changed

10 files changed

+1147
-415
lines changed

.golangci.yaml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,8 @@ linters:
3333
#- err113 # disabled because of too many dynamic errors that don't wrap anything
3434

3535
linters-settings:
36+
exhaustive:
37+
default-signifies-exhaustive: true
3638
gci:
3739
sections:
3840
- standard

pkg/commands/codegen/codegen.go

Lines changed: 28 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -93,16 +93,36 @@ func (c *Command) Execute() error {
9393

9494
if c.commandType == properties.CommandTypeTerraform {
9595

96-
newProviderObject := properties.NewTerraformProviderFile(spec.Name)
97-
terraformGenerator := generate.NewCreator(config.Output.TerraformProvider, c.templatePath, spec)
98-
err = terraformGenerator.RenderTerraformProviderFile(newProviderObject, spec)
99-
if err != nil {
100-
return fmt.Errorf("error rendering Terraform provider file for %s - %s", specPath, err)
96+
_, uuid := spec.Spec.Params["uuid"]
97+
if !uuid {
98+
terraformGenerator := generate.NewCreator(config.Output.TerraformProvider, c.templatePath, spec)
99+
dataSources, resources, err := terraformGenerator.RenderTerraformProviderFile(spec, properties.ResourceEntry)
100+
if err != nil {
101+
return fmt.Errorf("error rendering Terraform provider file for %s - %s", specPath, err)
102+
}
103+
104+
resourceList = append(resourceList, resources...)
105+
dataSourceList = append(dataSourceList, dataSources...)
106+
} else {
107+
terraformGenerator := generate.NewCreator(config.Output.TerraformProvider, c.templatePath, spec)
108+
dataSources, resources, err := terraformGenerator.RenderTerraformProviderFile(spec, properties.ResourceUuid)
109+
if err != nil {
110+
return fmt.Errorf("error rendering Terraform provider file for %s - %s", specPath, err)
111+
}
112+
113+
resourceList = append(resourceList, resources...)
114+
dataSourceList = append(dataSourceList, dataSources...)
115+
116+
terraformGenerator = generate.NewCreator(config.Output.TerraformProvider, c.templatePath, spec)
117+
dataSources, resources, err = terraformGenerator.RenderTerraformProviderFile(spec, properties.ResourceUuidPlural)
118+
if err != nil {
119+
return fmt.Errorf("error rendering Terraform provider file for %s - %s", specPath, err)
120+
}
121+
122+
resourceList = append(resourceList, resources...)
123+
dataSourceList = append(dataSourceList, dataSources...)
101124
}
102125

103-
resourceList = append(resourceList, newProviderObject.Resources...)
104-
dataSourceList = append(dataSourceList, newProviderObject.DataSources...)
105-
106126
} else if c.commandType == properties.CommandTypeSDK {
107127
generator := generate.NewCreator(config.Output.GoSdk, c.templatePath, spec)
108128
if err = generator.RenderTemplate(); err != nil {

pkg/generate/generator.go

Lines changed: 29 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -57,27 +57,46 @@ func (c *Creator) RenderTemplate() error {
5757
}
5858

5959
// RenderTerraformProviderFile generates a Go file for a Terraform provider based on the provided TerraformProviderFile and Normalization arguments.
60-
func (c *Creator) RenderTerraformProviderFile(terraformProvider *properties.TerraformProviderFile, spec *properties.Normalization) error {
60+
func (c *Creator) RenderTerraformProviderFile(spec *properties.Normalization, typ properties.ResourceType) ([]string, []string, error) {
61+
var name string
62+
if typ == properties.ResourceUuidPlural {
63+
name = fmt.Sprintf("%s_%s", spec.TerraformProviderConfig.Suffix, spec.TerraformProviderConfig.PluralName)
64+
} else {
65+
name = spec.Name
66+
}
67+
68+
terraformProvider := properties.NewTerraformProviderFile(name)
6169
tfp := terraform_provider.GenerateTerraformProvider{}
6270

63-
if err := tfp.GenerateTerraformDataSource(spec, terraformProvider); err != nil {
64-
return err
71+
if err := tfp.GenerateTerraformDataSource(typ, spec, terraformProvider); err != nil {
72+
return nil, nil, err
6573
}
6674

67-
if err := tfp.GenerateTerraformResource(spec, terraformProvider); err != nil {
68-
return err
75+
if err := tfp.GenerateTerraformResource(typ, spec, terraformProvider); err != nil {
76+
return nil, nil, err
6977
}
7078

71-
if err := tfp.GenerateCommonCode(spec, terraformProvider); err != nil {
72-
return err
79+
if err := tfp.GenerateCommonCode(typ, spec, terraformProvider); err != nil {
80+
return nil, nil, err
7381
}
7482

7583
if err := tfp.GenerateTerraformProviderFile(spec, terraformProvider); err != nil {
76-
return err
84+
return nil, nil, err
7785
}
78-
filePath := c.createTerraformProviderFilePath(spec.TerraformProviderConfig.Suffix)
7986

80-
return c.writeFormattedContentToFile(filePath, terraformProvider.Code.String())
87+
var filePath string
88+
if typ == properties.ResourceUuidPlural {
89+
name = fmt.Sprintf("%s_%s", spec.TerraformProviderConfig.Suffix, spec.TerraformProviderConfig.PluralName)
90+
filePath = c.createTerraformProviderFilePath(name)
91+
} else {
92+
filePath = c.createTerraformProviderFilePath(spec.TerraformProviderConfig.Suffix)
93+
}
94+
95+
if err := c.writeFormattedContentToFile(filePath, terraformProvider.Code.String()); err != nil {
96+
return nil, nil, err
97+
}
98+
99+
return terraformProvider.DataSources, terraformProvider.Resources, nil
81100
}
82101

83102
// RenderTerraformProvider generates and writes a Terraform provider file.

pkg/properties/normalized.go

Lines changed: 19 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ type TerraformProviderConfig struct {
2929
SkipDatasource bool `json:"skip_datasource" yaml:"skip_datasource"`
3030
SkipDatasourceListing bool `json:"skip_datasource_listing" yaml:"skip_datasource_listing"`
3131
Suffix string `json:"suffix" yaml:"suffix"`
32+
PluralName string `json:"plural_name" yaml:"plural_name"`
3233
}
3334

3435
type NameVariant struct {
@@ -106,19 +107,24 @@ type ConstValue struct {
106107
}
107108

108109
type SpecParam struct {
109-
Name *NameVariant
110-
Description string `json:"description" yaml:"description"`
111-
Type string `json:"type" yaml:"type"`
112-
Default string `json:"default" yaml:"default"`
113-
Required bool `json:"required" yaml:"required"`
114-
Sensitive bool `json:"sensitive" yaml:"sensitive"`
115-
Length *SpecParamLength `json:"length" yaml:"length,omitempty"`
116-
Count *SpecParamCount `json:"count" yaml:"count,omitempty"`
117-
Hashing *SpecParamHashing `json:"hashing" yaml:"hashing,omitempty"`
118-
Items *SpecParamItems `json:"items" yaml:"items,omitempty"`
119-
Regex string `json:"regex" yaml:"regex,omitempty"`
120-
Profiles []*SpecParamProfile `json:"profiles" yaml:"profiles"`
121-
Spec *Spec `json:"spec" yaml:"spec"`
110+
Name *NameVariant
111+
Description string `json:"description" yaml:"description"`
112+
Type string `json:"type" yaml:"type"`
113+
Default string `json:"default" yaml:"default"`
114+
Required bool `json:"required" yaml:"required"`
115+
Sensitive bool `json:"sensitive" yaml:"sensitive"`
116+
TerraformConfig SpecParamTerraformProviderConfig `json:"terraform_provider_config" yaml:"terraform_provider_config"`
117+
Length *SpecParamLength `json:"length" yaml:"length,omitempty"`
118+
Count *SpecParamCount `json:"count" yaml:"count,omitempty"`
119+
Hashing *SpecParamHashing `json:"hashing" yaml:"hashing,omitempty"`
120+
Items *SpecParamItems `json:"items" yaml:"items,omitempty"`
121+
Regex string `json:"regex" yaml:"regex,omitempty"`
122+
Profiles []*SpecParamProfile `json:"profiles" yaml:"profiles"`
123+
Spec *Spec `json:"spec" yaml:"spec"`
124+
}
125+
126+
type SpecParamTerraformProviderConfig struct {
127+
Computed bool `json:"computed" yaml:"computed"`
122128
}
123129

124130
type SpecParamLength struct {

pkg/properties/resourcetype.go

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package properties
2+
3+
type ResourceType int
4+
5+
const (
6+
ResourceEntry ResourceType = iota
7+
ResourceUuid ResourceType = iota
8+
ResourceUuidPlural ResourceType = iota
9+
)

0 commit comments

Comments
 (0)