bd0f276d30
Signed-off-by: Guillaume Coguiec <guillaume@logical.work>
63 lines
1.3 KiB
Go
63 lines
1.3 KiB
Go
package buildkitd
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"os/exec"
|
|
"strconv"
|
|
"strings"
|
|
|
|
"github.com/docker/distribution/reference"
|
|
)
|
|
|
|
func getBuildkitInformation(ctx context.Context) (*BuildkitInformation, error) {
|
|
formatString := "{{.Config.Image}};{{.State.Running}};{{if index .NetworkSettings.Networks \"host\"}}{{\"true\"}}{{else}}{{\"false\"}}{{end}}"
|
|
cmd := exec.CommandContext(ctx,
|
|
"docker",
|
|
"inspect",
|
|
"--format",
|
|
formatString,
|
|
containerName,
|
|
)
|
|
output, err := cmd.CombinedOutput()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
s := strings.Split(string(output), ";")
|
|
|
|
// Retrieve the tag
|
|
ref, err := reference.ParseNormalizedNamed(strings.TrimSpace(s[0]))
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
tag, ok := ref.(reference.Tagged)
|
|
if !ok {
|
|
return nil, fmt.Errorf("failed to parse image: %s", output)
|
|
}
|
|
|
|
// Retrieve the state
|
|
isActive, err := strconv.ParseBool(strings.TrimSpace(s[1]))
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
// Retrieve the check on if the host network is configured
|
|
haveHostNetwork, err := strconv.ParseBool(strings.TrimSpace(s[2]))
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return &BuildkitInformation{
|
|
Version: tag.Tag(),
|
|
IsActive: isActive,
|
|
HaveHostNetwork: haveHostNetwork,
|
|
}, nil
|
|
}
|
|
|
|
type BuildkitInformation struct {
|
|
Version string
|
|
IsActive bool
|
|
HaveHostNetwork bool
|
|
}
|