[BROOKLYN-162] Move ./api/location to the right package
Project: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/commit/d32d672a Tree: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/tree/d32d672a Diff: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/diff/d32d672a Branch: refs/heads/master Commit: d32d672ad66cda00adc92053e262595e6d00ace3 Parents: e2c5705 Author: Hadrian Zbarcea <[email protected]> Authored: Thu Aug 13 23:18:00 2015 -0400 Committer: Hadrian Zbarcea <[email protected]> Committed: Thu Aug 13 23:18:00 2015 -0400 ---------------------------------------------------------------------- .../org/apache/brooklyn/api/entity/Entity.java | 2 +- .../api/entity/drivers/EntityDriver.java | 3 +- .../api/entity/drivers/EntityDriverManager.java | 2 +- .../api/entity/proxying/EntitySpec.java | 2 +- .../api/entity/proxying/EntityTypeRegistry.java | 3 +- .../api/entity/rebind/BrooklynObjectType.java | 3 +- .../entity/rebind/RebindExceptionHandler.java | 3 +- .../api/location/AddressableLocation.java | 43 ++++ .../BasicMachineLocationCustomizer.java | 41 ++++ .../brooklyn/api/location/HardwareDetails.java | 40 ++++ .../apache/brooklyn/api/location/Location.java | 146 ++++++++++++ .../api/location/LocationDefinition.java | 42 ++++ .../location/LocationNotAvailableException.java | 35 +++ .../brooklyn/api/location/LocationRegistry.java | 128 +++++++++++ .../brooklyn/api/location/LocationResolver.java | 57 +++++ .../brooklyn/api/location/LocationSpec.java | 229 +++++++++++++++++++ .../brooklyn/api/location/LocationType.java | 32 +++ .../brooklyn/api/location/MachineDetails.java | 34 +++ .../brooklyn/api/location/MachineLocation.java | 46 ++++ .../api/location/MachineLocationCustomizer.java | 42 ++++ .../api/location/MachineManagementMixins.java | 92 ++++++++ .../location/MachineProvisioningLocation.java | 72 ++++++ .../location/NoMachinesAvailableException.java | 35 +++ .../apache/brooklyn/api/location/OsDetails.java | 46 ++++ .../apache/brooklyn/api/location/PortRange.java | 48 ++++ .../brooklyn/api/location/PortSupplier.java | 50 ++++ .../api/location/ProvisioningLocation.java | 44 ++++ .../api/management/AccessController.java | 3 +- .../api/management/LocationManager.java | 4 +- .../api/management/ManagementContext.java | 2 +- .../brooklyn/location/AddressableLocation.java | 43 ---- .../BasicMachineLocationCustomizer.java | 41 ---- .../brooklyn/location/HardwareDetails.java | 40 ---- .../org/apache/brooklyn/location/Location.java | 146 ------------ .../brooklyn/location/LocationDefinition.java | 42 ---- .../location/LocationNotAvailableException.java | 35 --- .../brooklyn/location/LocationRegistry.java | 128 ----------- .../brooklyn/location/LocationResolver.java | 57 ----- .../apache/brooklyn/location/LocationSpec.java | 229 ------------------- .../apache/brooklyn/location/LocationType.java | 32 --- .../brooklyn/location/MachineDetails.java | 34 --- .../brooklyn/location/MachineLocation.java | 46 ---- .../location/MachineLocationCustomizer.java | 42 ---- .../location/MachineManagementMixins.java | 92 -------- .../location/MachineProvisioningLocation.java | 72 ------ .../location/NoMachinesAvailableException.java | 35 --- .../org/apache/brooklyn/location/OsDetails.java | 46 ---- .../org/apache/brooklyn/location/PortRange.java | 48 ---- .../apache/brooklyn/location/PortSupplier.java | 50 ---- .../brooklyn/location/ProvisioningLocation.java | 44 ---- .../mementos/BrooklynMementoPersister.java | 2 +- .../main/java/brooklyn/basic/BrooklynTypes.java | 2 +- .../brooklyn/catalog/CatalogPredicates.java | 4 +- .../catalog/internal/BasicBrooklynCatalog.java | 6 +- .../catalog/internal/CatalogClasspathDo.java | 2 +- .../internal/CatalogLocationItemDto.java | 4 +- .../entity/basic/AbstractApplication.java | 2 +- .../brooklyn/entity/basic/AbstractEntity.java | 4 +- .../brooklyn/entity/basic/BasicStartable.java | 3 +- .../entity/basic/BasicStartableImpl.java | 2 +- .../entity/basic/BrooklynConfigKeys.java | 4 +- .../brooklyn/entity/basic/DataEntityImpl.java | 2 +- .../entity/basic/EffectorStartableImpl.java | 4 +- .../java/brooklyn/entity/basic/Entities.java | 6 +- .../entity/basic/EntityFactoryForLocation.java | 3 +- .../brooklyn/entity/basic/EntityFunctions.java | 2 +- .../brooklyn/entity/basic/EntityInternal.java | 2 +- .../brooklyn/entity/basic/EntityPredicates.java | 2 +- .../basic/EntityTransientCopyInternal.java | 2 +- .../java/brooklyn/entity/basic/Lifecycle.java | 3 +- .../drivers/BasicEntityDriverManager.java | 3 +- .../drivers/ReflectiveEntityDriverFactory.java | 4 +- .../drivers/RegistryEntityDriverFactory.java | 3 +- .../brooklyn/entity/group/DynamicCluster.java | 2 +- .../entity/group/DynamicClusterImpl.java | 6 +- .../entity/group/DynamicFabricImpl.java | 2 +- .../entity/group/DynamicRegionsFabricImpl.java | 2 +- .../zoneaware/AbstractZoneFailureDetector.java | 2 +- .../BalancingNodePlacementStrategy.java | 2 +- .../zoneaware/CombiningZoneFailureDetector.java | 2 +- .../CriticalCauseZoneFailureDetector.java | 3 +- .../ProportionalZoneFailureDetector.java | 3 +- .../proxying/InternalLocationFactory.java | 6 +- .../entity/rebind/BasicEntityRebindSupport.java | 2 +- .../rebind/BasicLocationRebindSupport.java | 4 +- .../rebind/ImmediateDeltaChangeListener.java | 3 +- .../rebind/PeriodicDeltaChangeListener.java | 2 +- .../entity/rebind/RebindContextImpl.java | 2 +- .../rebind/RebindContextLookupContext.java | 2 +- .../rebind/RebindExceptionHandlerImpl.java | 2 +- .../brooklyn/entity/rebind/RebindIteration.java | 4 +- .../java/brooklyn/entity/rebind/TreeUtils.java | 2 +- .../entity/rebind/dto/MementosGenerators.java | 4 +- .../persister/BrooklynPersistenceUtils.java | 6 +- .../rebind/persister/XmlMementoSerializer.java | 2 +- .../java/brooklyn/entity/trait/Startable.java | 2 +- .../brooklyn/entity/trait/StartableMethods.java | 2 +- .../basic/PortAttributeSensorAndConfigKey.java | 10 +- .../ha/HighAvailabilityManagerImpl.java | 2 +- .../internal/AbstractManagementContext.java | 4 +- .../internal/BrooklynGarbageCollector.java | 2 +- .../management/internal/LocalAccessManager.java | 3 +- .../internal/LocalLocationManager.java | 8 +- .../internal/LocalManagementContext.java | 2 +- .../management/internal/LocalUsageManager.java | 4 +- .../internal/LocationManagerInternal.java | 3 +- .../internal/ManagementContextInternal.java | 2 +- .../internal/NonDeploymentLocationManager.java | 5 +- .../NonDeploymentManagementContext.java | 4 +- .../internal/NonDeploymentUsageManager.java | 2 +- .../management/internal/UsageListener.java | 2 +- .../management/internal/UsageManager.java | 2 +- .../java/brooklyn/util/task/ssh/SshTasks.java | 4 +- .../brooklyn/util/text/TemplateProcessor.java | 2 +- .../location/access/BrooklynAccessUtils.java | 6 +- .../location/access/PortForwardManager.java | 4 +- .../access/PortForwardManagerClient.java | 2 +- .../location/access/PortForwardManagerImpl.java | 2 +- .../PortForwardManagerLocationResolver.java | 8 +- .../brooklyn/location/access/PortMapping.java | 2 +- .../location/basic/AbstractLocation.java | 6 +- .../basic/AbstractLocationResolver.java | 10 +- .../AggregatingMachineProvisioningLocation.java | 7 +- .../location/basic/BasicHardwareDetails.java | 2 +- .../location/basic/BasicLocationDefinition.java | 3 +- .../location/basic/BasicLocationRegistry.java | 10 +- .../location/basic/BasicMachineDetails.java | 6 +- .../location/basic/BasicMachineMetadata.java | 3 +- .../brooklyn/location/basic/BasicOsDetails.java | 3 +- .../location/basic/ByonLocationResolver.java | 8 +- .../location/basic/CatalogLocationResolver.java | 8 +- .../basic/DefinedLocationByIdResolver.java | 8 +- .../FixedListMachineProvisioningLocation.java | 14 +- .../location/basic/HostLocationResolver.java | 7 +- .../basic/LocalhostLocationResolver.java | 7 +- .../LocalhostMachineProvisioningLocation.java | 10 +- .../location/basic/LocationDynamicType.java | 5 +- .../location/basic/LocationInternal.java | 2 +- .../location/basic/LocationPredicates.java | 3 +- .../brooklyn/location/basic/Locations.java | 6 +- .../brooklyn/location/basic/Machines.java | 6 +- .../brooklyn/location/basic/MultiLocation.java | 10 +- .../location/basic/MultiLocationResolver.java | 8 +- .../location/basic/NamedLocationResolver.java | 8 +- .../brooklyn/location/basic/PortRanges.java | 3 +- .../basic/RegistryLocationResolver.java | 6 +- .../basic/SingleMachineLocationResolver.java | 7 +- .../SingleMachineProvisioningLocation.java | 6 +- .../location/basic/SshMachineLocation.java | 12 +- .../location/basic/WinRmMachineLocation.java | 8 +- .../AbstractAvailabilityZoneExtension.java | 3 +- ...bstractCloudMachineProvisioningLocation.java | 7 +- .../cloud/AvailabilityZoneExtension.java | 3 +- .../location/cloud/CloudLocationConfig.java | 4 +- .../location/cloud/names/CloudMachineNamer.java | 4 +- .../location/dynamic/DynamicLocation.java | 2 +- .../location/dynamic/LocationOwner.java | 4 +- .../brooklyn/location/geo/HostGeoInfo.java | 4 +- .../brooklyn/location/paas/PaasLocation.java | 2 +- ...pache.brooklyn.api.location.LocationResolver | 27 +++ ...rg.apache.brooklyn.location.LocationResolver | 9 - .../enricher/CustomAggregatingEnricherTest.java | 4 +- .../brooklyn/entity/EffectorMetadataTest.java | 2 +- .../java/brooklyn/entity/SetFromFlagTest.java | 4 +- .../basic/AbstractApplicationLegacyTest.java | 3 +- .../entity/basic/BasicStartableTest.java | 5 +- .../brooklyn/entity/basic/DataEntityTest.java | 4 +- .../brooklyn/entity/basic/EntitiesTest.java | 4 +- .../entity/basic/EntityFunctionsTest.java | 2 +- .../entity/basic/EntityLocationsTest.java | 2 +- .../entity/basic/EntityPredicatesTest.java | 2 +- .../entity/basic/EntitySuppliersTest.java | 5 +- .../entity/basic/ServiceStateLogicTest.java | 2 +- .../ReflectiveEntityDriverFactoryTest.java | 4 +- .../RegistryEntityDriverFactoryTest.java | 4 +- .../downloads/BasicDownloadsRegistryTest.java | 4 +- .../DownloadProducerFromLocalRepoTest.java | 4 +- .../DownloadProducerFromPropertiesTest.java | 4 +- .../downloads/DownloadSubstitutersTest.java | 3 +- .../drivers/downloads/MyEntityDriver.java | 3 +- .../entity/group/DynamicClusterTest.java | 4 +- ...DynamicClusterWithAvailabilityZonesTest.java | 6 +- .../entity/group/DynamicFabricTest.java | 4 +- .../entity/group/DynamicRegionsFabricTest.java | 4 +- .../java/brooklyn/entity/group/GroupTest.java | 4 +- .../group/MembershipTrackingPolicyTest.java | 4 +- .../entity/group/QuarantineGroupTest.java | 3 +- .../BalancingNodePlacementStrategyTest.java | 6 +- .../ProportionalZoneFailureDetectorTest.java | 4 +- .../entity/rebind/RebindEnricherTest.java | 4 +- .../entity/rebind/RebindEntityTest.java | 6 +- .../brooklyn/entity/rebind/RebindFeedTest.java | 4 +- .../rebind/RebindLocalhostLocationTest.java | 3 +- .../entity/rebind/RebindLocationTest.java | 6 +- .../entity/rebind/RebindPolicyTest.java | 4 +- .../rebind/RebindSshMachineLocationTest.java | 3 +- .../brooklyn/entity/rebind/RebindTestUtils.java | 2 +- .../rebind/RecordingRebindExceptionHandler.java | 3 +- .../BrooklynMementoPersisterTestFixture.java | 6 +- .../persister/XmlMementoSerializerTest.java | 4 +- .../entity/trait/FailingEntityImpl.java | 2 +- .../event/feed/function/FunctionFeedTest.java | 4 +- .../feed/http/HttpFeedIntegrationTest.java | 4 +- .../brooklyn/event/feed/http/HttpFeedTest.java | 2 +- .../WindowsPerformanceCounterFeedLiveTest.java | 6 +- .../WindowsPerformanceCounterFeedTest.java | 4 +- .../AcmeEntitlementManagerTestFixture.java | 2 +- .../entitlement/EntityEntitlementTest.java | 2 +- .../ha/HighAvailabilityManagerInMemoryTest.java | 6 +- .../HighAvailabilityManagerSplitBrainTest.java | 2 +- .../brooklyn/management/ha/HotStandbyTest.java | 6 +- .../brooklyn/management/ha/WarmStandbyTest.java | 2 +- .../management/internal/AccessManagerTest.java | 6 +- .../internal/LocalManagementContextTest.java | 2 +- .../longevity/EntityCleanupLongevityTest.java | 4 +- .../EntityCleanupLongevityTestFixture.java | 4 +- .../qa/longevity/EntityCleanupTest.java | 4 +- .../EntityPersistencePerformanceTest.java | 4 +- .../test/java/brooklyn/test/HttpService.java | 5 +- .../brooklyn/util/task/ssh/SshTasksTest.java | 4 +- .../PortForwardManagerLocationResolverTest.java | 2 +- .../access/PortForwardManagerRebindTest.java | 6 +- .../location/access/PortForwardManagerTest.java | 4 +- .../location/basic/AbstractLocationTest.java | 4 +- ...regatingMachineProvisioningLocationTest.java | 10 +- .../basic/ByonLocationResolverTest.java | 6 +- ...stMachineProvisioningLocationRebindTest.java | 2 +- ...ixedListMachineProvisioningLocationTest.java | 6 +- .../basic/HostLocationResolverTest.java | 2 +- .../basic/LocalhostLocationResolverTest.java | 4 +- ...ocalhostMachineProvisioningLocationTest.java | 10 +- .../LocalhostProvisioningAndAccessTest.java | 2 +- .../location/basic/LocationConfigTest.java | 2 +- .../location/basic/LocationExtensionsTest.java | 4 +- .../location/basic/LocationManagementTest.java | 2 +- .../location/basic/LocationPredicatesTest.java | 4 +- .../location/basic/LocationRegistryTest.java | 4 +- .../location/basic/MachineDetailsTest.java | 6 +- .../location/basic/MultiLocationRebindTest.java | 4 +- .../basic/MultiLocationResolverTest.java | 8 +- .../location/basic/MultiLocationTest.java | 6 +- .../brooklyn/location/basic/PortRangesTest.java | 2 +- .../RecordingMachineLocationCustomizer.java | 4 +- .../location/basic/SimulatedLocation.java | 17 +- .../SshMachineLocationReuseIntegrationTest.java | 4 +- .../location/basic/SshMachineLocationTest.java | 10 +- .../brooklyn/location/geo/HostGeoInfoTest.java | 2 +- .../test/entity/BlockingEntityImpl.java | 2 +- .../test/entity/TestApplicationImpl.java | 4 +- .../brooklyn/test/entity/TestEntityImpl.java | 2 +- .../brooklyn/demo/CumulusRDFApplication.java | 4 +- ...lusterDatabaseExampleAppIntegrationTest.java | 2 +- .../policy/os/AdvertiseWinrmLoginPolicy.java | 4 +- .../brooklyn/policy/os/CreateUserPolicy.java | 4 +- .../location/jclouds/BrooklynMachinePool.java | 4 +- .../jclouds/JcloudsByonLocationResolver.java | 10 +- .../location/jclouds/JcloudsLocation.java | 12 +- .../jclouds/JcloudsLocationResolver.java | 8 +- .../jclouds/JcloudsMachineLocation.java | 3 +- .../jclouds/JcloudsSshMachineLocation.java | 6 +- .../zone/AwsAvailabilityZoneExtension.java | 3 +- ...pache.brooklyn.api.location.LocationResolver | 20 ++ ...rg.apache.brooklyn.location.LocationResolver | 2 - .../os/AdvertiseWinrmLoginPolicyTest.java | 3 +- .../policy/os/CreateUserPolicyLiveTest.java | 8 +- .../policy/os/CreateUserPolicyTest.java | 4 +- .../jclouds/BailOutJcloudsLocation.java | 2 +- .../jclouds/JcloudsAddressesLiveTest.java | 2 +- .../jclouds/JcloudsLocationMetadataTest.java | 4 +- .../location/jclouds/JcloudsLocationTest.java | 10 +- .../location/jclouds/JcloudsLoginLiveTest.java | 4 +- .../location/jclouds/LiveTestEntity.java | 7 +- .../jclouds/RebindJcloudsLocationLiveTest.java | 2 +- ...loudsLocationUserLoginAndConfigLiveTest.java | 2 +- ...hineProvisioningLocationJcloudsLiveTest.java | 3 +- .../provider/AbstractJcloudsLocationTest.java | 4 +- .../zone/AwsAvailabilityZoneExtensionTest.java | 4 +- parent/pom.xml | 1 - .../followthesun/DefaultFollowTheSunModel.java | 3 +- .../policy/followthesun/FollowTheSunModel.java | 2 +- .../followthesun/FollowTheSunParameters.java | 3 +- .../policy/followthesun/FollowTheSunPolicy.java | 4 +- .../followthesun/FollowTheSunStrategy.java | 2 +- .../loadbalancing/BalanceablePoolModel.java | 2 +- .../policy/loadbalancing/BalancingStrategy.java | 3 +- .../DefaultBalanceablePoolModel.java | 3 +- .../loadbalancing/LocationConstraint.java | 2 +- .../autoscaling/AutoScalerPolicyRebindTest.java | 4 +- .../AbstractFollowTheSunPolicyTest.java | 6 +- .../followthesun/FollowTheSunModelTest.java | 4 +- .../FollowTheSunPolicySoakTest.java | 4 +- .../followthesun/FollowTheSunPolicyTest.java | 4 +- .../brooklyn/policy/ha/HaPolicyRebindTest.java | 6 +- .../brooklyn/policy/ha/ServiceReplacerTest.java | 6 +- .../loadbalancing/MockContainerEntityImpl.java | 2 +- .../basic/AbstractSoftwareProcessDriver.java | 2 +- .../SameServerDriverLifecycleEffectorTasks.java | 8 +- .../brooklyn/entity/basic/SameServerEntity.java | 2 +- .../entity/basic/SameServerEntityImpl.java | 2 +- .../brooklyn/entity/basic/SoftwareProcess.java | 2 +- ...wareProcessDriverLifecycleEffectorTasks.java | 4 +- .../entity/basic/SoftwareProcessImpl.java | 10 +- .../entity/chef/ChefLifecycleEffectorTasks.java | 4 +- .../main/java/brooklyn/entity/java/UsesJmx.java | 4 +- .../java/brooklyn/entity/pool/ServerPool.java | 5 +- .../brooklyn/entity/pool/ServerPoolImpl.java | 10 +- .../entity/pool/ServerPoolLocation.java | 8 +- .../entity/pool/ServerPoolLocationResolver.java | 9 +- .../software/MachineLifecycleEffectorTasks.java | 14 +- .../software/ProvidesProvisioningFlags.java | 3 +- .../entity/software/SshEffectorTasks.java | 4 +- ...pache.brooklyn.api.location.LocationResolver | 19 ++ ...rg.apache.brooklyn.location.LocationResolver | 1 - .../brooklyn/entity/AbstractEc2LiveTest.java | 4 +- .../entity/AbstractGoogleComputeLiveTest.java | 2 +- .../entity/AbstractSoftlayerLiveTest.java | 2 +- .../entity/basic/SameServerEntityTest.java | 3 +- .../basic/SoftwareProcessEntityLatchTest.java | 4 +- .../basic/SoftwareProcessEntityRebindTest.java | 8 +- .../entity/basic/SoftwareProcessEntityTest.java | 8 +- ...SoftwareProcessSshDriverIntegrationTest.java | 4 +- .../basic/SoftwareProcessSubclassTest.java | 2 +- ...ftwareProcessAndChildrenIntegrationTest.java | 2 +- .../basic/lifecycle/NaiveScriptRunnerTest.java | 4 +- .../basic/lifecycle/ScriptHelperTest.java | 4 +- .../entity/brooklynnode/BrooklynNodeTest.java | 4 +- .../entity/brooklynnode/MockBrooklynNode.java | 2 +- .../brooklynnode/SameBrooklynNodeImpl.java | 3 +- .../entity/chef/ChefLiveTestSupport.java | 6 +- .../AbstractChefToyMySqlEntityLiveTest.java | 3 +- .../brooklyn/entity/driver/MockSshDriver.java | 3 +- ...rWithAvailabilityZonesMultiLocationTest.java | 10 +- .../brooklyn/entity/java/EntityPollingTest.java | 4 +- .../java/brooklyn/entity/java/JavaOptsTest.java | 6 +- ...SoftwareProcessSshDriverIntegrationTest.java | 6 +- .../machine/MachineEntityEc2LiveTest.java | 2 +- .../entity/pool/AbstractServerPoolTest.java | 8 +- .../entity/pool/ServerPoolLiveTest.java | 2 +- .../pool/ServerPoolLocationResolverTest.java | 6 +- .../brooklyn/entity/pool/ServerPoolTest.java | 3 +- .../entity/software/AbstractDockerLiveTest.java | 2 +- .../entity/software/SoftwareEffectorTest.java | 4 +- .../entity/software/SshEffectorTasksTest.java | 4 +- .../software/http/HttpRequestSensorTest.java | 2 +- .../mysql/AbstractToyMySqlEntityTest.java | 6 +- .../mysql/DynamicToyMySqlEntityBuilder.java | 6 +- .../software/ssh/SshCommandIntegrationTest.java | 4 +- .../PortAttributeSensorAndConfigKeyTest.java | 3 +- .../event/feed/jmx/RebindJmxFeedTest.java | 4 +- .../usage/ApplicationUsageTrackingTest.java | 2 +- .../usage/LocationUsageTrackingTest.java | 8 +- .../management/usage/UsageListenerTest.java | 4 +- .../basic/MachineDetailsEc2LiveTest.java | 6 +- .../MachineDetailsGoogleComputeLiveTest.java | 6 +- .../basic/WinRmMachineLocationTest.java | 2 +- .../database/mariadb/MariaDbSshDriver.java | 4 +- .../entity/database/mysql/MySqlClusterImpl.java | 2 +- .../entity/database/mysql/MySqlSshDriver.java | 4 +- .../postgresql/PostgreSqlSshDriver.java | 4 +- .../database/mariadb/MariaDbLiveEc2Test.java | 3 +- .../database/mysql/MySqlClusterLiveEc2Test.java | 3 +- .../mysql/MySqlClusterLiveSoftlayerTest.java | 3 +- .../database/mysql/MySqlClusterTestHelper.java | 2 +- .../entity/database/mysql/MySqlLiveEc2Test.java | 2 +- .../entity/database/mysql/MySqlLiveGceTest.java | 2 +- .../database/mysql/MysqlDockerLiveTest.java | 2 +- .../postgresql/PostgreSqDockerLiveTest.java | 2 +- .../database/postgresql/PostgreSqlChefTest.java | 4 +- .../postgresql/PostgreSqlEc2LiveTest.java | 2 +- .../postgresql/PostgreSqlGceLiveTest.java | 2 +- .../database/rubyrep/RubyRepEc2LiveTest.java | 3 +- .../rubyrep/RubyRepIntegrationTest.java | 4 +- .../rubyrep/RubyRepRackspaceLiveTest.java | 4 +- .../messaging/kafka/KafkaClusterImpl.java | 2 +- .../entity/zookeeper/ZooKeeperEnsembleImpl.java | 2 +- .../messaging/activemq/ActiveMQEc2LiveTest.java | 2 +- .../activemq/ActiveMQGoogleComputeLiveTest.java | 2 +- .../activemq/ActiveMQIntegrationTest.java | 2 +- .../messaging/kafka/KafkaIntegrationTest.java | 6 +- .../entity/messaging/kafka/KafkaLiveTest.java | 2 +- .../entity/messaging/qpid/QpidEc2LiveTest.java | 2 +- .../messaging/qpid/QpidIntegrationTest.java | 2 +- .../messaging/rabbit/RabbitEc2LiveTest.java | 2 +- .../messaging/rabbit/RabbitIntegrationTest.java | 3 +- .../storm/StormAbstractCloudLiveTest.java | 2 +- .../messaging/storm/StormEc2LiveTest.java | 2 +- .../zookeeper/ZooKeeperEc2LiveTest.java | 2 +- .../zookeeper/ZooKeeperEnsembleLiveTest.java | 2 +- .../entity/monitoring/monit/MonitNodeImpl.java | 4 +- .../entity/monitoring/monit/MonitSshDriver.java | 4 +- .../monitoring/monit/MonitIntegrationTest.java | 4 +- .../network/bind/BindDnsServerByonLiveTest.java | 4 +- .../network/bind/BindDnsServerEc2LiveTest.java | 3 +- .../network/bind/BindDnsServerLiveTest.java | 2 +- .../bind/BindDnsServerSoftlayerLiveTest.java | 3 +- .../cassandra/CassandraDatacenterImpl.java | 4 +- .../entity/nosql/cassandra/CassandraFabric.java | 2 +- .../nosql/cassandra/CassandraFabricImpl.java | 2 +- .../nosql/cassandra/CassandraNodeImpl.java | 6 +- .../nosql/cassandra/CassandraNodeSshDriver.java | 4 +- .../nosql/couchbase/CouchbaseNodeImpl.java | 4 +- .../nosql/couchbase/CouchbaseNodeSshDriver.java | 4 +- .../CouchbaseSyncGatewaySshDriver.java | 4 +- .../nosql/couchdb/CouchDBNodeSshDriver.java | 4 +- .../nosql/mongodb/AbstractMongoDBSshDriver.java | 4 +- .../nosql/mongodb/MongoDBReplicaSetImpl.java | 2 +- .../sharding/CoLocatedMongoDBRouterImpl.java | 2 +- .../MongoDBConfigServerClusterImpl.java | 2 +- .../sharding/MongoDBRouterClusterImpl.java | 2 +- .../sharding/MongoDBShardClusterImpl.java | 2 +- .../sharding/MongoDBShardedDeploymentImpl.java | 2 +- .../entity/nosql/redis/RedisClusterImpl.java | 2 +- .../entity/nosql/redis/RedisStoreImpl.java | 5 +- .../entity/nosql/redis/RedisStoreSshDriver.java | 4 +- .../entity/nosql/riak/RiakNodeImpl.java | 4 +- .../entity/nosql/riak/RiakNodeSshDriver.java | 5 +- .../entity/nosql/solr/SolrServerSshDriver.java | 5 +- .../cassandra/AbstractCassandraNodeTest.java | 3 +- .../CassandraDatacenterIntegrationTest.java | 2 +- .../cassandra/CassandraDatacenterLiveTest.java | 2 +- .../cassandra/CassandraDatacenterTest.java | 4 +- .../nosql/cassandra/CassandraFabricTest.java | 6 +- .../cassandra/CassandraNodeEc2LiveTest.java | 2 +- .../CouchbaseSyncGatewayEc2LiveTest.java | 2 +- .../nosql/couchdb/AbstractCouchDBNodeTest.java | 4 +- .../nosql/couchdb/CouchDBClusterLiveTest.java | 2 +- .../nosql/couchdb/CouchDBNodeEc2LiveTest.java | 2 +- .../ElasticSearchClusterIntegrationTest.java | 2 +- .../ElasticSearchNodeIntegrationTest.java | 4 +- .../nosql/mongodb/MongoDBEc2LiveTest.java | 2 +- .../mongodb/MongoDBReplicaSetEc2LiveTest.java | 2 +- .../nosql/mongodb/MongoDBSoftLayerLiveTest.java | 2 +- .../MongoDBShardedDeploymentEc2LiveTest.java | 2 +- .../redis/RedisClusterIntegrationTest.java | 4 +- .../entity/nosql/redis/RedisEc2LiveTest.java | 2 +- .../nosql/redis/RedisIntegrationTest.java | 4 +- .../nosql/riak/RiakClusterEc2LiveTest.java | 2 +- .../entity/nosql/riak/RiakNodeEc2LiveTest.java | 2 +- .../riak/RiakNodeGoogleComputeLiveTest.java | 2 +- .../nosql/riak/RiakNodeSoftlayerLiveTest.java | 2 +- .../nosql/solr/AbstractSolrServerTest.java | 3 +- .../nosql/solr/SolrServerEc2LiveTest.java | 2 +- .../osgi/karaf/KarafContainerEc2LiveTest.java | 2 +- .../entity/osgi/karaf/KarafContainerTest.java | 4 +- .../AbstractNonProvisionedControllerImpl.java | 2 +- .../entity/proxy/nginx/NginxSshDriver.java | 6 +- .../ControlledDynamicWebAppClusterImpl.java | 2 +- .../entity/webapp/ElasticJavaWebAppService.java | 4 +- .../webapp/nodejs/NodeJsWebAppService.java | 4 +- .../entity/dns/AbstractGeoDnsServiceTest.java | 10 +- .../geoscaling/GeoscalingIntegrationTest.java | 4 +- .../entity/proxy/AbstractControllerTest.java | 12 +- .../brooklyn/entity/proxy/StubAppServer.java | 8 +- .../brooklyn/entity/proxy/UrlMappingTest.java | 4 +- .../nginx/NginxClusterIntegrationTest.java | 4 +- .../entity/proxy/nginx/NginxEc2LiveTest.java | 2 +- .../nginx/NginxHttpsSslIntegrationTest.java | 4 +- .../proxy/nginx/NginxIntegrationTest.java | 2 +- .../proxy/nginx/NginxRebindIntegrationTest.java | 4 +- .../nginx/NginxRebindWithHaIntegrationTest.java | 4 +- .../proxy/nginx/NginxWebClusterEc2LiveTest.java | 6 +- .../AbstractWebAppFixtureIntegrationTest.java | 4 +- .../webapp/TomcatAutoScalerPolicyTest.java | 4 +- .../webapp/WebAppConcurrentDeployTest.java | 6 +- .../webapp/WebAppLiveIntegrationTest.groovy | 2 +- .../jboss/JBoss6ServerAwsEc2LiveTest.java | 2 +- .../jboss/JBoss7ServerAwsEc2LiveTest.java | 2 +- .../jboss/JBoss7ServerDockerLiveTest.java | 2 +- .../Jboss7ServerGoogleComputeLiveTest.java | 2 +- .../webapp/nodejs/NodeJsWebAppEc2LiveTest.java | 2 +- .../NodeJsWebAppFixtureIntegrationTest.java | 4 +- .../NodeJsWebAppSimpleIntegrationTest.java | 4 +- .../nodejs/NodeJsWebAppSoftlayerLiveTest.java | 2 +- .../webapp/tomcat/Tomcat8ServerEc2LiveTest.java | 2 +- .../tomcat/Tomcat8ServerSoftlayerLiveTest.java | 2 +- .../webapp/tomcat/TomcatServerEc2LiveTest.java | 2 +- .../tomcat/TomcatServerSoftlayerLiveTest.java | 2 +- .../test/entity/TestJavaWebAppEntity.java | 2 +- .../BrooklynComponentTemplateResolver.java | 2 +- .../creation/BrooklynYamlLocationResolver.java | 4 +- .../camp/brooklyn/ByonLocationsYamlTest.java | 4 +- .../brooklyn/EmptySoftwareProcessYamlTest.java | 4 +- .../camp/brooklyn/EntitiesYamlTest.java | 2 +- .../camp/brooklyn/LocationsYamlTest.java | 6 +- .../brooklyn/TestEntityWithInitConfigImpl.java | 2 +- .../CatalogOsgiVersionMoreEntityTest.java | 2 +- .../catalog/CatalogYamlLocationTest.java | 8 +- .../org/apache/brooklyn/cli/CloudExplorer.java | 6 +- .../org/apache/brooklyn/cli/ItemLister.java | 4 +- .../brooklyn/cli/lister/ItemDescriptors.java | 2 +- .../java/org/apache/brooklyn/cli/CliTest.java | 4 +- .../brooklyn/launcher/BrooklynLauncher.java | 8 +- .../brooklyn/launcher/BrooklynWebServer.java | 4 +- .../brooklynnode/BrooklynNodeRestTest.java | 2 +- .../BrooklynLauncherRebindTestFixture.java | 2 +- .../brooklyn/launcher/BrooklynLauncherTest.java | 4 +- .../SoftlayerObtainPrivateLiveTest.java | 4 +- .../org/apache/brooklyn/qa/load/LoadTest.java | 2 +- .../apache/brooklyn/rest/BrooklynWebConfig.java | 3 +- .../rest/resources/ApplicationResource.java | 2 +- .../rest/resources/CatalogResource.java | 4 +- .../brooklyn/rest/resources/EntityResource.java | 2 +- .../rest/resources/LocationResource.java | 6 +- .../rest/transform/ApplicationTransformer.java | 2 +- .../rest/transform/CatalogTransformer.java | 4 +- .../rest/transform/LocationTransformer.java | 6 +- .../rest/util/BrooklynRestResourceUtils.java | 4 +- .../brooklyn/rest/util/EntityLocationUtils.java | 3 +- .../rest/util/json/BidiSerialization.java | 3 +- .../rest/resources/LocationResourceTest.java | 3 +- .../rest/resources/ScriptResourceTest.java | 2 +- .../rest/resources/UsageResourceTest.java | 9 +- .../rest/testing/BrooklynRestApiTest.java | 4 +- .../rest/util/EntityLocationUtilsTest.java | 4 +- 514 files changed, 2456 insertions(+), 2054 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/d32d672a/api/src/main/java/org/apache/brooklyn/api/entity/Entity.java ---------------------------------------------------------------------- diff --git a/api/src/main/java/org/apache/brooklyn/api/entity/Entity.java b/api/src/main/java/org/apache/brooklyn/api/entity/Entity.java index 844996a..0918d14 100644 --- a/api/src/main/java/org/apache/brooklyn/api/entity/Entity.java +++ b/api/src/main/java/org/apache/brooklyn/api/entity/Entity.java @@ -26,6 +26,7 @@ import javax.annotation.Nullable; import org.apache.brooklyn.api.basic.BrooklynObject; import org.apache.brooklyn.api.entity.proxying.EntitySpec; import org.apache.brooklyn.api.event.AttributeSensor; +import org.apache.brooklyn.api.location.Location; import org.apache.brooklyn.api.management.Task; import org.apache.brooklyn.policy.Enricher; import org.apache.brooklyn.policy.EnricherSpec; @@ -34,7 +35,6 @@ import org.apache.brooklyn.policy.PolicySpec; import brooklyn.config.ConfigKey; import brooklyn.config.ConfigKey.HasConfigKey; -import org.apache.brooklyn.location.Location; import brooklyn.util.guava.Maybe; /** http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/d32d672a/api/src/main/java/org/apache/brooklyn/api/entity/drivers/EntityDriver.java ---------------------------------------------------------------------- diff --git a/api/src/main/java/org/apache/brooklyn/api/entity/drivers/EntityDriver.java b/api/src/main/java/org/apache/brooklyn/api/entity/drivers/EntityDriver.java index 7ba0966..6a5ebd2 100644 --- a/api/src/main/java/org/apache/brooklyn/api/entity/drivers/EntityDriver.java +++ b/api/src/main/java/org/apache/brooklyn/api/entity/drivers/EntityDriver.java @@ -19,8 +19,7 @@ package org.apache.brooklyn.api.entity.drivers; import org.apache.brooklyn.api.entity.basic.EntityLocal; - -import org.apache.brooklyn.location.Location; +import org.apache.brooklyn.api.location.Location; import com.google.common.annotations.Beta; http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/d32d672a/api/src/main/java/org/apache/brooklyn/api/entity/drivers/EntityDriverManager.java ---------------------------------------------------------------------- diff --git a/api/src/main/java/org/apache/brooklyn/api/entity/drivers/EntityDriverManager.java b/api/src/main/java/org/apache/brooklyn/api/entity/drivers/EntityDriverManager.java index fe7134b..b2ad37e 100644 --- a/api/src/main/java/org/apache/brooklyn/api/entity/drivers/EntityDriverManager.java +++ b/api/src/main/java/org/apache/brooklyn/api/entity/drivers/EntityDriverManager.java @@ -18,7 +18,7 @@ */ package org.apache.brooklyn.api.entity.drivers; -import org.apache.brooklyn.location.Location; +import org.apache.brooklyn.api.location.Location; /** * Responsible for creating a driver for a given entity/location. Also used for customizing which http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/d32d672a/api/src/main/java/org/apache/brooklyn/api/entity/proxying/EntitySpec.java ---------------------------------------------------------------------- diff --git a/api/src/main/java/org/apache/brooklyn/api/entity/proxying/EntitySpec.java b/api/src/main/java/org/apache/brooklyn/api/entity/proxying/EntitySpec.java index 5af103a..7a0d351 100644 --- a/api/src/main/java/org/apache/brooklyn/api/entity/proxying/EntitySpec.java +++ b/api/src/main/java/org/apache/brooklyn/api/entity/proxying/EntitySpec.java @@ -30,6 +30,7 @@ import javax.annotation.Nullable; import org.apache.brooklyn.api.basic.AbstractBrooklynObjectSpec; import org.apache.brooklyn.api.entity.Entity; import org.apache.brooklyn.api.entity.Group; +import org.apache.brooklyn.api.location.Location; import org.apache.brooklyn.api.management.Task; import org.apache.brooklyn.policy.Enricher; import org.apache.brooklyn.policy.EnricherSpec; @@ -40,7 +41,6 @@ import org.slf4j.LoggerFactory; import brooklyn.config.ConfigKey; import brooklyn.config.ConfigKey.HasConfigKey; -import org.apache.brooklyn.location.Location; import brooklyn.util.collections.MutableList; import com.google.common.base.Supplier; http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/d32d672a/api/src/main/java/org/apache/brooklyn/api/entity/proxying/EntityTypeRegistry.java ---------------------------------------------------------------------- diff --git a/api/src/main/java/org/apache/brooklyn/api/entity/proxying/EntityTypeRegistry.java b/api/src/main/java/org/apache/brooklyn/api/entity/proxying/EntityTypeRegistry.java index 5b55a54..76f5c54 100644 --- a/api/src/main/java/org/apache/brooklyn/api/entity/proxying/EntityTypeRegistry.java +++ b/api/src/main/java/org/apache/brooklyn/api/entity/proxying/EntityTypeRegistry.java @@ -21,8 +21,7 @@ package org.apache.brooklyn.api.entity.proxying; import org.apache.brooklyn.api.entity.Entity; import org.apache.brooklyn.api.entity.drivers.DriverDependentEntity; import org.apache.brooklyn.api.entity.drivers.EntityDriver; - -import org.apache.brooklyn.location.Location; +import org.apache.brooklyn.api.location.Location; /** * A registry of the entity implementations to be used when creating an entity of a given type. http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/d32d672a/api/src/main/java/org/apache/brooklyn/api/entity/rebind/BrooklynObjectType.java ---------------------------------------------------------------------- diff --git a/api/src/main/java/org/apache/brooklyn/api/entity/rebind/BrooklynObjectType.java b/api/src/main/java/org/apache/brooklyn/api/entity/rebind/BrooklynObjectType.java index 74f10ff..b4a120e 100644 --- a/api/src/main/java/org/apache/brooklyn/api/entity/rebind/BrooklynObjectType.java +++ b/api/src/main/java/org/apache/brooklyn/api/entity/rebind/BrooklynObjectType.java @@ -22,11 +22,10 @@ import org.apache.brooklyn.api.basic.BrooklynObject; import org.apache.brooklyn.api.catalog.CatalogItem; import org.apache.brooklyn.api.entity.Entity; import org.apache.brooklyn.api.entity.Feed; +import org.apache.brooklyn.api.location.Location; import org.apache.brooklyn.policy.Enricher; import org.apache.brooklyn.policy.Policy; -import org.apache.brooklyn.location.Location; - import com.google.common.annotations.Beta; import com.google.common.base.CaseFormat; http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/d32d672a/api/src/main/java/org/apache/brooklyn/api/entity/rebind/RebindExceptionHandler.java ---------------------------------------------------------------------- diff --git a/api/src/main/java/org/apache/brooklyn/api/entity/rebind/RebindExceptionHandler.java b/api/src/main/java/org/apache/brooklyn/api/entity/rebind/RebindExceptionHandler.java index 4b613c3..24e5997 100644 --- a/api/src/main/java/org/apache/brooklyn/api/entity/rebind/RebindExceptionHandler.java +++ b/api/src/main/java/org/apache/brooklyn/api/entity/rebind/RebindExceptionHandler.java @@ -25,11 +25,10 @@ import org.apache.brooklyn.api.catalog.CatalogItem; import org.apache.brooklyn.api.entity.Entity; import org.apache.brooklyn.api.entity.Feed; import org.apache.brooklyn.api.entity.basic.EntityLocal; +import org.apache.brooklyn.api.location.Location; import org.apache.brooklyn.policy.Enricher; import org.apache.brooklyn.policy.Policy; -import org.apache.brooklyn.location.Location; - import com.google.common.annotations.Beta; /** http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/d32d672a/api/src/main/java/org/apache/brooklyn/api/location/AddressableLocation.java ---------------------------------------------------------------------- diff --git a/api/src/main/java/org/apache/brooklyn/api/location/AddressableLocation.java b/api/src/main/java/org/apache/brooklyn/api/location/AddressableLocation.java new file mode 100644 index 0000000..31c3b29 --- /dev/null +++ b/api/src/main/java/org/apache/brooklyn/api/location/AddressableLocation.java @@ -0,0 +1,43 @@ +/* + * 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.api.location; + +import java.net.InetAddress; + +/** A location that has an IP address. + * <p> + * This IP address may be a machine (usually the MachineLocation sub-interface), + * or often an entry point for a service. + */ +public interface AddressableLocation extends Location { + + /** + * Return the single most appropriate address for this location. + * (An implementation or sub-interface definition may supply more information + * on the precise semantics of the address.) + * + * Should not return null, but in some "special cases" (e.g. CloudFoundryLocation it + * may return null if the location is not configured correctly). Users should expect + * a non-null result and treat null as a programming error or misconfiguration. + * Implementors of this interface should strive to not return null (and then we'll + * remove this caveat from the javadoc!). + */ + InetAddress getAddress(); + +} http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/d32d672a/api/src/main/java/org/apache/brooklyn/api/location/BasicMachineLocationCustomizer.java ---------------------------------------------------------------------- diff --git a/api/src/main/java/org/apache/brooklyn/api/location/BasicMachineLocationCustomizer.java b/api/src/main/java/org/apache/brooklyn/api/location/BasicMachineLocationCustomizer.java new file mode 100644 index 0000000..99d4fee --- /dev/null +++ b/api/src/main/java/org/apache/brooklyn/api/location/BasicMachineLocationCustomizer.java @@ -0,0 +1,41 @@ +/* + * 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.api.location; + +import com.google.common.annotations.Beta; + +/** + * A default no-op implementation, which can be extended to override the appropriate methods. + * + * Sub-classing will give the user some protection against future API changes - note that + * {@link MachineLocationCustomizer} is marked {@link Beta}. + */ +@Beta +public class BasicMachineLocationCustomizer implements MachineLocationCustomizer { + + @Override + public void customize(MachineLocation machine) { + // no-op + } + + @Override + public void preRelease(MachineLocation machine) { + // no-op + } +} http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/d32d672a/api/src/main/java/org/apache/brooklyn/api/location/HardwareDetails.java ---------------------------------------------------------------------- diff --git a/api/src/main/java/org/apache/brooklyn/api/location/HardwareDetails.java b/api/src/main/java/org/apache/brooklyn/api/location/HardwareDetails.java new file mode 100644 index 0000000..7e4cc49 --- /dev/null +++ b/api/src/main/java/org/apache/brooklyn/api/location/HardwareDetails.java @@ -0,0 +1,40 @@ +/* + * 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.api.location; + +import javax.annotation.Nullable; + +/** + * @since 0.7.0 + */ +public interface HardwareDetails { + + /** + * The number of CPUs on the machine + */ + @Nullable + Integer getCpuCount(); + + /** + * Amount of RAM in megabytes + */ + @Nullable + Integer getRam(); + +} http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/d32d672a/api/src/main/java/org/apache/brooklyn/api/location/Location.java ---------------------------------------------------------------------- diff --git a/api/src/main/java/org/apache/brooklyn/api/location/Location.java b/api/src/main/java/org/apache/brooklyn/api/location/Location.java new file mode 100644 index 0000000..0d05556 --- /dev/null +++ b/api/src/main/java/org/apache/brooklyn/api/location/Location.java @@ -0,0 +1,146 @@ +/* + * 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.api.location; + +import java.io.Serializable; +import java.util.Collection; +import java.util.Map; + +import org.apache.brooklyn.api.basic.BrooklynObject; + +import brooklyn.config.ConfigKey; +import brooklyn.config.ConfigKey.HasConfigKey; + +/** + * A location that an entity can be in. Examples of locations include a single machine + * or a pool of machines, or a region within a given cloud. + * + * See {@link brooklyn.entity.trait.Startable#start(Collection)}. + * + * Locations may not be {@link Serializable} in subsequent releases! + */ +public interface Location extends Serializable, BrooklynObject { + + /** + * A unique id for this location. + */ + @Override + String getId(); + + /** + * Get the name assigned to this location. + * + * @return the name assigned to the location. + * @since 0.6 (previously getName()) + */ + @Override + String getDisplayName(); + + /** + * Get the 'parent' of this location. Locations are organized into a tree hierarchy, and this method will return a reference + * to the parent of this location, or {@code null} if this location is the tree root. + * + * @return a reference to the parent of this location, or {@code null} if this location is the tree root. + * @since 0.6 (previously getParentLocation()) + */ + Location getParent(); + + /** + * Get the 'children' of this location. Locations are organized into a tree hierarchy, and this method will return a + * collection containing the children of this location. This collection is an unmodifiable view of the data. + * + * @return a collection containing the children of this location. + * @since 0.6 (previously getChildLocations()) + */ + Collection<Location> getChildren(); + + /** + * Set the 'parent' of this location. If this location was previously a child of a different location, it is removed from + * the other location first. It is valid to pass in {@code null} to indicate that the location should be disconnected + * from its parent. + * + * Adds this location as a child of the new parent (see {@code getChildLocations()}). + * + * @param newParent the new parent location object, or {@code null} to clear the parent reference. + * @since 0.6 (previously setParentLocation(Location)) + */ + void setParent(Location newParent); + + /** + * @return meta-data about the location (usually a long line, or a small number of lines). + * + * @since 0.6 + */ + String toVerboseString(); + + /** + * Answers true if this location equals or is an ancestor of the given location. + */ + boolean containsLocation(Location potentialDescendent); + + /** + * Returns configuration set at this location or inherited or default. + * + * Convenience method for {@code config().get(key)} + */ + <T> T getConfig(ConfigKey<T> key); + + /** + * Convenience method for {@code config().get(key)} + * + * @see {@link #getConfig(ConfigKey)} + */ + <T> T getConfig(HasConfigKey<T> key); + + /** + * True iff the indication config key is set, either inherited (second argument true) or locally-only (second argument false). + * + * @deprecated since 0.7.0; use {@link #config()}, such as {@code ((LocationInternal)location).config().getRaw(key).isPresent()} + */ + @Deprecated + boolean hasConfig(ConfigKey<?> key, boolean includeInherited); + + /** + * Returns all config set, either inherited (argument true) or locally-only (argument false). + * + * @deprecated since 0.7.0; use {@link #config()}, such as {@code policy.config().getBag()} + */ + @Deprecated + public Map<String,Object> getAllConfig(boolean includeInherited); + + /** + * Whether this location has support for the given extension type. + * See additional comments in {@link #getExtension(Class)}. + * + * @throws NullPointerException if extensionType is null + */ + boolean hasExtension(Class<?> extensionType); + + /** + * Returns an extension of the given type. Note that the type must be an exact match for + * how the extension was registered (e.g. {@code getExtension(Object.class)} will not match + * anything, even though registered extension extend {@link Object}. + * <p> + * This will not look at extensions of {@link #getParent()}. + * + * @throws IllegalArgumentException if this location does not support the given extension type + * @throws NullPointerException if extensionType is null + */ + <T> T getExtension(Class<T> extensionType); +} http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/d32d672a/api/src/main/java/org/apache/brooklyn/api/location/LocationDefinition.java ---------------------------------------------------------------------- diff --git a/api/src/main/java/org/apache/brooklyn/api/location/LocationDefinition.java b/api/src/main/java/org/apache/brooklyn/api/location/LocationDefinition.java new file mode 100644 index 0000000..000d883 --- /dev/null +++ b/api/src/main/java/org/apache/brooklyn/api/location/LocationDefinition.java @@ -0,0 +1,42 @@ +/* + * 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.api.location; + +import java.util.Map; + +import org.apache.brooklyn.api.management.ManagementContext; + +/** + * Defines a location, where the {@link #getSpec()} is like a serialized representation + * of the location so that Brooklyn can create a corresponding location. + * + * Examples include a complete description (e.g. giving a list of machines in a pool), or + * a name that matches a named location defined in the brooklyn poperties. + * + * Users are not expected to implement this, or to use the interface directly. See + * {@link LocationRegistry#resolve(String)} and {@link ManagementContext#getLocationRegistry()}. + */ +public interface LocationDefinition { + + public String getId(); + public String getName(); + public String getSpec(); + public Map<String,Object> getConfig(); + +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/d32d672a/api/src/main/java/org/apache/brooklyn/api/location/LocationNotAvailableException.java ---------------------------------------------------------------------- diff --git a/api/src/main/java/org/apache/brooklyn/api/location/LocationNotAvailableException.java b/api/src/main/java/org/apache/brooklyn/api/location/LocationNotAvailableException.java new file mode 100644 index 0000000..de1c09d --- /dev/null +++ b/api/src/main/java/org/apache/brooklyn/api/location/LocationNotAvailableException.java @@ -0,0 +1,35 @@ +/* + * 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.api.location; + + +/** + * Indicates that a {@link ProvisioningLocation} is not able to provision a requested location + */ +public class LocationNotAvailableException extends Exception { + private static final long serialVersionUID = 1079817235289265761L; + + public LocationNotAvailableException(String s) { + super(s); + } + + public LocationNotAvailableException(String s, Throwable throwable) { + super(s, throwable); + } +} http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/d32d672a/api/src/main/java/org/apache/brooklyn/api/location/LocationRegistry.java ---------------------------------------------------------------------- diff --git a/api/src/main/java/org/apache/brooklyn/api/location/LocationRegistry.java b/api/src/main/java/org/apache/brooklyn/api/location/LocationRegistry.java new file mode 100644 index 0000000..b3c3e5a --- /dev/null +++ b/api/src/main/java/org/apache/brooklyn/api/location/LocationRegistry.java @@ -0,0 +1,128 @@ +/* + * 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.api.location; + +import java.util.List; +import java.util.Map; +import java.util.NoSuchElementException; + +import javax.annotation.Nullable; + +import brooklyn.util.guava.Maybe; + +import com.google.common.annotations.Beta; + +/** + * The registry of the sorts of locations that brooklyn knows about. Given a + * {@LocationDefinition} or a {@link String} representation of a spec, this can + * be used to create a {@link Location} instance. + */ +@SuppressWarnings("rawtypes") +public interface LocationRegistry { + + /** map of ID (possibly randomly generated) to the definition (spec, name, id, and props; + * where spec is the spec as defined, for instance possibly another named:xxx location) */ + public Map<String,LocationDefinition> getDefinedLocations(); + + /** returns a LocationDefinition given its ID (usually a random string), or null if none */ + public LocationDefinition getDefinedLocationById(String id); + + /** returns a LocationDefinition given its name (e.g. for named locations, supply the bit after the "named:" prefix), + * or null if none */ + public LocationDefinition getDefinedLocationByName(String name); + + /** adds or updates the given defined location */ + public void updateDefinedLocation(LocationDefinition l); + + /** removes the defined location from the registry (applications running there are unaffected) */ + public void removeDefinedLocation(String id); + + /** Returns a fully populated (config etc) location from the given definition, with optional add'l flags. + * the location will be managed by default, unless the manage parameter is false, + * or the manage parameter is null and the CREATE_UNMANAGED flag is set. + * <p> + * The manage parameter is {@link Boolean} so that null can be used to say rely on anything in the flags. + * + * @since 0.7.0, but beta and likely to change as the semantics of this class are tuned */ + @Beta + public Maybe<Location> resolve(LocationDefinition ld, Boolean manage, Map locationFlags); + + /** As {@link #resolve(LocationDefinition, Boolean, Map), with the location managed, and no additional flags, + * unwrapping the result (throwing if not resolvable) */ + public Location resolve(LocationDefinition l); + + /** Returns a location created from the given spec, which might correspond to a definition, or created on-the-fly. + * Optional flags can be passed through to underlying the location. + * @since 0.7.0, but beta and likely to change as the semantics of this class are tuned */ + @Beta + public Maybe<Location> resolve(String spec, Boolean manage, Map locationFlags); + + /** efficiently returns for inspection only a fully populated (config etc) location from the given definition; + * the value might be unmanaged so it is not meant for any use other than inspection, + * but callers should prefer this when they don't wish to create a new location which will be managed in perpetuity! + * + * @deprecated since 0.7.0, use {@link #resolve(LocationDefinition, Boolean, Map)} */ + @Deprecated + public Location resolveForPeeking(LocationDefinition l); + + /** returns fully populated (config etc) location from the given definition, with overrides; + * @deprecated since 0.7.0, use {@link #resolve(LocationDefinition, Boolean, Map)} */ + @Deprecated + public Location resolve(LocationDefinition l, Map<?,?> locationFlags); + + /** See {@link #resolve(String, Boolean, Map)}; asks for the location to be managed, and supplies no additional flags, + * and unwraps the result (throwing if the spec cannot be resolve) */ + public Location resolve(String spec); + + /** Returns true/false depending whether spec seems like a valid location, + * that is it has a chance of being resolved (depending on the spec) but NOT guaranteed, + * as it is not passed to the spec; + * see {@link #resolve(String, Boolean, Map)} which has stronger guarantees + * @deprecated since 0.7.0, not really needed, and semantics are weak; use {@link #resolve(String, Boolean, Map)} */ + @Deprecated + public boolean canMaybeResolve(String spec); + + /** As {@link #resolve(String, Boolean, Map)}, but unwrapped + * @throws NoSuchElementException if the spec cannot be resolved */ + public Location resolve(String spec, @Nullable Map locationFlags); + + /** as {@link #resolve(String)} but returning null (never throwing) + * @deprecated since 0.7.0 use {@link #resolve(String, Boolean, Map)} */ + @Deprecated + public Location resolveIfPossible(String spec); + + /** + * As {@link #resolve(String)} but takes collections (of strings or locations) + * <p> + * Expects a collection of elements being individual location spec strings or locations, + * and returns a list of resolved (newly created and managed) locations. + * <p> + * From 0.7.0 this no longer flattens lists (nested lists are disallowed) + * or parses comma-separated elements (they are resolved as-is) + */ + public List<Location> resolve(Iterable<?> spec); + + /** Takes a string, interpreted as a comma-separated (or JSON style, when you need internal double quotes or commas) list; + * or a list, passed to {@link #resolve(Iterable)}; or null/empty (empty list), + * and returns a list of resolved (created and managed) locations */ + public List<Location> resolveList(Object specList); + + public Map getProperties(); + +} http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/d32d672a/api/src/main/java/org/apache/brooklyn/api/location/LocationResolver.java ---------------------------------------------------------------------- diff --git a/api/src/main/java/org/apache/brooklyn/api/location/LocationResolver.java b/api/src/main/java/org/apache/brooklyn/api/location/LocationResolver.java new file mode 100644 index 0000000..0da6175 --- /dev/null +++ b/api/src/main/java/org/apache/brooklyn/api/location/LocationResolver.java @@ -0,0 +1,57 @@ +/* + * 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.api.location; + +import java.util.Map; + +import org.apache.brooklyn.api.management.ManagementContext; + +import com.google.common.annotations.Beta; + +/** + * Provides a way of creating location instances of a particular type. + */ +public interface LocationResolver { + + void init(ManagementContext managementContext); + + /** the prefix that this resolver will attend to */ + String getPrefix(); + + /** whether the spec is something which should be passed to this resolver */ + boolean accepts(String spec, LocationRegistry registry); + + /** + * Similar to {@link #newLocationFromString(Map, String)} + * but passing in a reference to the registry itself (from which the base properties are discovered) + * and including flags (e.g. user, key, cloud credential) which are known to be for this location. + * <p> + * introduced to support locations which refer to other locations, e.g. NamedLocationResolver + **/ + @SuppressWarnings("rawtypes") + Location newLocationFromString(Map locationFlags, String spec, LocationRegistry registry); + + /** @since 0.7.0 exploring this as a mechanism to disable locations */ + @Beta + public interface EnableableLocationResolver extends LocationResolver { + /** whether the location is enabled */ + boolean isEnabled(); + } + +} http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/d32d672a/api/src/main/java/org/apache/brooklyn/api/location/LocationSpec.java ---------------------------------------------------------------------- diff --git a/api/src/main/java/org/apache/brooklyn/api/location/LocationSpec.java b/api/src/main/java/org/apache/brooklyn/api/location/LocationSpec.java new file mode 100644 index 0000000..8164ab0 --- /dev/null +++ b/api/src/main/java/org/apache/brooklyn/api/location/LocationSpec.java @@ -0,0 +1,229 @@ +/* + * 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.api.location; + +import static com.google.common.base.Preconditions.checkNotNull; + +import java.util.Collections; +import java.util.Map; + +import org.apache.brooklyn.api.basic.AbstractBrooklynObjectSpec; +import org.apache.brooklyn.api.management.Task; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import brooklyn.config.ConfigKey; +import brooklyn.config.ConfigKey.HasConfigKey; + +import com.google.common.collect.Maps; + +/** + * Gives details of a location to be created. It describes the location's configuration, and is + * reusable to create multiple locations with the same configuration. + * + * To create a LocationSpec, it is strongly encouraged to use {@code create(...)} methods. + * + * @param <T> The type of location to be created + * + * @author aled + */ +public class LocationSpec<T extends Location> extends AbstractBrooklynObjectSpec<T,LocationSpec<T>> { + + // TODO Would like to add `configure(ConfigBag)`, but `ConfigBag` is in core rather than api + + private static final Logger log = LoggerFactory.getLogger(LocationSpec.class); + + private final static long serialVersionUID = 1L; + + /** + * Creates a new {@link LocationSpec} instance for a location of the given type. The returned + * {@link LocationSpec} can then be customized. + * + * @param type A {@link Location} class + */ + public static <T extends Location> LocationSpec<T> create(Class<T> type) { + return new LocationSpec<T>(type); + } + + /** + * Creates a new {@link LocationSpec} instance with the given config, for a location of the given type. + * + * This is primarily for groovy code; equivalent to {@code LocationSpec.create(type).configure(config)}. + * + * @param config The spec's configuration (see {@link LocationSpec#configure(Map)}). + * @param type A {@link Location} class + */ + public static <T extends Location> LocationSpec<T> create(Map<?,?> config, Class<T> type) { + return LocationSpec.create(type).configure(config); + } + + /** + * Copies entity spec so its configuration can be overridden without modifying the + * original entity spec. + */ + public static <T extends Location> LocationSpec<T> create(LocationSpec<T> spec) { + // need this to get LocationSpec<T> rather than LocationSpec<? extends T> + @SuppressWarnings("unchecked") + Class<T> exactType = (Class<T>)spec.getType(); + + LocationSpec<T> result = create(exactType) + .displayName(spec.getDisplayName()) + .tags(spec.getTags()) + .configure(spec.getConfig()) + .configure(spec.getFlags()) + .catalogItemId(spec.getCatalogItemId()) + .extensions(spec.getExtensions()); + + if (spec.getParent() != null) result.parent(spec.getParent()); + + return (LocationSpec<T>) result; + } + + private String id; + private Location parent; + private final Map<String, Object> flags = Maps.newLinkedHashMap(); + private final Map<ConfigKey<?>, Object> config = Maps.newLinkedHashMap(); + private final Map<Class<?>, Object> extensions = Maps.newLinkedHashMap(); + + protected LocationSpec(Class<T> type) { + super(type); + } + + protected void checkValidType(Class<? extends T> type) { + checkIsImplementation(type, Location.class); + checkIsNewStyleImplementation(type); + } + + /** + * @deprecated since 0.7.0; instead let the management context pick a random+unique id + */ + @Deprecated + public LocationSpec<T> id(String val) { + id = val; + return this; + } + + public LocationSpec<T> parent(Location val) { + parent = checkNotNull(val, "parent"); + return this; + } + + public LocationSpec<T> configure(Map<?,?> val) { + for (Map.Entry<?, ?> entry: val.entrySet()) { + if (entry.getKey()==null) throw new NullPointerException("Null key not permitted"); + if (entry.getKey() instanceof CharSequence) + flags.put(entry.getKey().toString(), entry.getValue()); + else if (entry.getKey() instanceof ConfigKey<?>) + config.put((ConfigKey<?>)entry.getKey(), entry.getValue()); + else if (entry.getKey() instanceof HasConfigKey<?>) + config.put(((HasConfigKey<?>)entry.getKey()).getConfigKey(), entry.getValue()); + else { + log.warn("Spec "+this+" ignoring unknown config key "+entry.getKey()); + } + } + return this; + } + + public LocationSpec<T> configure(CharSequence key, Object val) { + flags.put(checkNotNull(key, "key").toString(), val); + return this; + } + + public <V> LocationSpec<T> configure(ConfigKey<V> key, V val) { + config.put(checkNotNull(key, "key"), val); + return this; + } + + public <V> LocationSpec<T> configureIfNotNull(ConfigKey<V> key, V val) { + return (val != null) ? configure(key, val) : this; + } + + public <V> LocationSpec<T> configure(ConfigKey<V> key, Task<? extends V> val) { + config.put(checkNotNull(key, "key"), val); + return this; + } + + public <V> LocationSpec<T> configure(HasConfigKey<V> key, V val) { + config.put(checkNotNull(key, "key").getConfigKey(), val); + return this; + } + + public <V> LocationSpec<T> configure(HasConfigKey<V> key, Task<? extends V> val) { + config.put(checkNotNull(key, "key").getConfigKey(), val); + return this; + } + + public <V> LocationSpec<T> removeConfig(ConfigKey<V> key) { + config.remove( checkNotNull(key, "key") ); + return this; + } + + public <E> LocationSpec<T> extension(Class<E> extensionType, E extension) { + extensions.put(checkNotNull(extensionType, "extensionType"), checkNotNull(extension, "extension")); + return this; + } + + @SuppressWarnings({ "unchecked", "rawtypes" }) + public <E> LocationSpec<T> extensions(Map<Class<?>, ?> extensions) { + for (Map.Entry<Class<?>, ?> entry : extensions.entrySet()) { + extension((Class)entry.getKey(), entry.getValue()); + } + return this; + } + + /** + * @return The id of the location to be created, or null if brooklyn can auto-generate an id + * + * @deprecated since 0.7.0; instead let the management context pick a random+unique id + */ + @Deprecated + public String getId() { + return id; + } + + /** + * @return The location's parent + */ + public Location getParent() { + return parent; + } + + /** + * @return Read-only construction flags + * @see SetFromFlag declarations on the location type + */ + public Map<String, ?> getFlags() { + return Collections.unmodifiableMap(flags); + } + + /** + * @return Read-only configuration values + */ + public Map<ConfigKey<?>, Object> getConfig() { + return Collections.unmodifiableMap(config); + } + + /** + * @return Read-only extension values + */ + public Map<Class<?>, Object> getExtensions() { + return Collections.unmodifiableMap(extensions); + } + +} http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/d32d672a/api/src/main/java/org/apache/brooklyn/api/location/LocationType.java ---------------------------------------------------------------------- diff --git a/api/src/main/java/org/apache/brooklyn/api/location/LocationType.java b/api/src/main/java/org/apache/brooklyn/api/location/LocationType.java new file mode 100644 index 0000000..dd895e3 --- /dev/null +++ b/api/src/main/java/org/apache/brooklyn/api/location/LocationType.java @@ -0,0 +1,32 @@ +/* + * 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.api.location; + +import org.apache.brooklyn.api.basic.BrooklynType; + +import com.google.common.annotations.Beta; + +/** + * Gives type information for a {@link Location}. It is immutable. + + * @since 0.7.0 + */ +@Beta +public interface LocationType extends BrooklynType { +} http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/d32d672a/api/src/main/java/org/apache/brooklyn/api/location/MachineDetails.java ---------------------------------------------------------------------- diff --git a/api/src/main/java/org/apache/brooklyn/api/location/MachineDetails.java b/api/src/main/java/org/apache/brooklyn/api/location/MachineDetails.java new file mode 100644 index 0000000..ae8b1c2 --- /dev/null +++ b/api/src/main/java/org/apache/brooklyn/api/location/MachineDetails.java @@ -0,0 +1,34 @@ +/* + * 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.api.location; + +import javax.annotation.Nonnull; + +/** + * @since 0.7.0 + */ +public interface MachineDetails { + + @Nonnull + HardwareDetails getHardwareDetails(); + + @Nonnull + OsDetails getOsDetails(); + +} http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/d32d672a/api/src/main/java/org/apache/brooklyn/api/location/MachineLocation.java ---------------------------------------------------------------------- diff --git a/api/src/main/java/org/apache/brooklyn/api/location/MachineLocation.java b/api/src/main/java/org/apache/brooklyn/api/location/MachineLocation.java new file mode 100644 index 0000000..44c8e23 --- /dev/null +++ b/api/src/main/java/org/apache/brooklyn/api/location/MachineLocation.java @@ -0,0 +1,46 @@ +/* + * 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.api.location; + +import java.net.InetAddress; + +import brooklyn.util.net.HasNetworkAddresses; + +/** + * A location that is a machine. + * + * This interface marks a {@link Location} being a network node with an IP address, + * and supports appropriate operations on the node. + */ +public interface MachineLocation extends AddressableLocation, HasNetworkAddresses { + /** + * @return the machine's network address. + */ + InetAddress getAddress(); + + /** @deprecated since 0.7.0. Use getMachineDetails().getOsDetails() instead. */ + @Deprecated + OsDetails getOsDetails(); + + /* + * @return hardware and operating system-specific details for the machine. + */ + MachineDetails getMachineDetails(); + +} http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/d32d672a/api/src/main/java/org/apache/brooklyn/api/location/MachineLocationCustomizer.java ---------------------------------------------------------------------- diff --git a/api/src/main/java/org/apache/brooklyn/api/location/MachineLocationCustomizer.java b/api/src/main/java/org/apache/brooklyn/api/location/MachineLocationCustomizer.java new file mode 100644 index 0000000..a9b4e2e --- /dev/null +++ b/api/src/main/java/org/apache/brooklyn/api/location/MachineLocationCustomizer.java @@ -0,0 +1,42 @@ +/* + * 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.api.location; + +import com.google.common.annotations.Beta; + +/** + * Customization hooks to allow apps to perform specific customisation of obtained machines. + * <p> + * Users are strongly encouraged to sub-class {@link BasicMachineLocationCustomizer}, to give + * some protection against this {@link Beta} API changing in future releases. + */ +@Beta +public interface MachineLocationCustomizer { + + /** + * Override to configure the given machine once it has been created (prior to any use). + */ + void customize(MachineLocation machine); + + /** + * Override to handle machine-related cleanup prior to {@link MachineProvisioningLocation} + * releasing the machine. + */ + void preRelease(MachineLocation machine); +} http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/d32d672a/api/src/main/java/org/apache/brooklyn/api/location/MachineManagementMixins.java ---------------------------------------------------------------------- diff --git a/api/src/main/java/org/apache/brooklyn/api/location/MachineManagementMixins.java b/api/src/main/java/org/apache/brooklyn/api/location/MachineManagementMixins.java new file mode 100644 index 0000000..b91aeb8 --- /dev/null +++ b/api/src/main/java/org/apache/brooklyn/api/location/MachineManagementMixins.java @@ -0,0 +1,92 @@ +/* + * 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.api.location; + +import java.util.Map; + +import com.google.common.annotations.Beta; + +/** + * Defines mixins for interesting locations. + */ +public class MachineManagementMixins { + + public interface RichMachineProvisioningLocation<T extends MachineLocation> extends + MachineProvisioningLocation<T>, ListsMachines, GivesMachineMetadata, KillsMachines {} + + public interface ListsMachines { + /** + * @return A map of machine ID to metadata record for all machines known in a given cloud location. + */ + Map<String,MachineMetadata> listMachines(); + } + + public interface GivesMachineMetadata { + /** + * @return the {@link MachineMetadata} for a given (brooklyn) machine location instance, + * or null if not matched. + */ + MachineMetadata getMachineMetadata(MachineLocation location); + } + + public interface KillsMachines { + /** Kills the indicated machine; throws if not recognised or possible */ + void killMachine(MachineLocation machine); + + /** Kills the machine indicated by the given (server-side) machine id; + * note, the ID is the _cloud-service_ ID, + * that is, pass in getMetadata(machineLocation).getId() not the machineLocation.getId() */ + void killMachine(String cloudServiceId); + } + + /** very lightweight machine record */ + public interface MachineMetadata { + /** The cloud service ID -- distinct from any Brooklyn {@link Location#getId()} */ + String getId(); + String getName(); + String getPrimaryIp(); + Boolean isRunning(); + /** original metadata object, if available; e.g. ComputeMetadata when using jclouds */ + Object getOriginalMetadata(); + } + + /** + * Implement to indicate that a location can suspend and resume machines. + */ + @Beta + public interface SuspendResumeLocation extends SuspendsMachines, ResumesMachines {}; + + + @Beta + public interface SuspendsMachines { + /** + * Suspend the indicated machine. + */ + void suspendMachine(MachineLocation location); + } + + @Beta + public interface ResumesMachines { + /** + * Resume the indicated machine. + */ + void resumeMachine(MachineLocation location); + } + +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/d32d672a/api/src/main/java/org/apache/brooklyn/api/location/MachineProvisioningLocation.java ---------------------------------------------------------------------- diff --git a/api/src/main/java/org/apache/brooklyn/api/location/MachineProvisioningLocation.java b/api/src/main/java/org/apache/brooklyn/api/location/MachineProvisioningLocation.java new file mode 100644 index 0000000..1fcf785 --- /dev/null +++ b/api/src/main/java/org/apache/brooklyn/api/location/MachineProvisioningLocation.java @@ -0,0 +1,72 @@ +/* + * 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.api.location; + +import java.util.Collection; +import java.util.Map; + +/** + * A location that is able to provision new machines within its location. + * + * This interface extends {@link Location} to add the ability to provision {@link MachineLocation}s in this location. + */ +public interface MachineProvisioningLocation<T extends MachineLocation> extends ProvisioningLocation<T> { + /** + * Obtain a machine in this location. + * + * @param 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) + * @return a machine that is a child of this location. + * @throws NoMachinesAvailableException if there are no machines available in this location (or impls may return null, but that is discouraged) + */ + @Override + T obtain(Map<?,?> flags) throws NoMachinesAvailableException; + + /** + * Creates a new location of the same type, but with additional creation instructions in the form of flags, + * e.g. for specifying subnets, security groups, etc + * <p> + * 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. + */ + MachineProvisioningLocation<T> newSubLocation(Map<?,?> newFlags); + + /** + * Release a previously-obtained machine. + * + * @param machine a {@link MachineLocation} previously obtained from a call to {@link #obtain()} + * @throws IllegalStateException if the machine did not come from a call to {@link #obtain()} or it has already been released. + */ + @Override + void release(T machine); + + /** + * Gets flags, suitable as an argument to {@link #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. + * + * @param tags + * @return + */ + Map<String,Object> getProvisioningFlags(Collection<String> tags); +}
