Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
aos
GitHub Repository: aos/grafana-agent
Path: blob/main/tools/smoke/internal/tasks.go
4095 views
1
package smoke
2
3
import (
4
"context"
5
"math/rand"
6
"time"
7
8
"github.com/go-kit/log"
9
"github.com/go-kit/log/level"
10
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
11
"k8s.io/client-go/kubernetes"
12
"k8s.io/utils/pointer"
13
)
14
15
// The Task interface represents some unit of work performed concurrently.
16
type Task interface {
17
Run(context.Context) error
18
}
19
20
type repeatingTask struct {
21
Task
22
frequency time.Duration
23
}
24
25
type deletePodTask struct {
26
logger log.Logger
27
clientset kubernetes.Interface
28
namespace string
29
pod string
30
}
31
32
func (t *deletePodTask) Run(ctx context.Context) error {
33
level.Debug(t.logger).Log("msg", "deleting pod")
34
if err := t.clientset.CoreV1().Pods(t.namespace).Delete(ctx, t.pod, metav1.DeleteOptions{
35
GracePeriodSeconds: pointer.Int64(0),
36
}); err != nil {
37
level.Error(t.logger).Log("msg", "failed to delete pod", "err", err)
38
}
39
return nil
40
}
41
42
type scaleDeploymentTask struct {
43
logger log.Logger
44
clientset kubernetes.Interface
45
namespace string
46
deployment string
47
maxReplicas int
48
minReplicas int
49
}
50
51
func (t *scaleDeploymentTask) Run(ctx context.Context) error {
52
newReplicas := rand.Intn(t.maxReplicas-t.minReplicas) + t.minReplicas
53
level.Debug(t.logger).Log("msg", "scaling replicas", "replicas", newReplicas)
54
55
scale, err := t.clientset.AppsV1().Deployments(t.namespace).
56
GetScale(ctx, t.deployment, metav1.GetOptions{})
57
if err != nil {
58
level.Error(t.logger).Log("msg", "failed to get autoscalingv1.Scale object", "err", err)
59
return nil
60
}
61
62
sc := *scale
63
sc.Spec.Replicas = int32(newReplicas)
64
_, err = t.clientset.AppsV1().Deployments(t.namespace).
65
UpdateScale(ctx, t.deployment, &sc, metav1.UpdateOptions{})
66
if err != nil {
67
level.Error(t.logger).Log("msg", "failed to scale deployment", "err", err)
68
}
69
return nil
70
}
71
72
type deletePodBySelectorTask struct {
73
logger log.Logger
74
clientset kubernetes.Interface
75
namespace string
76
selector string
77
}
78
79
func (t *deletePodBySelectorTask) Run(ctx context.Context) error {
80
list, err := t.clientset.CoreV1().Pods(t.namespace).List(ctx, metav1.ListOptions{
81
LabelSelector: t.selector,
82
})
83
if err != nil {
84
level.Error(t.logger).Log("msg", "failed to list pods", "err", err)
85
return nil
86
}
87
88
l := len(list.Items)
89
if l > 0 {
90
i := rand.Intn(l)
91
pod := list.Items[i].Name
92
level.Debug(t.logger).Log("msg", "deleting pod", "pod", pod)
93
if err := t.clientset.CoreV1().Pods(t.namespace).Delete(ctx, pod, metav1.DeleteOptions{
94
GracePeriodSeconds: pointer.Int64(0),
95
}); err != nil {
96
level.Error(t.logger).Log("msg", "failed to delete pod", "pod", pod, "err", err)
97
}
98
}
99
100
return nil
101
}
102
103