Documentation
¶
Index ¶
- Constants
- type BindMount
- type Capabilities
- type Config
- type KubernetesRunnerConfig
- type KubernetesRunnerConfigOptions
- type KubernetesRunnerConfigPodTemplate
- type Loader
- type Runner
- func BubblewrapRunner(logger log.Logger) Runner
- func DockerRunner(logger log.Logger) Runner
- func GetRunner(ctx context.Context, s string, log log.Logger) (Runner, error)
- func KubernetesRunner(_ context.Context, logger log.Logger) (Runner, error)
- func LimaRunner(ctx context.Context, logger log.Logger) (Runner, error)
Constants ¶
const ( // DefaultWorkspaceDir is the default path to the workspace directory in the runner's environment. DefaultWorkspaceDir = "/home/build" // DefaultCacheDir is the default path to the cache directory in the runner's environment. DefaultCacheDir = "/var/cache/melange" // DefaultResolvConfPath is the default path to the resolv.conf file in the runner's environment. DefaultResolvConfPath = "/etc/resolv.conf" )
const ( KubernetesName = "kubernetes" KubernetesConfigFileName = ".melange.k8s.yaml" )
const BubblewrapName = "bubblewrap"
const DockerName = "docker"
const (
LimaName = "lima"
)
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type Capabilities ¶
type Capabilities struct {
Networking bool
}
type Config ¶
type Config struct { PackageName string Mounts []BindMount Capabilities Capabilities Logger log.Logger Environment map[string]string ImgRef string PodID string Arch apko_types.Architecture CPU, Memory string Timeout time.Duration }
type KubernetesRunnerConfig ¶ added in v0.4.0
type KubernetesRunnerConfig struct { Provider string `json:"provider" yaml:"provider"` Context string `json:"context" yaml:"context"` Repo string `json:"repo" yaml:"repo"` Namespace string `json:"namespace" yaml:"namespace"` Annotations map[string]string `json:"annotations,omitempty" yaml:"annotations,omitempty"` Labels map[string]string `json:"labels,omitempty" yaml:"labels,omitempty"` StartTimeout metav1.Duration `json:"startTimeout" yaml:"startTimeout" split_words:"true"` // This field and everything below it is ignored by the environment variable parser PodTemplate *KubernetesRunnerConfigPodTemplate `json:"podTemplate,omitempty" yaml:"podTemplate,omitempty" ignored:"true"` // contains filtered or unexported fields }
KubernetesRunnerConfig handles the configuration for the Kubernetes runner It sources from various locations, in the following order of precedence:
- The "global" config file
- Defaults
TODO: Add loaders from package config and environment
func NewKubernetesConfig ¶ added in v0.4.0
func NewKubernetesConfig(opt ...KubernetesRunnerConfigOptions) (*KubernetesRunnerConfig, error)
NewKubernetesConfig returns a default Kubernetes runner config setup
type KubernetesRunnerConfigOptions ¶ added in v0.4.0
type KubernetesRunnerConfigOptions func(*KubernetesRunnerConfig)
func WithKubernetesRunnerConfigBaseConfigFile ¶ added in v0.4.0
func WithKubernetesRunnerConfigBaseConfigFile(path string) KubernetesRunnerConfigOptions
WithKubernetesRunnerConfigBaseConfigFile sets the path to a config file with KubernetesRunner-specific options
type KubernetesRunnerConfigPodTemplate ¶ added in v0.4.0
type KubernetesRunnerConfigPodTemplate struct { ServiceAccountName string `json:"serviceAccountName,omitempty" yaml:"serviceAccountName,omitempty"` NodeSelector map[string]string `json:"nodeSelector,omitempty" yaml:"nodeSelector,omitempty"` Env []corev1.EnvVar `json:"env,omitempty" yaml:"env,omitempty"` Affinity *corev1.Affinity `json:"affinity,omitempty" yaml:"affinity,omitempty"` RuntimeClassName *string `json:"runtimeClassName,omitempty" yaml:"runtimeClassName,omitempty"` Volumes []corev1.Volume `json:"volumes,omitempty" yaml:"volumes,omitempty"` VolumeMounts []corev1.VolumeMount `json:"volumeMounts,omitempty" yaml:"volumeMounts,omitempty"` }
type Loader ¶ added in v0.4.0
type Loader interface {
LoadImage(ctx context.Context, layer v1.Layer, arch apko_types.Architecture, bc *apko_build.Context) (ref string, err error)
}
type Runner ¶
type Runner interface { Name() string TestUsability(ctx context.Context) bool // OCIImageLoader returns a Loader that will load an OCI image from a stream. // It should return the Loader, which will be used to load the provided image // as a tar stream into the Loader. That image will be used as the root when StartPod() the container. OCIImageLoader() Loader StartPod(ctx context.Context, cfg *Config) error Run(ctx context.Context, cfg *Config, cmd ...string) error TerminatePod(ctx context.Context, cfg *Config) error // TempDir returns the base for temporary directory, or "" if whatever is provided by the system is fine TempDir() string // WorkspaceTar returns an io.ReadCloser that can be used to read the status of the workspace. // The io.ReadCloser itself is a tar stream, which can be written to an io.Writer as is, // or passed to an fs.FS processor WorkspaceTar(ctx context.Context, cfg *Config) (io.ReadCloser, error) }
func BubblewrapRunner ¶
BubblewrapRunner returns a Bubblewrap Runner implementation.
func DockerRunner ¶
DockerRunner returns a Docker Runner implementation.
func KubernetesRunner ¶ added in v0.4.0
func LimaRunner ¶ added in v0.4.0
LimaRunner returns a lima with nerdctl Runner implementation. It uses the limactl CLI to manage the VM, and lima CLI to execute commands inside the VM. This could be replaced at some point by a lima library, when such a thing exists. For now, most commands that we use - limactl start, limactl stop, limactl delete, limactl list, lima nerctl run - are implemented as logic in github.com/lima-vm/lima/cmd rather than as a library surface.