Skip to content

Commit 84df1a9

Browse files
Merge pull request #30788 from clobrano/fix/ocpbugs-76943-dualstack-bmc-secret-lookup
OCPBUGS-76943: Fix dualstack BMC secret and BMH lookup using short name extraction
2 parents 39fc225 + 00c065a commit 84df1a9

1 file changed

Lines changed: 22 additions & 20 deletions

File tree

test/extended/two_node/utils/apis/baremetalhost.go

Lines changed: 22 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
package apis
33

44
import (
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

Comments
 (0)