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