@cdktn/provider-generator 0.24.0-pre.87 → 0.24.0-pre.89

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (66) hide show
  1. package/build/__tests__/edge-provider-schema/builder.d.ts +9 -3
  2. package/build/__tests__/edge-provider-schema/builder.js +6 -3
  3. package/build/__tests__/edge-provider-schema/index.js +119 -1
  4. package/build/__tests__/provider.test.js +4 -1
  5. package/build/get/__tests__/generator/ephemeral-resources.test.d.ts +2 -0
  6. package/build/get/__tests__/generator/ephemeral-resources.test.js +49 -0
  7. package/build/get/__tests__/generator/provider-functions.test.d.ts +2 -0
  8. package/build/get/__tests__/generator/provider-functions.test.js +176 -0
  9. package/build/get/__tests__/generator/provider.test.js +9 -1
  10. package/build/get/__tests__/generator/write-only.test.d.ts +2 -0
  11. package/build/get/__tests__/generator/write-only.test.js +65 -0
  12. package/build/get/__tests__/target-versions.test.d.ts +2 -0
  13. package/build/get/__tests__/target-versions.test.js +171 -0
  14. package/build/get/constructs-maker.d.ts +8 -1
  15. package/build/get/constructs-maker.js +13 -4
  16. package/build/get/generator/emitter/attributes-emitter.d.ts +12 -2
  17. package/build/get/generator/emitter/attributes-emitter.js +47 -5
  18. package/build/get/generator/emitter/index.d.ts +1 -0
  19. package/build/get/generator/emitter/index.js +2 -1
  20. package/build/get/generator/emitter/provider-functions-emitter.d.ts +11 -0
  21. package/build/get/generator/emitter/provider-functions-emitter.js +94 -0
  22. package/build/get/generator/emitter/resource-emitter.d.ts +5 -1
  23. package/build/get/generator/emitter/resource-emitter.js +83 -7
  24. package/build/get/generator/models/attribute-model.d.ts +2 -0
  25. package/build/get/generator/models/attribute-model.js +2 -1
  26. package/build/get/generator/models/index.d.ts +1 -0
  27. package/build/get/generator/models/index.js +2 -1
  28. package/build/get/generator/models/provider-function-model.d.ts +102 -0
  29. package/build/get/generator/models/provider-function-model.js +667 -0
  30. package/build/get/generator/models/resource-model.d.ts +3 -0
  31. package/build/get/generator/models/resource-model.js +13 -4
  32. package/build/get/generator/models/struct.d.ts +2 -0
  33. package/build/get/generator/models/struct.js +6 -2
  34. package/build/get/generator/provider-generator.d.ts +2 -0
  35. package/build/get/generator/provider-generator.js +31 -3
  36. package/build/get/generator/resource-parser.js +3 -1
  37. package/package.json +5 -5
  38. package/src/__tests__/__snapshots__/edge-provider-schema.test.ts.snap +4 -0
  39. package/src/__tests__/edge-provider-schema/builder.ts +17 -1
  40. package/src/__tests__/edge-provider-schema/index.ts +124 -1
  41. package/src/__tests__/provider.test.ts +3 -0
  42. package/src/get/__tests__/generator/__snapshots__/ephemeral-resources.test.ts.snap +524 -0
  43. package/src/get/__tests__/generator/__snapshots__/provider-functions.test.ts.snap +444 -0
  44. package/src/get/__tests__/generator/__snapshots__/write-only.test.ts.snap +262 -0
  45. package/src/get/__tests__/generator/ephemeral-resources.test.ts +46 -0
  46. package/src/get/__tests__/generator/fixtures/ephemeral-resources.test.fixture.json +160 -0
  47. package/src/get/__tests__/generator/fixtures/provider-functions-collision.test.fixture.json +31 -0
  48. package/src/get/__tests__/generator/fixtures/provider-functions-synthetic.test.fixture.json +192 -0
  49. package/src/get/__tests__/generator/fixtures/provider-functions.test.fixture.json +170 -0
  50. package/src/get/__tests__/generator/fixtures/write-only.test.fixture.json +58 -0
  51. package/src/get/__tests__/generator/provider-functions.test.ts +262 -0
  52. package/src/get/__tests__/generator/provider.test.ts +8 -0
  53. package/src/get/__tests__/generator/write-only.test.ts +71 -0
  54. package/src/get/__tests__/target-versions.test.ts +206 -0
  55. package/src/get/constructs-maker.ts +43 -3
  56. package/src/get/generator/emitter/attributes-emitter.ts +61 -6
  57. package/src/get/generator/emitter/index.ts +1 -0
  58. package/src/get/generator/emitter/provider-functions-emitter.ts +117 -0
  59. package/src/get/generator/emitter/resource-emitter.ts +110 -6
  60. package/src/get/generator/models/attribute-model.ts +3 -0
  61. package/src/get/generator/models/index.ts +1 -0
  62. package/src/get/generator/models/provider-function-model.ts +872 -0
  63. package/src/get/generator/models/resource-model.ts +25 -3
  64. package/src/get/generator/models/struct.ts +9 -1
  65. package/src/get/generator/provider-generator.ts +70 -4
  66. package/src/get/generator/resource-parser.ts +2 -0
@@ -0,0 +1,262 @@
1
+ // Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing
2
+
3
+ exports[`generate a vault_alicloud_secret_backend resource with a write-only attribute 1`] = `
4
+ "// https://registry.terraform.io/providers/hashicorp/vault/latest/docs/resources/alicloud_secret_backend
5
+ // generated from terraform resource schema
6
+
7
+ import { Construct } from 'constructs';
8
+ import * as cdktn from 'cdktn';
9
+
10
+ // Configuration
11
+
12
+ export interface AlicloudSecretBackendConfig extends cdktn.TerraformMetaArguments {
13
+ /**
14
+ * The AliCloud Access Key ID to use when generating new credentials.
15
+ *
16
+ * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/vault/latest/docs/resources/alicloud_secret_backend#access_key AlicloudSecretBackend#access_key}
17
+ */
18
+ readonly accessKey: string;
19
+ /**
20
+ * Path of the AliCloud secrets engine mount. Must match the \`path\` of a \`vault_mount\` resource with \`type = "alicloud"\`. Use \`vault_mount.alicloud.path\` here.
21
+ *
22
+ * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/vault/latest/docs/resources/alicloud_secret_backend#mount AlicloudSecretBackend#mount}
23
+ */
24
+ readonly mount: string;
25
+ /**
26
+ * Target namespace. (requires Enterprise)
27
+ *
28
+ * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/vault/latest/docs/resources/alicloud_secret_backend#namespace AlicloudSecretBackend#namespace}
29
+ */
30
+ readonly namespace?: string;
31
+ /**
32
+ * Write-only AliCloud Secret Access Key. This value will never be read back from Vault.
33
+ *
34
+ * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/vault/latest/docs/resources/alicloud_secret_backend#secret_key_wo AlicloudSecretBackend#secret_key_wo}
35
+ */
36
+ readonly secretKeyWo: string;
37
+ /**
38
+ * Optional write-only secondary AliCloud Secret Access Key. This value will never be read back from Vault.
39
+ *
40
+ * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/vault/latest/docs/resources/alicloud_secret_backend#secondary_secret_key_wo AlicloudSecretBackend#secondary_secret_key_wo}
41
+ */
42
+ readonly secondarySecretKeyWo?: string;
43
+ /**
44
+ * A version counter for the write-only \`secret_key_wo\` field. Incrementing this value will trigger an update to the secret key in Vault.
45
+ *
46
+ * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/vault/latest/docs/resources/alicloud_secret_backend#secret_key_wo_version AlicloudSecretBackend#secret_key_wo_version}
47
+ */
48
+ readonly secretKeyWoVersion: number;
49
+ }
50
+
51
+ /**
52
+ * Represents a {@link https://registry.terraform.io/providers/hashicorp/vault/latest/docs/resources/alicloud_secret_backend vault_alicloud_secret_backend}
53
+ */
54
+ export class AlicloudSecretBackend extends cdktn.TerraformResource {
55
+
56
+ // =================
57
+ // STATIC PROPERTIES
58
+ // =================
59
+ public static readonly tfResourceType = "vault_alicloud_secret_backend";
60
+
61
+ // ==============
62
+ // STATIC Methods
63
+ // ==============
64
+ /**
65
+ * Generates CDKTN code for importing a AlicloudSecretBackend resource upon running "cdktn plan <stack-name>"
66
+ * @param scope The scope in which to define this construct
67
+ * @param importToId The construct id used in the generated config for the AlicloudSecretBackend to import
68
+ * @param importFromId The id of the existing AlicloudSecretBackend that should be imported. Refer to the {@link https://registry.terraform.io/providers/hashicorp/vault/latest/docs/resources/alicloud_secret_backend#import import section} in the documentation of this resource for the id to use
69
+ * @param provider? Optional instance of the provider where the AlicloudSecretBackend to import is found
70
+ */
71
+ public static generateConfigForImport(scope: Construct, importToId: string, importFromId: string, provider?: cdktn.TerraformProvider) {
72
+ return new cdktn.ImportableResource(scope, importToId, { terraformResourceType: "vault_alicloud_secret_backend", importId: importFromId, provider });
73
+ }
74
+
75
+ // ===========
76
+ // INITIALIZER
77
+ // ===========
78
+
79
+ /**
80
+ * Create a new {@link https://registry.terraform.io/providers/hashicorp/vault/latest/docs/resources/alicloud_secret_backend vault_alicloud_secret_backend} Resource
81
+ *
82
+ * @param scope The scope in which to define this construct
83
+ * @param id The scoped construct ID. Must be unique amongst siblings in the same scope
84
+ * @param options AlicloudSecretBackendConfig
85
+ */
86
+ public constructor(scope: Construct, id: string, config: AlicloudSecretBackendConfig) {
87
+ super(scope, id, {
88
+ terraformResourceType: 'vault_alicloud_secret_backend',
89
+ terraformGeneratorMetadata: {
90
+ providerName: 'vault'
91
+ },
92
+ provider: config.provider,
93
+ dependsOn: config.dependsOn,
94
+ count: config.count,
95
+ lifecycle: config.lifecycle,
96
+ provisioners: config.provisioners,
97
+ connection: config.connection,
98
+ forEach: config.forEach
99
+ });
100
+ this._accessKey = config.accessKey;
101
+ this._mount = config.mount;
102
+ this._namespace = config.namespace;
103
+ this._secretKeyWo = config.secretKeyWo;
104
+ this._secondarySecretKeyWo = config.secondarySecretKeyWo;
105
+ this._secretKeyWoVersion = config.secretKeyWoVersion;
106
+ }
107
+
108
+ // ==========
109
+ // ATTRIBUTES
110
+ // ==========
111
+
112
+ // access_key - computed: false, optional: false, required: true
113
+ private _accessKey?: string;
114
+ public get accessKey() {
115
+ return this.getStringAttribute('access_key');
116
+ }
117
+ public set accessKey(value: string) {
118
+ this._accessKey = value;
119
+ }
120
+ // Temporarily expose input value. Use with caution.
121
+ public get accessKeyInput() {
122
+ return this._accessKey;
123
+ }
124
+
125
+ // mount - computed: false, optional: false, required: true
126
+ private _mount?: string;
127
+ public get mount() {
128
+ return this.getStringAttribute('mount');
129
+ }
130
+ public set mount(value: string) {
131
+ this._mount = value;
132
+ }
133
+ // Temporarily expose input value. Use with caution.
134
+ public get mountInput() {
135
+ return this._mount;
136
+ }
137
+
138
+ // namespace - computed: false, optional: true, required: false
139
+ private _namespace?: string;
140
+ public get namespace() {
141
+ return this.getStringAttribute('namespace');
142
+ }
143
+ public set namespace(value: string) {
144
+ this._namespace = value;
145
+ }
146
+ public resetNamespace() {
147
+ this._namespace = undefined;
148
+ }
149
+ // Temporarily expose input value. Use with caution.
150
+ public get namespaceInput() {
151
+ return this._namespace;
152
+ }
153
+
154
+ // secret_key_wo - computed: false, optional: false, required: true
155
+ private _secretKeyWo?: string;
156
+ /**
157
+ * @deprecated Write-only: the provider never returns this value; reading it always yields null by protocol contract. The getter remains for compatibility and will be removed in a future prebuilt-provider major.
158
+ */
159
+ public get secretKeyWo() {
160
+ return this.getStringAttribute('secret_key_wo');
161
+ }
162
+ public set secretKeyWo(value: string) {
163
+ this._secretKeyWo = value;
164
+ }
165
+ // Temporarily expose input value. Use with caution.
166
+ public get secretKeyWoInput() {
167
+ return this._secretKeyWo;
168
+ }
169
+
170
+ // secondary_secret_key_wo - computed: false, optional: true, required: false
171
+ private _secondarySecretKeyWo?: string;
172
+ /**
173
+ * @deprecated Write-only: the provider never returns this value; reading it always yields null by protocol contract. The getter remains for compatibility and will be removed in a future prebuilt-provider major.
174
+ */
175
+ public get secondarySecretKeyWo() {
176
+ return this.getStringAttribute('secondary_secret_key_wo');
177
+ }
178
+ public set secondarySecretKeyWo(value: string) {
179
+ this._secondarySecretKeyWo = value;
180
+ }
181
+ public resetSecondarySecretKeyWo() {
182
+ this._secondarySecretKeyWo = undefined;
183
+ }
184
+ // Temporarily expose input value. Use with caution.
185
+ public get secondarySecretKeyWoInput() {
186
+ return this._secondarySecretKeyWo;
187
+ }
188
+
189
+ // secret_key_wo_version - computed: false, optional: false, required: true
190
+ private _secretKeyWoVersion?: number;
191
+ public get secretKeyWoVersion() {
192
+ return this.getNumberAttribute('secret_key_wo_version');
193
+ }
194
+ public set secretKeyWoVersion(value: number) {
195
+ this._secretKeyWoVersion = value;
196
+ }
197
+ // Temporarily expose input value. Use with caution.
198
+ public get secretKeyWoVersionInput() {
199
+ return this._secretKeyWoVersion;
200
+ }
201
+
202
+ // =========
203
+ // SYNTHESIS
204
+ // =========
205
+
206
+ protected synthesizeAttributes(): { [name: string]: any } {
207
+ return {
208
+ access_key: cdktn.stringToTerraform(this._accessKey),
209
+ mount: cdktn.stringToTerraform(this._mount),
210
+ namespace: cdktn.stringToTerraform(this._namespace),
211
+ secret_key_wo: this.markWriteOnlyAttribute(cdktn.stringToTerraform(this._secretKeyWo)),
212
+ secondary_secret_key_wo: this.markWriteOnlyAttribute(cdktn.stringToTerraform(this._secondarySecretKeyWo)),
213
+ secret_key_wo_version: cdktn.numberToTerraform(this._secretKeyWoVersion),
214
+ };
215
+ }
216
+
217
+ protected synthesizeHclAttributes(): { [name: string]: any } {
218
+ const attrs = {
219
+ access_key: {
220
+ value: cdktn.stringToHclTerraform(this._accessKey),
221
+ isBlock: false,
222
+ type: "simple",
223
+ storageClassType: "string",
224
+ },
225
+ mount: {
226
+ value: cdktn.stringToHclTerraform(this._mount),
227
+ isBlock: false,
228
+ type: "simple",
229
+ storageClassType: "string",
230
+ },
231
+ namespace: {
232
+ value: cdktn.stringToHclTerraform(this._namespace),
233
+ isBlock: false,
234
+ type: "simple",
235
+ storageClassType: "string",
236
+ },
237
+ secret_key_wo: {
238
+ value: this.markWriteOnlyAttribute(cdktn.stringToHclTerraform(this._secretKeyWo)),
239
+ isBlock: false,
240
+ type: "simple",
241
+ storageClassType: "string",
242
+ },
243
+ secondary_secret_key_wo: {
244
+ value: this.markWriteOnlyAttribute(cdktn.stringToHclTerraform(this._secondarySecretKeyWo)),
245
+ isBlock: false,
246
+ type: "simple",
247
+ storageClassType: "string",
248
+ },
249
+ secret_key_wo_version: {
250
+ value: cdktn.numberToHclTerraform(this._secretKeyWoVersion),
251
+ isBlock: false,
252
+ type: "simple",
253
+ storageClassType: "number",
254
+ },
255
+ };
256
+
257
+ // remove undefined attributes
258
+ return Object.fromEntries(Object.entries(attrs).filter(([_, value]) => value !== undefined && value.value !== undefined ))
259
+ }
260
+ }
261
+ "
262
+ `;
@@ -0,0 +1,46 @@
1
+ // Copyright (c) HashiCorp, Inc
2
+ // SPDX-License-Identifier: MPL-2.0
3
+ import * as fs from "fs";
4
+ import * as path from "path";
5
+ import { TerraformProviderGenerator } from "../../generator/provider-generator";
6
+ import { CodeMaker } from "codemaker";
7
+ import { createTmpHelper } from "../util";
8
+
9
+ const tmp = createTmpHelper();
10
+
11
+ test("generate an ephemeral random_password resource alongside a regular random_uuid resource", async () => {
12
+ const code = new CodeMaker();
13
+ const workdir = tmp("ephemeral.test");
14
+ const spec = JSON.parse(
15
+ fs.readFileSync(
16
+ path.join(__dirname, "fixtures", "ephemeral-resources.test.fixture.json"),
17
+ "utf-8",
18
+ ),
19
+ );
20
+ new TerraformProviderGenerator(code, spec).generateAll();
21
+ await code.save(workdir);
22
+
23
+ const ephemeralOutput = fs.readFileSync(
24
+ path.join(workdir, "providers/random/ephemeral-random-password/index.ts"),
25
+ "utf-8",
26
+ );
27
+ expect(ephemeralOutput).toMatchSnapshot("ephemeral-random-password");
28
+
29
+ const resourceOutput = fs.readFileSync(
30
+ path.join(workdir, "providers/random/uuid/index.ts"),
31
+ "utf-8",
32
+ );
33
+ expect(resourceOutput).toMatchSnapshot("random-uuid");
34
+
35
+ const providerIndex = fs.readFileSync(
36
+ path.join(workdir, "providers/random/index.ts"),
37
+ "utf-8",
38
+ );
39
+ expect(providerIndex).toMatchSnapshot("provider-index");
40
+
41
+ const providerLazyIndex = fs.readFileSync(
42
+ path.join(workdir, "providers/random/lazy-index.ts"),
43
+ "utf-8",
44
+ );
45
+ expect(providerLazyIndex).toMatchSnapshot("provider-lazy-index");
46
+ });
@@ -0,0 +1,160 @@
1
+ {
2
+ "provider_schemas": {
3
+ "registry.terraform.io/hashicorp/random": {
4
+ "resource_schemas": {
5
+ "random_uuid": {
6
+ "version": 0,
7
+ "block": {
8
+ "attributes": {
9
+ "id": {
10
+ "type": "string",
11
+ "description": "The generated uuid presented in string format.",
12
+ "description_kind": "plain",
13
+ "computed": true
14
+ },
15
+ "keepers": {
16
+ "type": [
17
+ "map",
18
+ "string"
19
+ ],
20
+ "description": "Arbitrary map of values that, when changed, will trigger recreation of resource. See [the main provider documentation](../index.html) for more information.",
21
+ "description_kind": "plain",
22
+ "optional": true
23
+ },
24
+ "result": {
25
+ "type": "string",
26
+ "description": "The generated uuid presented in string format.",
27
+ "description_kind": "plain",
28
+ "computed": true
29
+ }
30
+ },
31
+ "description": "The resource `random_uuid` generates a random uuid string that is intended to be used as a unique identifier for other resources.\n\nThis resource uses [hashicorp/go-uuid](https://github.com/hashicorp/go-uuid) to generate a UUID-formatted string for use with services needing a unique string identifier.",
32
+ "description_kind": "plain"
33
+ }
34
+ }
35
+ },
36
+ "ephemeral_resource_schemas": {
37
+ "random_bytes": {
38
+ "version": 0,
39
+ "block": {
40
+ "attributes": {
41
+ "base64": {
42
+ "type": "string",
43
+ "description": "The generated bytes presented in base64 string format.",
44
+ "description_kind": "plain",
45
+ "computed": true,
46
+ "sensitive": true
47
+ },
48
+ "hex": {
49
+ "type": "string",
50
+ "description": "The generated bytes presented in lowercase hexadecimal string format. The length of the encoded string is exactly twice the `length` parameter.",
51
+ "description_kind": "plain",
52
+ "computed": true,
53
+ "sensitive": true
54
+ },
55
+ "length": {
56
+ "type": "number",
57
+ "description": "The number of bytes requested. The minimum value for length is 1.",
58
+ "description_kind": "plain",
59
+ "required": true
60
+ }
61
+ },
62
+ "description": "-> If the managed resource doesn't have a write-only argument available for the secret (first introduced in Terraform 1.11), then the secret can only be created with the managed resource variant of [`random_bytes`](https://registry.terraform.io/providers/hashicorp/random/latest/docs/resources/bytes).\n\nGenerates ephemeral random bytes using a cryptographic random number generator.\n\nThe primary use-case for generating ephemeral random bytes is to be used in combination with a write-only argument in a managed resource, which will avoid Terraform storing the secret value in the plan or state file.",
63
+ "description_kind": "plain"
64
+ }
65
+ },
66
+ "random_password": {
67
+ "version": 0,
68
+ "block": {
69
+ "attributes": {
70
+ "bcrypt_hash": {
71
+ "type": "string",
72
+ "description": "A bcrypt hash of the generated random string. **NOTE**: If the generated random string is greater than 72 bytes in length, `bcrypt_hash` will contain a hash of the first 72 bytes.",
73
+ "description_kind": "plain",
74
+ "computed": true,
75
+ "sensitive": true
76
+ },
77
+ "length": {
78
+ "type": "number",
79
+ "description": "The length of the string desired. The minimum value for length is 1 and, length must also be >= (`min_upper` + `min_lower` + `min_numeric` + `min_special`).",
80
+ "description_kind": "plain",
81
+ "required": true
82
+ },
83
+ "lower": {
84
+ "type": "bool",
85
+ "description": "Include lowercase alphabet characters in the result. Default value is `true`.",
86
+ "description_kind": "plain",
87
+ "optional": true,
88
+ "computed": true
89
+ },
90
+ "min_lower": {
91
+ "type": "number",
92
+ "description": "Minimum number of lowercase alphabet characters in the result. Default value is `0`.",
93
+ "description_kind": "plain",
94
+ "optional": true,
95
+ "computed": true
96
+ },
97
+ "min_numeric": {
98
+ "type": "number",
99
+ "description": "Minimum number of numeric characters in the result. Default value is `0`.",
100
+ "description_kind": "plain",
101
+ "optional": true,
102
+ "computed": true
103
+ },
104
+ "min_special": {
105
+ "type": "number",
106
+ "description": "Minimum number of special characters in the result. Default value is `0`.",
107
+ "description_kind": "plain",
108
+ "optional": true,
109
+ "computed": true
110
+ },
111
+ "min_upper": {
112
+ "type": "number",
113
+ "description": "Minimum number of uppercase alphabet characters in the result. Default value is `0`.",
114
+ "description_kind": "plain",
115
+ "optional": true,
116
+ "computed": true
117
+ },
118
+ "numeric": {
119
+ "type": "bool",
120
+ "description": "Include numeric characters in the result. Default value is `true`. If `numeric`, `upper`, `lower`, and `special` are all configured, at least one of them must be set to `true`.",
121
+ "description_kind": "plain",
122
+ "optional": true,
123
+ "computed": true
124
+ },
125
+ "override_special": {
126
+ "type": "string",
127
+ "description": "Supply your own list of special characters to use for string generation. This overrides the default character list in the special argument. The `special` argument must still be set to true for any overwritten characters to be used in generation.",
128
+ "description_kind": "plain",
129
+ "optional": true
130
+ },
131
+ "result": {
132
+ "type": "string",
133
+ "description": "The generated random string.",
134
+ "description_kind": "plain",
135
+ "computed": true,
136
+ "sensitive": true
137
+ },
138
+ "special": {
139
+ "type": "bool",
140
+ "description": "Include special characters in the result. These are `!@#$%&*()-_=+[]{}<>:?`. Default value is `true`.",
141
+ "description_kind": "plain",
142
+ "optional": true,
143
+ "computed": true
144
+ },
145
+ "upper": {
146
+ "type": "bool",
147
+ "description": "Include uppercase alphabet characters in the result. Default value is `true`.",
148
+ "description_kind": "plain",
149
+ "optional": true,
150
+ "computed": true
151
+ }
152
+ },
153
+ "description": "-> If the managed resource doesn't have a write-only argument available for the password (first introduced in Terraform 1.11), then the password can only be created with the managed resource variant of [`random_password`](https://registry.terraform.io/providers/hashicorp/random/latest/docs/resources/password).\n\nGenerates an ephemeral password string using a cryptographic random number generator.\n\nThe primary use-case for generating an ephemeral random password is to be used in combination with a write-only argument in a managed resource, which will avoid Terraform storing the password string in the plan or state file.",
154
+ "description_kind": "plain"
155
+ }
156
+ }
157
+ }
158
+ }
159
+ }
160
+ }
@@ -0,0 +1,31 @@
1
+ {
2
+ "provider_schemas": {
3
+ "registry.terraform.io/hashicorp/example": {
4
+ "provider": {
5
+ "version": 0,
6
+ "block": {
7
+ "attributes": {
8
+ "functions": {
9
+ "type": "string",
10
+ "description": "A config attribute that happens to be named the same as the generated functions getter.",
11
+ "description_kind": "plain",
12
+ "optional": true
13
+ }
14
+ }
15
+ }
16
+ },
17
+ "functions": {
18
+ "greet": {
19
+ "description": "Greets the given name.",
20
+ "return_type": "string",
21
+ "parameters": [
22
+ {
23
+ "name": "name",
24
+ "type": "string"
25
+ }
26
+ ]
27
+ }
28
+ }
29
+ }
30
+ }
31
+ }