@@ -35,18 +35,32 @@ type resourceTFEHYOKConfiguration struct {
35
35
}
36
36
37
37
type modelTFEHYOKConfiguration struct {
38
- ID types.String `tfsdk:"id"`
39
- Name types.String `tfsdk:"name"`
40
- KEKID types.String `tfsdk:"kek_id"`
41
- KMSOptions * modelTFEKMSOptions `tfsdk:"kms_options"`
42
-
43
- AWSOIDCConfigurationID types.String `tfsdk:"aws_oidc_configuration_id"`
44
- GCPOIDCConfigurationID types.String `tfsdk:"gcp_oidc_configuration_id"`
45
- VaultOIDCConfigurationID types.String `tfsdk:"vault_oidc_configuration_id"`
46
- AzureOIDCConfigurationID types.String `tfsdk:"azure_oidc_configuration_id"`
47
-
48
- AgentPoolID types.String `tfsdk:"agent_pool_id"`
49
- Organization types.String `tfsdk:"organization"`
38
+ ID types.String `tfsdk:"id"`
39
+ Name types.String `tfsdk:"name"`
40
+ KEKID types.String `tfsdk:"kek_id"`
41
+ KMSOptions * modelTFEKMSOptions `tfsdk:"kms_options"`
42
+ OIDCConfigurationID types.String `tfsdk:"oidc_configuration_id"`
43
+ OIDCConfigurationType types.String `tfsdk:"oidc_configuration_type"`
44
+ AgentPoolID types.String `tfsdk:"agent_pool_id"`
45
+ Organization types.String `tfsdk:"organization"`
46
+ }
47
+
48
+ func (m * modelTFEHYOKConfiguration ) TFEOIDCConfigurationTypeChoice () * tfe.OIDCConfigurationTypeChoice {
49
+ var typeChoice * tfe.OIDCConfigurationTypeChoice
50
+ id := m .OIDCConfigurationID .ValueString ()
51
+
52
+ switch m .OIDCConfigurationType .ValueString () {
53
+ case OIDCConfigurationTypeAWS :
54
+ typeChoice = & tfe.OIDCConfigurationTypeChoice {AWSOIDCConfiguration : & tfe.AWSOIDCConfiguration {ID : id }}
55
+ case OIDCConfigurationTypeGCP :
56
+ typeChoice = & tfe.OIDCConfigurationTypeChoice {GCPOIDCConfiguration : & tfe.GCPOIDCConfiguration {ID : id }}
57
+ case OIDCConfigurationTypeVault :
58
+ typeChoice = & tfe.OIDCConfigurationTypeChoice {VaultOIDCConfiguration : & tfe.VaultOIDCConfiguration {ID : id }}
59
+ case OIDCConfigurationTypeAzure :
60
+ typeChoice = & tfe.OIDCConfigurationTypeChoice {AzureOIDCConfiguration : & tfe.AzureOIDCConfiguration {ID : id }}
61
+ }
62
+
63
+ return typeChoice
50
64
}
51
65
52
66
type modelTFEKMSOptions struct {
@@ -55,6 +69,26 @@ type modelTFEKMSOptions struct {
55
69
KeyRingID types.String `tfsdk:"key_ring_id"`
56
70
}
57
71
72
+ func (m * modelTFEKMSOptions ) TFEKMSOptions () * tfe.KMSOptions {
73
+ var kmsOptions * tfe.KMSOptions
74
+ if m != nil {
75
+ kmsOptions = & tfe.KMSOptions {
76
+ KeyRegion : m .KeyRegion .ValueString (),
77
+ KeyLocation : m .KeyLocation .ValueString (),
78
+ KeyRingID : m .KeyRingID .ValueString (),
79
+ }
80
+ }
81
+ return kmsOptions
82
+ }
83
+
84
+ // List all available OIDC configuration types.
85
+ const (
86
+ OIDCConfigurationTypeAWS string = "aws"
87
+ OIDCConfigurationTypeGCP string = "gcp"
88
+ OIDCConfigurationTypeVault string = "vault"
89
+ OIDCConfigurationTypeAzure string = "azure"
90
+ )
91
+
58
92
func (r * resourceTFEHYOKConfiguration ) Configure (_ context.Context , req resource.ConfigureRequest , resp * resource.ConfigureResponse ) {
59
93
// Prevent panic if the provider has not been configured.
60
94
if req .ProviderData == nil {
@@ -93,44 +127,23 @@ func (r *resourceTFEHYOKConfiguration) Schema(_ context.Context, _ resource.Sche
93
127
Description : "Refers to the name of your key encryption key stored in your key management service." ,
94
128
Required : true ,
95
129
},
96
- "aws_oidc_configuration_id" : schema.StringAttribute {
97
- Description : "The ID of the TFE AWS OIDC configuration." ,
98
- Optional : true ,
99
- PlanModifiers : []planmodifier.String {
100
- stringplanmodifier .RequiresReplace (),
101
- },
102
- Validators : []validator.String {
103
- validateSingleOIDCConfigurationChoice (),
104
- },
105
- },
106
- "gcp_oidc_configuration_id" : schema.StringAttribute {
107
- Description : "The ID of the TFE HYOK configuration." ,
108
- Optional : true ,
109
- PlanModifiers : []planmodifier.String {
110
- stringplanmodifier .RequiresReplace (),
111
- },
112
- Validators : []validator.String {
113
- validateSingleOIDCConfigurationChoice (),
114
- },
115
- },
116
- "vault_oidc_configuration_id" : schema.StringAttribute {
117
- Description : "The ID of the TFE Vault OIDC configuration." ,
118
- Optional : true ,
119
- PlanModifiers : []planmodifier.String {
120
- stringplanmodifier .RequiresReplace (),
121
- },
122
- Validators : []validator.String {
123
- validateSingleOIDCConfigurationChoice (),
124
- },
130
+ "oidc_configuration_id" : schema.StringAttribute {
131
+ Description : "The ID of the TFE OIDC configuration." ,
132
+ Required : true ,
125
133
},
126
- "azure_oidc_configuration_id " : schema.StringAttribute {
127
- Description : "The ID of the TFE Azure OIDC configuration." ,
128
- Optional : true ,
134
+ "oidc_configuration_type " : schema.StringAttribute {
135
+ Description : "The type of the TFE OIDC configuration." ,
136
+ Required : true ,
129
137
PlanModifiers : []planmodifier.String {
130
138
stringplanmodifier .RequiresReplace (),
131
139
},
132
140
Validators : []validator.String {
133
- validateSingleOIDCConfigurationChoice (),
141
+ stringvalidator .OneOf (
142
+ string (OIDCConfigurationTypeAWS ),
143
+ string (OIDCConfigurationTypeGCP ),
144
+ string (OIDCConfigurationTypeVault ),
145
+ string (OIDCConfigurationTypeAzure ),
146
+ ),
134
147
},
135
148
},
136
149
"agent_pool_id" : schema.StringAttribute {
@@ -175,15 +188,6 @@ func (r *resourceTFEHYOKConfiguration) Schema(_ context.Context, _ resource.Sche
175
188
}
176
189
}
177
190
178
- func validateSingleOIDCConfigurationChoice () validator.String {
179
- return stringvalidator .ExactlyOneOf (
180
- path .MatchRoot ("aws_oidc_configuration_id" ),
181
- path .MatchRoot ("gcp_oidc_configuration_id" ),
182
- path .MatchRoot ("azure_oidc_configuration_id" ),
183
- path .MatchRoot ("vault_oidc_configuration_id" ),
184
- )
185
- }
186
-
187
191
func (r * resourceTFEHYOKConfiguration ) ImportState (ctx context.Context , req resource.ImportStateRequest , resp * resource.ImportStateResponse ) {
188
192
resource .ImportStatePassthroughID (ctx , path .Root ("id" ), req , resp )
189
193
}
@@ -204,46 +208,12 @@ func (r *resourceTFEHYOKConfiguration) Create(ctx context.Context, req resource.
204
208
return
205
209
}
206
210
207
- var awsOIDCConfig * tfe.AWSOIDCConfiguration
208
- if plan .AWSOIDCConfigurationID .ValueString () != "" {
209
- awsOIDCConfig = & tfe.AWSOIDCConfiguration {ID : plan .AWSOIDCConfigurationID .ValueString ()}
210
- }
211
-
212
- var gcpOIDCConfig * tfe.GCPOIDCConfiguration
213
- if plan .GCPOIDCConfigurationID .ValueString () != "" {
214
- gcpOIDCConfig = & tfe.GCPOIDCConfiguration {ID : plan .GCPOIDCConfigurationID .ValueString ()}
215
- }
216
-
217
- var vaultOIDCConfig * tfe.VaultOIDCConfiguration
218
- if plan .VaultOIDCConfigurationID .ValueString () != "" {
219
- vaultOIDCConfig = & tfe.VaultOIDCConfiguration {ID : plan .VaultOIDCConfigurationID .ValueString ()}
220
- }
221
-
222
- var azureOIDCConfig * tfe.AzureOIDCConfiguration
223
- if plan .AzureOIDCConfigurationID .ValueString () != "" {
224
- azureOIDCConfig = & tfe.AzureOIDCConfiguration {ID : plan .AzureOIDCConfigurationID .ValueString ()}
225
- }
226
-
227
- var kmsOptions * tfe.KMSOptions
228
- if plan .KMSOptions != nil {
229
- kmsOptions = & tfe.KMSOptions {
230
- KeyRegion : plan .KMSOptions .KeyRegion .ValueString (),
231
- KeyLocation : plan .KMSOptions .KeyLocation .ValueString (),
232
- KeyRingID : plan .KMSOptions .KeyRingID .ValueString (),
233
- }
234
- }
235
-
236
211
options := tfe.HYOKConfigurationsCreateOptions {
237
- KEKID : plan .KEKID .ValueString (),
238
- Name : plan .Name .ValueString (),
239
- KMSOptions : kmsOptions ,
240
- OIDCConfiguration : & tfe.OIDCConfigurationTypeChoice {
241
- AWSOIDCConfiguration : awsOIDCConfig ,
242
- GCPOIDCConfiguration : gcpOIDCConfig ,
243
- VaultOIDCConfiguration : vaultOIDCConfig ,
244
- AzureOIDCConfiguration : azureOIDCConfig ,
245
- },
246
- AgentPool : & tfe.AgentPool {ID : plan .AgentPoolID .ValueString ()},
212
+ KEKID : plan .KEKID .ValueString (),
213
+ Name : plan .Name .ValueString (),
214
+ KMSOptions : plan .KMSOptions .TFEKMSOptions (),
215
+ OIDCConfiguration : plan .TFEOIDCConfigurationTypeChoice (),
216
+ AgentPool : & tfe.AgentPool {ID : plan .AgentPoolID .ValueString ()},
247
217
}
248
218
249
219
tflog .Debug (ctx , fmt .Sprintf ("Create TFE HYOK Configuration for organization %s" , orgName ))
@@ -300,19 +270,10 @@ func (r *resourceTFEHYOKConfiguration) Update(ctx context.Context, req resource.
300
270
return
301
271
}
302
272
303
- var kmsOptions * tfe.KMSOptions
304
- if plan .KMSOptions != nil {
305
- kmsOptions = & tfe.KMSOptions {
306
- KeyRegion : plan .KMSOptions .KeyRegion .ValueString (),
307
- KeyLocation : plan .KMSOptions .KeyLocation .ValueString (),
308
- KeyRingID : plan .KMSOptions .KeyRingID .ValueString (),
309
- }
310
- }
311
-
312
273
options := tfe.HYOKConfigurationsUpdateOptions {
313
274
Name : plan .Name .ValueStringPointer (),
314
275
KEKID : plan .KEKID .ValueStringPointer (),
315
- KMSOptions : kmsOptions ,
276
+ KMSOptions : plan . KMSOptions . TFEKMSOptions () ,
316
277
AgentPool : & tfe.AgentPool {ID : plan .AgentPoolID .ValueString ()},
317
278
}
318
279
@@ -342,6 +303,7 @@ func (r *resourceTFEHYOKConfiguration) Delete(ctx context.Context, req resource.
342
303
if err != nil {
343
304
if errors .Is (err , tfe .ErrResourceNotFound ) {
344
305
tflog .Debug (ctx , fmt .Sprintf ("TFE HYOK configuration %s no longer exists" , hyokID ))
306
+ return
345
307
}
346
308
347
309
resp .Diagnostics .AddError ("Error deleting TFE HYOK Configuration" , err .Error ())
@@ -369,13 +331,17 @@ func modelFromTFEHYOKConfiguration(p *tfe.HYOKConfiguration) modelTFEHYOKConfigu
369
331
}
370
332
371
333
if p .OIDCConfiguration .AWSOIDCConfiguration != nil {
372
- model .AWSOIDCConfigurationID = types .StringValue (p .OIDCConfiguration .AWSOIDCConfiguration .ID )
334
+ model .OIDCConfigurationID = types .StringValue (p .OIDCConfiguration .AWSOIDCConfiguration .ID )
335
+ model .OIDCConfigurationType = types .StringValue (OIDCConfigurationTypeAWS )
373
336
} else if p .OIDCConfiguration .GCPOIDCConfiguration != nil {
374
- model .GCPOIDCConfigurationID = types .StringValue (p .OIDCConfiguration .GCPOIDCConfiguration .ID )
337
+ model .OIDCConfigurationID = types .StringValue (p .OIDCConfiguration .GCPOIDCConfiguration .ID )
338
+ model .OIDCConfigurationType = types .StringValue (OIDCConfigurationTypeGCP )
375
339
} else if p .OIDCConfiguration .AzureOIDCConfiguration != nil {
376
- model .AzureOIDCConfigurationID = types .StringValue (p .OIDCConfiguration .AzureOIDCConfiguration .ID )
340
+ model .OIDCConfigurationID = types .StringValue (p .OIDCConfiguration .AzureOIDCConfiguration .ID )
341
+ model .OIDCConfigurationType = types .StringValue (OIDCConfigurationTypeAzure )
377
342
} else if p .OIDCConfiguration .VaultOIDCConfiguration != nil {
378
- model .VaultOIDCConfigurationID = types .StringValue (p .OIDCConfiguration .VaultOIDCConfiguration .ID )
343
+ model .OIDCConfigurationID = types .StringValue (p .OIDCConfiguration .VaultOIDCConfiguration .ID )
344
+ model .OIDCConfigurationType = types .StringValue (OIDCConfigurationTypeVault )
379
345
}
380
346
381
347
return model
0 commit comments