1
- package controller
1
+ package certificate
2
2
3
3
import (
4
4
"context"
5
5
"fmt"
6
6
7
7
ingressv1alpha1 "github.com/openshift/cluster-ingress-operator/pkg/apis/ingress/v1alpha1"
8
+ "github.com/openshift/cluster-ingress-operator/pkg/operator/controller"
8
9
9
10
corev1 "k8s.io/api/core/v1"
10
11
"k8s.io/apimachinery/pkg/api/errors"
11
12
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
12
- "k8s.io/apimachinery/pkg/types"
13
13
)
14
14
15
- const (
16
- // GlobalMachineSpecifiedConfigNamespace is the location for global
17
- // config. In particular, the operator will put the configmap with the
18
- // CA certificate in this namespace.
19
- GlobalMachineSpecifiedConfigNamespace = "openshift-config-managed"
20
-
21
- // caCertConfigMapName is the name of the config map with the public key
22
- // for the CA certificate, which the operator publishes for other
23
- // operators to use.
24
- caCertConfigMapName = "router-ca"
25
- )
26
-
27
- // routerCAConfigMapName returns the namespaced name for the router CA
28
- // configmap.
29
- func routerCAConfigMapName () types.NamespacedName {
30
- return types.NamespacedName {
31
- Namespace : GlobalMachineSpecifiedConfigNamespace ,
32
- Name : caCertConfigMapName ,
33
- }
34
- }
35
-
36
15
// ensureRouterCAConfigMap will create, update, or delete the configmap for the
37
16
// router CA as appropriate.
38
17
func (r * reconciler ) ensureRouterCAConfigMap (secret * corev1.Secret , ingresses []ingressv1alpha1.ClusterIngress ) error {
@@ -48,16 +27,22 @@ func (r *reconciler) ensureRouterCAConfigMap(secret *corev1.Secret, ingresses []
48
27
case desired == nil && current == nil :
49
28
// Nothing to do.
50
29
case desired == nil && current != nil :
51
- if err := r .deleteRouterCAConfigMap (current ); err != nil {
30
+ if deleted , err := r .deleteRouterCAConfigMap (current ); err != nil {
52
31
return fmt .Errorf ("failed to ensure router CA was unpublished: %v" , err )
32
+ } else if deleted {
33
+ r .recorder .Eventf (current , "Normal" , "UnpublishedDefaultRouterCA" , "Unpublished default router CA" )
53
34
}
54
35
case desired != nil && current == nil :
55
- if err := r .createRouterCAConfigMap (desired ); err != nil {
36
+ if created , err := r .createRouterCAConfigMap (desired ); err != nil {
56
37
return fmt .Errorf ("failed to ensure router CA was published: %v" , err )
38
+ } else if created {
39
+ r .recorder .Eventf (desired , "Normal" , "PublishedDefaultRouterCA" , "Published default router CA" )
57
40
}
58
41
case desired != nil && current != nil :
59
- if err := r .updateRouterCAConfigMap (current , desired ); err != nil {
42
+ if updated , err := r .updateRouterCAConfigMap (current , desired ); err != nil {
60
43
return fmt .Errorf ("failed to update published router CA: %v" , err )
44
+ } else if updated {
45
+ r .recorder .Eventf (desired , "Normal" , "UpdatedPublishedDefaultRouterCA" , "Updated the published default router CA" )
61
46
}
62
47
}
63
48
return nil
@@ -69,7 +54,7 @@ func desiredRouterCAConfigMap(secret *corev1.Secret, ingresses []ingressv1alpha1
69
54
return nil , nil
70
55
}
71
56
72
- name := routerCAConfigMapName ()
57
+ name := controller . RouterCAConfigMapName ()
73
58
cm := & corev1.ConfigMap {
74
59
ObjectMeta : metav1.ObjectMeta {
75
60
Name : name .Name ,
@@ -95,9 +80,9 @@ func shouldPublishRouterCA(ingresses []ingressv1alpha1.ClusterIngress) bool {
95
80
96
81
// currentRouterCAConfigMap returns the current router CA configmap.
97
82
func (r * reconciler ) currentRouterCAConfigMap () (* corev1.ConfigMap , error ) {
98
- name := routerCAConfigMapName ()
83
+ name := controller . RouterCAConfigMapName ()
99
84
cm := & corev1.ConfigMap {}
100
- if err := r .Client .Get (context .TODO (), name , cm ); err != nil {
85
+ if err := r .client .Get (context .TODO (), name , cm ); err != nil {
101
86
if errors .IsNotFound (err ) {
102
87
return nil , nil
103
88
}
@@ -106,45 +91,45 @@ func (r *reconciler) currentRouterCAConfigMap() (*corev1.ConfigMap, error) {
106
91
return cm , nil
107
92
}
108
93
109
- // createRouterCAConfigMap creates a router CA configmap.
110
- func (r * reconciler ) createRouterCAConfigMap (cm * corev1.ConfigMap ) error {
111
- if err := r .Client .Create (context .TODO (), cm ); err != nil {
94
+ // createRouterCAConfigMap creates a router CA configmap. Returns true if the
95
+ // configmap was created, false otherwise.
96
+ func (r * reconciler ) createRouterCAConfigMap (cm * corev1.ConfigMap ) (bool , error ) {
97
+ if err := r .client .Create (context .TODO (), cm ); err != nil {
112
98
if errors .IsAlreadyExists (err ) {
113
- return nil
99
+ return false , nil
114
100
}
115
- return err
101
+ return false , err
116
102
}
117
- log .Info ("created configmap" , "namespace" , cm .Namespace , "name" , cm .Name )
118
- return nil
103
+ return true , nil
119
104
}
120
105
121
- // updateRouterCAConfigMaps updates the router CA configmap.
122
- func (r * reconciler ) updateRouterCAConfigMap (current , desired * corev1.ConfigMap ) error {
106
+ // updateRouterCAConfigMaps updates the router CA configmap. Returns true if the
107
+ // configmap was updated, false otherwise.
108
+ func (r * reconciler ) updateRouterCAConfigMap (current , desired * corev1.ConfigMap ) (bool , error ) {
123
109
if routerCAConfigMapsEqual (current , desired ) {
124
- return nil
110
+ return false , nil
125
111
}
126
112
updated := current .DeepCopy ()
127
113
updated .Data = desired .Data
128
- if err := r .Client .Update (context .TODO (), updated ); err != nil {
114
+ if err := r .client .Update (context .TODO (), updated ); err != nil {
129
115
if errors .IsAlreadyExists (err ) {
130
- return nil
116
+ return false , nil
131
117
}
132
- return err
118
+ return false , err
133
119
}
134
- log .Info ("updated configmap" , "namespace" , updated .Namespace , "name" , updated .Name )
135
- return nil
120
+ return true , nil
136
121
}
137
122
138
- // deleteRouterCAConfigMap deletes the router CA configmap.
139
- func (r * reconciler ) deleteRouterCAConfigMap (cm * corev1.ConfigMap ) error {
140
- if err := r .Client .Delete (context .TODO (), cm ); err != nil {
123
+ // deleteRouterCAConfigMap deletes the router CA configmap. Returns true if the
124
+ // configmap was deleted, false otherwise.
125
+ func (r * reconciler ) deleteRouterCAConfigMap (cm * corev1.ConfigMap ) (bool , error ) {
126
+ if err := r .client .Delete (context .TODO (), cm ); err != nil {
141
127
if errors .IsNotFound (err ) {
142
- return nil
128
+ return false , nil
143
129
}
144
- return err
130
+ return false , err
145
131
}
146
- log .Info ("deleted configmap" , "namespace" , cm .Namespace , "name" , cm .Name )
147
- return nil
132
+ return true , nil
148
133
}
149
134
150
135
// routerCAConfigMapsEqual compares two router CA configmaps.
0 commit comments