80 lines
1.9 KiB
Go
80 lines
1.9 KiB
Go
package main
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"os"
|
|
"regexp"
|
|
|
|
"github.com/moby/moby/client"
|
|
)
|
|
|
|
func isDciPlatform() (bool, []error) {
|
|
var result bool
|
|
var errors []error
|
|
// наличие сервиса dci
|
|
units, err := os.ReadDir("/run/systemd/units")
|
|
dciService := false
|
|
if err != nil {
|
|
err = fmt.Errorf("Ошибка доступа к директории systemd units: %s", err)
|
|
errors = append(errors, err)
|
|
err = nil
|
|
dciService = false
|
|
} else {
|
|
for _, unit := range units {
|
|
matched, _ := regexp.Match("dci.service", []byte(unit.Name()))
|
|
if matched {
|
|
dciService = true
|
|
}
|
|
}
|
|
}
|
|
// наличие config.json
|
|
configJson := false
|
|
files, err := os.ReadDir("/opt/ispsystem/dci/")
|
|
if err != nil {
|
|
err = fmt.Errorf("Ошибка при чтении директории opt ispsystem dci")
|
|
errors = append(errors, err)
|
|
err = nil
|
|
configJson = false
|
|
} else {
|
|
for _, file := range files {
|
|
matched, _ := regexp.Match("config.json", []byte(file.Name()))
|
|
if matched {
|
|
configJson = true
|
|
}
|
|
}
|
|
}
|
|
// запущенный контейнер dci_back
|
|
dciBack := false
|
|
apiClient, err := client.New(client.FromEnv)
|
|
if err != nil {
|
|
err = fmt.Errorf("Ошибка при создании docker клиента %s", err)
|
|
errors = append(errors, err)
|
|
err = nil
|
|
} else {
|
|
defer apiClient.Close()
|
|
containers, err := apiClient.ContainerList(context.Background(), client.ContainerListOptions{All: true})
|
|
if err != nil {
|
|
err = fmt.Errorf("Ошибка получения списка контейнеров : %s", err)
|
|
errors = append(errors, err)
|
|
err = nil
|
|
} else {
|
|
for _, ctr := range containers.Items {
|
|
if ctr.Names[0] == "/dci_back" {
|
|
dciBack = true
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if dciService {
|
|
result = true
|
|
} else if configJson {
|
|
result = true
|
|
} else if dciBack {
|
|
result = true
|
|
} else {
|
|
result = false
|
|
}
|
|
return result, errors
|
|
}
|