Skip to content

Commit 1b2213d

Browse files
committed
do not setup ownerrefs for clusterscoped/cross-namespace objects
1 parent 0780074 commit 1b2213d

File tree

12 files changed

+131
-122
lines changed

12 files changed

+131
-122
lines changed

pkg/resource/caconfig.go

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@ import (
1111
configlisters "github.com/openshift/client-go/config/listers/config/v1"
1212
imageregistryv1 "github.com/openshift/cluster-image-registry-operator/pkg/apis/imageregistry/v1"
1313
"github.com/openshift/cluster-image-registry-operator/pkg/parameters"
14-
"github.com/openshift/cluster-image-registry-operator/pkg/util"
1514
)
1615

1716
var _ Mutator = &generatorCAConfig{}
@@ -24,7 +23,6 @@ type generatorCAConfig struct {
2423
imageConfigName string
2524
name string
2625
namespace string
27-
owner metav1.OwnerReference
2826
}
2927

3028
func newGeneratorCAConfig(lister corelisters.ConfigMapNamespaceLister, imageConfigLister configlisters.ImageLister, openshiftConfigLister corelisters.ConfigMapNamespaceLister, client coreset.CoreV1Interface, params *parameters.Globals, cr *imageregistryv1.Config) *generatorCAConfig {
@@ -36,7 +34,6 @@ func newGeneratorCAConfig(lister corelisters.ConfigMapNamespaceLister, imageConf
3634
imageConfigName: params.ImageConfig.Name,
3735
name: params.CAConfig.Name,
3836
namespace: params.Deployment.Namespace,
39-
owner: util.AsOwner(cr),
4037
}
4138
}
4239

@@ -82,8 +79,6 @@ func (gcac *generatorCAConfig) expected() (runtime.Object, error) {
8279
}
8380
}
8481

85-
util.AddOwnerRefToObject(cm, gcac.owner)
86-
8782
return cm, nil
8883
}
8984

@@ -106,3 +101,7 @@ func (gcac *generatorCAConfig) Update(o runtime.Object) (bool, error) {
106101
func (gcac *generatorCAConfig) Delete(opts *metav1.DeleteOptions) error {
107102
return gcac.client.ConfigMaps(gcac.GetNamespace()).Delete(gcac.GetName(), opts)
108103
}
104+
105+
func (g *generatorCAConfig) Owned() bool {
106+
return true
107+
}

pkg/resource/clusterrole.go

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,22 +8,19 @@ import (
88
rbaclisters "k8s.io/client-go/listers/rbac/v1"
99

1010
imageregistryv1 "github.com/openshift/cluster-image-registry-operator/pkg/apis/imageregistry/v1"
11-
"github.com/openshift/cluster-image-registry-operator/pkg/util"
1211
)
1312

1413
var _ Mutator = &generatorClusterRole{}
1514

1615
type generatorClusterRole struct {
1716
lister rbaclisters.ClusterRoleLister
1817
client rbacset.RbacV1Interface
19-
owner metav1.OwnerReference
2018
}
2119

2220
func newGeneratorClusterRole(lister rbaclisters.ClusterRoleLister, client rbacset.RbacV1Interface, cr *imageregistryv1.Config) *generatorClusterRole {
2321
return &generatorClusterRole{
2422
lister: lister,
2523
client: client,
26-
owner: util.AsOwner(cr),
2724
}
2825
}
2926

@@ -94,8 +91,6 @@ func (gcr *generatorClusterRole) expected() (runtime.Object, error) {
9491
},
9592
}
9693

97-
util.AddOwnerRefToObject(role, gcr.owner)
98-
9994
return role, nil
10095
}
10196

@@ -118,3 +113,7 @@ func (gcr *generatorClusterRole) Update(o runtime.Object) (bool, error) {
118113
func (gcr *generatorClusterRole) Delete(opts *metav1.DeleteOptions) error {
119114
return gcr.client.ClusterRoles().Delete(gcr.GetName(), opts)
120115
}
116+
117+
func (g *generatorClusterRole) Owned() bool {
118+
return true
119+
}

pkg/resource/clusterrolebinding.go

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ import (
99

1010
imageregistryv1 "github.com/openshift/cluster-image-registry-operator/pkg/apis/imageregistry/v1"
1111
"github.com/openshift/cluster-image-registry-operator/pkg/parameters"
12-
"github.com/openshift/cluster-image-registry-operator/pkg/util"
1312
)
1413

1514
var _ Mutator = &generatorClusterRoleBinding{}
@@ -19,7 +18,6 @@ type generatorClusterRoleBinding struct {
1918
client rbacset.RbacV1Interface
2019
saName string
2120
saNamespace string
22-
owner metav1.OwnerReference
2321
}
2422

2523
func newGeneratorClusterRoleBinding(lister rbaclisters.ClusterRoleBindingLister, client rbacset.RbacV1Interface, params *parameters.Globals, cr *imageregistryv1.Config) *generatorClusterRoleBinding {
@@ -28,7 +26,6 @@ func newGeneratorClusterRoleBinding(lister rbaclisters.ClusterRoleBindingLister,
2826
client: client,
2927
saName: params.Pod.ServiceAccount,
3028
saNamespace: params.Deployment.Namespace,
31-
owner: util.AsOwner(cr),
3229
}
3330
}
3431

@@ -66,8 +63,6 @@ func (gcrb *generatorClusterRoleBinding) expected() (runtime.Object, error) {
6663
},
6764
}
6865

69-
util.AddOwnerRefToObject(crb, gcrb.owner)
70-
7166
return crb, nil
7267
}
7368

@@ -90,3 +85,7 @@ func (gcrb *generatorClusterRoleBinding) Update(o runtime.Object) (bool, error)
9085
func (gcrb *generatorClusterRoleBinding) Delete(opts *metav1.DeleteOptions) error {
9186
return gcrb.client.ClusterRoleBindings().Delete(gcrb.GetName(), opts)
9287
}
88+
89+
func (g *generatorClusterRoleBinding) Owned() bool {
90+
return true
91+
}

pkg/resource/deployment.go

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@ import (
1212
imageregistryv1 "github.com/openshift/cluster-image-registry-operator/pkg/apis/imageregistry/v1"
1313
"github.com/openshift/cluster-image-registry-operator/pkg/parameters"
1414
"github.com/openshift/cluster-image-registry-operator/pkg/storage"
15-
"github.com/openshift/cluster-image-registry-operator/pkg/util"
1615
)
1716

1817
var _ Mutator = &generatorDeployment{}
@@ -84,8 +83,6 @@ func (gd *generatorDeployment) expected() (runtime.Object, error) {
8483
},
8584
}
8685

87-
util.AddOwnerRefToObject(deploy, util.AsOwner(gd.cr))
88-
8986
return deploy, nil
9087
}
9188

@@ -108,3 +105,7 @@ func (gd *generatorDeployment) Update(o runtime.Object) (bool, error) {
108105
func (gd *generatorDeployment) Delete(opts *metav1.DeleteOptions) error {
109106
return gd.client.Deployments(gd.GetNamespace()).Delete(gd.GetName(), opts)
110107
}
108+
109+
func (g *generatorDeployment) Owned() bool {
110+
return true
111+
}

pkg/resource/generator.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -235,6 +235,9 @@ func (g *Generator) Remove(cr *imageregistryv1.Config) error {
235235
PropagationPolicy: &propagationPolicy,
236236
}
237237
for _, gen := range generators {
238+
if !gen.Owned() {
239+
continue
240+
}
238241
if err := gen.Delete(opts); err != nil {
239242
if errors.IsNotFound(err) {
240243
continue

pkg/resource/imageconfig.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -133,6 +133,11 @@ func (gic *generatorImageConfig) Delete(opts *metav1.DeleteOptions) error {
133133
return gic.configClient.Images().Delete(gic.GetName(), opts)
134134
}
135135

136+
func (g *generatorImageConfig) Owned() bool {
137+
// the registry operator can create and contribute to the imageconfig, but it doesn't own it.
138+
return false
139+
}
140+
136141
func (gic *generatorImageConfig) getRouteHostnames() ([]string, error) {
137142
var externalHostnames []string
138143

pkg/resource/nodecadaemon.go

Lines changed: 88 additions & 83 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,23 @@
11
package resource
22

33
import (
4-
"os"
4+
"os"
55

6-
appsv1 "k8s.io/api/apps/v1"
7-
corev1 "k8s.io/api/core/v1"
8-
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
9-
"k8s.io/apimachinery/pkg/runtime"
10-
appsclientv1 "k8s.io/client-go/kubernetes/typed/apps/v1"
11-
appslisters "k8s.io/client-go/listers/apps/v1"
12-
kcorelisters "k8s.io/client-go/listers/core/v1"
6+
appsv1 "k8s.io/api/apps/v1"
7+
corev1 "k8s.io/api/core/v1"
8+
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
9+
"k8s.io/apimachinery/pkg/runtime"
10+
appsclientv1 "k8s.io/client-go/kubernetes/typed/apps/v1"
11+
appslisters "k8s.io/client-go/listers/apps/v1"
12+
kcorelisters "k8s.io/client-go/listers/core/v1"
1313

14-
"github.com/openshift/library-go/pkg/operator/resource/resourceread"
14+
"github.com/openshift/library-go/pkg/operator/resource/resourceread"
1515

16-
"github.com/openshift/cluster-image-registry-operator/pkg/parameters"
16+
"github.com/openshift/cluster-image-registry-operator/pkg/parameters"
1717
)
1818

1919
const (
20-
nodeCADaemonSetDefinition = `
20+
nodeCADaemonSetDefinition = `
2121
apiVersion: apps/v1
2222
kind: DaemonSet
2323
metadata:
@@ -113,101 +113,106 @@ spec:
113113
var _ Mutator = &generatorNodeCADaemonSet{}
114114

115115
type generatorNodeCADaemonSet struct {
116-
daemonSetLister appslisters.DaemonSetNamespaceLister
117-
serviceLister kcorelisters.ServiceNamespaceLister
118-
client appsclientv1.AppsV1Interface
119-
owner metav1.OwnerReference
120-
params *parameters.Globals
116+
daemonSetLister appslisters.DaemonSetNamespaceLister
117+
serviceLister kcorelisters.ServiceNamespaceLister
118+
client appsclientv1.AppsV1Interface
119+
owner metav1.OwnerReference
120+
params *parameters.Globals
121121
}
122122

123123
func newGeneratorNodeCADaemonSet(daemonSetLister appslisters.DaemonSetNamespaceLister, serviceLister kcorelisters.ServiceNamespaceLister, client appsclientv1.AppsV1Interface, params *parameters.Globals) *generatorNodeCADaemonSet {
124-
return &generatorNodeCADaemonSet{
125-
daemonSetLister: daemonSetLister,
126-
serviceLister: serviceLister,
127-
client: client,
128-
params: params,
129-
}
124+
return &generatorNodeCADaemonSet{
125+
daemonSetLister: daemonSetLister,
126+
serviceLister: serviceLister,
127+
client: client,
128+
params: params,
129+
}
130130
}
131131

132132
func (ds *generatorNodeCADaemonSet) Type() runtime.Object {
133-
return &appsv1.DaemonSet{}
133+
return &appsv1.DaemonSet{}
134134
}
135135

136136
func (ds *generatorNodeCADaemonSet) GetNamespace() string {
137-
return ds.params.Deployment.Namespace
137+
return ds.params.Deployment.Namespace
138138
}
139139

140140
func (ds *generatorNodeCADaemonSet) GetName() string {
141-
return "node-ca"
141+
return "node-ca"
142142
}
143143

144144
func (ds *generatorNodeCADaemonSet) Get() (runtime.Object, error) {
145-
return ds.daemonSetLister.Get(ds.GetName())
145+
return ds.daemonSetLister.Get(ds.GetName())
146146
}
147147

148148
func (ds *generatorNodeCADaemonSet) Create() error {
149149

150-
internalHostname, err := getServiceHostname(ds.serviceLister, ds.params.Service.Name)
151-
if err != nil {
152-
return err
153-
}
154-
155-
daemonSet := resourceread.ReadDaemonSetV1OrDie([]byte(nodeCADaemonSetDefinition))
156-
env := corev1.EnvVar{
157-
Name: "internalRegistryHostname",
158-
Value: internalHostname,
159-
}
160-
161-
daemonSet.Spec.Template.Spec.Containers[0].Image = os.Getenv("IMAGE")
162-
daemonSet.Spec.Template.Spec.Containers[0].Env = append(daemonSet.Spec.Template.Spec.Containers[0].Env, env)
163-
_, err = ds.client.DaemonSets(ds.GetNamespace()).Create(daemonSet)
164-
return err
150+
internalHostname, err := getServiceHostname(ds.serviceLister, ds.params.Service.Name)
151+
if err != nil {
152+
return err
153+
}
154+
155+
daemonSet := resourceread.ReadDaemonSetV1OrDie([]byte(nodeCADaemonSetDefinition))
156+
env := corev1.EnvVar{
157+
Name: "internalRegistryHostname",
158+
Value: internalHostname,
159+
}
160+
161+
daemonSet.Spec.Template.Spec.Containers[0].Image = os.Getenv("IMAGE")
162+
daemonSet.Spec.Template.Spec.Containers[0].Env = append(daemonSet.Spec.Template.Spec.Containers[0].Env, env)
163+
_, err = ds.client.DaemonSets(ds.GetNamespace()).Create(daemonSet)
164+
return err
165165
}
166166

167167
func (ds *generatorNodeCADaemonSet) Update(o runtime.Object) (bool, error) {
168-
internalHostname, err := getServiceHostname(ds.serviceLister, ds.params.Service.Name)
169-
if err != nil {
170-
return false, err
171-
}
172-
173-
daemonSet := o.(*appsv1.DaemonSet)
174-
modified := false
175-
exists := false
176-
177-
newImage := os.Getenv("IMAGE")
178-
oldImage := daemonSet.Spec.Template.Spec.Containers[0].Image
179-
if newImage != oldImage {
180-
daemonSet.Spec.Template.Spec.Containers[0].Image = newImage
181-
modified = true
182-
}
183-
184-
for i, env := range daemonSet.Spec.Template.Spec.Containers[0].Env {
185-
if env.Name == "internalRegistryHostname" {
186-
exists = true
187-
if env.Value != internalHostname {
188-
daemonSet.Spec.Template.Spec.Containers[0].Env[i].Value = internalHostname
189-
modified = true
190-
}
191-
break
192-
}
193-
}
194-
if !exists {
195-
env := corev1.EnvVar{
196-
Name: "internalRegistryHostname",
197-
Value: internalHostname,
198-
}
199-
daemonSet.Spec.Template.Spec.Containers[0].Env = append(daemonSet.Spec.Template.Spec.Containers[0].Env, env)
200-
modified = true
201-
}
202-
203-
if !modified {
204-
return false, nil
205-
}
206-
207-
_, err = ds.client.DaemonSets(ds.GetNamespace()).Update(daemonSet)
208-
return err == nil, err
168+
internalHostname, err := getServiceHostname(ds.serviceLister, ds.params.Service.Name)
169+
if err != nil {
170+
return false, err
171+
}
172+
173+
daemonSet := o.(*appsv1.DaemonSet)
174+
modified := false
175+
exists := false
176+
177+
newImage := os.Getenv("IMAGE")
178+
oldImage := daemonSet.Spec.Template.Spec.Containers[0].Image
179+
if newImage != oldImage {
180+
daemonSet.Spec.Template.Spec.Containers[0].Image = newImage
181+
modified = true
182+
}
183+
184+
for i, env := range daemonSet.Spec.Template.Spec.Containers[0].Env {
185+
if env.Name == "internalRegistryHostname" {
186+
exists = true
187+
if env.Value != internalHostname {
188+
daemonSet.Spec.Template.Spec.Containers[0].Env[i].Value = internalHostname
189+
modified = true
190+
}
191+
break
192+
}
193+
}
194+
if !exists {
195+
env := corev1.EnvVar{
196+
Name: "internalRegistryHostname",
197+
Value: internalHostname,
198+
}
199+
daemonSet.Spec.Template.Spec.Containers[0].Env = append(daemonSet.Spec.Template.Spec.Containers[0].Env, env)
200+
modified = true
201+
}
202+
203+
if !modified {
204+
return false, nil
205+
}
206+
207+
_, err = ds.client.DaemonSets(ds.GetNamespace()).Update(daemonSet)
208+
return err == nil, err
209209
}
210210

211211
func (ds *generatorNodeCADaemonSet) Delete(opts *metav1.DeleteOptions) error {
212-
return ds.client.DaemonSets(ds.GetNamespace()).Delete(ds.GetName(), opts)
212+
return ds.client.DaemonSets(ds.GetNamespace()).Delete(ds.GetName(), opts)
213+
}
214+
215+
func (ds *generatorNodeCADaemonSet) Owned() bool {
216+
// the nodeca daemon's lifecycle is not tied to the lifecycle of the registry
217+
return false
213218
}

pkg/resource/resource.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,9 @@ type Mutator interface {
2121
Create() error
2222
Update(o runtime.Object) (bool, error)
2323
Delete(opts *metaapi.DeleteOptions) error
24+
// Owned indicates whether this resource is explicitly owned by the registry operator
25+
// and therefore should be removed when the registry config resource is removed.
26+
Owned() bool
2427
}
2528

2629
func Name(o Getter) string {

0 commit comments

Comments
 (0)