Fix generation of Kubernetes port sensors and mappings
Project: http://git-wip-us.apache.org/repos/asf/brooklyn-server/repo Commit: http://git-wip-us.apache.org/repos/asf/brooklyn-server/commit/f0c3290a Tree: http://git-wip-us.apache.org/repos/asf/brooklyn-server/tree/f0c3290a Diff: http://git-wip-us.apache.org/repos/asf/brooklyn-server/diff/f0c3290a Branch: refs/heads/master Commit: f0c3290aa3a5be46ae5bdc2e226aca813bff1359 Parents: 220c737 Author: Andrew Donald Kennedy <[email protected]> Authored: Thu Feb 9 17:07:12 2017 +0000 Committer: Andrew Donald Kennedy <[email protected]> Committed: Fri May 19 14:01:20 2017 +0100 ---------------------------------------------------------------------- .../entity/KubernetesResourceImpl.java | 10 ++++----- .../kubernetes/location/KubernetesLocation.java | 23 +++++++++----------- .../KubernetesLocationYamlLiveTest.java | 6 ++--- 3 files changed, 18 insertions(+), 21 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/f0c3290a/kubernetes-location/src/main/java/io/cloudsoft/amp/containerservice/kubernetes/entity/KubernetesResourceImpl.java ---------------------------------------------------------------------- diff --git a/kubernetes-location/src/main/java/io/cloudsoft/amp/containerservice/kubernetes/entity/KubernetesResourceImpl.java b/kubernetes-location/src/main/java/io/cloudsoft/amp/containerservice/kubernetes/entity/KubernetesResourceImpl.java index 1a4cacf..57f9013 100644 --- a/kubernetes-location/src/main/java/io/cloudsoft/amp/containerservice/kubernetes/entity/KubernetesResourceImpl.java +++ b/kubernetes-location/src/main/java/io/cloudsoft/amp/containerservice/kubernetes/entity/KubernetesResourceImpl.java @@ -7,11 +7,11 @@ public class KubernetesResourceImpl extends EmptySoftwareProcessImpl implements @Override public void init() { - super.init(); + super.init(); - config().set(BrooklynConfigKeys.SKIP_ON_BOX_BASE_DIR_RESOLUTION, true); - config().set(PROVISIONING_PROPERTIES.subKey("useJcloudsSshInit"), false); - config().set(PROVISIONING_PROPERTIES.subKey("waitForSshable"), false); - config().set(EmptySoftwareProcessImpl.USE_SSH_MONITORING, false); + config().set(BrooklynConfigKeys.SKIP_ON_BOX_BASE_DIR_RESOLUTION, true); + config().set(PROVISIONING_PROPERTIES.subKey("useJcloudsSshInit"), false); + config().set(PROVISIONING_PROPERTIES.subKey("waitForSshable"), false); + config().set(EmptySoftwareProcessImpl.USE_SSH_MONITORING, false); } } http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/f0c3290a/kubernetes-location/src/main/java/io/cloudsoft/amp/containerservice/kubernetes/location/KubernetesLocation.java ---------------------------------------------------------------------- diff --git a/kubernetes-location/src/main/java/io/cloudsoft/amp/containerservice/kubernetes/location/KubernetesLocation.java b/kubernetes-location/src/main/java/io/cloudsoft/amp/containerservice/kubernetes/location/KubernetesLocation.java index 18cbcd3..4543b4d 100644 --- a/kubernetes-location/src/main/java/io/cloudsoft/amp/containerservice/kubernetes/location/KubernetesLocation.java +++ b/kubernetes-location/src/main/java/io/cloudsoft/amp/containerservice/kubernetes/location/KubernetesLocation.java @@ -16,6 +16,7 @@ import org.apache.brooklyn.api.location.MachineProvisioningLocation; import org.apache.brooklyn.api.location.NoMachinesAvailableException; import org.apache.brooklyn.api.location.PortRange; import org.apache.brooklyn.api.sensor.AttributeSensor; +import org.apache.brooklyn.api.sensor.EnricherSpec; import org.apache.brooklyn.core.entity.BrooklynConfigKeys; import org.apache.brooklyn.core.entity.EntityInternal; import org.apache.brooklyn.core.location.AbstractLocation; @@ -24,6 +25,7 @@ import org.apache.brooklyn.core.location.PortRanges; import org.apache.brooklyn.core.location.access.PortForwardManager; import org.apache.brooklyn.core.location.access.PortForwardManagerLocationResolver; import org.apache.brooklyn.core.location.cloud.CloudLocationConfig; +import org.apache.brooklyn.core.network.OnPublicNetworkEnricher; import org.apache.brooklyn.core.sensor.Sensors; import org.apache.brooklyn.location.ssh.SshMachineLocation; import org.apache.brooklyn.util.collections.MutableList; @@ -343,17 +345,8 @@ public class KubernetesLocation extends AbstractLocation implements MachineProvi if (resourceType.equals("Service")) { Service service = getService(namespace, resourceName); - registerPortMappings(machine, service); - - List<ServicePort> ports = service.getSpec().getPorts(); - for (ServicePort port : ports) { - String protocol = port.getProtocol(); - if ("TCP".equalsIgnoreCase(protocol)) { - Integer targetPort = port.getTargetPort().getIntVal(); - AttributeSensor<Integer> sensor = Sensors.newIntegerSensor("kubernetes.port." + port.getName()); - entity.sensors().set(sensor, targetPort); - } - } + registerPortMappings(machine, entity, service); + } return machine; @@ -440,7 +433,7 @@ public class KubernetesLocation extends AbstractLocation implements MachineProvi LocationSpec<SshMachineLocation> locationSpec = prepareLocationSpec(entity, setup, namespace, deploymentName, service, pod); SshMachineLocation machine = getManagementContext().getLocationManager().createLocation(locationSpec); - registerPortMappings(machine, service); + registerPortMappings(machine, entity, service); if (!isDockerContainer(entity)) { waitForSshable(machine, Duration.FIVE_MINUTES); } @@ -477,7 +470,7 @@ public class KubernetesLocation extends AbstractLocation implements MachineProvi } } - protected void registerPortMappings(SshMachineLocation machine, Service service) { + protected void registerPortMappings(SshMachineLocation machine, Entity entity, Service service) { PortForwardManager portForwardManager = (PortForwardManager) getManagementContext().getLocationRegistry() .getLocationManaged(PortForwardManagerLocationResolver.PFM_GLOBAL_SPEC); List<ServicePort> ports = service.getSpec().getPorts(); @@ -496,8 +489,12 @@ public class KubernetesLocation extends AbstractLocation implements MachineProvi LOG.debug("Ignoring port mapping {} to {} because port.getNodePort() is null", targetPort, machine); } else { portForwardManager.associate(publicHostText, HostAndPort.fromParts(publicHostText, port.getNodePort()), machine, targetPort); + AttributeSensor<Integer> sensor = Sensors.newIntegerSensor("kubernetes." + Strings.maybeNonBlank(port.getName()).or(targetPort.toString()) + ".port"); + entity.sensors().set(sensor, targetPort); } } + + entity.enrichers().add(EnricherSpec.create(OnPublicNetworkEnricher.class).configure(OnPublicNetworkEnricher.MAP_MATCHING, "kubernetes.[a-zA-Z0-9][a-zA-Z0-9-_]*.port")); } protected String findDeploymentName(Entity entity, ConfigBag setup) { http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/f0c3290a/kubernetes-location/src/test/java/io/cloudsoft/amp/containerservice/kubernetes/location/KubernetesLocationYamlLiveTest.java ---------------------------------------------------------------------- diff --git a/kubernetes-location/src/test/java/io/cloudsoft/amp/containerservice/kubernetes/location/KubernetesLocationYamlLiveTest.java b/kubernetes-location/src/test/java/io/cloudsoft/amp/containerservice/kubernetes/location/KubernetesLocationYamlLiveTest.java index f2fcac4..11c78ef 100644 --- a/kubernetes-location/src/test/java/io/cloudsoft/amp/containerservice/kubernetes/location/KubernetesLocationYamlLiveTest.java +++ b/kubernetes-location/src/test/java/io/cloudsoft/amp/containerservice/kubernetes/location/KubernetesLocationYamlLiveTest.java @@ -372,9 +372,9 @@ public class KubernetesLocationYamlLiveTest extends AbstractYamlTest { Entities.dumpInfo(app); - Integer httpPort = assertAttributeEventuallyNonNull(nginxService, Sensors.newIntegerSensor("kubernetes.port.http")); - assertEquals(httpPort, Integer.valueOf(8080)); - String httpPublicPort = assertAttributeEventuallyNonNull(nginxService, Sensors.newStringSensor("kubernetes.port.http.mapped.public")); + Integer httpPort = assertAttributeEventuallyNonNull(nginxService, Sensors.newIntegerSensor("kubernetes.http.port")); + assertEquals(httpPort, Integer.valueOf(80)); + String httpPublicPort = assertAttributeEventuallyNonNull(nginxService, Sensors.newStringSensor("kubernetes.http.endpoint.mapped.public")); assertReachableEventually(HostAndPort.fromString(httpPublicPort)); }
