Skip to content
This repository was archived by the owner on Aug 12, 2025. It is now read-only.

Commit d311bad

Browse files
committed
Fix dry run output for migrate providerid
1 parent f268abe commit d311bad

File tree

5 files changed

+44
-27
lines changed

5 files changed

+44
-27
lines changed

cmd/helper/base/testutils/testutils.go

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ import (
3636
utilruntime "k8s.io/apimachinery/pkg/util/runtime"
3737
"k8s.io/client-go/kubernetes/scheme"
3838
"k8s.io/client-go/rest"
39+
"sigs.k8s.io/cluster-api-provider-packet/cmd/helper/base"
3940
clusterv1 "sigs.k8s.io/cluster-api/api/v1alpha3"
4041
"sigs.k8s.io/cluster-api/controllers/remote"
4142
"sigs.k8s.io/cluster-api/util"
@@ -383,26 +384,26 @@ func VerifySuccessOutputDryRun(t *testing.T, output string) {
383384
t.Helper()
384385
g := gomega.NewWithT(t)
385386
// TODO: update prefix strings to be variables instead of hardcoded
386-
g.Expect(output).To(gomega.HavePrefix("(Dry Run)"))
387+
g.Expect(output).To(gomega.HavePrefix(base.DryRunPrefix))
387388
}
388389

389390
func VerifySuccessOutputChanged(t *testing.T, output string) {
390391
t.Helper()
391392
g := gomega.NewWithT(t)
392393
// TODO: update prefix strings to be variables instead of hardcoded
393-
g.Expect(output).To(gomega.HavePrefix("✅"))
394+
g.Expect(output).To(gomega.HavePrefix(base.SuccessPrefix))
394395
}
395396

396397
func VerifySuccessOutputUnchanged(t *testing.T, output string) {
397398
t.Helper()
398399
g := gomega.NewWithT(t)
399400
// TODO: update prefix strings to be variables instead of hardcoded
400-
g.Expect(output).To(gomega.HavePrefix("✔"))
401+
g.Expect(output).To(gomega.HavePrefix(base.NoOpPrefix))
401402
}
402403

403404
func VerifySuccessOutputSkipped(t *testing.T, output string) {
404405
t.Helper()
405406
g := gomega.NewWithT(t)
406407
// TODO: update prefix strings to be variables instead of hardcoded
407-
g.Expect(output).To(gomega.HavePrefix("Skipping "))
408+
g.Expect(output).To(gomega.HavePrefix(base.SkipPrefix))
408409
}

cmd/helper/base/tool.go

Lines changed: 18 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,13 @@ import (
4343
"sigs.k8s.io/yaml"
4444
)
4545

46+
const (
47+
DryRunPrefix = "(Dry Run) "
48+
SuccessPrefix = "✅ "
49+
NoOpPrefix = "✔ "
50+
SkipPrefix = "Skipping "
51+
)
52+
4653
func ObjectToName(obj controllerutil.Object) string {
4754
if obj.GetNamespace() != "" {
4855
return fmt.Sprintf("%s/%s", obj.GetNamespace(), obj.GetName())
@@ -172,20 +179,21 @@ func (t *Tool) WorkloadPatchOrCreateUnstructured(
172179
}
173180

174181
diff := cmp.Diff(redactedExisting, redacted, diff.IgnoreUnset())
175-
logger.Info("(Dry Run) Would patch resource", "kind", obj.GetKind(), "name", name, "diff", diff)
176-
fmt.Fprintf(t.GetBufferFor(c), "(Dry Run) Would patch %s %s\n%s\n", obj.GetKind(), name, indent.String(diff, 4))
182+
logger.Info(DryRunPrefix+"Would patch resource", "kind", obj.GetKind(), "name", name, "diff", diff)
183+
fmt.Fprintf(t.GetBufferFor(c), "%sWould patch %s %s\n%s\n",
184+
DryRunPrefix, obj.GetKind(), name, indent.String(diff, 4))
177185

178186
return nil
179187
}
180188

181189
logger.Info("Successfully patched resource", "kind", obj.GetKind(), "name", name)
182-
fmt.Fprintf(t.GetBufferFor(c), "✅ %s %s has been successfully patched\n", obj.GetKind(), name)
190+
fmt.Fprintf(t.GetBufferFor(c), "%s%s %s has been successfully patched\n", SuccessPrefix, obj.GetKind(), name)
183191
}
184192

185193
kind := obj.GetObjectKind().GroupVersionKind().Kind
186194
name := ObjectToName(obj)
187195
logger.Info("Resource already up to date", "kind", kind, "name", name)
188-
fmt.Fprintf(stdout, "✔ %s %s already up to date\n", kind, name)
196+
fmt.Fprintf(stdout, "%s%s %s already up to date\n", NoOpPrefix, kind, name)
189197

190198
return nil
191199
}
@@ -269,14 +277,14 @@ func (t *Tool) WorkloadCreate(
269277
// Convert the resource into yaml for printing
270278
data, _ := yaml.Marshal(redacted)
271279

272-
logger.Info("(Dry Run) Would create resource", "kind", gvk.Kind, "name", name, "object", data)
273-
fmt.Fprintf(t.GetBufferFor(c), "(Dry Run) Would create %s %s\n%s", gvk.Kind, name, indent.String(string(data), 4))
280+
logger.Info(DryRunPrefix+"Would create resource", "kind", gvk.Kind, "name", name, "object", data)
281+
fmt.Fprintf(t.GetBufferFor(c), "%sWould create %s %s\n%s", DryRunPrefix, gvk.Kind, name, indent.String(string(data), 4))
274282

275283
return nil
276284
}
277285

278286
logger.Info("Successfully created resource", "kind", gvk.Kind, "name", name)
279-
fmt.Fprintf(t.GetBufferFor(c), "✅ %s %s has been successfully created\n", gvk.Kind, name)
287+
fmt.Fprintf(t.GetBufferFor(c), "%s%s %s has been successfully created\n", SuccessPrefix, gvk.Kind, name)
280288

281289
return nil
282290
}
@@ -309,14 +317,14 @@ func (t *Tool) WorkloadDelete(
309317
name := ObjectToName(obj)
310318

311319
if t.DryRun() {
312-
logger.Info("(Dry Run) Would delete resource", "kind", gvk.Kind, "name", name)
313-
fmt.Fprintf(t.GetBufferFor(c), "(Dry Run) Would delete %s %s\n", gvk.Kind, name)
320+
logger.Info(DryRunPrefix+"Would delete resource", "kind", gvk.Kind, "name", name)
321+
fmt.Fprintf(t.GetBufferFor(c), "%sWould delete %s %s\n", DryRunPrefix, gvk.Kind, name)
314322

315323
return nil
316324
}
317325

318326
logger.Info("Successfully deleted resource", "kind", gvk.Kind, "name", name)
319-
fmt.Fprintf(t.GetBufferFor(c), "✅ %s %s has been successfully deleted\n", gvk.Kind, name)
327+
fmt.Fprintf(t.GetBufferFor(c), "%s%s %s has been successfully deleted\n", SuccessPrefix, gvk.Kind, name)
320328

321329
return nil
322330
}

cmd/helper/migrate/providerid/migrator/migrator.go

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,12 @@ import (
1919
"fmt"
2020
"strings"
2121
"sync"
22+
"time"
2223

2324
"github.com/blang/semver"
2425
"github.com/docker/distribution/reference"
2526
"github.com/go-logr/logr"
27+
"github.com/muesli/reflow/indent"
2628
appsv1 "k8s.io/api/apps/v1"
2729
corev1 "k8s.io/api/core/v1"
2830
apierrors "k8s.io/apimachinery/pkg/api/errors"
@@ -33,6 +35,7 @@ import (
3335
clusterv1 "sigs.k8s.io/cluster-api/api/v1alpha3"
3436
capiutil "sigs.k8s.io/cluster-api/util"
3537
"sigs.k8s.io/controller-runtime/pkg/client"
38+
"sigs.k8s.io/yaml"
3639
)
3740

3841
const (
@@ -357,7 +360,7 @@ func (m *Migrator) MigrateNode(ctx context.Context, node *corev1.Node, c *cluste
357360

358361
if strings.HasPrefix(node.Spec.ProviderID, newProviderIDPrefix) {
359362
logger.Info("Node already has the updated providerID")
360-
fmt.Fprintf(m.GetBufferFor(c), "✔ Node %s already has the updated providerID\n", node.Name)
363+
fmt.Fprintf(m.GetBufferFor(c), base.NoOpPrefix+"Node %s already has the updated providerID\n", node.Name)
361364
m.updateNodeStatus(c, node, true)
362365

363366
return nil
@@ -378,10 +381,17 @@ func (m *Migrator) MigrateNode(ctx context.Context, node *corev1.Node, c *cluste
378381
func() error {
379382
if err := m.WorkloadCreate(ctx, logger, c, node); err != nil {
380383
if m.DryRun() && apierrors.IsAlreadyExists(err) {
381-
// TODO: output diff
384+
node.SetManagedFields(nil)
385+
node.SetCreationTimestamp(metav1.NewTime(time.Time{}))
386+
node.SetUID("")
387+
node.SetSelfLink("")
388+
389+
// Convert the resource into yaml for printing
390+
data, _ := yaml.Marshal(node)
391+
382392
// add dry run success output here since Create will fail with an already exists error during dry run
383-
logger.Info("(Dry Run) Would create Node")
384-
fmt.Fprintf(m.GetBufferFor(c), "(Dry Run) Would create Node %s\n", base.ObjectToName(node))
393+
logger.Info(base.DryRunPrefix+"Would create Node", "Node", data)
394+
fmt.Fprintf(m.GetBufferFor(c), base.DryRunPrefix+"Would create Node %s\n%s", base.ObjectToName(node), indent.String(string(data), 4))
385395

386396
return nil
387397
}

cmd/helper/migrate/providerid/migrator/migrator_test.go

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ package migrator_test
1616
import (
1717
"context"
1818
"math/rand"
19+
"regexp"
1920
"strings"
2021
"testing"
2122

@@ -240,10 +241,7 @@ func TestMigrator_MigrateNodeDry(t *testing.T) {
240241
g.Expect(postDryRunNode).To(testutils.BeDerivativeOf(expectedNode))
241242

242243
postDryRunOutputDiff := strings.TrimPrefix(postDryRunOutput, preDryRunOutput)
243-
postDryRunOutputLines := strings.Split(postDryRunOutputDiff, "\n")
244-
g.Expect(postDryRunOutputLines).To(HaveLen(3))
245-
testutils.VerifySuccessOutputDryRun(t, postDryRunOutputLines[0])
246-
testutils.VerifySuccessOutputDryRun(t, postDryRunOutputLines[1])
244+
g.Expect(postDryRunOutputDiff).To(MatchRegexp("^(%s.*\n){2}?", regexp.QuoteMeta(base.DryRunPrefix)))
247245

248246
actualPostDryRunNode := new(corev1.Node)
249247
nodeKey := client.ObjectKey{Name: node.Name} //nolint:exhaustivestruct

cmd/helper/upgrade/cloudprovider/upgrader/upgrader.go

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -303,8 +303,8 @@ func removeOldCCMSecret(ctx context.Context, logger logr.Logger, u *base.Tool, c
303303
case err != nil && !apierrors.IsNotFound(err):
304304
return err
305305
case err == nil:
306-
logger.Info("Skipping removal of secret because Packet CSI is deployed", "name", secretName)
307-
fmt.Fprintf(stdout, "Skipping removal of Secret %s because Packet CSI is deployed", secretName)
306+
logger.Info(base.SkipPrefix+"removal of secret because Packet CSI is deployed", "name", secretName)
307+
fmt.Fprintf(stdout, "%sremoval of Secret %s because Packet CSI is deployed", base.SkipPrefix, secretName)
308308

309309
return nil
310310
}
@@ -313,7 +313,7 @@ func removeOldCCMSecret(ctx context.Context, logger logr.Logger, u *base.Tool, c
313313
if err := u.WorkloadGet(ctx, c, ccmSecretKey, ccmSecret); err != nil {
314314
if apierrors.IsNotFound(err) {
315315
logger.Info("Secret already removed", "name", secretName)
316-
fmt.Fprintf(stdout, "✔ Secret %s already deleted\n", secretName)
316+
fmt.Fprintf(stdout, "%sSecret %s already deleted\n", base.NoOpPrefix, secretName)
317317

318318
return nil
319319
}
@@ -333,7 +333,7 @@ func removeCCMDeployment(ctx context.Context, logger logr.Logger, u *base.Tool,
333333
if err := u.WorkloadGet(ctx, c, ccmKey, ccmDeployment); err != nil {
334334
if apierrors.IsNotFound(err) {
335335
logger.Info("Deployment already removed", "name", deploymentName)
336-
fmt.Fprintf(stdout, "✔ Deployment %s already deleted\n", deploymentName)
336+
fmt.Fprintf(stdout, "%sDeployment %s already deleted\n", base.NoOpPrefix, deploymentName)
337337

338338
return nil
339339
}
@@ -359,7 +359,7 @@ func migrateSecret(ctx context.Context, logger logr.Logger, u *base.Tool, c *clu
359359
// If there was no error, then the secret already exists and there is no need to proceed
360360

361361
logger.Info("Secret already exists", "name", cpemSecretName)
362-
fmt.Fprintf(stdout, "✔ Secret %s/%s already exists\n", cpemSecret.Namespace, cpemSecret.Name)
362+
fmt.Fprintf(stdout, "%sSecret %s/%s already exists\n", base.NoOpPrefix, cpemSecret.Namespace, cpemSecret.Name)
363363

364364
return nil
365365
}

0 commit comments

Comments
 (0)