refactor accessing registry configs via drivers
Signed-off-by: Tonis Tiigi <tonistiigi@gmail.com>pull/825/head
parent
8afc82b427
commit
88d0775692
@ -0,0 +1,116 @@
|
|||||||
|
package storeutil
|
||||||
|
|
||||||
|
import (
|
||||||
|
"os"
|
||||||
|
|
||||||
|
"github.com/docker/buildx/store"
|
||||||
|
"github.com/docker/buildx/util/confutil"
|
||||||
|
"github.com/docker/buildx/util/imagetools"
|
||||||
|
"github.com/docker/cli/cli/command"
|
||||||
|
"github.com/docker/cli/cli/context/docker"
|
||||||
|
"github.com/pkg/errors"
|
||||||
|
)
|
||||||
|
|
||||||
|
// GetStore returns current builder instance store
|
||||||
|
func GetStore(dockerCli command.Cli) (*store.Txn, func(), error) {
|
||||||
|
s, err := store.New(confutil.ConfigDir(dockerCli))
|
||||||
|
if err != nil {
|
||||||
|
return nil, nil, err
|
||||||
|
}
|
||||||
|
return s.Txn()
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetCurrentEndpoint returns the current default endpoint value
|
||||||
|
func GetCurrentEndpoint(dockerCli command.Cli) (string, error) {
|
||||||
|
name := dockerCli.CurrentContext()
|
||||||
|
if name != "default" {
|
||||||
|
return name, nil
|
||||||
|
}
|
||||||
|
de, err := GetDockerEndpoint(dockerCli, name)
|
||||||
|
if err != nil {
|
||||||
|
return "", errors.Errorf("docker endpoint for %q not found", name)
|
||||||
|
}
|
||||||
|
return de, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetDockerEndpoint returns docker endpoint string for given context
|
||||||
|
func GetDockerEndpoint(dockerCli command.Cli, name string) (string, error) {
|
||||||
|
list, err := dockerCli.ContextStore().List()
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
for _, l := range list {
|
||||||
|
if l.Name == name {
|
||||||
|
ep, ok := l.Endpoints["docker"]
|
||||||
|
if !ok {
|
||||||
|
return "", errors.Errorf("context %q does not have a Docker endpoint", name)
|
||||||
|
}
|
||||||
|
typed, ok := ep.(docker.EndpointMeta)
|
||||||
|
if !ok {
|
||||||
|
return "", errors.Errorf("endpoint %q is not of type EndpointMeta, %T", ep, ep)
|
||||||
|
}
|
||||||
|
return typed.Host, nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return "", nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetCurrentInstance finds the current builder instance
|
||||||
|
func GetCurrentInstance(txn *store.Txn, dockerCli command.Cli) (*store.NodeGroup, error) {
|
||||||
|
ep, err := GetCurrentEndpoint(dockerCli)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
ng, err := txn.Current(ep)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
if ng == nil {
|
||||||
|
ng, _ = GetNodeGroup(txn, dockerCli, dockerCli.CurrentContext())
|
||||||
|
}
|
||||||
|
|
||||||
|
return ng, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetNodeGroup returns nodegroup based on the name
|
||||||
|
func GetNodeGroup(txn *store.Txn, dockerCli command.Cli, name string) (*store.NodeGroup, error) {
|
||||||
|
ng, err := txn.NodeGroupByName(name)
|
||||||
|
if err != nil {
|
||||||
|
if !os.IsNotExist(errors.Cause(err)) {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if ng != nil {
|
||||||
|
return ng, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
if name == "default" {
|
||||||
|
name = dockerCli.CurrentContext()
|
||||||
|
}
|
||||||
|
|
||||||
|
list, err := dockerCli.ContextStore().List()
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
for _, l := range list {
|
||||||
|
if l.Name == name {
|
||||||
|
return &store.NodeGroup{
|
||||||
|
Name: "default",
|
||||||
|
Nodes: []store.Node{
|
||||||
|
{
|
||||||
|
Name: "default",
|
||||||
|
Endpoint: name,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}, nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil, errors.Errorf("no builder %q found", name)
|
||||||
|
}
|
||||||
|
|
||||||
|
func GetImageConfig(dockerCli command.Cli, ng *store.NodeGroup) (opt imagetools.Opt, err error) {
|
||||||
|
opt.Auth = dockerCli.ConfigFile()
|
||||||
|
|
||||||
|
return opt, nil
|
||||||
|
}
|
@ -0,0 +1,15 @@
|
|||||||
|
package config
|
||||||
|
|
||||||
|
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"`
|
||||||
|
}
|
Loading…
Reference in New Issue