22package apis
33
44import (
5- "encoding/base64 "
5+ "context "
66 "fmt"
77 "regexp"
88 "strings"
@@ -12,6 +12,7 @@ import (
1212 "github.com/openshift/origin/test/extended/two_node/utils/core"
1313 exutil "github.com/openshift/origin/test/extended/util"
1414 corev1 "k8s.io/api/core/v1"
15+ metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
1516 k8srand "k8s.io/apimachinery/pkg/util/rand"
1617)
1718
@@ -119,31 +120,27 @@ func RotateNodeBMCPassword(oc *exutil.CLI, node *corev1.Node) (string, string, [
119120 return "" , "" , nil , err
120121 }
121122
122- // Get the secret to read current password
123- secretOutput , err := oc .AsAdmin ().Run ("get" ).Args ("secret" , secretName , "-n" , BMCSecretNamespace , "-o" , "yaml" ).Output ()
123+ ctx := context .Background ()
124+ secretClient := oc .AdminKubeClient ().CoreV1 ().Secrets (BMCSecretNamespace )
125+ secret , err := secretClient .Get (ctx , secretName , metav1.GetOptions {})
124126 if err != nil {
125- return "" , "" , nil , fmt .Errorf ("failed to get BMC secret %s: %w" , secretName , err )
126- }
127-
128- var secret corev1.Secret
129- if err := utils .DecodeObject (secretOutput , & secret ); err != nil {
130- return "" , "" , nil , fmt .Errorf ("failed to decode secret: %w" , err )
127+ return "" , "" , nil , fmt .Errorf ("failed to get BMC secret %s/%s: %w" , BMCSecretNamespace , secretName , err )
131128 }
132129
133130 // Save original password
134131 original := secret .Data [secretsDataPasswordKey ]
135132
136133 // Rotate password using oc patch
137134 newPass := k8srand .String (32 )
138- newPassB64 := base64 . StdEncoding . EncodeToString ([] byte ( newPass ) )
139- patch := fmt . Sprintf ( `{"data":{"%s":"%s"}}` , secretsDataPasswordKey , newPassB64 )
135+ updated := secret . DeepCopy ( )
136+ updated . Data [ secretsDataPasswordKey ] = [] byte ( newPass )
140137
141- _ , err = oc . AsAdmin (). Run ( "patch" ). Args ( "secret" , secretName , "-n" , BMCSecretNamespace , "-p" , patch ). Output ()
142- if err != nil {
143- return "" , "" , nil , fmt . Errorf ( "failed to update secret %s: %w" , secretName , err )
138+ if _ , err := secretClient . Update ( ctx , updated , metav1. UpdateOptions {}); err != nil {
139+ return "" , "" , nil , fmt . Errorf ( "failed to update secret %s/%s: %w" ,
140+ BMCSecretNamespace , secret . Name , err )
144141 }
145142
146- return BMCSecretNamespace , secretName , original , nil
143+ return BMCSecretNamespace , secret . Name , original , nil
147144}
148145
149146// RestoreBMCPassword restores the password key on the given BMC Secret.
@@ -152,12 +149,17 @@ func RestoreBMCPassword(oc *exutil.CLI, namespace, name string, originalPassword
152149 return nil
153150 }
154151
155- // Restore password using oc patch
156- passB64 := base64 .StdEncoding .EncodeToString (originalPassword )
157- patch := fmt .Sprintf (`{"data":{"%s":"%s"}}` , secretsDataPasswordKey , passB64 )
158-
159- _ , err := oc .AsAdmin ().Run ("patch" ).Args ("secret" , name , "-n" , namespace , "-p" , patch ).Output ()
152+ ctx := context .Background ()
153+ secretClient := oc .AdminKubeClient ().CoreV1 ().Secrets (BMCSecretNamespace )
154+ secret , err := secretClient .Get (ctx , name , metav1.GetOptions {})
160155 if err != nil {
156+ return fmt .Errorf ("failed to re-fetch BMC secret %s/%s: %w" , namespace , name , err )
157+ }
158+
159+ updated := secret .DeepCopy ()
160+ updated .Data [secretsDataPasswordKey ] = originalPassword
161+
162+ if _ , err := secretClient .Update (ctx , updated , metav1.UpdateOptions {}); err != nil {
161163 return fmt .Errorf ("failed to restore password for %s/%s: %w" , namespace , name , err )
162164 }
163165
0 commit comments