@@ -17,6 +17,7 @@ package cluster
1717
1818import (
1919 "strings"
20+ "strconv"
2021 "time"
2122
2223 crv1 "github.com/crunchydata/postgres-operator/apis/cr/v1"
@@ -100,7 +101,7 @@ func AddUpgrade(clientset *kubernetes.Clientset, restclient *rest.RESTClient, up
100101 publishMinorUpgradeStartedEvent (& currentTask , & cl , namespace )
101102
102103 // start the upgrade
103- ProcessNextUpgradeItem (clientset , restclient , cl . Spec . Name , currentTask .Spec .Name , namespace )
104+ ProcessNextUpgradeItem (clientset , restclient , cl , currentTask .Spec .Name , namespace )
104105
105106}
106107
@@ -109,7 +110,7 @@ func AddUpgrade(clientset *kubernetes.Clientset, restclient *rest.RESTClient, up
109110// If more than one replica is in the list, they are done one at a time, once per call
110111// with an item getting removed from the list each time. This method should get called
111112// after the pod goes ready from the previous item, which is handled by the pod controller.
112- func ProcessNextUpgradeItem (clientset * kubernetes.Clientset , restclient * rest.RESTClient , clusterName , upgradeTaskName , namespace string ) {
113+ func ProcessNextUpgradeItem (clientset * kubernetes.Clientset , restclient * rest.RESTClient , cluster crv1. Pgcluster , upgradeTaskName , namespace string ) {
113114
114115 log .Debug ("Upgrade: ProcessNextUpgradeItem.... " , upgradeTaskName )
115116
@@ -122,15 +123,6 @@ func ProcessNextUpgradeItem(clientset *kubernetes.Clientset, restclient *rest.RE
122123 log .Error (err )
123124 }
124125
125- cluster := crv1.Pgcluster {}
126- // get the cluster
127- _ , err = kubeapi .Getpgcluster (restclient , & cluster , clusterName , namespace )
128- if err != nil {
129- log .Error ("cound not find pgcluster for minor upgrade" )
130- log .Error (err )
131- return // make this failed upgrade with error?
132- }
133-
134126 replicaTargets := upgradeTask .Spec .Parameters [config .LABEL_UPGRADE_REPLICA ]
135127 backrestTargetName := upgradeTask .Spec .Parameters [config .LABEL_UPGRADE_BACKREST ]
136128 primaryTargetName := upgradeTask .Spec .Parameters [config .LABEL_UPGRADE_PRIMARY ]
@@ -155,8 +147,15 @@ func ProcessNextUpgradeItem(clientset *kubernetes.Clientset, restclient *rest.RE
155147 //the new image tag.
156148
157149 log .Debug ("About to patch replica: " , replicaTargetName )
158- err = kubeapi .PatchDeployment (clientset , replicaTargetName , namespace , "/spec/template/spec/containers/0/image" ,
159- operator .Pgo .Cluster .CCPImagePrefix + "/" + cluster .Spec .CCPImage + ":" + upgradeTask .Spec .Parameters ["CCPImageTag" ])
150+
151+ patchMap := make (map [string ]string )
152+ patchMap ["/spec/template/spec/containers/0/image" ] =
153+ operator .Pgo .Cluster .CCPImagePrefix + "/" + cluster .Spec .CCPImage + ":" + upgradeTask .Spec .Parameters ["CCPImageTag" ]
154+
155+ addSidecarsToPgUpgradePatch (patchMap , cluster , operator .Pgo .Cluster .CCPImagePrefix ,
156+ upgradeTask .Spec .Parameters ["CCPImageTag" ])
157+
158+ err = kubeapi .PatchDeployment (clientset , replicaTargetName , namespace , patchMap )
160159 if err != nil {
161160 log .Error (err )
162161 log .Error ("error in doing replica minor upgrade" )
@@ -176,8 +175,12 @@ func ProcessNextUpgradeItem(clientset *kubernetes.Clientset, restclient *rest.RE
176175 log .Debug ("Minor Upgrade: backrest" )
177176
178177 log .Debug ("About to patch backrest: " , backrestTargetName )
179- err = kubeapi .PatchDeployment (clientset , backrestTargetName , namespace , "/spec/template/spec/containers/0/image" ,
180- operator .Pgo .Cluster .CCPImagePrefix + "/pgo-backrest-repo:" + upgradeTask .Spec .Parameters ["CCPImageTag" ])
178+
179+ patchMap := make (map [string ]string )
180+ patchMap ["/spec/template/spec/containers/0/image" ] =
181+ operator .Pgo .Cluster .CCPImagePrefix + "/pgo-backrest-repo:" + upgradeTask .Spec .Parameters ["CCPImageTag" ]
182+
183+ err = kubeapi .PatchDeployment (clientset , backrestTargetName , namespace , patchMap )
181184 if err != nil {
182185 log .Error (err )
183186 log .Error ("error in doing backrest minor upgrade" )
@@ -199,13 +202,20 @@ func ProcessNextUpgradeItem(clientset *kubernetes.Clientset, restclient *rest.RE
199202 // If we don't do this now, then one of the replicas will come back up with the old container image.
200203 if autoFailEnabled {
201204 upgradedImageTag := upgradeTask .Spec .Parameters ["CCPImageTag" ]
202- updateClusterCCPImage (restclient , upgradedImageTag , clusterName , namespace )
205+ updateClusterCCPImage (restclient , upgradedImageTag , cluster . Spec . Name , namespace )
203206 }
204207
205208 log .Debug ("Minor Upgrade: primary" )
206209 log .Debug ("About to patch primary: " , primaryTargetName )
207- err = kubeapi .PatchDeployment (clientset , primaryTargetName , namespace , "/spec/template/spec/containers/0/image" ,
208- operator .Pgo .Cluster .CCPImagePrefix + "/" + cluster .Spec .CCPImage + ":" + upgradeTask .Spec .Parameters ["CCPImageTag" ])
210+
211+ patchMap := make (map [string ]string )
212+ patchMap ["/spec/template/spec/containers/0/image" ] =
213+ operator .Pgo .Cluster .CCPImagePrefix + "/" + cluster .Spec .CCPImage + ":" + upgradeTask .Spec .Parameters ["CCPImageTag" ]
214+
215+ addSidecarsToPgUpgradePatch (patchMap , cluster , operator .Pgo .Cluster .CCPImagePrefix ,
216+ upgradeTask .Spec .Parameters ["CCPImageTag" ])
217+
218+ err = kubeapi .PatchDeployment (clientset , primaryTargetName , namespace , patchMap )
209219 if err != nil {
210220 log .Error (err )
211221 log .Error ("error in doing primary minor upgrade" )
@@ -222,12 +232,32 @@ func ProcessNextUpgradeItem(clientset *kubernetes.Clientset, restclient *rest.RE
222232
223233 } else {
224234 // No other deployments left to upgrade, complete the upgrade
225- completeUpgrade (clientset , restclient , & upgradeTask , autoFailEnabled , clusterName , namespace )
235+ completeUpgrade (clientset , restclient , & upgradeTask , autoFailEnabled , cluster . Spec . Name , namespace )
226236
227237 publishMinorUpgradeCompleteEvent (& upgradeTask , & cluster , namespace )
228238 }
229239}
230240
241+ func addSidecarsToPgUpgradePatch (patchMap map [string ]string , cluster crv1.Pgcluster , ccpImagePrefix ,
242+ ccpImageTag string ) {
243+
244+ collectEnabled , _ := strconv .ParseBool (cluster .Labels [config .LABEL_COLLECT ])
245+ badgerEnabled , _ := strconv .ParseBool (cluster .Labels [config .LABEL_BADGER ])
246+
247+ if collectEnabled && badgerEnabled {
248+ patchMap ["/spec/template/spec/containers/1/image" ] =
249+ ccpImagePrefix + "/" + config .LABEL_COLLECT_CCPIMAGE + ":" + ccpImageTag
250+ patchMap ["/spec/template/spec/containers/2/image" ] =
251+ ccpImagePrefix + "/" + config .LABEL_BADGER_CCPIMAGE + ":" + ccpImageTag
252+ } else if collectEnabled && ! badgerEnabled {
253+ patchMap ["/spec/template/spec/containers/1/image" ] =
254+ ccpImagePrefix + "/" + config .LABEL_COLLECT_CCPIMAGE + ":" + ccpImageTag
255+ } else if badgerEnabled && ! collectEnabled {
256+ patchMap ["/spec/template/spec/containers/1/image" ] =
257+ ccpImagePrefix + "/" + config .LABEL_BADGER + ":" + ccpImageTag
258+ }
259+ }
260+
231261// completeUpgrade - makes any finishing changes required to complete the upgrade and
232262// does final updates to the task and cluster.
233263func completeUpgrade (clientset * kubernetes.Clientset , restclient * rest.RESTClient , upgradeTask * crv1.Pgtask , autoFail bool , clusterName , namespace string ) {
0 commit comments