Skip to content

Commit 869d162

Browse files
authored
chore: migrate protocol changes and release 3.15.0 (#170)
* chore: migrate protocol changes and release 3.15.0 * fix: lint
1 parent 771f04d commit 869d162

File tree

81 files changed

+2542
-617
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

81 files changed

+2542
-617
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ using Terraform Bytebase Provider to prepare those instances ready for applicati
1515

1616
- [Go](https://golang.org/doc/install) (1.19 or later)
1717
- [Terraform](https://developer.hashicorp.com/terraform/downloads?product_intent=terraform) (1.3.5 or later)
18-
- [Bytebase](https://github.com/bytebase/bytebase) (3.13.0 or later)
18+
- [Bytebase](https://github.com/bytebase/bytebase) (3.15.0 or later)
1919

2020
> If you have problems running `terraform` in MacOS with Apple Silicon, you can following https://stackoverflow.com/questions/66281882/how-can-i-get-terraform-init-to-run-on-my-apple-silicon-macbook-pro-for-the-go and use the `tfenv`.
2121

VERSION

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
3.14.1
1+
3.15.0

api/client.go

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -149,6 +149,34 @@ type Client interface {
149149
// DeleteUser deletes the user.
150150
DeleteUser(ctx context.Context, userName string) error
151151

152+
// ServiceAccount
153+
// ListServiceAccount list all service accounts.
154+
ListServiceAccount(ctx context.Context, parent string, showDeleted bool) ([]*v1pb.ServiceAccount, error)
155+
// CreateServiceAccount creates the service account.
156+
CreateServiceAccount(ctx context.Context, parent, serviceAccountID string, serviceAccount *v1pb.ServiceAccount) (*v1pb.ServiceAccount, error)
157+
// GetServiceAccount gets the service account by name.
158+
GetServiceAccount(ctx context.Context, name string) (*v1pb.ServiceAccount, error)
159+
// UpdateServiceAccount updates the service account.
160+
UpdateServiceAccount(ctx context.Context, patch *v1pb.ServiceAccount, updateMasks []string) (*v1pb.ServiceAccount, error)
161+
// UndeleteServiceAccount undeletes the service account by name.
162+
UndeleteServiceAccount(ctx context.Context, name string) (*v1pb.ServiceAccount, error)
163+
// DeleteServiceAccount deletes the service account.
164+
DeleteServiceAccount(ctx context.Context, name string) error
165+
166+
// WorkloadIdentity
167+
// ListWorkloadIdentity list all workload identities.
168+
ListWorkloadIdentity(ctx context.Context, parent string, showDeleted bool) ([]*v1pb.WorkloadIdentity, error)
169+
// CreateWorkloadIdentity creates the workload identity.
170+
CreateWorkloadIdentity(ctx context.Context, parent, workloadIdentityID string, workloadIdentity *v1pb.WorkloadIdentity) (*v1pb.WorkloadIdentity, error)
171+
// GetWorkloadIdentity gets the workload identity by name.
172+
GetWorkloadIdentity(ctx context.Context, name string) (*v1pb.WorkloadIdentity, error)
173+
// UpdateWorkloadIdentity updates the workload identity.
174+
UpdateWorkloadIdentity(ctx context.Context, patch *v1pb.WorkloadIdentity, updateMasks []string) (*v1pb.WorkloadIdentity, error)
175+
// UndeleteWorkloadIdentity undeletes the workload identity by name.
176+
UndeleteWorkloadIdentity(ctx context.Context, name string) (*v1pb.WorkloadIdentity, error)
177+
// DeleteWorkloadIdentity deletes the workload identity.
178+
DeleteWorkloadIdentity(ctx context.Context, name string) error
179+
152180
// Role
153181
// ListRole will returns all roles.
154182
ListRole(ctx context.Context) (*v1pb.ListRolesResponse, error)

client/client.go

Lines changed: 18 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -22,20 +22,22 @@ type client struct {
2222
client *http.Client
2323

2424
// Connect RPC clients
25-
authClient bytebasev1connect.AuthServiceClient
26-
workspaceClient bytebasev1connect.WorkspaceServiceClient
27-
instanceClient bytebasev1connect.InstanceServiceClient
28-
databaseClient bytebasev1connect.DatabaseServiceClient
29-
databaseCatalogClient bytebasev1connect.DatabaseCatalogServiceClient
30-
databaseGroupClient bytebasev1connect.DatabaseGroupServiceClient
31-
projectClient bytebasev1connect.ProjectServiceClient
32-
userClient bytebasev1connect.UserServiceClient
33-
roleClient bytebasev1connect.RoleServiceClient
34-
groupClient bytebasev1connect.GroupServiceClient
35-
settingClient bytebasev1connect.SettingServiceClient
36-
orgPolicyClient bytebasev1connect.OrgPolicyServiceClient
37-
reviewConfigClient bytebasev1connect.ReviewConfigServiceClient
38-
celClient bytebasev1connect.CelServiceClient
25+
authClient bytebasev1connect.AuthServiceClient
26+
workspaceClient bytebasev1connect.WorkspaceServiceClient
27+
instanceClient bytebasev1connect.InstanceServiceClient
28+
databaseClient bytebasev1connect.DatabaseServiceClient
29+
databaseCatalogClient bytebasev1connect.DatabaseCatalogServiceClient
30+
databaseGroupClient bytebasev1connect.DatabaseGroupServiceClient
31+
projectClient bytebasev1connect.ProjectServiceClient
32+
userClient bytebasev1connect.UserServiceClient
33+
roleClient bytebasev1connect.RoleServiceClient
34+
groupClient bytebasev1connect.GroupServiceClient
35+
settingClient bytebasev1connect.SettingServiceClient
36+
orgPolicyClient bytebasev1connect.OrgPolicyServiceClient
37+
reviewConfigClient bytebasev1connect.ReviewConfigServiceClient
38+
celClient bytebasev1connect.CelServiceClient
39+
serviceAccountClient bytebasev1connect.ServiceAccountServiceClient
40+
workloadIdentityClient bytebasev1connect.WorkloadIdentityServiceClient
3941
}
4042

4143
// NewClient returns the new Bytebase API client.
@@ -86,6 +88,8 @@ func NewClient(url, email, password string) (api.Client, error) {
8688
c.orgPolicyClient = bytebasev1connect.NewOrgPolicyServiceClient(c.client, c.url, interceptors)
8789
c.reviewConfigClient = bytebasev1connect.NewReviewConfigServiceClient(c.client, c.url, interceptors)
8890
c.celClient = bytebasev1connect.NewCelServiceClient(c.client, c.url, interceptors)
91+
c.serviceAccountClient = bytebasev1connect.NewServiceAccountServiceClient(c.client, c.url, interceptors)
92+
c.workloadIdentityClient = bytebasev1connect.NewWorkloadIdentityServiceClient(c.client, c.url, interceptors)
8993

9094
return &c, nil
9195
}

client/service_account.go

Lines changed: 147 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,147 @@
1+
package client
2+
3+
import (
4+
"context"
5+
"errors"
6+
"time"
7+
8+
v1pb "buf.build/gen/go/bytebase/bytebase/protocolbuffers/go/v1"
9+
"connectrpc.com/connect"
10+
"github.com/hashicorp/terraform-plugin-log/tflog"
11+
"google.golang.org/protobuf/types/known/fieldmaskpb"
12+
)
13+
14+
// ListServiceAccount list all service accounts using Connect RPC.
15+
func (c *client) ListServiceAccount(ctx context.Context, parent string, showDeleted bool) ([]*v1pb.ServiceAccount, error) {
16+
if c.serviceAccountClient == nil {
17+
return nil, errors.New("service account service client not initialized")
18+
}
19+
20+
res := []*v1pb.ServiceAccount{}
21+
pageToken := ""
22+
startTime := time.Now()
23+
24+
for {
25+
startTimePerPage := time.Now()
26+
27+
req := connect.NewRequest(&v1pb.ListServiceAccountsRequest{
28+
Parent: parent,
29+
PageSize: 500,
30+
PageToken: pageToken,
31+
ShowDeleted: showDeleted,
32+
})
33+
34+
resp, err := c.serviceAccountClient.ListServiceAccounts(ctx, req)
35+
if err != nil {
36+
return nil, err
37+
}
38+
39+
res = append(res, resp.Msg.ServiceAccounts...)
40+
41+
tflog.Debug(ctx, "[list service account per page]", map[string]interface{}{
42+
"count": len(resp.Msg.ServiceAccounts),
43+
"ms": time.Since(startTimePerPage).Milliseconds(),
44+
})
45+
46+
pageToken = resp.Msg.NextPageToken
47+
if pageToken == "" {
48+
break
49+
}
50+
}
51+
52+
tflog.Debug(ctx, "[list service account]", map[string]interface{}{
53+
"total": len(res),
54+
"ms": time.Since(startTime).Milliseconds(),
55+
})
56+
57+
return res, nil
58+
}
59+
60+
// CreateServiceAccount creates the service account using Connect RPC.
61+
func (c *client) CreateServiceAccount(ctx context.Context, parent, serviceAccountID string, serviceAccount *v1pb.ServiceAccount) (*v1pb.ServiceAccount, error) {
62+
if c.serviceAccountClient == nil {
63+
return nil, errors.New("service account service client not initialized")
64+
}
65+
66+
req := connect.NewRequest(&v1pb.CreateServiceAccountRequest{
67+
Parent: parent,
68+
ServiceAccountId: serviceAccountID,
69+
ServiceAccount: serviceAccount,
70+
})
71+
72+
resp, err := c.serviceAccountClient.CreateServiceAccount(ctx, req)
73+
if err != nil {
74+
return nil, err
75+
}
76+
77+
return resp.Msg, nil
78+
}
79+
80+
// GetServiceAccount gets the service account by name using Connect RPC.
81+
func (c *client) GetServiceAccount(ctx context.Context, name string) (*v1pb.ServiceAccount, error) {
82+
if c.serviceAccountClient == nil {
83+
return nil, errors.New("service account service client not initialized")
84+
}
85+
86+
req := connect.NewRequest(&v1pb.GetServiceAccountRequest{
87+
Name: name,
88+
})
89+
90+
resp, err := c.serviceAccountClient.GetServiceAccount(ctx, req)
91+
if err != nil {
92+
return nil, err
93+
}
94+
95+
return resp.Msg, nil
96+
}
97+
98+
// UpdateServiceAccount updates the service account using Connect RPC.
99+
func (c *client) UpdateServiceAccount(ctx context.Context, patch *v1pb.ServiceAccount, updateMasks []string) (*v1pb.ServiceAccount, error) {
100+
if c.serviceAccountClient == nil {
101+
return nil, errors.New("service account service client not initialized")
102+
}
103+
104+
req := connect.NewRequest(&v1pb.UpdateServiceAccountRequest{
105+
ServiceAccount: patch,
106+
UpdateMask: &fieldmaskpb.FieldMask{Paths: updateMasks},
107+
})
108+
109+
resp, err := c.serviceAccountClient.UpdateServiceAccount(ctx, req)
110+
if err != nil {
111+
return nil, err
112+
}
113+
114+
return resp.Msg, nil
115+
}
116+
117+
// UndeleteServiceAccount undeletes the service account by name using Connect RPC.
118+
func (c *client) UndeleteServiceAccount(ctx context.Context, name string) (*v1pb.ServiceAccount, error) {
119+
if c.serviceAccountClient == nil {
120+
return nil, errors.New("service account service client not initialized")
121+
}
122+
123+
req := connect.NewRequest(&v1pb.UndeleteServiceAccountRequest{
124+
Name: name,
125+
})
126+
127+
resp, err := c.serviceAccountClient.UndeleteServiceAccount(ctx, req)
128+
if err != nil {
129+
return nil, err
130+
}
131+
132+
return resp.Msg, nil
133+
}
134+
135+
// DeleteServiceAccount deletes the service account.
136+
func (c *client) DeleteServiceAccount(ctx context.Context, name string) error {
137+
if c.serviceAccountClient == nil {
138+
return errors.New("service account service client not initialized")
139+
}
140+
141+
req := connect.NewRequest(&v1pb.DeleteServiceAccountRequest{
142+
Name: name,
143+
})
144+
145+
_, err := c.serviceAccountClient.DeleteServiceAccount(ctx, req)
146+
return err
147+
}

client/workload_identity.go

Lines changed: 147 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,147 @@
1+
package client
2+
3+
import (
4+
"context"
5+
"errors"
6+
"time"
7+
8+
v1pb "buf.build/gen/go/bytebase/bytebase/protocolbuffers/go/v1"
9+
"connectrpc.com/connect"
10+
"github.com/hashicorp/terraform-plugin-log/tflog"
11+
"google.golang.org/protobuf/types/known/fieldmaskpb"
12+
)
13+
14+
// ListWorkloadIdentity list all workload identities using Connect RPC.
15+
func (c *client) ListWorkloadIdentity(ctx context.Context, parent string, showDeleted bool) ([]*v1pb.WorkloadIdentity, error) {
16+
if c.workloadIdentityClient == nil {
17+
return nil, errors.New("workload identity service client not initialized")
18+
}
19+
20+
res := []*v1pb.WorkloadIdentity{}
21+
pageToken := ""
22+
startTime := time.Now()
23+
24+
for {
25+
startTimePerPage := time.Now()
26+
27+
req := connect.NewRequest(&v1pb.ListWorkloadIdentitiesRequest{
28+
Parent: parent,
29+
PageSize: 500,
30+
PageToken: pageToken,
31+
ShowDeleted: showDeleted,
32+
})
33+
34+
resp, err := c.workloadIdentityClient.ListWorkloadIdentities(ctx, req)
35+
if err != nil {
36+
return nil, err
37+
}
38+
39+
res = append(res, resp.Msg.WorkloadIdentities...)
40+
41+
tflog.Debug(ctx, "[list workload identity per page]", map[string]interface{}{
42+
"count": len(resp.Msg.WorkloadIdentities),
43+
"ms": time.Since(startTimePerPage).Milliseconds(),
44+
})
45+
46+
pageToken = resp.Msg.NextPageToken
47+
if pageToken == "" {
48+
break
49+
}
50+
}
51+
52+
tflog.Debug(ctx, "[list workload identity]", map[string]interface{}{
53+
"total": len(res),
54+
"ms": time.Since(startTime).Milliseconds(),
55+
})
56+
57+
return res, nil
58+
}
59+
60+
// CreateWorkloadIdentity creates the workload identity using Connect RPC.
61+
func (c *client) CreateWorkloadIdentity(ctx context.Context, parent, workloadIdentityID string, workloadIdentity *v1pb.WorkloadIdentity) (*v1pb.WorkloadIdentity, error) {
62+
if c.workloadIdentityClient == nil {
63+
return nil, errors.New("workload identity service client not initialized")
64+
}
65+
66+
req := connect.NewRequest(&v1pb.CreateWorkloadIdentityRequest{
67+
Parent: parent,
68+
WorkloadIdentityId: workloadIdentityID,
69+
WorkloadIdentity: workloadIdentity,
70+
})
71+
72+
resp, err := c.workloadIdentityClient.CreateWorkloadIdentity(ctx, req)
73+
if err != nil {
74+
return nil, err
75+
}
76+
77+
return resp.Msg, nil
78+
}
79+
80+
// GetWorkloadIdentity gets the workload identity by name using Connect RPC.
81+
func (c *client) GetWorkloadIdentity(ctx context.Context, name string) (*v1pb.WorkloadIdentity, error) {
82+
if c.workloadIdentityClient == nil {
83+
return nil, errors.New("workload identity service client not initialized")
84+
}
85+
86+
req := connect.NewRequest(&v1pb.GetWorkloadIdentityRequest{
87+
Name: name,
88+
})
89+
90+
resp, err := c.workloadIdentityClient.GetWorkloadIdentity(ctx, req)
91+
if err != nil {
92+
return nil, err
93+
}
94+
95+
return resp.Msg, nil
96+
}
97+
98+
// UpdateWorkloadIdentity updates the workload identity using Connect RPC.
99+
func (c *client) UpdateWorkloadIdentity(ctx context.Context, patch *v1pb.WorkloadIdentity, updateMasks []string) (*v1pb.WorkloadIdentity, error) {
100+
if c.workloadIdentityClient == nil {
101+
return nil, errors.New("workload identity service client not initialized")
102+
}
103+
104+
req := connect.NewRequest(&v1pb.UpdateWorkloadIdentityRequest{
105+
WorkloadIdentity: patch,
106+
UpdateMask: &fieldmaskpb.FieldMask{Paths: updateMasks},
107+
})
108+
109+
resp, err := c.workloadIdentityClient.UpdateWorkloadIdentity(ctx, req)
110+
if err != nil {
111+
return nil, err
112+
}
113+
114+
return resp.Msg, nil
115+
}
116+
117+
// UndeleteWorkloadIdentity undeletes the workload identity by name using Connect RPC.
118+
func (c *client) UndeleteWorkloadIdentity(ctx context.Context, name string) (*v1pb.WorkloadIdentity, error) {
119+
if c.workloadIdentityClient == nil {
120+
return nil, errors.New("workload identity service client not initialized")
121+
}
122+
123+
req := connect.NewRequest(&v1pb.UndeleteWorkloadIdentityRequest{
124+
Name: name,
125+
})
126+
127+
resp, err := c.workloadIdentityClient.UndeleteWorkloadIdentity(ctx, req)
128+
if err != nil {
129+
return nil, err
130+
}
131+
132+
return resp.Msg, nil
133+
}
134+
135+
// DeleteWorkloadIdentity deletes the workload identity.
136+
func (c *client) DeleteWorkloadIdentity(ctx context.Context, name string) error {
137+
if c.workloadIdentityClient == nil {
138+
return errors.New("workload identity service client not initialized")
139+
}
140+
141+
req := connect.NewRequest(&v1pb.DeleteWorkloadIdentityRequest{
142+
Name: name,
143+
})
144+
145+
_, err := c.workloadIdentityClient.DeleteWorkloadIdentity(ctx, req)
146+
return err
147+
}

docs/data-sources/database.md

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,6 @@ The database data source.
2626
- `id` (String) The ID of this resource.
2727
- `labels` (Map of String) The deployment and policy control labels.
2828
- `project` (String) The project full name for the database in projects/{project} format.
29-
- `schema_version` (String) The version of database schema.
3029
- `state` (String) The existence of a database.
3130
- `successful_sync_time` (String) The latest synchronization time.
3231

0 commit comments

Comments
 (0)