Weldr API: make Image Type denylist distribution-specific
Change the Image Type denylist in Weldr API from being applied to all distributions to being distribution-specific. A special name `*` can be used in the configuration to match any distribution or any image type. Modify NEWS entry and unit tests to reflect this change. Signed-off-by: Tomas Hozza <thozza@redhat.com>
This commit is contained in:
parent
076bbc5456
commit
b150d57c18
8 changed files with 160 additions and 62 deletions
|
|
@ -89,8 +89,9 @@ func NewComposer(config *ComposerConfigFile, stateDir, cacheDir string, logger *
|
|||
return &c, nil
|
||||
}
|
||||
|
||||
func (c *Composer) InitWeldr(repoPaths []string, weldrListener net.Listener, imageTypeDenylist []string) (err error) {
|
||||
c.weldr, err = weldr.New(repoPaths, c.stateDir, c.rpm, c.distros, c.logger, c.workers, imageTypeDenylist)
|
||||
func (c *Composer) InitWeldr(repoPaths []string, weldrListener net.Listener,
|
||||
distrosImageTypeDenylist map[string][]string) (err error) {
|
||||
c.weldr, err = weldr.New(repoPaths, c.stateDir, c.rpm, c.distros, c.logger, c.workers, distrosImageTypeDenylist)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
|
|
|||
|
|
@ -29,10 +29,28 @@ type ComposerConfigFile struct {
|
|||
IdentityFilter []string `toml:"identity_filter"`
|
||||
} `toml:"composer_api"`
|
||||
WeldrAPI struct {
|
||||
ImageTypeDenylist []string `toml:"image_type_denylist"`
|
||||
DistroConfigs map[string]WeldrDistroConfig `toml:"distros"`
|
||||
} `toml:"weldr_api"`
|
||||
}
|
||||
|
||||
type WeldrDistroConfig struct {
|
||||
ImageTypeDenyList []string `toml:"image_type_denylist"`
|
||||
}
|
||||
|
||||
// weldrDistrosImageTypeDenyList returns a map of distro-specific Image Type
|
||||
// deny lists for Weldr API.
|
||||
func (c *ComposerConfigFile) weldrDistrosImageTypeDenyList() map[string][]string {
|
||||
distrosImageTypeDenyList := map[string][]string{}
|
||||
|
||||
for distro, distroConfig := range c.WeldrAPI.DistroConfigs {
|
||||
if distroConfig.ImageTypeDenyList != nil {
|
||||
distrosImageTypeDenyList[distro] = append([]string{}, distroConfig.ImageTypeDenyList...)
|
||||
}
|
||||
}
|
||||
|
||||
return distrosImageTypeDenyList
|
||||
}
|
||||
|
||||
func LoadConfig(name string) (*ComposerConfigFile, error) {
|
||||
var c ComposerConfigFile
|
||||
_, err := toml.DecodeFile(name, &c)
|
||||
|
|
@ -69,6 +87,9 @@ func loadConfigFromEnv(intf interface{}) error {
|
|||
case reflect.Slice:
|
||||
// no-op
|
||||
continue
|
||||
case reflect.Map:
|
||||
// no-op
|
||||
continue
|
||||
case reflect.Struct:
|
||||
err := loadConfigFromEnv(fieldV.Addr().Interface())
|
||||
if err != nil {
|
||||
|
|
|
|||
|
|
@ -36,7 +36,8 @@ func TestConfig(t *testing.T) {
|
|||
require.Equal(t, config.Worker.AllowedDomains, []string{"osbuild.org"})
|
||||
require.Equal(t, config.Worker.CA, "/etc/osbuild-composer/ca-crt.pem")
|
||||
|
||||
require.Equal(t, config.WeldrAPI.ImageTypeDenylist, []string{"qcow2", "vmdk"})
|
||||
require.Equal(t, []string{"qcow2", "vmdk"}, config.WeldrAPI.DistroConfigs["*"].ImageTypeDenyList)
|
||||
require.Equal(t, []string{"qcow2"}, config.WeldrAPI.DistroConfigs["rhel-84"].ImageTypeDenyList)
|
||||
|
||||
require.Equal(t, "overwrite-me-db", config.Worker.PGDatabase)
|
||||
|
||||
|
|
@ -46,3 +47,16 @@ func TestConfig(t *testing.T) {
|
|||
require.NotNil(t, config)
|
||||
require.Equal(t, "composer-db", config.Worker.PGDatabase)
|
||||
}
|
||||
|
||||
func TestWeldrDistrosImageTypeDenyList(t *testing.T) {
|
||||
config, err := LoadConfig("testdata/test.toml")
|
||||
require.NoError(t, err)
|
||||
require.NotNil(t, config)
|
||||
|
||||
expectedWeldrDistrosImageTypeDenyList := map[string][]string{
|
||||
"*": {"qcow2", "vmdk"},
|
||||
"rhel-84": {"qcow2"},
|
||||
}
|
||||
|
||||
require.Equal(t, expectedWeldrDistrosImageTypeDenyList, config.weldrDistrosImageTypeDenyList())
|
||||
}
|
||||
|
|
|
|||
|
|
@ -69,7 +69,7 @@ func main() {
|
|||
log.Fatal("The osbuild-composer.socket unit is misconfigured. It should contain only one socket.")
|
||||
}
|
||||
|
||||
err = composer.InitWeldr(repositoryConfigs, l[0], config.WeldrAPI.ImageTypeDenylist)
|
||||
err = composer.InitWeldr(repositoryConfigs, l[0], config.weldrDistrosImageTypeDenyList())
|
||||
if err != nil {
|
||||
log.Fatalf("Error initializing weldr API: %v", err)
|
||||
}
|
||||
|
|
|
|||
5
cmd/osbuild-composer/testdata/test.toml
vendored
5
cmd/osbuild-composer/testdata/test.toml
vendored
|
|
@ -7,5 +7,8 @@ allowed_domains = [ "osbuild.org" ]
|
|||
ca = "/etc/osbuild-composer/ca-crt.pem"
|
||||
pg_database = "overwrite-me-db"
|
||||
|
||||
[weldr_api]
|
||||
[weldr_api.distros."*"]
|
||||
image_type_denylist = [ "qcow2", "vmdk" ]
|
||||
|
||||
[weldr_api.distros.rhel-84]
|
||||
image_type_denylist = [ "qcow2" ]
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue