retry
This commit is contained in:
parent
b18dab5b49
commit
f759a44e04
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
79
main.go
79
main.go
|
@ -143,7 +143,7 @@ func listContainers() ([]Container, error) {
|
|||
}
|
||||
|
||||
func inspectContainer(containerID string) ([]string, []string, []string, []string, string, error) {
|
||||
cmd := exec.Command("docker", "inspect", "--format", `{{range .Config.Env}}{{println .}}{{end}}{{range .NetworkSettings.Networks}}{{println .}}{{end}}{{range .Mounts}}{{println .}}{{end}}{{range $p, $conf := .HostConfig.PortBindings}}{{println $p}}{{end}}{{.HostConfig.RestartPolicy.Name}}`, containerID)
|
||||
cmd := exec.Command("docker", "inspect", "--format", `{{json .Config.Env}} {{json .NetworkSettings.Networks}} {{json .Mounts}} {{json .HostConfig.PortBindings}} {{.HostConfig.RestartPolicy.Name}}`, containerID)
|
||||
var out bytes.Buffer
|
||||
cmd.Stdout = &out
|
||||
err := cmd.Run()
|
||||
|
@ -151,29 +151,74 @@ func inspectContainer(containerID string) ([]string, []string, []string, []strin
|
|||
return nil, nil, nil, nil, "", err
|
||||
}
|
||||
|
||||
lines := strings.Split(out.String(), "\n")
|
||||
|
||||
var envVars, networks, volumes, ports []string
|
||||
output := out.String()
|
||||
parts := strings.Split(output, " ")
|
||||
envVars, networks, volumes, ports := []string{}, []string{}, []string{}, []string{}
|
||||
restartPolicy := ""
|
||||
|
||||
for _, line := range lines {
|
||||
if strings.Contains(line, "=") {
|
||||
envVars = append(envVars, line)
|
||||
} else if strings.Contains(line, "Name:") && strings.Contains(line, "Driver:") {
|
||||
networks = append(networks, strings.TrimSpace(line))
|
||||
} else if strings.Contains(line, "Source:") && strings.Contains(line, "Destination:") {
|
||||
volume := strings.Split(line, "Destination:")[1]
|
||||
volumes = append(volumes, volume)
|
||||
} else if strings.Contains(line, "/tcp") || strings.Contains(line, "/udp") {
|
||||
ports = append(ports, line)
|
||||
} else if line != "" {
|
||||
restartPolicy = line
|
||||
}
|
||||
if len(parts) > 0 && parts[0] != "null" {
|
||||
envVars = parseJSONStringArray(parts[0])
|
||||
}
|
||||
if len(parts) > 1 && parts[1] != "null" {
|
||||
networks = parseJSONNetworkNames(parts[1])
|
||||
}
|
||||
if len(parts) > 2 && parts[2] != "null" {
|
||||
volumes = parseJSONVolumeMounts(parts[2])
|
||||
}
|
||||
if len(parts) > 3 && parts[3] != "null" {
|
||||
ports = parseJSONPorts(parts[3])
|
||||
}
|
||||
if len(parts) > 4 {
|
||||
restartPolicy = strings.Trim(parts[4], `"`)
|
||||
}
|
||||
|
||||
return envVars, networks, volumes, ports, restartPolicy, nil
|
||||
}
|
||||
|
||||
func parseJSONStringArray(jsonStr string) []string {
|
||||
jsonStr = strings.Trim(jsonStr, "[]")
|
||||
if jsonStr == "" {
|
||||
return []string{}
|
||||
}
|
||||
return strings.Split(jsonStr, ",")
|
||||
}
|
||||
|
||||
func parseJSONNetworkNames(jsonStr string) []string {
|
||||
var networkNames []string
|
||||
networkData := strings.Split(jsonStr, ":")
|
||||
for _, data := range networkData {
|
||||
if strings.Contains(data, "\"Name\"") {
|
||||
parts := strings.Split(data, "\"")
|
||||
networkNames = append(networkNames, parts[1])
|
||||
}
|
||||
}
|
||||
return networkNames
|
||||
}
|
||||
|
||||
func parseJSONVolumeMounts(jsonStr string) []string {
|
||||
var volumeMounts []string
|
||||
volumeData := strings.Split(jsonStr, "},{")
|
||||
for _, data := range volumeData {
|
||||
if strings.Contains(data, "\"Destination\"") {
|
||||
parts := strings.Split(data, "\"")
|
||||
volumeMounts = append(volumeMounts, parts[3])
|
||||
}
|
||||
}
|
||||
return volumeMounts
|
||||
}
|
||||
|
||||
func parseJSONPorts(jsonStr string) []string {
|
||||
var ports []string
|
||||
portData := strings.Split(jsonStr, "},{")
|
||||
for _, data := range portData {
|
||||
if strings.Contains(data, "\"HostPort\"") {
|
||||
parts := strings.Split(data, "\"")
|
||||
ports = append(ports, parts[3]+":"+parts[7])
|
||||
}
|
||||
}
|
||||
return ports
|
||||
}
|
||||
|
||||
func isDockerSwarmStack(stackName string, containers []Container) bool {
|
||||
for _, container := range containers {
|
||||
if strings.Contains(container.Name, ".") {
|
||||
|
|
Loading…
Reference in New Issue