diff --git a/cmd/osbuild-worker/jobimpl-osbuild.go b/cmd/osbuild-worker/jobimpl-osbuild.go index 5aadc7362..0be03ffe4 100644 --- a/cmd/osbuild-worker/jobimpl-osbuild.go +++ b/cmd/osbuild-worker/jobimpl-osbuild.go @@ -28,6 +28,7 @@ import ( "github.com/osbuild/osbuild-composer/internal/cloud/awscloud" "github.com/osbuild/osbuild-composer/internal/cloud/gcp" + "github.com/osbuild/osbuild-composer/internal/osbuildexecutor" "github.com/osbuild/osbuild-composer/internal/target" "github.com/osbuild/osbuild-composer/internal/upload/azure" "github.com/osbuild/osbuild-composer/internal/upload/koji" @@ -75,9 +76,15 @@ type PulpConfiguration struct { ServerAddress string } +type ExecutorConfiguration struct { + Type string + IAMProfile string +} + type OSBuildJobImpl struct { Store string Output string + OSBuildExecutor ExecutorConfiguration KojiServers map[string]kojiServer GCPConfig GCPConfiguration AzureConfig AzureConfiguration @@ -476,7 +483,16 @@ func (impl *OSBuildJobImpl) Run(job worker.Job) error { } // Run osbuild and handle two kinds of errors - osbuildJobResult.OSBuildOutput, err = osbuild.RunOSBuild(jobArgs.Manifest, impl.Store, outputDirectory, exports, nil, extraEnv, true, os.Stderr) + var executor osbuildexecutor.Executor + switch impl.OSBuildExecutor.Type { + case "host": + executor = osbuildexecutor.NewHostExecutor() + default: + osbuildJobResult.JobError = clienterrors.WorkerClientError(clienterrors.ErrorInvalidConfig, "No osbuild executor defined", nil) + return err + } + + osbuildJobResult.OSBuildOutput, err = executor.RunOSBuild(jobArgs.Manifest, impl.Store, outputDirectory, exports, nil, extraEnv, true, os.Stderr) // First handle the case when "running" osbuild failed if err != nil { osbuildJobResult.JobError = clienterrors.WorkerClientError(clienterrors.ErrorBuildJob, "osbuild build failed", err) diff --git a/cmd/osbuild-worker/main.go b/cmd/osbuild-worker/main.go index 2ce068cde..8cb697941 100644 --- a/cmd/osbuild-worker/main.go +++ b/cmd/osbuild-worker/main.go @@ -471,8 +471,11 @@ func main() { // non-depsolve job jobImpls := map[string]JobImplementation{ worker.JobTypeOSBuild: &OSBuildJobImpl{ - Store: store, - Output: output, + Store: store, + Output: output, + OSBuildExecutor: ExecutorConfiguration{ + Type: config.OSBuildExecutor.Type, + }, KojiServers: kojiServers, GCPConfig: gcpConfig, AzureConfig: azureConfig, diff --git a/internal/osbuildexecutor/osbuild-executor.go b/internal/osbuildexecutor/osbuild-executor.go new file mode 100644 index 000000000..14884481c --- /dev/null +++ b/internal/osbuildexecutor/osbuild-executor.go @@ -0,0 +1,11 @@ +package osbuildexecutor + +import ( + "io" + + "github.com/osbuild/images/pkg/osbuild" +) + +type Executor interface { + RunOSBuild(manifest []byte, store, outputDirectory string, exports, checkpoints, extraEnv []string, result bool, errorWriter io.Writer) (*osbuild.Result, error) +} diff --git a/internal/osbuildexecutor/runner-impl-host.go b/internal/osbuildexecutor/runner-impl-host.go new file mode 100644 index 000000000..037d909ed --- /dev/null +++ b/internal/osbuildexecutor/runner-impl-host.go @@ -0,0 +1,18 @@ +package osbuildexecutor + +import ( + "io" + + "github.com/osbuild/images/pkg/osbuild" +) + +type hostExecutor struct{} + +func (he *hostExecutor) RunOSBuild(manifest []byte, store, outputDirectory string, exports, checkpoints, + extraEnv []string, result bool, errorWriter io.Writer) (*osbuild.Result, error) { + return osbuild.RunOSBuild(manifest, store, outputDirectory, exports, checkpoints, extraEnv, result, errorWriter) +} + +func NewHostExecutor() Executor { + return &hostExecutor{} +}