@@ -16,19 +16,16 @@ limitations under the License.
1616*/ 
1717
1818import  (
19- "encoding/json" 
2019"errors" 
2120"strings" 
2221
2322"github.com/crunchydata/postgres-operator/internal/apiserver" 
2423"github.com/crunchydata/postgres-operator/internal/config" 
24+ "github.com/crunchydata/postgres-operator/internal/kubeapi" 
2525crv1 "github.com/crunchydata/postgres-operator/pkg/apis/crunchydata.com/v1" 
2626msgs "github.com/crunchydata/postgres-operator/pkg/apiservermsgs" 
2727"github.com/crunchydata/postgres-operator/pkg/events" 
28- jsonpatch "github.com/evanphx/json-patch" 
2928log "github.com/sirupsen/logrus" 
30- v1 "k8s.io/api/apps/v1" 
31- "k8s.io/apimachinery/pkg/api/meta" 
3229metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" 
3330"k8s.io/apimachinery/pkg/types" 
3431"k8s.io/apimachinery/pkg/util/validation" 
@@ -117,12 +114,18 @@ func Label(request *msgs.LabelRequest, ns, pgouser string) msgs.LabelResponse {
117114}
118115
119116func  addLabels (items  []crv1.Pgcluster , DryRun  bool , LabelCmdLabel  string , newLabels  map [string ]string , ns , pgouser  string ) {
117+ patchBytes , err  :=  kubeapi .NewMergePatch ().Add ("metadata" , "labels" )(newLabels ).Bytes ()
118+ if  err  !=  nil  {
119+ log .Error (err .Error ())
120+ return 
121+ }
122+ 
120123for  i  :=  0 ; i  <  len (items ); i ++  {
121124if  DryRun  {
122125log .Debug ("dry run only" )
123126} else  {
124- log .Debugf ("adding label to  cluster %s" , items [i ].Spec .Name )
125- err  :=  PatchPgcluster ( newLabels ,  items [i ],  ns )
127+ log .Debugf ("patching  cluster %s: %s " , items [i ].Spec .Name ,  patchBytes )
128+ _ ,  err  :=  apiserver . Clientset . CrunchydataV1 (). Pgclusters ( ns ). Patch ( items [i ]. Spec . Name ,  types . MergePatchType ,  patchBytes )
126129if  err  !=  nil  {
127130log .Error (err .Error ())
128131}
@@ -163,8 +166,8 @@ func addLabels(items []crv1.Pgcluster, DryRun bool, LabelCmdLabel string, newLab
163166for  _ , d  :=  range  deployments .Items  {
164167//update Deployment with the label 
165168if  ! DryRun  {
166- //err := updateLabels(&d, items[i].Spec. Name, newLabels )
167- err  :=  updateLabels ( & d ,  d .Name , newLabels ,  ns )
169+ log . Debugf ( "patching deployment %s: %s" ,  d . Name , patchBytes )
170+ _ ,  err  :=  apiserver . Clientset . AppsV1 (). Deployments ( ns ). Patch ( d .Name , types . MergePatchType ,  patchBytes )
168171if  err  !=  nil  {
169172log .Error (err .Error ())
170173}
@@ -174,82 +177,6 @@ func addLabels(items []crv1.Pgcluster, DryRun bool, LabelCmdLabel string, newLab
174177}
175178}
176179
177- func  updateLabels (deployment  * v1.Deployment , clusterName  string , newLabels  map [string ]string , ns  string ) error  {
178- 
179- var  err  error 
180- 
181- log .Debugf ("%v are the labels to apply" , newLabels )
182- 
183- var  patchBytes , newData , origData  []byte 
184- origData , err  =  json .Marshal (deployment )
185- if  err  !=  nil  {
186- return  err 
187- }
188- 
189- accessor , err2  :=  meta .Accessor (deployment )
190- if  err2  !=  nil  {
191- return  err2 
192- }
193- 
194- objLabels  :=  accessor .GetLabels ()
195- if  objLabels  ==  nil  {
196- objLabels  =  make (map [string ]string )
197- }
198- 
199- //update the deployment labels 
200- for  key , value  :=  range  newLabels  {
201- objLabels [key ] =  value 
202- }
203- log .Debugf ("updated labels are %v" , objLabels )
204- 
205- accessor .SetLabels (objLabels )
206- newData , err  =  json .Marshal (deployment )
207- if  err  !=  nil  {
208- return  err 
209- }
210- 
211- patchBytes , err  =  jsonpatch .CreateMergePatch (origData , newData )
212- if  err  !=  nil  {
213- return  err 
214- }
215- 
216- _ , err  =  apiserver .Clientset .AppsV1 ().Deployments (ns ).Patch (clusterName , types .MergePatchType , patchBytes , "" )
217- if  err  !=  nil  {
218- log .Debugf ("error updating patching deployment %s" , err .Error ())
219- }
220- return  err 
221- 
222- }
223- 
224- func  PatchPgcluster (newLabels  map [string ]string , oldCRD  crv1.Pgcluster , ns  string ) error  {
225- 
226- oldData , err  :=  json .Marshal (oldCRD )
227- if  err  !=  nil  {
228- return  err 
229- }
230- if  oldCRD .ObjectMeta .Labels  ==  nil  {
231- oldCRD .ObjectMeta .Labels  =  make (map [string ]string )
232- }
233- for  key , value  :=  range  newLabels  {
234- oldCRD .ObjectMeta .Labels [key ] =  value 
235- }
236- var  newData , patchBytes  []byte 
237- newData , err  =  json .Marshal (oldCRD )
238- if  err  !=  nil  {
239- return  err 
240- }
241- patchBytes , err  =  jsonpatch .CreateMergePatch (oldData , newData )
242- if  err  !=  nil  {
243- return  err 
244- }
245- 
246- log .Debug (string (patchBytes ))
247- _ , err6  :=  apiserver .Clientset .CrunchydataV1 ().Pgclusters (ns ).Patch (oldCRD .Spec .Name , types .MergePatchType , patchBytes )
248- 
249- return  err6 
250- 
251- }
252- 
253180func  validateLabel (LabelCmdLabel , ns  string ) (map [string ]string , error ) {
254181var  err  error 
255182labelMap  :=  make (map [string ]string )
@@ -361,11 +288,19 @@ func DeleteLabel(request *msgs.DeleteLabelRequest, ns string) msgs.LabelResponse
361288}
362289
363290func  deleteLabels (items  []crv1.Pgcluster , LabelCmdLabel  string , labelsMap  map [string ]string , ns  string ) error  {
364- var  err  error 
291+ patch  :=  kubeapi .NewMergePatch ()
292+ for  key  :=  range  labelsMap  {
293+ patch .Remove ("metadata" , "labels" , key )
294+ }
295+ patchBytes , err  :=  patch .Bytes ()
296+ if  err  !=  nil  {
297+ log .Error (err .Error ())
298+ return  err 
299+ }
365300
366301for  i  :=  0 ; i  <  len (items ); i ++  {
367- log .Debugf ("deleting label from  %s" , items [i ].Spec .Name )
368- err  =  deletePatchPgcluster ( labelsMap ,  items [i ],  ns )
302+ log .Debugf ("patching cluster %s:  %s" , items [i ].Spec .Name ,  patchBytes )
303+ _ ,  err  =  apiserver . Clientset . CrunchydataV1 (). Pgclusters ( ns ). Patch ( items [i ]. Spec . Name ,  types . MergePatchType ,  patchBytes )
369304if  err  !=  nil  {
370305log .Error (err .Error ())
371306return  err 
@@ -383,7 +318,8 @@ func deleteLabels(items []crv1.Pgcluster, LabelCmdLabel string, labelsMap map[st
383318}
384319
385320for  _ , d  :=  range  deployments .Items  {
386- err  =  deleteTheLabel (& d , items [i ].Spec .Name , labelsMap , ns )
321+ log .Debugf ("patching deployment %s: %s" , d .Name , patchBytes )
322+ _ , err  =  apiserver .Clientset .AppsV1 ().Deployments (ns ).Patch (d .Name , types .MergePatchType , patchBytes )
387323if  err  !=  nil  {
388324log .Error (err .Error ())
389325return  err 
@@ -393,79 +329,3 @@ func deleteLabels(items []crv1.Pgcluster, LabelCmdLabel string, labelsMap map[st
393329}
394330return  err 
395331}
396- 
397- func  deletePatchPgcluster (labelsMap  map [string ]string , oldCRD  crv1.Pgcluster , ns  string ) error  {
398- 
399- oldData , err  :=  json .Marshal (oldCRD )
400- if  err  !=  nil  {
401- return  err 
402- }
403- if  oldCRD .ObjectMeta .Labels  ==  nil  {
404- oldCRD .ObjectMeta .Labels  =  make (map [string ]string )
405- }
406- for  k  :=  range  labelsMap  {
407- delete (oldCRD .ObjectMeta .Labels , k )
408- }
409- 
410- var  newData , patchBytes  []byte 
411- newData , err  =  json .Marshal (oldCRD )
412- if  err  !=  nil  {
413- return  err 
414- }
415- patchBytes , err  =  jsonpatch .CreateMergePatch (oldData , newData )
416- if  err  !=  nil  {
417- return  err 
418- }
419- 
420- log .Debug (string (patchBytes ))
421- _ , err6  :=  apiserver .Clientset .CrunchydataV1 ().Pgclusters (ns ).Patch (oldCRD .Spec .Name , types .MergePatchType , patchBytes )
422- 
423- return  err6 
424- 
425- }
426- 
427- func  deleteTheLabel (deployment  * v1.Deployment , clusterName  string , labelsMap  map [string ]string , ns  string ) error  {
428- 
429- var  err  error 
430- 
431- log .Debugf ("%v are the labels to delete" , labelsMap )
432- 
433- var  patchBytes , newData , origData  []byte 
434- origData , err  =  json .Marshal (deployment )
435- if  err  !=  nil  {
436- return  err 
437- }
438- 
439- accessor , err2  :=  meta .Accessor (deployment )
440- if  err2  !=  nil  {
441- return  err2 
442- }
443- 
444- objLabels  :=  accessor .GetLabels ()
445- if  objLabels  ==  nil  {
446- objLabels  =  make (map [string ]string )
447- }
448- 
449- for  k  :=  range  labelsMap  {
450- delete (objLabels , k )
451- }
452- log .Debugf ("revised labels after delete are %v" , objLabels )
453- 
454- accessor .SetLabels (objLabels )
455- newData , err  =  json .Marshal (deployment )
456- if  err  !=  nil  {
457- return  err 
458- }
459- 
460- patchBytes , err  =  jsonpatch .CreateMergePatch (origData , newData )
461- if  err  !=  nil  {
462- return  err 
463- }
464- 
465- _ , err  =  apiserver .Clientset .AppsV1 ().Deployments (ns ).Patch (deployment .Name , types .MergePatchType , patchBytes , "" )
466- if  err  !=  nil  {
467- log .Debugf ("error patching deployment: %v" , err .Error ())
468- }
469- return  err 
470- 
471- }
0 commit comments