|
1 | 1 | package service |
2 | 2 |
|
3 | 3 | import ( |
4 | | - "fmt" |
5 | | - |
6 | 4 | corev1 "k8s.io/api/core/v1" |
7 | | - apiErrors "k8s.io/apimachinery/pkg/api/errors" |
8 | | - "k8s.io/apimachinery/pkg/types" |
9 | 5 | "sigs.k8s.io/controller-runtime/pkg/client" |
10 | 6 | ) |
11 | 7 |
|
@@ -47,80 +43,3 @@ type GetUpdateCreateDeleter interface { |
47 | 43 | Creator |
48 | 44 | Deleter |
49 | 45 | } |
50 | | - |
51 | | -func DeleteServiceIfItExists(getterDeleter GetDeleter, serviceName types.NamespacedName) error { |
52 | | - _, err := getterDeleter.GetService(serviceName) |
53 | | - if err != nil { |
54 | | - // If it is not found return |
55 | | - if apiErrors.IsNotFound(err) { |
56 | | - return nil |
57 | | - } |
58 | | - // Otherwise we got an error when trying to get it |
59 | | - return fmt.Errorf("can't get service %s: %s", serviceName, err) |
60 | | - } |
61 | | - return getterDeleter.DeleteService(serviceName) |
62 | | -} |
63 | | - |
64 | | -// Merge merges `source` into `dest`. Both arguments will remain unchanged |
65 | | -// a new service will be created and returned. |
66 | | -// The "merging" process is arbitrary and it only handle specific attributes |
67 | | -func Merge(dest corev1.Service, source corev1.Service) corev1.Service { |
68 | | - for k, v := range source.ObjectMeta.Annotations { |
69 | | - dest.ObjectMeta.Annotations[k] = v |
70 | | - } |
71 | | - |
72 | | - for k, v := range source.ObjectMeta.Labels { |
73 | | - dest.ObjectMeta.Labels[k] = v |
74 | | - } |
75 | | - |
76 | | - for k, v := range source.Spec.Selector { |
77 | | - dest.Spec.Selector[k] = v |
78 | | - } |
79 | | - |
80 | | - cachedNodePorts := map[int32]int32{} |
81 | | - for _, port := range dest.Spec.Ports { |
82 | | - cachedNodePorts[port.Port] = port.NodePort |
83 | | - } |
84 | | - |
85 | | - if len(source.Spec.Ports) > 0 { |
86 | | - portCopy := make([]corev1.ServicePort, len(source.Spec.Ports)) |
87 | | - copy(portCopy, source.Spec.Ports) |
88 | | - dest.Spec.Ports = portCopy |
89 | | - |
90 | | - for i := range dest.Spec.Ports { |
91 | | - // Source might not specify NodePort and we shouldn't override existing NodePort value |
92 | | - if dest.Spec.Ports[i].NodePort == 0 { |
93 | | - dest.Spec.Ports[i].NodePort = cachedNodePorts[dest.Spec.Ports[i].Port] |
94 | | - } |
95 | | - } |
96 | | - } |
97 | | - |
98 | | - dest.Spec.Type = source.Spec.Type |
99 | | - dest.Spec.LoadBalancerIP = source.Spec.LoadBalancerIP |
100 | | - dest.Spec.ExternalTrafficPolicy = source.Spec.ExternalTrafficPolicy |
101 | | - return dest |
102 | | -} |
103 | | - |
104 | | -// CreateOrUpdateService will create or update a service in Kubernetes. |
105 | | -func CreateOrUpdateService(getUpdateCreator GetUpdateCreator, desiredService corev1.Service) error { |
106 | | - namespacedName := types.NamespacedName{Namespace: desiredService.ObjectMeta.Namespace, Name: desiredService.ObjectMeta.Name} |
107 | | - existingService, err := getUpdateCreator.GetService(namespacedName) |
108 | | - |
109 | | - if err != nil { |
110 | | - if apiErrors.IsNotFound(err) { |
111 | | - err = getUpdateCreator.CreateService(desiredService) |
112 | | - if err != nil { |
113 | | - return err |
114 | | - } |
115 | | - } else { |
116 | | - return err |
117 | | - } |
118 | | - } else { |
119 | | - mergedService := Merge(existingService, desiredService) |
120 | | - err = getUpdateCreator.UpdateService(mergedService) |
121 | | - if err != nil { |
122 | | - return err |
123 | | - } |
124 | | - } |
125 | | - return nil |
126 | | -} |
0 commit comments