debian-forge-composer/cmd/osbuild-worker/config.go
Tomáš Hozza b54b8fa3ab worker/gcp: allow setting Bucket in worker configuration
Extend the worker's configuration to allow setting GCP Bucket to use
when uploading images to GCP. The value from the configuration is used
only if not provided in the TargetOptions of the job.

In GCP, the region of the bucket does not limit importing of the image
to a particular region. So it is completely possible to use a single
Bucket to import images to any and all regions.

Return an error in case no bucket name was set in the job nor in the
worker configuration.
2022-10-11 13:23:18 +02:00

94 lines
2.5 KiB
Go

package main
import (
"os"
"github.com/BurntSushi/toml"
"github.com/sirupsen/logrus"
)
type composerConfig struct {
Proxy string `toml:"proxy"`
}
type kerberosConfig struct {
Principal string `toml:"principal"`
KeyTab string `toml:"keytab"`
}
type kojiServerConfig struct {
Kerberos *kerberosConfig `toml:"kerberos,omitempty"`
RelaxTimeoutFactor uint `toml:"relax_timeout_factor"`
}
type gcpConfig struct {
Credentials string `toml:"credentials"`
Bucket string `toml:"bucket"`
}
type azureConfig struct {
Credentials string `toml:"credentials"`
}
type awsConfig struct {
Credentials string `toml:"credentials"`
Bucket string `toml:"bucket"`
}
type genericS3Config struct {
Credentials string `toml:"credentials"`
Endpoint string `toml:"endpoint"`
Region string `toml:"region"`
Bucket string `toml:"bucket"`
CABundle string `toml:"ca_bundle"`
SkipSSLVerification bool `toml:"skip_ssl_verification"`
}
type authenticationConfig struct {
OAuthURL string `toml:"oauth_url"`
OfflineTokenPath string `toml:"offline_token"`
ClientId string `toml:"client_id"`
ClientSecretPath string `toml:"client_secret"`
}
type containersConfig struct {
AuthFilePath string `toml:"auth_file_path"`
Domain string `toml:"domain"`
PathPrefix string `toml:"path_prefix"`
CertPath string `toml:"cert_path"`
TLSVerify bool `toml:"tls_verify"`
}
type workerConfig struct {
Composer *composerConfig `toml:"composer"`
Koji map[string]kojiServerConfig `toml:"koji"`
GCP *gcpConfig `toml:"gcp"`
Azure *azureConfig `toml:"azure"`
AWS *awsConfig `toml:"aws"`
GenericS3 *genericS3Config `toml:"generic_s3"`
Authentication *authenticationConfig `toml:"authentication"`
Containers *containersConfig `toml:"containers"`
// default value: /api/worker/v1
BasePath string `toml:"base_path"`
DNFJson string `toml:"dnf-json"`
}
func parseConfig(file string) (*workerConfig, error) {
// set defaults
config := workerConfig{
BasePath: "/api/worker/v1",
}
_, err := toml.DecodeFile(file, &config)
if err != nil {
// Return error only when we failed to decode the file.
// A non-existing config isn't an error, use defaults in this case.
if !os.IsNotExist(err) {
return nil, err
}
logrus.Info("Configuration file not found, using defaults")
}
return &config, nil
}