Skip to content

Commit

Permalink
kwokctl: support dryrun for scale
Browse files Browse the repository at this point in the history
  • Loading branch information
wzshiming committed Feb 1, 2024
1 parent 622224c commit eae067d
Show file tree
Hide file tree
Showing 2 changed files with 50 additions and 15 deletions.
5 changes: 5 additions & 0 deletions pkg/kwokctl/dryrun/dryrun.go
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,11 @@ func PrintMessage(format string, a ...any) {
_, _ = fmt.Fprintf(stdout, format+"\n", a...)
}

// PrintReader prints the content of the reader to stdout.
func PrintReader(r io.Reader) {
_, _ = io.Copy(stdout, r)
}

type dryRunWriter struct {
name string
w io.Writer
Expand Down
60 changes: 45 additions & 15 deletions pkg/kwokctl/scale/scale.go
Original file line number Diff line number Diff line change
Expand Up @@ -164,6 +164,10 @@ func Scale(ctx context.Context, clientset client.Clientset, conf Config) error {
deleteCount++

if len(objs) == 0 {
if conf.DryRun {
deleteDryrun(gvr, obj.GetName(), namespace)
return nil
}
err = ri.Delete(ctx, obj.GetName(), metav1.DeleteOptions{})
if err != nil {
logger.Error("Delete resource", err)
Expand All @@ -174,6 +178,10 @@ func Scale(ctx context.Context, clientset client.Clientset, conf Config) error {
// New object is newer than the end object, delete the new object.
endObj := objs[len(objs)-1]
if endObj.Less(obj.GetCreationTimestamp(), obj.GetName()) {
if conf.DryRun {
deleteDryrun(gvr, obj.GetName(), namespace)
return nil
}
// Delete the last object.
err = ri.Delete(ctx, obj.GetName(), metav1.DeleteOptions{})
if err != nil {
Expand All @@ -182,10 +190,14 @@ func Scale(ctx context.Context, clientset client.Clientset, conf Config) error {
return nil
}

// Delete the end object.
err = ri.Delete(ctx, endObj.Name, metav1.DeleteOptions{})
if err != nil {
logger.Error("Delete resource", err)
if conf.DryRun {
deleteDryrun(gvr, endObj.Name, namespace)
} else {
// Delete the end object.
err = ri.Delete(ctx, endObj.Name, metav1.DeleteOptions{})
if err != nil {
logger.Error("Delete resource", err)
}
}

// Find the index of the new object to be inserted.
Expand All @@ -197,6 +209,10 @@ func Scale(ctx context.Context, clientset client.Clientset, conf Config) error {
})

if index == len(objs) {
if conf.DryRun {
deleteDryrun(gvr, obj.GetName(), namespace)
return nil
}
// Delete the last object.
err = ri.Delete(ctx, obj.GetName(), metav1.DeleteOptions{})
if err != nil {
Expand Down Expand Up @@ -283,23 +299,37 @@ func Scale(ctx context.Context, clientset client.Clientset, conf Config) error {

ctx = log.NewContext(ctx, logger)

loader, err := snapshot.NewLoader(snapshot.LoadConfig{
Clientset: clientset,
NoFilers: true,
})
if err != nil {
return err
}
if conf.DryRun {
dryrun.PrintMessage("kubectl apply -f - <<EOF")
dryrun.PrintReader(gen)
dryrun.PrintMessage("\nEOF")
} else {
loader, err := snapshot.NewLoader(snapshot.LoadConfig{
Clientset: clientset,
NoFilers: true,
})
if err != nil {
return err
}

decoder := yaml.NewDecoder(gen)
err = loader.Load(ctx, decoder)
if err != nil {
return err
decoder := yaml.NewDecoder(gen)
err = loader.Load(ctx, decoder)
if err != nil {
return err
}
}

return nil
}

func deleteDryrun(gvr schema.GroupVersionResource, name, namespace string) {
if namespace != "" {
dryrun.PrintMessage("kubectl delete %s -n %s %s", gvr, namespace, name)
} else {
dryrun.PrintMessage("kubectl delete %s %s", gvr, name)
}
}

// NewParameters parses the parameters.
func NewParameters(ctx context.Context, raw json.RawMessage, params []string) (any, error) {
var param any
Expand Down

0 comments on commit eae067d

Please sign in to comment.