From d403f18b2a1f7f784e362c8668092cb4d8b685df Mon Sep 17 00:00:00 2001 From: James Shubin Date: Tue, 15 Oct 2024 19:04:17 -0400 Subject: [PATCH] util: distro: Put distro specific data in this util package Try and see if we can put all our distro specific stuff in here... --- engine/resources/virt_builder.go | 24 ++++---------- util/distro/distro.go | 57 ++++++++++++++++++++++++++++++++ 2 files changed, 64 insertions(+), 17 deletions(-) create mode 100644 util/distro/distro.go diff --git a/engine/resources/virt_builder.go b/engine/resources/virt_builder.go index 7447fd2b..46648720 100644 --- a/engine/resources/virt_builder.go +++ b/engine/resources/virt_builder.go @@ -48,6 +48,7 @@ import ( "github.com/purpleidea/mgmt/engine" "github.com/purpleidea/mgmt/engine/traits" archUtil "github.com/purpleidea/mgmt/util/arch" + distroUtil "github.com/purpleidea/mgmt/util/distro" "github.com/purpleidea/mgmt/util/errwrap" "github.com/purpleidea/mgmt/util/recwatch" ) @@ -217,25 +218,14 @@ func (obj *VirtBuilderRes) getGuestfs() (string, error) { // that we can easily run mgmt. func (obj *VirtBuilderRes) getDeps() ([]string, error) { // TODO: Improve this function as things evolve. - - if strings.HasPrefix(obj.OSVersion, "fedora-") { - return []string{ - "augeas-devel", - "libvirt-devel", - "PackageKit", - }, nil + distro := strings.TrimSuffix(obj.OSVersion, "-") // fedora- or debian- + packages, exists := distroUtil.DistroToBootstrapPackages(distro) + if !exists { + // TODO: patches welcome! + return nil, fmt.Errorf("os version is not supported") } - if strings.HasPrefix(obj.OSVersion, "debian-") { - return []string{ - "libaugeas-dev", - "libvirt-dev", - "packagekit-tools", - }, nil - } - - // TODO: patches welcome! - return nil, fmt.Errorf("os version is not supported") + return packages, nil } // Default returns some sensible defaults for this resource. diff --git a/util/distro/distro.go b/util/distro/distro.go new file mode 100644 index 00000000..79fe593b --- /dev/null +++ b/util/distro/distro.go @@ -0,0 +1,57 @@ +// Mgmt +// Copyright (C) 2013-2024+ James Shubin and the project contributors +// Written by James Shubin and the project contributors +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . +// +// Additional permission under GNU GPL version 3 section 7 +// +// If you modify this program, or any covered work, by linking or combining it +// with embedded mcl code and modules (and that the embedded mcl code and +// modules which link with this program, contain a copy of their source code in +// the authoritative form) containing parts covered by the terms of any other +// license, the licensors of this program grant you additional permission to +// convey the resulting work. Furthermore, the licensors of this program grant +// the original author, James Shubin, additional permission to update this +// additional permission if he deems it necessary to achieve the goals of this +// additional permission. + +// Package distro is for utilities that deal with os/distro things. Best to keep +// these all in one place so that adding this data happens all in the same file. +package distro + +var ( + // MapDistroToBootstrapPackages is a map of distro to packages needed to + // run our software. + MapDistroToBootstrapPackages = map[string][]string{ + // TODO: add more values + "debian": { + "libaugeas-dev", + "libvirt-dev", + "packagekit-tools", + }, + "fedora": { + "augeas-devel", + "libvirt-devel", + "PackageKit", + }, + } +) + +// DistroToBootstrapPackages returns the list of packages corresponding to the +// distro for bootstrapping. This returns false if the value doesn't exist. +func DistroToBootstrapPackages(distro string) ([]string, bool) { + l, exists := MapDistroToBootstrapPackages[distro] + return l, exists +}