Skip to content

Commit a8246d9

Browse files
committed
WIP: GCP Cloud Provider WIF support
1 parent fd50ad0 commit a8246d9

11 files changed

+7064
-2
lines changed

GNUmakefile

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ lint:
1111

1212
generate:
1313
cd tools; go generate ./...
14+
cd internal; go generate ./...
1415

1516
fmt:
1617
gofmt -s -w -e .

go.mod

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,17 @@ module terraform-provider-tlspc
33
go 1.22.7
44

55
require (
6+
github.com/Khan/genqlient v0.8.0
7+
github.com/google/uuid v1.6.0
68
github.com/hashicorp/terraform-plugin-framework v1.13.0
79
github.com/hashicorp/terraform-plugin-framework-jsontypes v0.2.0
810
)
911

1012
require (
13+
github.com/agnivade/levenshtein v1.1.1 // indirect
14+
github.com/alexflint/go-arg v1.4.2 // indirect
15+
github.com/alexflint/go-scalar v1.0.0 // indirect
16+
github.com/bmatcuk/doublestar/v4 v4.6.1 // indirect
1117
github.com/fatih/color v1.16.0 // indirect
1218
github.com/golang/protobuf v1.5.4 // indirect
1319
github.com/hashicorp/go-hclog v1.6.3 // indirect
@@ -22,12 +28,17 @@ require (
2228
github.com/mattn/go-isatty v0.0.20 // indirect
2329
github.com/mitchellh/go-testing-interface v1.14.1 // indirect
2430
github.com/oklog/run v1.0.0 // indirect
31+
github.com/vektah/gqlparser/v2 v2.5.19 // indirect
2532
github.com/vmihailenco/msgpack/v5 v5.4.1 // indirect
2633
github.com/vmihailenco/tagparser/v2 v2.0.0 // indirect
34+
golang.org/x/mod v0.20.0 // indirect
2735
golang.org/x/net v0.33.0 // indirect
36+
golang.org/x/sync v0.10.0 // indirect
2837
golang.org/x/sys v0.28.0 // indirect
2938
golang.org/x/text v0.21.0 // indirect
39+
golang.org/x/tools v0.24.0 // indirect
3040
google.golang.org/genproto/googleapis/rpc v0.0.0-20240814211410-ddb44dafa142 // indirect
3141
google.golang.org/grpc v1.67.1 // indirect
3242
google.golang.org/protobuf v1.35.1 // indirect
43+
gopkg.in/yaml.v2 v2.4.0 // indirect
3344
)

go.sum

Lines changed: 35 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,33 @@
1+
github.com/Khan/genqlient v0.7.0 h1:GZ1meyRnzcDTK48EjqB8t3bcfYvHArCUUvgOwpz1D4w=
2+
github.com/Khan/genqlient v0.7.0/go.mod h1:HNyy3wZvuYwmW3Y7mkoQLZsa/R5n5yIRajS1kPBvSFM=
3+
github.com/Khan/genqlient v0.8.0 h1:Hd1a+E1CQHYbMEKakIkvBH3zW0PWEeiX6Hp1i2kP2WE=
4+
github.com/Khan/genqlient v0.8.0/go.mod h1:hn70SpYjWteRGvxTwo0kfaqg4wxvndECGkfa1fdDdYI=
5+
github.com/agnivade/levenshtein v1.1.1 h1:QY8M92nrzkmr798gCo3kmMyqXFzdQVpxLlGPRBij0P8=
6+
github.com/agnivade/levenshtein v1.1.1/go.mod h1:veldBMzWxcCG2ZvUTKD2kJNRdCk5hVbJomOvKkmgYbo=
7+
github.com/alexflint/go-arg v1.4.2 h1:lDWZAXxpAnZUq4qwb86p/3rIJJ2Li81EoMbTMujhVa0=
8+
github.com/alexflint/go-arg v1.4.2/go.mod h1:9iRbDxne7LcR/GSvEr7ma++GLpdIU1zrghf2y2768kM=
9+
github.com/alexflint/go-scalar v1.0.0 h1:NGupf1XV/Xb04wXskDFzS0KWOLH632W/EO4fAFi+A70=
10+
github.com/alexflint/go-scalar v1.0.0/go.mod h1:GpHzbCOZXEKMEcygYQ5n/aa4Aq84zbxjy3MxYW0gjYw=
11+
github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883 h1:bvNMNQO63//z+xNgfBlViaCIJKLlCJ6/fmUseuG0wVQ=
12+
github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883/go.mod h1:rCTlJbsFo29Kk6CurOXKm700vrz8f0KW0JNfpkRJY/8=
13+
github.com/arbovm/levenshtein v0.0.0-20160628152529-48b4e1c0c4d0/go.mod h1:t2tdKJDJF9BV14lnkjHmOQgcvEKgtqs5a1N3LNdJhGE=
14+
github.com/bmatcuk/doublestar/v4 v4.6.1 h1:FH9SifrbvJhnlQpztAx++wlkk70QBf0iBWDwNy7PA4I=
15+
github.com/bmatcuk/doublestar/v4 v4.6.1/go.mod h1:xBQ8jztBU6kakFMg+8WGxn0c6z1fTSPVIjEY1Wr7jzc=
116
github.com/bufbuild/protocompile v0.4.0 h1:LbFKd2XowZvQ/kajzguUp2DC9UEIQhIq77fZZlaQsNA=
217
github.com/bufbuild/protocompile v0.4.0/go.mod h1:3v93+mbWn/v3xzN+31nwkJfrEpAUwp+BagBSZWx+TP8=
318
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
419
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
520
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
21+
github.com/dgryski/trifles v0.0.0-20200323201526-dd97f9abfb48/go.mod h1:if7Fbed8SFyPtHLHbg49SI7NAdJiC5WIA09pe59rfAA=
622
github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYFFOfk=
723
github.com/fatih/color v1.16.0 h1:zmkK9Ngbjj+K0yRhTVONQh1p/HknKYSlNT+vZCzyokM=
824
github.com/fatih/color v1.16.0/go.mod h1:fL2Sau1YI5c0pdGEVCbKQbLXB6edEj1ZgiY4NijnWvE=
925
github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek=
1026
github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps=
1127
github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=
1228
github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
29+
github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
30+
github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
1331
github.com/hashicorp/go-hclog v1.6.3 h1:Qr2kF+eVWjTiYmU7Y31tYlP1h0q/X3Nl3tPGdaB11/k=
1432
github.com/hashicorp/go-hclog v1.6.3/go.mod h1:W4Qnvbt70Wk/zYJryRzDRU/4r0kIg0PVHBcfoyhpF5M=
1533
github.com/hashicorp/go-plugin v1.6.2 h1:zdGAEd0V1lCaU0u+MxWQhtSDQmahpkwOun8U8EiRVog=
@@ -47,16 +65,27 @@ github.com/oklog/run v1.0.0 h1:Ru7dDtJNOyC66gQ5dQmaCa0qIsAUFY3sFpK1Xk8igrw=
4765
github.com/oklog/run v1.0.0/go.mod h1:dlhp/R75TPv97u0XWUtDeV/lRKWPKSdTuV0TZvrmrQA=
4866
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
4967
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
68+
github.com/sergi/go-diff v1.3.1 h1:xkr+Oxo4BOQKmkn/B9eMK0g5Kg/983T9DqqPHwYqD+8=
69+
github.com/sergi/go-diff v1.3.1/go.mod h1:aMJSSKb2lpPvRNec0+w3fl7LP9IOFzdc9Pa4NFbPK1I=
5070
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
71+
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
5172
github.com/stretchr/testify v1.7.2/go.mod h1:R6va5+xMeoiuVRoj+gSkQ7d3FALtqAAGI1FQKckRals=
52-
github.com/stretchr/testify v1.8.3 h1:RP3t2pwF7cMEbC1dqtB6poj3niw/9gnV4Cjg5oW5gtY=
53-
github.com/stretchr/testify v1.8.3/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
73+
github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk=
74+
github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
75+
github.com/vektah/gqlparser/v2 v2.5.11 h1:JJxLtXIoN7+3x6MBdtIP59TP1RANnY7pXOaDnADQSf8=
76+
github.com/vektah/gqlparser/v2 v2.5.11/go.mod h1:1rCcfwB2ekJofmluGWXMSEnPMZgbxzwj6FaZ/4OT8Cc=
77+
github.com/vektah/gqlparser/v2 v2.5.19 h1:bhCPCX1D4WWzCDvkPl4+TP1N8/kLrWnp43egplt7iSg=
78+
github.com/vektah/gqlparser/v2 v2.5.19/go.mod h1:y7kvl5bBlDeuWIvLtA9849ncyvx6/lj06RsMrEjVy3U=
5479
github.com/vmihailenco/msgpack/v5 v5.4.1 h1:cQriyiUvjTwOHg8QZaPihLWeRAAVoCpE00IUPn0Bjt8=
5580
github.com/vmihailenco/msgpack/v5 v5.4.1/go.mod h1:GaZTsDaehaPpQVyxrf5mtQlH+pc21PIudVV/E3rRQok=
5681
github.com/vmihailenco/tagparser/v2 v2.0.0 h1:y09buUbR+b5aycVFQs/g70pqKVZNBmxwAhO7/IwNM9g=
5782
github.com/vmihailenco/tagparser/v2 v2.0.0/go.mod h1:Wri+At7QHww0WTrCBeu4J6bNtoV6mEfg5OIWRZA9qds=
83+
golang.org/x/mod v0.20.0 h1:utOm6MM3R3dnawAiJgn0y+xvuYRsm1RKM/4giyfDgV0=
84+
golang.org/x/mod v0.20.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
5885
golang.org/x/net v0.33.0 h1:74SYHlV8BIgHIFC/LrYkOGIwL19eTYXQ5wc6TBuO36I=
5986
golang.org/x/net v0.33.0/go.mod h1:HXLR5J+9DxmrqMwG9qjGCxZ+zKXxBru04zlTvWlWuN4=
87+
golang.org/x/sync v0.10.0 h1:3NQrjDixjgGwUOCaF8w2+VYHv0Ve/vGYSbdkTa98gmQ=
88+
golang.org/x/sync v0.10.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
6089
golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
6190
golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
6291
golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
@@ -68,12 +97,16 @@ golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA=
6897
golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
6998
golang.org/x/text v0.21.0 h1:zyQAAkrwaneQ066sspRyJaG9VNi/YJ1NfzcGB3hZ/qo=
7099
golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ=
100+
golang.org/x/tools v0.24.0 h1:J1shsA93PJUEVaUSaay7UXAyE8aimq3GW0pjlolpa24=
101+
golang.org/x/tools v0.24.0/go.mod h1:YhNqVBIfWHdzvTLs0d8LCuMhkKUgSUKldakyV7W/WDQ=
71102
google.golang.org/genproto/googleapis/rpc v0.0.0-20240814211410-ddb44dafa142 h1:e7S5W7MGGLaSu8j3YjdezkZ+m1/Nm0uRVRMEMGk26Xs=
72103
google.golang.org/genproto/googleapis/rpc v0.0.0-20240814211410-ddb44dafa142/go.mod h1:UqMtugtsSgubUsoxbuAoiCXvqvErP7Gf0so0mK9tHxU=
73104
google.golang.org/grpc v1.67.1 h1:zWnc1Vrcno+lHZCOofnIMvycFcc0QRGIzm9dhnDX68E=
74105
google.golang.org/grpc v1.67.1/go.mod h1:1gLDyUQU7CTLJI90u3nXZ9ekeghjeM7pTDZlqFNg2AA=
75106
google.golang.org/protobuf v1.35.1 h1:m3LfL6/Ca+fqnjnlqQXNpFPABW1UD7mjh8KO2mKFytA=
76107
google.golang.org/protobuf v1.35.1/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE=
77108
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
109+
gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
110+
gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
78111
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
79112
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
Lines changed: 230 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,230 @@
1+
// Copyright (c) Venafi, Inc.
2+
// SPDX-License-Identifier: MPL-2.0
3+
4+
package provider
5+
6+
import (
7+
"context"
8+
"fmt"
9+
10+
"terraform-provider-tlspc/internal/tlspc"
11+
12+
"github.com/hashicorp/terraform-plugin-framework/path"
13+
"github.com/hashicorp/terraform-plugin-framework/resource"
14+
"github.com/hashicorp/terraform-plugin-framework/resource/schema"
15+
"github.com/hashicorp/terraform-plugin-framework/resource/schema/planmodifier"
16+
"github.com/hashicorp/terraform-plugin-framework/resource/schema/stringplanmodifier"
17+
"github.com/hashicorp/terraform-plugin-framework/types"
18+
)
19+
20+
var (
21+
_ resource.Resource = &cloudProviderGCPResource{}
22+
_ resource.ResourceWithConfigure = &cloudProviderGCPResource{}
23+
_ resource.ResourceWithImportState = &cloudProviderGCPResource{}
24+
)
25+
26+
type cloudProviderGCPResource struct {
27+
client *tlspc.Client
28+
}
29+
30+
func NewCloudProviderGCPResource() resource.Resource {
31+
return &cloudProviderGCPResource{}
32+
}
33+
34+
func (r *cloudProviderGCPResource) Metadata(_ context.Context, req resource.MetadataRequest, resp *resource.MetadataResponse) {
35+
resp.TypeName = req.ProviderTypeName + "_cloudprovider_gcp"
36+
}
37+
38+
func (r *cloudProviderGCPResource) Schema(_ context.Context, _ resource.SchemaRequest, resp *resource.SchemaResponse) {
39+
resp.Schema = schema.Schema{
40+
Attributes: map[string]schema.Attribute{
41+
"id": schema.StringAttribute{
42+
Computed: true,
43+
PlanModifiers: []planmodifier.String{
44+
stringplanmodifier.UseStateForUnknown(),
45+
},
46+
},
47+
"issuer_url": schema.StringAttribute{
48+
Computed: true,
49+
PlanModifiers: []planmodifier.String{
50+
stringplanmodifier.UseStateForUnknown(),
51+
},
52+
},
53+
"name": schema.StringAttribute{
54+
Required: true,
55+
},
56+
"team": schema.StringAttribute{
57+
Required: true,
58+
},
59+
"service_account_email": schema.StringAttribute{
60+
Required: true,
61+
},
62+
"project_number": schema.Int64Attribute{
63+
Required: true,
64+
},
65+
"workload_identity_pool_id": schema.StringAttribute{
66+
Required: true,
67+
},
68+
"workload_identity_pool_provider_id": schema.StringAttribute{
69+
Required: true,
70+
},
71+
},
72+
}
73+
}
74+
75+
func (r *cloudProviderGCPResource) Configure(_ context.Context, req resource.ConfigureRequest, resp *resource.ConfigureResponse) {
76+
if req.ProviderData == nil {
77+
return
78+
}
79+
80+
client, ok := req.ProviderData.(*tlspc.Client)
81+
82+
if !ok {
83+
resp.Diagnostics.AddError(
84+
"Unexpected Data Source Configure Type",
85+
fmt.Sprintf("Expected *tlspc.Client, got: %T. Please report this issue to the provider developers.", req.ProviderData),
86+
)
87+
88+
return
89+
}
90+
91+
r.client = client
92+
}
93+
94+
type cloudProviderGCPResourceModel struct {
95+
ID types.String `tfsdk:"id"`
96+
IssuerUrl types.String `tfsdk:"issuer_url"`
97+
Name types.String `tfsdk:"name"`
98+
Team types.String `tfsdk:"team"`
99+
ServiceAccountEmail types.String `tfsdk:"service_account_email"`
100+
ProjectNumber types.Int64 `tfsdk:"project_number"`
101+
WorkloadIdentityPoolId types.String `tfsdk:"workload_identity_pool_id"`
102+
WorkloadIdentityPoolProviderId types.String `tfsdk:"workload_identity_pool_provider_id"`
103+
}
104+
105+
func (r *cloudProviderGCPResource) Create(ctx context.Context, req resource.CreateRequest, resp *resource.CreateResponse) {
106+
var plan cloudProviderGCPResourceModel
107+
diags := req.Plan.Get(ctx, &plan)
108+
resp.Diagnostics.Append(diags...)
109+
if resp.Diagnostics.HasError() {
110+
return
111+
}
112+
113+
p := tlspc.CloudProviderGCP{
114+
Name: plan.Name.ValueString(),
115+
Team: plan.Team.ValueString(),
116+
ServiceAccountEmail: plan.ServiceAccountEmail.ValueString(),
117+
ProjectNumber: plan.ProjectNumber.ValueInt64(),
118+
WorkloadIdentityPoolId: plan.WorkloadIdentityPoolId.ValueString(),
119+
WorkloadIdentityPoolProviderId: plan.WorkloadIdentityPoolProviderId.ValueString(),
120+
}
121+
122+
created, err := r.client.CreateCloudProviderGCP(ctx, p)
123+
124+
if err != nil {
125+
resp.Diagnostics.AddError(
126+
"Error creating GCP Cloud Provider",
127+
"Could not create GCP Cloud Provider: "+err.Error(),
128+
)
129+
return
130+
}
131+
132+
plan.ID = types.StringValue(created.ID)
133+
plan.IssuerUrl = types.StringValue(created.IssuerUrl)
134+
135+
diags = resp.State.Set(ctx, plan)
136+
resp.Diagnostics.Append(diags...)
137+
}
138+
139+
func (r *cloudProviderGCPResource) Read(ctx context.Context, req resource.ReadRequest, resp *resource.ReadResponse) {
140+
var state cloudProviderGCPResourceModel
141+
142+
diags := req.State.Get(ctx, &state)
143+
resp.Diagnostics.Append(diags...)
144+
if resp.Diagnostics.HasError() {
145+
return
146+
}
147+
148+
cp, err := r.client.GetCloudProviderGCP(ctx, state.ID.ValueString())
149+
if err != nil {
150+
resp.Diagnostics.AddError(
151+
"Error retrieving GCP Cloud Provider",
152+
"Could not find GCP Cloud Provider: "+err.Error(),
153+
)
154+
return
155+
}
156+
157+
state.IssuerUrl = types.StringValue(cp.IssuerUrl)
158+
state.Name = types.StringValue(cp.Name)
159+
state.Team = types.StringValue(cp.Team)
160+
state.ServiceAccountEmail = types.StringValue(cp.ServiceAccountEmail)
161+
state.ProjectNumber = types.Int64Value(cp.ProjectNumber)
162+
state.WorkloadIdentityPoolId = types.StringValue(cp.WorkloadIdentityPoolId)
163+
state.WorkloadIdentityPoolProviderId = types.StringValue(cp.WorkloadIdentityPoolProviderId)
164+
165+
diags = resp.State.Set(ctx, state)
166+
resp.Diagnostics.Append(diags...)
167+
}
168+
169+
func (r *cloudProviderGCPResource) Update(ctx context.Context, req resource.UpdateRequest, resp *resource.UpdateResponse) {
170+
var state, plan cloudProviderGCPResourceModel
171+
172+
diags := req.State.Get(ctx, &state)
173+
resp.Diagnostics.Append(diags...)
174+
if resp.Diagnostics.HasError() {
175+
return
176+
}
177+
diags = req.Plan.Get(ctx, &plan)
178+
resp.Diagnostics.Append(diags...)
179+
if resp.Diagnostics.HasError() {
180+
return
181+
}
182+
183+
cp := tlspc.CloudProviderGCP{
184+
ID: state.ID.ValueString(),
185+
Name: plan.Name.ValueString(),
186+
Team: plan.Team.ValueString(),
187+
ServiceAccountEmail: plan.ServiceAccountEmail.ValueString(),
188+
ProjectNumber: plan.ProjectNumber.ValueInt64(),
189+
WorkloadIdentityPoolId: plan.WorkloadIdentityPoolId.ValueString(),
190+
WorkloadIdentityPoolProviderId: plan.WorkloadIdentityPoolProviderId.ValueString(),
191+
}
192+
193+
updated, err := r.client.UpdateCloudProviderGCP(ctx, cp)
194+
195+
if err != nil {
196+
resp.Diagnostics.AddError(
197+
"Error updating GCP Cloud Provider",
198+
"Could not update GCP Cloud Provider, unexpected error: "+err.Error(),
199+
)
200+
return
201+
}
202+
plan.IssuerUrl = types.StringValue(updated.IssuerUrl)
203+
204+
diags = resp.State.Set(ctx, plan)
205+
resp.Diagnostics.Append(diags...)
206+
}
207+
208+
func (r *cloudProviderGCPResource) Delete(ctx context.Context, req resource.DeleteRequest, resp *resource.DeleteResponse) {
209+
var state cloudProviderGCPResourceModel
210+
211+
diags := req.State.Get(ctx, &state)
212+
resp.Diagnostics.Append(diags...)
213+
if resp.Diagnostics.HasError() {
214+
return
215+
}
216+
217+
err := r.client.DeleteCloudProviderGCP(ctx, state.ID.ValueString())
218+
if err != nil {
219+
resp.Diagnostics.AddError(
220+
"Error updating GCP Cloud Provider",
221+
"Could not updating GCP Cloud Provider: "+err.Error(),
222+
)
223+
return
224+
}
225+
}
226+
227+
func (r *cloudProviderGCPResource) ImportState(ctx context.Context, req resource.ImportStateRequest, resp *resource.ImportStateResponse) {
228+
// Retrieve import ID and save to id attribute
229+
resource.ImportStatePassthroughID(ctx, path.Root("id"), req, resp)
230+
}

internal/provider/provider.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,7 @@ func (p *tlspcProvider) Resources(ctx context.Context) []func() resource.Resourc
8888
NewPluginResource,
8989
NewCertificateTemplateResource,
9090
NewApplicationResource,
91+
NewCloudProviderGCPResource,
9192
}
9293
}
9394

0 commit comments

Comments
 (0)