@@ -36,35 +36,37 @@ func AddGenericSecret(comp InfoGetter, svc *runtime.ServiceRuntime, suffix strin
3636 secret := & corev1.Secret {}
3737 cd := []xkube.ConnectionDetail {}
3838
39- errObj := svc .GetObservedComposedResource (& xkube.Object {}, secretObjectName )
40-
4139 err := svc .GetObservedKubeObject (secret , secretObjectName )
40+ if err != nil {
41+ if err == runtime .ErrNotFound {
42+ svc .Log .Info ("Could not find secret, generating new passwords" , "secret" , secretObjectName )
43+ } else {
44+ return secretObjectName , err
45+ }
46+ }
4247
43- // runtime.ErrNotFound for the secret alone isn't enough here to prevent re-creating passwords
44- // during provisioning it can happen that provider-kubernetes already applied a secret, but
45- // hasn't yet set the status. If the status of the object is empty, the runtime will
46- // also throw an ErrNotFound.
47- // So we also check for the existence of the `Object` itself from the observed state, by
48- // trying to get the object directly.
49- if err == runtime .ErrNotFound && errObj == runtime .ErrNotFound {
50-
51- stringData := map [string ]string {}
48+ stringData := map [string ]string {}
5249
53- for _ , field := range fieldList {
50+ // provider-kubernetes already decodes the base64 values for us, so
51+ // when we want to re-apply it properly, we have to apply it as stringData.
52+ for _ , field := range fieldList {
53+ if _ , ok := secret .Data [field ]; ! ok {
54+ svc .Log .Info ("Secret does not contain field, generating new secret" , "secret" , secretObjectName , "field" , field )
5455 stringData [field ], err = genPassword ()
5556 if err != nil {
5657 return secretObjectName , fmt .Errorf ("cannot generate pw for %s: %w" , field , err )
5758 }
59+ } else {
60+ stringData [field ] = string (secret .Data [field ])
5861 }
59- secret = & corev1.Secret {
60- ObjectMeta : metav1.ObjectMeta {
61- Name : secretObjectName ,
62- Namespace : comp .GetInstanceNamespace (),
63- },
64- StringData : stringData ,
65- }
66- } else if err != nil && err != runtime .ErrNotFound {
67- return secretObjectName , err
62+ }
63+
64+ secret = & corev1.Secret {
65+ ObjectMeta : metav1.ObjectMeta {
66+ Name : secretObjectName ,
67+ Namespace : comp .GetInstanceNamespace (),
68+ },
69+ StringData : stringData ,
6870 }
6971
7072 // We need to add the secrets every time, or we override existing ones with
0 commit comments