This repository has been archived by the owner on Oct 11, 2019. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 9
/
secretparameter.go
75 lines (65 loc) · 2.26 KB
/
secretparameter.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
package secretparameter
import (
"encoding/json"
smith_v1 "github.com/atlassian/smith/pkg/apis/smith/v1"
smith_plugin "github.com/atlassian/smith/pkg/plugin"
"github.com/atlassian/voyager/pkg/execution/plugins"
sc_v1b1 "github.com/kubernetes-incubator/service-catalog/pkg/apis/servicecatalog/v1beta1"
"github.com/pkg/errors"
core_v1 "k8s.io/api/core/v1"
meta_v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
)
func createSecret(spec Spec, dependencies map[smith_v1.ResourceName]smith_plugin.Dependency) (*core_v1.Secret, error) {
outputSecretMap := make(map[string][]byte, len(spec.Mapping))
for smithResourceName, mappingRules := range spec.Mapping {
dependency, ok := dependencies[smithResourceName]
if !ok {
return nil, errors.Errorf("unknown resource %q in mappings", smithResourceName)
}
secret, err := extractSecret(dependency)
if err != nil {
return nil, err
}
parameters, err := convertSecretToParameters(mappingRules, secret)
if err != nil {
return nil, err
}
outputSecretMap[string(smithResourceName)], err = json.Marshal(parameters)
if err != nil {
return nil, errors.WithStack(err)
}
}
return &core_v1.Secret{
TypeMeta: meta_v1.TypeMeta{
APIVersion: core_v1.SchemeGroupVersion.String(),
Kind: "Secret",
},
Data: outputSecretMap,
}, nil
}
func extractSecret(dependency smith_plugin.Dependency) (*core_v1.Secret, error) {
switch actual := dependency.Actual.(type) {
case *sc_v1b1.ServiceBinding:
secret := plugins.FindBindingSecret(actual, dependency.Outputs)
if secret == nil {
return nil, errors.Errorf("missing secret for ServiceBinding %q", actual.Name)
}
return secret, nil
case *core_v1.Secret:
return actual, nil
default:
return nil, errors.Errorf("unsupported dependency object kind - got: %s, expected ServiceBinding or Secret",
actual.GetObjectKind().GroupVersionKind())
}
}
func convertSecretToParameters(mappingRules map[string]string, secret *core_v1.Secret) (map[string]string, error) {
parameters := make(map[string]string, len(mappingRules))
for secretKey, outputKey := range mappingRules {
inputValue, ok := secret.Data[secretKey]
if !ok {
return nil, errors.Errorf("missing requested secret key %q", secretKey)
}
parameters[outputKey] = string(inputValue)
}
return parameters, nil
}