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(