podman-build/pkg/domain/infra/tunnel/farm.go
2025-10-11 12:30:35 +09:00

47 lines
1.5 KiB
Go

package tunnel
import (
"context"
"fmt"
"github.com/containers/podman/v5/pkg/bindings/system"
"github.com/containers/podman/v5/pkg/domain/entities"
)
const (
remoteFarmImageBuilderDriver = "podman-remote"
)
// FarmNodeName returns the remote engine's name.
func (ir *ImageEngine) FarmNodeName(ctx context.Context) string {
return ir.NodeName
}
// FarmNodeDriver returns a description of the image builder driver
func (ir *ImageEngine) FarmNodeDriver(ctx context.Context) string {
return remoteFarmImageBuilderDriver
}
func (ir *ImageEngine) fetchInfo(_ context.Context) (os, arch, variant string, nativePlatforms []string, err error) {
engineInfo, err := system.Info(ir.ClientCtx, &system.InfoOptions{})
if err != nil {
return "", "", "", nil, fmt.Errorf("retrieving host info from %q: %w", ir.NodeName, err)
}
nativePlatform := engineInfo.Host.OS + "/" + engineInfo.Host.Arch
if engineInfo.Host.Variant != "" {
nativePlatform = nativePlatform + "/" + engineInfo.Host.Variant
}
return engineInfo.Host.OS, engineInfo.Host.Arch, engineInfo.Host.Variant, []string{nativePlatform}, nil
}
// FarmNodeInspect returns information about the remote engines in the farm
func (ir *ImageEngine) FarmNodeInspect(ctx context.Context) (*entities.FarmInspectReport, error) {
ir.platforms.Do(func() {
ir.os, ir.arch, ir.variant, ir.nativePlatforms, ir.platformsErr = ir.fetchInfo(ctx)
})
return &entities.FarmInspectReport{NativePlatforms: ir.nativePlatforms,
OS: ir.os,
Arch: ir.arch,
Variant: ir.variant}, ir.platformsErr
}