-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathkubescaler.go
67 lines (58 loc) · 1.64 KB
/
kubescaler.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
62
63
64
65
66
67
package kubescaler
import (
"context"
"github.com/containerinfra/kube-pg-upgrade/pkg/kubeclient"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/client-go/kubernetes"
)
type KubeScaler struct {
client kubernetes.Interface
namespace string
}
func NewKubeScaler(namespace string) (*KubeScaler, error) {
k8sclient, err := kubeclient.GetClient()
if err != nil {
return nil, err
}
return &KubeScaler{
client: k8sclient,
namespace: namespace,
}, nil
}
func NewKubeScalerOrDie(namespace string) *KubeScaler {
client, err := NewKubeScaler(namespace)
if err != nil {
panic(err)
}
return client
}
func NewKubeScalerWithClient(namespace string, client kubernetes.Interface) *KubeScaler {
return &KubeScaler{
client: client,
namespace: namespace,
}
}
func (a *KubeScaler) ScaleDeployment(ctx context.Context, deploymentName string, replicas int32) error {
scale, err := a.client.AppsV1().Deployments(a.namespace).GetScale(ctx, deploymentName, metav1.GetOptions{})
if err != nil {
return err
}
scale.Spec.Replicas = replicas
_, err = a.client.AppsV1().Deployments(a.namespace).UpdateScale(ctx, deploymentName, scale, metav1.UpdateOptions{})
if err != nil {
return err
}
return nil
}
func (a *KubeScaler) ScaleStatefulSet(ctx context.Context, statefulSetName string, replicas int32) error {
scale, err := a.client.AppsV1().StatefulSets(a.namespace).GetScale(ctx, statefulSetName, metav1.GetOptions{})
if err != nil {
return err
}
scale.Spec.Replicas = replicas
_, err = a.client.AppsV1().StatefulSets(a.namespace).UpdateScale(ctx, statefulSetName, scale, metav1.UpdateOptions{})
if err != nil {
return err
}
return nil
}