NET-6663 Modify sidecarproxy controller to skip xGateway resources (#19902)

* NET-6663 Modify sidecarproxy controller to skip xGateway resources

* Check workload metadata after nil-check for workload

* Add test asserting that workloads with meta gateway-kind are ignored

* Use more common pattern for map access to increase readability
This commit is contained in:
Nathan Coleman 2023-12-18 16:54:41 -05:00 committed by GitHub
parent de86ba76ee
commit 010bf533d1
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 39 additions and 0 deletions

View File

@ -122,6 +122,7 @@ func (r *reconciler) Reconcile(ctx context.Context, rt controller.Runtime, req c
rt.Logger.Error("error reading the associated workload", "error", err)
return err
}
if workload == nil {
// If workload has been deleted, then return as ProxyStateTemplate should be cleaned up
// by the garbage collector because of the owner reference.
@ -129,6 +130,12 @@ func (r *reconciler) Reconcile(ctx context.Context, rt controller.Runtime, req c
return nil
}
// If the workload is for a xGateway, then do nothing + let the gatewayproxy controller reconcile it
if gatewayKind, ok := workload.Metadata["gateway-kind"]; ok && gatewayKind != "" {
rt.Logger.Trace("workload is a gateway; skipping reconciliation", "workload", workloadID, "gateway-kind", gatewayKind)
return nil
}
proxyStateTemplate, err := dataFetcher.FetchProxyStateTemplate(ctx, req.ID)
if err != nil {
rt.Logger.Error("error reading proxy state template", "error", err)

View File

@ -454,6 +454,38 @@ func (suite *controllerTestSuite) TestReconcile_NoWorkload() {
})
}
func (suite *controllerTestSuite) TestReconcile_GatewayWorkload() {
suite.runTestCaseWithTenancies(func(tenancy *pbresource.Tenancy) {
// This test ensures that gateway workloads are ignored by the controller.
gatewayWorkload := &pbcatalog.Workload{
Addresses: []*pbcatalog.WorkloadAddress{
{
Host: "10.0.0.1",
},
},
Identity: "mesh-gateway-identity",
Ports: map[string]*pbcatalog.WorkloadPort{
"mesh": {Port: 20000, Protocol: pbcatalog.Protocol_PROTOCOL_MESH},
"tcp": {Port: 8080, Protocol: pbcatalog.Protocol_PROTOCOL_TCP},
},
}
resourcetest.Resource(pbcatalog.WorkloadType, "test-gateway-workload").
WithData(suite.T(), gatewayWorkload).
WithTenancy(tenancy).
WithMeta("gateway-kind", "mesh-gateway").
Write(suite.T(), suite.client.ResourceServiceClient)
err := suite.ctl.Reconcile(context.Background(), suite.runtime, controller.Request{
ID: resourceID(pbmesh.ProxyStateTemplateType, "test-gateway-workload", tenancy),
})
require.NoError(suite.T(), err)
suite.client.RequireResourceNotFound(suite.T(), resourceID(pbmesh.ProxyStateTemplateType, "test-non-mesh-api-workload", tenancy))
})
}
func (suite *controllerTestSuite) TestReconcile_NonMeshWorkload() {
suite.runTestCaseWithTenancies(func(tenancy *pbresource.Tenancy) {
// This test ensures that non-mesh workloads are ignored by the controller.