github.com/niedbalski/juju@v0.0.0-20190215020005-8ff100488e47/caas/kubernetes/provider/resources.go (about) 1 // Copyright 2018 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package provider 5 6 import ( 7 "fmt" 8 9 "github.com/juju/errors" 10 "github.com/juju/version" 11 "k8s.io/apimachinery/pkg/apis/meta/v1" 12 13 "github.com/juju/juju/environs/context" 14 "github.com/juju/juju/environs/tags" 15 ) 16 17 // AdoptResources is called when the model is moved from one 18 // controller to another using model migration. 19 func (k *kubernetesClient) AdoptResources(ctx context.ProviderCallContext, controllerUUID string, fromVersion version.Number) error { 20 modelLabel := fmt.Sprintf("%v==%v", tags.JujuModel, k.modelUUID) 21 22 pods := k.CoreV1().Pods(k.namespace) 23 podsList, err := pods.List(v1.ListOptions{ 24 LabelSelector: modelLabel, 25 }) 26 if err != nil { 27 return errors.Trace(err) 28 } 29 for _, p := range podsList.Items { 30 p.Labels[tags.JujuController] = controllerUUID 31 if _, err := pods.Update(&p); err != nil { 32 return errors.Annotatef(err, "updating labels for pod %q", p.Name) 33 } 34 } 35 36 pvcs := k.CoreV1().PersistentVolumeClaims(k.namespace) 37 pvcList, err := pvcs.List(v1.ListOptions{ 38 LabelSelector: modelLabel, 39 }) 40 if err != nil { 41 return errors.Trace(err) 42 } 43 for _, pvc := range pvcList.Items { 44 pvc.Labels[tags.JujuController] = controllerUUID 45 if _, err := pvcs.Update(&pvc); err != nil { 46 return errors.Annotatef(err, "updating labels for pvc %q", pvc.Name) 47 } 48 } 49 50 pvs := k.CoreV1().PersistentVolumes() 51 pvList, err := pvs.List(v1.ListOptions{ 52 LabelSelector: modelLabel, 53 }) 54 if err != nil { 55 return errors.Trace(err) 56 } 57 for _, pv := range pvList.Items { 58 pv.Labels[tags.JujuController] = controllerUUID 59 if _, err := pvs.Update(&pv); err != nil { 60 return errors.Annotatef(err, "updating labels for pvc %q", pv.Name) 61 } 62 } 63 64 sSets := k.AppsV1().StatefulSets(k.namespace) 65 ssList, err := sSets.List(v1.ListOptions{ 66 LabelSelector: modelLabel, 67 }) 68 if err != nil { 69 return errors.Trace(err) 70 } 71 for _, ss := range ssList.Items { 72 ss.Labels[tags.JujuController] = controllerUUID 73 if _, err := sSets.Update(&ss); err != nil { 74 return errors.Annotatef(err, "updating labels for stateful set %q", ss.Name) 75 } 76 } 77 78 deployments := k.AppsV1().Deployments(k.namespace) 79 dList, err := deployments.List(v1.ListOptions{ 80 LabelSelector: modelLabel, 81 }) 82 if err != nil { 83 return errors.Trace(err) 84 } 85 for _, d := range dList.Items { 86 d.Labels[tags.JujuController] = controllerUUID 87 if _, err := deployments.Update(&d); err != nil { 88 return errors.Annotatef(err, "updating labels for deployment %q", d.Name) 89 } 90 } 91 92 return nil 93 }