Skip to content

Commit 3d846b9

Browse files
committed
feat: Add GetDeploymentAssignment RPC and related functionality
- Introduced DeploymentAssignmentSearch message in storage.proto to facilitate searching for deployment assignments by deployment target ID and GitOps commit ID. - Implemented GetDeploymentAssignment method in StorageApi service, including client and server-side handling in storage_grpc.pb.go and server.go respectively. - Added custom query function GetByDeploymentTargetAndCommit in the PostgreSQL storage layer to retrieve deployment assignments based on deployment target ID and GitOps commit ID.
1 parent 96023db commit 3d846b9

File tree

7 files changed

+544
-339
lines changed

7 files changed

+544
-339
lines changed

controllers/azureresourcegraph_controller.go

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -136,7 +136,7 @@ func (r *AzureResourceGraphReconciler) Reconcile(ctx context.Context, req ctrl.R
136136
return r.manageFailure(ctx, reqLogger, arg, err, "Failed to create or update Reconciler")
137137
}
138138
// log the created or updated reconciler
139-
reqLogger.Info(fmt.Sprintf("Created or Updated Reconciler: " + fmt.Sprint(reconciler) + "\n"))
139+
reqLogger.Info("Created or Updated Reconciler", "reconciler", reconciler)
140140
}
141141

142142
condition := metav1.Condition{
@@ -173,7 +173,7 @@ func (r *AzureResourceGraphReconciler) garbageCollectReconcilers(ctx context.Con
173173
return err
174174
}
175175
// log the deleted reconciler
176-
logger.Info(fmt.Sprintf("Deleted Reconciler: " + fmt.Sprint(reconciler) + "\n"))
176+
logger.Info("Deleted Reconciler", "reconciler", reconciler)
177177
}
178178

179179
}
@@ -398,6 +398,16 @@ func (r *AzureResourceGraphReconciler) getReconcilersDataFromChildKalypsoObjects
398398

399399
}
400400

401+
// Try to get deployment assignment with the deployment target ID and commit ID
402+
_, err = storageClient.GetDeploymentAssignment(ctx, &pb.DeploymentAssignmentSearch{
403+
DeploymentTargetId: dt.Id,
404+
GitopsCommitId: gitOpsCommitId,
405+
})
406+
if err != nil {
407+
logger.Info("Could not find deployment assignment", "workspace", workspace, "application", application, "workloadName", workloadName, "deploymentTargetName", deploymentTargetName)
408+
continue
409+
}
410+
401411
reconciler := r.createReconciler(string(*status.ComplianceState), statusMessage, gitOpsCommitId,
402412
resourceGroup, clusterName, *status.Name, manifestsEndpoint, hubv1alpha1.ReconcilerTypeFlux)
403413
reconcilerData = append(reconcilerData, reconciler)

storage/api/grpc/client/client.go

Lines changed: 39 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package client
33
import (
44
context "context"
55
"errors"
6+
"fmt"
67
"log"
78
"os"
89

@@ -23,6 +24,7 @@ type ObservabilityStorageGrpcClient interface {
2324
UpdateReconciler(ctx context.Context, in *pb.Reconciler) (*pb.Reconciler, error)
2425
UpdateDeployment(ctx context.Context, in *pb.Deployment) (*pb.Deployment, error)
2526
GetDeploymentTarget(ctx context.Context, in *pb.DeploymentTargetSearch) (*pb.DeploymentTarget, error)
27+
GetDeploymentAssignment(ctx context.Context, in *pb.DeploymentAssignmentSearch) (*pb.DeploymentAssignment, error)
2628
GetDeploymentState(ctx context.Context, in *pb.DeploymentStateRequest) (*pb.DeploymentState, error)
2729
}
2830

@@ -57,12 +59,19 @@ func (c *observabilityStorageGrpcClient) getConnection() (*grpc.ClientConn, erro
5759
return conn, nil
5860
}
5961

62+
// closeConnection safely closes a gRPC connection and logs any errors
63+
func (c *observabilityStorageGrpcClient) closeConnection(conn *grpc.ClientConn) {
64+
if err := conn.Close(); err != nil {
65+
log.Printf("failed to close gRPC connection: %v", err)
66+
}
67+
}
68+
6069
func (c *observabilityStorageGrpcClient) UpdateWorkspace(ctx context.Context, in *pb.Workspace) (*pb.Workspace, error) {
6170
conn, err := c.getConnection()
6271
if err != nil {
6372
return nil, err
6473
}
65-
defer conn.Close()
74+
defer c.closeConnection(conn)
6675
client := pb.NewStorageApiClient(conn)
6776
ws, err := client.UpdateWorkspace(ctx, in)
6877
if err != nil {
@@ -76,7 +85,7 @@ func (c *observabilityStorageGrpcClient) UpdateApplication(ctx context.Context,
7685
if err != nil {
7786
return nil, err
7887
}
79-
defer conn.Close()
88+
defer c.closeConnection(conn)
8089
client := pb.NewStorageApiClient(conn)
8190
app, err := client.UpdateApplication(ctx, in)
8291
if err != nil {
@@ -90,7 +99,7 @@ func (c *observabilityStorageGrpcClient) UpdateWorkload(ctx context.Context, in
9099
if err != nil {
91100
return nil, err
92101
}
93-
defer conn.Close()
102+
defer c.closeConnection(conn)
94103
client := pb.NewStorageApiClient(conn)
95104
wl, err := client.UpdateWorkload(ctx, in)
96105
if err != nil {
@@ -104,7 +113,7 @@ func (c *observabilityStorageGrpcClient) UpdateEnvironment(ctx context.Context,
104113
if err != nil {
105114
return nil, err
106115
}
107-
defer conn.Close()
116+
defer c.closeConnection(conn)
108117
client := pb.NewStorageApiClient(conn)
109118
env, err := client.UpdateEnvironment(ctx, in)
110119
if err != nil {
@@ -118,7 +127,7 @@ func (c *observabilityStorageGrpcClient) UpdateDeploymentTarget(ctx context.Cont
118127
if err != nil {
119128
return nil, err
120129
}
121-
defer conn.Close()
130+
defer c.closeConnection(conn)
122131
client := pb.NewStorageApiClient(conn)
123132
dt, err := client.UpdateDeploymentTarget(ctx, in)
124133
if err != nil {
@@ -132,7 +141,7 @@ func (c *observabilityStorageGrpcClient) UpdateWorkloadVersion(ctx context.Conte
132141
if err != nil {
133142
return nil, err
134143
}
135-
defer conn.Close()
144+
defer c.closeConnection(conn)
136145
client := pb.NewStorageApiClient(conn)
137146
wlv, err := client.UpdateWorkloadVersion(ctx, in)
138147
if err != nil {
@@ -146,7 +155,7 @@ func (c *observabilityStorageGrpcClient) UpdateDeploymentAssignment(ctx context.
146155
if err != nil {
147156
return nil, err
148157
}
149-
defer conn.Close()
158+
defer c.closeConnection(conn)
150159
client := pb.NewStorageApiClient(conn)
151160
da, err := client.UpdateDeploymentAssignment(ctx, in)
152161
if err != nil {
@@ -160,7 +169,7 @@ func (c *observabilityStorageGrpcClient) UpdateHost(ctx context.Context, in *pb.
160169
if err != nil {
161170
return nil, err
162171
}
163-
defer conn.Close()
172+
defer c.closeConnection(conn)
164173
client := pb.NewStorageApiClient(conn)
165174
host, err := client.UpdateHost(ctx, in)
166175
if err != nil {
@@ -174,7 +183,7 @@ func (c *observabilityStorageGrpcClient) UpdateReconciler(ctx context.Context, i
174183
if err != nil {
175184
return nil, err
176185
}
177-
defer conn.Close()
186+
defer c.closeConnection(conn)
178187
client := pb.NewStorageApiClient(conn)
179188
rec, err := client.UpdateReconciler(ctx, in)
180189
if err != nil {
@@ -188,7 +197,7 @@ func (c *observabilityStorageGrpcClient) UpdateDeployment(ctx context.Context, i
188197
if err != nil {
189198
return nil, err
190199
}
191-
defer conn.Close()
200+
defer c.closeConnection(conn)
192201
client := pb.NewStorageApiClient(conn)
193202
dep, err := client.UpdateDeployment(ctx, in)
194203
if err != nil {
@@ -202,7 +211,7 @@ func (c *observabilityStorageGrpcClient) GetDeploymentTarget(ctx context.Context
202211
if err != nil {
203212
return nil, err
204213
}
205-
defer conn.Close()
214+
defer c.closeConnection(conn)
206215
client := pb.NewStorageApiClient(conn)
207216

208217
dt, err := client.GetDeploymentTarget(ctx, in)
@@ -212,13 +221,31 @@ func (c *observabilityStorageGrpcClient) GetDeploymentTarget(ctx context.Context
212221
return dt, nil
213222
}
214223

224+
// GetDeploymentAssignment retrieves a deployment assignment using the proper protobuf structure
225+
func (c *observabilityStorageGrpcClient) GetDeploymentAssignment(ctx context.Context, in *pb.DeploymentAssignmentSearch) (*pb.DeploymentAssignment, error) {
226+
conn, err := c.getConnection()
227+
if err != nil {
228+
return nil, err
229+
}
230+
defer c.closeConnection(conn)
231+
client := pb.NewStorageApiClient(conn)
232+
233+
// Use the proper gRPC call with the DeploymentAssignmentSearch struct
234+
assignment, err := client.GetDeploymentAssignment(ctx, in)
235+
if err != nil {
236+
return nil, fmt.Errorf("failed to get deployment assignment: %w", err)
237+
}
238+
239+
return assignment, nil
240+
}
241+
215242
// GetDeploymentState
216243
func (c *observabilityStorageGrpcClient) GetDeploymentState(ctx context.Context, in *pb.DeploymentStateRequest) (*pb.DeploymentState, error) {
217244
conn, err := c.getConnection()
218245
if err != nil {
219246
return nil, err
220247
}
221-
defer conn.Close()
248+
defer c.closeConnection(conn)
222249
client := pb.NewStorageApiClient(conn)
223250

224251
ds, err := client.GetDeploymentState(ctx, in)

0 commit comments

Comments
 (0)