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  }