brooklyn.location.basic.SingleMachineLocationResolver Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of brooklyn-core Show documentation
Show all versions of brooklyn-core Show documentation
Entity implementation classes, events, and other core elements
package brooklyn.location.basic;
import static com.google.common.base.Preconditions.checkNotNull;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import brooklyn.location.Location;
import brooklyn.location.LocationRegistry;
import brooklyn.location.LocationResolver;
import brooklyn.location.LocationSpec;
import brooklyn.management.ManagementContext;
import brooklyn.util.collections.MutableMap;
import brooklyn.util.text.KeyValueParser;
public class SingleMachineLocationResolver implements LocationResolver {
private static final String SINGLE = "single";
private static final Pattern PATTERN = Pattern.compile("(" + SINGLE + "|" + SINGLE.toUpperCase() + ")" + ":" + "\\((.*)\\)$");
private volatile ManagementContext managementContext;
@Override
public void init(ManagementContext managementContext) {
this.managementContext = checkNotNull(managementContext, "managementContext");
}
@Override
public Location newLocationFromString(Map properties, String spec) {
return newLocationFromString(spec, null, properties, new MutableMap());
}
@Override
public Location newLocationFromString(Map locationFlags, String spec, brooklyn.location.LocationRegistry registry) {
return newLocationFromString(spec, registry, registry.getProperties(), locationFlags);
}
protected Location newLocationFromString(String spec, brooklyn.location.LocationRegistry registry, Map properties, Map locationFlags) {
Matcher matcher = PATTERN.matcher(spec);
if (!matcher.matches()) {
throw new IllegalArgumentException("Invalid location '" + spec + "'; must specify something like single(named:foo)");
}
String namedLocation = (String) locationFlags.get("named");
String args = matcher.group(2);
Map locationArgs = KeyValueParser.parseMap(args);
Map filteredProperties = new LocationPropertiesFromBrooklynProperties().getLocationProperties("byon", namedLocation, properties);
MutableMap flags = MutableMap.builder()
.putAll(filteredProperties)
.putAll(locationFlags)
.removeAll("named")
.putAll(locationArgs).build();
if (locationArgs.get("target") == null) {
throw new IllegalArgumentException("target must be specified in single-machine spec");
}
String target = locationArgs.get("target").toString();
locationArgs.remove("target");
if (!managementContext.getLocationRegistry().canResolve(target)) {
throw new IllegalArgumentException("Invalid target location '" + target + "'; must be resolvable location");
}
return managementContext.getLocationManager().createLocation(LocationSpec.create(SingleMachineProvisioningLocation.class)
.configure("location", target)
.configure("locationFlags", flags));
}
@Override
public String getPrefix() {
return SINGLE;
}
@Override
public boolean accepts(String spec, LocationRegistry registry) {
return BasicLocationRegistry.isResolverPrefixForSpec(this, spec, true);
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy