Quellcode durchsuchen

simplify secret lookup on service create

Signed-off-by: Evan Hazlett <ejhazlett@gmail.com>
Evan Hazlett vor 8 Jahren
Ursprung
Commit
dce2afbd81
1 geänderte Dateien mit 12 neuen und 18 gelöschten Zeilen
  1. 12 18
      cli/command/service/parse.go

+ 12 - 18
cli/command/service/parse.go

@@ -43,11 +43,9 @@ func parseSecretString(secretString string) (string, string, error) {
 // parseSecrets retrieves the secrets from the requested names and converts
 // them to secret references to use with the spec
 func parseSecrets(client client.APIClient, requestedSecrets []string) ([]*swarmtypes.SecretReference, error) {
-	lookupSecretNames := []string{}
-	neededSecrets := make(map[string]*swarmtypes.SecretReference)
+	secretRefs := make(map[string]*swarmtypes.SecretReference)
 	ctx := context.Background()
 
-	neededLookup := map[string]string{}
 	for _, secret := range requestedSecrets {
 		n, t, err := parseSecretString(secret)
 		if err != nil {
@@ -60,14 +58,15 @@ func parseSecrets(client client.APIClient, requestedSecrets []string) ([]*swarmt
 			Target:     t,
 		}
 
-		lookupSecretNames = append(lookupSecretNames, n)
-		neededLookup[t] = n
-		neededSecrets[t] = secretRef
+		if _, exists := secretRefs[t]; exists {
+			return nil, fmt.Errorf("duplicate secret target for %s not allowed", n)
+		}
+		secretRefs[t] = secretRef
 	}
 
 	args := filters.NewArgs()
-	for _, s := range lookupSecretNames {
-		args.Add("names", s)
+	for _, s := range secretRefs {
+		args.Add("names", s.SecretName)
 	}
 
 	secrets, err := client.SecretList(ctx, types.SecretListOptions{
@@ -84,21 +83,16 @@ func parseSecrets(client client.APIClient, requestedSecrets []string) ([]*swarmt
 
 	addedSecrets := []*swarmtypes.SecretReference{}
 
-	for target, secretName := range neededLookup {
-		id, ok := foundSecrets[secretName]
-		if !ok {
-			return nil, fmt.Errorf("secret not found: %s", secretName)
-		}
-
-		secretRef, ok := neededSecrets[target]
+	for _, ref := range secretRefs {
+		id, ok := foundSecrets[ref.SecretName]
 		if !ok {
-			return nil, fmt.Errorf("secret reference not found: %s", secretName)
+			return nil, fmt.Errorf("secret not found: %s", ref.SecretName)
 		}
 
 		// set the id for the ref to properly assign in swarm
 		// since swarm needs the ID instead of the name
-		secretRef.SecretID = id
-		addedSecrets = append(addedSecrets, secretRef)
+		ref.SecretID = id
+		addedSecrets = append(addedSecrets, ref)
 	}
 
 	return addedSecrets, nil