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 2015/08/19 13:10:19 UTC
[61/72] [abbrv] incubator-brooklyn git commit: BROOKLYN-162 - jclouds
last few package prefixes needed,
and tidy in core and elsewhere related (or observed in the process)
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/a1ad34d7/core/src/main/java/org/apache/brooklyn/location/basic/FixedListMachineProvisioningLocation.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/location/basic/FixedListMachineProvisioningLocation.java b/core/src/main/java/org/apache/brooklyn/location/basic/FixedListMachineProvisioningLocation.java
deleted file mode 100644
index 78cd0d6..0000000
--- a/core/src/main/java/org/apache/brooklyn/location/basic/FixedListMachineProvisioningLocation.java
+++ /dev/null
@@ -1,474 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.brooklyn.location.basic;
-
-import static org.apache.brooklyn.util.GroovyJavaMethods.truth;
-
-import java.io.Closeable;
-import java.io.File;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-import org.apache.brooklyn.api.location.Location;
-import org.apache.brooklyn.api.location.LocationSpec;
-import org.apache.brooklyn.api.location.MachineLocation;
-import org.apache.brooklyn.api.location.MachineLocationCustomizer;
-import org.apache.brooklyn.api.location.MachineProvisioningLocation;
-import org.apache.brooklyn.api.location.NoMachinesAvailableException;
-import org.apache.brooklyn.api.mgmt.LocationManager;
-import org.apache.brooklyn.config.ConfigKey;
-import org.apache.brooklyn.core.config.ConfigKeys;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import com.google.common.base.Function;
-import com.google.common.base.Objects;
-import com.google.common.collect.ImmutableList;
-import com.google.common.collect.ImmutableMap;
-import com.google.common.collect.ImmutableSet;
-import com.google.common.collect.Lists;
-import com.google.common.collect.Maps;
-import com.google.common.collect.Sets;
-import com.google.common.reflect.TypeToken;
-
-import org.apache.brooklyn.location.cloud.CloudLocationConfig;
-import org.apache.brooklyn.util.collections.CollectionFunctionals;
-import org.apache.brooklyn.util.collections.MutableMap;
-import org.apache.brooklyn.util.collections.MutableSet;
-import org.apache.brooklyn.util.core.config.ConfigBag;
-import org.apache.brooklyn.util.core.flags.SetFromFlag;
-import org.apache.brooklyn.util.stream.Streams;
-import org.apache.brooklyn.util.text.WildcardGlobs;
-import org.apache.brooklyn.util.text.WildcardGlobs.PhraseTreatment;
-
-/**
- * A provisioner of {@link MachineLocation}s which takes a list of machines it can connect to.
- * The collection of initial machines should be supplied in the 'machines' flag in the constructor,
- * for example a list of machines which can be SSH'd to.
- *
- * This can be extended to have a mechanism to make more machines to be available
- * (override provisionMore and canProvisionMore).
- */
-public class FixedListMachineProvisioningLocation<T extends MachineLocation> extends AbstractLocation
-implements MachineProvisioningLocation<T>, Closeable {
-
- // TODO Synchronization looks very wrong for accessing machines/inUse
- // e.g. removeChild doesn't synchronize when doing machines.remove(...),
- // and getMachines() returns the real sets risking
- // ConcurrentModificationException in the caller if it iterates over them etc.
-
- private static final Logger log = LoggerFactory.getLogger(FixedListMachineProvisioningLocation.class);
-
- public static final ConfigKey<Function<Iterable<? extends MachineLocation>, MachineLocation>> MACHINE_CHOOSER =
- ConfigKeys.newConfigKey(
- new TypeToken<Function<Iterable<? extends MachineLocation>, MachineLocation>>() {},
- "byon.machineChooser",
- "For choosing which of the possible machines is chosen and returned by obtain()",
- CollectionFunctionals.<MachineLocation>firstElement());
-
- public static final ConfigKey<Collection<MachineLocationCustomizer>> MACHINE_LOCATION_CUSTOMIZERS = CloudLocationConfig.MACHINE_LOCATION_CUSTOMIZERS;
-
- private final Object lock = new Object();
-
- @SetFromFlag
- protected Set<T> machines;
-
- @SetFromFlag
- protected Set<T> inUse;
-
- @SetFromFlag
- protected Set<T> pendingRemoval;
-
- @SetFromFlag
- protected Map<T, Map<String, Object>> origConfigs;
-
- public FixedListMachineProvisioningLocation() {
- this(Maps.newLinkedHashMap());
- }
- public FixedListMachineProvisioningLocation(Map properties) {
- super(properties);
-
- if (isLegacyConstruction()) {
- init();
- }
- }
-
- @Override
- public void init() {
- super.init();
-
- Set<T> machinesCopy = MutableSet.of();
- for (T location: machines) {
- if (location==null) {
- log.warn(""+this+" initialized with null location, removing (may be due to rebind with reference to an unmanaged location)");
- } else {
- Location parent = location.getParent();
- if (parent == null) {
- addChild(location);
- }
- machinesCopy.add(location);
- }
- }
- if (!machinesCopy.equals(machines)) {
- machines = machinesCopy;
- }
- }
-
- @Override
- public String toVerboseString() {
- return Objects.toStringHelper(this).omitNullValues()
- .add("id", getId()).add("name", getDisplayName())
- .add("machinesAvailable", getAvailable()).add("machinesInUse", getInUse())
- .toString();
- }
-
- @Override
- public AbstractLocation configure(Map<?,?> properties) {
- if (machines == null) machines = Sets.newLinkedHashSet();
- if (inUse == null) inUse = Sets.newLinkedHashSet();
- if (pendingRemoval == null) pendingRemoval = Sets.newLinkedHashSet();
- if (origConfigs == null) origConfigs = Maps.newLinkedHashMap();
- return super.configure(properties);
- }
-
- @SuppressWarnings("unchecked")
- public FixedListMachineProvisioningLocation<T> newSubLocation(Map<?,?> newFlags) {
- // TODO shouldn't have to copy config bag as it should be inherited (but currently it is not used inherited everywhere; just most places)
- return getManagementContext().getLocationManager().createLocation(LocationSpec.create(getClass())
- .parent(this)
- .configure(config().getLocalBag().getAllConfig()) // FIXME Should this just be inherited?
- .configure(newFlags));
- }
-
- @Override
- public void close() {
- for (T machine : machines) {
- if (machine instanceof Closeable) Streams.closeQuietly((Closeable)machine);
- }
- }
-
- public void addMachine(T machine) {
- synchronized (lock) {
- if (machines.contains(machine)) {
- throw new IllegalArgumentException("Cannot add "+machine+" to "+toString()+", because already contained");
- }
-
- Location existingParent = ((Location)machine).getParent();
- if (existingParent == null) {
- addChild(machine);
- }
-
- machines.add(machine);
- }
- }
-
- public void removeMachine(T machine) {
- synchronized (lock) {
- if (inUse.contains(machine)) {
- pendingRemoval.add(machine);
- } else {
- machines.remove(machine);
- pendingRemoval.remove(machine);
- if (this.equals(machine.getParent())) {
- removeChild((Location)machine);
- }
- }
- }
- }
-
- protected Set<T> getMachines() {
- return machines;
- }
-
- public Set<T> getAvailable() {
- Set<T> a = Sets.newLinkedHashSet(machines);
- a.removeAll(inUse);
- return a;
- }
-
- public Set<T> getInUse() {
- return Sets.newLinkedHashSet(inUse);
- }
-
- public Set<T> getAllMachines() {
- return ImmutableSet.copyOf(machines);
- }
-
- @Override
- public void addChild(Location child) {
- super.addChild(child);
- machines.add((T)child);
- }
-
- @Override
- public boolean removeChild(Location child) {
- if (inUse.contains(child)) {
- throw new IllegalStateException("Child location "+child+" is in use; cannot remove from "+this);
- }
- machines.remove(child);
- return super.removeChild(child);
- }
-
- protected boolean canProvisionMore() {
- return false;
- }
-
- protected void provisionMore(int size) {
- provisionMore(size, ImmutableMap.of());
- }
-
- protected void provisionMore(int size, Map<?,?> flags) {
- throw new IllegalStateException("more not permitted");
- }
-
- public T obtain() throws NoMachinesAvailableException {
- return obtain(Maps.<String,Object>newLinkedHashMap());
- }
-
- @Override
- public T obtain(Map<?,?> flags) throws NoMachinesAvailableException {
- T machine;
- T desiredMachine = (T) flags.get("desiredMachine");
- ConfigBag allflags = ConfigBag.newInstanceExtending(config().getBag()).putAll(flags);
- Function<Iterable<? extends MachineLocation>, MachineLocation> chooser = allflags.get(MACHINE_CHOOSER);
-
- synchronized (lock) {
- Set<T> a = getAvailable();
- if (a.isEmpty()) {
- if (canProvisionMore()) {
- provisionMore(1, allflags.getAllConfig());
- a = getAvailable();
- }
- if (a.isEmpty())
- throw new NoMachinesAvailableException("No machines available in "+toString());
- }
- if (desiredMachine != null) {
- if (a.contains(desiredMachine)) {
- machine = desiredMachine;
- } else {
- throw new IllegalStateException("Desired machine "+desiredMachine+" not available in "+toString()+"; "+
- (inUse.contains(desiredMachine) ? "machine in use" : "machine unknown"));
- }
- } else {
- machine = (T) chooser.apply(a);
- if (!a.contains(machine)) {
- throw new IllegalStateException("Machine chooser attempted to choose '"+machine+"' from outside the available set, in "+this);
- }
- }
- inUse.add(machine);
- updateMachineConfig(machine, flags);
- }
-
- for (MachineLocationCustomizer customizer : getMachineCustomizers(allflags)) {
- customizer.customize(machine);
- }
-
- return machine;
- }
-
- @Override
- public void release(T machine) {
- ConfigBag machineConfig = ((ConfigurationSupportInternal)machine.config()).getBag();
- for (MachineLocationCustomizer customizer : getMachineCustomizers(machineConfig)) {
- customizer.preRelease(machine);
- }
-
- synchronized (lock) {
- if (inUse.contains(machine) == false)
- throw new IllegalStateException("Request to release machine "+machine+", but this machine is not currently allocated");
- restoreMachineConfig(machine);
- inUse.remove(machine);
-
- if (pendingRemoval.contains(machine)) {
- removeMachine(machine);
- }
- }
- }
-
- @Override
- public Map<String,Object> getProvisioningFlags(Collection<String> tags) {
- return Maps.<String,Object>newLinkedHashMap();
- }
-
- protected void updateMachineConfig(T machine, Map<?, ?> flags) {
- if (origConfigs == null) {
- // For backwards compatibility, where peristed state did not have this.
- origConfigs = Maps.newLinkedHashMap();
- }
- Map<String, Object> strFlags = ConfigBag.newInstance(flags).getAllConfig();
- Map<String, Object> origConfig = ((ConfigurationSupportInternal)machine.config()).getLocalBag().getAllConfig();
- origConfigs.put(machine, origConfig);
- requestPersist();
-
- ((ConfigurationSupportInternal)machine.config()).addToLocalBag(strFlags);
- }
-
- protected void restoreMachineConfig(MachineLocation machine) {
- if (origConfigs == null) {
- // For backwards compatibility, where peristed state did not have this.
- origConfigs = Maps.newLinkedHashMap();
- }
- Map<String, Object> origConfig = origConfigs.remove(machine);
- if (origConfig == null) return;
- requestPersist();
-
- Set<String> currentKeys = ((ConfigurationSupportInternal)machine.config()).getLocalBag().getAllConfig().keySet();
- Set<String> newKeys = Sets.difference(currentKeys, origConfig.entrySet());
- for (String key : newKeys) {
- ((ConfigurationSupportInternal)machine.config()).removeFromLocalBag(key);
- }
- ((ConfigurationSupportInternal)machine.config()).addToLocalBag(origConfig);
- }
-
- @SuppressWarnings("unchecked")
- private <K> K getConfigPreferringOverridden(ConfigKey<K> key, Map<?,?> overrides) {
- K result = (K) overrides.get(key);
- if (result == null) result = (K) overrides.get(key.getName());
- if (result == null) result = getConfig(key);
- return result;
- }
-
- protected Collection<MachineLocationCustomizer> getMachineCustomizers(ConfigBag setup) {
- Collection<MachineLocationCustomizer> customizers = setup.get(MACHINE_LOCATION_CUSTOMIZERS);
- return (customizers == null ? ImmutableList.<MachineLocationCustomizer>of() : customizers);
- }
-
- /**
- * Facilitates fluent/programmatic style for constructing a fixed pool of machines.
- * <pre>
- * {@code
- * new FixedListMachineProvisioningLocation.Builder()
- * .user("alex")
- * .keyFile("/Users/alex/.ssh/id_rsa")
- * .addAddress("10.0.0.1")
- * .addAddress("10.0.0.2")
- * .addAddress("10.0.0.3")
- * .addAddressMultipleTimes("me@127.0.0.1", 5)
- * .build();
- * }
- * </pre>
- */
- public static class Builder {
- LocationManager lm;
- String user;
- String privateKeyPassphrase;
- String privateKeyFile;
- String privateKeyData;
- File localTempDir;
- List machines = Lists.newArrayList();
-
- public Builder(LocationManager lm) {
- this.lm = lm;
- }
- public Builder user(String user) {
- this.user = user;
- return this;
- }
- public Builder keyPassphrase(String keyPassphrase) {
- this.privateKeyPassphrase = keyPassphrase;
- return this;
- }
- public Builder keyFile(String keyFile) {
- this.privateKeyFile = keyFile;
- return this;
- }
- public Builder keyData(String keyData) {
- this.privateKeyData = keyData;
- return this;
- }
- public Builder localTempDir(File val) {
- this.localTempDir = val;
- return this;
- }
- /** adds the locations; user and keyfile set in the builder are _not_ applied to the machine
- * (use add(String address) for that)
- */
- public Builder add(SshMachineLocation location) {
- machines.add(location);
- return this;
- }
- public Builder addAddress(String address) {
- return addAddresses(address);
- }
- public Builder addAddressMultipleTimes(String address, int n) {
- for (int i=0; i<n; i++)
- addAddresses(address);
- return this;
- }
- public Builder addAddresses(String address1, String ...others) {
- List<String> addrs = new ArrayList<String>();
- addrs.addAll(WildcardGlobs.getGlobsAfterBraceExpansion("{"+address1+"}",
- true /* numeric */, /* no quote support though */ PhraseTreatment.NOT_A_SPECIAL_CHAR, PhraseTreatment.NOT_A_SPECIAL_CHAR));
- for (String address: others)
- addrs.addAll(WildcardGlobs.getGlobsAfterBraceExpansion("{"+address+"}",
- true /* numeric */, /* no quote support though */ PhraseTreatment.NOT_A_SPECIAL_CHAR, PhraseTreatment.NOT_A_SPECIAL_CHAR));
- for (String addr: addrs)
- add(createMachine(addr));
- return this;
- }
- protected SshMachineLocation createMachine(String addr) {
- if (lm==null)
- return new SshMachineLocation(makeConfig(addr));
- else
- return lm.createLocation(makeConfig(addr), SshMachineLocation.class);
- }
- private Map makeConfig(String address) {
- String user = this.user;
- if (address.contains("@")) {
- user = address.substring(0, address.indexOf("@"));
- address = address.substring(address.indexOf("@")+1);
- }
- Map config = MutableMap.of("address", address);
- if (truth(user)) {
- config.put("user", user);
- config.put("sshconfig.user", user);
- }
- if (truth(privateKeyPassphrase)) config.put("sshconfig.privateKeyPassphrase", privateKeyPassphrase);
- if (truth(privateKeyFile)) config.put("sshconfig.privateKeyFile", privateKeyFile);
- if (truth(privateKeyData)) config.put("sshconfig.privateKey", privateKeyData);
- if (truth(localTempDir)) config.put("localTempDir", localTempDir);
- return config;
- }
- @SuppressWarnings("unchecked")
- public FixedListMachineProvisioningLocation<SshMachineLocation> build() {
- if (lm==null)
- return new FixedListMachineProvisioningLocation<SshMachineLocation>(MutableMap.builder()
- .putIfNotNull("machines", machines)
- .putIfNotNull("user", user)
- .putIfNotNull("privateKeyPassphrase", privateKeyPassphrase)
- .putIfNotNull("privateKeyFile", privateKeyFile)
- .putIfNotNull("privateKeyData", privateKeyData)
- .putIfNotNull("localTempDir", localTempDir)
- .build());
- else
- return lm.createLocation(MutableMap.builder()
- .putIfNotNull("machines", machines)
- .putIfNotNull("user", user)
- .putIfNotNull("privateKeyPassphrase", privateKeyPassphrase)
- .putIfNotNull("privateKeyFile", privateKeyFile)
- .putIfNotNull("privateKeyData", privateKeyData)
- .putIfNotNull("localTempDir", localTempDir)
- .build(),
- FixedListMachineProvisioningLocation.class);
- }
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/a1ad34d7/core/src/main/java/org/apache/brooklyn/location/basic/HasSubnetHostname.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/location/basic/HasSubnetHostname.java b/core/src/main/java/org/apache/brooklyn/location/basic/HasSubnetHostname.java
deleted file mode 100644
index e9fbece..0000000
--- a/core/src/main/java/org/apache/brooklyn/location/basic/HasSubnetHostname.java
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.brooklyn.location.basic;
-
-import com.google.common.annotations.Beta;
-
-@Beta
-public interface HasSubnetHostname {
-
- /** returns a hostname for use internally within a subnet / VPC */
- @Beta
- String getSubnetHostname();
-
- /** returns an IP for use internally within a subnet / VPC */
- String getSubnetIp();
-}
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/a1ad34d7/core/src/main/java/org/apache/brooklyn/location/basic/HostLocationResolver.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/location/basic/HostLocationResolver.java b/core/src/main/java/org/apache/brooklyn/location/basic/HostLocationResolver.java
deleted file mode 100644
index ae68f68..0000000
--- a/core/src/main/java/org/apache/brooklyn/location/basic/HostLocationResolver.java
+++ /dev/null
@@ -1,90 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.brooklyn.location.basic;
-
-import java.util.Map;
-
-import org.apache.brooklyn.api.location.Location;
-import org.apache.brooklyn.api.location.LocationRegistry;
-import org.apache.brooklyn.api.location.LocationSpec;
-import org.apache.brooklyn.location.basic.AbstractLocationResolver.SpecParser.ParsedSpec;
-import org.apache.brooklyn.util.core.config.ConfigBag;
-import org.apache.brooklyn.util.exceptions.Exceptions;
-import org.apache.brooklyn.util.guava.Maybe;
-import org.apache.brooklyn.util.guava.Maybe.Absent;
-import org.apache.brooklyn.util.text.KeyValueParser;
-
-import com.google.common.collect.ImmutableMap;
-import com.google.common.collect.Iterables;
-
-public class HostLocationResolver extends AbstractLocationResolver {
-
- private static final String HOST = "host";
-
- @SuppressWarnings("rawtypes")
- @Override
- public Location newLocationFromString(Map locationFlags, String spec, LocationRegistry registry) {
- // Extract args from spec
- ParsedSpec parsedSpec = specParser.parse(spec);
- Map<String, String> argsMap = parsedSpec.argsMap;
- if (argsMap.isEmpty()) {
- throw new IllegalArgumentException("Invalid host spec (no host supplied): "+spec);
- } else if (argsMap.size() == 1 && Iterables.get(argsMap.values(), 0) == null) {
- // only given ip or hostname
- argsMap = ImmutableMap.of("hosts", Iterables.get(argsMap.keySet(), 0));
- } else if (!(argsMap.containsKey("host") || argsMap.containsKey("hosts"))) {
- throw new IllegalArgumentException("Invalid host spec (no host supplied): "+spec);
- }
-
- // Find generic applicable properties
- Map globalProperties = registry.getProperties();
- String namedLocation = (String) locationFlags.get(LocationInternal.NAMED_SPEC_NAME.getName());
- Map<String, Object> filteredProperties = new LocationPropertiesFromBrooklynProperties().getLocationProperties(null, namedLocation, globalProperties);
- ConfigBag flags = ConfigBag.newInstance(locationFlags).putIfAbsent(filteredProperties);
- flags.remove(LocationInternal.NAMED_SPEC_NAME);
-
- // Generate target spec
- String target = "byon("+KeyValueParser.toLine(argsMap)+")";
- Maybe<Location> testResolve = managementContext.getLocationRegistry().resolve(target, false, null);
- if (!testResolve.isPresent()) {
- throw new IllegalArgumentException("Invalid target location '" + target + "' for location '"+HOST+"': "+
- Exceptions.collapseText( ((Absent<?>)testResolve).getException() ), ((Absent<?>)testResolve).getException());
- }
-
- return managementContext.getLocationManager().createLocation(LocationSpec.create(SingleMachineProvisioningLocation.class)
- .configure("location", target)
- .configure("locationFlags", flags.getAllConfig())
- .configure(LocationConfigUtils.finalAndOriginalSpecs(spec, locationFlags, globalProperties, namedLocation)));
- }
-
- @Override
- public String getPrefix() {
- return HOST;
- }
-
- @Override
- protected Class<? extends Location> getLocationType() {
- return SingleMachineProvisioningLocation.class;
- }
-
- @Override
- protected SpecParser getSpecParser() {
- return new SpecParser(getPrefix()).setExampleUsage("\"host(1.1.1.1)\" or \"host(host=1.1.1.1,name=myname)\"");
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/a1ad34d7/core/src/main/java/org/apache/brooklyn/location/basic/LocalhostLocationResolver.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/location/basic/LocalhostLocationResolver.java b/core/src/main/java/org/apache/brooklyn/location/basic/LocalhostLocationResolver.java
deleted file mode 100644
index 9f9bff6..0000000
--- a/core/src/main/java/org/apache/brooklyn/location/basic/LocalhostLocationResolver.java
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.brooklyn.location.basic;
-
-import java.util.Map;
-
-import org.apache.brooklyn.api.location.Location;
-import org.apache.brooklyn.api.location.LocationRegistry;
-import org.apache.brooklyn.api.location.LocationResolver;
-import org.apache.brooklyn.util.core.config.ConfigBag;
-
-/**
- * Examples of valid specs:
- * <ul>
- * <li>localhost
- * <li>localhost()
- * <li>localhost(name=abc)
- * <li>localhost(name="abc")
- * </ul>
- *
- * @author alex, aled
- */
-public class LocalhostLocationResolver extends AbstractLocationResolver implements LocationResolver.EnableableLocationResolver {
-
- public static final String LOCALHOST = "localhost";
-
- @Override
- public String getPrefix() {
- return LOCALHOST;
- }
-
- @Override
- public boolean isEnabled() {
- return LocationConfigUtils.isEnabled(managementContext, "brooklyn.location.localhost");
- }
-
- @Override
- protected Class<? extends Location> getLocationType() {
- return LocalhostMachineProvisioningLocation.class;
- }
-
- @Override
- protected SpecParser getSpecParser() {
- return new AbstractLocationResolver.SpecParser(getPrefix()).setExampleUsage("\"localhost\" or \"localhost(displayName=abc)\"");
- }
-
- @Override
- protected Map<String, Object> getFilteredLocationProperties(String provider, String namedLocation, Map<String, ?> globalProperties) {
- return new LocalhostPropertiesFromBrooklynProperties().getLocationProperties("localhost", namedLocation, globalProperties);
- }
-
- @Override
- protected ConfigBag extractConfig(Map<?,?> locationFlags, String spec, LocationRegistry registry) {
- ConfigBag config = super.extractConfig(locationFlags, spec, registry);
- config.putAsStringKeyIfAbsent("name", "localhost");
- return config;
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/a1ad34d7/core/src/main/java/org/apache/brooklyn/location/basic/LocalhostMachineProvisioningLocation.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/location/basic/LocalhostMachineProvisioningLocation.java b/core/src/main/java/org/apache/brooklyn/location/basic/LocalhostMachineProvisioningLocation.java
deleted file mode 100644
index 1257c1b..0000000
--- a/core/src/main/java/org/apache/brooklyn/location/basic/LocalhostMachineProvisioningLocation.java
+++ /dev/null
@@ -1,346 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.brooklyn.location.basic;
-
-import static org.apache.brooklyn.util.GroovyJavaMethods.elvis;
-import static org.apache.brooklyn.util.GroovyJavaMethods.truth;
-
-import java.io.File;
-import java.net.InetAddress;
-import java.util.Arrays;
-import java.util.Map;
-import java.util.Set;
-
-import org.apache.brooklyn.api.location.AddressableLocation;
-import org.apache.brooklyn.api.location.LocationSpec;
-import org.apache.brooklyn.api.location.MachineProvisioningLocation;
-import org.apache.brooklyn.api.location.OsDetails;
-import org.apache.brooklyn.api.location.PortRange;
-import org.apache.brooklyn.config.ConfigKey;
-import org.apache.brooklyn.config.ConfigKey.HasConfigKey;
-import org.apache.brooklyn.core.config.ConfigKeys;
-import org.apache.brooklyn.core.mgmt.rebind.persister.FileBasedObjectStore;
-import org.apache.brooklyn.core.mgmt.rebind.persister.LocationWithObjectStore;
-import org.apache.brooklyn.core.mgmt.rebind.persister.PersistenceObjectStore;
-import org.apache.brooklyn.entity.core.BrooklynConfigKeys;
-import org.apache.brooklyn.location.geo.HostGeoInfo;
-import org.apache.brooklyn.util.collections.MutableMap;
-import org.apache.brooklyn.util.core.BrooklynNetworkUtils;
-import org.apache.brooklyn.util.core.flags.SetFromFlag;
-import org.apache.brooklyn.util.core.internal.ssh.process.ProcessTool;
-import org.apache.brooklyn.util.core.mutex.MutexSupport;
-import org.apache.brooklyn.util.core.mutex.WithMutexes;
-import org.apache.brooklyn.util.net.Networking;
-import org.apache.brooklyn.util.os.Os;
-import org.apache.brooklyn.util.ssh.BashCommands;
-import org.apache.brooklyn.util.time.Duration;
-import org.apache.brooklyn.util.time.Time;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import com.google.common.annotations.VisibleForTesting;
-import com.google.common.collect.Maps;
-import com.google.common.collect.Sets;
-
-/**
- * An implementation of {@link MachineProvisioningLocation} that can provision a {@link SshMachineLocation} for the
- * local host.
- *
- * By default you can only obtain a single SshMachineLocation for the localhost. Optionally, you can "overload"
- * and choose to allow localhost to be provisioned multiple times, which may be useful in some testing scenarios.
- */
-public class LocalhostMachineProvisioningLocation extends FixedListMachineProvisioningLocation<SshMachineLocation> implements AddressableLocation, LocationWithObjectStore {
-
- public static final Logger LOG = LoggerFactory.getLogger(LocalhostMachineProvisioningLocation.class);
-
- public static final ConfigKey<Boolean> SKIP_ON_BOX_BASE_DIR_RESOLUTION = ConfigKeys.newConfigKeyWithDefault(
- BrooklynConfigKeys.SKIP_ON_BOX_BASE_DIR_RESOLUTION,
- true);
-
- @SetFromFlag("count")
- int initialCount;
-
- @SetFromFlag
- Boolean canProvisionMore;
-
- @SetFromFlag
- InetAddress address;
-
- private static Set<Integer> portsInUse = Sets.newLinkedHashSet();
-
- private static HostGeoInfo cachedHostGeoInfo;
-
- @VisibleForTesting
- public static void clearStaticData() {
- portsInUse.clear();
- cachedHostGeoInfo = null;
- }
-
- /**
- * Construct a new instance.
- *
- * The constructor recognises the following properties:
- * <ul>
- * <li>count - number of localhost machines to make available
- * </ul>
- */
- public LocalhostMachineProvisioningLocation() {
- this(Maps.newLinkedHashMap());
- }
- /**
- * @param properties the properties of the new instance.
- * @deprecated since 0.6
- * @see #LocalhostMachineProvisioningLocation()
- */
- public LocalhostMachineProvisioningLocation(Map properties) {
- super(properties);
- }
- public LocalhostMachineProvisioningLocation(String name) {
- this(name, 0);
- }
- public LocalhostMachineProvisioningLocation(String name, int count) {
- this(MutableMap.of("name", name, "count", count));
- }
-
- public static LocationSpec<LocalhostMachineProvisioningLocation> spec() {
- return LocationSpec.create(LocalhostMachineProvisioningLocation.class);
- }
-
- public LocalhostMachineProvisioningLocation configure(Map<?,?> flags) {
- super.configure(flags);
-
- if (!truth(getDisplayName())) { setDisplayName("localhost"); }
- if (!truth(address)) address = getLocalhostInetAddress();
- // TODO should try to confirm this machine is accessible on the given address ... but there's no
- // immediate convenience in java so early-trapping of that particular error is deferred
-
- if (canProvisionMore==null) {
- if (initialCount>0) canProvisionMore = false;
- else canProvisionMore = true;
- }
- if (getHostGeoInfo()==null) {
- if (cachedHostGeoInfo==null)
- cachedHostGeoInfo = HostGeoInfo.fromLocation(this);
- setHostGeoInfo(cachedHostGeoInfo);
- }
- if (initialCount > getMachines().size()) {
- provisionMore(initialCount - getMachines().size());
- }
-
- if (getConfig(BrooklynConfigKeys.ONBOX_BASE_DIR)==null && (getManagementContext()==null || getManagementContext().getConfig().getConfig(BrooklynConfigKeys.ONBOX_BASE_DIR)==null)) {
- setConfig(BrooklynConfigKeys.ONBOX_BASE_DIR, "/tmp/brooklyn-"+Os.user());
- }
-
- return this;
- }
-
- public static InetAddress getLocalhostInetAddress() {
- return BrooklynNetworkUtils.getLocalhostInetAddress();
- }
-
- @Override
- public InetAddress getAddress() {
- return address;
- }
-
- @Override
- public boolean canProvisionMore() {
- return canProvisionMore;
- }
-
- @Override
- protected void provisionMore(int size, Map<?,?> flags) {
- for (int i=0; i<size; i++) {
- Map<Object,Object> flags2 = MutableMap.<Object,Object>builder()
- .putAll(flags)
- .put("address", elvis(address, Networking.getLocalHost()))
- .put("mutexSupport", LocalhostMachine.mutexSupport)
- .build();
-
- // copy inherited keys for ssh;
- // shouldn't be necessary but not sure that all contexts traverse the hierarchy
- // NOTE: changed Nov 2013 to copy only those ssh config keys actually set, rather than all of them
- // TODO should take the plunge and try removing this altogether!
- // (or alternatively switch to copying all ancestor keys)
- for (HasConfigKey<?> k: SshMachineLocation.ALL_SSH_CONFIG_KEYS) {
- if (config().getRaw(k).isPresent())
- flags2.put(k, getConfig(k));
- }
-
- if (isManaged()) {
- addChild(LocationSpec.create(LocalhostMachine.class).configure(flags2));
- } else {
- addChild(new LocalhostMachine(flags2)); // TODO legacy way
- }
- }
- }
-
- public static synchronized boolean obtainSpecificPort(InetAddress localAddress, int portNumber) {
- if (portsInUse.contains(portNumber)) {
- return false;
- } else {
- //see if it is available?
- if (!checkPortAvailable(localAddress, portNumber)) {
- return false;
- }
- portsInUse.add(portNumber);
- return true;
- }
- }
- /** checks the actual availability of the port on localhost, ie by binding to it; cf {@link Networking#isPortAvailable(int)} */
- public static boolean checkPortAvailable(InetAddress localAddress, int portNumber) {
- if (portNumber<1024) {
- if (LOG.isDebugEnabled()) LOG.debug("Skipping system availability check for privileged localhost port "+portNumber);
- return true;
- }
- return Networking.isPortAvailable(localAddress, portNumber);
- }
- public static int obtainPort(PortRange range) {
- return obtainPort(getLocalhostInetAddress(), range);
- }
- public static int obtainPort(InetAddress localAddress, PortRange range) {
- for (int p: range)
- if (obtainSpecificPort(localAddress, p)) return p;
- if (LOG.isDebugEnabled()) LOG.debug("unable to find port in {} on {}; returning -1", range, localAddress);
- return -1;
- }
-
- public static synchronized void releasePort(InetAddress localAddress, int portNumber) {
- portsInUse.remove((Object) portNumber);
- }
-
- public void release(SshMachineLocation machine) {
- LocalhostMachine localMachine = (LocalhostMachine) machine;
- Set<Integer> portsObtained = Sets.newLinkedHashSet();
- synchronized (localMachine.portsObtained) {
- portsObtained.addAll(localMachine.portsObtained);
- }
-
- super.release(machine);
-
- for (int p: portsObtained)
- releasePort(null, p);
- }
-
- public static class LocalhostMachine extends SshMachineLocation implements HasSubnetHostname {
- // declaring this here (as well as on LocalhostMachineProvisioningLocation) because:
- // 1. machine.getConfig(key) will not inherit default value of machine.getParent()'s key
- // 2. things might instantiate a `LocalhostMachine` without going through LocalhostMachineProvisioningLocation
- // so not sufficient for LocalhostMachineProvisioningLocation to just push its config value into
- // the LocalhostMachine instance.
- public static final ConfigKey<Boolean> SKIP_ON_BOX_BASE_DIR_RESOLUTION = ConfigKeys.newConfigKeyWithDefault(
- BrooklynConfigKeys.SKIP_ON_BOX_BASE_DIR_RESOLUTION,
- true);
-
- private static final WithMutexes mutexSupport = new MutexSupport();
-
- private final Set<Integer> portsObtained = Sets.newLinkedHashSet();
-
- public LocalhostMachine() {
- super();
- }
- /** @deprecated since 0.6.0 use no-arg constructor (and spec) then configure */
- public LocalhostMachine(Map properties) {
- super(MutableMap.builder().putAll(properties).put("mutexSupport", mutexSupport).build());
- }
-
- @Override
- protected WithMutexes getMutexSupport() {
- return mutexSupport;
- }
-
- public boolean obtainSpecificPort(int portNumber) {
- if (!isSudoAllowed() && portNumber <= 1024)
- return false;
- return LocalhostMachineProvisioningLocation.obtainSpecificPort(getAddress(), portNumber);
- }
-
- public int obtainPort(PortRange range) {
- int r = LocalhostMachineProvisioningLocation.obtainPort(getAddress(), range);
- synchronized (portsObtained) {
- if (r>0) portsObtained.add(r);
- }
- LOG.debug("localhost.obtainPort("+range+"), returning "+r);
- return r;
- }
-
- @Override
- public void releasePort(int portNumber) {
- synchronized (portsObtained) {
- portsObtained.remove((Object)portNumber);
- }
- LocalhostMachineProvisioningLocation.releasePort(getAddress(), portNumber);
- }
-
- @Override
- public OsDetails getOsDetails() {
- return BasicOsDetails.Factory.newLocalhostInstance();
- }
-
- @Override
- public LocalhostMachine configure(Map<?,?> properties) {
- if (address==null || !properties.containsKey("address"))
- address = Networking.getLocalHost();
- super.configure(properties);
- return this;
- }
- @Override
- public String getSubnetHostname() {
- return Networking.getLocalHost().getHostName();
- }
- @Override
- public String getSubnetIp() {
- return Networking.getLocalHost().getHostAddress();
- }
- }
-
- private static class SudoChecker {
- static volatile long lastSudoCheckTime = -1;
- static boolean lastSudoResult = false;
- public static boolean isSudoAllowed() {
- if (Time.hasElapsedSince(lastSudoCheckTime, Duration.FIVE_MINUTES))
- checkIfNeeded();
- return lastSudoResult;
- }
- private static synchronized void checkIfNeeded() {
- if (Time.hasElapsedSince(lastSudoCheckTime, Duration.FIVE_MINUTES)) {
- try {
- lastSudoResult = new ProcessTool().execCommands(MutableMap.<String,Object>of(), Arrays.asList(
- BashCommands.sudo("date"))) == 0;
- } catch (Exception e) {
- lastSudoResult = false;
- LOG.debug("Error checking sudo at localhost: "+e, e);
- }
- lastSudoCheckTime = System.currentTimeMillis();
- }
- }
- }
-
- public static boolean isSudoAllowed() {
- return SudoChecker.isSudoAllowed();
- }
-
- @Override
- public PersistenceObjectStore newPersistenceObjectStore(String container) {
- File basedir = new File(container);
- if (basedir.isFile()) throw new IllegalArgumentException("Destination directory must not be a file");
- return new FileBasedObjectStore(basedir);
- }
-
-}
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/a1ad34d7/core/src/main/java/org/apache/brooklyn/location/basic/LocalhostPropertiesFromBrooklynProperties.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/location/basic/LocalhostPropertiesFromBrooklynProperties.java b/core/src/main/java/org/apache/brooklyn/location/basic/LocalhostPropertiesFromBrooklynProperties.java
deleted file mode 100644
index 10e7332..0000000
--- a/core/src/main/java/org/apache/brooklyn/location/basic/LocalhostPropertiesFromBrooklynProperties.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.brooklyn.location.basic;
-
-import java.util.Map;
-
-import org.apache.brooklyn.util.core.config.ConfigBag;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import com.google.common.base.Strings;
-
-/**
- * @author aledsage
- **/
-public class LocalhostPropertiesFromBrooklynProperties extends LocationPropertiesFromBrooklynProperties {
-
- // TODO Once delete support for deprecated "location.localhost.*" then can get rid of this class, and use
- // LocationPropertiesFromBrooklynProperties directly
-
- @SuppressWarnings("unused")
- private static final Logger LOG = LoggerFactory.getLogger(LocalhostPropertiesFromBrooklynProperties.class);
-
- @Override
- public Map<String, Object> getLocationProperties(String provider, String namedLocation, Map<String, ?> properties) {
- if (Strings.isNullOrEmpty(namedLocation) && Strings.isNullOrEmpty(provider)) {
- throw new IllegalArgumentException("Neither cloud provider/API nor location name have been specified correctly");
- }
-
- ConfigBag result = ConfigBag.newInstance();
-
- result.putAll(transformDeprecated(getGenericLocationSingleWordProperties(properties)));
- result.putAll(transformDeprecated(getMatchingSingleWordProperties("brooklyn.location.", properties)));
- result.putAll(transformDeprecated(getMatchingProperties("brooklyn.location.localhost.", "brooklyn.localhost.", properties)));
- if (!Strings.isNullOrEmpty(namedLocation)) result.putAll(transformDeprecated(getNamedLocationProperties(namedLocation, properties)));
- setLocalTempDir(properties, result);
-
- return result.getAllConfigRaw();
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/a1ad34d7/core/src/main/java/org/apache/brooklyn/location/basic/LocationConfigKeys.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/location/basic/LocationConfigKeys.java b/core/src/main/java/org/apache/brooklyn/location/basic/LocationConfigKeys.java
deleted file mode 100644
index 3581bfb..0000000
--- a/core/src/main/java/org/apache/brooklyn/location/basic/LocationConfigKeys.java
+++ /dev/null
@@ -1,79 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.brooklyn.location.basic;
-
-import java.io.File;
-import java.util.Set;
-
-import org.apache.brooklyn.config.ConfigKey;
-import org.apache.brooklyn.core.config.BasicConfigKey;
-import org.apache.brooklyn.core.config.ConfigKeys;
-import org.apache.brooklyn.util.os.Os;
-
-import com.google.common.base.CaseFormat;
-import com.google.common.reflect.TypeToken;
-
-public class LocationConfigKeys {
-
- public static final ConfigKey<String> LOCATION_ID = ConfigKeys.newStringConfigKey("id");
- public static final ConfigKey<String> DISPLAY_NAME = ConfigKeys.newStringConfigKey("displayName");
- public static final ConfigKey<Boolean> ENABLED = ConfigKeys.newBooleanConfigKey("enabled", "Whether the location is enabled for listing and use "
- + "(only supported for selected locations)", true);
-
- public static final ConfigKey<String> ACCESS_IDENTITY = ConfigKeys.newStringConfigKey("identity");
- public static final ConfigKey<String> ACCESS_CREDENTIAL = ConfigKeys.newStringConfigKey("credential");
-
- public static final ConfigKey<Double> LATITUDE = new BasicConfigKey<Double>(Double.class, "latitude");
- public static final ConfigKey<Double> LONGITUDE = new BasicConfigKey<Double>(Double.class, "longitude");
-
- public static final ConfigKey<String> CLOUD_PROVIDER = ConfigKeys.newStringConfigKey("provider");
- public static final ConfigKey<String> CLOUD_ENDPOINT = ConfigKeys.newStringConfigKey("endpoint");
- public static final ConfigKey<String> CLOUD_REGION_ID = ConfigKeys.newStringConfigKey("region");
- public static final ConfigKey<String> CLOUD_AVAILABILITY_ZONE_ID = ConfigKeys.newStringConfigKey("availabilityZone");
-
- @SuppressWarnings("serial")
- public static final ConfigKey<Set<String>> ISO_3166 = ConfigKeys.newConfigKey(new TypeToken<Set<String>>() {}, "iso3166", "ISO-3166 or ISO-3166-2 location codes");
-
- public static final ConfigKey<String> USER = ConfigKeys.newStringConfigKey("user",
- "user account for normal access to the remote machine, defaulting to local user", System.getProperty("user.name"));
-
- public static final ConfigKey<String> PASSWORD = ConfigKeys.newStringConfigKey("password", "password to use for ssh; note some images do not allow password-based ssh access");
- public static final ConfigKey<String> PUBLIC_KEY_FILE = ConfigKeys.newStringConfigKey("publicKeyFile", "ssh public key file to use; if blank will infer from privateKeyFile by appending \".pub\"");
- public static final ConfigKey<String> PUBLIC_KEY_DATA = ConfigKeys.newStringConfigKey("publicKeyData", "ssh public key string to use (takes precedence over publicKeyFile)");
- public static final ConfigKey<String> PRIVATE_KEY_FILE = ConfigKeys.newStringConfigKey("privateKeyFile", "a '" + File.pathSeparator + "' separated list of ssh private key files; uses first in list that can be read",
- Os.fromHome(".ssh/id_rsa") + File.pathSeparator + Os.fromHome(".ssh/id_dsa"));
- public static final ConfigKey<String> PRIVATE_KEY_DATA = ConfigKeys.newStringConfigKey("privateKeyData", "ssh private key string to use (takes precedence over privateKeyFile)");
- public static final ConfigKey<String> PRIVATE_KEY_PASSPHRASE = ConfigKeys.newStringConfigKey("privateKeyPassphrase");
-
- /** @deprecated since 0.6.0; included here so it gets picked up in auto-detect routines */ @Deprecated
- public static final ConfigKey<String> LEGACY_PUBLIC_KEY_FILE = ConfigKeys.convert(PUBLIC_KEY_FILE, CaseFormat.LOWER_CAMEL, CaseFormat.LOWER_HYPHEN);
- /** @deprecated since 0.6.0; included here so it gets picked up in auto-detect routines */ @Deprecated
- public static final ConfigKey<String> LEGACY_PUBLIC_KEY_DATA = ConfigKeys.convert(PUBLIC_KEY_DATA, CaseFormat.LOWER_CAMEL, CaseFormat.LOWER_HYPHEN);
- /** @deprecated since 0.6.0; included here so it gets picked up in auto-detect routines */ @Deprecated
- public static final ConfigKey<String> LEGACY_PRIVATE_KEY_FILE = ConfigKeys.convert(PRIVATE_KEY_FILE, CaseFormat.LOWER_CAMEL, CaseFormat.LOWER_HYPHEN);
- /** @deprecated since 0.6.0; included here so it gets picked up in auto-detect routines */ @Deprecated
- public static final ConfigKey<String> LEGACY_PRIVATE_KEY_DATA = ConfigKeys.convert(PRIVATE_KEY_DATA, CaseFormat.LOWER_CAMEL, CaseFormat.LOWER_HYPHEN);
- /** @deprecated since 0.6.0; included here so it gets picked up in auto-detect routines */ @Deprecated
- public static final ConfigKey<String> LEGACY_PRIVATE_KEY_PASSPHRASE = ConfigKeys.convert(PRIVATE_KEY_PASSPHRASE, CaseFormat.LOWER_CAMEL, CaseFormat.LOWER_HYPHEN);
-
- public static final ConfigKey<Object> CALLER_CONTEXT = new BasicConfigKey<Object>(Object.class, "callerContext",
- "An object whose toString is used for logging, to indicate wherefore a VM is being created");
- public static final ConfigKey<String> CLOUD_MACHINE_NAMER_CLASS = ConfigKeys.newStringConfigKey("cloudMachineNamer", "fully qualified class name of a class that extends CloudMachineNamer and has a single-parameter constructor that takes a ConfigBag");
-
-}
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/a1ad34d7/core/src/main/java/org/apache/brooklyn/location/basic/LocationConfigUtils.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/location/basic/LocationConfigUtils.java b/core/src/main/java/org/apache/brooklyn/location/basic/LocationConfigUtils.java
deleted file mode 100644
index 9f70a6e..0000000
--- a/core/src/main/java/org/apache/brooklyn/location/basic/LocationConfigUtils.java
+++ /dev/null
@@ -1,558 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.brooklyn.location.basic;
-
-import static org.apache.brooklyn.util.JavaGroovyEquivalents.groovyTruth;
-
-import java.io.ByteArrayInputStream;
-import java.io.File;
-import java.security.KeyPair;
-import java.security.PublicKey;
-import java.util.Arrays;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-import org.apache.brooklyn.api.mgmt.ManagementContext;
-import org.apache.brooklyn.config.ConfigKey;
-import org.apache.brooklyn.core.config.ConfigKeys;
-import org.apache.brooklyn.core.internal.BrooklynFeatureEnablement;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.apache.brooklyn.location.cloud.CloudLocationConfig;
-import org.apache.brooklyn.util.collections.MutableMap;
-import org.apache.brooklyn.util.collections.MutableSet;
-import org.apache.brooklyn.util.core.ResourceUtils;
-import org.apache.brooklyn.util.core.config.ConfigBag;
-import org.apache.brooklyn.util.core.crypto.SecureKeys;
-import org.apache.brooklyn.util.core.crypto.SecureKeys.PassphraseProblem;
-import org.apache.brooklyn.util.crypto.AuthorizedKeysParser;
-import org.apache.brooklyn.util.exceptions.Exceptions;
-import org.apache.brooklyn.util.os.Os;
-import org.apache.brooklyn.util.text.StringFunctions;
-import org.apache.brooklyn.util.text.Strings;
-
-import com.google.common.annotations.Beta;
-import com.google.common.base.Objects;
-import com.google.common.collect.ImmutableList;
-import com.google.common.collect.Iterables;
-import com.google.common.collect.Lists;
-
-public class LocationConfigUtils {
-
- private static final Logger log = LoggerFactory.getLogger(LocationConfigUtils.class);
-
- /** Creates an instance of {@link OsCredential} by inspecting {@link LocationConfigKeys#PASSWORD};
- * {@link LocationConfigKeys#PRIVATE_KEY_DATA} and {@link LocationConfigKeys#PRIVATE_KEY_FILE};
- * {@link LocationConfigKeys#PRIVATE_KEY_PASSPHRASE} if needed, and
- * {@link LocationConfigKeys#PRIVATE_KEY_DATA} and {@link LocationConfigKeys#PRIVATE_KEY_FILE}
- * (defaulting to the private key file + ".pub").
- **/
- public static OsCredential getOsCredential(ConfigBag config) {
- return OsCredential.newInstance(config);
- }
-
- /** Convenience class for holding private/public keys and passwords, inferring from config keys.
- * See {@link LocationConfigUtils#getOsCredential(ConfigBag)}. */
- @Beta // would be nice to replace with a builder pattern
- public static class OsCredential {
- private final ConfigBag config;
- private boolean preferPassword = false;
- private boolean tryDefaultKeys = true;
- private boolean requirePublicKey = true;
- private boolean doKeyValidation = BrooklynFeatureEnablement.isEnabled(BrooklynFeatureEnablement.FEATURE_VALIDATE_LOCATION_SSH_KEYS);
- private boolean warnOnErrors = true;
- private boolean throwOnErrors = false;
-
- private boolean dirty = true;;
-
- private String privateKeyData;
- private String publicKeyData;
- private String password;
-
- private OsCredential(ConfigBag config) {
- this.config = config;
- }
-
- /** throws if there are any problems */
- public OsCredential checkNotEmpty() {
- checkNoErrors();
-
- if (!hasKey() && !hasPassword()) {
- if (warningMessages.size()>0)
- throw new IllegalStateException("Could not find credentials: "+warningMessages);
- else
- throw new IllegalStateException("Could not find credentials");
- }
- return this;
- }
-
- /** throws if there were errors resolving (e.g. explicit keys, none of which were found/valid, or public key required and not found)
- * @return */
- public OsCredential checkNoErrors() {
- throwOnErrors(true);
- dirty();
- infer();
- return this;
- }
-
- public OsCredential logAnyWarnings() {
- if (!warningMessages.isEmpty())
- log.warn("When reading credentials: "+warningMessages);
- return this;
- }
-
- public Set<String> getWarningMessages() {
- return warningMessages;
- }
-
- /** returns either the key or password or null; if both a key and a password this prefers the key unless otherwise set
- * via {@link #preferPassword()} */
- public synchronized String getPreferredCredential() {
- infer();
-
- if (isUsingPassword()) return password;
- if (hasKey()) return privateKeyData;
- return null;
- }
-
- /** if there is no credential (ignores public key) */
- public boolean isEmpty() {
- return !hasKey() && !hasPassword();
- }
- public boolean hasKey() {
- infer();
- // key has stricter non-blank check than password
- return Strings.isNonBlank(privateKeyData);
- }
- public boolean hasPassword() {
- infer();
- // blank, even empty passwords are allowed
- return password!=null;
- }
- /** if a password is available, and either this is preferred over a key or there is no key */
- public boolean isUsingPassword() {
- return hasPassword() && (!hasKey() || preferPassword);
- }
-
- public String getPrivateKeyData() {
- infer();
- return privateKeyData;
- }
- public String getPublicKeyData() {
- infer();
- return publicKeyData;
- }
- public String getPassword() {
- infer();
- return password;
- }
-
- /** if both key and password supplied, prefer the key; the default */
- public OsCredential preferKey() { preferPassword = false; return dirty(); }
- /** if both key and password supplied, prefer the password; see {@link #preferKey()} */
- public OsCredential preferPassword() { preferPassword = true; return dirty(); }
-
- /** if false, do not mind if there is no public key corresponding to any private key;
- * defaults to true; only applies if a private key is set */
- public OsCredential requirePublicKey(boolean requirePublicKey) {
- this.requirePublicKey = requirePublicKey;
- return dirty();
- }
- /** whether to check the private/public keys and passphrase are coherent; default true */
- public OsCredential doKeyValidation(boolean doKeyValidation) {
- this.doKeyValidation = doKeyValidation;
- return dirty();
- }
- /** if true (the default) this will look at default locations set on keys */
- public OsCredential useDefaultKeys(boolean tryDefaultKeys) {
- this.tryDefaultKeys = tryDefaultKeys;
- return dirty();
- }
- /** whether to log warnings on problems */
- public OsCredential warnOnErrors(boolean warnOnErrors) {
- this.warnOnErrors = warnOnErrors;
- return dirty();
- }
- /** whether to throw on problems */
- public OsCredential throwOnErrors(boolean throwOnErrors) {
- this.throwOnErrors = throwOnErrors;
- return dirty();
- }
-
- private OsCredential dirty() { dirty = true; return this; }
-
- public static OsCredential newInstance(ConfigBag config) {
- return new OsCredential(config);
- }
-
- private synchronized void infer() {
- if (!dirty) return;
- warningMessages.clear();
-
- log.debug("Inferring OS credentials");
- privateKeyData = config.get(LocationConfigKeys.PRIVATE_KEY_DATA);
- password = config.get(LocationConfigKeys.PASSWORD);
- publicKeyData = getKeyDataFromDataKeyOrFileKey(config, LocationConfigKeys.PUBLIC_KEY_DATA, LocationConfigKeys.PUBLIC_KEY_FILE);
-
- KeyPair privateKey = null;
-
- if (Strings.isBlank(privateKeyData)) {
- // look up private key files
- String privateKeyFiles = null;
- boolean privateKeyFilesExplicitlySet = config.containsKey(LocationConfigKeys.PRIVATE_KEY_FILE);
- if (privateKeyFilesExplicitlySet || (tryDefaultKeys && password==null))
- privateKeyFiles = config.get(LocationConfigKeys.PRIVATE_KEY_FILE);
- if (Strings.isNonBlank(privateKeyFiles)) {
- Iterator<String> fi = Arrays.asList(privateKeyFiles.split(File.pathSeparator)).iterator();
- while (fi.hasNext()) {
- String file = fi.next();
- if (Strings.isNonBlank(file)) {
- try {
- // real URL's won't actual work, due to use of path separator above
- // not real important, but we get it for free if "files" is a list instead.
- // using ResourceUtils is useful for classpath resources
- if (file!=null)
- privateKeyData = ResourceUtils.create().getResourceAsString(file);
- // else use data already set
-
- privateKey = getValidatedPrivateKey(file);
-
- if (privateKeyData==null) {
- // was cleared due to validation error
- } else if (Strings.isNonBlank(publicKeyData)) {
- log.debug("Loaded private key data from "+file+" (public key data explicitly set)");
- break;
- } else {
- String publicKeyFile = (file!=null ? file+".pub" : "(data)");
- try {
- publicKeyData = ResourceUtils.create().getResourceAsString(publicKeyFile);
-
- log.debug("Loaded private key data from "+file+
- " and public key data from "+publicKeyFile);
- break;
- } catch (Exception e) {
- Exceptions.propagateIfFatal(e);
- log.debug("No public key file "+publicKeyFile+"; will try extracting from private key");
- publicKeyData = AuthorizedKeysParser.encodePublicKey(privateKey.getPublic());
-
- if (publicKeyData==null) {
- if (requirePublicKey) {
- addWarning("Unable to find or extract public key for "+file, "skipping");
- } else {
- log.debug("Loaded private key data from "+file+" (public key data not found but not required)");
- break;
- }
- } else {
- log.debug("Loaded private key data from "+file+" (public key data extracted)");
- break;
- }
- privateKeyData = null;
- }
- }
-
- } catch (Exception e) {
- Exceptions.propagateIfFatal(e);
- String message = "Missing/invalid private key file "+file;
- if (privateKeyFilesExplicitlySet) addWarning(message, (!fi.hasNext() ? "no more files to try" : "trying next file")+": "+e);
- }
- }
- }
- if (privateKeyFilesExplicitlySet && Strings.isBlank(privateKeyData))
- error("No valid private keys found", ""+warningMessages);
- }
- } else {
- privateKey = getValidatedPrivateKey("(data)");
- }
-
- if (privateKeyData!=null) {
- if (requirePublicKey && Strings.isBlank(publicKeyData)) {
- if (privateKey!=null) {
- publicKeyData = AuthorizedKeysParser.encodePublicKey(privateKey.getPublic());
- }
- if (Strings.isBlank(publicKeyData)) {
- error("If explicit "+LocationConfigKeys.PRIVATE_KEY_DATA.getName()+" is supplied, then "
- + "the corresponding "+LocationConfigKeys.PUBLIC_KEY_DATA.getName()+" must also be supplied.", null);
- } else {
- log.debug("Public key data extracted");
- }
- }
- if (doKeyValidation && privateKey!=null && privateKey.getPublic()!=null && Strings.isNonBlank(publicKeyData)) {
- PublicKey decoded = null;
- try {
- decoded = AuthorizedKeysParser.decodePublicKey(publicKeyData);
- } catch (Exception e) {
- Exceptions.propagateIfFatal(e);
- addWarning("Invalid public key: "+decoded);
- }
- if (decoded!=null && !privateKey.getPublic().equals( decoded )) {
- error("Public key inferred from does not match public key extracted from private key", null);
- }
- }
- }
-
- log.debug("OS credential inference: "+this);
- dirty = false;
- }
-
- private KeyPair getValidatedPrivateKey(String label) {
- KeyPair privateKey = null;
- String passphrase = config.get(CloudLocationConfig.PRIVATE_KEY_PASSPHRASE);
- try {
- privateKey = SecureKeys.readPem(new ByteArrayInputStream(privateKeyData.getBytes()), passphrase);
- if (passphrase!=null) {
- // get the unencrypted key data for our internal use (jclouds requires this)
- privateKeyData = SecureKeys.toPem(privateKey);
- }
- } catch (PassphraseProblem e) {
- if (doKeyValidation) {
- log.debug("Encountered error handling key "+label+": "+e, e);
- if (Strings.isBlank(passphrase))
- addWarning("Passphrase required for key '"+label+"'");
- else
- addWarning("Invalid passphrase for key '"+label+"'");
- privateKeyData = null;
- }
- } catch (Exception e) {
- Exceptions.propagateIfFatal(e);
- if (doKeyValidation) {
- addWarning("Unable to parse private key from '"+label+"': unknown format");
- privateKeyData = null;
- }
- }
- return privateKey;
- }
-
- Set<String> warningMessages = MutableSet.of();
-
- private void error(String msg, String logExtension) {
- addWarning(msg);
- if (warnOnErrors) log.warn(msg+(logExtension==null ? "" : ": "+logExtension));
- if (throwOnErrors) throw new IllegalStateException(msg+(logExtension==null ? "" : "; "+logExtension));
- }
-
- private void addWarning(String msg) {
- addWarning(msg, null);
- }
- private void addWarning(String msg, String debugExtension) {
- log.debug(msg+(debugExtension==null ? "" : "; "+debugExtension));
- warningMessages.add(msg);
- }
-
- @Override
- public String toString() {
- return getClass().getSimpleName()+"["+
- (Strings.isNonBlank(publicKeyData) ? publicKeyData : "no-public-key")+";"+
- (Strings.isNonBlank(privateKeyData) ? "private-key-present" : "no-private-key")+","+
- (password!=null ? "password(len="+password.length()+")" : "no-password")+"]";
- }
- }
-
- /** @deprecated since 0.7.0, use #getOsCredential(ConfigBag) */ @Deprecated
- public static String getPrivateKeyData(ConfigBag config) {
- return getKeyData(config, LocationConfigKeys.PRIVATE_KEY_DATA, LocationConfigKeys.PRIVATE_KEY_FILE);
- }
-
- /** @deprecated since 0.7.0, use #getOsCredential(ConfigBag) */ @Deprecated
- public static String getPublicKeyData(ConfigBag config) {
- String data = getKeyData(config, LocationConfigKeys.PUBLIC_KEY_DATA, LocationConfigKeys.PUBLIC_KEY_FILE);
- if (groovyTruth(data)) return data;
-
- String privateKeyFile = config.get(LocationConfigKeys.PRIVATE_KEY_FILE);
- if (groovyTruth(privateKeyFile)) {
- List<String> privateKeyFiles = Arrays.asList(privateKeyFile.split(File.pathSeparator));
- List<String> publicKeyFiles = ImmutableList.copyOf(Iterables.transform(privateKeyFiles, StringFunctions.append(".pub")));
- List<String> publicKeyFilesTidied = tidyFilePaths(publicKeyFiles);
-
- String fileData = getFileContents(publicKeyFilesTidied);
- if (groovyTruth(fileData)) {
- if (log.isDebugEnabled()) log.debug("Loaded "+LocationConfigKeys.PUBLIC_KEY_DATA.getName()+" from inferred files, based on "+LocationConfigKeys.PRIVATE_KEY_FILE.getName() + ": used " + publicKeyFilesTidied + " for "+config.getDescription());
- config.put(LocationConfigKeys.PUBLIC_KEY_DATA, fileData);
- return fileData;
- } else {
- log.info("Not able to load "+LocationConfigKeys.PUBLIC_KEY_DATA.getName()+" from inferred files, based on "+LocationConfigKeys.PRIVATE_KEY_FILE.getName() + ": tried " + publicKeyFilesTidied + " for "+config.getDescription());
- }
- }
-
- return null;
- }
-
- /** @deprecated since 0.7.0, use #getOsCredential(ConfigBag) */ @Deprecated
- public static String getKeyData(ConfigBag config, ConfigKey<String> dataKey, ConfigKey<String> fileKey) {
- return getKeyDataFromDataKeyOrFileKey(config, dataKey, fileKey);
- }
-
- private static String getKeyDataFromDataKeyOrFileKey(ConfigBag config, ConfigKey<String> dataKey, ConfigKey<String> fileKey) {
- boolean unused = config.isUnused(dataKey);
- String data = config.get(dataKey);
- if (groovyTruth(data) && !unused) {
- return data;
- }
-
- String file = config.get(fileKey);
- if (groovyTruth(file)) {
- List<String> files = Arrays.asList(file.split(File.pathSeparator));
- List<String> filesTidied = tidyFilePaths(files);
- String fileData = getFileContents(filesTidied);
- if (fileData == null) {
- log.warn("Invalid file" + (files.size() > 1 ? "s" : "") + " for " + fileKey + " (given " + files +
- (files.equals(filesTidied) ? "" : "; converted to " + filesTidied) + ") " +
- "may fail provisioning " + config.getDescription());
- } else if (groovyTruth(data)) {
- if (!fileData.trim().equals(data.trim()))
- log.warn(dataKey.getName()+" and "+fileKey.getName()+" both specified; preferring the former");
- } else {
- data = fileData;
- config.put(dataKey, data);
- config.get(dataKey);
- }
- }
-
- return data;
- }
-
- /**
- * Reads the given file(s) in-order, returning the contents of the first file that can be read.
- * Returns the file contents, or null if none of the files can be read.
- *
- * @param files list of file paths
- */
- private static String getFileContents(Iterable<String> files) {
- Iterator<String> fi = files.iterator();
- while (fi.hasNext()) {
- String file = fi.next();
- if (groovyTruth(file)) {
- try {
- // see comment above
- String result = ResourceUtils.create().getResourceAsString(file);
- if (result!=null) return result;
- log.debug("Invalid file "+file+" ; " + (!fi.hasNext() ? "no more files to try" : "trying next file")+" (null)");
- } catch (Exception e) {
- Exceptions.propagateIfFatal(e);
- log.debug("Invalid file "+file+" ; " + (!fi.hasNext() ? "no more files to try" : "trying next file"), e);
- }
- }
- }
- return null;
- }
-
- private static List<String> tidyFilePaths(Iterable<String> files) {
- List<String> result = Lists.newArrayList();
- for (String file : files) {
- result.add(Os.tidyPath(file));
- }
- return result;
- }
-
- /** @deprecated since 0.6.0 use configBag.getWithDeprecation */
- @Deprecated
- @SuppressWarnings("unchecked")
- public static <T> T getConfigCheckingDeprecatedAlternatives(ConfigBag configBag, ConfigKey<T> preferredKey,
- ConfigKey<?> ...deprecatedKeys) {
- T value1 = (T) configBag.getWithDeprecation(preferredKey, deprecatedKeys);
- T value2 = getConfigCheckingDeprecatedAlternativesInternal(configBag, preferredKey, deprecatedKeys);
- if (!Objects.equal(value1, value2)) {
- // points to a bug in one of the get-with-deprecation methods
- log.warn("Deprecated getConfig with deprecated keys "+Arrays.toString(deprecatedKeys)+" gets different value with " +
- "new strategy "+preferredKey+" ("+value1+") and old ("+value2+"); preferring old value for now, but this behaviour will change");
- return value2;
- }
- return value1;
- }
-
- @SuppressWarnings("unchecked")
- private static <T> T getConfigCheckingDeprecatedAlternativesInternal(ConfigBag configBag, ConfigKey<T> preferredKey,
- ConfigKey<?> ...deprecatedKeys) {
- ConfigKey<?> keyProvidingValue = null;
- T value = null;
- boolean found = false;
- if (configBag.containsKey(preferredKey)) {
- value = configBag.get(preferredKey);
- found = true;
- keyProvidingValue = preferredKey;
- }
-
- for (ConfigKey<?> deprecatedKey: deprecatedKeys) {
- T altValue = null;
- boolean altFound = false;
- if (configBag.containsKey(deprecatedKey)) {
- altValue = (T) configBag.get(deprecatedKey);
- altFound = true;
-
- if (altFound) {
- if (found) {
- if (Objects.equal(value, altValue)) {
- // fine -- nothing
- } else {
- log.warn("Detected deprecated key "+deprecatedKey+" with value "+altValue+" used in addition to "+keyProvidingValue+" " +
- "with value "+value+" for "+configBag.getDescription()+"; ignoring");
- configBag.remove(deprecatedKey);
- }
- } else {
- log.warn("Detected deprecated key "+deprecatedKey+" with value "+altValue+" used instead of recommended "+preferredKey+"; " +
- "promoting to preferred key status; will not be supported in future versions");
- configBag.put(preferredKey, altValue);
- configBag.remove(deprecatedKey);
- value = altValue;
- found = true;
- keyProvidingValue = deprecatedKey;
- }
- }
- }
- }
-
- if (found) {
- return value;
- } else {
- return configBag.get(preferredKey); // get the default
- }
- }
-
- public static Map<ConfigKey<String>,String> finalAndOriginalSpecs(String finalSpec, Object ...sourcesForOriginalSpec) {
- // yuck!: TODO should clean up how these things get passed around
- Map<ConfigKey<String>,String> result = MutableMap.of();
- if (finalSpec!=null)
- result.put(LocationInternal.FINAL_SPEC, finalSpec);
-
- String originalSpec = null;
- for (Object source: sourcesForOriginalSpec) {
- if (source instanceof CharSequence) originalSpec = source.toString();
- else if (source instanceof Map) {
- if (originalSpec==null) originalSpec = Strings.toString( ((Map<?,?>)source).get(LocationInternal.ORIGINAL_SPEC) );
- if (originalSpec==null) originalSpec = Strings.toString( ((Map<?,?>)source).get(LocationInternal.ORIGINAL_SPEC.getName()) );
- }
- if (originalSpec!=null) break;
- }
- if (originalSpec==null) originalSpec = finalSpec;
- if (originalSpec!=null)
- result.put(LocationInternal.ORIGINAL_SPEC, originalSpec);
-
- return result;
- }
-
- public static boolean isEnabled(ManagementContext mgmt, String prefix) {
- ConfigKey<Boolean> key = ConfigKeys.newConfigKeyWithPrefix(prefix+".", LocationConfigKeys.ENABLED);
- Boolean enabled = mgmt.getConfig().getConfig(key);
- if (enabled!=null) return enabled.booleanValue();
- return true;
- }
-
-
-}
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/a1ad34d7/core/src/main/java/org/apache/brooklyn/location/basic/LocationDynamicType.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/location/basic/LocationDynamicType.java b/core/src/main/java/org/apache/brooklyn/location/basic/LocationDynamicType.java
deleted file mode 100644
index 0e55dbc..0000000
--- a/core/src/main/java/org/apache/brooklyn/location/basic/LocationDynamicType.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.brooklyn.location.basic;
-
-import org.apache.brooklyn.core.objs.BrooklynDynamicType;
-import org.apache.brooklyn.api.location.Location;
-import org.apache.brooklyn.api.location.LocationType;
-
-public class LocationDynamicType extends BrooklynDynamicType<Location, AbstractLocation> {
-
- public LocationDynamicType(AbstractLocation location) {
- super(location);
- }
-
- public LocationType getSnapshot() {
- return (LocationType) super.getSnapshot();
- }
-
- @Override
- protected LocationTypeSnapshot newSnapshot() {
- return new LocationTypeSnapshot(name, value(configKeys));
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/a1ad34d7/core/src/main/java/org/apache/brooklyn/location/basic/LocationInternal.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/location/basic/LocationInternal.java b/core/src/main/java/org/apache/brooklyn/location/basic/LocationInternal.java
deleted file mode 100644
index ee9c419..0000000
--- a/core/src/main/java/org/apache/brooklyn/location/basic/LocationInternal.java
+++ /dev/null
@@ -1,93 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.brooklyn.location.basic;
-
-import java.util.Map;
-
-import org.apache.brooklyn.api.location.Location;
-import org.apache.brooklyn.api.mgmt.ManagementContext;
-import org.apache.brooklyn.api.mgmt.rebind.RebindSupport;
-import org.apache.brooklyn.api.mgmt.rebind.mementos.LocationMemento;
-import org.apache.brooklyn.config.ConfigInheritance;
-import org.apache.brooklyn.config.ConfigKey;
-import org.apache.brooklyn.core.config.ConfigKeys;
-import org.apache.brooklyn.core.objs.BrooklynObjectInternal;
-import org.apache.brooklyn.util.core.config.ConfigBag;
-
-import com.google.common.annotations.Beta;
-
-/**
- * Information about locations private to Brooklyn.
- */
-public interface LocationInternal extends BrooklynObjectInternal, Location {
-
- @Beta
- public static final ConfigKey<String> ORIGINAL_SPEC = ConfigKeys.newStringConfigKey("spec.original", "The original spec used to instantiate a location");
- @Beta
- public static final ConfigKey<String> FINAL_SPEC = ConfigKeys.newStringConfigKey("spec.final", "The actual spec (in a chain) which instantiates a location");
- @Beta
- public static final ConfigKey<String> NAMED_SPEC_NAME = ConfigKeys.newStringConfigKey("spec.named.name", "The name on the (first) named spec in a chain");
-
- /**
- * Registers the given extension for the given type. If an extension already existed for
- * this type, then this will override it.
- *
- * @throws NullPointerException if extensionType or extension are null
- * @throws IllegalArgumentException if extension does not implement extensionType
- */
- <T> void addExtension(Class<T> extensionType, T extension);
-
- /**
- * Get a record of the metadata of this location.
- * <p/>
- * <p>Metadata records are used to record an audit trail of events relating to location usage
- * (for billing purposes, for example). Implementations (and subclasses) should override this
- * method to return information useful for this purpose.</p>
- *
- * @return
- */
- public Map<String, String> toMetadataRecord();
-
- /**
- * @deprecated since 0.7.0; use {@link #config()}, such as {@code ((LocationInternal)location).config().getLocalBag()}
- */
- @Deprecated
- ConfigBag getLocalConfigBag();
-
- /**
- * Returns all config, including that inherited from parents.
- *
- * This method does not respect {@link ConfigInheritance} and so usage is discouraged.
- *
- * @deprecated since 0.7.0; use {@link #config()}, such as {@code ((LocationInternal)location).config().getBag()}
- */
- @Deprecated
- ConfigBag getAllConfigBag();
-
- /**
- * Users are strongly discouraged from calling or overriding this method.
- * It is for internal calls only, relating to persisting/rebinding entities.
- * This method may change (or be removed) in a future release without notice.
- */
- @Override
- @Beta
- RebindSupport<LocationMemento> getRebindSupport();
-
- ManagementContext getManagementContext();
-}