Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Bug 1769927: Persistent Deployment #451

Merged
merged 2 commits into from
Jan 31, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
14 changes: 7 additions & 7 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -36,11 +36,11 @@ require (
github.com/jteeuwen/go-bindata v3.0.8-0.20151023091102-a0ff2567cfb7+incompatible
github.com/onsi/ginkgo v1.10.3 // indirect
github.com/onsi/gomega v1.7.1 // indirect
github.com/openshift/api v0.0.0-20200110191829-69b8abb8b201
github.com/openshift/client-go v0.0.0-20200109173103-2763c6378941
github.com/openshift/api v0.0.0-20200116145750-0e2ff1e215dd
github.com/openshift/client-go v0.0.0-20200116152001-92a2713fa240
github.com/openshift/crd-schema-gen v1.0.0
github.com/openshift/installer v0.9.0-master.0.20190726121806-6e8f9c335410
github.com/openshift/library-go v0.0.0-20191218095328-1c12909e5923
github.com/openshift/library-go v0.0.0-20200127110935-527e40ed17d9
github.com/prometheus/client_golang v1.1.0
github.com/prometheus/client_model v0.0.0-20191202183732-d1d2010b5bee
github.com/prometheus/common v0.6.0
Expand All @@ -62,10 +62,10 @@ require (
google.golang.org/grpc v1.25.1 // indirect
gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 // indirect
gopkg.in/yaml.v2 v2.2.7
k8s.io/api v0.17.0
k8s.io/apimachinery v0.17.0
k8s.io/client-go v0.17.0
k8s.io/code-generator v0.17.0
k8s.io/api v0.17.1
k8s.io/apimachinery v0.17.1
k8s.io/client-go v0.17.1
k8s.io/code-generator v0.17.1
k8s.io/gengo v0.0.0-20191010091904-7fa3014cb28f // indirect
k8s.io/klog v1.0.0
k8s.io/utils v0.0.0-20191114200735-6ca3b61696b6 // indirect
Expand Down
54 changes: 24 additions & 30 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -378,22 +378,16 @@ github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7J
github.com/opencontainers/go-digest v1.0.0-rc1/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQYUd2OVphdqWwCJHrFt2s=
github.com/opencontainers/image-spec v1.0.1/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0=
github.com/opencontainers/runc v0.0.0-20191031171055-b133feaeeb2e/go.mod h1:qT5XzbpPznkRYVz/mWwUaVBUv2rmF59PVA73FjuZG0U=
github.com/openshift/api v0.0.0-20191213091414-3fbf6bcf78e8/go.mod h1:dh9o4Fs58gpFXGSYfnVxGR9PnV53I8TW84pQaJDdGiY=
github.com/openshift/api v0.0.0-20191217141120-791af96035a5 h1:iNT2RyvG4HrDU95JH1/6l+oALMmzgLL/Tp3AXAje0ic=
github.com/openshift/api v0.0.0-20191217141120-791af96035a5/go.mod h1:dOo9oLY4lehI1ZZvNtMKwRVZTqG0y+z8564y1cf1ZOw=
github.com/openshift/api v0.0.0-20200109154256-35a64c701b10/go.mod h1:dv+J0b/HWai0QnMVb37/H0v36klkLBi2TNpPeWDxX10=
github.com/openshift/api v0.0.0-20200110191829-69b8abb8b201 h1:p5wQP+q7ZlH0AxegXC9A+N0i5t/H82cnaNTuNVE0NyI=
github.com/openshift/api v0.0.0-20200110191829-69b8abb8b201/go.mod h1:N1jYLqdomc/eHHrU/wphMsZBzRvxv5FBc7ATIdSQelI=
github.com/openshift/client-go v0.0.0-20191216194936-57f413491e9e h1:l+fwEFa4Voy9u+6pVOJI33sxwddz1oJ6rbVYpDfGytY=
github.com/openshift/client-go v0.0.0-20191216194936-57f413491e9e/go.mod h1:nLJaHFCQ5Mavh98g2ejEnWYFWBMGVdphrKNjLErOn/w=
github.com/openshift/client-go v0.0.0-20200109173103-2763c6378941 h1:r9oaIRvM0JRem87eHGTCIJCWqRjRhZHcA0uc3cdc+mY=
github.com/openshift/client-go v0.0.0-20200109173103-2763c6378941/go.mod h1:zMqD3jZrS8UB+n7ZBz/PtyFvkbKExD8i/Dfye5wgFqE=
github.com/openshift/api v0.0.0-20200116145750-0e2ff1e215dd h1:WIrzR6PXOptxWGafidO/zMixrHDITEBHdz9k9AkAL1U=
github.com/openshift/api v0.0.0-20200116145750-0e2ff1e215dd/go.mod h1:fT6U/JfG8uZzemTRwZA2kBDJP5nWz7v05UHnty/D+pk=
github.com/openshift/client-go v0.0.0-20200116152001-92a2713fa240 h1:XYfJWv2Ch+qInGLDEedHRtDsJwnxyU1L8U7SY56NcA8=
github.com/openshift/client-go v0.0.0-20200116152001-92a2713fa240/go.mod h1:4riOwdj99Hd/q+iAcJZfNCsQQQMwURnZV6RL4WHYS5w=
github.com/openshift/crd-schema-gen v1.0.0 h1:s/6kG236Z0aqOBUlIZrlykdsXLzvDl3ylHJIME17ZRg=
github.com/openshift/crd-schema-gen v1.0.0/go.mod h1:jTmSmtfJzK2emb3ucPkHqvoOe//PuNhR3aBiUBbg/rc=
github.com/openshift/installer v0.9.0-master.0.20190726121806-6e8f9c335410 h1:fCXoMmINCITnEVU7yC6iL0nBuajZw0Y7rruyxVxmfzw=
github.com/openshift/installer v0.9.0-master.0.20190726121806-6e8f9c335410/go.mod h1:VWGgpJgF8DGCKQjbccnigglhZnHtRLCZ6cxqkXN4Ck0=
github.com/openshift/library-go v0.0.0-20191218095328-1c12909e5923 h1:z9n4E/ubc0ow086DmSxBwjCjDAgPVYYGJJQVQaak6gU=
github.com/openshift/library-go v0.0.0-20191218095328-1c12909e5923/go.mod h1:+EzNb8oA3fnhC613pNcAU0DJ9s3m6WaIMECIVQm2ork=
github.com/openshift/library-go v0.0.0-20200127110935-527e40ed17d9 h1:hXWVQYccFfpYnxntS3hRJ6Xel2azg100xl3jcmHODl4=
github.com/openshift/library-go v0.0.0-20200127110935-527e40ed17d9/go.mod h1:/P1rPwPkaaNtylv8PLYkOTbf6tCdaNYDNqL9Y8GzJfE=
github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o=
github.com/pborman/uuid v1.2.0 h1:J7Q5mO4ysT1dv8hyrUGHb9+ooztCXu1D8MY8DZYsu3g=
github.com/pborman/uuid v1.2.0/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k=
Expand Down Expand Up @@ -619,11 +613,10 @@ golang.org/x/tools v0.0.0-20191029041327-9cc4af7d6b2c/go.mod h1:b+2E5dAYhXwXZwtn
golang.org/x/tools v0.0.0-20191029190741-b9c20aec41a5 h1:hKsoRgsbwY1NafxrwTs+k64bikrLBkAgPir1TNCj3Zs=
golang.org/x/tools v0.0.0-20191029190741-b9c20aec41a5/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20200108203644-89082a384178 h1:f5gMxb6FbpY48csegk9UPd7IAHVrBD013CU7N4pWzoE=
golang.org/x/tools v0.0.0-20200108203644-89082a384178/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
golang.org/x/tools v0.0.0-20200115044656-831fdb1e1868 h1:6VZw2h4iwEB4GwgQU3Jvcsm8l9+yReTrErAEK1k6AC4=
golang.org/x/tools v0.0.0-20200115044656-831fdb1e1868/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
gonum.org/v1/gonum v0.0.0-20180816165407-929014505bf4/go.mod h1:Y+Yx5eoAFn32cQvJDxZx5Dpnq+c3wtXuadVZAcxbbBo=
gonum.org/v1/gonum v0.0.0-20190331200053-3d26580ed485 h1:OB/uP/Puiu5vS5QMRPrXCDWUPb+kt8f1KW8oQzFejQw=
gonum.org/v1/gonum v0.0.0-20190331200053-3d26580ed485/go.mod h1:2ltnJ7xHfj0zHS40VVPYEAAMTa3ZGguvHGBSJeRWqE0=
Expand Down Expand Up @@ -695,22 +688,22 @@ honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWh
honnef.co/go/tools v0.0.1-2019.2.3 h1:3JgtbtFHMiCmsznwGVTUWbgGov+pVqnlf1dEJTNAXeM=
honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg=
k8s.io/api v0.0.0-20190409021203-6e4e0e4f393b/go.mod h1:iuAfoD4hCxJ8Onx9kaTIt30j7jUFS00AXQi6QMi99vA=
k8s.io/api v0.17.0 h1:H9d/lw+VkZKEVIUc8F3wgiQ+FUXTTr21M87jXLU7yqM=
k8s.io/api v0.17.0/go.mod h1:npsyOePkeP0CPwyGfXDHxvypiYMJxBWAMpQxCaJ4ZxI=
k8s.io/api v0.17.1 h1:i46MidoDOE9tvQ0TTEYggf3ka/pziP1+tHI/GFVeJao=
k8s.io/api v0.17.1/go.mod h1:zxiAc5y8Ngn4fmhWUtSxuUlkfz1ixT7j9wESokELzOg=
k8s.io/apiextensions-apiserver v0.0.0-20190409022649-727a075fdec8/go.mod h1:IxkesAMoaCRoLrPJdZNZUQp9NfZnzqaVzLhb2VEQzXE=
k8s.io/apiextensions-apiserver v0.17.0 h1:+XgcGxqaMztkbbvsORgCmHIb4uImHKvTjNyu7b8gRnA=
k8s.io/apiextensions-apiserver v0.17.0/go.mod h1:XiIFUakZywkUl54fVXa7QTEHcqQz9HG55nHd1DCoHj8=
k8s.io/apiextensions-apiserver v0.17.1 h1:Gw6zQgmKyyNrFMtVpRBNEKE8p35sDBI7Tq1ImxGS+zU=
k8s.io/apiextensions-apiserver v0.17.1/go.mod h1:DRIFH5x3jalE4rE7JP0MQKby9zdYk9lUJQuMmp+M/L0=
k8s.io/apimachinery v0.0.0-20190404173353-6a84e37a896d/go.mod h1:ccL7Eh7zubPUSh9A3USN90/OzHNSVN6zxzde07TDCL0=
k8s.io/apimachinery v0.17.0 h1:xRBnuie9rXcPxUkDizUsGvPf1cnlZCFu210op7J7LJo=
k8s.io/apimachinery v0.17.0/go.mod h1:b9qmWdKlLuU9EBh+06BtLcSf/Mu89rWL33naRxs1uZg=
k8s.io/apiserver v0.17.0 h1:XhUix+FKFDcBygWkQNp7wKKvZL030QUlH1o8vFeSgZA=
k8s.io/apiserver v0.17.0/go.mod h1:ABM+9x/prjINN6iiffRVNCBR2Wk7uY4z+EtEGZD48cg=
k8s.io/client-go v0.17.0 h1:8QOGvUGdqDMFrm9sD6IUFl256BcffynGoe80sxgTEDg=
k8s.io/client-go v0.17.0/go.mod h1:TYgR6EUHs6k45hb6KWjVD6jFZvJV4gHDikv/It0xz+k=
k8s.io/code-generator v0.17.0 h1:y+KWtDWNqlJzJu/kUy8goJZO0X71PGIpAHLX8a0JYk0=
k8s.io/code-generator v0.17.0/go.mod h1:DVmfPQgxQENqDIzVR2ddLXMH34qeszkKSdH/N+s+38s=
k8s.io/component-base v0.17.0 h1:BnDFcmBDq+RPpxXjmuYnZXb59XNN9CaFrX8ba9+3xrA=
k8s.io/component-base v0.17.0/go.mod h1:rKuRAokNMY2nn2A6LP/MiwpoaMRHpfRnrPaUJJj1Yoc=
k8s.io/apimachinery v0.17.1 h1:zUjS3szTxoUjTDYNvdFkYt2uMEXLcthcbp+7uZvWhYM=
k8s.io/apimachinery v0.17.1/go.mod h1:b9qmWdKlLuU9EBh+06BtLcSf/Mu89rWL33naRxs1uZg=
k8s.io/apiserver v0.17.1 h1:0cuh5kfAFPG2ImKT0rdNwdbPMUwDEfja14zX67V7eBQ=
k8s.io/apiserver v0.17.1/go.mod h1:BQEUObJv8H6ZYO7DeKI5vb50tjk6paRJ4ZhSyJsiSco=
k8s.io/client-go v0.17.1 h1:LbbuZ5tI7OYx4et5DfRFcJuoojvpYO0c7vps2rgJsHY=
k8s.io/client-go v0.17.1/go.mod h1:HZtHJSC/VuSHcETN9QA5QDZky1tXiYrkF/7t7vRpO1A=
k8s.io/code-generator v0.17.1 h1:e3B1UqRzRUWygp7WD+QTRT3ZUahPIaRKF0OFa7duQwI=
k8s.io/code-generator v0.17.1/go.mod h1:DVmfPQgxQENqDIzVR2ddLXMH34qeszkKSdH/N+s+38s=
k8s.io/component-base v0.17.1 h1:lK/lUzZZQK+DlH0XD+gq610OUEmjWOyDuUYOTGetw10=
k8s.io/component-base v0.17.1/go.mod h1:LrBPZkXtlvGjBzDJa0+b7E5Ij4VoAAKrOGudRC5z2eY=
k8s.io/gengo v0.0.0-20190128074634-0689ccc1d7d6/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0=
k8s.io/gengo v0.0.0-20190822140433-26a664648505 h1:ZY6yclUKVbZ+SdWnkfY+Je5vrMpKOxmGeKRbsXVmqYM=
k8s.io/gengo v0.0.0-20190822140433-26a664648505/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0=
Expand All @@ -721,7 +714,8 @@ k8s.io/klog v0.2.0/go.mod h1:Gq+BEi5rUBO/HRz0bTSXDUcqjScdoY3a9IHpCEIOOfk=
k8s.io/klog v0.3.0/go.mod h1:Gq+BEi5rUBO/HRz0bTSXDUcqjScdoY3a9IHpCEIOOfk=
k8s.io/klog v1.0.0 h1:Pt+yjF5aB1xDSVbau4VsWe+dQNzA0qv1LlXdC2dF6Q8=
k8s.io/klog v1.0.0/go.mod h1:4Bi6QPql/J/LkTDqv7R/cd3hPo4k2DG6Ptcz060Ez5I=
k8s.io/kube-aggregator v0.17.0/go.mod h1:Vw104PtCEuT12WTVuhRFWCHXGiVqXsTzFtrvoaHxpk4=
k8s.io/kube-aggregator v0.17.1 h1:t/kREQckXfnUnF+fl8fD8c+p30HTrvfGnWE5XWSjj38=
k8s.io/kube-aggregator v0.17.1/go.mod h1:H5LcB3fx+P1gpowuZpzDu5B1XfABdO7JBKyB9J9bt34=
k8s.io/kube-openapi v0.0.0-20191107075043-30be4d16710a h1:UcxjrRMyNx/i/y8G7kPvLyy7rfbeuf1PYyBf973pgyU=
k8s.io/kube-openapi v0.0.0-20191107075043-30be4d16710a/go.mod h1:1TqjTSzOxsLGIKfj0lK8EeCP7K1iUG65v09OM0/WG5E=
k8s.io/utils v0.0.0-20191114184206-e782cd3c129f/go.mod h1:sZAwmy6armz5eXlNoLmJcl4F1QuKu7sr+mFQ0byX7Ew=
Expand Down
94 changes: 84 additions & 10 deletions pkg/resource/deployment.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,14 @@ import (

"github.com/openshift/cluster-image-registry-operator/defaults"
"github.com/openshift/cluster-image-registry-operator/pkg/parameters"
"github.com/openshift/cluster-image-registry-operator/pkg/resource/strategy"
"github.com/openshift/cluster-image-registry-operator/pkg/storage"

imageregistryv1 "github.com/openshift/api/imageregistry/v1"
operatorv1 "github.com/openshift/api/operator/v1"
configlisters "github.com/openshift/client-go/config/listers/config/v1"
"github.com/openshift/library-go/pkg/operator/events"
"github.com/openshift/library-go/pkg/operator/resource/resourceapply"
appsapi "k8s.io/api/apps/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/runtime"
Expand All @@ -21,6 +25,7 @@ import (
var _ Mutator = &generatorDeployment{}

type generatorDeployment struct {
recorder events.Recorder
lister appslisters.DeploymentNamespaceLister
configMapLister corelisters.ConfigMapNamespaceLister
secretLister corelisters.SecretNamespaceLister
Expand All @@ -34,6 +39,7 @@ type generatorDeployment struct {

func newGeneratorDeployment(lister appslisters.DeploymentNamespaceLister, configMapLister corelisters.ConfigMapNamespaceLister, secretLister corelisters.SecretNamespaceLister, proxyLister configlisters.ProxyLister, coreClient coreset.CoreV1Interface, client appsset.AppsV1Interface, driver storage.Driver, params *parameters.Globals, cr *imageregistryv1.Config) *generatorDeployment {
return &generatorDeployment{
recorder: events.NewLoggingEventRecorder("image-registry-operator"),
lister: lister,
configMapLister: configMapLister,
secretLister: secretLister,
Expand Down Expand Up @@ -83,9 +89,9 @@ func (gd *generatorDeployment) expected() (runtime.Object, error) {
podTemplateSpec.Annotations[parameters.ChecksumOperatorDepsAnnotation] = depsChecksum

// Strategy defaults to RollingUpdate
strategy := gd.cr.Spec.RolloutStrategy
if strategy == "" {
strategy = string(appsapi.RollingUpdateDeploymentStrategyType)
deployStrategy := gd.cr.Spec.RolloutStrategy
if deployStrategy == "" {
deployStrategy = string(appsapi.RollingUpdateDeploymentStrategyType)
}

deploy := &appsapi.Deployment{
Expand All @@ -104,11 +110,17 @@ func (gd *generatorDeployment) expected() (runtime.Object, error) {
},
Template: podTemplateSpec,
Strategy: appsapi.DeploymentStrategy{
Type: appsapi.DeploymentStrategyType(strategy),
Type: appsapi.DeploymentStrategyType(deployStrategy),
},
},
}

dgst, err := strategy.Checksum(deploy)
if err != nil {
return nil, err
}
deploy.ObjectMeta.Annotations[parameters.ChecksumOperatorAnnotation] = dgst
ricardomaraschini marked this conversation as resolved.
Show resolved Hide resolved

return deploy, nil
}

Expand All @@ -117,15 +129,77 @@ func (gd *generatorDeployment) Get() (runtime.Object, error) {
}

func (gd *generatorDeployment) Create() (runtime.Object, error) {
return commonCreate(gd, func(obj runtime.Object) (runtime.Object, error) {
return gd.client.Deployments(gd.GetNamespace()).Create(obj.(*appsapi.Deployment))
})
exp, err := gd.expected()
if err != nil {
return nil, err
}

dep, _, err := resourceapply.ApplyDeployment(
gd.client, gd.recorder, exp.(*appsapi.Deployment), -1, false,
)
if err != nil {
return nil, err
}

gd.UpdateLastGeneration(dep.ObjectMeta.Generation)
return dep, nil
}

func (gd *generatorDeployment) Update(o runtime.Object) (runtime.Object, bool, error) {
return commonUpdate(gd, o, func(obj runtime.Object) (runtime.Object, error) {
return gd.client.Deployments(gd.GetNamespace()).Update(obj.(*appsapi.Deployment))
})
exp, err := gd.expected()
if err != nil {
return o, false, err
}

dep, updated, err := resourceapply.ApplyDeployment(
gd.client, gd.recorder, exp.(*appsapi.Deployment), gd.LastGeneration(), false,
)
if err != nil {
return o, false, err
}

if updated {
gd.UpdateLastGeneration(dep.ObjectMeta.Generation)
}

return dep, updated, nil
}

func (gd *generatorDeployment) UpdateLastGeneration(lastGen int64) {
for i, gen := range gd.cr.Status.Generations {
if gen.Name == gd.GetName() &&
gen.Group == gd.GetGroup() &&
gen.Resource == gd.GetResource() &&
gen.Namespace == gd.GetNamespace() {

gd.cr.Status.Generations[i].LastGeneration = lastGen
return
}
}

gd.cr.Status.Generations = append(
gd.cr.Status.Generations,
operatorv1.GenerationStatus{
Name: gd.GetName(),
Group: gd.GetGroup(),
Resource: gd.GetResource(),
Namespace: gd.GetNamespace(),
LastGeneration: lastGen,
},
)
}

func (gd *generatorDeployment) LastGeneration() int64 {
for _, gen := range gd.cr.Status.Generations {
if gen.Name == gd.GetName() &&
gen.Group == gd.GetGroup() &&
gen.Resource == gd.GetResource() &&
gen.Namespace == gd.GetNamespace() {

return gen.LastGeneration
}
}
return -1
}

func (gd *generatorDeployment) Delete(opts *metav1.DeleteOptions) error {
Expand Down
63 changes: 63 additions & 0 deletions test/e2e/recreate_deployment_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,16 @@ package e2e

import (
"testing"
"time"

"github.com/openshift/cluster-image-registry-operator/defaults"
"github.com/openshift/cluster-image-registry-operator/test/framework"

imageregistryv1 "github.com/openshift/api/imageregistry/v1"
operatorapi "github.com/openshift/api/operator/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/types"
"k8s.io/apimachinery/pkg/util/wait"
)

func TestRecreateDeployment(t *testing.T) {
Expand Down Expand Up @@ -54,3 +57,63 @@ func TestRecreateDeployment(t *testing.T) {
t.Fatal(err)
}
}

func TestRestoreDeploymentAfterUserChanges(t *testing.T) {
client := framework.MustNewClientset(t, nil)

defer framework.MustRemoveImageRegistry(t, client)
framework.MustDeployImageRegistry(t, client, nil)
framework.MustEnsureImageRegistryIsAvailable(t, client)

// add a new environment variable and a host port to the deployment.
if _, err := client.Deployments(framework.OperatorDeploymentNamespace).Patch(
defaults.ImageRegistryName,
types.JSONPatchType,
[]byte(`[
{
"op": "add",
"path": "/spec/template/spec/containers/0/env/-",
"value": {"name": "FOO", "value": "BAR"}
},
{
"op": "add",
"path": "/spec/template/spec/containers/0/ports/-",
"value": {"name": "foo", "containerPort": 2222}
}
]`),
); err != nil {
t.Fatalf("unable to patch image registry deployment: %v", err)
}

// wait for the Deployment to be ovewritten by the operator.
if err := wait.Poll(
time.Second,
time.Minute,
func() (stop bool, err error) {
deployment, err := client.Deployments(
framework.OperatorDeploymentNamespace,
).Get("image-registry", metav1.GetOptions{})
if err != nil {
return false, err
}

// new environment variable should have been vanished.
for _, env := range deployment.Spec.Template.Spec.Containers[0].Env {
if env.Name == "FOO" {
return false, nil
}
}

// new host port should have been vanished.
for _, port := range deployment.Spec.Template.Spec.Containers[0].Ports {
if port.Name == "foo" {
return false, nil
}
}

return true, nil
},
); err != nil {
t.Errorf("registry deployment not retored: %v", err)
}
}
7 changes: 7 additions & 0 deletions vendor/github.com/openshift/api/.gitattributes

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

16 changes: 16 additions & 0 deletions vendor/github.com/openshift/api/.gitignore

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

22 changes: 22 additions & 0 deletions vendor/github.com/openshift/api/.travis.yml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.