From b8967d53bc7011b5fe5823ef78d3ecf4c81c6fb8 Mon Sep 17 00:00:00 2001 From: "Brian C. Lane" Date: Fri, 2 Feb 2024 16:15:09 -0800 Subject: [PATCH] Move RepoRegistry setup into Composer This is so that both the weldr and cloud api's can use it as the source of their repositories. --- cmd/osbuild-composer/composer.go | 15 ++++++++++++--- cmd/osbuild-composer/main.go | 2 +- internal/weldr/api.go | 10 +--------- 3 files changed, 14 insertions(+), 13 deletions(-) diff --git a/cmd/osbuild-composer/composer.go b/cmd/osbuild-composer/composer.go index a0ebc45bd..e4fd0d495 100644 --- a/cmd/osbuild-composer/composer.go +++ b/cmd/osbuild-composer/composer.go @@ -23,6 +23,7 @@ import ( "github.com/osbuild/images/pkg/distrofactory" "github.com/osbuild/images/pkg/dnfjson" + "github.com/osbuild/images/pkg/reporegistry" "github.com/osbuild/osbuild-composer/internal/auth" "github.com/osbuild/osbuild-composer/internal/cloudapi" v2 "github.com/osbuild/osbuild-composer/internal/cloudapi/v2" @@ -37,6 +38,7 @@ type Composer struct { cacheDir string logger *log.Logger distros *distrofactory.Factory + repos *reporegistry.RepoRegistry solver *dnfjson.BaseSolver @@ -74,9 +76,17 @@ func NewComposer(config *ComposerConfigFile, stateDir, cacheDir string) (*Compos return nil, fmt.Errorf("failed to configure distro aliases: %v", err) } + c.repos, err = reporegistry.New(repositoryConfigs) + if err != nil { + return nil, fmt.Errorf("error loading repository definitions: %v", err) + } + c.solver = dnfjson.NewBaseSolver(path.Join(c.cacheDir, "rpmmd")) c.solver.SetDNFJSONPath(c.config.DNFJson) + // Clean up the cache, removes unknown distros and files + c.solver.CleanupOldCacheDirs(c.repos.ListDistros()) + var jobs jobqueue.JobQueue if config.Worker.PGDatabase != "" { dbURL := fmt.Sprintf("postgres://%s:%s@%s:%s/%s?sslmode=%s", @@ -117,9 +127,8 @@ func NewComposer(config *ComposerConfigFile, stateDir, cacheDir string) (*Compos return &c, nil } -func (c *Composer) InitWeldr(repoPaths []string, weldrListener net.Listener, - distrosImageTypeDenylist map[string][]string) (err error) { - c.weldr, err = weldr.New(repoPaths, c.stateDir, c.solver, c.distros, c.logger, c.workers, distrosImageTypeDenylist) +func (c *Composer) InitWeldr(weldrListener net.Listener, distrosImageTypeDenylist map[string][]string) (err error) { + c.weldr, err = weldr.New(c.repos, c.stateDir, c.solver, c.distros, c.logger, c.workers, distrosImageTypeDenylist) if err != nil { return err } diff --git a/cmd/osbuild-composer/main.go b/cmd/osbuild-composer/main.go index ebf5fe307..3c1eba7e9 100644 --- a/cmd/osbuild-composer/main.go +++ b/cmd/osbuild-composer/main.go @@ -114,7 +114,7 @@ func main() { logrus.Fatal("The osbuild-composer.socket unit is misconfigured. It should contain two sockets.") } - err = composer.InitWeldr(repositoryConfigs, l[0], config.weldrDistrosImageTypeDenyList()) + err = composer.InitWeldr(l[0], config.weldrDistrosImageTypeDenyList()) if err != nil { logrus.Fatalf("Error initializing weldr API: %v", err) } diff --git a/internal/weldr/api.go b/internal/weldr/api.go index 9ef7ad449..b233e8dcc 100644 --- a/internal/weldr/api.go +++ b/internal/weldr/api.go @@ -156,7 +156,7 @@ func NewTestAPI(solver *dnfjson.BaseSolver, rr *reporegistry.RepoRegistry, return setupRouter(api) } -func New(repoPaths []string, stateDir string, solver *dnfjson.BaseSolver, df *distrofactory.Factory, +func New(rr *reporegistry.RepoRegistry, stateDir string, solver *dnfjson.BaseSolver, df *distrofactory.Factory, logger *log.Logger, workers *worker.Server, distrosImageTypeDenylist map[string][]string) (*API, error) { if logger == nil { logger = log.New(os.Stdout, "", 0) @@ -168,14 +168,6 @@ func New(repoPaths []string, stateDir string, solver *dnfjson.BaseSolver, df *di } hostArch := arch.Current().String() - rr, err := reporegistry.New(repoPaths) - if err != nil { - return nil, fmt.Errorf("error loading repository definitions: %v", err) - } - - // Clean up the cache, removes unknown distros and files - solver.CleanupOldCacheDirs(rr.ListDistros()) - hostDistro := df.GetDistro(hostDistroName) if hostDistro != nil { // get canonical distro name if the host distro is supported