Extend Weldr API to accept a list of denied image types, which should not be exposed via API for any supported distribution. This functionality will be needed to not expose image types which can't be successfully built outside of Red Hat VPN. Example of such images are the official RHEL EC2 images, which include RHUI client packages not available publicly. Image Types are filters when listing available compose types and creating a new compose using Weldr API. Extend osbuild-composer configuration to allow specifying the list of denied Image Types for Weldr API. Add unit tests for implemented changes. Add NEWS entry describing the newly introduced functionality. Signed-off-by: Tomas Hozza <thozza@redhat.com>
112 lines
2.7 KiB
Go
112 lines
2.7 KiB
Go
package main
|
|
|
|
import (
|
|
"flag"
|
|
"log"
|
|
"os"
|
|
|
|
"github.com/coreos/go-systemd/activation"
|
|
)
|
|
|
|
const (
|
|
configFile = "/etc/osbuild-composer/osbuild-composer.toml"
|
|
ServerKeyFile = "/etc/osbuild-composer/composer-key.pem"
|
|
ServerCertFile = "/etc/osbuild-composer/composer-crt.pem"
|
|
)
|
|
|
|
var repositoryConfigs = []string{
|
|
"/etc/osbuild-composer",
|
|
"/usr/share/osbuild-composer",
|
|
}
|
|
|
|
func main() {
|
|
var verbose bool
|
|
flag.BoolVar(&verbose, "v", false, "Print access log")
|
|
flag.Parse()
|
|
|
|
var logger *log.Logger
|
|
if verbose {
|
|
logger = log.New(os.Stdout, "", 0)
|
|
}
|
|
|
|
config, err := LoadConfig(configFile)
|
|
if err != nil {
|
|
if os.IsNotExist(err) {
|
|
config = &ComposerConfigFile{}
|
|
} else {
|
|
log.Fatalf("Error loading configuration: %v", err)
|
|
}
|
|
}
|
|
|
|
log.Println("Loaded configuration:")
|
|
err = DumpConfig(config, log.Writer())
|
|
if err != nil {
|
|
log.Fatalf("Error printing configuration: %v", err)
|
|
}
|
|
|
|
stateDir, ok := os.LookupEnv("STATE_DIRECTORY")
|
|
if !ok {
|
|
log.Fatal("STATE_DIRECTORY is not set. Is the service file missing StateDirectory=?")
|
|
}
|
|
|
|
cacheDir, ok := os.LookupEnv("CACHE_DIRECTORY")
|
|
if !ok {
|
|
log.Fatal("CACHE_DIRECTORY is not set. Is the service file missing CacheDirectory=?")
|
|
}
|
|
|
|
composer, err := NewComposer(config, stateDir, cacheDir, logger)
|
|
if err != nil {
|
|
log.Fatalf("%v", err)
|
|
}
|
|
|
|
listeners, err := activation.ListenersWithNames()
|
|
if err != nil {
|
|
log.Fatalf("Could not get listening sockets: " + err.Error())
|
|
}
|
|
|
|
if l, exists := listeners["osbuild-composer.socket"]; exists {
|
|
if len(l) != 1 {
|
|
log.Fatal("The osbuild-composer.socket unit is misconfigured. It should contain only one socket.")
|
|
}
|
|
|
|
err = composer.InitWeldr(repositoryConfigs, l[0], config.WeldrAPI.ImageTypeDenylist)
|
|
if err != nil {
|
|
log.Fatalf("Error initializing weldr API: %v", err)
|
|
}
|
|
}
|
|
|
|
if l, exists := listeners["osbuild-local-worker.socket"]; exists {
|
|
if len(l) != 1 {
|
|
log.Fatal("The osbuild-local-worker.socket unit is misconfigured. It should contain only one socket.")
|
|
}
|
|
|
|
composer.InitLocalWorker(l[0])
|
|
}
|
|
|
|
if l, exists := listeners["osbuild-composer-api.socket"]; exists {
|
|
if len(l) != 1 {
|
|
log.Fatal("The osbuild-composer-api.socket unit is misconfigured. It should contain only one socket.")
|
|
}
|
|
|
|
err = composer.InitAPI(ServerCertFile, ServerKeyFile, l[0])
|
|
if err != nil {
|
|
log.Fatalf("Error initializing koji API: %v", err)
|
|
}
|
|
}
|
|
|
|
if l, exists := listeners["osbuild-remote-worker.socket"]; exists {
|
|
if len(l) != 1 {
|
|
log.Fatal("The osbuild-remote-worker.socket unit is misconfigured. It should contain only one socket.")
|
|
}
|
|
|
|
err = composer.InitRemoteWorkers(ServerCertFile, ServerKeyFile, l[0])
|
|
if err != nil {
|
|
log.Fatalf("Error initializing worker API: %v", err)
|
|
}
|
|
}
|
|
|
|
err = composer.Start()
|
|
if err != nil {
|
|
log.Fatalf("%v", err)
|
|
}
|
|
}
|