From 0d4fac101cd11c1e74055f9da5897cafbccc6b30 Mon Sep 17 00:00:00 2001 From: Christian Kellner Date: Sat, 9 Jul 2022 23:32:31 +0200 Subject: [PATCH] weldr: support container embedding Add support for resolving containers via `container.Resolvers`. NB: this happens synchronously in the compose handler, very much like dep-solving. --- internal/weldr/api.go | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/internal/weldr/api.go b/internal/weldr/api.go index 6058e0168..fd7ee122f 100644 --- a/internal/weldr/api.go +++ b/internal/weldr/api.go @@ -32,6 +32,7 @@ import ( "github.com/osbuild/osbuild-composer/internal/blueprint" "github.com/osbuild/osbuild-composer/internal/common" + "github.com/osbuild/osbuild-composer/internal/container" "github.com/osbuild/osbuild-composer/internal/distro" "github.com/osbuild/osbuild-composer/internal/distroregistry" "github.com/osbuild/osbuild-composer/internal/dnfjson" @@ -2163,6 +2164,16 @@ func (api *API) depsolveBlueprintForImageType(bp blueprint.Blueprint, options di return depsolvedSets, nil } +func (api *API) resolveContainersForImageType(bp blueprint.Blueprint, imageType distro.ImageType) ([]container.Spec, error) { + resolver := container.NewResolver(imageType.Arch().Name()) + + for _, c := range bp.Containers { + resolver.Add(c.Source, c.Name, c.TLSVerify) + } + + return resolver.Finish() +} + // Schedule new compose by first translating the appropriate blueprint into a pipeline and then // pushing it into the channel for waiting builds. func (api *API) composeHandler(writer http.ResponseWriter, request *http.Request, params httprouter.Params) { @@ -2333,11 +2344,21 @@ func (api *API) composeHandler(writer http.ResponseWriter, request *http.Request return } + containerSpecs, err := api.resolveContainersForImageType(*bp, imageType) + if err != nil { + errors := responseError{ + ID: "ContainerResolveError", + Msg: err.Error(), + } + statusResponseError(writer, http.StatusInternalServerError, errors) + return + } + manifest, err := imageType.Manifest(bp.Customizations, options, imageRepos, packageSets, - nil, + containerSpecs, seed) if err != nil { errors := responseError{