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 <[email protected]> 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(
