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 8ddf9b071cc9660b613fc9dcbb4e6b88cfbc7f12 Author: Duncan Grant <[email protected]> AuthorDate: Wed Jul 8 13:24:19 2020 +0100 Add simple service sensor --- .../brooklyn/container/entity/helm/HelmEntity.java | 8 ++--- .../container/entity/helm/HelmEntityImpl.java | 38 ++++++++++++++-------- .../container/entity/helm/HelmEntityLiveTest.java | 2 -- 3 files changed, 27 insertions(+), 21 deletions(-) diff --git a/locations/container/src/main/java/org/apache/brooklyn/container/entity/helm/HelmEntity.java b/locations/container/src/main/java/org/apache/brooklyn/container/entity/helm/HelmEntity.java index bed1d9c..3695510 100644 --- a/locations/container/src/main/java/org/apache/brooklyn/container/entity/helm/HelmEntity.java +++ b/locations/container/src/main/java/org/apache/brooklyn/container/entity/helm/HelmEntity.java @@ -77,14 +77,10 @@ public interface HelmEntity extends Entity, Startable { AttributeSensor<Boolean> DEPLOYMENT_READY = Sensors.newBooleanSensor("kube.deployment.status", "The status of the deploymeny"); - AttributeSensor<Integer> AVAILABLE_REPLICAS = Sensors.newIntegerSensor("kube.replicas.available", - "The number of available replicas"); - - AttributeSensor<Integer> REPLICAS = Sensors.newIntegerSensor("kube.replicas", - "The number of replicas"); - AttributeSensor<List<String>> DEPLOYMENTS = Sensors.newSensor(new TypeToken<List<String>>() {}, "kube.deployments"); + AttributeSensor<List<String>> SERVICES = Sensors.newSensor(new TypeToken<List<String>>() {}, "kube.services"); + @Effector(description="") Integer resize(@EffectorParam(name="deplymentName") String name, @EffectorParam(name="desiredSize") Integer desiredSize); diff --git a/locations/container/src/main/java/org/apache/brooklyn/container/entity/helm/HelmEntityImpl.java b/locations/container/src/main/java/org/apache/brooklyn/container/entity/helm/HelmEntityImpl.java index 0c2ccf1..26d0a75 100644 --- a/locations/container/src/main/java/org/apache/brooklyn/container/entity/helm/HelmEntityImpl.java +++ b/locations/container/src/main/java/org/apache/brooklyn/container/entity/helm/HelmEntityImpl.java @@ -20,6 +20,7 @@ package org.apache.brooklyn.container.entity.helm; import com.google.common.base.Functions; import com.google.common.collect.ImmutableList; +import io.fabric8.kubernetes.api.model.Service; import io.fabric8.kubernetes.api.model.apps.Deployment; import io.fabric8.kubernetes.api.model.apps.DoneableDeployment; import io.fabric8.kubernetes.client.*; @@ -126,8 +127,14 @@ public class HelmEntityImpl extends AbstractEntity implements HelmEntity { .period(Duration.TEN_SECONDS) .build()); + addFeed(FunctionFeed.builder() + .entity(this) + .poll(new FunctionPollConfig<String, List<String>>(SERVICES).callable(getKubeServicesCallable())) + .period(Duration.TEN_SECONDS) + .build()); } + private void addHelmFeed(String command, AttributeSensor<String> sensor) { Callable<String> status = getCallable(command); FunctionPollConfig<String, String> pollConfig = new FunctionPollConfig<String, String>(sensor) @@ -221,6 +228,24 @@ public class HelmEntityImpl extends AbstractEntity implements HelmEntity { } + private Callable<List<String>> getKubeServicesCallable() { + String helmNameInstallName = getConfig(HelmEntity.HELM_DEPLOYMENT_NAME); + String config = getLocation().getConfig(KubernetesLocation.KUBECONFIG); + + return new Callable<List<String>>() { + @Override + public List<String> call() throws Exception { + KubernetesClient client = getClient(config); + List<Service> services = client.services().inNamespace(getNamespace()).list().getItems(); + return services.stream() + .filter(service -> service.getMetadata().getAnnotations().get("meta.helm.sh/release-name").equals(helmNameInstallName)) + .map(service -> service.getMetadata().getName()) + .collect(Collectors.toList()); + + } + }; + } + private Callable<List<String>> getKubeDeploymentsCallable() { String helmNameInstallName = getConfig(HelmEntity.HELM_DEPLOYMENT_NAME); String config = getLocation().getConfig(KubernetesLocation.KUBECONFIG); @@ -305,19 +330,6 @@ public class HelmEntityImpl extends AbstractEntity implements HelmEntity { }; } - private Callable<Integer> getKubeReplicasAvailableCallable(String deploymentName) { - String config = getLocation().getConfig(KubernetesLocation.KUBECONFIG); - - return new Callable<Integer>() { - @Override - public Integer call() throws Exception { - KubernetesClient client = getClient(config); - Deployment deployment = client.apps().deployments().inNamespace(getNamespace()).withName(deploymentName).get(); - return deployment.getStatus().getAvailableReplicas(); - } - }; - } - KubernetesClient getClient(String configFile) { Path configPath = Paths.get(configFile); 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 291f84d..d201e89 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 @@ -105,7 +105,6 @@ public class HelmEntityLiveTest extends BrooklynAppLiveTestSupport { assertAttributeEqualsEventually(andManageChild, HelmEntity.DEPLOYMENT_READY, true); } - //TODO Why is this broken? @Test(groups = {"Live"}) public void testCanScaleCluster() { HelmEntity andManageChild = newHelmSpec("nginx-test", "bitnami/nginx"); @@ -123,7 +122,6 @@ public class HelmEntityLiveTest extends BrooklynAppLiveTestSupport { assertAttributeEqualsEventually(andManageChild, HelmEntity.DEPLOYMENT_READY, true); } - //TODO Why is this broken? @Test(groups = {"Live"}) public void testCanScaleClusterPrometheus() { HelmEntity andManageChild = newHelmSpec("prometheus", PROMETHEUS_TEMPLATE_LOCATION);
