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 }