Skip to content
This repository has been archived by the owner on Mar 19, 2024. It is now read-only.

Commit

Permalink
added logic to check to see if the replicas has been modified before …
Browse files Browse the repository at this point in the history
…overriding
  • Loading branch information
sarahalsmiller committed May 18, 2022
1 parent acb8458 commit d99967c
Show file tree
Hide file tree
Showing 4 changed files with 40 additions and 3 deletions.
12 changes: 12 additions & 0 deletions internal/k8s/gatewayclient/gatewayclient.go
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ type Client interface {
GetTCPRoutesInNamespace(ctx context.Context, ns string) ([]gateway.TCPRoute, error)
GetMeshService(ctx context.Context, key types.NamespacedName) (*apigwv1alpha1.MeshService, error)
GetNamespace(ctx context.Context, key types.NamespacedName) (*core.Namespace, error)
GetDeployment(ctx context.Context, key types.NamespacedName) (*apps.Deployment, error)

// finalizer helpers

Expand Down Expand Up @@ -230,6 +231,17 @@ func (g *gatewayClient) GetService(ctx context.Context, key types.NamespacedName
return svc, nil
}

func (g *gatewayClient) GetDeployment(ctx context.Context, key types.NamespacedName) (*apps.Deployment, error) {
depl := &apps.Deployment{}
if err := g.Client.Get(ctx, key, depl); err != nil {
if k8serrors.IsNotFound(err) {
return nil, nil
}
return nil, NewK8sError(err)
}
return depl, nil
}

func (g *gatewayClient) GetSecret(ctx context.Context, key types.NamespacedName) (*core.Secret, error) {
secret := &core.Secret{}
if err := g.Client.Get(ctx, key, secret); err != nil {
Expand Down
15 changes: 15 additions & 0 deletions internal/k8s/gatewayclient/mocks/gatewayclient.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

7 changes: 6 additions & 1 deletion internal/k8s/reconciler/gateway.go
Original file line number Diff line number Diff line change
Expand Up @@ -464,7 +464,12 @@ func (g *K8sGateway) ensureDeploymentExists(ctx context.Context) error {

deployment := g.deploymentBuilder.Build()
mutated := deployment.DeepCopy()
mutated = apigwv1alpha1.MergeDeployment(deployment, mutated)

currentDeployment, err := g.client.GetDeployment(ctx, types.NamespacedName{Namespace: deployment.Namespace, Name: deployment.Name})
if err != nil {
return err
}
mutated = apigwv1alpha1.MergeDeployment(deployment, mutated, currentDeployment.Spec.Replicas)

if updated, err := g.client.CreateOrUpdateDeployment(ctx, mutated, func() error {
return g.client.SetControllerOwnership(g.gateway, mutated)
Expand Down
9 changes: 7 additions & 2 deletions pkg/apis/v1alpha1/types.go
Original file line number Diff line number Diff line change
Expand Up @@ -205,10 +205,15 @@ func compareServices(a, b *corev1.Service) bool {
// MergeDeploymentmerges a gateway deployment a onto b and returns b, overriding all of
// the fields that we'd normally set for a service deployment. It does not attempt
// to change the service type
func MergeDeployment(a, b *appsv1.Deployment) *appsv1.Deployment {
func MergeDeployment(a, b *appsv1.Deployment, currentReplicas *int32) *appsv1.Deployment {
if !compareDeployments(a, b) {
b.Spec.Template = a.Spec.Template
b.Spec.Replicas = a.Spec.Replicas

//Dont override if replicas have already been set on deployment
//TODO this logic will likely need to be updated as part of CAPIGW-137
if currentReplicas == nil {
b.Spec.Replicas = a.Spec.Replicas
}
}

return b
Expand Down

0 comments on commit d99967c

Please sign in to comment.