github.com/caos/orbos@v1.5.14-0.20221103111702-e6cd0cea7ad4/internal/operator/boom/application/applications/reconciling/config/credential/credential.go (about) 1 package credential 2 3 import ( 4 "strings" 5 6 "github.com/caos/orbos/pkg/secret/read" 7 8 "github.com/caos/orbos/internal/operator/boom/api/latest/reconciling" 9 "github.com/caos/orbos/internal/operator/boom/application/applications/reconciling/info" 10 "github.com/caos/orbos/internal/operator/boom/application/resources" 11 "github.com/caos/orbos/internal/operator/boom/labels" 12 "github.com/caos/orbos/mntr" 13 ) 14 15 type Credential struct { 16 URL string 17 UsernameSecret *secret `yaml:"usernameSecret,omitempty"` 18 PasswordSecret *secret `yaml:"passwordSecret,omitempty"` 19 SSHPrivateKeySecret *secret `yaml:"sshPrivateKeySecret,omitempty"` 20 } 21 22 const ( 23 cert = "certificate" 24 user = "username" 25 pw = "password" 26 ) 27 28 type secret struct { 29 Name string 30 Key string 31 } 32 33 func getSecretName(name string, ty string) string { 34 return strings.Join([]string{info.GetName().String(), "cred", name, ty}, "-") 35 } 36 37 func getSecretKey(ty string) string { 38 return ty 39 } 40 41 func GetSecrets(spec *reconciling.Reconciling) []interface{} { 42 secrets := make([]interface{}, 0) 43 namespace := "caos-system" 44 45 for _, v := range spec.Credentials { 46 if read.IsCrdSecret(v.Username, v.ExistingUsernameSecret) { 47 data := map[string]string{ 48 getSecretKey(user): v.Username.Value, 49 } 50 51 conf := &resources.SecretConfig{ 52 Name: getSecretName(v.Name, user), 53 Namespace: namespace, 54 Labels: labels.GetAllApplicationLabels(info.GetName()), 55 Data: data, 56 } 57 secretRes := resources.NewSecret(conf) 58 secrets = append(secrets, secretRes) 59 } 60 if read.IsCrdSecret(v.Password, v.ExistingPasswordSecret) { 61 62 data := map[string]string{ 63 getSecretKey(pw): v.Password.Value, 64 } 65 66 conf := &resources.SecretConfig{ 67 Name: getSecretName(v.Name, pw), 68 Namespace: namespace, 69 Labels: labels.GetAllApplicationLabels(info.GetName()), 70 Data: data, 71 } 72 secretRes := resources.NewSecret(conf) 73 secrets = append(secrets, secretRes) 74 } 75 if read.IsCrdSecret(v.Certificate, v.ExistingCertificateSecret) { 76 data := map[string]string{ 77 getSecretKey(cert): v.Certificate.Value, 78 } 79 80 conf := &resources.SecretConfig{ 81 Name: getSecretName(v.Name, cert), 82 Namespace: namespace, 83 Labels: labels.GetAllApplicationLabels(info.GetName()), 84 Data: data, 85 } 86 secretRes := resources.NewSecret(conf) 87 secrets = append(secrets, secretRes) 88 } 89 } 90 91 return secrets 92 } 93 94 func GetFromSpec(monitor mntr.Monitor, spec *reconciling.Reconciling) []*Credential { 95 credentials := make([]*Credential, 0) 96 97 if spec.Credentials == nil || len(spec.Credentials) == 0 { 98 return credentials 99 } 100 101 for _, v := range spec.Credentials { 102 var us, ps, ssh *secret 103 if read.IsCrdSecret(v.Username, v.ExistingUsernameSecret) { 104 us = &secret{ 105 Name: getSecretName(v.Name, user), 106 Key: getSecretKey(user), 107 } 108 } else if read.IsExistentSecret(v.Username, v.ExistingUsernameSecret) { 109 us = &secret{ 110 Name: v.ExistingUsernameSecret.Name, 111 Key: v.ExistingUsernameSecret.Key, 112 } 113 } 114 115 if read.IsCrdSecret(v.Password, v.ExistingPasswordSecret) { 116 ps = &secret{ 117 Name: getSecretName(v.Name, pw), 118 Key: getSecretKey(pw), 119 } 120 } else if read.IsExistentSecret(v.Password, v.ExistingPasswordSecret) { 121 ps = &secret{ 122 Name: v.ExistingPasswordSecret.Name, 123 Key: v.ExistingPasswordSecret.Key, 124 } 125 } 126 127 if read.IsCrdSecret(v.Certificate, v.ExistingCertificateSecret) { 128 ssh = &secret{ 129 Name: getSecretName(v.Name, cert), 130 Key: getSecretKey(cert), 131 } 132 } else if read.IsExistentSecret(v.Certificate, v.ExistingCertificateSecret) { 133 ssh = &secret{ 134 Name: v.ExistingCertificateSecret.Name, 135 Key: v.ExistingCertificateSecret.Key, 136 } 137 } 138 139 cred := &Credential{ 140 URL: v.URL, 141 UsernameSecret: us, 142 PasswordSecret: ps, 143 SSHPrivateKeySecret: ssh, 144 } 145 credentials = append(credentials, cred) 146 } 147 148 return credentials 149 }