/
service.go
122 lines (101 loc) · 2.86 KB
/
service.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
package resource
import (
"context"
"fmt"
corev1 "k8s.io/api/core/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/runtime"
"k8s.io/apimachinery/pkg/util/intstr"
coreset "k8s.io/client-go/kubernetes/typed/core/v1"
corelisters "k8s.io/client-go/listers/core/v1"
"github.com/openshift/cluster-image-registry-operator/pkg/defaults"
"github.com/openshift/cluster-image-registry-operator/pkg/resource/strategy"
)
var _ Mutator = &generatorService{}
type generatorService struct {
lister corelisters.ServiceNamespaceLister
client coreset.CoreV1Interface
name string
namespace string
labels map[string]string
port int
secretName string
}
func newGeneratorService(lister corelisters.ServiceNamespaceLister, client coreset.CoreV1Interface) *generatorService {
return &generatorService{
lister: lister,
client: client,
name: defaults.ServiceName,
namespace: defaults.ImageRegistryOperatorNamespace,
labels: defaults.DeploymentLabels,
port: defaults.ContainerPort,
secretName: defaults.ImageRegistryName + "-tls",
}
}
func (gs *generatorService) Type() runtime.Object {
return &corev1.Service{}
}
func (gs *generatorService) GetNamespace() string {
return gs.namespace
}
func (gs *generatorService) GetName() string {
return gs.name
}
func (gs *generatorService) expected() *corev1.Service {
svc := &corev1.Service{
ObjectMeta: metav1.ObjectMeta{
Name: gs.GetName(),
Namespace: gs.GetNamespace(),
Labels: gs.labels,
},
Spec: corev1.ServiceSpec{
Selector: gs.labels,
Ports: []corev1.ServicePort{
{
Name: fmt.Sprintf("%d-tcp", gs.port),
Port: int32(gs.port),
Protocol: "TCP",
TargetPort: intstr.FromInt(gs.port),
},
},
},
}
svc.ObjectMeta.Annotations = map[string]string{
"service.alpha.openshift.io/serving-cert-secret-name": gs.secretName,
}
return svc
}
func (gs *generatorService) Get() (runtime.Object, error) {
return gs.lister.Get(gs.GetName())
}
func (gs *generatorService) Create() (runtime.Object, error) {
svc := &corev1.Service{}
n := gs.expected()
_, err := strategy.Service(svc, n)
if err != nil {
return svc, err
}
return gs.client.Services(gs.GetNamespace()).Create(
context.TODO(), svc, metav1.CreateOptions{},
)
}
func (gs *generatorService) Update(o runtime.Object) (runtime.Object, bool, error) {
svc := o.(*corev1.Service)
n := gs.expected()
updated, err := strategy.Service(svc, n)
if !updated || err != nil {
return o, false, err
}
u, err := gs.client.Services(gs.GetNamespace()).Update(
context.TODO(), svc, metav1.UpdateOptions{},
)
return u, true, err
}
func (gs *generatorService) Delete(opts metav1.DeleteOptions) error {
return gs.client.Services(gs.GetNamespace()).Delete(
context.TODO(), gs.GetName(), opts,
)
}
func (g *generatorService) Owned() bool {
return true
}