-
Notifications
You must be signed in to change notification settings - Fork 0
/
deployment.go
105 lines (97 loc) · 3.85 KB
/
deployment.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
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
package kapi
import (
"context"
"log"
"strings"
"github.com/anilkusc/kinject/models"
corev1 "k8s.io/api/core/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/client-go/kubernetes"
)
func GetDeployment(client *kubernetes.Clientset, namespace string, name string) models.MyDeployment {
gotDeployment, err := client.AppsV1().Deployments(namespace).Get(context.TODO(), name, metav1.GetOptions{})
if err != nil {
log.Println(err)
}
deployment := models.MyDeployment{
Name: gotDeployment.Name,
Namespace: gotDeployment.Namespace,
Replicas: int(*gotDeployment.Spec.Replicas),
}
var environment models.MyEnvironment
var environments []models.MyEnvironment
for _, env := range gotDeployment.Spec.Template.Spec.Containers[0].Env {
environment.Key = env.Name
environment.Value = env.Value
environments = append(environments, environment)
}
deployment.Env = environments
return deployment
}
func ListDeployments(client *kubernetes.Clientset, namespace string) []models.MyDeployment {
var deployments []models.MyDeployment
var deployment models.MyDeployment
var environment models.MyEnvironment
var environments []models.MyEnvironment
listedDeployments, err := client.AppsV1().Deployments(namespace).List(context.TODO(), metav1.ListOptions{})
if err != nil {
log.Println(err)
}
for _, listedDeployment := range listedDeployments.Items {
deployment.Name = listedDeployment.Name
deployment.Namespace = listedDeployment.Namespace
deployment.Replicas = int(*listedDeployment.Spec.Replicas)
for _, listedEnv := range listedDeployment.Spec.Template.Spec.Containers[0].Env {
environment.Key = listedEnv.Name
environment.Value = listedEnv.Value
environments = append(environments, environment)
}
deployment.Env = environments
deployments = append(deployments, deployment)
}
return deployments
}
func PatchDeploymentEnv(client *kubernetes.Clientset, namespace string, deploymentName string, env string) error {
envs := strings.Split(env, ":")
key := envs[0]
value := envs[1]
gotDeployment, err := client.AppsV1().Deployments(namespace).Get(context.TODO(), deploymentName, metav1.GetOptions{})
if err != nil {
log.Println(err)
}
isKeyExist := false
envNumber := -1
for i, environment := range gotDeployment.Spec.Template.Spec.Containers[0].Env {
if environment.Name == key {
isKeyExist = true
envNumber = i
break
}
}
if isKeyExist {
gotDeployment.Spec.Template.Spec.Containers[0].Env[envNumber].Value = value
} else {
gotDeployment.Spec.Template.Spec.Containers[0].Env = append(gotDeployment.Spec.Template.Spec.Containers[0].Env, corev1.EnvVar{Name: key, Value: value})
}
client.AppsV1().Deployments(namespace).Update(context.TODO(), gotDeployment, metav1.UpdateOptions{})
return err
}
func DeleteDeploymentEnv(client *kubernetes.Clientset, namespace string, deploymentName string, env string) error {
envs := strings.Split(env, ":")
key := envs[0]
//value := envs[1]
gotDeployment, err := client.AppsV1().Deployments(namespace).Get(context.TODO(), deploymentName, metav1.GetOptions{})
if err != nil {
log.Println(err)
}
for i, environment := range gotDeployment.Spec.Template.Spec.Containers[0].Env {
if environment.Name == key {
//append(gotDeployment.Spec.Template.Spec.Containers[0].Env[:i], gotDeployment.Spec.Template.Spec.Containers[0].Env[i+1:]...)
gotDeployment.Spec.Template.Spec.Containers[0].Env[i] = gotDeployment.Spec.Template.Spec.Containers[0].Env[len(gotDeployment.Spec.Template.Spec.Containers[0].Env)-1]
gotDeployment.Spec.Template.Spec.Containers[0].Env = gotDeployment.Spec.Template.Spec.Containers[0].Env[:len(gotDeployment.Spec.Template.Spec.Containers[0].Env)-1]
break
}
}
client.AppsV1().Deployments(namespace).Update(context.TODO(), gotDeployment, metav1.UpdateOptions{})
return err
}