From be5c6d53ad9ec0f1b8cd918c4bfce641a3631a42 Mon Sep 17 00:00:00 2001 From: CrazyMax Date: Thu, 16 Sep 2021 15:59:26 +0200 Subject: [PATCH] Move config to a dedicated pkg Signed-off-by: CrazyMax --- cmd/buildkitd/config/config.go | 20 ++++++++++++---- cmd/buildkitd/config/gcpolicy_unix.go | 6 ++--- cmd/buildkitd/main.go | 14 +++++++++-- .../config.go => util/appconfig/load.go | 15 +++--------- .../appconfig/load_test.go | 4 ++-- util/push/push.go | 3 ++- util/resolver/resolver.go | 23 ++++--------------- 7 files changed, 42 insertions(+), 43 deletions(-) rename cmd/buildkitd/config.go => util/appconfig/load.go (73%) rename cmd/buildkitd/config_test.go => util/appconfig/load_test.go (98%) diff --git a/cmd/buildkitd/config/config.go b/cmd/buildkitd/config/config.go index 0371537986f46..0b6465a054115 100644 --- a/cmd/buildkitd/config/config.go +++ b/cmd/buildkitd/config/config.go @@ -1,9 +1,5 @@ package config -import ( - "github.com/moby/buildkit/util/resolver" -) - // Config provides containerd configuration data for the server type Config struct { Debug bool `toml:"debug"` @@ -21,7 +17,7 @@ type Config struct { Containerd ContainerdConfig `toml:"containerd"` } `toml:"worker"` - Registries map[string]resolver.RegistryConfig `toml:"registry"` + Registries map[string]RegistryConfig `toml:"registry"` DNS *DNSConfig `toml:"dns"` } @@ -113,3 +109,17 @@ type DNSConfig struct { Options []string `toml:"options"` SearchDomains []string `toml:"searchDomains"` } + +type RegistryConfig struct { + Mirrors []string `toml:"mirrors"` + PlainHTTP *bool `toml:"http"` + Insecure *bool `toml:"insecure"` + RootCAs []string `toml:"ca"` + KeyPairs []TLSKeyPair `toml:"keypair"` + TLSConfigDir []string `toml:"tlsconfigdir"` +} + +type TLSKeyPair struct { + Key string `toml:"key"` + Certificate string `toml:"cert"` +} diff --git a/cmd/buildkitd/config/gcpolicy_unix.go b/cmd/buildkitd/config/gcpolicy_unix.go index e022fba888747..673462d67e3de 100644 --- a/cmd/buildkitd/config/gcpolicy_unix.go +++ b/cmd/buildkitd/config/gcpolicy_unix.go @@ -3,12 +3,12 @@ package config import ( - "syscall" + "golang.org/x/sys/unix" ) func DetectDefaultGCCap(root string) int64 { - var st syscall.Statfs_t - if err := syscall.Statfs(root, &st); err != nil { + var st unix.Statfs_t + if err := unix.Statfs(root, &st); err != nil { return defaultCap } diskSize := int64(st.Bsize) * int64(st.Blocks) diff --git a/cmd/buildkitd/main.go b/cmd/buildkitd/main.go index e8d97b23aa912..72e5f74957733 100644 --- a/cmd/buildkitd/main.go +++ b/cmd/buildkitd/main.go @@ -42,6 +42,7 @@ import ( "github.com/moby/buildkit/session" "github.com/moby/buildkit/solver/bboltcachestorage" "github.com/moby/buildkit/util/apicaps" + "github.com/moby/buildkit/util/appconfig" "github.com/moby/buildkit/util/appcontext" "github.com/moby/buildkit/util/appdefaults" "github.com/moby/buildkit/util/archutil" @@ -204,7 +205,7 @@ func main() { ctx, cancel := context.WithCancel(appcontext.Context()) defer cancel() - cfg, err := LoadFile(c.GlobalString("config")) + cfg, err := appconfig.LoadFile(c.GlobalString("config")) if err != nil { return err } @@ -368,7 +369,7 @@ func defaultConfigPath() string { } func defaultConf() (config.Config, error) { - cfg, err := LoadFile(defaultConfigPath()) + cfg, err := appconfig.LoadFile(defaultConfigPath()) if err != nil { var pe *os.PathError if !errors.As(err, &pe) { @@ -777,6 +778,15 @@ func getDNSConfig(cfg *config.DNSConfig) *oci.DNSConfig { return dns } +// parseBoolOrAuto returns (nil, nil) if s is "auto" +func parseBoolOrAuto(s string) (*bool, error) { + if s == "" || strings.ToLower(s) == "auto" { + return nil, nil + } + b, err := strconv.ParseBool(s) + return &b, err +} + func runTraceController(p string, exp sdktrace.SpanExporter) error { server := grpc.NewServer() tracev1.RegisterTraceServiceServer(server, &traceCollector{exporter: exp}) diff --git a/cmd/buildkitd/config.go b/util/appconfig/load.go similarity index 73% rename from cmd/buildkitd/config.go rename to util/appconfig/load.go index 1b09488c36e61..8c11951aa4a43 100644 --- a/cmd/buildkitd/config.go +++ b/util/appconfig/load.go @@ -1,16 +1,15 @@ -package main +package appconfig import ( "io" "os" - "strconv" - "strings" "github.com/moby/buildkit/cmd/buildkitd/config" "github.com/pelletier/go-toml" "github.com/pkg/errors" ) +// Load loads buildkitd config func Load(r io.Reader) (config.Config, error) { var c config.Config t, err := toml.LoadReader(r) @@ -24,6 +23,7 @@ func Load(r io.Reader) (config.Config, error) { return c, nil } +// LoadFile loads buildkitd config file func LoadFile(fp string) (config.Config, error) { f, err := os.Open(fp) if err != nil { @@ -35,12 +35,3 @@ func LoadFile(fp string) (config.Config, error) { defer f.Close() return Load(f) } - -// parseBoolOrAuto returns (nil, nil) if s is "auto" -func parseBoolOrAuto(s string) (*bool, error) { - if s == "" || strings.ToLower(s) == "auto" { - return nil, nil - } - b, err := strconv.ParseBool(s) - return &b, err -} diff --git a/cmd/buildkitd/config_test.go b/util/appconfig/load_test.go similarity index 98% rename from cmd/buildkitd/config_test.go rename to util/appconfig/load_test.go index 81d79ab1c988f..19ba7ce3afc5a 100644 --- a/cmd/buildkitd/config_test.go +++ b/util/appconfig/load_test.go @@ -1,4 +1,4 @@ -package main +package appconfig import ( "bytes" @@ -7,7 +7,7 @@ import ( "github.com/stretchr/testify/require" ) -func TestConfig(t *testing.T) { +func TestLoad(t *testing.T) { const testConfig = ` root = "/foo/bar" diff --git a/util/push/push.go b/util/push/push.go index 5bdfea9562e47..757ae22fe383f 100644 --- a/util/push/push.go +++ b/util/push/push.go @@ -14,6 +14,7 @@ import ( "github.com/containerd/containerd/remotes/docker" "github.com/docker/distribution/reference" "github.com/moby/buildkit/session" + "github.com/moby/buildkit/util/appconfig" "github.com/moby/buildkit/util/flightcontrol" "github.com/moby/buildkit/util/imageutil" "github.com/moby/buildkit/util/progress" @@ -54,7 +55,7 @@ func Push(ctx context.Context, sm *session.Manager, sid string, provider content if insecure { insecureTrue := true httpTrue := true - hosts = resolver.NewRegistryConfig(map[string]resolver.RegistryConfig{ + hosts = resolver.NewRegistryConfig(map[string]appconfig.RegistryConfig{ reference.Domain(parsed): { Insecure: &insecureTrue, PlainHTTP: &httpTrue, diff --git a/util/resolver/resolver.go b/util/resolver/resolver.go index e9747f7cb05f6..2e70e2df9660b 100644 --- a/util/resolver/resolver.go +++ b/util/resolver/resolver.go @@ -13,11 +13,12 @@ import ( "time" "github.com/containerd/containerd/remotes/docker" + "github.com/moby/buildkit/cmd/buildkitd/config" "github.com/moby/buildkit/util/tracing" "github.com/pkg/errors" ) -func fillInsecureOpts(host string, c RegistryConfig, h docker.RegistryHost) ([]docker.RegistryHost, error) { +func fillInsecureOpts(host string, c config.RegistryConfig, h docker.RegistryHost) ([]docker.RegistryHost, error) { var hosts []docker.RegistryHost tc, err := loadTLSConfig(c) @@ -64,7 +65,7 @@ func fillInsecureOpts(host string, c RegistryConfig, h docker.RegistryHost) ([]d return hosts, nil } -func loadTLSConfig(c RegistryConfig) (*tls.Config, error) { +func loadTLSConfig(c config.RegistryConfig) (*tls.Config, error) { for _, d := range c.TLSConfigDir { fs, err := ioutil.ReadDir(d) if err != nil && !errors.Is(err, os.ErrNotExist) && !errors.Is(err, os.ErrPermission) { @@ -75,7 +76,7 @@ func loadTLSConfig(c RegistryConfig) (*tls.Config, error) { c.RootCAs = append(c.RootCAs, filepath.Join(d, f.Name())) } if strings.HasSuffix(f.Name(), ".cert") { - c.KeyPairs = append(c.KeyPairs, TLSKeyPair{ + c.KeyPairs = append(c.KeyPairs, config.TLSKeyPair{ Certificate: filepath.Join(d, f.Name()), Key: filepath.Join(d, strings.TrimSuffix(f.Name(), ".cert")+".key"), }) @@ -114,22 +115,8 @@ func loadTLSConfig(c RegistryConfig) (*tls.Config, error) { return tc, nil } -type RegistryConfig struct { - Mirrors []string `toml:"mirrors"` - PlainHTTP *bool `toml:"http"` - Insecure *bool `toml:"insecure"` - RootCAs []string `toml:"ca"` - KeyPairs []TLSKeyPair `toml:"keypair"` - TLSConfigDir []string `toml:"tlsconfigdir"` -} - -type TLSKeyPair struct { - Key string `toml:"key"` - Certificate string `toml:"cert"` -} - // NewRegistryConfig converts registry config to docker.RegistryHosts callback -func NewRegistryConfig(m map[string]RegistryConfig) docker.RegistryHosts { +func NewRegistryConfig(m map[string]config.RegistryConfig) docker.RegistryHosts { return docker.Registries( func(host string) ([]docker.RegistryHost, error) { c, ok := m[host]