github.com/juju/juju@v0.0.0-20240430160146-1752b71fcf00/caas/kubernetes/provider/modeloperator_upgrade.go (about) 1 // Copyright 2020 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package provider 5 6 import ( 7 "github.com/juju/names/v5" 8 "github.com/juju/version/v2" 9 "k8s.io/client-go/kubernetes" 10 ) 11 12 type upgradeCAASModelOperatorBridge struct { 13 clientFn func() kubernetes.Interface 14 namespaceFn func() string 15 isLegacyFn func() bool 16 } 17 18 type UpgradeCAASModelOperatorBroker interface { 19 // Client returns a Kubernetes client associated with the current broker's 20 // cluster 21 Client() kubernetes.Interface 22 23 // IsLegacyLabels indicates if this provider is operating on a legacy label schema 24 IsLegacyLabels() bool 25 26 // Namespace returns the targeted Kubernetes namespace for this broker 27 Namespace() string 28 } 29 30 func (u *upgradeCAASModelOperatorBridge) Client() kubernetes.Interface { 31 return u.clientFn() 32 } 33 34 func (u *upgradeCAASModelOperatorBridge) IsLegacyLabels() bool { 35 return u.isLegacyFn() 36 } 37 38 func modelOperatorUpgrade( 39 operatorName string, 40 vers version.Number, 41 broker UpgradeCAASModelOperatorBroker) error { 42 return upgradeDeployment( 43 operatorName, 44 "", 45 vers, 46 broker.IsLegacyLabels(), 47 broker.Client().AppsV1().Deployments(broker.Namespace())) 48 } 49 50 func (u *upgradeCAASModelOperatorBridge) Namespace() string { 51 return u.namespaceFn() 52 } 53 54 func (k *kubernetesClient) upgradeModelOperator(agentTag names.Tag, vers version.Number) error { 55 broker := &upgradeCAASModelOperatorBridge{ 56 clientFn: k.client, 57 namespaceFn: k.GetCurrentNamespace, 58 isLegacyFn: k.IsLegacyLabels, 59 } 60 return modelOperatorUpgrade(modelOperatorName, vers, broker) 61 }