osbuild-composer/config: support specifying distro aliases

Add new configuration option `distro_aliases`, which is a map of
strings, allowing to specify distro name alias for supported
distributions.

Define aliases for RHEL major versions without the minor version
specified.

For now, the distro aliases map is not used by any API
implementation and it is ignored.

Signed-off-by: Tomáš Hozza <thozza@redhat.com>
This commit is contained in:
Tomáš Hozza 2024-01-09 22:20:41 +01:00 committed by Achilleas Koutsou
parent 43e87632fb
commit cdf57e5bc1
4 changed files with 38 additions and 9 deletions

View file

@ -69,6 +69,9 @@ func NewComposer(config *ComposerConfigFile, stateDir, cacheDir string) (*Compos
} }
c.distros = distrofactory.NewDefault() c.distros = distrofactory.NewDefault()
// TODO: set the c.config.DistroAliases to the distrofactory
// More work is needed to make the distro aliases behavior consistent for Weldr API,
// specifically for picking the correct repositories definition.
c.solver = dnfjson.NewBaseSolver(path.Join(c.cacheDir, "rpmmd")) c.solver = dnfjson.NewBaseSolver(path.Join(c.cacheDir, "rpmmd"))
c.solver.SetDNFJSONPath(c.config.DNFJson) c.solver.SetDNFJSONPath(c.config.DNFJson)

View file

@ -11,15 +11,16 @@ import (
) )
type ComposerConfigFile struct { type ComposerConfigFile struct {
Koji KojiAPIConfig `toml:"koji"` Koji KojiAPIConfig `toml:"koji"`
Worker WorkerAPIConfig `toml:"worker"` Worker WorkerAPIConfig `toml:"worker"`
WeldrAPI WeldrAPIConfig `toml:"weldr_api"` WeldrAPI WeldrAPIConfig `toml:"weldr_api"`
LogLevel string `toml:"log_level"` DistroAliases map[string]string `toml:"distro_aliases"`
LogFormat string `toml:"log_format"` LogLevel string `toml:"log_level"`
DNFJson string `toml:"dnf-json"` LogFormat string `toml:"log_format"`
SplunkHost string `env:"SPLUNK_HEC_HOST"` DNFJson string `toml:"dnf-json"`
SplunkPort string `env:"SPLUNK_HEC_PORT"` SplunkHost string `env:"SPLUNK_HEC_HOST"`
SplunkToken string `env:"SPLUNK_HEC_TOKEN"` SplunkPort string `env:"SPLUNK_HEC_PORT"`
SplunkToken string `env:"SPLUNK_HEC_TOKEN"`
} }
type KojiAPIConfig struct { type KojiAPIConfig struct {
@ -112,6 +113,11 @@ func GetDefaultConfig() *ComposerConfigFile {
}, },
}, },
}, },
DistroAliases: map[string]string{
"rhel-7": "rhel-7.9",
"rhel-8": "rhel-8.10",
"rhel-9": "rhel-9.4",
},
LogLevel: "info", LogLevel: "info",
LogFormat: "text", LogFormat: "text",
DNFJson: "/usr/libexec/osbuild-composer/dnf-json", DNFJson: "/usr/libexec/osbuild-composer/dnf-json",

View file

@ -61,6 +61,14 @@ func TestDefaultConfig(t *testing.T) {
} }
require.Equal(t, expectedWeldrAPIConfig, defaultConfig.WeldrAPI) require.Equal(t, expectedWeldrAPIConfig, defaultConfig.WeldrAPI)
expectedDistroAliases := map[string]string{
"rhel-7": "rhel-7.9",
"rhel-8": "rhel-8.10",
"rhel-9": "rhel-9.4",
}
require.Equal(t, expectedDistroAliases, defaultConfig.DistroAliases)
require.Equal(t, "text", defaultConfig.LogFormat) require.Equal(t, "text", defaultConfig.LogFormat)
} }
@ -90,6 +98,14 @@ func TestConfig(t *testing.T) {
require.Equal(t, []string{"https://sso.redhat.com/auth/realms/redhat-external/protocol/openid-connect/certs"}, config.Koji.JWTKeysURLs) require.Equal(t, []string{"https://sso.redhat.com/auth/realms/redhat-external/protocol/openid-connect/certs"}, config.Koji.JWTKeysURLs)
require.Equal(t, "", config.Koji.JWTKeysCA) require.Equal(t, "", config.Koji.JWTKeysCA)
require.Equal(t, "/var/lib/osbuild-composer/acl", config.Koji.JWTACLFile) require.Equal(t, "/var/lib/osbuild-composer/acl", config.Koji.JWTACLFile)
// 'rhel-8' and 'rhel-9' aliases are overwritten by the config file
expectedDistroAliases := map[string]string{
"rhel-7": "rhel-7.9", // this value is from the default config
"rhel-8": "rhel-8.9",
"rhel-9": "rhel-9.3",
}
require.Equal(t, expectedDistroAliases, config.DistroAliases)
} }
func TestWeldrDistrosImageTypeDenyList(t *testing.T) { func TestWeldrDistrosImageTypeDenyList(t *testing.T) {

View file

@ -18,3 +18,7 @@ image_type_denylist = [ "qcow2" ]
# overrides the default rhel-* configuration # overrides the default rhel-* configuration
[weldr_api.distros."rhel-*"] [weldr_api.distros."rhel-*"]
[distro_aliases]
rhel-8 = "rhel-8.9"
rhel-9 = "rhel-9.3"