@Override public Iterable<UrlMapping> getUrlMappings() { // For mapping by URL Group urlMappingGroup = getConfig(NginxController.URL_MAPPINGS); if (urlMappingGroup != null) { return Iterables.filter(urlMappingGroup.getMembers(), UrlMapping.class); } else { return Collections.<UrlMapping>emptyList(); } }
@Override public void provisionNetwork(VirtualNetwork network) { SdnAgent agent = (SdnAgent) (getAgents().getMembers().iterator().next()); String networkId = agent.provisionNetwork(network); LOG.info("Provisioned network {} at {}", networkId, agent); sensors().get(SDN_NETWORKS).addMember(network); }
@Override public void deleteUnmanagedTasks() { for (Entity member : getTaskCluster().getMembers()) { if (member instanceof MesosTask && Boolean.FALSE.equals(member.config().get(MesosTask.MANAGED))) { // TODO Presumably `unmanage(member)` would be enough, but leaving like this // because that is what Andrew previously used! getTaskCluster().removeMember(member); getTaskCluster().removeChild(member); Entities.unmanage(member); } } }
@Override public Boolean call() throws Exception { if (cluster.getMembers().isEmpty()) return false; if (Lifecycle.RUNNING != cluster.sensors().get(SERVICE_STATE_ACTUAL)) return false; for (Entity member : cluster.getMembers()) if (!Boolean.TRUE.equals(member.sensors().get(SERVICE_UP))) return false; return true; } }
String line = ps.get(i); String id = Strings.getFirstWord(line); Optional<Entity> container = Iterables.tryFind(getDockerContainerCluster().getMembers(), Predicates.compose(StringPredicates.startsWith(id), EntityFunctions.attribute(DockerContainer.DOCKER_CONTAINER_ID))); if (container.isPresent()) continue; DockerContainer added = getDockerContainerCluster().addMemberChild(containerSpec); added.sensors().set(DockerContainer.DOCKER_CONTAINER_ID, containerId); added.start(ImmutableList.of(getDynamicLocation().getMachine())); for (Entity member : ImmutableList.copyOf(getDockerContainerCluster().getMembers())) { final String id = member.sensors().get(DockerContainer.DOCKER_CONTAINER_ID); if (id != null) { continue; } else if (Lifecycle.STOPPING.equals(state) || Lifecycle.STOPPED.equals(state)) { getDockerContainerCluster().removeMember(member); getDockerContainerCluster().removeChild(member); Entities.unmanage(member); } else {
@Override public void deallocateNetwork(VirtualNetwork network) { String networkId = network.sensors().get(VirtualNetwork.NETWORK_ID); sensors().get(SDN_NETWORKS).removeMember(network); SdnAgent agent = (SdnAgent) (getAgents().getMembers().iterator().next()); agent.deallocateNetwork(network); LOG.info("Deallocated network {} at {}", networkId, agent); }
@Override public void addHost(DockerHost host) { SshMachineLocation machine = host.getDynamicLocation().getMachine(); EntitySpec<?> spec = EntitySpec.create(sensors().get(SDN_AGENT_SPEC)) .configure(OverlayPlugin.SDN_PROVIDER, this) .configure(OverlayPlugin.DOCKER_HOST, host); OverlayPlugin agent = (OverlayPlugin) getAgents().addChild(spec); getAgents().addMember(agent); agent.start(ImmutableList.of(machine)); if (LOG.isDebugEnabled()) LOG.debug("{} added overlay plugin {}", this, agent); }
public List<String> scanFrameworks(JsonArray frameworks) { List<String> frameworkNames = MutableList.<String>of(); for (int i = 0; i < frameworks.size(); i++) { JsonObject task = frameworks.get(i).getAsJsonObject(); String id = task.get("id").getAsString(); JsonElement pidObj = task.get("pid"); String pid = null; if (pidObj != null && !pidObj.isJsonNull()) { pid = pidObj.getAsString(); } String name = task.get("name").getAsString(); String url = task.get("webui_url").getAsString(); frameworkNames.add(name); Optional<Entity> entity = Iterables.tryFind(sensors().get(MESOS_FRAMEWORKS).getMembers(), Predicates.compose(Predicates.equalTo(id), EntityFunctions.attribute(MesosFramework.FRAMEWORK_ID))); if (entity.isPresent()) continue; EntitySpec<? extends MesosFramework> frameworkSpec = EntitySpec.create(FRAMEWORKS.containsKey(name) ? FRAMEWORKS.get(name) : EntitySpec.create(MesosFramework.class)) .configure(MesosFramework.FRAMEWORK_ID, id) .configure(MesosFramework.FRAMEWORK_PID, pid) .configure(MesosFramework.FRAMEWORK_NAME, name) .configure(MesosFramework.FRAMEWORK_URL, url) .configure(MesosFramework.MESOS_CLUSTER, this) .displayName(String.format("%s Framework", Strings.toInitialCapOnly(name))); MesosFramework added = sensors().get(MESOS_FRAMEWORKS).addMemberChild(frameworkSpec); added.start(ImmutableList.<Location>of()); } return frameworkNames; }
private void checkMaster(Group cluster, Entity node) { assertEquals(node.getAttribute(BrooklynNode.MANAGEMENT_NODE_STATE), ManagementNodeState.MASTER); assertEquals(cluster.getAttribute(BrooklynCluster.MASTER_NODE), node); for (Entity member : cluster.getMembers()) { if (member != node) { assertEquals(member.getAttribute(BrooklynNode.MANAGEMENT_NODE_STATE), ManagementNodeState.HOT_STANDBY); } assertEquals((int)member.getAttribute(MockBrooklynNode.HA_PRIORITY), 0); } }
@Test(groups="Integration") // because takes 4s or so public void testBucketDistributionWithRescan() { Group group = app.createAndManageChild(EntitySpec.create(BasicGroup.class)); final DynamicMultiGroup dmg = app.createAndManageChild( EntitySpec.create(DynamicMultiGroup.class) .configure(ENTITY_FILTER, instanceOf(TestEntity.class)) .configure(BUCKET_FUNCTION, bucketFromAttribute(SENSOR)) .configure(RESCAN_INTERVAL, 1L) ); EntitySpec<TestEntity> childSpec = EntitySpec.create(TestEntity.class); TestEntity child1 = group.addChild(EntitySpec.create(childSpec).displayName("child1")); TestEntity child2 = group.addChild(EntitySpec.create(childSpec).displayName("child2")); checkDistribution(group, dmg, childSpec, child1, child2); }
protected void refreshGroupMembership() { try { if (log.isDebugEnabled()) log.debug("GeoDns {} refreshing targets", this); if (targetEntityProvider == null) return; if (targetEntityProvider instanceof DynamicGroup) ((DynamicGroup) targetEntityProvider).rescanEntities(); Set<Entity> pool = MutableSet.copyOf(targetEntityProvider instanceof Group ? targetEntityProvider.getMembers(): targetEntityProvider.getChildren()); if (log.isDebugEnabled()) log.debug("GeoDns {} refreshing targets, pool now {}", this, pool); boolean changed = false; boolean filterForRunning = Boolean.TRUE.equals(config().get(FILTER_FOR_RUNNING)); Set<Entity> previousOnes = MutableSet.copyOf(targetHosts.keySet()); for (Entity e: pool) { if (!filterForRunning || Lifecycle.RUNNING.equals(e.sensors().get(Attributes.SERVICE_STATE_ACTUAL))) { previousOnes.remove(e); changed |= addTargetHost(e); } } // anything left in previousOnes is no longer applicable for (Entity e: previousOnes) { changed |= removeTargetHost(e, false); } // do a periodic full update hourly once we are active (the latter is probably not needed) if (changed || (lastUpdate > 0 && Time.hasElapsedSince(lastUpdate, Duration.ONE_HOUR))) { update(); } } catch (Exception e) { log.error("Problem refreshing group membership: "+e, e); } }
protected void updateMembership(Entity e) { boolean isMember = checkMembership(e); if (isMember) getGroup().addMember(e); else getGroup().removeMember(e); }
@Override public void removeHost(DockerHost host) { SdnAgent agent = host.sensors().get(SdnAgent.SDN_AGENT); if (agent == null) { LOG.warn("{} cannot find calico service: {}", this, host); return; } agent.stop(); getAgents().removeMember(agent); Entities.unmanage(agent); if (LOG.isDebugEnabled()) LOG.debug("{} removed calico plugin {}", this, agent); }
@Override public boolean apply(@Nullable Entity input) { return (group != null) && (input != null) && group.hasMember(input); } @Override
@Override public Integer getCurrentSize() { return containerGroup.getCurrentSize(); }
EntitySpec<?> spec = EntitySpec.create(getOwner().config().get(MarathonFramework.MARATHON_TASK_SPEC)); spec.configure(taskFlags); Entity added = tasks.addMemberChild(spec); if (added == null) { throw new NoMachinesAvailableException("Failed to create Marathon task");
Group group = sensors().get(MESOS_SLAVES); Optional<Entity> entity = Iterables.tryFind(group.getMembers(), Predicates.compose(Predicates.equalTo(id), EntityFunctions.attribute(MesosSlave.MESOS_SLAVE_ID))); if (entity.isPresent()) { continue; } else if (Lifecycle.STOPPING.equals(state) || Lifecycle.STOPPED.equals(state)) { group.removeMember(found); group.removeChild(found); Entities.unmanage(found); } else { .configure(MesosSlave.MESOS_CLUSTER, this) .displayName("Mesos Slave (" + hostname + ")"); MesosSlave added = sensors().get(MESOS_SLAVES).addMemberChild(slaveSpec); added.sensors().set(MesosSlave.SLAVE_ACTIVE, active); added.sensors().set(MesosSlave.HOSTNAME, hostname);
e.clearParent(); for (Group group : e.groups()) { if (!Entities.isNoLongerManaged(group)) group.removeMember(e); Collection<Entity> members = ((Group)e).getMembers(); for (Entity member : members) { if (!Entities.isNoLongerManaged(member)) ((EntityInternal)member).groups().remove((Group)e);
@Override public void addHost(DockerHost host) { SshMachineLocation machine = host.getDynamicLocation().getMachine(); EntitySpec<?> spec = EntitySpec.create(sensors().get(SDN_AGENT_SPEC)) .configure(WeaveRouter.SDN_PROVIDER, this) .configure(WeaveRouter.DOCKER_HOST, host); WeaveRouter agent = (WeaveRouter) getAgents().addChild(spec); getAgents().addMember(agent); agent.start(ImmutableList.of(machine)); LOG.debug("{} added Weave service {}", this, agent); }