mirror of
https://github.com/containers/podman.git
synced 2026-07-19 03:32:00 -04:00
Add podman farm build command that sends out builds to nodes defined in the farm, builds the images on the farm nodes, and pulls them back to the local machine to create a manifest list. Signed-off-by: Urvashi Mohnani <umohnani@redhat.com>
58 lines
1.8 KiB
Go
58 lines
1.8 KiB
Go
//go:build remote
|
|
// +build remote
|
|
|
|
package infra
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"sync"
|
|
|
|
"github.com/containers/podman/v4/pkg/bindings"
|
|
"github.com/containers/podman/v4/pkg/domain/entities"
|
|
"github.com/containers/podman/v4/pkg/domain/infra/tunnel"
|
|
)
|
|
|
|
var (
|
|
connectionMutex = &sync.Mutex{}
|
|
connection *context.Context
|
|
)
|
|
|
|
func newConnection(uri string, identity, farmNodeName string, machine bool) (context.Context, error) {
|
|
connectionMutex.Lock()
|
|
defer connectionMutex.Unlock()
|
|
|
|
// if farmNodeName given, then create a connection with the node so that we can send builds there
|
|
if connection == nil || farmNodeName != "" {
|
|
ctx, err := bindings.NewConnectionWithIdentity(context.Background(), uri, identity, machine)
|
|
if err != nil {
|
|
return ctx, err
|
|
}
|
|
connection = &ctx
|
|
}
|
|
return *connection, nil
|
|
}
|
|
|
|
func NewContainerEngine(facts *entities.PodmanConfig) (entities.ContainerEngine, error) {
|
|
switch facts.EngineMode {
|
|
case entities.ABIMode:
|
|
return nil, fmt.Errorf("direct runtime not supported")
|
|
case entities.TunnelMode:
|
|
ctx, err := newConnection(facts.URI, facts.Identity, "", facts.MachineMode)
|
|
return &tunnel.ContainerEngine{ClientCtx: ctx}, err
|
|
}
|
|
return nil, fmt.Errorf("runtime mode '%v' is not supported", facts.EngineMode)
|
|
}
|
|
|
|
// NewImageEngine factory provides a libpod runtime for image-related operations
|
|
func NewImageEngine(facts *entities.PodmanConfig) (entities.ImageEngine, error) {
|
|
switch facts.EngineMode {
|
|
case entities.ABIMode:
|
|
return nil, fmt.Errorf("direct image runtime not supported")
|
|
case entities.TunnelMode:
|
|
ctx, err := newConnection(facts.URI, facts.Identity, facts.FarmNodeName, facts.MachineMode)
|
|
return &tunnel.ImageEngine{ClientCtx: ctx, FarmNode: tunnel.FarmNode{NodeName: facts.FarmNodeName}}, err
|
|
}
|
|
return nil, fmt.Errorf("runtime mode '%v' is not supported", facts.EngineMode)
|
|
}
|