From 839f957ae0e81860356c571d67958340cb310795 Mon Sep 17 00:00:00 2001
From: Chris K Wensel <chris@wensel.net>
Date: Tue, 26 Sep 2023 17:09:47 -0700
Subject: [PATCH] add retry to deploy command

---
 .../clusterless/command/project/DeployCommandOptions.java   | 6 ++++++
 .../conductor/worker/cli/ClusterlessBootstrapWorker.java    | 4 ++--
 .../conductor/worker/cli/DeployerProjectWorker.java         | 2 +-
 .../clusterless/substrate/aws/cdk/lifecycle/Deploy.java     | 2 +-
 4 files changed, 10 insertions(+), 4 deletions(-)

diff --git a/clusterless-main-common/src/main/java/clusterless/command/project/DeployCommandOptions.java b/clusterless-main-common/src/main/java/clusterless/command/project/DeployCommandOptions.java
index 2aa24f80..ff9c6fc8 100644
--- a/clusterless-main-common/src/main/java/clusterless/command/project/DeployCommandOptions.java
+++ b/clusterless-main-common/src/main/java/clusterless/command/project/DeployCommandOptions.java
@@ -19,6 +19,8 @@
  */
 @CommandLine.Command(description = "Deploy the given project files.")
 public class DeployCommandOptions extends ProjectCommandOptions {
+    @CommandLine.Option(names = "--retry", description = "Retry the operation.")
+    private boolean retry = false;
     @SuppressWarnings("OptionalUsedAsFieldOrParameterType")
     @CommandLine.Option(
             names = "--approve",
@@ -29,6 +31,10 @@ public class DeployCommandOptions extends ProjectCommandOptions {
     )
     Optional<Boolean> approve;
 
+    public boolean retry() {
+        return retry;
+    }
+
     public Optional<Boolean> approve() {
         return approve;
     }
diff --git a/clusterless-scenario/src/main/java/clusterless/scenario/conductor/worker/cli/ClusterlessBootstrapWorker.java b/clusterless-scenario/src/main/java/clusterless/scenario/conductor/worker/cli/ClusterlessBootstrapWorker.java
index 8beeeff2..0367df18 100644
--- a/clusterless-scenario/src/main/java/clusterless/scenario/conductor/worker/cli/ClusterlessBootstrapWorker.java
+++ b/clusterless-scenario/src/main/java/clusterless/scenario/conductor/worker/cli/ClusterlessBootstrapWorker.java
@@ -38,7 +38,7 @@ public TaskResult execute(Task task) {
         String workingDirectory = Objects.toString(inputData.get("workingDirectory"), null);
         Map<String, String> placement = (Map<String, String>) inputData.get("placement");
 
-        ClusterlessBootstrapExecutor deploy = ClusterlessBootstrapExecutor.Builder.builder()
+        ClusterlessBootstrapExecutor executor = ClusterlessBootstrapExecutor.Builder.builder()
                 .withClsApp(options.clsApp())
                 .withDryRun(getDryRun())
                 .withPlacement(placement)
@@ -48,7 +48,7 @@ public TaskResult execute(Task task) {
 
         LOG.info("worker executing bootstrap, placement: {}, destroy: {}", placement, destroy);
 
-        int exitCode = deploy.exec();
+        int exitCode = executor.exec();
 
         LOG.info("worker executed bootstrap, with exit: {}", exitCode);
 
diff --git a/clusterless-scenario/src/main/java/clusterless/scenario/conductor/worker/cli/DeployerProjectWorker.java b/clusterless-scenario/src/main/java/clusterless/scenario/conductor/worker/cli/DeployerProjectWorker.java
index fe83a5e0..abb8df79 100644
--- a/clusterless-scenario/src/main/java/clusterless/scenario/conductor/worker/cli/DeployerProjectWorker.java
+++ b/clusterless-scenario/src/main/java/clusterless/scenario/conductor/worker/cli/DeployerProjectWorker.java
@@ -14,7 +14,7 @@
 public class DeployerProjectWorker extends ClusterlessProjectWorker {
 
     public DeployerProjectWorker(Options options) {
-        super("deploy", options);
+        super("deploy", options, "--retry");
     }
 
     @Override
diff --git a/clusterless-substrate-aws-kernel/src/main/java/clusterless/substrate/aws/cdk/lifecycle/Deploy.java b/clusterless-substrate-aws-kernel/src/main/java/clusterless/substrate/aws/cdk/lifecycle/Deploy.java
index 487ce424..c3640713 100644
--- a/clusterless-substrate-aws-kernel/src/main/java/clusterless/substrate/aws/cdk/lifecycle/Deploy.java
+++ b/clusterless-substrate-aws-kernel/src/main/java/clusterless/substrate/aws/cdk/lifecycle/Deploy.java
@@ -24,7 +24,7 @@ public class Deploy extends BaseCDKCommand implements Callable<Integer> {
     @CommandLine.Mixin
     DeployCommandOptions commandOptions = new DeployCommandOptions();
     @CommandLine.Mixin
-    CDKProcessExec processExec = new CDKProcessExec(commandOptions::dryRun, this::verbosityLevel);
+    CDKProcessExec processExec = new CDKProcessExec(commandOptions::dryRun, commandOptions::retry, this::verbosityLevel);
 
     @Override
     public Integer call() throws Exception {