mirror of
https://github.com/portainer/portainer.git
synced 2025-07-18 21:09:40 +02:00
fix(code): remove dead code and reduce duplication BE-11826 (#680)
This commit is contained in:
parent
c91c8a6467
commit
f25d31b92b
9 changed files with 33 additions and 142 deletions
|
@ -2,7 +2,6 @@ package archive
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"archive/zip"
|
"archive/zip"
|
||||||
"bytes"
|
|
||||||
"fmt"
|
"fmt"
|
||||||
"io"
|
"io"
|
||||||
"os"
|
"os"
|
||||||
|
@ -12,50 +11,6 @@ import (
|
||||||
"github.com/pkg/errors"
|
"github.com/pkg/errors"
|
||||||
)
|
)
|
||||||
|
|
||||||
// UnzipArchive will unzip an archive from bytes into the dest destination folder on disk
|
|
||||||
func UnzipArchive(archiveData []byte, dest string) error {
|
|
||||||
zipReader, err := zip.NewReader(bytes.NewReader(archiveData), int64(len(archiveData)))
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
for _, zipFile := range zipReader.File {
|
|
||||||
err := extractFileFromArchive(zipFile, dest)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func extractFileFromArchive(file *zip.File, dest string) error {
|
|
||||||
f, err := file.Open()
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
defer f.Close()
|
|
||||||
|
|
||||||
data, err := io.ReadAll(f)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
fpath := filepath.Join(dest, file.Name)
|
|
||||||
|
|
||||||
outFile, err := os.OpenFile(fpath, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, file.Mode())
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
_, err = io.Copy(outFile, bytes.NewReader(data))
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
return outFile.Close()
|
|
||||||
}
|
|
||||||
|
|
||||||
// UnzipFile will decompress a zip archive, moving all files and folders
|
// UnzipFile will decompress a zip archive, moving all files and folders
|
||||||
// within the zip file (parameter 1) to an output directory (parameter 2).
|
// within the zip file (parameter 1) to an output directory (parameter 2).
|
||||||
func UnzipFile(src string, dest string) error {
|
func UnzipFile(src string, dest string) error {
|
||||||
|
@ -76,11 +31,11 @@ func UnzipFile(src string, dest string) error {
|
||||||
if f.FileInfo().IsDir() {
|
if f.FileInfo().IsDir() {
|
||||||
// Make Folder
|
// Make Folder
|
||||||
os.MkdirAll(p, os.ModePerm)
|
os.MkdirAll(p, os.ModePerm)
|
||||||
|
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
err = unzipFile(f, p)
|
if err := unzipFile(f, p); err != nil {
|
||||||
if err != nil {
|
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -93,20 +48,20 @@ func unzipFile(f *zip.File, p string) error {
|
||||||
if err := os.MkdirAll(filepath.Dir(p), os.ModePerm); err != nil {
|
if err := os.MkdirAll(filepath.Dir(p), os.ModePerm); err != nil {
|
||||||
return errors.Wrapf(err, "unzipFile: can't make a path %s", p)
|
return errors.Wrapf(err, "unzipFile: can't make a path %s", p)
|
||||||
}
|
}
|
||||||
|
|
||||||
outFile, err := os.OpenFile(p, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, f.Mode())
|
outFile, err := os.OpenFile(p, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, f.Mode())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return errors.Wrapf(err, "unzipFile: can't create file %s", p)
|
return errors.Wrapf(err, "unzipFile: can't create file %s", p)
|
||||||
}
|
}
|
||||||
defer outFile.Close()
|
defer outFile.Close()
|
||||||
|
|
||||||
rc, err := f.Open()
|
rc, err := f.Open()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return errors.Wrapf(err, "unzipFile: can't open zip file %s in the archive", f.Name)
|
return errors.Wrapf(err, "unzipFile: can't open zip file %s in the archive", f.Name)
|
||||||
}
|
}
|
||||||
defer rc.Close()
|
defer rc.Close()
|
||||||
|
|
||||||
_, err = io.Copy(outFile, rc)
|
if _, err = io.Copy(outFile, rc); err != nil {
|
||||||
|
|
||||||
if err != nil {
|
|
||||||
return errors.Wrapf(err, "unzipFile: can't copy an archived file content")
|
return errors.Wrapf(err, "unzipFile: can't copy an archived file content")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,45 +0,0 @@
|
||||||
package cli
|
|
||||||
|
|
||||||
import (
|
|
||||||
"strings"
|
|
||||||
|
|
||||||
portainer "github.com/portainer/portainer/api"
|
|
||||||
|
|
||||||
"gopkg.in/alecthomas/kingpin.v2"
|
|
||||||
)
|
|
||||||
|
|
||||||
type pairListBool []portainer.Pair
|
|
||||||
|
|
||||||
// Set implementation for a list of portainer.Pair
|
|
||||||
func (l *pairListBool) Set(value string) error {
|
|
||||||
p := new(portainer.Pair)
|
|
||||||
|
|
||||||
// default to true. example setting=true is equivalent to setting
|
|
||||||
parts := strings.SplitN(value, "=", 2)
|
|
||||||
if len(parts) != 2 {
|
|
||||||
p.Name = parts[0]
|
|
||||||
p.Value = "true"
|
|
||||||
} else {
|
|
||||||
p.Name = parts[0]
|
|
||||||
p.Value = parts[1]
|
|
||||||
}
|
|
||||||
|
|
||||||
*l = append(*l, *p)
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// String implementation for a list of pair
|
|
||||||
func (l *pairListBool) String() string {
|
|
||||||
return ""
|
|
||||||
}
|
|
||||||
|
|
||||||
// IsCumulative implementation for a list of pair
|
|
||||||
func (l *pairListBool) IsCumulative() bool {
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
|
|
||||||
func BoolPairs(s kingpin.Settings) (target *[]portainer.Pair) {
|
|
||||||
target = new([]portainer.Pair)
|
|
||||||
s.SetValue((*pairListBool)(target))
|
|
||||||
return
|
|
||||||
}
|
|
|
@ -73,19 +73,6 @@ func createLocalClient(endpoint *portainer.Endpoint) (*client.Client, error) {
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
func CreateClientFromEnv() (*client.Client, error) {
|
|
||||||
return client.NewClientWithOpts(
|
|
||||||
client.FromEnv,
|
|
||||||
client.WithAPIVersionNegotiation(),
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
func CreateSimpleClient() (*client.Client, error) {
|
|
||||||
return client.NewClientWithOpts(
|
|
||||||
client.WithAPIVersionNegotiation(),
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
func createTCPClient(endpoint *portainer.Endpoint, timeout *time.Duration) (*client.Client, error) {
|
func createTCPClient(endpoint *portainer.Endpoint, timeout *time.Duration) (*client.Client, error) {
|
||||||
httpCli, err := httpClient(endpoint, timeout)
|
httpCli, err := httpClient(endpoint, timeout)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
|
@ -38,10 +38,10 @@ func NewClientWithRegistry(registryClient *RegistryClient, clientFactory *docker
|
||||||
func (c *DigestClient) RemoteDigest(image Image) (digest.Digest, error) {
|
func (c *DigestClient) RemoteDigest(image Image) (digest.Digest, error) {
|
||||||
ctx, cancel := c.timeoutContext()
|
ctx, cancel := c.timeoutContext()
|
||||||
defer cancel()
|
defer cancel()
|
||||||
|
|
||||||
// Docker references with both a tag and digest are currently not supported
|
// Docker references with both a tag and digest are currently not supported
|
||||||
if image.Tag != "" && image.Digest != "" {
|
if image.Tag != "" && image.Digest != "" {
|
||||||
err := image.trimDigest()
|
if err := image.TrimDigest(); err != nil {
|
||||||
if err != nil {
|
|
||||||
return "", err
|
return "", err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -69,7 +69,7 @@ func (c *DigestClient) RemoteDigest(image Image) (digest.Digest, error) {
|
||||||
// Retrieve remote digest through HEAD request
|
// Retrieve remote digest through HEAD request
|
||||||
rmDigest, err := docker.GetDigest(ctx, sysCtx, rmRef)
|
rmDigest, err := docker.GetDigest(ctx, sysCtx, rmRef)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
// fallback to public registry for hub
|
// Fallback to public registry for hub
|
||||||
if image.HubLink != "" {
|
if image.HubLink != "" {
|
||||||
rmDigest, err = docker.GetDigest(ctx, c.sysCtx, rmRef)
|
rmDigest, err = docker.GetDigest(ctx, c.sysCtx, rmRef)
|
||||||
if err == nil {
|
if err == nil {
|
||||||
|
@ -131,8 +131,7 @@ func ParseRepoDigests(repoDigests []string) []digest.Digest {
|
||||||
func ParseRepoTags(repoTags []string) []*Image {
|
func ParseRepoTags(repoTags []string) []*Image {
|
||||||
images := make([]*Image, 0)
|
images := make([]*Image, 0)
|
||||||
for _, repoTag := range repoTags {
|
for _, repoTag := range repoTags {
|
||||||
image := ParseRepoTag(repoTag)
|
if image := ParseRepoTag(repoTag); image != nil {
|
||||||
if image != nil {
|
|
||||||
images = append(images, image)
|
images = append(images, image)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -147,7 +146,7 @@ func ParseRepoDigest(repoDigest string) digest.Digest {
|
||||||
|
|
||||||
d, err := digest.Parse(strings.Split(repoDigest, "@")[1])
|
d, err := digest.Parse(strings.Split(repoDigest, "@")[1])
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Warn().Msgf("Skip invalid repo digest item: %s [error: %v]", repoDigest, err)
|
log.Warn().Err(err).Str("digest", repoDigest).Msg("skip invalid repo item")
|
||||||
|
|
||||||
return ""
|
return ""
|
||||||
}
|
}
|
||||||
|
|
|
@ -26,7 +26,7 @@ type Image struct {
|
||||||
Digest digest.Digest
|
Digest digest.Digest
|
||||||
HubLink string
|
HubLink string
|
||||||
named reference.Named
|
named reference.Named
|
||||||
opts ParseImageOptions
|
Opts ParseImageOptions `json:"-"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// ParseImageOptions holds image options for parsing.
|
// ParseImageOptions holds image options for parsing.
|
||||||
|
@ -43,9 +43,10 @@ func (i *Image) Name() string {
|
||||||
// FullName return the real full name may include Tag or Digest of the image, Tag first.
|
// FullName return the real full name may include Tag or Digest of the image, Tag first.
|
||||||
func (i *Image) FullName() string {
|
func (i *Image) FullName() string {
|
||||||
if i.Tag == "" {
|
if i.Tag == "" {
|
||||||
return fmt.Sprintf("%s@%s", i.Name(), i.Digest)
|
return i.Name() + "@" + i.Digest.String()
|
||||||
}
|
}
|
||||||
return fmt.Sprintf("%s:%s", i.Name(), i.Tag)
|
|
||||||
|
return i.Name() + ":" + i.Tag
|
||||||
}
|
}
|
||||||
|
|
||||||
// String returns the string representation of an image, including Tag and Digest if existed.
|
// String returns the string representation of an image, including Tag and Digest if existed.
|
||||||
|
@ -66,22 +67,25 @@ func (i *Image) Reference() string {
|
||||||
func (i *Image) WithDigest(digest digest.Digest) (err error) {
|
func (i *Image) WithDigest(digest digest.Digest) (err error) {
|
||||||
i.Digest = digest
|
i.Digest = digest
|
||||||
i.named, err = reference.WithDigest(i.named, digest)
|
i.named, err = reference.WithDigest(i.named, digest)
|
||||||
|
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
func (i *Image) WithTag(tag string) (err error) {
|
func (i *Image) WithTag(tag string) (err error) {
|
||||||
i.Tag = tag
|
i.Tag = tag
|
||||||
i.named, err = reference.WithTag(i.named, tag)
|
i.named, err = reference.WithTag(i.named, tag)
|
||||||
|
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
func (i *Image) trimDigest() error {
|
func (i *Image) TrimDigest() error {
|
||||||
i.Digest = ""
|
i.Digest = ""
|
||||||
named, err := ParseImage(ParseImageOptions{Name: i.FullName()})
|
named, err := ParseImage(ParseImageOptions{Name: i.FullName()})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
i.named = &named
|
i.named = &named
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -92,11 +96,12 @@ func ParseImage(parseOpts ParseImageOptions) (Image, error) {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return Image{}, errors.Wrapf(err, "parsing image %s failed", parseOpts.Name)
|
return Image{}, errors.Wrapf(err, "parsing image %s failed", parseOpts.Name)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Add the latest lag if they did not provide one.
|
// Add the latest lag if they did not provide one.
|
||||||
named = reference.TagNameOnly(named)
|
named = reference.TagNameOnly(named)
|
||||||
|
|
||||||
i := Image{
|
i := Image{
|
||||||
opts: parseOpts,
|
Opts: parseOpts,
|
||||||
named: named,
|
named: named,
|
||||||
Domain: reference.Domain(named),
|
Domain: reference.Domain(named),
|
||||||
Path: reference.Path(named),
|
Path: reference.Path(named),
|
||||||
|
@ -122,15 +127,16 @@ func ParseImage(parseOpts ParseImageOptions) (Image, error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (i *Image) hubLink() (string, error) {
|
func (i *Image) hubLink() (string, error) {
|
||||||
if i.opts.HubTpl != "" {
|
if i.Opts.HubTpl != "" {
|
||||||
var out bytes.Buffer
|
var out bytes.Buffer
|
||||||
tmpl, err := template.New("tmpl").
|
tmpl, err := template.New("tmpl").
|
||||||
Option("missingkey=error").
|
Option("missingkey=error").
|
||||||
Parse(i.opts.HubTpl)
|
Parse(i.Opts.HubTpl)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", err
|
return "", err
|
||||||
}
|
}
|
||||||
err = tmpl.Execute(&out, i)
|
err = tmpl.Execute(&out, i)
|
||||||
|
|
||||||
return out.String(), err
|
return out.String(), err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -142,6 +148,7 @@ func (i *Image) hubLink() (string, error) {
|
||||||
prefix = "_"
|
prefix = "_"
|
||||||
path = strings.Replace(i.Path, "library/", "", 1)
|
path = strings.Replace(i.Path, "library/", "", 1)
|
||||||
}
|
}
|
||||||
|
|
||||||
return "https://hub.docker.com/" + prefix + "/" + path, nil
|
return "https://hub.docker.com/" + prefix + "/" + path, nil
|
||||||
case "docker.bintray.io", "jfrog-docker-reg2.bintray.io":
|
case "docker.bintray.io", "jfrog-docker-reg2.bintray.io":
|
||||||
return "https://bintray.com/jfrog/reg2/" + strings.ReplaceAll(i.Path, "/", "%3A"), nil
|
return "https://bintray.com/jfrog/reg2/" + strings.ReplaceAll(i.Path, "/", "%3A"), nil
|
||||||
|
|
|
@ -16,7 +16,7 @@ func TestImageParser(t *testing.T) {
|
||||||
})
|
})
|
||||||
is.NoError(err, "")
|
is.NoError(err, "")
|
||||||
is.Equal("docker.io/portainer/portainer-ee:latest", image.FullName())
|
is.Equal("docker.io/portainer/portainer-ee:latest", image.FullName())
|
||||||
is.Equal("portainer/portainer-ee", image.opts.Name)
|
is.Equal("portainer/portainer-ee", image.Opts.Name)
|
||||||
is.Equal("latest", image.Tag)
|
is.Equal("latest", image.Tag)
|
||||||
is.Equal("portainer/portainer-ee", image.Path)
|
is.Equal("portainer/portainer-ee", image.Path)
|
||||||
is.Equal("docker.io", image.Domain)
|
is.Equal("docker.io", image.Domain)
|
||||||
|
@ -32,7 +32,7 @@ func TestImageParser(t *testing.T) {
|
||||||
})
|
})
|
||||||
is.NoError(err, "")
|
is.NoError(err, "")
|
||||||
is.Equal("gcr.io/k8s-minikube/kicbase@sha256:02c921df998f95e849058af14de7045efc3954d90320967418a0d1f182bbc0b2", image.FullName())
|
is.Equal("gcr.io/k8s-minikube/kicbase@sha256:02c921df998f95e849058af14de7045efc3954d90320967418a0d1f182bbc0b2", image.FullName())
|
||||||
is.Equal("gcr.io/k8s-minikube/kicbase@sha256:02c921df998f95e849058af14de7045efc3954d90320967418a0d1f182bbc0b2", image.opts.Name)
|
is.Equal("gcr.io/k8s-minikube/kicbase@sha256:02c921df998f95e849058af14de7045efc3954d90320967418a0d1f182bbc0b2", image.Opts.Name)
|
||||||
is.Equal("", image.Tag)
|
is.Equal("", image.Tag)
|
||||||
is.Equal("k8s-minikube/kicbase", image.Path)
|
is.Equal("k8s-minikube/kicbase", image.Path)
|
||||||
is.Equal("gcr.io", image.Domain)
|
is.Equal("gcr.io", image.Domain)
|
||||||
|
@ -49,7 +49,7 @@ func TestImageParser(t *testing.T) {
|
||||||
})
|
})
|
||||||
is.NoError(err, "")
|
is.NoError(err, "")
|
||||||
is.Equal("gcr.io/k8s-minikube/kicbase:v0.0.30", image.FullName())
|
is.Equal("gcr.io/k8s-minikube/kicbase:v0.0.30", image.FullName())
|
||||||
is.Equal("gcr.io/k8s-minikube/kicbase:v0.0.30@sha256:02c921df998f95e849058af14de7045efc3954d90320967418a0d1f182bbc0b2", image.opts.Name)
|
is.Equal("gcr.io/k8s-minikube/kicbase:v0.0.30@sha256:02c921df998f95e849058af14de7045efc3954d90320967418a0d1f182bbc0b2", image.Opts.Name)
|
||||||
is.Equal("v0.0.30", image.Tag)
|
is.Equal("v0.0.30", image.Tag)
|
||||||
is.Equal("k8s-minikube/kicbase", image.Path)
|
is.Equal("k8s-minikube/kicbase", image.Path)
|
||||||
is.Equal("gcr.io", image.Domain)
|
is.Equal("gcr.io", image.Domain)
|
||||||
|
@ -71,7 +71,7 @@ func TestUpdateParsedImage(t *testing.T) {
|
||||||
is.NoError(err, "")
|
is.NoError(err, "")
|
||||||
_ = image.WithTag("v0.0.31")
|
_ = image.WithTag("v0.0.31")
|
||||||
is.Equal("gcr.io/k8s-minikube/kicbase:v0.0.31", image.FullName())
|
is.Equal("gcr.io/k8s-minikube/kicbase:v0.0.31", image.FullName())
|
||||||
is.Equal("gcr.io/k8s-minikube/kicbase:v0.0.30@sha256:02c921df998f95e849058af14de7045efc3954d90320967418a0d1f182bbc0b2", image.opts.Name)
|
is.Equal("gcr.io/k8s-minikube/kicbase:v0.0.30@sha256:02c921df998f95e849058af14de7045efc3954d90320967418a0d1f182bbc0b2", image.Opts.Name)
|
||||||
is.Equal("v0.0.31", image.Tag)
|
is.Equal("v0.0.31", image.Tag)
|
||||||
is.Equal("k8s-minikube/kicbase", image.Path)
|
is.Equal("k8s-minikube/kicbase", image.Path)
|
||||||
is.Equal("gcr.io", image.Domain)
|
is.Equal("gcr.io", image.Domain)
|
||||||
|
@ -89,7 +89,7 @@ func TestUpdateParsedImage(t *testing.T) {
|
||||||
is.NoError(err, "")
|
is.NoError(err, "")
|
||||||
_ = image.WithDigest("sha256:02c921df998f95e849058af14de7045efc3954d90320967418a0d1f182bbc0b3")
|
_ = image.WithDigest("sha256:02c921df998f95e849058af14de7045efc3954d90320967418a0d1f182bbc0b3")
|
||||||
is.Equal("gcr.io/k8s-minikube/kicbase:v0.0.30", image.FullName())
|
is.Equal("gcr.io/k8s-minikube/kicbase:v0.0.30", image.FullName())
|
||||||
is.Equal("gcr.io/k8s-minikube/kicbase:v0.0.30@sha256:02c921df998f95e849058af14de7045efc3954d90320967418a0d1f182bbc0b2", image.opts.Name)
|
is.Equal("gcr.io/k8s-minikube/kicbase:v0.0.30@sha256:02c921df998f95e849058af14de7045efc3954d90320967418a0d1f182bbc0b2", image.Opts.Name)
|
||||||
is.Equal("v0.0.30", image.Tag)
|
is.Equal("v0.0.30", image.Tag)
|
||||||
is.Equal("k8s-minikube/kicbase", image.Path)
|
is.Equal("k8s-minikube/kicbase", image.Path)
|
||||||
is.Equal("gcr.io", image.Domain)
|
is.Equal("gcr.io", image.Domain)
|
||||||
|
@ -105,9 +105,9 @@ func TestUpdateParsedImage(t *testing.T) {
|
||||||
Name: "gcr.io/k8s-minikube/kicbase:v0.0.30@sha256:02c921df998f95e849058af14de7045efc3954d90320967418a0d1f182bbc0b2",
|
Name: "gcr.io/k8s-minikube/kicbase:v0.0.30@sha256:02c921df998f95e849058af14de7045efc3954d90320967418a0d1f182bbc0b2",
|
||||||
})
|
})
|
||||||
is.NoError(err, "")
|
is.NoError(err, "")
|
||||||
_ = image.trimDigest()
|
_ = image.TrimDigest()
|
||||||
is.Equal("gcr.io/k8s-minikube/kicbase:v0.0.30", image.FullName())
|
is.Equal("gcr.io/k8s-minikube/kicbase:v0.0.30", image.FullName())
|
||||||
is.Equal("gcr.io/k8s-minikube/kicbase:v0.0.30@sha256:02c921df998f95e849058af14de7045efc3954d90320967418a0d1f182bbc0b2", image.opts.Name)
|
is.Equal("gcr.io/k8s-minikube/kicbase:v0.0.30@sha256:02c921df998f95e849058af14de7045efc3954d90320967418a0d1f182bbc0b2", image.Opts.Name)
|
||||||
is.Equal("v0.0.30", image.Tag)
|
is.Equal("v0.0.30", image.Tag)
|
||||||
is.Equal("k8s-minikube/kicbase", image.Path)
|
is.Equal("k8s-minikube/kicbase", image.Path)
|
||||||
is.Equal("gcr.io", image.Domain)
|
is.Equal("gcr.io", image.Domain)
|
||||||
|
|
|
@ -29,7 +29,7 @@ func (c *RegistryClient) RegistryAuth(image Image) (string, string, error) {
|
||||||
return "", "", err
|
return "", "", err
|
||||||
}
|
}
|
||||||
|
|
||||||
registry, err := findBestMatchRegistry(image.opts.Name, registries)
|
registry, err := findBestMatchRegistry(image.Opts.Name, registries)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", "", err
|
return "", "", err
|
||||||
}
|
}
|
||||||
|
@ -59,7 +59,7 @@ func (c *RegistryClient) EncodedRegistryAuth(image Image) (string, error) {
|
||||||
return "", err
|
return "", err
|
||||||
}
|
}
|
||||||
|
|
||||||
registry, err := findBestMatchRegistry(image.opts.Name, registries)
|
registry, err := findBestMatchRegistry(image.Opts.Name, registries)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", err
|
return "", err
|
||||||
}
|
}
|
||||||
|
|
|
@ -47,13 +47,6 @@ type (
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
func NewKubeClientFromClientset(cli *kubernetes.Clientset) *KubeClient {
|
|
||||||
return &KubeClient{
|
|
||||||
cli: cli,
|
|
||||||
instanceID: "",
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// NewClientFactory returns a new instance of a ClientFactory
|
// NewClientFactory returns a new instance of a ClientFactory
|
||||||
func NewClientFactory(signatureService portainer.DigitalSignatureService, reverseTunnelService portainer.ReverseTunnelService, dataStore dataservices.DataStore, instanceID, addrHTTPS, userSessionTimeout string) (*ClientFactory, error) {
|
func NewClientFactory(signatureService portainer.DigitalSignatureService, reverseTunnelService portainer.ReverseTunnelService, dataStore dataservices.DataStore, instanceID, addrHTTPS, userSessionTimeout string) (*ClientFactory, error) {
|
||||||
if userSessionTimeout == "" {
|
if userSessionTimeout == "" {
|
||||||
|
|
|
@ -45,11 +45,6 @@ func SanitizeLabel(value string) string {
|
||||||
return strings.Trim(onlyAllowedCharacterString, ".-_")
|
return strings.Trim(onlyAllowedCharacterString, ".-_")
|
||||||
}
|
}
|
||||||
|
|
||||||
// IsGitStack checks if the stack is a git stack or not
|
|
||||||
func IsGitStack(stack *portainer.Stack) bool {
|
|
||||||
return stack.GitConfig != nil && len(stack.GitConfig.URL) != 0
|
|
||||||
}
|
|
||||||
|
|
||||||
// IsRelativePathStack checks if the stack is a git stack or not
|
// IsRelativePathStack checks if the stack is a git stack or not
|
||||||
func IsRelativePathStack(stack *portainer.Stack) bool {
|
func IsRelativePathStack(stack *portainer.Stack) bool {
|
||||||
// Always return false in CE
|
// Always return false in CE
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue