public class AggregatingMachineProvisioningLocation<T extends MachineLocation> extends AbstractLocation implements MachineProvisioningLocation<T>, java.io.Closeable
AbstractLocation.BasicSubscriptionSupport
BrooklynObject.RelationSupport<T extends BrooklynObject>, BrooklynObject.SubscriptionSupport, BrooklynObject.TagSupport
Configurable.ConfigurationSupport
BrooklynObjectInternal.ConfigurationSupportInternal, BrooklynObjectInternal.RelationSupportInternal<T extends BrooklynObject>, BrooklynObjectInternal.SubscriptionSupportInternal
LOG, PARENT_LOCATION, TEMPORARY_LOCATION
FINAL_SPEC, NAMED_SPEC_NAME, ORIGINAL_SPEC
Constructor and Description |
---|
AggregatingMachineProvisioningLocation() |
AggregatingMachineProvisioningLocation(java.util.Map properties) |
Modifier and Type | Method and Description |
---|---|
void |
close() |
AbstractLocation |
configure(java.util.Map<?,?> properties)
Will set fields from flags, and put the remaining ones into the 'leftovers' map.
|
java.util.Map<java.lang.String,java.lang.Object> |
getProvisioningFlags(java.util.Collection<java.lang.String> tags)
Gets flags, suitable as an argument to
MachineProvisioningLocation.obtain(Map) . |
void |
init()
Called by framework (in new-style instances where spec was used) after configuring etc,
but before a reference to this instance is shared.
|
AggregatingMachineProvisioningLocation<T> |
newSubLocation(java.util.Map<?,?> newFlags)
Creates a new location of the same type, but with additional creation instructions in the form of flags,
e.g.
|
T |
obtain() |
T |
obtain(java.util.Map<?,?> flags)
Obtain a machine in this location.
|
void |
release(T machine)
Release a previously-obtained machine.
|
java.lang.String |
toVerboseString() |
addChild, addExtension, config, containsLocation, equals, getAllConfig, getAllConfigBag, getChildren, getConfig, getConfig, getDisplayName, getExtension, getHostGeoInfo, getLocalConfigBag, getParent, getRawLocalConfigBag, getRebindSupport, hasConfig, hasExtension, hashCode, isManaged, onManagementStarted, onManagementStopped, relations, removeChild, setConfig, setDisplayName, setHostGeoInfo, setManagementContext, setName, setParent, setParent, subscriptions, toMetadataRecord, toString
getCatalogItemId, getId, getManagementContext, rebind, setCatalogItemId, tags
containsLocation, getAllConfig, getChildren, getConfig, getDisplayName, getExtension, getId, getParent, hasConfig, hasExtension, relations, setParent
getCatalogItemId, subscriptions, tags
config, getConfig, setConfig
getManagementContext
setCatalogItemId
public AggregatingMachineProvisioningLocation()
public AggregatingMachineProvisioningLocation(java.util.Map properties)
public void init()
AbstractBrooklynObject
To preserve backwards compatibility for if the instance is constructed directly, one can call the code below, but that means it will be called after references to this policy have been shared with other entities.
if (isLegacyConstruction()) {
init();
}
init
in class AbstractBrooklynObject
public java.lang.String toVerboseString()
toVerboseString
in interface Location
toVerboseString
in class AbstractLocation
public AbstractLocation configure(java.util.Map<?,?> properties)
AbstractBrooklynObject
ConfigBag.getUnusedConfig()
.
To be overridden by AbstractEntity, AbstractLoation, AbstractPolicy, AbstractEnricher, etc.
But should not be overridden by specific entity types. If you do, the entity may break in subsequent releases. Also note that if you require fields to be initialized you must do that in this method. You must *not* rely on field initializers because they may not run until *after* this method (this method is invoked by the constructor in this class, so initializers in subclasses will not have run when this overridden method is invoked.)
configure
in class AbstractLocation
public AggregatingMachineProvisioningLocation<T> newSubLocation(java.util.Map<?,?> newFlags)
MachineProvisioningLocation
Implementers who wish to subclass this provisioning location for additional functionality in a specific cloud can use the relevant implementation of this method as a guide.
newSubLocation
in interface MachineProvisioningLocation<T extends MachineLocation>
public void close()
close
in interface java.io.Closeable
close
in interface java.lang.AutoCloseable
public T obtain() throws NoMachinesAvailableException
NoMachinesAvailableException
public T obtain(java.util.Map<?,?> flags) throws NoMachinesAvailableException
MachineProvisioningLocation
obtain
in interface MachineProvisioningLocation<T extends MachineLocation>
obtain
in interface ProvisioningLocation<T extends MachineLocation>
flags
- Details of the desired machine (e.g. image, size, open ports, etc; some flag support is limited to selected providers).
"callerContext" can be specified to have custom logging and error messages (useful if starting machines in parallel)NoMachinesAvailableException
- if there are no machines available in this location (or impls may return null, but that is discouraged)public void release(T machine)
MachineProvisioningLocation
release
in interface MachineProvisioningLocation<T extends MachineLocation>
release
in interface ProvisioningLocation<T extends MachineLocation>
machine
- a MachineLocation
previously obtained from a call to #obtain()
public java.util.Map<java.lang.String,java.lang.Object> getProvisioningFlags(java.util.Collection<java.lang.String> tags)
MachineProvisioningLocation
MachineProvisioningLocation.obtain(Map)
. The tags provided give
hints about the machine required. The provisioning-location could be configured to
understand those tags.
For example, an AWS-location could be configured to understand that a particular entity
type (e.g. "TomcatServer") requires a particular AMI in that region, so would return the
required image id.getProvisioningFlags
in interface MachineProvisioningLocation<T extends MachineLocation>