Sfoglia il codice sorgente

Merge pull request #30534 from allencloud/remove-cli-command-secret-util

remove cli/command/secrets/utils.go
Daniel Nephin 8 anni fa
parent
commit
9931cb045d
2 ha cambiato i file con 13 aggiunte e 93 eliminazioni
  1. 0 76
      cli/command/secret/utils.go
  2. 13 17
      cli/command/stack/deploy.go

+ 0 - 76
cli/command/secret/utils.go

@@ -1,76 +0,0 @@
-package secret
-
-import (
-	"fmt"
-	"strings"
-
-	"github.com/docker/docker/api/types"
-	"github.com/docker/docker/api/types/filters"
-	"github.com/docker/docker/api/types/swarm"
-	"github.com/docker/docker/client"
-	"golang.org/x/net/context"
-)
-
-// GetSecretsByNameOrIDPrefixes returns secrets given a list of ids or names
-func GetSecretsByNameOrIDPrefixes(ctx context.Context, client client.APIClient, terms []string) ([]swarm.Secret, error) {
-	args := filters.NewArgs()
-	for _, n := range terms {
-		args.Add("names", n)
-		args.Add("id", n)
-	}
-
-	return client.SecretList(ctx, types.SecretListOptions{
-		Filters: args,
-	})
-}
-
-func getCliRequestedSecretIDs(ctx context.Context, client client.APIClient, terms []string) ([]string, error) {
-	secrets, err := GetSecretsByNameOrIDPrefixes(ctx, client, terms)
-	if err != nil {
-		return nil, err
-	}
-
-	if len(secrets) > 0 {
-		found := make(map[string]struct{})
-	next:
-		for _, term := range terms {
-			// attempt to lookup secret by full ID
-			for _, s := range secrets {
-				if s.ID == term {
-					found[s.ID] = struct{}{}
-					continue next
-				}
-			}
-			// attempt to lookup secret by full name
-			for _, s := range secrets {
-				if s.Spec.Annotations.Name == term {
-					found[s.ID] = struct{}{}
-					continue next
-				}
-			}
-			// attempt to lookup secret by partial ID (prefix)
-			// return error if more than one matches found (ambiguous)
-			n := 0
-			for _, s := range secrets {
-				if strings.HasPrefix(s.ID, term) {
-					found[s.ID] = struct{}{}
-					n++
-				}
-			}
-			if n > 1 {
-				return nil, fmt.Errorf("secret %s is ambiguous (%d matches found)", term, n)
-			}
-		}
-
-		// We already collected all the IDs found.
-		// Now we will remove duplicates by converting the map to slice
-		ids := []string{}
-		for id := range found {
-			ids = append(ids, id)
-		}
-
-		return ids, nil
-	}
-
-	return terms, nil
-}

+ 13 - 17
cli/command/stack/deploy.go

@@ -11,10 +11,10 @@ import (
 	"github.com/docker/docker/api/types/swarm"
 	"github.com/docker/docker/api/types/swarm"
 	"github.com/docker/docker/cli"
 	"github.com/docker/docker/cli"
 	"github.com/docker/docker/cli/command"
 	"github.com/docker/docker/cli/command"
-	secretcli "github.com/docker/docker/cli/command/secret"
 	"github.com/docker/docker/cli/compose/convert"
 	"github.com/docker/docker/cli/compose/convert"
 	"github.com/docker/docker/cli/compose/loader"
 	"github.com/docker/docker/cli/compose/loader"
 	composetypes "github.com/docker/docker/cli/compose/types"
 	composetypes "github.com/docker/docker/cli/compose/types"
+	apiclient "github.com/docker/docker/client"
 	dockerclient "github.com/docker/docker/client"
 	dockerclient "github.com/docker/docker/client"
 	"github.com/pkg/errors"
 	"github.com/pkg/errors"
 	"github.com/spf13/cobra"
 	"github.com/spf13/cobra"
@@ -229,22 +229,18 @@ func createSecrets(
 	client := dockerCli.Client()
 	client := dockerCli.Client()
 
 
 	for _, secretSpec := range secrets {
 	for _, secretSpec := range secrets {
-		// TODO: fix this after https://github.com/docker/docker/pull/29218
-		secrets, err := secretcli.GetSecretsByNameOrIDPrefixes(ctx, client, []string{secretSpec.Name})
-		switch {
-		case err != nil:
-			return err
-		case len(secrets) > 1:
-			return errors.Errorf("ambiguous secret name: %s", secretSpec.Name)
-		case len(secrets) == 0:
-			fmt.Fprintf(dockerCli.Out(), "Creating secret %s\n", secretSpec.Name)
-			_, err = client.SecretCreate(ctx, secretSpec)
-		default:
-			secret := secrets[0]
-			// Update secret to ensure that the local data hasn't changed
-			err = client.SecretUpdate(ctx, secret.ID, secret.Meta.Version, secretSpec)
-		}
-		if err != nil {
+		secret, _, err := client.SecretInspectWithRaw(ctx, secretSpec.Name)
+		if err == nil {
+			// secret already exists, then we update that
+			if err := client.SecretUpdate(ctx, secret.ID, secret.Meta.Version, secretSpec); err != nil {
+				return err
+			}
+		} else if apiclient.IsErrSecretNotFound(err) {
+			// secret does not exist, then we create a new one.
+			if _, err := client.SecretCreate(ctx, secretSpec); err != nil {
+				return err
+			}
+		} else {
 			return err
 			return err
 		}
 		}
 	}
 	}