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 2022/06/27 16:48:16 UTC
[brooklyn-server] 01/03: Merge branch 'master' into tidy-instantiation
This is an automated email from the ASF dual-hosted git repository.
heneveld pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/brooklyn-server.git
commit 48e3cf17f93a98e0c41f81e914b952bcae3a5c16
Merge: e10cf842c1 ead3e69868
Author: Alex Heneveld <al...@cloudsoft.io>
AuthorDate: Mon Jun 27 16:55:28 2022 +0100
Merge branch 'master' into tidy-instantiation
Conflicts:
camp/camp-brooklyn/src/main/java/org/apache/brooklyn/camp/brooklyn/spi/creation/BrooklynAssemblyTemplateInstantiator.java
core/src/main/java/org/apache/brooklyn/core/catalog/internal/BasicBrooklynCatalog.java
Think above merged correctly, but still needs testing.
.gitignore | 1 +
.mvn/jvm.config | 1 -
server-cli/LICENSE => DEPENDENCIES | 998 ++++++++++++++++-----
Jenkinsfile | 4 +-
LICENSE | 735 +--------------
NOTICE | 485 +---------
README.md | 3 +-
api/pom.xml | 14 +-
.../brooklyn/api/catalog/BrooklynCatalog.java | 81 +-
.../apache/brooklyn/api/catalog/CatalogItem.java | 10 +-
.../brooklyn/api/entity/EntityInitializer.java | 8 +-
.../org/apache/brooklyn/api/entity/EntitySpec.java | 23 +-
.../brooklyn/api/framework/FrameworkLookup.java | 8 +-
.../api/internal/AbstractBrooklynObjectSpec.java | 41 +-
.../api/internal/BrooklynLoggingCategories.java | 23 +-
.../brooklyn/api/location/MachineLocation.java | 7 +
.../api/location/MachineManagementMixins.java | 39 +-
.../apache/brooklyn/api/location/OsDetails.java | 2 +-
.../apache/brooklyn/api/mgmt/EntityManager.java | 34 +-
.../api/mgmt/ha/HighAvailabilityManager.java | 5 +
.../ha/ManagementPlaneSyncRecordPersister.java | 3 +
.../mgmt/rebind/PersistenceExceptionHandler.java | 7 +
.../brooklyn/api/mgmt/rebind/RebindManager.java | 9 +-
.../rebind/mementos/BrooklynMementoPersister.java | 12 +-
.../api/mgmt/rebind/mementos/EntityMemento.java | 2 +-
.../mgmt/rebind/mementos/ManagedBundleMemento.java | 6 +
.../brooklyn/api/mgmt/rebind/mementos/Memento.java | 5 +-
.../apache/brooklyn/api/objs/BrooklynObject.java | 14 +-
.../brooklyn/api/objs/BrooklynObjectType.java | 2 +-
.../apache/brooklyn/api/objs/EntityAdjunct.java | 4 +-
.../brooklyn/api/typereg/BrooklynTypeRegistry.java | 6 +-
.../apache/brooklyn/api/typereg/ManagedBundle.java | 5 +-
.../brooklyn/api/typereg/OsgiBundleWithUrl.java | 4 +
camp/camp-base/pom.xml | 12 +-
.../apache/brooklyn/camp/BasicCampPlatform.java | 2 +-
.../resolve/interpret/PlanInterpretationNode.java | 2 +-
camp/camp-brooklyn/pom.xml | 14 +-
.../camp/brooklyn/BrooklynCampConstants.java | 7 +-
.../BrooklynAssemblyTemplateInstantiator.java | 12 +-
.../BrooklynComponentTemplateResolver.java | 248 +++--
.../creation/BrooklynEntityDecorationResolver.java | 194 ++--
.../spi/creation/BrooklynEntityMatcher.java | 2 +-
.../spi/creation/BrooklynYamlTypeInstantiator.java | 22 +-
.../camp/brooklyn/spi/creation/CampResolver.java | 159 +++-
.../spi/creation/CampTypePlanTransformer.java | 92 +-
.../spi/creation/EntitySpecConfiguration.java | 2 +-
.../camp/brooklyn/spi/dsl/AppGroupTraverser.java | 139 +++
.../spi/dsl/BrooklynDslDeferredSupplier.java | 22 +-
.../brooklyn/spi/dsl/BrooklynDslInterpreter.java | 29 +-
.../brooklyn/spi/dsl/DslDeferredFunctionCall.java | 34 +-
.../spi/dsl/DslDeferredPropertyAccess.java | 152 ++++
.../brooklyn/camp/brooklyn/spi/dsl/DslUtils.java | 93 ++
.../spi/dsl/methods/BrooklynDslCommon.java | 254 +++++-
.../brooklyn/spi/dsl/methods/DslComponent.java | 229 +++--
.../spi/dsl/methods/DslToStringHelpers.java | 2 +-
.../camp/brooklyn/spi/dsl/parse/DslParser.java | 131 ++-
.../brooklyn/spi/dsl/parse/PropertyAccess.java | 24 +-
...apache.brooklyn.core.plan.PlanToSpecTransformer | 4 +
...ooklyn.core.typereg.BrooklynTypePlanTransformer | 4 +
.../camp/brooklyn/AbstractJcloudsStubYamlTest.java | 7 +-
.../camp/brooklyn/AbstractWindowsYamlTest.java | 2 +-
.../camp/brooklyn/AbstractYamlRebindTest.java | 11 +-
.../brooklyn/camp/brooklyn/AbstractYamlTest.java | 29 +-
.../camp/brooklyn/AddChildrenEffectorYamlTest.java | 133 ++-
.../brooklyn/AddChildrenInitializerYamlTest.java | 139 +++
.../camp/brooklyn/ApplicationsYamlTest.java | 5 +-
.../camp/brooklyn/ByonLocationsYamlTest.java | 4 +-
.../camp/brooklyn/ConfigParametersYamlTest.java | 377 +++++---
.../camp/brooklyn/ConfigTypeCoercionYamlTest.java | 16 +-
.../brooklyn/camp/brooklyn/ConfigYamlTest.java | 208 +++++
.../brooklyn/CustomTypeConfigYamlOsgiTest.java | 58 ++
.../camp/brooklyn/CustomTypeConfigYamlTest.java | 367 ++++++++
.../brooklyn/CustomTypeInitializerYamlTest.java | 354 ++++++++
.../brooklyn/DynamicMultiGroupYamlRebindTest.java | 173 ++++
.../brooklyn/camp/brooklyn/EntitiesYamlTest.java | 188 +++-
.../brooklyn/camp/brooklyn/LocationsYamlTest.java | 67 ++
.../camp/brooklyn/MapReferenceYamlTest.java | 1 +
.../camp/brooklyn/MultiLocationYamlTest.java | 2 +-
.../brooklyn/camp/brooklyn/ObjectsYamlTest.java | 53 ++
.../brooklyn/camp/brooklyn/RebindOsgiTest.java | 2 +-
.../camp/brooklyn/ReferencedOsgiYamlTest.java | 2 +-
.../camp/brooklyn/ReferencingYamlTestEntity.java | 6 +
...a => TestSensorAndEffectorInitializerBase.java} | 73 +-
.../brooklyn/ValidationMissingTypeYamlTest.java | 76 +-
.../camp/brooklyn/WindowsYamlLiveTest.java | 165 +++-
.../catalog/CatalogMakeOsgiBundleTest.java | 5 +-
.../CatalogOsgiVersionMoreEntityRebindTest.java | 31 +-
.../catalog/CatalogOsgiVersionMoreEntityTest.java | 2 +-
.../catalog/CatalogOsgiYamlEntityTest.java | 194 +++-
.../catalog/CatalogOsgiYamlLocationTest.java | 4 +-
.../catalog/CatalogOsgiYamlPolicyTest.java | 8 +-
.../catalog/CatalogOsgiYamlTemplateTest.java | 38 +-
.../camp/brooklyn/catalog/CatalogScanOsgiTest.java | 113 ++-
.../camp/brooklyn/catalog/CatalogYamlAppTest.java | 8 +-
.../brooklyn/catalog/CatalogYamlCombiTest.java | 10 +-
.../CatalogYamlEntityOsgiTypeRegistryTest.java | 100 ++-
.../brooklyn/catalog/CatalogYamlEntityTest.java | 171 +++-
.../brooklyn/catalog/CatalogYamlLocationTest.java | 12 +-
.../brooklyn/catalog/CatalogYamlPolicyTest.java | 12 +-
.../brooklyn/catalog/CatalogYamlTemplateTest.java | 8 +-
.../catalog/CatalogYamlVersioningTest.java | 26 +-
.../brooklyn/catalog/GetFileContentsEffector.java | 12 +-
.../catalog/SpecParameterParsingOsgiTest.java | 3 +-
.../brooklyn/policy/GroupsChangePolicyTest.java | 440 +++++++++
.../camp/brooklyn/rebind/RebindMiscTest.java | 166 ++++
.../brooklyn/spi/dsl/AppGroupTraverserTest.java | 154 ++++
.../brooklyn/spi/dsl/DslParseComponentsTest.java | 12 +
.../camp/brooklyn/spi/dsl/DslParseTest.java | 97 +-
.../brooklyn/spi/dsl/DslSerializationTest.java | 177 ++++
.../camp/brooklyn/spi/dsl/DslYamlTest.java | 116 ++-
.../camp/brooklyn/spi/dsl/TagsYamlTest.java | 67 +-
.../brooklyn/spi/dsl/methods/DslTestObjects.java | 20 +-
.../camp/brooklyn/test/lite/CampYamlLiteTest.java | 2 +-
.../test/policy/failover/ElectPrimaryTest.java | 15 +-
.../rebind/misc-guava-2021-12-entity-hrxo4j0dcs | 192 ++++
...illa-bash-netcat-w-client-and-effector-ui.yaml} | 28 +-
.../resources/vanilla-bash-netcat-w-client.yaml | 2 +-
.../src/test/yaml/python-webserver.bom | 2 +-
camp/camp-server/pom.xml | 9 +-
.../apache/brooklyn/camp/server/RestApiSetup.java | 2 +-
camp/pom.xml | 2 +-
core/pom.xml | 53 +-
.../brooklyn/core/BrooklynFeatureEnablement.java | 7 +-
.../org/apache/brooklyn/core/BrooklynLogging.java | 1 +
.../org/apache/brooklyn/core/BrooklynVersion.java | 16 +-
.../brooklyn/core/catalog/CatalogPredicates.java | 11 +-
.../catalog/internal/BasicBrooklynCatalog.java | 804 ++++++++++-------
.../core/catalog/internal/CatalogBundleDto.java | 14 +-
.../core/catalog/internal/CatalogBundleLoader.java | 18 +-
.../core/catalog/internal/CatalogClasspathDo.java | 4 +-
.../catalog/internal/CatalogInitialization.java | 142 ++-
.../core/catalog/internal/CatalogItemBuilder.java | 1 +
.../catalog/internal/CatalogItemDtoAbstract.java | 3 +-
.../catalog/internal/CatalogUpgradeScanner.java | 8 +-
.../core/catalog/internal/CatalogUtils.java | 46 +-
.../brooklyn/core/config/BasicConfigKey.java | 39 +-
.../brooklyn/core/config/ConfigConstraints.java | 261 ++++--
.../apache/brooklyn/core/config/ConfigUtils.java | 23 +
.../core/config/ConstraintViolationException.java | 190 +++-
.../apache/brooklyn/core/config/MapConfigKey.java | 30 +-
.../org/apache/brooklyn/core/config/Sanitizer.java | 247 ++++-
.../PropertiesFileExternalConfigSupplier.java | 5 +-
.../external/UrlsExternalConfigSupplier.java | 2 +-
.../vault/VaultExternalConfigSupplier.java | 66 +-
.../vault/VaultUserPassExternalConfigSupplier.java | 16 +-
.../internal/AbstractCollectionConfigKey.java | 17 +-
.../config/internal/AbstractConfigMapImpl.java | 135 ++-
.../internal/AbstractStructuredConfigKey.java | 5 +-
.../config/internal/LazyContainerAndKeyValue.java | 19 +-
.../core/effector/AddChildrenEffector.java | 98 +-
.../core/effector/AddDeploySensorsInitializer.java | 98 ++
.../apache/brooklyn/core/effector/AddEffector.java | 94 +-
.../effector/AddEffectorInitializerAbstract.java | 71 ++
...va => AddEffectorInitializerAbstractProto.java} | 86 +-
.../apache/brooklyn/core/effector/AddSensor.java | 87 +-
.../core/effector/AddSensorInitializer.java | 112 +++
.../AddSensorInitializerAbstractProto.java | 55 ++
.../brooklyn/core/effector/BasicParameterType.java | 7 +-
.../brooklyn/core/effector/CompositeEffector.java | 18 +-
.../brooklyn/core/effector/ProxyEffector.java | 12 +-
.../core/effector/http/HttpCommandEffector.java | 17 +-
.../core/effector/ssh/SshCommandEffector.java | 20 +-
.../core/effector/ssh/SshEffectorTasks.java | 7 +-
.../brooklyn/core/enricher/AbstractEnricher.java | 3 +-
.../core/enricher/EnricherDynamicType.java | 2 +-
.../brooklyn/core/entity/AbstractApplication.java | 37 +-
.../brooklyn/core/entity/AbstractEntity.java | 122 ++-
.../core/entity/AddChildrenInitializer.java | 61 ++
.../brooklyn/core/entity/BrooklynConfigKeys.java | 6 +
.../org/apache/brooklyn/core/entity/Dumper.java | 4 +-
.../org/apache/brooklyn/core/entity/Entities.java | 73 +-
.../brooklyn/core/entity/EntityAdjuncts.java | 47 +
.../brooklyn/core/entity/EntityDynamicType.java | 14 +-
.../brooklyn/core/entity/EntityInitializers.java | 159 +++-
.../brooklyn/core/entity/EntityInternal.java | 3 +
.../core/entity/EntityPostInitializable.java | 22 +-
.../brooklyn/core/entity/EntityPredicates.java | 23 +
.../brooklyn/core/entity/StartableApplication.java | 4 +
.../core/entity/internal/ConfigUtilsInternal.java | 55 ++
.../core/entity/internal/EntityConfigMap.java | 7 +
.../internal/EntityTransientCopyInternal.java | 16 +-
.../core/entity/lifecycle/ServiceStateLogic.java | 30 +-
.../core/entity/trait/StartableMethods.java | 13 +-
.../apache/brooklyn/core/feed/AbstractFeed.java | 3 +-
.../brooklyn/core/feed/AttributePollHandler.java | 27 +-
.../java/org/apache/brooklyn/core/feed/Poller.java | 14 +-
.../core/internal/BrooklynPropertiesImpl.java | 2 +-
.../brooklyn/core/location/AbstractLocation.java | 11 +-
.../core/location/AbstractMachineLocation.java | 4 +
.../core/location/BasicLocationRegistry.java | 76 +-
.../core/location/BasicMachineMetadata.java | 25 +-
.../brooklyn/core/location/BasicOsDetails.java | 9 +-
.../apache/brooklyn/core/location/Locations.java | 6 +-
.../core/location/MachineLifecycleUtils.java | 288 ++++++
.../location/access/PortForwardManagerImpl.java | 21 +-
.../core/location/internal/LocationConfigMap.java | 16 +-
.../location/internal/LocationDynamicType.java | 2 +-
.../apache/brooklyn/core/mgmt/BrooklynTags.java | 277 +++++-
.../brooklyn/core/mgmt/BrooklynTaskTags.java | 37 +-
.../brooklyn/core/mgmt/EntityManagementUtils.java | 86 +-
.../OsgiBrooklynClassLoadingContext.java | 23 +-
.../entitlement/EntitlementManagerAdapter.java | 13 +
.../core/mgmt/entitlement/Entitlements.java | 104 ++-
.../mgmt/entitlement/WebEntitlementContext.java | 16 +-
...r.java => BrooklynBomOsgiArchiveInstaller.java} | 596 +++++++-----
.../core/mgmt/ha/HighAvailabilityManagerImpl.java | 135 ++-
...ementPlaneSyncRecordPersisterToObjectStore.java | 33 +-
.../apache/brooklyn/core/mgmt/ha/OsgiManager.java | 177 ++--
.../mgmt/internal/AbstractManagementContext.java | 10 +-
.../mgmt/internal/AbstractSubscriptionManager.java | 10 +
.../internal/AsyncCollectionChangeAdapter.java | 21 +-
.../BasicExternalConfigSupplierRegistry.java | 5 +-
.../mgmt/internal/BrooklynGarbageCollector.java | 171 +++-
.../mgmt/internal/CollectionChangeListener.java | 6 +
.../mgmt/internal/EntityManagementSupport.java | 125 ++-
.../core/mgmt/internal/EntityManagerInternal.java | 13 +-
.../core/mgmt/internal/LocalEntityManager.java | 312 +++++--
.../core/mgmt/internal/LocalLocationManager.java | 26 +-
.../mgmt/internal/LocalSubscriptionManager.java | 18 +-
.../core/mgmt/internal/LocalUsageManager.java | 20 +-
.../mgmt/internal/NonDeploymentEntityManager.java | 13 +-
.../internal/NonDeploymentManagementContext.java | 21 +-
.../BrooklynMementoPersisterToObjectStore.java | 232 +++--
.../mgmt/persist/BrooklynPersistenceUtils.java | 20 +-
.../mgmt/persist/RetryingMementoSerializer.java | 11 +-
.../core/mgmt/persist/XmlMementoSerializer.java | 79 +-
.../AbstractBrooklynObjectRebindSupport.java | 9 +-
.../core/mgmt/rebind/BasicEntityRebindSupport.java | 3 +-
.../mgmt/rebind/PeriodicDeltaChangeListener.java | 55 +-
.../rebind/PersistenceExceptionHandlerImpl.java | 18 +-
.../core/mgmt/rebind/RebindContextImpl.java | 8 +-
.../mgmt/rebind/RebindExceptionHandlerImpl.java | 66 +-
.../brooklyn/core/mgmt/rebind/RebindIteration.java | 658 ++++++++------
.../core/mgmt/rebind/RebindManagerImpl.java | 157 +++-
.../core/mgmt/rebind/dto/AbstractMemento.java | 6 +-
.../mgmt/rebind/dto/BasicManagedBundleMemento.java | 43 +-
.../core/mgmt/rebind/dto/MementosGenerators.java | 14 +-
.../core/network/AbstractOnNetworkEnricher.java | 2 +-
.../brooklyn/core/objs/AbstractBrooklynObject.java | 4 +
.../objs/AbstractConfigurationSupportInternal.java | 41 +-
.../brooklyn/core/objs/AbstractEntityAdjunct.java | 37 +-
.../brooklyn/core/objs/AdjunctConfigMap.java | 6 +
.../org/apache/brooklyn/core/objs/AdjunctType.java | 62 +-
.../core/objs/BasicEntityTypeRegistry.java | 4 +
.../brooklyn/core/objs/BasicSpecParameter.java | 81 +-
.../brooklyn/core/objs/BrooklynDynamicType.java | 40 +-
.../brooklyn/core/objs/BrooklynObjectInternal.java | 5 +
...l.java => AbstractBrooklynObjectProxyImpl.java} | 184 ++--
.../core/objs/proxy/EntityAdjunctProxyImpl.java | 83 ++
.../brooklyn/core/objs/proxy/EntityProxyImpl.java | 195 +---
.../core/objs/proxy/InternalEntityFactory.java | 357 +++++---
.../brooklyn/core/plan/PlanToSpecFactory.java | 9 +-
.../brooklyn/core/policy/AbstractPolicy.java | 3 +-
.../brooklyn/core/policy/PolicyDynamicType.java | 2 +-
.../resolve/entity/CatalogEntitySpecResolver.java | 6 +-
.../entity/DelegatingEntitySpecResolver.java | 5 +-
.../resolve/jackson/AsPropertyIfAmbiguous.java | 272 ++++++
.../jackson/BeanWithTypePlanTransformer.java | 94 ++
.../core/resolve/jackson/BeanWithTypeUtils.java | 275 ++++++
.../jackson/BrooklynJacksonSerializationUtils.java | 269 ++++++
.../core/resolve/jackson/BrooklynJacksonType.java | 196 ++++
...BrooklynRegisteredTypeJacksonSerialization.java | 293 ++++++
.../resolve/jackson/CommonTypesSerialization.java | 460 ++++++++++
.../JacksonBetterDelegatingDeserializer.java | 170 ++++
.../jackson/JsonSymbolDependentDeserializer.java | 151 ++++
.../jackson/ObjectReferencingSerialization.java | 179 ++++
.../core/resolve/jackson/WrappedValue.java | 139 +++
.../jackson/WrappedValuesSerialization.java | 257 ++++++
.../core/sensor/AbstractAddSensorFeed.java | 4 +-
.../core/sensor/DependentConfiguration.java | 24 +-
.../brooklyn/core/sensor/DurationSinceSensor.java | 35 +-
.../brooklyn/core/sensor/MaxConcurrencySensor.java | 19 +-
.../apache/brooklyn/core/sensor/StaticSensor.java | 33 +-
.../core/sensor/function/FunctionSensor.java | 12 +-
.../core/sensor/http/HttpRequestSensor.java | 44 +-
.../core/sensor/password/CreatePasswordSensor.java | 28 +-
.../brooklyn/core/sensor/ssh/SshCommandSensor.java | 183 +++-
.../brooklyn/core/server/BrooklynServerConfig.java | 16 +-
.../typereg/AbstractCatalogBundleResolver.java | 286 ++++++
.../core/typereg/AbstractTypePlanTransformer.java | 150 +++-
.../core/typereg/BasicBrooklynTypeRegistry.java | 144 +--
.../brooklyn/core/typereg/BasicManagedBundle.java | 81 +-
.../core/typereg/BasicOsgiBundleWithUrl.java | 16 +-
.../BrooklynBomBundleCatalogBundleResolver.java | 80 ++
.../BrooklynBomYamlCatalogBundleResolver.java | 148 +++
.../typereg/BrooklynCatalogBundleResolver.java | 168 ++++
.../typereg/BrooklynCatalogBundleResolvers.java | 221 +++++
.../core/typereg/BrooklynTypePlanTransformer.java | 26 +-
.../typereg/JavaClassNameTypePlanTransformer.java | 52 +-
.../typereg/ReferencedUnresolvedTypeException.java | 2 +-
.../typereg/RegisteredTypeLoadingContexts.java | 20 +-
.../brooklyn/core/typereg/RegisteredTypes.java | 13 +-
...pePlanException.java => TypePlanException.java} | 13 +-
.../core/typereg/TypePlanTransformers.java | 84 +-
...java => UnsupportedCatalogBundleException.java} | 10 +-
.../core/typereg/UnsupportedTypePlanException.java | 3 +-
.../apache/brooklyn/enricher/stock/Enrichers.java | 8 +-
.../enricher/stock/MathAggregatorFunctions.java | 4 +-
.../enricher/stock/PercentageEnricher.java | 3 +-
.../enricher/stock/PropagateToMembers.java | 92 ++
.../brooklyn/enricher/stock/Transformer.java | 50 +-
.../stock/YamlTimeWeightedDeltaEnricher.java | 4 +-
.../enricher/stock/aggregator/AggregationJob.java | 2 +
.../stock/aggregator/DashboardAggregator.java | 10 +-
.../brooklyn/entity/group/AbstractGroupImpl.java | 10 +-
.../brooklyn/entity/group/DynamicClusterImpl.java | 10 +-
.../brooklyn/entity/group/DynamicGroupImpl.java | 10 +-
.../brooklyn/entity/group/DynamicMultiGroup.java | 8 +
.../entity/group/DynamicMultiGroupImpl.java | 13 +-
.../brooklyn/entity/group/GroupsChangePolicy.java | 236 +++++
.../group/SshCommandMembershipTrackingPolicy.java | 2 +-
.../entity/stock/AsyncApplicationImpl.java | 2 +-
.../java/org/apache/brooklyn/feed/ssh/SshFeed.java | 34 +-
.../location/byon/ByonLocationResolver.java | 10 +-
.../LocalhostMachineProvisioningLocation.java | 18 +-
.../brooklyn/location/ssh/SshMachineLocation.java | 28 +-
.../policy/AbstractInvokeEffectorPolicy.java | 2 +-
.../policy/InvokeEffectorOnSensorChange.java | 39 +-
.../brooklyn/util/core/BrooklynEntityUtils.java | 106 +++
.../brooklyn/util/core/ClassLoaderUtils.java | 117 ++-
.../apache/brooklyn/util/core/ResourceUtils.java | 22 +
.../brooklyn/util/core/config/ConfigBag.java | 45 +-
.../util/core/config/ResolvingConfigBag.java | 4 +-
.../brooklyn/util/core/crypto/FluentKeySigner.java | 16 +
.../brooklyn/util/core/file/ArchiveBuilder.java | 8 +-
.../brooklyn/util/core/file/ArchiveUtils.java | 3 +
.../core/flags/BrooklynTypeNameResolution.java | 412 +++++++++
.../brooklyn/util/core/flags/MethodCoercions.java | 12 +-
.../brooklyn/util/core/flags/TypeCoercions.java | 111 ++-
.../util/core/internal/ssh/SshAbstractTool.java | 38 +-
.../internal/ssh/sshj/SshjClientConnection.java | 2 +-
.../util/core/internal/ssh/sshj/SshjTool.java | 8 +
.../brooklyn/util/core/json/BidiSerialization.java | 25 +-
.../util/core/json/BrooklynObjectsJsonMapper.java | 10 +-
...blyStrictPreferringFieldsVisibilityChecker.java | 8 +-
.../util/core/logbook/BrooklynLogEntry.java | 151 ++++
.../util/core/logbook/DelegatingLogStore.java | 129 +++
.../util/core/logbook/LogBookQueryParams.java | 124 +++
.../brooklyn/util/core/logbook/LogStore.java | 69 ++
.../brooklyn/util/core/logbook/LogbookConfig.java | 28 +-
.../util/core/logbook/file/FileLogStore.java | 267 ++++++
.../opensearch/BrooklynOpenSearchModel.java | 120 +++
.../logbook/opensearch/OpenSearchLogStore.java | 320 +++++++
.../brooklyn/util/core/osgi/BundleMaker.java | 3 +-
.../org/apache/brooklyn/util/core/osgi/Osgis.java | 23 +-
.../util/core/predicates/DslPredicates.java | 550 ++++++++++++
.../util/core/task/BasicExecutionContext.java | 111 ++-
.../util/core/task/BasicExecutionManager.java | 997 +++++++++++++-------
.../apache/brooklyn/util/core/task/BasicTask.java | 37 +-
.../brooklyn/util/core/task/DeferredSupplier.java | 4 +-
.../util/core/task/DynamicSequentialTask.java | 14 +-
.../core/task/InterruptingImmediateSupplier.java | 3 +-
.../brooklyn/util/core/task/ScheduledTask.java | 21 +-
.../apache/brooklyn/util/core/task/TaskTags.java | 3 +-
.../org/apache/brooklyn/util/core/task/Tasks.java | 188 ++--
.../brooklyn/util/core/task/ValueResolver.java | 277 +++---
.../ssh/internal/AbstractSshExecTaskFactory.java | 79 +-
.../task/ssh/internal/PlainSshExecTaskFactory.java | 3 +
.../util/core/task/system/ProcessTaskFactory.java | 3 +-
.../util/core/task/system/ProcessTaskStub.java | 5 +-
.../util/core/task/system/ProcessTaskWrapper.java | 60 +-
.../internal/AbstractProcessTaskFactory.java | 8 +-
.../system/internal/SystemProcessTaskFactory.java | 3 +-
.../brooklyn/util/core/text/TemplateProcessor.java | 296 ++++--
.../brooklyn/util/core/units/AbstractUnit.java | 80 ++
.../core/units/ByteSize.java} | 39 +-
.../util/core/units/DurationOrBoolean.java | 72 ++
.../core/units/Frequency.java} | 39 +-
.../org/apache/brooklyn/util/core/units/Range.java | 76 ++
.../util/core/xstream/HashMultimapConverter.java | 120 +++
.../util/core/xstream/LambdaPreventionMapper.java | 117 +++
.../util/core/xstream/MutableListConverter.java | 77 ++
.../util/core/xstream/MutableSetConverter.java | 12 +
.../util/core/xstream/StringKeyMapConverter.java | 21 +-
.../brooklyn/util/core/xstream/XmlSerializer.java | 92 +-
...rooklyn.api.internal.ApiObjectsFactoryInterface | 4 +
...g.apache.brooklyn.api.location.LocationResolver | 4 +
...apache.brooklyn.core.plan.PlanToSpecTransformer | 4 +
...brooklyn.core.resolve.entity.EntitySpecResolver | 4 +
...lyn.core.typereg.BrooklynCatalogBundleResolver} | 7 +-
...ooklyn.core.typereg.BrooklynTypePlanTransformer | 5 +
.../resources/OSGI-INF/blueprint/blueprint.xml | 18 +
core/src/main/resources/catalog.bom | 68 +-
.../persist/deserializingClassRenames.properties | 3 +-
.../internal/StaticTypePlanTransformer.java | 19 +-
.../core/config/ConfigKeyConstraintTest.java | 41 +-
.../core/config/ConfigKeyDeprecationTest.java | 13 +-
.../MapListAndOtherStructuredConfigKeyTest.java | 63 +-
.../apache/brooklyn/core/config/SanitizerTest.java | 32 +-
.../PropertiesFileExternalConfigSupplierTest.java | 9 +-
.../vault/VaultExternalConfigSupplierLiveTest.java | 1 -
.../core/effector/CompositeEffectorTest.java | 9 +-
.../brooklyn/core/effector/ProxyEffectorTest.java | 6 +-
.../core/effector/SampleManyTasksEffector.java | 14 +-
.../effector/http/HttpCommandEffectorTest.java | 8 +-
.../core/entity/ApplicationLoggingTest.java | 87 +-
.../brooklyn/core/entity/DynamicEntityTest.java | 14 +-
.../brooklyn/core/entity/EntityAssertsTest.java | 8 +-
.../brooklyn/core/entity/EntityConfigTest.java | 263 +++++-
.../core/entity/EntityInitializersTest.java | 47 +
.../brooklyn/core/entity/EntitySpecTest.java | 3 +
.../core/entity/OwnedChildrenDeprecatedTest.java | 38 +-
.../core/entity/proxying/EntityManagerTest.java | 75 +-
.../entity/proxying/InternalEntityFactoryTest.java | 10 +-
.../brooklyn/core/location/BasicOsDetailsTest.java | 59 ++
.../core/location/LocationManagementTest.java | 2 +-
.../brooklyn/core/location/SimulatedLocation.java | 18 +-
.../brooklyn/core/mgmt/DeployFailureTest.java | 5 +-
.../core/mgmt/entitlement/EntitlementsTest.java | 80 ++
...va => BrooklynBomOsgiArchiveInstallerTest.java} | 22 +-
.../ha/HighAvailabilityManagerTestFixture.java | 4 +-
.../brooklyn/core/mgmt/ha/HotStandbyTest.java | 114 ++-
.../mgmt/internal/EntityExecutionManagerTest.java | 223 ++++-
.../core/mgmt/osgi/OsgiStandaloneTest.java | 5 +-
.../core/mgmt/osgi/OsgiVersionMoreEntityTest.java | 2 +-
.../BrooklynMementoPersisterTestFixture.java | 2 +-
.../XmlMementoSerializerPerformanceTest.java | 5 +-
.../mgmt/persist/XmlMementoSerializerTest.java | 36 +-
.../core/mgmt/rebind/ManagementPlaneIdTest.java | 6 +-
.../core/mgmt/rebind/RebindEntityTest.java | 21 +-
.../rebind/RebindHistoricSshCommandSensorTest.java | 14 +-
.../rebind/RebindManagerExceptionHandlerTest.java | 16 +-
.../brooklyn/core/mgmt/rebind/RebindOptions.java | 6 +
.../core/mgmt/rebind/RebindTestFixture.java | 16 +-
.../brooklyn/core/mgmt/rebind/RebindTestUtils.java | 11 +-
.../transformer/CompoundTransformerTest.java | 2 +-
.../core/objs/BasicSpecParameterFromListTest.java | 29 +
.../core/policy/basic/BasicPolicyTest.java | 93 +-
.../resolve/jackson/BrooklynJacksonTypeTest.java | 61 ++
.../BrooklynMiscJacksonSerializationTest.java | 221 +++++
...klynRegisteredTypeJacksonSerializationTest.java | 170 ++++
.../resolve/jackson/LoggingSerializationTest.java | 56 ++
.../core/resolve/jackson/MapperTestFixture.java | 107 +++
.../resolve/jackson/PerverseSerializationTest.java | 147 +++
.../jackson/WrappedValuesSerializationTest.java | 162 ++++
.../ssh/SshCommandSensorIntegrationTest.java | 36 +-
.../core/test/BrooklynMgmtUnitTestSupport.java | 2 +
.../brooklyn/core/test/entity/TestApplication.java | 4 +
.../core/test/entity/TestApplicationImpl.java | 2 +-
.../brooklyn/core/test/entity/TestEntity.java | 2 +
.../typereg/ExampleXmlTypePlanTransformer.java | 22 +-
.../core/typereg/RegisteredTypeNamingTest.java | 6 +-
.../enricher/stock/PropagateToMembersTest.java | 184 ++++
.../enricher/stock/TransformingEnricherTest.java | 39 +-
.../YamlRollingTimeWindowMeanEnricherTest.java | 20 +-
.../stock/YamlTimeWeightedDeltaEnricherTest.java | 18 +-
.../entity/group/DynamicMultiGroupRebindTest.java | 44 +
.../entity/group/DynamicMultiGroupTest.java | 4 +
.../brooklyn/entity/group/SequenceGroupTest.java | 12 +-
.../brooklyn/feed/ssh/SshFeedIntegrationTest.java | 7 +-
.../location/ssh/SshMachineLocationTest.java | 6 +-
...nvokeEffectorOnSensorChangeIntegrationTest.java | 74 +-
.../brooklyn/util/core/ClassLoaderUtilsTest.java | 81 +-
.../util/core/crypto/SecureKeysAndSignerTest.java | 2 +-
.../core/flags/BrooklynTypeNameResolutionTest.java | 62 ++
.../util/core/internal/TypeCoercionsTest.java | 120 ++-
.../util/core/internal/ssh/RecordingSshTool.java | 8 +-
.../util/core/logbook/file/FileLogStoreTest.java | 512 +++++++++++
.../logbook/opensearch/OpenSearchLogStoreTest.java | 187 ++++
.../core/predicates/DslPredicateEntityTest.java | 117 +++
.../util/core/predicates/DslPredicateTest.java | 223 +++++
.../util/core/task/ScheduledExecutionTest.java | 248 +++--
.../brooklyn/util/core/task/ValueResolverTest.java | 20 +-
.../util/core/text/TemplateProcessorTest.java | 24 +
.../core/xstream/CompilerCompatibilityTest.java | 3 +-
.../util/core/xstream/ConverterTestFixture.java | 39 +-
.../core/xstream/HashMultimapConverterTest.java | 140 +++
.../core/xstream/TransformedMapConverterTest.java | 107 +++
.../util/core/xstream/XmlSerializerTest.java | 106 ++-
.../brooklyn/util/core/logbook/file/log-sample.txt | 31 +
core/src/test/resources/catalog.bom | 2 +-
.../test/resources/ssh-command-sensor-command.sh | 4 +-
karaf/commands/pom.xml | 4 +-
.../apache/brooklyn/karaf/commands/EntityInfo.java | 2 +-
karaf/features/README.md | 54 ++
karaf/features/pom.xml | 85 +-
karaf/features/src/main/feature/feature.xml | 432 ++++++---
karaf/httpcomponent-extension/pom.xml | 2 +-
karaf/init/pom.xml | 2 +-
.../brooklyn/launcher/osgi/OsgiLauncherImpl.java | 213 ++++-
karaf/init/src/main/resources/catalog.bom | 10 +-
karaf/jetty-config/pom.xml | 2 +-
karaf/jetty-config/src/main/resources/jetty.xml | 12 -
karaf/pom.xml | 9 +-
karaf/start/pom.xml | 2 +-
launcher-common/pom.xml | 2 +-
.../brooklyn/launcher/common/BasicLauncher.java | 18 +-
launcher/pom.xml | 23 +-
.../apache/brooklyn/launcher/BrooklynLauncher.java | 19 +-
.../camp/BrooklynCampPlatformLauncher.java | 20 +-
.../AbstractBrooklynLauncherRebindTest.java | 8 +-
.../BrooklynLauncherHighAvailabilityTest.java | 6 +-
.../BrooklynLauncherRebindCatalogOsgiTest.java | 13 +-
...ncherRebindManagementNodeStateListenerTest.java | 2 +-
.../brooklyn/launcher/BrooklynLauncherTest.java | 112 ++-
.../BrooklynLauncherUpgradeCatalogOsgiTest.java | 6 +-
.../brooklyn/launcher/BrooklynViewerLauncher.java | 22 +-
.../launcher/blueprints/AbstractBlueprintTest.java | 209 ++++-
.../launcher/blueprints/SimpleBlueprintTest.java | 48 +
locations/container/pom.xml | 47 +-
.../brooklyn/container/entity/helm/HelmEntity.java | 93 ++
.../container/entity/helm/HelmEntityImpl.java | 364 ++++++++
.../location/kubernetes/ImageChooser.java | 6 +-
.../location/kubernetes/KubernetesCerts.java | 2 +-
.../kubernetes/KubernetesClientRegistryImpl.java | 67 +-
.../location/kubernetes/KubernetesLocation.java | 684 +++++++-------
.../kubernetes/KubernetesLocationConfig.java | 1 +
.../machine/KubernetesMachineLocation.java | 6 +-
.../location/openshift/OpenShiftLocation.java | 4 +-
...g.apache.brooklyn.api.location.LocationResolver | 4 +
.../container/entity/helm/HelmEntityLiveTest.java | 157 ++++
.../location/kubernetes/ImageChooserTest.java | 37 +-
.../kubernetes/KubernetesLocationLiveTest.java | 4 +-
.../kubernetes/KubernetesLocationYamlLiveTest.java | 80 +-
.../test/resources/generic-application.tests.bom | 2 +-
.../container/src/test/resources/generic.tests.bom | 2 +-
.../src/test/resources/nginx-2-deployment.yaml | 23 +-
.../src/test/resources/nginx-2-service.yaml | 14 +-
locations/jclouds/pom.xml | 32 +-
.../jclouds/DefaultConnectivityResolver.java | 20 +-
.../brooklyn/location/jclouds/JcloudsLocation.java | 149 ++-
.../location/jclouds/JcloudsMachineLocation.java | 10 +-
.../jclouds/JcloudsSshMachineLocation.java | 12 +-
.../location/jclouds/JcloudsTypeCoercions.java | 5 +-
.../brooklyn/location/jclouds/JcloudsUtil.java | 2 +-
.../jclouds/api/JcloudsLocationPublic.java | 2 +-
.../templates/customize/TemplateOptionsOption.java | 2 +-
...g.apache.brooklyn.api.location.LocationResolver | 4 +
.../core/mgmt/persist/jclouds/BlobStoreTest.java | 4 +-
.../JcloudsBlobStoreBasedObjectStoreTest.java | 6 +-
.../jclouds/DefaultConnectivityResolverTest.java | 6 +-
.../jclouds/JcloudsLocationMetadataTest.java | 6 +-
...tionReachabilityPredicateInstantiationTest.java | 8 +-
...cloudsLocationSuspendResumeMachineLiveTest.java | 46 +-
.../jclouds/JcloudsStubTemplateBuilder.java | 4 +-
.../JcloudsTypeCoercionsWithBuilderTest.java | 2 +-
.../JcloudsReachableAddressStubbedTest.java | 2 +-
.../jclouds/provider/AwsEc2LocationLiveTest.java | 15 +-
logging/logback-includes/pom.xml | 2 +-
.../resources/brooklyn/logback-appender-file.xml | 6 +-
.../brooklyn/logback-appender-jclouds.xml | 3 +-
.../resources/brooklyn/logback-appender-stdout.xml | 4 +-
.../resources/brooklyn/logback-logger-excludes.xml | 13 +-
logging/logback-xml/pom.xml | 2 +-
parent/pom.xml | 536 +----------
policy/pom.xml | 2 +-
.../action/AbstractScheduledEffectorPolicy.java | 44 +-
.../policy/action/PeriodicEffectorPolicy.java | 1 +
.../policy/autoscaling/AutoScalerPolicy.java | 16 +
.../policy/failover/ElectPrimaryEffector.java | 19 +-
.../policy/failover/ElectPrimaryPolicy.java | 39 +-
.../policy/failover/PrimaryRunningEnricher.java | 5 +
policy/src/main/resources/catalog.bom | 22 +-
.../policy/action/PeriodicEffectorPolicyTest.java | 8 +
.../policy/enricher/DeltaEnrichersTests.java | 22 +-
.../policy/enricher/RollingMeanEnricherTest.java | 6 +-
.../RollingTimeWindowMeanEnricherTest.java | 20 +-
.../enricher/TimeFractionDeltaEnricherTest.java | 6 +-
.../loadbalancing/LoadBalancingModelTest.java | 2 +-
.../loadbalancing/LoadBalancingPolicyTest.java | 4 +-
pom.xml | 778 ++++++++++++++--
rest/rest-api/pom.xml | 18 +-
.../org/apache/brooklyn/rest/api/AccessApi.java | 16 +-
.../org/apache/brooklyn/rest/api/ActivityApi.java | 38 +-
.../org/apache/brooklyn/rest/api/AdjunctApi.java | 71 +-
.../apache/brooklyn/rest/api/ApplicationApi.java | 219 ++++-
.../org/apache/brooklyn/rest/api/BundleApi.java | 154 +++-
.../org/apache/brooklyn/rest/api/CatalogApi.java | 254 ++++--
.../org/apache/brooklyn/rest/api/EffectorApi.java | 12 +-
.../org/apache/brooklyn/rest/api/EntityApi.java | 204 ++++-
.../apache/brooklyn/rest/api/EntityConfigApi.java | 70 +-
.../org/apache/brooklyn/rest/api/LocationApi.java | 44 +-
.../rest/api/{ScriptApi.java => LogbookApi.java} | 42 +-
.../org/apache/brooklyn/rest/api/LogoutApi.java | 24 +-
.../org/apache/brooklyn/rest/api/PolicyApi.java | 2 +-
.../apache/brooklyn/rest/api/PolicyConfigApi.java | 2 +-
.../org/apache/brooklyn/rest/api/ScriptApi.java | 10 +-
.../org/apache/brooklyn/rest/api/SensorApi.java | 66 +-
.../org/apache/brooklyn/rest/api/ServerApi.java | 159 +++-
.../java/org/apache/brooklyn/rest/api/TypeApi.java | 49 +-
.../org/apache/brooklyn/rest/api/UsageApi.java | 25 +-
.../apache/brooklyn/rest/domain/AdjunctDetail.java | 10 +-
.../apache/brooklyn/rest/domain/BundleSummary.java | 11 +-
.../rest/domain/HighAvailabilitySummary.java | 8 +-
.../brooklyn/rest/domain/RelationSummary.java | 72 ++
.../apache/brooklyn/rest/domain/RelationType.java | 79 ++
rest/rest-resources/pom.xml | 30 +-
.../org/apache/brooklyn/rest/BrooklynRestApi.java | 42 +-
.../org/apache/brooklyn/rest/BrooklynRestApp.java | 2 +-
.../apache/brooklyn/rest/BrooklynWebConfig.java | 29 +-
.../BrooklynSecurityProviderFilterHelper.java | 101 ++-
.../BrooklynSecurityProviderFilterJavax.java | 35 +-
.../BrooklynSecurityProviderFilterJersey.java | 10 +-
.../brooklyn/rest/filter/CsrfTokenFilter.java | 9 +-
.../rest/filter/EntitlementContextFilter.java | 35 +-
.../rest/filter/HaHotCheckHelperAbstract.java | 23 +-
.../rest/filter/HaHotCheckResourceFilter.java | 43 +-
.../rest/filter/LoggingResourceFilter.java | 29 +-
.../resources/AbstractBrooklynRestResource.java | 64 +-
.../brooklyn/rest/resources/AdjunctResource.java | 11 +-
.../brooklyn/rest/resources/ApidocResource.java | 30 +-
.../rest/resources/ApplicationResource.java | 216 +++--
.../brooklyn/rest/resources/BundleResource.java | 102 ++-
.../brooklyn/rest/resources/CatalogResource.java | 131 ++-
.../brooklyn/rest/resources/EffectorResource.java | 6 +-
.../rest/resources/EntityConfigResource.java | 56 +-
.../brooklyn/rest/resources/EntityResource.java | 133 ++-
.../brooklyn/rest/resources/LocationResource.java | 3 +
.../brooklyn/rest/resources/LogbookResource.java | 60 ++
.../brooklyn/rest/resources/PolicyResource.java | 27 +-
.../brooklyn/rest/resources/ScriptResource.java | 2 +-
.../brooklyn/rest/resources/SensorResource.java | 24 +-
.../brooklyn/rest/resources/ServerResource.java | 232 ++++-
.../brooklyn/rest/resources/TypeResource.java | 21 +-
.../provider/DelegatingSecurityProvider.java | 29 +-
.../security/provider/LdapSecurityProvider.java | 209 ++++-
.../rest/transform/ApplicationTransformer.java | 6 +-
.../transform/HighAvailabilityTransformer.java | 2 +-
.../brooklyn/rest/transform/SensorTransformer.java | 3 +-
.../brooklyn/rest/transform/TaskTransformer.java | 5 +-
.../brooklyn/rest/transform/TypeTransformer.java | 86 +-
.../brooklyn/rest/util/DefaultExceptionMapper.java | 6 +-
.../brooklyn/rest/util/EntityAttributesUtils.java | 49 +
.../brooklyn/rest/util/EntityRelationUtils.java | 49 +
.../rest/util/MultiSessionAttributeAdapter.java | 356 ++++++--
.../brooklyn/rest/util/ScannerInjectHelper.java | 6 +-
.../brooklyn/rest/util/WebResourceUtils.java | 5 +-
.../main/resources/OSGI-INF/blueprint/service.xml | 2 +
.../brooklyn/rest/resources/ActivityRestTest.java | 47 +-
.../rest/resources/AdjunctResourceTest.java | 50 +-
.../rest/resources/ApidocResourceTest.java | 2 +-
.../rest/resources/ApplicationResourceTest.java | 82 +-
.../rest/resources/BundleAndTypeResourcesTest.java | 41 +-
.../rest/resources/CatalogResourceTest.java | 23 +-
.../rest/resources/EffectorResourceTest.java | 4 +-
.../rest/resources/EffectorUtilsRestTest.java | 2 +-
.../rest/resources/EntityConfigResourceTest.java | 76 +-
.../resources/EntityRelationsResourceTest.java | 162 ++++
.../rest/resources/EntityResourceTest.java | 44 +-
.../rest/resources/LocationResourceTest.java | 51 ++
.../rest/resources/LogbookResourceTest.java | 219 +++++
.../rest/resources/SensorResourceTest.java | 33 +-
.../provider/LdapSecurityProviderLiveTest.java | 88 ++
.../provider/LdapSecurityProviderTest.java | 55 ++
.../brooklyn/rest/testing/BrooklynRestApiTest.java | 16 +-
.../rest/testing/BrooklynRestResourceTest.java | 25 +-
.../rest/testing/mocks/RestMockSimpleEntity.java | 3 +
.../util/json/BrooklynJacksonSerializerTest.java | 332 ++++++-
.../test/resources/localhost.default.location.zip | Bin 0 -> 19629 bytes
.../src/test/resources/logbook.log.sample | 5 +
rest/rest-server/pom.xml | 18 +-
.../org/apache/brooklyn/rest/RestApiSetup.java | 2 +-
.../brooklyn/rest/filter/HaMasterCheckFilter.java | 21 +-
rest/rest-server/src/main/webapp/WEB-INF/web.xml | 1 +
.../rest/BrooklynRestApiLauncherTestFixture.java | 5 +
.../brooklyn/rest/api/ApplicationApiTest.java | 89 ++
server-cli/{LICENSE => DEPENDENCIES} | 953 +++++++++++++++-----
server-cli/LICENSE | 794 +---------------
server-cli/NOTICE | 550 +-----------
server-cli/pom.xml | 9 +-
.../java/org/apache/brooklyn/cli/AbstractMain.java | 10 +-
.../org/apache/brooklyn/cli/CloudExplorer.java | 4 +-
.../java/org/apache/brooklyn/cli/ItemLister.java | 4 +
.../main/java/org/apache/brooklyn/cli/Main.java | 2 +-
software/base/pom.xml | 14 +-
.../brooklyn/entity/brooklynnode/BrooklynNode.java | 2 +-
.../entity/brooklynnode/BrooklynNodeImpl.java | 4 +-
.../entity/brooklynnode/BrooklynNodeSshDriver.java | 6 +-
.../entity/java/JavaSoftwareProcessSshDriver.java | 2 +-
.../brooklyn/entity/java/JmxAttributeSensor.java | 29 +-
.../apache/brooklyn/entity/java/JmxSupport.java | 6 +-
.../brooklyn/entity/java/JmxmpSslSupport.java | 2 +-
.../entity/java/VanillaJavaAppSshDriver.java | 5 +-
.../brooklyn/entity/machine/AddMachineMetrics.java | 4 +-
.../base/AbstractSoftwareProcessSshDriver.java | 6 +-
.../base/AbstractSoftwareProcessWinRmDriver.java | 38 +-
.../SameServerDriverLifecycleEffectorTasks.java | 3 +-
...oftwareProcessDriverLifecycleEffectorTasks.java | 52 +-
.../entity/software/base/SoftwareProcessImpl.java | 3 -
.../lifecycle/MachineLifecycleEffectorTasks.java | 239 +++--
.../software/base/lifecycle/ScriptHelper.java | 6 +-
.../base/lifecycle/WinRmExecuteHelper.java | 44 +-
.../org/apache/brooklyn/feed/jmx/JmxHelper.java | 7 +
.../brooklyn/tasks/kubectl/ContainerCommons.java | 52 ++
.../tasks/kubectl/ContainerTaskFactory.java | 139 +++
.../brooklyn/tasks/kubectl/DockerEffector.java | 82 ++
.../brooklyn/tasks/kubectl/DockerSensor.java | 102 +++
.../apache/brooklyn/tasks/kubectl/JobBuilder.java | 400 +++++++++
...g.apache.brooklyn.api.location.LocationResolver | 4 +
...brooklyn.core.resolve.entity.EntitySpecResolver | 4 +
software/base/src/main/resources/catalog.bom | 19 +-
.../OnTheFlyDynamicLocationPatternRebindTest.java} | 8 +-
.../OnTheFlyDynamicLocationPatternTest.java} | 6 +-
.../{clocker => onthefly}/StubAttributes.java | 2 +-
.../{clocker => onthefly}/StubContainer.java | 2 +-
.../{clocker => onthefly}/StubContainerImpl.java | 2 +-
.../StubContainerLocation.java | 2 +-
.../dynamic/{clocker => onthefly}/StubHost.java | 2 +-
.../{clocker => onthefly}/StubHostImpl.java | 2 +-
.../{clocker => onthefly}/StubHostLocation.java | 2 +-
.../{clocker => onthefly}/StubInfrastructure.java | 2 +-
.../StubInfrastructureImpl.java | 2 +-
.../StubInfrastructureLocation.java | 2 +-
.../{clocker => onthefly}/StubResolver.java | 2 +-
.../{clocker => onthefly}/StubResolverTest.java | 2 +-
.../dynamic/{clocker => onthefly}/StubUtils.java | 2 +-
.../base/AbstractSoftwareProcessStreamsTest.java | 35 +-
.../SoftwareProcessEntityHttpFeedRebindTest.java | 2 +-
...nillaSoftwareProcessStreamsIntegrationTest.java | 14 +-
.../base/VanillaSoftwareProcessStreamsTest.java | 146 +++
.../VanillaWindowsProcessWinrmStreamsLiveTest.java | 4 +-
.../SoftwareProcessLocationUnmanageTest.java | 4 +-
.../base/test/location/WindowsTestFixture.java | 5 +-
.../test/mysql/DynamicToyMySqlEntityBuilder.java | 7 +-
.../brooklyn/tasks/kubectl/DockerEffectorTest.java | 112 +++
.../brooklyn/tasks/kubectl/DockerSensorTest.java | 125 +++
.../brooklyn/tasks/kubectl/JobBuilderTest.java | 159 ++++
.../org/apache/brooklyn/kubectl/sample-both.yaml | 38 +
.../brooklyn/kubectl/sample-effector-dev.yaml | 34 +
.../apache/brooklyn/kubectl/sample-effector.yaml | 32 +
.../org/apache/brooklyn/kubectl/sample-sensor.yaml | 30 +
software/winrm/pom.xml | 7 +-
.../core/sensor/windows/WinRmCommandSensor.java | 51 +-
.../windows/WindowsPerformanceCounterSensors.java | 23 +-
.../location/winrm/PlainWinRmExecTaskFactory.java | 100 +++
.../location/winrm/WinRmMachineLocation.java | 147 ++-
.../location/winrm/WinRmPutTaskFactory.java | 120 +++
.../brooklyn/location/winrm/WinRmPutTaskStub.java | 68 ++
.../location/winrm/WinRmPutTaskWrapper.java | 185 ++++
.../apache/brooklyn/location/winrm/WinRmTasks.java | 57 ++
.../util/core/internal/winrm/WinRmTool.java | 4 +-
.../internal/winrm/winrm4j/PrettyXmlWriter.java | 146 +++
.../core/internal/winrm/winrm4j/Winrm4jTool.java | 38 +-
.../feed/windows/WinRmCommandSensorTest.java | 21 +-
.../brooklyn/feed/windows/WinRmFeedLiveTest.java | 7 +-
.../WindowsPerformanceCounterSensorsTest.java | 6 +-
.../winrm/winrm4j/PrettyXmlWriterTest.java | 187 ++++
test-framework/pom.xml | 2 +-
test-framework/src/main/resources/catalog.bom | 2 +-
.../LoopOverGroupMembersTestCaseTest.java | 7 +-
.../test/framework/TestEndpointReachableTest.java | 6 +-
.../example-catalog-test.bom | 2 +-
.../test-framework-examples/example-catalog.bom | 2 +-
test-support/pom.xml | 2 +-
.../java/org/apache/brooklyn/test/LogWatcher.java | 80 +-
.../META-INF/services/org.testng.ITestNGListener | 24 +-
.../dependencies/osgi/{entities => beans}/pom.xml | 10 +-
.../org/apache/brooklyn/test/osgi/SampleBean.java | 10 +-
.../osgi/beans/src/main}/resources/catalog.bom | 8 +-
.../dependencies/osgi/com-example-entities/pom.xml | 2 +-
utils/common/dependencies/osgi/entities/pom.xml | 2 +-
.../dependencies/osgi/more-entities-v1/pom.xml | 2 +-
.../osgi/more-entities-v2-evil-twin/pom.xml | 2 +-
.../dependencies/osgi/more-entities-v2/pom.xml | 2 +-
utils/common/pom.xml | 16 +-
.../java/org/apache/brooklyn/config/ConfigMap.java | 8 +-
.../core/validation/BrooklynValidation.java | 116 +++
.../java/org/apache/brooklyn/test/Asserts.java | 129 ++-
.../util/collections/CollectionFunctionals.java | 40 +-
.../brooklyn/util/collections/MutableList.java | 56 +-
.../brooklyn/util/collections/MutableMap.java | 22 +-
.../brooklyn/util/collections/MutableSet.java | 12 +-
.../brooklyn/util/exceptions/Exceptions.java | 2 +-
.../util/exceptions/ReferenceWithError.java | 2 +-
.../exceptions/RuntimeInterruptedException.java | 12 +-
.../brooklyn/util/guava/EmptyImmutableBiMap.java | 133 +++
.../java/org/apache/brooklyn/util/guava/Maybe.java | 267 +++++-
.../org/apache/brooklyn/util/guava/TypeTokens.java | 134 ++-
.../java/org/apache/brooklyn/util/io/FileUtil.java | 18 +
.../org/apache/brooklyn/util/javalang/Boxing.java | 3 +-
.../brooklyn/util/javalang/JavaClassNames.java | 3 +-
.../apache/brooklyn/util/javalang/Reflections.java | 17 +-
.../javalang/coerce/CommonAdaptorTryCoercions.java | 13 +-
.../coerce/CommonAdaptorTypeCoercions.java | 71 +-
.../coerce/PrimitiveStringTypeCoercions.java | 66 +-
.../javalang/coerce/TypeCoercerExtensible.java | 26 +-
.../org/apache/brooklyn/util/net/Networking.java | 4 +-
.../brooklyn/util/net/UserAndHostAndPort.java | 2 +-
.../main/java/org/apache/brooklyn/util/os/Os.java | 17 +
.../apache/brooklyn/util/osgi/OsgiActivator.java | 11 +
.../apache/brooklyn/util/osgi/VersionedName.java | 2 +-
.../org/apache/brooklyn/util/ssh/BashCommands.java | 29 +-
.../brooklyn/util/stream/InputStreamSource.java | 109 +++
.../brooklyn/util/stream/InputStreamSupplier.java | 51 --
.../apache/brooklyn/util/stream/StreamGobbler.java | 86 +-
.../brooklyn/util/text/BrooklynVersionSyntax.java | 6 +-
.../apache/brooklyn/util/text/StringFunctions.java | 10 +-
.../org/apache/brooklyn/util/text/Strings.java | 81 +-
.../apache/brooklyn/util/text/WildcardGlobs.java | 6 +-
.../org/apache/brooklyn/util/time/Duration.java | 18 +-
.../java/org/apache/brooklyn/util/time/Time.java | 249 +++--
.../org/apache/brooklyn/util/time/Timestamp.java | 57 ++
.../java/org/apache/brooklyn/util/yaml/Yamls.java | 81 +-
.../core/validation/BrooklynValidationTest.java | 152 ++++
.../collections/CollectionFunctionalsTest.java | 28 +-
.../apache/brooklyn/util/guava/TypeTokensTest.java | 47 +
.../org/apache/brooklyn/util/io/FileUtilTest.java | 44 +-
.../javalang/coerce/TypeCoercerExtensibleTest.java | 3 +-
.../util/javalang/coerce/TypeCoercionsTest.java | 31 +-
.../brooklyn/util/maven/MavenArtifactTest.java | 4 +-
.../brooklyn/util/net/UserAndHostAndPortTest.java | 4 +-
.../brooklyn/util/osgi/OsgiTestResources.java | 6 +-
.../brooklyn/util/stream/StreamGobblerTest.java | 74 +-
.../util/text/BrooklynVersionSyntaxTest.java | 5 +-
.../org/apache/brooklyn/util/text/StringsTest.java | 11 +
.../apache/brooklyn/util/time/DurationTest.java | 21 +-
.../org/apache/brooklyn/util/time/TimeTest.java | 35 +-
.../org/apache/brooklyn/util/yaml/YamlsTest.java | 10 +-
.../brooklyn/files/testNoJava-0.1.0-SNAPSHOT.jar | Bin 0 -> 1636 bytes
.../brooklyn/files/testWithJava-0.1.0-SNAPSHOT.jar | Bin 0 -> 4436 bytes
.../brooklyn/osgi/brooklyn-osgi-test-a_0.1.0.txt | 2 +-
.../brooklyn/osgi/brooklyn-test-osgi-beans.jar | Bin 0 -> 11696 bytes
...st-a_0.1.0.txt => brooklyn-test-osgi-beans.txt} | 8 +-
.../brooklyn/osgi/brooklyn-test-osgi-entities.txt | 4 +-
.../brooklyn-test-osgi-more-entities_0.1.0.txt | 4 +-
.../brooklyn-test-osgi-more-entities_0.2.0.txt | 4 +-
...lyn-test-osgi-more-entities_evil-twin_0.2.0.txt | 4 +-
utils/groovy/pom.xml | 2 +-
utils/jmx/jmxmp-ssl-agent/pom.xml | 2 +-
.../apache/brooklyn/util/jmx/jmxmp/JmxmpAgent.java | 5 +-
.../brooklyn/util/jmx/jmxmp/JmxmpAgentSslTest.java | 4 +-
utils/jmx/jmxrmi-agent/pom.xml | 2 +-
utils/rest-swagger/pom.xml | 14 +-
.../rest/apidoc/RestApiResourceScanner.java | 115 ++-
utils/rt-felix/pom.xml | 6 +-
.../brooklyn/rt/felix/EmbeddedFelixFramework.java | 23 +-
.../org.apache.brooklyn.util.osgi.SystemFramework | 4 +
.../rt/felix/EmbeddedFelixFrameworkTest.java | 15 +-
utils/test-support/pom.xml | 2 +-
.../brooklyn/test/support/VerboseReporter.java | 11 +-
.../resources/brooklyn/logback-appender-file.xml | 3 +-
.../src/main/resources/logback-test.xml | 3 +
832 files changed, 41278 insertions(+), 11613 deletions(-)
diff --cc camp/camp-brooklyn/src/main/java/org/apache/brooklyn/camp/brooklyn/spi/creation/BrooklynAssemblyTemplateInstantiator.java
index f261bcaba2,ca96826a9b..f094e8a6cc
--- a/camp/camp-brooklyn/src/main/java/org/apache/brooklyn/camp/brooklyn/spi/creation/BrooklynAssemblyTemplateInstantiator.java
+++ b/camp/camp-brooklyn/src/main/java/org/apache/brooklyn/camp/brooklyn/spi/creation/BrooklynAssemblyTemplateInstantiator.java
@@@ -79,9 -80,13 +80,14 @@@ public class BrooklynAssemblyTemplateIn
CampPlatform platform,
BrooklynClassLoadingContext loader,
Set<String> encounteredTypeSymbolicNames) {
- // during catalog install, the ID is an unhelpful random ID. but logging added there now tells us more.
- // in most cases the ID is meaningful however, and useful for context for subsequent errors.
- log.debug("CAMP creating application instance for {} ({})", template.getId(), template);
++
+ if (BasicBrooklynCatalog.currentlyResolvingType.get()!=null) {
+ if (log.isTraceEnabled()) {
+ log.trace("CAMP instantiating application to resolve {} ({} / {})", BasicBrooklynCatalog.currentlyResolvingType.get(), template.getId(), CampResolver.currentlyCreatingSpec.get());
+ }
+ } else {
+ log.debug("CAMP instantiating application for {} ({})", template.getId(), CampResolver.currentlyCreatingSpec.get());
+ }
// AssemblyTemplates created via PDP, _specifying_ then entities to put in
diff --cc core/src/main/java/org/apache/brooklyn/core/catalog/internal/BasicBrooklynCatalog.java
index 846a2879bf,304f90d93c..ade47e671d
--- a/core/src/main/java/org/apache/brooklyn/core/catalog/internal/BasicBrooklynCatalog.java
+++ b/core/src/main/java/org/apache/brooklyn/core/catalog/internal/BasicBrooklynCatalog.java
@@@ -131,14 -116,15 +116,18 @@@ public class BasicBrooklynCatalog imple
/** Header on bundle indicating it is a wrapped BOM with no other resources */
public static final String BROOKLYN_WRAPPED_BOM_BUNDLE = "Brooklyn-Wrapped-BOM";
+
@VisibleForTesting
public static final boolean AUTO_WRAP_CATALOG_YAML_AS_BUNDLE = true;
-
+
+ /** key within brooklyn.catalog containing a map of items used to generate headers if an OSGi bundle is being produced by wrapping the YAML */
+ public static final String CATALOG_OSGI_WRAP_HEADERS = "catalog.osgi.wrap.headers";
+
private static final Logger log = LoggerFactory.getLogger(BasicBrooklynCatalog.class);
+ private static boolean ATTEMPT_INSTANTIATION_WITH_TYPE_PLAN_TRANSFORMERS = true;
+ private static boolean ATTEMPT_INSTANTIATION_WITH_LEGACY_PLAN_TO_SPEC_CONVERTERS = true;
+
public static class BrooklynLoaderTracker {
public static final ThreadLocal<BrooklynClassLoadingContext> loader = new ThreadLocal<BrooklynClassLoadingContext>();
@@@ -791,8 -751,11 +755,12 @@@
log.warn("Name property will be ignored due to the existence of displayName and at least one of id, symbolicName");
}
- log.debug("Processing "+Arrays.asList(id, symbolicName, displayName, name, "anonymous item").stream().filter(Strings::isNonBlank).findFirst()+" for catalog addition");
- PlanInterpreterGuessingType planInterpreter = new PlanInterpreterGuessingType(null, item, sourceYaml, itemType, libraryBundles, resultLegacyFormat).reconstruct();
+ CharSequence loggedId = Strings.firstNonBlank(id, symbolicName, displayName, "<unidentified>");
+ log.debug("Analyzing item " + loggedId + " for addition to catalog");
+ PlanInterpreterInferringType planInterpreter = new PlanInterpreterInferringType(id, item, sourceYaml, itemType, format,
+ (containingBundle instanceof CatalogBundle ? ((CatalogBundle)containingBundle) : null), libraryBundles,
+ null, resultLegacyFormat).resolve();
++
Exception resolutionError = null;
if (!planInterpreter.isResolved()) {
// don't throw yet, we may be able to add it in an unresolved state
@@@ -998,10 -969,16 +974,16 @@@
sourcePlanYaml = planInterpreter.itemYaml;
}
- BasicRegisteredType type = createYetUnsavedRegisteredTypeInstance(RegisteredTypeKind.UNRESOLVED, symbolicName, version,
- BasicTypeImplementationPlan plan = new BasicTypeImplementationPlan(format, sourcePlanYaml);
- BasicRegisteredType type = (BasicRegisteredType) RegisteredTypes.newInstance(
++
++ BasicRegisteredType type = createYetUnsavedRegisteredTypeInstance(
+ BrooklynObjectType.of(planInterpreter.catalogItemType).getSpecType()!=null ? RegisteredTypeKind.SPEC
+ : planInterpreter.catalogItemType==CatalogItemType.BEAN ? RegisteredTypeKind.BEAN
+ : RegisteredTypeKind.UNRESOLVED,
- symbolicName, version, plan,
- superTypes, aliases, tags, containingBundle==null ? null : containingBundle.getVersionedName().toString(),
- MutableList.<OsgiBundleWithUrl>copyOf(libraryBundles),
- displayName, description, catalogIconUrl, catalogDeprecated, catalogDisabled);
- RegisteredTypes.notePlanEquivalentToThis(type, plan);
++ symbolicName, version,
+ containingBundle, libraryBundles,
+ displayName, description, catalogIconUrl, catalogDeprecated, sourcePlanYaml,
+ tags, aliases, catalogDisabled, superTypes, format);
++
// record original source in case it was changed
RegisteredTypes.notePlanEquivalentToThis(type, new BasicTypeImplementationPlan(format, sourceYaml));
@@@ -1029,25 -1008,49 +1013,67 @@@
}
}
+ private BasicRegisteredType createYetUnsavedRegisteredTypeInstance(
- RegisteredTypeKind kind,
- String symbolicName, String version,
- ManagedBundle containingBundle, Collection<CatalogBundle> libraryBundles,
- String displayName, String description,
- String catalogIconUrl, final Boolean catalogDeprecated, String sourcePlanYaml, Set<Object> tags, List<String> aliases,
- Boolean catalogDisabled, MutableList<Object> superTypes, String format)
- {
++ RegisteredTypeKind kind,
++ String symbolicName, String version,
++ ManagedBundle containingBundle, Collection<CatalogBundle> libraryBundles,
++ String displayName, String description,
++ String catalogIconUrl, final Boolean catalogDeprecated, String sourcePlanYaml, Set<Object> tags, List<String> aliases,
++ Boolean catalogDisabled, MutableList<Object> superTypes, String format) {
+ BasicTypeImplementationPlan plan = new BasicTypeImplementationPlan(format, sourcePlanYaml);
+ BasicRegisteredType type = (BasicRegisteredType) RegisteredTypes.newInstance(
- kind,
- symbolicName, version, plan,
- superTypes, aliases, tags, containingBundle==null ? null : containingBundle.getVersionedName().toString(),
- MutableList.<OsgiBundleWithUrl>copyOf(libraryBundles),
- displayName, description, catalogIconUrl, catalogDeprecated, catalogDisabled);
++ kind,
++ symbolicName, version, plan,
++ superTypes, aliases, tags, containingBundle == null ? null : containingBundle.getVersionedName().toString(),
++ MutableList.<OsgiBundleWithUrl>copyOf(libraryBundles),
++ displayName, description, catalogIconUrl, catalogDeprecated, catalogDisabled);
+ RegisteredTypes.notePlanEquivalentToThis(type, plan);
+ return type;
+ }
+
+ private void addLegacyScannedAnnotations(ManagedBundle containingBundle, List<CatalogItemDtoAbstract<?, ?>> resultLegacyFormat, Map<RegisteredType, RegisteredType> resultNewFormat, int depth, Map<Object, Object> catalogMetadata, Collection<CatalogBundle> librariesAddedHereBundles, Collection<CatalogBundle> libraryBundles) {
+ log.warn("Deprecated use of scanJavaAnnotations" + (containingBundle != null ? " in bundle " + containingBundle.getVersionedName() : ""));
+
+ if (isNoBundleOrSimpleWrappingBundle(mgmt, containingBundle)) {
+ Collection<CatalogItemDtoAbstract<?, ?>> scanResult;
+ // BOMs wrapped in JARs, or without JARs, have special treatment
+ if (isLibrariesMoreThanJustContainingBundle(librariesAddedHereBundles, containingBundle)) {
+ // legacy mode, since 0.12.0, scan libraries referenced in a legacy non-bundle BOM
+ log.warn("Deprecated use of scanJavaAnnotations to scan other libraries ("+ librariesAddedHereBundles +"); libraries should declare they scan themselves");
+ scanResult = scanAnnotationsLegacyInListOfLibraries(mgmt, librariesAddedHereBundles, catalogMetadata, containingBundle);
+ } else if (!isLibrariesMoreThanJustContainingBundle(libraryBundles, containingBundle)) {
+ // for default catalog, no libraries declared, we want to scan local classpath
+ // bundle should be named "brooklyn-default-catalog"
+ if (containingBundle !=null && !containingBundle.getSymbolicName().contains("brooklyn-default-catalog")) {
+ // a user uplaoded a BOM trying to tell us to do a local java scan; previously supported but becoming unsupported
+ log.warn("Deprecated use of scanJavaAnnotations in non-Java BOM outwith the default catalog setup");
+ } else if (depth >0) {
+ // since 0.12.0, require this to be right next to where libraries are defined, or at root
+ log.warn("Deprecated use of scanJavaAnnotations declared in item; should be declared at the top level of the BOM");
+ }
+ scanResult = scanAnnotationsFromLocalNonBundleClasspath(mgmt, catalogMetadata, containingBundle);
+ } else {
+ throw new IllegalStateException("Cannot scan for Java catalog items when libraries declared on an ancestor; scanJavaAnnotations should be specified alongside brooklyn.libraries (or ideally those libraries should specify to scan)");
+ }
+ if (scanResult!=null && !scanResult.isEmpty()) {
+ if (resultLegacyFormat !=null) {
+ resultLegacyFormat.addAll( scanResult );
+ } else {
+ // not returning a result; we need to add here, as type
+ for (CatalogItem item: scanResult) {
+ RegisteredType replacedInstance = mgmt.getTypeRegistry().get(item.getSymbolicName(), item.getVersion());
+ mgmt.getCatalog().addItem(item);
+ RegisteredType newInstance = mgmt.getTypeRegistry().get(item.getSymbolicName(), item.getVersion());
+ updateResultNewFormat(resultNewFormat, replacedInstance, newInstance);
+ }
+ }
+ }
+ } else {
+ throw new IllegalArgumentException("Scanning for Java annotations is not supported in BOMs in bundles; "
+ + "entries should be listed explicitly in the catalog.bom");
+ }
+ }
+
private void updateResultNewFormat(Map<RegisteredType, RegisteredType> resultNewFormat, RegisteredType replacedInstance,
RegisteredType newInstance) {
if (resultNewFormat!=null) {
@@@ -1283,26 -1298,179 +1321,179 @@@
this.itemsDefinedSoFar = itemsDefinedSoFar;
}
- public PlanInterpreterGuessingType reconstruct() {
- if (catalogItemType==CatalogItemType.TEMPLATE) {
- // template *must* be explicitly defined, and if so, none of the other calls apply
- attemptType(CatalogItemType.TEMPLATE, null, true);
-
- } else {
- // try all types; attemptTpe will ignore non-matches if catalogItemType is already specified
- attemptType(CatalogItemType.ENTITY, "services", true);
- attemptType(CatalogItemType.POLICY, POLICIES_KEY, false);
- attemptType(CatalogItemType.ENRICHER, ENRICHERS_KEY, false);
- attemptType(CatalogItemType.LOCATION, LOCATIONS_KEY, false);
+ public PlanInterpreterInferringType resolve() {
+ try {
+ currentlyResolvingType.set(Strings.isBlank(itemId) ? itemYaml : itemId);
+
+ Maybe<Object> transformedResult = attemptPlanTranformer();
+ boolean onlyNewStyleTransformer = format != null || catalogItemType == CatalogItemType.BEAN;
+ if (transformedResult.isPresent() || onlyNewStyleTransformer) {
+ planYaml = itemYaml;
+ resolved = transformedResult.isPresent() || catalogItemType == CatalogItemType.TEMPLATE;
+ if (!resolved) {
+ errors.add(Maybe.Absent.getException(transformedResult));
+ }
+ if (resolved && catalogItemType != CatalogItemType.BEAN && catalogItemType != CatalogItemType.TEMPLATE &&
+ (format==null || !"brooklyn-camp".equals(format))) {
+ // for spec types, _also_ run the legacy resolution because it is better at spotting some types of errors (recursive ones);
+ // note this code will also run if there was an error when format was specified (other than bean-with-type) and we couldn't determine it was a bean
+ resolved = false;
+ attemptLegacySpecTransformersForVariousSpecTypes();
+ }
+ return this;
+ }
+
+ // for now, these are the lowest-priority errors (reported after the others)
+ transformerErrors.add(((Maybe.Absent) transformedResult).getException());
+
+ if (catalogItemType == CatalogItemType.TEMPLATE) {
+ // template *must* be explicitly specified as item type, and if so, the "various" methods below don't apply,
+ // and we always mark it as resolved. (probably not necessary to do any of the transformers!)
- attemptLegacySpecTransformersForType(null, CatalogItemType.TEMPLATE);
++ attemptLegacySpecTransformersForType(CatalogItemType.TEMPLATE);
+ if (!resolved) {
+ // anything goes, for an explicit template, because we can't easily recurse into the types
+ planYaml = itemYaml;
+ resolved = true;
+ }
+ return this;
+ }
+
+ // couldn't resolve it with the plan transformers; retry with legacy "spec" transformers.
+ // TODO this legacy path is still needed where an entity is declared with nice abbreviated 'type: xxx' syntax, not the full-camp 'services: [ { type: xxx } ]' syntax.
+ // would be nice to move that logic internally to CAMP and see if we can remove this altogether.
+ // (see org.apache.brooklyn.camp.brooklyn.spi.creation.CampResolver.createEntitySpecFromServicesBlock )
+ if (format == null) {
+ attemptLegacySpecTransformersForVariousSpecTypes();
+ }
+
+ return this;
+ } finally {
+ currentlyResolvingType.remove();
}
-
- if (!resolved && catalogItemType==CatalogItemType.TEMPLATE) {
- // anything goes, for an explicit template, because we can't easily recurse into the types
- planYaml = itemYaml;
- resolved = true;
+ }
+
+ private void attemptLegacySpecTransformersForVariousSpecTypes() {
- attemptLegacySpecTransformersForType(null, CatalogItemType.ENTITY);
++ attemptLegacySpecTransformersForType(CatalogItemType.ENTITY);
+
+ List<Exception> oldEntityErrors = MutableList.copyOf(entityErrors);
+ // try with services key
- attemptLegacySpecTransformersForType("services", CatalogItemType.ENTITY);
++ attemptLegacySpecTransformersForType(CatalogItemType.ENTITY, "services", false);
+ entityErrors.removeAll(oldEntityErrors);
+ entityErrors.addAll(oldEntityErrors);
+ // errors when wrapped in services block are better currently
+ // as we parse using CAMP and need that
+ // so prefer those for now (may change with YOML)
+
- attemptLegacySpecTransformersForType(POLICIES_KEY, CatalogItemType.POLICY, true);
- attemptLegacySpecTransformersForType(ENRICHERS_KEY, CatalogItemType.ENRICHER, true);
- attemptLegacySpecTransformersForType(LOCATIONS_KEY, CatalogItemType.LOCATION, true);
++ attemptLegacySpecTransformersForType(CatalogItemType.POLICY, POLICIES_KEY, true);
++ attemptLegacySpecTransformersForType(CatalogItemType.ENRICHER, ENRICHERS_KEY, true);
++ attemptLegacySpecTransformersForType(CatalogItemType.LOCATION, LOCATIONS_KEY, true);
+ }
+
+ boolean suspicionOfABean = false;
+
+ private Maybe<Object> attemptPlanTranformer() {
+ MutableSet<Throwable> exceptions = MutableSet.<Throwable>of();
+ try {
+ suspicionOfABean = false;
+
+ Set<? extends OsgiBundleWithUrl> searchBundles = MutableSet.copyOf(libraryBundles)
+ .putIfNotNull(containingBundle);
+ BrooklynClassLoadingContext loader = new OsgiBrooklynClassLoadingContext(mgmt, null, searchBundles);
+ if (catalogItemType == null) {
+ // attempt to detect whether it is a bean
+ Object type = item.get("type");
+ if (type!=null && type instanceof String) {
+ TypeToken<?> clz = new BrooklynTypeNameResolver((String)type, loader, false, true)
+ .findTypeToken((String) type).orNull();
+ if (clz!=null) {
+ if (!BrooklynObject.class.isAssignableFrom(TypeTokens.getRawRawType(clz))) {
+ suspicionOfABean = true;
+ }
+ }
+ }
+ }
+
+ if (constraint==null) {
+ constraint = RegisteredTypeLoadingContexts.loaderAlreadyEncountered(loader, null, itemId);
+ } else {
+ constraint = RegisteredTypeLoadingContexts.withLoader(constraint, loader);
+ constraint = RegisteredTypeLoadingContexts.withEncounteredItem(constraint, itemId);
+ }
+
+ Object t = null;
+ boolean triedBean = false;
+ // try as bean first if signs are auspicious
+ if (catalogItemType == CatalogItemType.BEAN || suspicionOfABean) {
+ try {
+ triedBean = true;
+ t = mgmt.getTypeRegistry().createBeanFromPlan(format, itemYaml, constraint, null);
+ catalogItemType = CatalogItemType.BEAN;
+ } catch (Exception e) {
+ Exceptions.propagateIfFatal(e);
+ exceptions.add(e);
+ }
+ }
+
+ // then try as spec unless known to be a bean
+ if (catalogItemType != CatalogItemType.BEAN && t==null) {
+ try {
+ t = mgmt.getTypeRegistry().createSpecFromPlan(format, itemYaml, constraint,
+ BrooklynObjectType.of(catalogItemType).getSpecType());
+ if (catalogItemType == null) {
+ catalogItemType = CatalogItemType.ofSpecClass(BrooklynObjectType.of(t.getClass()).getSpecType());
+ }
+ } catch (Exception e) {
+ Exceptions.propagateIfFatal(e);
+ exceptions.add(e);
+ }
+ }
+
+ // lastly try as bean if we haven't already and it is not known to be a spec (ie if item type is unknown)
+ if (catalogItemType==null && t==null && !triedBean) {
+ try {
+ triedBean = true;
+ t = mgmt.getTypeRegistry().createBeanFromPlan(format, itemYaml, constraint, null);
+ if (format==null && isDubiousBeanType(t)) {
+ // doesn't look like a bean
+ // probably we want to set this - but was omitted previously; added 2022-05
+ t = null;
+ } else {
+ catalogItemType = CatalogItemType.BEAN;
+ }
+ } catch (Exception e) {
+ Exceptions.propagateIfFatal(e);
+ if (!exceptions.isEmpty()
+ && Exceptions.getFirstThrowableOfType(exceptions.iterator().next(), UnsupportedTypePlanException.class)!=null
+ && Exceptions.getFirstThrowableOfType(e, UnsupportedTypePlanException.class)==null) {
+ // put it first if spec is unsupported but bean is supported
+ MutableSet<Throwable> e2 = MutableSet.<Throwable>of(e).putAll(exceptions);
+ exceptions.clear();
+ exceptions.addAll(e2);
+ } else {
+ exceptions.add(e);
+ }
+ }
+ }
+
+ if (t!=null) {
+ resolved = true;
+ return Maybe.of(t);
+ }
+
+
+ } catch (Exception e) {
+ Exceptions.propagateIfFatal(e);
+ exceptions.add(e);
}
-
- return this;
+
+ if (exceptions.isEmpty()) exceptions.add(new IllegalStateException("Type registry creation returned null"));
+
+ return Maybe.absent(
+ () ->
+ Exceptions.create("Unable to transform definition of "+
+ (itemId!=null ? itemId : "plan:\n"+itemYaml+"\n"),
+ exceptions)
+ );
}
public boolean isResolved() { return resolved; }
@@@ -1321,29 -1496,31 +1519,28 @@@
public String getPlanYaml() {
return planYaml;
}
--
- private boolean attemptType(CatalogItemType candidateCiType, String optionalKeyForModifyingYaml, boolean tryWithoutOptionalKey) {
- if (resolved) {
- return false;
- }
- if (catalogItemType!=null && catalogItemType!=candidateCiType) {
- return false;
- }
-
- private boolean attemptLegacySpecTransformersForType(String key, CatalogItemType candidateCiType) {
- return attemptLegacySpecTransformersForType(key, candidateCiType, false);
- }
+
- private boolean attemptLegacySpecTransformersForType(String key, CatalogItemType candidateCiType, boolean requireKeyAdded) {
++ private boolean attemptLegacySpecTransformersForType(CatalogItemType candidateCiType) {
++ return attemptLegacySpecTransformersForType(candidateCiType, null, false);
++ }
++ private boolean attemptLegacySpecTransformersForType(CatalogItemType candidateCiType, String optionalKeyForModifyingYaml, boolean tryWithoutOptionalKey) {
+ if (resolved) return false;
+ if (catalogItemType!=null && catalogItemType!=candidateCiType) return false;
+
- final String candidateYaml;
- boolean keyAdded = false;
- if (key==null) {
- candidateYaml = itemYaml;
- } else if (item.containsKey(key)) {
- candidateYaml = itemYaml;
- } else {
- candidateYaml = key + ":\n" + makeAsIndentedList(itemYaml);
- keyAdded = true;
+ String candidateYamlWithKeyAdded = null;;
+ if (optionalKeyForModifyingYaml!=null) {
+ /* often when added to a catalog we simply say "type: xxx" for the definition;
+ * the services: parent key at root (or brooklyn.policies, etc) needed by the camp parser
+ * are implicit, and added here */
+ if (item.containsKey(optionalKeyForModifyingYaml)) {
+ optionalKeyForModifyingYaml = null;
+ tryWithoutOptionalKey = true;
+ } else {
+ candidateYamlWithKeyAdded = optionalKeyForModifyingYaml + ":\n" + makeAsIndentedList(itemYaml);
+ }
}
-
+
String type = (String) item.get("type");
- if (type!=null && requireKeyAdded && !keyAdded) {
- return false;
- }
-
if (itemsDefinedSoFar!=null) {
// first look in collected items, if a key is given
@@@ -1361,87 -1538,16 +1558,86 @@@
}
}
+ if (tryWithoutOptionalKey || candidateYamlWithKeyAdded==null) {
+ if (attemptTypeInstantiation("normal", candidateCiType, itemYaml, false, null, type)) {
+ return true;
+ }
+
+ // also try legacy
+ if (attemptTypeInstantiation("legacy", candidateCiType, itemYaml, true, null, type)) {
+ return true;
+ }
-
+ }
+
+ if (candidateYamlWithKeyAdded!=null) {
+ // try with services key (or other key)
+
+ // this gives better errors, so put these first
+ // (it is only possible that this block and the above block both run if it is ENTITY type;
+ // so safe to assume entityErrors here)
+ MutableList<Exception> oldEntityErrors = MutableList.copyOf(entityErrors);
+ entityErrors.clear();
+
+ if (attemptTypeInstantiation("normal with key '"+optionalKeyForModifyingYaml+"'", candidateCiType, candidateYamlWithKeyAdded, false, optionalKeyForModifyingYaml, type)) {
+ return true;
+ }
+
+ // try legacy
+ if (attemptTypeInstantiation("legacy with key '"+optionalKeyForModifyingYaml+"'", candidateCiType, candidateYamlWithKeyAdded, true, optionalKeyForModifyingYaml, type)) {
+ return true;
+ }
+
+ entityErrors.addAll(oldEntityErrors);
+ }
+
+ return false;
+ }
+
+ private boolean attemptTypeInstantiation(String context, CatalogItemType candidateCiType, String candidateYaml, boolean tryAsLegacy, String optionalKeyForModifyingYaml, String typeIfOptionalKeySupplied) {
+
// then try parsing plan - this will use loader
+ // first use transformer approach
try {
- @SuppressWarnings("rawtypes")
- CatalogItem itemToAttempt = createItemBuilder(candidateCiType, getIdWithRandomDefault(), DEFAULT_VERSION)
- .plan(candidateYaml)
- .libraries(libraryBundles)
- .build();
- @SuppressWarnings("unchecked")
- AbstractBrooklynObjectSpec<?, ?> spec = internalCreateSpecLegacy(mgmt, itemToAttempt, MutableSet.<String>of(), true);
- if (spec!=null) {
+ Object itemToAttemptO = null;
+ Object itemSpecInstantiated = null;
+
+ if (tryAsLegacy) {
+ if (ATTEMPT_INSTANTIATION_WITH_LEGACY_PLAN_TO_SPEC_CONVERTERS) {
+ // deprecated old style
+ @SuppressWarnings("rawtypes")
+ CatalogItem itemToAttempt = createItemBuilder(candidateCiType, getIdWithRandomDefault(), DEFAULT_VERSION)
+ .plan(candidateYaml)
+ .libraries(libraryBundles)
+ .build();
+ itemToAttemptO = itemToAttempt;
+
+ itemSpecInstantiated = internalCreateSpecLegacy(mgmt, itemToAttempt, MutableSet.<String>of(), true);
+
+ if (ATTEMPT_INSTANTIATION_WITH_TYPE_PLAN_TRANSFORMERS) {
+ log.warn("Instantiation of this blueprint was only possible with legacy plan-to-spec converter, will likely not be supported in future versions:\n"+candidateYaml);
+ }
+ }
+
+ } else {
+ if (ATTEMPT_INSTANTIATION_WITH_TYPE_PLAN_TRANSFORMERS) {
+ // preferred, new style
+ BasicRegisteredType itemToAttempt = createYetUnsavedRegisteredTypeInstance(
+ // RegisteredTypeKind
+ RegisteredTypeKind.SPEC, getIdWithRandomDefault(), DEFAULT_VERSION,
+ /* containing bundle */ null, libraryBundles,
+ // displayName, description, catalogIconUrl, deprecated, yaml
+ null, null, null, false, candidateYaml,
+ // tags, aliases, catalogDisabled, superTypes, format
+ null, null, false, MutableList.of(BrooklynObjectType.of(candidateCiType).getInterfaceType()), null
+ );
+ itemToAttemptO = itemToAttempt;
+
+ itemSpecInstantiated = mgmt.getTypeRegistry().create(itemToAttempt, null, null);
+ }
+
+ }
+
+ if (itemSpecInstantiated!=null) {
catalogItemType = candidateCiType;
planYaml = candidateYaml;
resolved = true;
@@@ -1851,11 -1911,15 +2037,17 @@@
// but do not allow this to run if we are expanding a nested definition as that may fail to find recursive loops
// (the legacy routines this uses don't support that type of context)
String yaml = RegisteredTypes.getImplementationDataStringForSpec(typeToValidate);
+ log.trace("Validating {}: \n{}", typeToValidate, yaml);
+
- PlanInterpreterGuessingType guesser = new PlanInterpreterGuessingType(typeToValidate.getSymbolicName(), Iterables.getOnlyElement( Yamls.parseAll(yaml) ),
- yaml, null, CatalogItemDtoAbstract.parseLibraries( typeToValidate.getLibraries() ), null);
- guesser.reconstruct();
+ CatalogBundle bundle = typeToValidate.getContainingBundle() != null ? CatalogItemDtoAbstract.parseLibraries(Arrays.asList(typeToValidate.getContainingBundle())).iterator().next() : null;
+ CatalogItemType itemType = boType!=null ? CatalogItemType.ofTargetClass(boType.getInterfaceType()) : null;
+ if (itemType==null && typeToValidate.getKind() == RegisteredTypeKind.BEAN) {
+ itemType = CatalogItemType.BEAN;
+ }
+ String format = typeToValidate.getPlan().getPlanFormat();
+ PlanInterpreterInferringType guesser = new PlanInterpreterInferringType(typeToValidate.getSymbolicName(), Iterables.getOnlyElement( Yamls.parseAll(yaml) ),
+ yaml, itemType, format, bundle, CatalogItemDtoAbstract.parseLibraries( typeToValidate.getLibraries() ), constraint, null);
+ guesser.resolve();
guesserErrors.addAll(guesser.getErrors());
if (guesser.isResolved()) {
@@@ -1889,9 -1952,8 +2081,9 @@@
}
if (changedSomething) {
+ log.debug("Re-resolving "+resultT+" following detection of change");
// try again with new plan or supertype info
- return resolve(resultT, constraint);
+ return validateResolve(resultT, constraint);
} else if (Objects.equal(boType, BrooklynObjectType.of(ciType))) {
if (specError==null) {
@@@ -1915,8 -1977,7 +2107,8 @@@
if (resultO!=null && resultT!=null) {
if (resultO instanceof BrooklynObject) {
// if it was a bean that points at a BO then switch it to a spec and try to re-validate
+ log.debug("Re-resolving "+resultT+" following detection of bean where spec was expected");
- return resolve(RegisteredTypes.copyResolved(RegisteredTypeKind.SPEC, typeToValidate), constraint);
+ return validateResolve(RegisteredTypes.copyResolved(RegisteredTypeKind.SPEC, typeToValidate), constraint);
}
Class<?> resultS;
if (resultT.getKind() == RegisteredTypeKind.SPEC) {