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
46 changes: 46 additions & 0 deletions .github/workflows/samples-terraform.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
name: Samples Terraform

on:
push:
paths:
- 'samples/client/petstore/terraform/**'
- 'samples/client/petstore/terraform-addpet/**'
- 'samples/client/petstore/terraform-server/**'
- 'samples/client/others/terraform/**'
pull_request:
paths:
- 'samples/client/petstore/terraform/**'
- 'samples/client/petstore/terraform-addpet/**'
- 'samples/client/petstore/terraform-server/**'
- 'samples/client/others/terraform/**'

jobs:
build:
name: Build Terraform Provider
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
sample:
- samples/client/petstore/terraform/
- samples/client/petstore/terraform-addpet/
- samples/client/petstore/terraform-server/
- samples/client/others/terraform/allof-discriminator/
- samples/client/others/terraform/oneof-anyof-required/
- samples/client/others/terraform/oneof-discriminator-lookup/
steps:
- uses: actions/checkout@v5
- uses: actions/setup-go@v6
with:
go-version: "stable"
- run: go version
- name: Install Dependencies
working-directory: ${{ matrix.sample }}
run: |
go mod tidy
- name: Build provider
working-directory: ${{ matrix.sample }}
run: go build -v ./...
- name: Run tests
working-directory: ${{ matrix.sample }}
run: go test ./... -v -timeout 120m
Copy link
Contributor

@cubic-dev-ai cubic-dev-ai bot Feb 12, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2: Removing TF_ACC disables Terraform acceptance tests (resource.Test), so the CI test step will skip these tests and pass without running them.

Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At .github/workflows/samples-terraform.yaml, line 46:

<comment>Removing TF_ACC disables Terraform acceptance tests (`resource.Test`), so the CI test step will skip these tests and pass without running them.</comment>

<file context>
@@ -41,6 +41,6 @@ jobs:
+      - name: Run tests
         working-directory: ${{ matrix.sample }}
-        run: TF_ACC=1 go test ./... -v -timeout 120m
+        run: go test ./... -v -timeout 120m
</file context>
Suggested change
run: go test ./... -v -timeout 120m
run: TF_ACC=1 go test ./... -v -timeout 120m
Fix with Cubic

11 changes: 11 additions & 0 deletions bin/configs/terraform-provider-allof-discriminator.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
generatorName: terraform-provider
outputDir: samples/client/others/terraform/allof-discriminator
inputSpec: modules/openapi-generator/src/test/resources/3_0/go/allof_multiple_ref_and_discriminator.yaml
templateDir: modules/openapi-generator/src/main/resources/terraform-provider
gitHost: github.com
gitUserId: example
gitRepoId: terraform-provider-allof
additionalProperties:
providerName: "allof"
providerAddress: "registry.terraform.io/example/allof"
hideGenerationTimestamp: "true"
11 changes: 11 additions & 0 deletions bin/configs/terraform-provider-oneof-anyof-required.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
generatorName: terraform-provider
outputDir: samples/client/others/terraform/oneof-anyof-required
inputSpec: modules/openapi-generator/src/test/resources/3_0/go/spec-with-oneof-anyof-required.yaml
templateDir: modules/openapi-generator/src/main/resources/terraform-provider
gitHost: github.com
gitUserId: example
gitRepoId: terraform-provider-oneof-anyof
additionalProperties:
providerName: "oneof"
providerAddress: "registry.terraform.io/example/oneof-anyof"
hideGenerationTimestamp: "true"
11 changes: 11 additions & 0 deletions bin/configs/terraform-provider-oneof-discriminator-lookup.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
generatorName: terraform-provider
outputDir: samples/client/others/terraform/oneof-discriminator-lookup
inputSpec: modules/openapi-generator/src/test/resources/3_0/go/spec-with-oneof-discriminator.yaml
templateDir: modules/openapi-generator/src/main/resources/terraform-provider
gitHost: github.com
gitUserId: example
gitRepoId: terraform-provider-oneof-disc
additionalProperties:
providerName: "oneof"
providerAddress: "registry.terraform.io/example/oneof-disc"
hideGenerationTimestamp: "true"
11 changes: 11 additions & 0 deletions bin/configs/terraform-provider-petstore-addpet.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
generatorName: terraform-provider
outputDir: samples/client/petstore/terraform-addpet
inputSpec: modules/openapi-generator/src/test/resources/3_0/petstore-addpet-only.yaml
templateDir: modules/openapi-generator/src/main/resources/terraform-provider
gitHost: github.com
gitUserId: example
gitRepoId: terraform-provider-petstore-addpet
additionalProperties:
providerName: "petstore"
providerAddress: "registry.terraform.io/example/petstore-addpet"
hideGenerationTimestamp: "true"
11 changes: 11 additions & 0 deletions bin/configs/terraform-provider-petstore-new.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
generatorName: terraform-provider
outputDir: samples/client/petstore/terraform
inputSpec: modules/openapi-generator/src/test/resources/3_0/petstore.yaml
templateDir: modules/openapi-generator/src/main/resources/terraform-provider
gitHost: github.com
gitUserId: example
gitRepoId: terraform-provider-petstore
additionalProperties:
providerName: "petstore"
providerAddress: "registry.terraform.io/example/petstore"
hideGenerationTimestamp: "true"
11 changes: 11 additions & 0 deletions bin/configs/terraform-provider-petstore-server.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
generatorName: terraform-provider
outputDir: samples/client/petstore/terraform-server
inputSpec: modules/openapi-generator/src/test/resources/3_0/go-server/petstore.yaml
templateDir: modules/openapi-generator/src/main/resources/terraform-provider
gitHost: github.com
gitUserId: example
gitRepoId: terraform-provider-petstore-server
additionalProperties:
providerName: "petstore"
providerAddress: "registry.terraform.io/example/petstore-server"
hideGenerationTimestamp: "true"
1 change: 1 addition & 0 deletions docs/generators.md
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,7 @@ The following generators are available:
* [swift-combine](generators/swift-combine.md)
* [swift5 (deprecated)](generators/swift5.md)
* [swift6](generators/swift6.md)
* [terraform-provider (experimental)](generators/terraform-provider.md)
* [typescript (experimental)](generators/typescript.md)
* [typescript-angular](generators/typescript-angular.md)
* [typescript-aurelia](generators/typescript-aurelia.md)
Expand Down
229 changes: 229 additions & 0 deletions docs/generators/terraform-provider.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,229 @@
---
title: Documentation for the terraform-provider Generator
---

## METADATA

| Property | Value | Notes |
| -------- | ----- | ----- |
| generator name | terraform-provider | pass this to the generate command after -g |
| generator stability | EXPERIMENTAL | |
| generator type | CLIENT | |
| generator language | Go | |
| generator default templating engine | mustache | |
| helpTxt | Generates a Terraform provider (Go, using HashiCorp Plugin Framework). | |

## CONFIG OPTIONS
These options may be applied as additional-properties (cli) or configOptions (plugins). Refer to [configuration docs](https://openapi-generator.tech/docs/configuration) for more details.

| Option | Description | Values | Default |
| ------ | ----------- | ------ | ------- |
|hideGenerationTimestamp|Hides the generation timestamp when files are generated.| |true|
|packageName|Go package name (convention: lowercase).| |openapi|
|packageVersion|Go package version.| |1.0.0|
|providerAddress|Terraform provider registry address| |registry.terraform.io/example/example|
|providerName|Terraform provider name (e.g. 'petstore')| |example|
|providerVersion|Terraform provider version| |0.1.0|

## IMPORT MAPPING

| Type/Alias | Imports |
| ---------- | ------- |


## INSTANTIATION TYPES

| Type/Alias | Instantiated By |
| ---------- | --------------- |


## LANGUAGE PRIMITIVES

<ul class="column-ul">
<li>bool</li>
<li>byte</li>
<li>complex128</li>
<li>complex64</li>
<li>float32</li>
<li>float64</li>
<li>int</li>
<li>int32</li>
<li>int64</li>
<li>interface{}</li>
<li>map[string]interface{}</li>
<li>rune</li>
<li>string</li>
<li>uint</li>
<li>uint32</li>
<li>uint64</li>
</ul>

## RESERVED WORDS

<ul class="column-ul">
<li>bool</li>
<li>break</li>
<li>byte</li>
<li>case</li>
<li>chan</li>
<li>complex128</li>
<li>complex64</li>
<li>const</li>
<li>continue</li>
<li>default</li>
<li>defer</li>
<li>else</li>
<li>error</li>
<li>fallthrough</li>
<li>float32</li>
<li>float64</li>
<li>for</li>
<li>func</li>
<li>go</li>
<li>goto</li>
<li>if</li>
<li>import</li>
<li>int</li>
<li>int16</li>
<li>int32</li>
<li>int64</li>
<li>int8</li>
<li>interface</li>
<li>map</li>
<li>nil</li>
<li>package</li>
<li>range</li>
<li>return</li>
<li>rune</li>
<li>select</li>
<li>string</li>
<li>struct</li>
<li>switch</li>
<li>type</li>
<li>uint</li>
<li>uint16</li>
<li>uint32</li>
<li>uint64</li>
<li>uint8</li>
<li>uintptr</li>
<li>var</li>
</ul>

## FEATURE SET


### Client Modification Feature
| Name | Supported | Defined By |
| ---- | --------- | ---------- |
|BasePath|✗|ToolingExtension
|Authorizations|✗|ToolingExtension
|UserAgent|✗|ToolingExtension
|MockServer|✗|ToolingExtension

### Data Type Feature
| Name | Supported | Defined By |
| ---- | --------- | ---------- |
|Custom|✗|OAS2,OAS3
|Int32|✓|OAS2,OAS3
|Int64|✓|OAS2,OAS3
|Float|✓|OAS2,OAS3
|Double|✓|OAS2,OAS3
|Decimal|✓|ToolingExtension
|String|✓|OAS2,OAS3
|Byte|✓|OAS2,OAS3
|Binary|✓|OAS2,OAS3
|Boolean|✓|OAS2,OAS3
|Date|✓|OAS2,OAS3
|DateTime|✓|OAS2,OAS3
|Password|✓|OAS2,OAS3
|File|✓|OAS2
|Uuid|✗|
|Array|✓|OAS2,OAS3
|Null|✗|OAS3
|AnyType|✗|OAS2,OAS3
|Object|✓|OAS2,OAS3
|Maps|✓|ToolingExtension
|CollectionFormat|✓|OAS2
|CollectionFormatMulti|✓|OAS2
|Enum|✓|OAS2,OAS3
|ArrayOfEnum|✓|ToolingExtension
|ArrayOfModel|✓|ToolingExtension
|ArrayOfCollectionOfPrimitives|✓|ToolingExtension
|ArrayOfCollectionOfModel|✓|ToolingExtension
|ArrayOfCollectionOfEnum|✓|ToolingExtension
|MapOfEnum|✓|ToolingExtension
|MapOfModel|✓|ToolingExtension
|MapOfCollectionOfPrimitives|✓|ToolingExtension
|MapOfCollectionOfModel|✓|ToolingExtension
|MapOfCollectionOfEnum|✓|ToolingExtension

### Documentation Feature
| Name | Supported | Defined By |
| ---- | --------- | ---------- |
|Readme|✓|ToolingExtension
|Model|✓|ToolingExtension
|Api|✓|ToolingExtension

### Global Feature
| Name | Supported | Defined By |
| ---- | --------- | ---------- |
|Host|✓|OAS2,OAS3
|BasePath|✓|OAS2,OAS3
|Info|✓|OAS2,OAS3
|Schemes|✗|OAS2,OAS3
|PartialSchemes|✓|OAS2,OAS3
|Consumes|✓|OAS2
|Produces|✓|OAS2
|ExternalDocumentation|✓|OAS2,OAS3
|Examples|✓|OAS2,OAS3
|XMLStructureDefinitions|✗|OAS2,OAS3
|MultiServer|✗|OAS3
|ParameterizedServer|✗|OAS3
|ParameterStyling|✗|OAS3
|Callbacks|✗|OAS3
|LinkObjects|✗|OAS3

### Parameter Feature
| Name | Supported | Defined By |
| ---- | --------- | ---------- |
|Path|✓|OAS2,OAS3
|Query|✓|OAS2,OAS3
|Header|✓|OAS2,OAS3
|Body|✓|OAS2
|FormUnencoded|✓|OAS2
|FormMultipart|✓|OAS2
|Cookie|✓|OAS3

### Schema Support Feature
| Name | Supported | Defined By |
| ---- | --------- | ---------- |
|Simple|✓|OAS2,OAS3
|Composite|✓|OAS2,OAS3
|Polymorphism|✗|OAS2,OAS3
|Union|✗|OAS3
|allOf|✗|OAS2,OAS3
|anyOf|✗|OAS3
|oneOf|✗|OAS3
|not|✗|OAS3

### Security Feature
| Name | Supported | Defined By |
| ---- | --------- | ---------- |
|BasicAuth|✓|OAS2,OAS3
|ApiKey|✓|OAS2,OAS3
|OpenIDConnect|✗|OAS3
|BearerToken|✓|OAS3
|OAuth2_Implicit|✗|OAS2,OAS3
|OAuth2_Password|✗|OAS2,OAS3
|OAuth2_ClientCredentials|✗|OAS2,OAS3
|OAuth2_AuthorizationCode|✗|OAS2,OAS3
|SignatureAuth|✗|OAS3
|AWSV4Signature|✗|ToolingExtension

### Wire Format Feature
| Name | Supported | Defined By |
| ---- | --------- | ---------- |
|JSON|✓|OAS2,OAS3
|XML|✗|OAS2,OAS3
|PROTOBUF|✗|ToolingExtension
|Custom|✗|OAS2,OAS3
Loading
Loading