Files
plugin-drone-kaniko/pkg/docker/config.go
T
Aishwarya Lad 7b442a53ff Modify docker config to add base connector (#115)
* add config for base connector

* fix permissions code

* add gar step support

* add gar step support

* reformat code, add support for gar and acr

* remove logs

* address review comments

* delete bin file
2024-04-26 15:54:08 -04:00

98 lines
2.6 KiB
Go

package docker
import (
"encoding/base64"
"encoding/json"
"fmt"
"io/ioutil"
"os"
"github.com/pkg/errors"
)
const (
v2HubRegistryURL string = "https://registry.hub.docker.com/v2/"
v1RegistryURL string = "https://index.docker.io/v1/" // Default registry
v2RegistryURL string = "https://index.docker.io/v2/" // v2 registry is not supported
)
type (
Auth struct {
Auth string `json:"auth"`
}
Config struct {
Auths map[string]Auth `json:"auths"`
CredHelpers map[string]string `json:"credHelpers,omitempty"`
}
)
type RegistryCredentials struct {
Registry string
Username string
Password string
}
func NewConfig() *Config {
return &Config{
Auths: make(map[string]Auth),
CredHelpers: make(map[string]string),
}
}
func (c *Config) SetAuth(registry, username, password string) {
authBytes := []byte(username + ":" + password)
encodedString := base64.StdEncoding.EncodeToString(authBytes)
c.Auths[registry] = Auth{Auth: encodedString}
}
func (c *Config) SetCredHelper(registry, helper string) {
c.CredHelpers[registry] = helper
}
func (c *Config) CreateDockerConfig(credentials []RegistryCredentials, dockerPath string) error {
for _, cred := range credentials {
if cred.Registry != "" {
// update v2 docker registry to v1
if cred.Registry == v2RegistryURL || cred.Registry == v2HubRegistryURL {
fmt.Printf("Docker v2 registry '%s' is not supported in kaniko. Refer issue: https://github.com/GoogleContainerTools/kaniko/issues/1209\n", cred.Registry)
fmt.Printf("Using v1 registry instead: %s\n", v1RegistryURL)
cred.Registry = v1RegistryURL
}
if cred.Username == "" {
return fmt.Errorf("Username must be specified for registry: %s", cred.Registry)
}
if cred.Password == "" {
return fmt.Errorf("Password must be specified for registry: %s", cred.Registry)
}
c.SetAuth(cred.Registry, cred.Username, cred.Password)
}
}
jsonBytes, err := json.Marshal(c)
if err != nil {
return errors.Wrap(err, "failed to serialize docker config json")
}
if err := WriteDockerConfig(jsonBytes, dockerPath); err != nil {
return errors.Wrap(err, fmt.Sprintf("failed to write docker config to path: %s", dockerPath))
}
return nil
}
func WriteDockerConfig(data []byte, path string) (string error) {
err := os.MkdirAll(path, 0600)
if err != nil {
if !os.IsExist(err) {
return errors.Wrap(err, fmt.Sprintf("failed to create %s directory", path))
}
}
filePath := path + "/config.json"
err = ioutil.WriteFile(filePath, data, 0644)
if err != nil {
return errors.Wrap(err, fmt.Sprintf("failed to create docker config file at %s", path))
}
return nil
}