Skip to content

Commit

Permalink
Apply changes to service resource
Browse files Browse the repository at this point in the history
Add support for applying changes to the service resource. Add specific
diff support for the topologyKeys field, introduced in 8ae4b02.
  • Loading branch information
ironcladlou committed Mar 19, 2020
1 parent e0d2fba commit 3d896e3
Showing 1 changed file with 41 additions and 8 deletions.
49 changes: 41 additions & 8 deletions pkg/operator/controller/controller_dns_service.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@ import (
"context"
"fmt"

"github.com/google/go-cmp/cmp"
"github.com/google/go-cmp/cmp/cmpopts"
operatorv1 "github.com/openshift/api/operator/v1"
"github.com/openshift/cluster-dns-operator/pkg/manifests"

Expand All @@ -21,16 +23,21 @@ func (r *reconciler) ensureDNSService(dns *operatorv1.DNS, clusterIP string, dae
if err != nil {
return nil, err
}
if current != nil {
return current, nil
}

desired := desiredDNSService(dns, clusterIP, daemonsetRef)
if err := r.client.Create(context.TODO(), desired); err != nil {
return nil, fmt.Errorf("failed to create dns service: %v", err)

switch {
case desired != nil && current == nil:
if err := r.client.Create(context.TODO(), desired); err != nil {
return nil, fmt.Errorf("failed to create dns service: %v", err)
}
logrus.Infof("created dns service: %s/%s", desired.Namespace, desired.Name)
return desired, nil
case desired != nil && current != nil:
if err := r.updateDNSService(current, desired); err != nil {
return nil, err
}
}
logrus.Infof("created dns service: %s/%s", desired.Namespace, desired.Name)
return desired, nil
return r.currentDNSService(dns)
}

func (r *reconciler) currentDNSService(dns *operatorv1.DNS) (*corev1.Service, error) {
Expand Down Expand Up @@ -64,3 +71,29 @@ func desiredDNSService(dns *operatorv1.DNS, clusterIP string, daemonsetRef metav
}
return s
}

func (r *reconciler) updateDNSService(current, desired *corev1.Service) error {
changed, updated := serviceChanged(current, desired)
if !changed {
return nil
}

if err := r.client.Update(context.TODO(), updated); err != nil {
return fmt.Errorf("failed to update dns service %s/%s: %v", updated.Namespace, updated.Name, err)
}
logrus.Infof("updated dns service: %s/%s", updated.Namespace, updated.Name)
return nil
}

func serviceChanged(current, expected *corev1.Service) (bool, *corev1.Service) {
changed := false
updated := current.DeepCopy()
if !cmp.Equal(current.Spec.TopologyKeys, expected.Spec.TopologyKeys, cmpopts.EquateEmpty()) {
updated.Spec.TopologyKeys = expected.Spec.TopologyKeys
changed = true
}
if !changed {
return false, nil
}
return true, updated
}

0 comments on commit 3d896e3

Please sign in to comment.