Browse code

support the same secret with different targets on service create

Signed-off-by: Evan Hazlett <ejhazlett@gmail.com>

Evan Hazlett authored on 2016/10/28 09:18:12
Showing 1 changed files
... ...
@@ -44,9 +44,10 @@ func parseSecretString(secretString string) (string, string, error) {
44 44
 // them to secret references to use with the spec
45 45
 func parseSecrets(client client.APIClient, requestedSecrets []string) ([]*swarmtypes.SecretReference, error) {
46 46
 	lookupSecretNames := []string{}
47
-	needSecrets := make(map[string]*swarmtypes.SecretReference)
47
+	neededSecrets := make(map[string]*swarmtypes.SecretReference)
48 48
 	ctx := context.Background()
49 49
 
50
+	neededLookup := map[string]string{}
50 51
 	for _, secret := range requestedSecrets {
51 52
 		n, t, err := parseSecretString(secret)
52 53
 		if err != nil {
... ...
@@ -60,7 +61,8 @@ func parseSecrets(client client.APIClient, requestedSecrets []string) ([]*swarmt
60 60
 		}
61 61
 
62 62
 		lookupSecretNames = append(lookupSecretNames, n)
63
-		needSecrets[n] = secretRef
63
+		neededLookup[t] = n
64
+		neededSecrets[t] = secretRef
64 65
 	}
65 66
 
66 67
 	args := filters.NewArgs()
... ...
@@ -82,12 +84,17 @@ func parseSecrets(client client.APIClient, requestedSecrets []string) ([]*swarmt
82 82
 
83 83
 	addedSecrets := []*swarmtypes.SecretReference{}
84 84
 
85
-	for secretName, secretRef := range needSecrets {
85
+	for target, secretName := range neededLookup {
86 86
 		id, ok := foundSecrets[secretName]
87 87
 		if !ok {
88 88
 			return nil, fmt.Errorf("secret not found: %s", secretName)
89 89
 		}
90 90
 
91
+		secretRef, ok := neededSecrets[target]
92
+		if !ok {
93
+			return nil, fmt.Errorf("secret reference not found: %s", secretName)
94
+		}
95
+
91 96
 		// set the id for the ref to properly assign in swarm
92 97
 		// since swarm needs the ID instead of the name
93 98
 		secretRef.SecretID = id