/
tools.go
115 lines (101 loc) · 3.12 KB
/
tools.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
106
107
108
109
110
111
112
113
114
115
package dockerutils
import (
"fmt"
"os"
"os/exec"
"github.com/6zacode-toolbox/docker-agent/internal/logutils"
"github.com/6zacode-toolbox/docker-agent/internal/vo"
docker "github.com/6zacode-toolbox/docker-operator/operator/api/v1"
funk "github.com/thoas/go-funk"
)
func ExecuteDockerInfo() (docker.DockerInfo, error) {
blankObject := docker.DockerInfo{}
cmd := exec.Command("/home/app/docker_info.sh")
stdout, err := cmd.Output()
logutils.Logger.Info(string(stdout))
if err != nil {
logutils.Logger.Error(fmt.Sprintf("%#v", err))
return blankObject, err
}
logutils.Logger.Info(string(stdout))
result, err := vo.TranslateToDockerInfo(stdout)
if err != nil {
logutils.Logger.Error(fmt.Sprintf("%#v", err))
return blankObject, err
}
return result, nil
}
func ExecuteDockerPS() ([]docker.DockerContainerSummary, error) {
blankObject := []docker.DockerContainerSummary{}
cmd := exec.Command("/home/app/docker_ps.sh")
stdout, err := cmd.Output()
logutils.Logger.Info(string(stdout))
if err != nil {
logutils.Logger.Error(fmt.Sprintf("%#v", err))
return blankObject, err
}
logutils.Logger.Info(string(stdout))
result, err := vo.TranslateToDockerContainerSummarys(stdout)
if err != nil {
logutils.Logger.Error(fmt.Sprintf("%#v", err))
return blankObject, err
}
return result, nil
}
func ExecuteCompose() (docker.DockerComposeRunnerStatus, error) {
blankObject := docker.DockerComposeRunnerStatus{}
// Setup variables for SHELL that are not already on the pod by the controller
// Controller should provide such variables
cmd := exec.Command("/home/app/docker_compose.sh")
stdout, err := cmd.Output()
logutils.Logger.Info(string(stdout))
if err != nil {
logutils.Logger.Error(err.Error())
return blankObject, err
}
logutils.Logger.Info(string(stdout))
beforeStatus, err := ReadComposeStatus("/var/tmp/before.json")
if err != nil {
logutils.Logger.Error(err.Error())
return blankObject, err
}
afterStatus, err := ReadComposeStatus("/var/tmp/after.json")
if err != nil {
logutils.Logger.Error(err.Error())
return blankObject, err
}
//mappingBefore := funk.ToMap(beforeStatus, "ConfigFiles")
//keysBefore := reflect.ValueOf(mappingBefore).MapKeys()
var oldStatus []string
for _, v := range beforeStatus {
oldStatus = append(oldStatus, v.Name)
}
var newStatus []docker.ComposeStatus
logutils.Logger.Info(fmt.Sprintf("keysBefore: %#v", oldStatus))
for _, v := range afterStatus {
logutils.Logger.Info(fmt.Sprintf("v.ConfigFiles: %#v", v.Name))
if !funk.Contains(oldStatus, v.Name) {
newStatus = append(newStatus, v)
logutils.Logger.Info(fmt.Sprintf("newStatus: %#v", v))
}
}
result := docker.DockerComposeRunnerStatus{
ComposeStatus: newStatus,
Instanced: true,
}
return result, nil
}
func ReadComposeStatus(file string) ([]docker.ComposeStatus, error) {
afterComposeStatus, err := os.ReadFile(file)
if err != nil {
logutils.Logger.Error(err.Error())
return nil, err
}
logutils.Logger.Info(string(afterComposeStatus))
status, err := vo.TranslateToComposeStatusArray(afterComposeStatus)
if err != nil {
logutils.Logger.Error(err.Error())
return nil, err
}
return status, nil
}