diff --git a/utils/terraform_docs_generator/openapi/openapi_terraform_provider_doc_generator.go b/utils/terraform_docs_generator/openapi/openapi_terraform_provider_doc_generator.go
index 4be6e5e92..30c1fc7c8 100644
--- a/utils/terraform_docs_generator/openapi/openapi_terraform_provider_doc_generator.go
+++ b/utils/terraform_docs_generator/openapi/openapi_terraform_provider_doc_generator.go
@@ -3,6 +3,7 @@ package openapi
import (
"fmt"
"github.com/dikhan/terraform-provider-openapi/openapi"
+ "github.com/dikhan/terraform-provider-openapi/utils/terraform_docs_generator/openapi/templates/zendesk"
"github.com/mitchellh/hashstructure"
"sort"
)
@@ -58,6 +59,7 @@ func (t TerraformProviderDocGenerator) GenerateDocumentation() (TerraformProvide
return TerraformProviderDocumentation{
ProviderName: t.ProviderName,
ProviderInstallation: ProviderInstallation{
+ ProviderName: t.ProviderName,
Example: fmt.Sprintf("$ export PROVIDER_NAME=%s && curl -fsSL https://raw.githubusercontent.com/dikhan/terraform-provider-openapi/master/scripts/install.sh | bash -s -- --provider-name $PROVIDER_NAME
"+
"[INFO] Downloading https://github.com/dikhan/terraform-provider-openapi/releases/download/v0.29.4/terraform-provider-openapi_0.29.4_darwin_amd64.tar.gz in temporally folder /var/folders/n_/1lrwb99s7f50xmn9jpmfnddh0000gp/T/tmp.Xv1AkIZh...
"+
"[INFO] Extracting terraform-provider-openapi from terraform-provider-openapi_0.29.4_darwin_amd64.tar.gz...
"+
@@ -65,18 +67,27 @@ func (t TerraformProviderDocGenerator) GenerateDocumentation() (TerraformProvide
"[INFO] Terraform provider 'terraform-provider-%s' successfully installed at: '~/.terraform.d/plugins'!", t.ProviderName, t.ProviderName),
Other: "You can then start running the Terraform provider:",
OtherCommand: fmt.Sprintf("$ export OTF_VAR_%s_PLUGIN_CONFIGURATION_FILE=\"https://api.service.com/openapi.yaml\"
", t.ProviderName),
+ Template: zendesk.ProviderInstallationTmpl,
},
ProviderConfiguration: ProviderConfiguration{
+ ProviderName: t.ProviderName,
Regions: configRegions,
ConfigProperties: configProperties,
+ Template: zendesk.ProviderConfigurationTmpl,
},
ProviderResources: ProviderResources{
- Resources: resources,
+ ProviderName: t.ProviderName,
+ Resources: resources,
+ Template: zendesk.ProviderResourcesTmpl,
},
DataSources: DataSources{
+ ProviderName: t.ProviderName,
DataSources: dataSourceFilters,
DataSourceInstances: dataSourceInstances,
+ Template: zendesk.DataSourcesTmpl,
},
+ TableOfContentsTemplate: zendesk.TableOfContentsTmpl,
+ SpecialTermsDefinitionsTemplate: zendesk.SpecialTermsTmpl,
}, err
}
diff --git a/utils/terraform_docs_generator/openapi/openapi_terraform_provider_doc_generator_test.go b/utils/terraform_docs_generator/openapi/openapi_terraform_provider_doc_generator_test.go
index a682c9442..22b0169c5 100644
--- a/utils/terraform_docs_generator/openapi/openapi_terraform_provider_doc_generator_test.go
+++ b/utils/terraform_docs_generator/openapi/openapi_terraform_provider_doc_generator_test.go
@@ -4,6 +4,7 @@ import (
"errors"
"fmt"
"github.com/dikhan/terraform-provider-openapi/openapi"
+ "github.com/dikhan/terraform-provider-openapi/utils/terraform_docs_generator/openapi/templates/zendesk"
"github.com/stretchr/testify/assert"
"net/http"
"net/http/httptest"
@@ -80,6 +81,7 @@ func TestGenerateDocumentation(t *testing.T) {
assert.Equal(t, providerName, d.ProviderName)
// ProviderInstallation assertions
+ assert.Equal(t, providerName, d.ProviderInstallation.ProviderName)
expectedProviderInstallExample := fmt.Sprintf("$ export PROVIDER_NAME=%s && curl -fsSL https://raw.githubusercontent.com/dikhan/terraform-provider-openapi/master/scripts/install.sh | bash -s -- --provider-name $PROVIDER_NAME
"+
"[INFO] Downloading https://github.com/dikhan/terraform-provider-openapi/releases/download/v0.29.4/terraform-provider-openapi_0.29.4_darwin_amd64.tar.gz in temporally folder /var/folders/n_/1lrwb99s7f50xmn9jpmfnddh0000gp/T/tmp.Xv1AkIZh...
"+
"[INFO] Extracting terraform-provider-openapi from terraform-provider-openapi_0.29.4_darwin_amd64.tar.gz...
"+
@@ -88,14 +90,18 @@ func TestGenerateDocumentation(t *testing.T) {
assert.Equal(t, expectedProviderInstallExample, d.ProviderInstallation.Example)
assert.Equal(t, "You can then start running the Terraform provider:", d.ProviderInstallation.Other)
assert.Equal(t, fmt.Sprintf("$ export OTF_VAR_%s_PLUGIN_CONFIGURATION_FILE=\"https://api.service.com/openapi.yaml\"
", providerName), d.ProviderInstallation.OtherCommand)
+ assert.Equal(t, zendesk.ProviderInstallationTmpl, d.ProviderInstallation.Template)
// ProviderConfiguration assertions
+ assert.Equal(t, providerName, d.ProviderConfiguration.ProviderName)
assert.Equal(t, []string{"region1", "region2", "region3"}, d.ProviderConfiguration.Regions)
assert.Equal(t, []Property{{Name: "required_token", Type: "string", ArrayItemsType: "", Required: true, Computed: false, Description: "", Schema: nil}}, d.ProviderConfiguration.ConfigProperties)
assert.Nil(t, d.ProviderConfiguration.ExampleUsage)
assert.Equal(t, ArgumentsReference{Notes: nil}, d.ProviderConfiguration.ArgumentsReference)
+ assert.Equal(t, zendesk.ProviderConfigurationTmpl, d.ProviderConfiguration.Template)
// ProviderResources assertions
+ assert.Equal(t, providerName, d.ProviderResources.ProviderName)
assert.Len(t, d.ProviderResources.Resources, 1)
cdnResource := d.ProviderResources.Resources[0]
assert.Equal(t, "cdn_v1", cdnResource.Name)
@@ -104,6 +110,11 @@ func TestGenerateDocumentation(t *testing.T) {
cdnResourceProps := cdnResource.Properties
assert.Len(t, cdnResourceProps, 1)
assertProperty(t, cdnResourceProps[0], "id", "string", "", "", false, true, nil)
+ assert.Equal(t, zendesk.ProviderResourcesTmpl, d.ProviderResources.Template)
+
+ // DataSources assertions
+ assert.Equal(t, providerName, d.DataSources.ProviderName)
+ assert.Equal(t, zendesk.DataSourcesTmpl, d.DataSources.Template)
// DataSource assertions
assert.Len(t, d.DataSources.DataSources, 1)
diff --git a/utils/terraform_docs_generator/openapi/terraform_provider_documentation.go b/utils/terraform_docs_generator/openapi/terraform_provider_documentation.go
index b921d32f7..f73400ae9 100644
--- a/utils/terraform_docs_generator/openapi/terraform_provider_documentation.go
+++ b/utils/terraform_docs_generator/openapi/terraform_provider_documentation.go
@@ -1,18 +1,19 @@
package openapi
import (
- "github.com/dikhan/terraform-provider-openapi/utils/terraform_docs_generator/openapi/templates/zendesk"
"io"
)
// TerraformProviderDocumentation defines the attributes needed to generate Terraform provider documentation
type TerraformProviderDocumentation struct {
- ProviderName string
- ProviderInstallation ProviderInstallation
- ProviderConfiguration ProviderConfiguration
- ProviderResources ProviderResources
- DataSources DataSources
- ShowSpecialTermsDefinitions bool
+ ProviderName string
+ ProviderInstallation ProviderInstallation
+ ProviderConfiguration ProviderConfiguration
+ ProviderResources ProviderResources
+ DataSources DataSources
+ ShowSpecialTermsDefinitions bool
+ TableOfContentsTemplate string
+ SpecialTermsDefinitionsTemplate string
}
// ProviderInstallation includes details needed to install the Terraform provider plugin
@@ -25,11 +26,13 @@ type ProviderInstallation struct {
Other string
// Other code/commands needed to install/run the provider
OtherCommand string
+ // Template used to render HTML
+ Template string
}
// RenderZendesk renders into the input writer the ProviderInstallation documentation formatted in HTML
func (t ProviderInstallation) RenderZendesk(w io.Writer) error {
- return Render(w, "ProviderInstallation", zendesk.ProviderInstallationTmpl, t)
+ return Render(w, "ProviderInstallation", t.Template, t)
}
// ProviderConfiguration defines the details needed to properly configure the Terraform provider
@@ -40,11 +43,12 @@ type ProviderConfiguration struct {
ConfigProperties []Property
ExampleUsage []ExampleUsage
ArgumentsReference ArgumentsReference
+ Template string
}
// RenderZendesk renders into the input writer the ProviderInstallation documentation formatted in HTML
func (t ProviderConfiguration) RenderZendesk(w io.Writer) error {
- return Render(w, "ProviderConfiguration", zendesk.ProviderConfigurationTmpl, t)
+ return Render(w, "ProviderConfiguration", t.Template, t)
}
// ProviderResources defines the resources exposed by the Terraform provider
@@ -52,11 +56,12 @@ type ProviderResources struct {
// ProviderName is the name of the provider
ProviderName string
Resources []Resource
+ Template string
}
// RenderZendesk renders into the input writer the ProviderResources documentation formatted in HTML
func (t ProviderResources) RenderZendesk(w io.Writer) error {
- return Render(w, "ProviderResources", zendesk.ProviderResourcesTmpl, t)
+ return Render(w, "ProviderResources", t.Template, t)
}
func (r ProviderResources) ContainsResourcesWithSecretProperties() bool {
@@ -76,11 +81,12 @@ type DataSources struct {
ProviderName string
DataSources []DataSource
DataSourceInstances []DataSource
+ Template string
}
// RenderZendesk renders into the input writer the DataSources documentation formatted in HTML
func (t DataSources) RenderZendesk(w io.Writer) error {
- return Render(w, "DataSources", zendesk.DataSourcesTmpl, t)
+ return Render(w, "DataSources", t.Template, t)
}
// DataSource defines the attributes to generate documentation for a Terraform provider data source
@@ -157,31 +163,27 @@ func (p Property) ContainsComputedSubProperties() bool {
// RenderZendeskHTML renders the documentation in HTML
func (t TerraformProviderDocumentation) RenderZendeskHTML(w io.Writer) error {
- err := Render(w, "TerraformProviderDocTableOfContents", zendesk.TableOfContentsTmpl, t)
+ err := Render(w, "TerraformProviderDocTableOfContents", t.TableOfContentsTemplate, t)
if err != nil {
return err
}
- t.ProviderInstallation.ProviderName = t.ProviderName
err = t.ProviderInstallation.RenderZendesk(w)
if err != nil {
return err
}
- t.ProviderConfiguration.ProviderName = t.ProviderName
err = t.ProviderConfiguration.RenderZendesk(w)
if err != nil {
return err
}
- t.ProviderResources.ProviderName = t.ProviderName
err = t.ProviderResources.RenderZendesk(w)
if err != nil {
return err
}
- t.DataSources.ProviderName = t.ProviderName
err = t.DataSources.RenderZendesk(w)
if err != nil {
return err
}
- err = Render(w, "TerraformProviderDocSpecialTermsDefinitions", zendesk.SpecialTermsTmpl, t)
+ err = Render(w, "TerraformProviderDocSpecialTermsDefinitions", t.SpecialTermsDefinitionsTemplate, t)
if err != nil {
return err
}
diff --git a/utils/terraform_docs_generator/openapi/terraform_provider_documentation_test.go b/utils/terraform_docs_generator/openapi/terraform_provider_documentation_test.go
index f475a5b14..02af318a8 100644
--- a/utils/terraform_docs_generator/openapi/terraform_provider_documentation_test.go
+++ b/utils/terraform_docs_generator/openapi/terraform_provider_documentation_test.go
@@ -2,9 +2,12 @@ package openapi
import (
"bytes"
+ "errors"
+ "github.com/dikhan/terraform-provider-openapi/utils/terraform_docs_generator/openapi/templates/zendesk"
"github.com/stretchr/testify/assert"
"strings"
"testing"
+ "text/template"
)
func TestProviderResources_RenderZendesk(t *testing.T) {
@@ -47,6 +50,7 @@ func TestProviderResources_RenderZendesk(t *testing.T) {
},
},
},
+ Template: zendesk.ProviderResourcesTmpl,
}
var buf bytes.Buffer
expectedHTML := `
@@ -556,6 +576,64 @@ func TestTerraformProviderDocumentation_RenderZendeskHTML(t *testing.T) { assert.Nil(t, err) } +func TestTerraformProviderDocumentation_RenderZendeskHTML_Errors(t *testing.T) { + testCases := []struct { + name string + terraformProviderDocumentation TerraformProviderDocumentation + expectedErr error + }{ + { + name: "provider installation template error", + terraformProviderDocumentation: TerraformProviderDocumentation{ + ProviderInstallation: ProviderInstallation{Template: `{{.nonExistentVariable}}`}, + }, + expectedErr: errors.New("template: ProviderInstallation:1:2: executing \"ProviderInstallation\" at <.nonExistentVariable>: can't evaluate field nonExistentVariable in type openapi.ProviderInstallation"), + }, + { + name: "provider configuration template error", + terraformProviderDocumentation: TerraformProviderDocumentation{ + ProviderConfiguration: ProviderConfiguration{Template: `{{.nonExistentVariable}}`}, + }, + expectedErr: errors.New("template: ProviderConfiguration:1:2: executing \"ProviderConfiguration\" at <.nonExistentVariable>: can't evaluate field nonExistentVariable in type openapi.ProviderConfiguration"), + }, + { + name: "provider resources template error", + terraformProviderDocumentation: TerraformProviderDocumentation{ + ProviderResources: ProviderResources{Template: `{{.nonExistentVariable}}`}, + }, + expectedErr: errors.New("template: ProviderResources:1:2: executing \"ProviderResources\" at <.nonExistentVariable>: can't evaluate field nonExistentVariable in type openapi.ProviderResources"), + }, + { + name: "data sources template error", + terraformProviderDocumentation: TerraformProviderDocumentation{ + DataSources: DataSources{Template: `{{.nonExistentVariable}}`}, + }, + expectedErr: errors.New("template: DataSources:1:2: executing \"DataSources\" at <.nonExistentVariable>: can't evaluate field nonExistentVariable in type openapi.DataSources"), + }, + { + name: "table of contents template error", + terraformProviderDocumentation: TerraformProviderDocumentation{ + TableOfContentsTemplate: `{{.nonExistentVariable}}`, + }, + expectedErr: errors.New("template: TerraformProviderDocTableOfContents:1:2: executing \"TerraformProviderDocTableOfContents\" at <.nonExistentVariable>: can't evaluate field nonExistentVariable in type openapi.TerraformProviderDocumentation"), + }, + { + name: "special terms definitions template error", + terraformProviderDocumentation: TerraformProviderDocumentation{ + SpecialTermsDefinitionsTemplate: `{{.nonExistentVariable}}`, + }, + expectedErr: errors.New("template: TerraformProviderDocSpecialTermsDefinitions:1:2: executing \"TerraformProviderDocSpecialTermsDefinitions\" at <.nonExistentVariable>: can't evaluate field nonExistentVariable in type openapi.TerraformProviderDocumentation"), + }, + } + + for _, tc := range testCases { + var buf bytes.Buffer + err := tc.terraformProviderDocumentation.RenderZendeskHTML(&buf) + templateErr := err.(template.ExecError) + assert.EqualError(t, templateErr.Err, tc.expectedErr.Error()) + } +} + func createProperty(name, properType, description string, required, computed bool) Property { return Property{ Name: name,