You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@brooklyn.apache.org by he...@apache.org on 2020/07/08 13:18:14 UTC

[brooklyn-server] 04/20: Install helm repo if set

This is an automated email from the ASF dual-hosted git repository.

heneveld pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/brooklyn-server.git

commit 09b8f9e80d21aa457b1beb67a27889e23feb85d2
Author: Duncan Grant <du...@cloudsoft.io>
AuthorDate: Thu Jun 18 09:14:20 2020 +0100

    Install helm repo if set
---
 .../container/entity/helm/HelmSshDriver.java       | 127 ++++++++++++---------
 .../container/entity/helm/HelmEntityLiveTest.java  |  26 ++---
 2 files changed, 85 insertions(+), 68 deletions(-)

diff --git a/locations/container/src/main/java/org/apache/brooklyn/container/entity/helm/HelmSshDriver.java b/locations/container/src/main/java/org/apache/brooklyn/container/entity/helm/HelmSshDriver.java
index 931534f..6befac5 100644
--- a/locations/container/src/main/java/org/apache/brooklyn/container/entity/helm/HelmSshDriver.java
+++ b/locations/container/src/main/java/org/apache/brooklyn/container/entity/helm/HelmSshDriver.java
@@ -36,7 +36,9 @@ import org.apache.brooklyn.entity.software.base.SoftwareProcess;
 import org.apache.brooklyn.entity.software.base.SoftwareProcessDriver;
 import org.apache.brooklyn.location.ssh.SshMachineLocation;
 import org.apache.brooklyn.util.core.internal.ssh.process.ProcessTool;
+import org.apache.brooklyn.util.core.task.DynamicTasks;
 import org.apache.brooklyn.util.exceptions.Exceptions;
+import org.apache.brooklyn.util.text.Strings;
 
 import java.io.ByteArrayOutputStream;
 import java.io.IOException;
@@ -65,41 +67,94 @@ public class HelmSshDriver extends AbstractSoftwareProcessDriver implements Helm
 
     @Override
     public void stop() {
+        DynamicTasks.queue("stop", new Runnable() {
+                    @Override
+                    public void run() {
+                        String helm_name_install_name = getEntity().getConfig(HelmEntity.HELM_TEMPLATE_INSTALL_NAME);
+                        ImmutableList<String> command = ImmutableList.<String>of(String.format("helm delete %s", helm_name_install_name));
+                        OutputStream out = new ByteArrayOutputStream();
+                        OutputStream err = new ByteArrayOutputStream();
+                        ProcessTool.execProcesses(command, null, null, out, err, ";", false, this);
+                    }
+                });
+        //TODO Do something with output
+    }
+
+    @Override
+    public void install() {
+        String repo_name = getEntity().getConfig(HelmEntity.REPO_NAME);
+        String repo_url = getEntity().getConfig(HelmEntity.REPO_URL);
+
+        String helm_template = getEntity().getConfig(HelmEntity.HELM_TEMPLATE);
         String helm_name_install_name = getEntity().getConfig(HelmEntity.HELM_TEMPLATE_INSTALL_NAME);
-        ImmutableList<String> command = ImmutableList.<String>of(String.format("helm delete %s", helm_name_install_name));
-        OutputStream out = new ByteArrayOutputStream();
-        OutputStream err = new ByteArrayOutputStream();
-        ProcessTool.execProcesses(command, null, null, out, err,";",false, this);
 
+        if(Strings.isNonBlank(repo_name) && Strings.isNonBlank(repo_url)) {
+
+            DynamicTasks.queue("install repo", new Runnable() {
+                @Override
+                public void run() {
+                    ImmutableList<String> installHelmTemplateCommand =
+                            ImmutableList.<String>of(String.format("helm repo add %s %s", repo_name, repo_url));
+                    OutputStream out = new ByteArrayOutputStream();
+                    OutputStream err = new ByteArrayOutputStream();
+                    ProcessTool.execProcesses(installHelmTemplateCommand, null, null, out, err, ";", false, this);
+                }});
+        }
+
+        DynamicTasks.queue("install", new Runnable() {
+            @Override
+            public void run() {
+                ImmutableList<String> installHelmTemplateCommand =
+                        ImmutableList.<String>of(String.format("helm install %s %s", helm_name_install_name, helm_template));
+                OutputStream out = new ByteArrayOutputStream();
+                OutputStream err = new ByteArrayOutputStream();
+                ProcessTool.execProcesses(installHelmTemplateCommand, null, null, out, err, ";", false, this);
+            }});
         //TODO Do something with output
     }
 
     @Override
-    public void runPreInstallCommand() {
+    public Callable<String> getCallable(String command) {
+        String helm_name_install_name = getEntity().getConfig(HelmEntity.HELM_TEMPLATE_INSTALL_NAME);
+        ImmutableList<String> installHelmTemplateCommand =
+                ImmutableList.<String>of(String.format("helm %s %s", command, helm_name_install_name));
 
+        return new Callable() {
+            @Override
+            public Object call() throws Exception {
+                OutputStream out = new ByteArrayOutputStream();
+                OutputStream err = new ByteArrayOutputStream();
+                ProcessTool.execProcesses(installHelmTemplateCommand, null, null, out, err,";", false, this);
+                return out.toString();
+            }
+        };
     }
 
     @Override
-    public void setup() {
+    public Callable getKubeCallable() {
+        String helm_name_install_name = getEntity().getConfig(HelmEntity.HELM_TEMPLATE_INSTALL_NAME);
+        String config = getLocation().getConfig(KubernetesLocation.KUBECONFIG);
 
+        return new Callable() {
+            @Override
+            public Object call() throws Exception {
+                KubernetesClient client = getClient(config);
+                Deployment deploy = client.apps().deployments().inNamespace("default").withName(helm_name_install_name).get();
+                Integer availableReplicas = deploy.getStatus().getAvailableReplicas();
+                Integer replicas = deploy.getStatus().getReplicas();
+                return availableReplicas.equals(replicas);
+            } ;
+        };
     }
 
     @Override
-    public void install() {
-        String repo_name = getEntity().getConfig(HelmEntity.REPO_NAME);
-        String repo_url = getEntity().getConfig(HelmEntity.REPO_URL);
+    public void runPreInstallCommand() {
 
-        String helm_template = getEntity().getConfig(HelmEntity.HELM_TEMPLATE);
-        String helm_name_install_name = getEntity().getConfig(HelmEntity.HELM_TEMPLATE_INSTALL_NAME);
-        //TODO Fix string formating
-        ImmutableList<String> installHelmTemplateCommand =
-                ImmutableList.<String>of(String.format("helm repo add %s %s", repo_name, repo_url),
-                        String.format("helm install %s %s", helm_name_install_name, helm_template));
-        OutputStream out = new ByteArrayOutputStream();
-        OutputStream err = new ByteArrayOutputStream();
-        ProcessTool.execProcesses(installHelmTemplateCommand, null, null, out, err,";", false, this);
+    }
+
+    @Override
+    public void setup() {
 
-        //TODO Do something with output
     }
 
     @Override
@@ -152,40 +207,6 @@ public class HelmSshDriver extends AbstractSoftwareProcessDriver implements Helm
         return 0;
     }
 
-    @Override
-    public Callable<String> getCallable(String command) {
-        return new Callable() {
-            @Override
-            public Object call() throws Exception {
-                String helm_name_install_name = getEntity().getConfig(HelmEntity.HELM_TEMPLATE_INSTALL_NAME);
-                ImmutableList<String> installHelmTemplateCommand =
-                        ImmutableList.<String>of(String.format("helm %s %s", command, helm_name_install_name));
-                OutputStream out = new ByteArrayOutputStream();
-                OutputStream err = new ByteArrayOutputStream();
-                ProcessTool.execProcesses(installHelmTemplateCommand, null, null, out, err,";", false, this);
-                return out.toString();
-            }
-        };
-    }
-
-    @Override
-    public Callable getKubeCallable() {
-        return new Callable() {
-            @Override
-            public Object call() throws Exception {
-                String helm_name_install_name = getEntity().getConfig(HelmEntity.HELM_TEMPLATE_INSTALL_NAME);
-                String config = getLocation().getConfig(KubernetesLocation.KUBECONFIG);
-                KubernetesClient client = getClient(config);
-
-                Deployment deploy = client.apps().deployments().inNamespace("default").withName(helm_name_install_name).get();
-                Integer availableReplicas = deploy.getStatus().getAvailableReplicas();
-                Integer replicas = deploy.getStatus().getReplicas();
-                Boolean ready = availableReplicas.equals(replicas);
-                return ready;
-            } ;
-        };
-    }
-
     KubernetesClient getClient(String configFile) {
         Path configPath = Paths.get(configFile);
         try {
diff --git a/locations/container/src/test/java/org/apache/brooklyn/container/entity/helm/HelmEntityLiveTest.java b/locations/container/src/test/java/org/apache/brooklyn/container/entity/helm/HelmEntityLiveTest.java
index 7d9a9b8..5ac2355 100644
--- a/locations/container/src/test/java/org/apache/brooklyn/container/entity/helm/HelmEntityLiveTest.java
+++ b/locations/container/src/test/java/org/apache/brooklyn/container/entity/helm/HelmEntityLiveTest.java
@@ -42,11 +42,7 @@ public class HelmEntityLiveTest extends BrooklynAppLiveTestSupport {
 
     @Test
     public void testSimpleDeploy() throws Exception {
-        HelmEntity andManageChild = app.createAndManageChild(EntitySpec.create(HelmEntity.class)
-                .configure(HelmEntity.REPO_NAME, "bitnami")
-                .configure(HelmEntity.REPO_URL, "https://charts.bitnami.com/bitnami")
-                .configure(HelmEntity.HELM_TEMPLATE_INSTALL_NAME, "wordpress-test")
-                .configure(HelmEntity.HELM_TEMPLATE, "bitnami/wordpress"));
+        HelmEntity andManageChild = newHelmSpec("wordpress-test", "bitnami/wordpress");
 
         app.start(newLocalhostLocation());
 
@@ -57,11 +53,7 @@ public class HelmEntityLiveTest extends BrooklynAppLiveTestSupport {
 
     @Test
     public void testCanSenseHelmStatus() {
-        HelmEntity andManageChild = app.createAndManageChild(EntitySpec.create(HelmEntity.class)
-                .configure(HelmEntity.REPO_NAME, "bitnami")
-                .configure(HelmEntity.REPO_URL, "https://charts.bitnami.com/bitnami")
-                .configure(HelmEntity.HELM_TEMPLATE_INSTALL_NAME, "wordpress-test")
-                .configure(HelmEntity.HELM_TEMPLATE, "bitnami/wordpress"));
+        HelmEntity andManageChild = newHelmSpec("wordpress-test", "bitnami/wordpress");
 
         app.start(newLocalhostLocation());
 
@@ -77,11 +69,7 @@ public class HelmEntityLiveTest extends BrooklynAppLiveTestSupport {
 
     @Test
     public void testCanSenseDeploymentStatus() {
-        HelmEntity andManageChild = app.createAndManageChild(EntitySpec.create(HelmEntity.class)
-                .configure(HelmEntity.REPO_NAME, "bitnami")
-                .configure(HelmEntity.REPO_URL, "https://charts.bitnami.com/bitnami")
-                .configure(HelmEntity.HELM_TEMPLATE_INSTALL_NAME, "nginx-test")
-                .configure(HelmEntity.HELM_TEMPLATE, "bitnami/nginx"));
+        HelmEntity andManageChild = newHelmSpec("nginx-test", "bitnami/nginx");
 
         app.start(newLocalhostLocation());
 
@@ -89,6 +77,14 @@ public class HelmEntityLiveTest extends BrooklynAppLiveTestSupport {
         app.stop();
     }
 
+    private HelmEntity newHelmSpec(String templateInstallName, String helmTemplate) {
+        return app.createAndManageChild(EntitySpec.create(HelmEntity.class)
+                .configure(HelmEntity.REPO_NAME, "bitnami")
+                .configure(HelmEntity.REPO_URL, "https://charts.bitnami.com/bitnami")
+                .configure(HelmEntity.HELM_TEMPLATE_INSTALL_NAME, templateInstallName)
+                .configure(HelmEntity.HELM_TEMPLATE, helmTemplate));
+    }
+
     private ImmutableList<Location> newLocalhostLocation() {
         return ImmutableList.<Location>of(
                 app.newLocalhostProvisioningLocation(