diff --git a/.gitmodules b/.gitmodules index 09cc52e..f92b733 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,4 +1,4 @@ [submodule "alien4cloud"] path = alien4cloud url = ../alien4cloud.git - commit = adc7c36 + commit = 90413c99 diff --git a/a4c-brooklyn-plugin/pom.xml b/a4c-brooklyn-plugin/pom.xml index 1726dc6..2fc179c 100644 --- a/a4c-brooklyn-plugin/pom.xml +++ b/a4c-brooklyn-plugin/pom.xml @@ -4,7 +4,7 @@ io.cloudsoft.brooklyn.tosca brooklyn-tosca-parent - 1.0.0-SNAPSHOT + 1.1.0-SNAPSHOT ../pom.xml diff --git a/brooklyn-tosca-common/pom.xml b/brooklyn-tosca-common/pom.xml index 41ade3e..ec8f3f2 100644 --- a/brooklyn-tosca-common/pom.xml +++ b/brooklyn-tosca-common/pom.xml @@ -4,7 +4,7 @@ io.cloudsoft.brooklyn.tosca brooklyn-tosca-parent - 1.0.0-SNAPSHOT + 1.1.0-SNAPSHOT ../pom.xml diff --git a/brooklyn-tosca-dist/pom.xml b/brooklyn-tosca-dist/pom.xml index 2ae1fc3..c1f5dde 100644 --- a/brooklyn-tosca-dist/pom.xml +++ b/brooklyn-tosca-dist/pom.xml @@ -6,7 +6,7 @@ io.cloudsoft.brooklyn.tosca brooklyn-tosca-parent - 1.0.0-SNAPSHOT + 1.1.0-SNAPSHOT ../pom.xml diff --git a/brooklyn-tosca-transformer/pom.xml b/brooklyn-tosca-transformer/pom.xml index ef9242f..ce033a2 100644 --- a/brooklyn-tosca-transformer/pom.xml +++ b/brooklyn-tosca-transformer/pom.xml @@ -6,7 +6,7 @@ io.cloudsoft.brooklyn.tosca brooklyn-tosca-parent - 1.0.0-SNAPSHOT + 1.1.0-SNAPSHOT ../pom.xml diff --git a/brooklyn-tosca-transformer/src/main/java/io/cloudsoft/tosca/a4c/brooklyn/AbstractToscaPolicyDecorator.java b/brooklyn-tosca-transformer/src/main/java/io/cloudsoft/tosca/a4c/brooklyn/AbstractToscaPolicyDecorator.java index 4e9dde9..ec8bfa3 100644 --- a/brooklyn-tosca-transformer/src/main/java/io/cloudsoft/tosca/a4c/brooklyn/AbstractToscaPolicyDecorator.java +++ b/brooklyn-tosca-transformer/src/main/java/io/cloudsoft/tosca/a4c/brooklyn/AbstractToscaPolicyDecorator.java @@ -21,6 +21,10 @@ public AbstractToscaPolicyDecorator(ManagementContext mgmt) { this.mgmt = mgmt; } + public Map getToscaObjectPropertiesExtended(Map toscaObjectData) { + return getToscaObjectPropertiesExtendedExcluding(toscaObjectData, true, false, POLICY_FLAG_NAME, POLICY_FLAG_TYPE); + } + /** * Given a map eg of a tosca type, * return everything under the TOSCA "properties" key, merged on top of things at the root @@ -32,14 +36,25 @@ public AbstractToscaPolicyDecorator(ManagementContext mgmt) { * @param toscaObjectData */ @SuppressWarnings("unchecked") - public Map getToscaObjectPropertiesExtended(Map toscaObjectData){ + public Map getToscaObjectPropertiesExtendedExcluding(Map toscaObjectData, + boolean promoteToscaProperties, boolean promoteBrooklynConfig, String... keysToOmit){ Map data = MutableMap.copyOf(toscaObjectData); - data.remove(POLICY_FLAG_NAME); - data.remove(POLICY_FLAG_TYPE); + for (String keyToOmit: keysToOmit) { + data.remove(keyToOmit); + } + + if (promoteToscaProperties) { + Map props = (Map) data.remove(POLICY_FLAG_PROPERTIES); + if (props!=null) { + data.putAll(props); + } + } - Map props = (Map) data.remove(POLICY_FLAG_PROPERTIES); - if (props!=null) { - data.putAll(props); + if (promoteBrooklynConfig) { + Object brooklynConfig = data.remove(POLICY_FLAG_BROOKLYN_CONFIG); + if (brooklynConfig!=null) { + data.putAll((Map)brooklynConfig); + } } // evaluate DSL diff --git a/brooklyn-tosca-transformer/src/main/java/io/cloudsoft/tosca/a4c/brooklyn/Alien4CloudFacade.java b/brooklyn-tosca-transformer/src/main/java/io/cloudsoft/tosca/a4c/brooklyn/Alien4CloudFacade.java index 81a33be..3194f09 100644 --- a/brooklyn-tosca-transformer/src/main/java/io/cloudsoft/tosca/a4c/brooklyn/Alien4CloudFacade.java +++ b/brooklyn-tosca-transformer/src/main/java/io/cloudsoft/tosca/a4c/brooklyn/Alien4CloudFacade.java @@ -54,6 +54,7 @@ import alien4cloud.model.components.IndexedInheritableToscaElement; import alien4cloud.model.components.IndexedRelationshipType; import alien4cloud.model.components.Interface; +import alien4cloud.model.components.ListPropertyValue; import alien4cloud.model.components.Operation; import alien4cloud.model.components.ScalarPropertyValue; import alien4cloud.model.deployment.DeploymentTopology; @@ -240,6 +241,9 @@ private Optional getToscaScalarValueUnlessItsAFunction(IValue v) { if (v instanceof ComplexPropertyValue) { return Optional.fromNullable(((ComplexPropertyValue) v).getValue()); } + if (v instanceof ListPropertyValue) { + return Optional.fromNullable(((ListPropertyValue) v).getValue()); + } if (!(v instanceof FunctionPropertyValue)) { LOG.warn("Ignoring unsupported property value " + v); } diff --git a/brooklyn-tosca-transformer/src/main/java/io/cloudsoft/tosca/a4c/brooklyn/BrooklynAdjunctToscaPolicyDecorator.java b/brooklyn-tosca-transformer/src/main/java/io/cloudsoft/tosca/a4c/brooklyn/BrooklynAdjunctToscaPolicyDecorator.java index bd1dbdf..d6a01e4 100644 --- a/brooklyn-tosca-transformer/src/main/java/io/cloudsoft/tosca/a4c/brooklyn/BrooklynAdjunctToscaPolicyDecorator.java +++ b/brooklyn-tosca-transformer/src/main/java/io/cloudsoft/tosca/a4c/brooklyn/BrooklynAdjunctToscaPolicyDecorator.java @@ -56,7 +56,7 @@ public void decorate(Map policyData, String toscaPolicyName, Optional protected ConfigBag getBrooklynObjectDefinition(String type, Map toscaObjectData) { List policies = ImmutableList.of(ImmutableMap.of( "type", type, - BrooklynCampReservedKeys.BROOKLYN_CONFIG, getToscaObjectPropertiesExtended(toscaObjectData) + BrooklynCampReservedKeys.BROOKLYN_CONFIG, getToscaObjectPropertiesExtendedExcluding(toscaObjectData, true, true, POLICY_FLAG_NAME, POLICY_FLAG_TYPE) ) ); Map policyDefinition = ImmutableMap.of(brooklynYamlKey, policies); diff --git a/brooklyn-tosca-transformer/src/main/java/io/cloudsoft/tosca/a4c/brooklyn/LocationToscaPolicyDecorator.java b/brooklyn-tosca-transformer/src/main/java/io/cloudsoft/tosca/a4c/brooklyn/LocationToscaPolicyDecorator.java index 2d91837..d0f1018 100644 --- a/brooklyn-tosca-transformer/src/main/java/io/cloudsoft/tosca/a4c/brooklyn/LocationToscaPolicyDecorator.java +++ b/brooklyn-tosca-transformer/src/main/java/io/cloudsoft/tosca/a4c/brooklyn/LocationToscaPolicyDecorator.java @@ -37,7 +37,7 @@ public void decorate(Map policyData, String policyName, Optional> getLocationSpecs(Map policyData) { Object data = policyData.containsKey(GroupPolicyParser.VALUE) ? policyData.get(GroupPolicyParser.VALUE) - : getToscaObjectPropertiesExtended(policyData); + : getToscaObjectPropertiesExtendedExcluding(policyData, true, true, POLICY_FLAG_NAME, POLICY_FLAG_TYPE); return resolveLocationSpecs(ImmutableMap.of("location", data)); } diff --git a/brooklyn-tosca-transformer/src/main/java/io/cloudsoft/tosca/a4c/brooklyn/ToscaPolicyDecorator.java b/brooklyn-tosca-transformer/src/main/java/io/cloudsoft/tosca/a4c/brooklyn/ToscaPolicyDecorator.java index 8ac968d..3308b08 100644 --- a/brooklyn-tosca-transformer/src/main/java/io/cloudsoft/tosca/a4c/brooklyn/ToscaPolicyDecorator.java +++ b/brooklyn-tosca-transformer/src/main/java/io/cloudsoft/tosca/a4c/brooklyn/ToscaPolicyDecorator.java @@ -10,6 +10,7 @@ public interface ToscaPolicyDecorator { String POLICY_FLAG_TYPE = "type"; String POLICY_FLAG_NAME = "name"; String POLICY_FLAG_PROPERTIES = "properties"; + String POLICY_FLAG_BROOKLYN_CONFIG = "brooklyn.config"; void decorate(Map policyData, String policyName, Optional type, Set groupMembers); } diff --git a/brooklyn-tosca-transformer/src/main/java/io/cloudsoft/tosca/a4c/brooklyn/spec/AbstractSpecModifier.java b/brooklyn-tosca-transformer/src/main/java/io/cloudsoft/tosca/a4c/brooklyn/spec/AbstractSpecModifier.java index 5e8bb01..dc8b681 100644 --- a/brooklyn-tosca-transformer/src/main/java/io/cloudsoft/tosca/a4c/brooklyn/spec/AbstractSpecModifier.java +++ b/brooklyn-tosca-transformer/src/main/java/io/cloudsoft/tosca/a4c/brooklyn/spec/AbstractSpecModifier.java @@ -1,25 +1,14 @@ package io.cloudsoft.tosca.a4c.brooklyn.spec; -import java.util.Map; - import javax.annotation.Nullable; import org.apache.brooklyn.api.entity.EntitySpec; import org.apache.brooklyn.api.mgmt.ManagementContext; -import org.apache.brooklyn.camp.brooklyn.BrooklynCampPlatform; -import org.apache.brooklyn.camp.brooklyn.spi.creation.BrooklynComponentTemplateResolver; -import org.apache.brooklyn.core.catalog.internal.CatalogUtils; -import org.apache.brooklyn.util.collections.MutableSet; -import org.apache.brooklyn.util.core.flags.TypeCoercions; -import org.apache.brooklyn.util.core.task.DeferredSupplier; -import org.apache.brooklyn.util.yaml.Yamls; -import org.elasticsearch.common.collect.Iterables; +import org.apache.brooklyn.camp.brooklyn.spi.dsl.DslUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.google.common.base.Optional; -import com.google.common.collect.ImmutableList; -import com.google.common.collect.ImmutableMap; import com.google.common.reflect.TypeToken; import io.cloudsoft.tosca.a4c.brooklyn.ToscaApplication; @@ -46,61 +35,8 @@ protected ToscaFacade getToscaFacade() { protected Optional resolveBrooklynDslValue(Object unresolvedValue, @SuppressWarnings("rawtypes") Optional desiredType, @Nullable EntitySpec spec) { return resolveBrooklynDslValue(unresolvedValue, desiredType, mgmt, spec); } - - protected static Object transformSpecialFlags(ManagementContext mgmt, EntitySpec spec, Object v) { - return new BrooklynComponentTemplateResolver.SpecialFlagsTransformer( - CatalogUtils.newClassLoadingContext(mgmt, spec.getCatalogItemId(), ImmutableList.of()), - MutableSet.of()).apply(v); - } public static Optional resolveBrooklynDslValue(Object originalValue, @SuppressWarnings("rawtypes") Optional desiredType, @Nullable ManagementContext mgmt, @Nullable EntitySpec spec) { - if (originalValue == null) { - return Optional.absent(); - } - Object value = originalValue; - if (mgmt!=null) { - if (value instanceof String && ((String)value).matches("\\$brooklyn:[A-Za-z_]+:\\s(?s).*")) { - // input is a map as a string, parse it as yaml first - value = Iterables.getOnlyElement( Yamls.parseAll((String)value) ); - } - - // The 'dsl' key is arbitrary, but the interpreter requires a map - ImmutableMap inputToPdpParse = ImmutableMap.of("dsl", value); - Map resolvedConfigMap = BrooklynCampPlatform.findPlatform(mgmt) - .pdp() - .applyInterpreters(inputToPdpParse); - value = resolvedConfigMap.get("dsl"); - // TODO if it fails log a warning -- eg entitySpec with root.war that doesn't exist - - if (spec!=null) { - value = transformSpecialFlags(mgmt, spec, value); - } - } - - if (value instanceof DeferredSupplier) { - // Don't cast - let Brooklyn evaluate it later (the value is a resolved DSL expression). - return Optional.of(value); - } - - if (desiredType.isPresent()) { - // Don't look at generics when casting. - // - // Let Brooklyn do that later when it uses/evaluates the config. We just need to create - // the EntitySpec object. - // - // This is important for DSL expressions (e.g. in a Map such as - // TomcatServer's javaSysProps, a DSL expression could not be coerced to a string. - // - // By stripping the generics, it restores the brooklyn behaviour prior to snapshot at - // 31st Aug 2018 (commit 3e57b14b220bd7a994a9143d83bc123879086aff) when map/collection - // generics were not respected during coercion. - - Class desiredRawType = desiredType.get().getRawType(); - - return Optional.of(TypeCoercions.coerce(value, desiredRawType)); - - } else { - return Optional.of(value); - } + return DslUtils.resolveBrooklynDslValue(originalValue, desiredType.orNull(), mgmt, spec); } } diff --git a/brooklyn-tosca-transformer/src/main/java/io/cloudsoft/tosca/a4c/brooklyn/util/EntitySpecs.java b/brooklyn-tosca-transformer/src/main/java/io/cloudsoft/tosca/a4c/brooklyn/util/EntitySpecs.java index 8dad19f..a1de3ba 100644 --- a/brooklyn-tosca-transformer/src/main/java/io/cloudsoft/tosca/a4c/brooklyn/util/EntitySpecs.java +++ b/brooklyn-tosca-transformer/src/main/java/io/cloudsoft/tosca/a4c/brooklyn/util/EntitySpecs.java @@ -16,6 +16,7 @@ public class EntitySpecs { public static EntitySpec findChildEntitySpecByPlanId(EntitySpec app, String planId){ + // TODO find all!! Optional> result = Iterables.tryFind(app.getChildren(), configSatisfies(BrooklynCampConstants.PLAN_ID, planId)); diff --git a/brooklyn-tosca-transformer/src/test/java/io/cloudsoft/tosca/a4c/brooklyn/plan/ToscaPlanExtraIntegrationTest.java b/brooklyn-tosca-transformer/src/test/java/io/cloudsoft/tosca/a4c/brooklyn/plan/ToscaPlanExtraIntegrationTest.java new file mode 100644 index 0000000..1497fec --- /dev/null +++ b/brooklyn-tosca-transformer/src/test/java/io/cloudsoft/tosca/a4c/brooklyn/plan/ToscaPlanExtraIntegrationTest.java @@ -0,0 +1,59 @@ +package io.cloudsoft.tosca.a4c.brooklyn.plan; + +import static org.testng.Assert.assertEquals; +import static org.testng.Assert.assertNotNull; + +import org.apache.brooklyn.api.entity.Application; +import org.apache.brooklyn.api.entity.Entity; +import org.apache.brooklyn.api.entity.EntitySpec; +import org.apache.brooklyn.api.sensor.Feed; +import org.apache.brooklyn.core.entity.Dumper; +import org.apache.brooklyn.core.entity.EntityInternal; +import org.apache.brooklyn.core.mgmt.EntityManagementUtils; +import org.apache.brooklyn.core.mgmt.EntityManagementUtils.CreationResult; +import org.apache.brooklyn.feed.http.HttpFeed; +import org.apache.brooklyn.test.Asserts; +import org.testng.annotations.Test; + +import io.cloudsoft.tosca.a4c.Alien4CloudIntegrationTest; + +public class ToscaPlanExtraIntegrationTest extends Alien4CloudIntegrationTest { + + @Test + public void testSensorParamsUsingProperties() throws Exception { + doNamedSensorTest("properties"); + } + + @Test + public void testSensorParamsFlatNotAllowed() throws Exception { + try { + doNamedSensorTest("flat"); + Asserts.shouldHaveFailedPreviously("'name' should not be recognised unless nested"); + } catch (Exception e) { + // expected + } + } + + @Test + public void testSensorParamsUsingBrooklynConfig() throws Exception { + doNamedSensorTest("brooklyn-config"); + } + + protected void doNamedSensorTest(String suffix) throws Exception { + EntitySpec appSpec = create("classpath://templates/extra/named-sensors-"+suffix+".yaml"); + assertNotNull(appSpec); + assertEquals(appSpec.getChildren().size(), 1); + + CreationResult app = EntityManagementUtils.createStarting(mgmt, appSpec); + app.blockUntilComplete(); + + Entity server = app.get().getChildren().iterator().next(); + Dumper.dumpInfo(server); + + Feed f = ((EntityInternal)server).feeds().getFeeds().iterator().next(); + Asserts.assertInstanceOf(f, HttpFeed.class); + // very hard to get at the HttpConfig of the poll job buried, so we don't make further assertions + // but if "name" isn't being passed correctly, creation above will have failed, so this is a reasonable test + } + +} diff --git a/brooklyn-tosca-transformer/src/test/java/io/cloudsoft/tosca/a4c/brooklyn/plan/ToscaTypePlanTransformerIntegrationTest.java b/brooklyn-tosca-transformer/src/test/java/io/cloudsoft/tosca/a4c/brooklyn/plan/ToscaTypePlanTransformerIntegrationTest.java index f8d721f..786df77 100644 --- a/brooklyn-tosca-transformer/src/test/java/io/cloudsoft/tosca/a4c/brooklyn/plan/ToscaTypePlanTransformerIntegrationTest.java +++ b/brooklyn-tosca-transformer/src/test/java/io/cloudsoft/tosca/a4c/brooklyn/plan/ToscaTypePlanTransformerIntegrationTest.java @@ -8,6 +8,7 @@ import java.io.FileOutputStream; import java.io.IOException; import java.nio.file.Path; +import java.util.Arrays; import java.util.List; import java.util.Map; @@ -626,6 +627,35 @@ public void testOverwriteInterfaceOnCustom1Topology() throws Exception { assertFlagValueContains(custom1, VanillaSoftwareProcess.CUSTOMIZE_COMMAND.getName(), "echo configure arg1"); // in configure.sh } + @Test + public void testPropertiesIncludingList() throws Exception { + EntitySpec appSpec = create("classpath://templates/properties-tosca-list.yaml"); + // Check the basic structure + assertNotNull(appSpec, "spec"); + assertEquals(appSpec.getType(), BasicApplication.class); + + assertEquals(appSpec.getChildren().size(), 1, "Expected exactly one child of root application"); + EntitySpec compute = Iterators.getOnlyElement(appSpec.getChildren().iterator()); + assertEquals(compute.getType(), SameServerEntity.class); + + assertEquals(compute.getChildren().size(), 1, "Expected exactly one grandchild of root application"); + EntitySpec custom1 = Iterators.getOnlyElement(compute.getChildren().iterator()); + assertEquals(custom1.getType(), VanillaSoftwareProcess.class); + + // Check that the inputs have been set as exports on the scripts + List expected = Arrays.asList("arg1=\"foo\"", "arg2=\"bar\"", "arg3=\"boo\""); + expected.forEach(s -> assertFlagValueContains(custom1, VanillaSoftwareProcess.CUSTOMIZE_COMMAND.getName(), s)); + + // and deploy and ensure we get the attribute + + Application appInst = this.mgmt.getEntityManager().createEntity(appSpec); + Entity custom1I = Iterables.getOnlyElement( Iterables.getOnlyElement( appInst.getChildren() ).getChildren() ); + Dumper.dumpInfo(custom1I); + String customCmd = custom1I.config().get(VanillaSoftwareProcess.CUSTOMIZE_COMMAND); + expected.forEach(s -> Asserts.assertStringContains(customCmd, s)); + Asserts.assertStringDoesNotContain(customCmd, "attributeWhenReady", "bip", "baz"); + } + // quite restrictive what is supported in A4C: // attribute can only be set on node type, not in node template. // it can only define a static _default_ or a subset of functions, operation output or concat. diff --git a/brooklyn-tosca-transformer/src/test/resources/templates/extra/named-sensors-brooklyn-config.yaml b/brooklyn-tosca-transformer/src/test/resources/templates/extra/named-sensors-brooklyn-config.yaml new file mode 100644 index 0000000..bb7e3e6 --- /dev/null +++ b/brooklyn-tosca-transformer/src/test/resources/templates/extra/named-sensors-brooklyn-config.yaml @@ -0,0 +1,66 @@ +tosca_definitions_version: tosca_simple_yaml_1_0_0_wd03 + +description: Test TOSCA + +template_name: test +template_version: 0.1.0-SNAPSHOT + +imports: + - tosca-normative-types:1.0.0.wd06-SNAPSHOT + +node_types: + + x-node: + derived_from: tosca.nodes.Compute + attributes: + x.url: + type: string + + x-instance: + derived_from: tosca.nodes.WebServer + + + + + +topology_template: + + node_templates: + x-host: + type: x-node + + x: + type: x-instance + artifacts: {} + requirements: + - host: x-host + + groups: + add_brooklyn_location: + members: [x-host] + policies: + - brooklyn.location: localhost + + + latency: + members: [ x-host ] + policies: + - latency_detector: + type: org.apache.brooklyn.policy.enricher.HttpLatencyDetector + name: http.latecy + latencyDetector.period: 1s + latencyDetector.requireServiceUp: true + latencyDetector.rollup: 600s + latencyDetector.url: http://localhost:8069 + + http_sensor_mgt: + members: [ x-host ] + policies: + - http_sensor: + type: org.apache.brooklyn.core.sensor.http.HttpRequestSensor + brooklyn.config: + name: http.healthy2 + period: 10s + suppressDuplicates: true + jsonPath: "$" + uri: http://localhost:8081/v1/server/up/extended/2 diff --git a/brooklyn-tosca-transformer/src/test/resources/templates/extra/named-sensors-flat.yaml b/brooklyn-tosca-transformer/src/test/resources/templates/extra/named-sensors-flat.yaml new file mode 100644 index 0000000..0738188 --- /dev/null +++ b/brooklyn-tosca-transformer/src/test/resources/templates/extra/named-sensors-flat.yaml @@ -0,0 +1,65 @@ +tosca_definitions_version: tosca_simple_yaml_1_0_0_wd03 + +description: Test TOSCA + +template_name: test +template_version: 0.1.0-SNAPSHOT + +imports: + - tosca-normative-types:1.0.0.wd06-SNAPSHOT + +node_types: + + x-node: + derived_from: tosca.nodes.Compute + attributes: + x.url: + type: string + + x-instance: + derived_from: tosca.nodes.WebServer + + + + + +topology_template: + + node_templates: + x-host: + type: x-node + + x: + type: x-instance + artifacts: {} + requirements: + - host: x-host + + groups: + add_brooklyn_location: + members: [x-host] + policies: + - brooklyn.location: localhost + + + latency: + members: [ x-host ] + policies: + - latency_detector: + type: org.apache.brooklyn.policy.enricher.HttpLatencyDetector + name: http.latecy + latencyDetector.period: 1s + latencyDetector.requireServiceUp: true + latencyDetector.rollup: 600s + latencyDetector.url: http://localhost:8069 + + http_sensor_mgt: + members: [ x-host ] + policies: + - http_sensor: + type: org.apache.brooklyn.core.sensor.http.HttpRequestSensor + name: http.healthy + period: 5s + suppressDuplicates: true + jsonPath: "$" + uri: http://localhost:8081/v1/server/up/extended diff --git a/brooklyn-tosca-transformer/src/test/resources/templates/extra/named-sensors-properties.yaml b/brooklyn-tosca-transformer/src/test/resources/templates/extra/named-sensors-properties.yaml new file mode 100644 index 0000000..743bd86 --- /dev/null +++ b/brooklyn-tosca-transformer/src/test/resources/templates/extra/named-sensors-properties.yaml @@ -0,0 +1,66 @@ +tosca_definitions_version: tosca_simple_yaml_1_0_0_wd03 + +description: Test TOSCA + +template_name: test +template_version: 0.1.0-SNAPSHOT + +imports: + - tosca-normative-types:1.0.0.wd06-SNAPSHOT + +node_types: + + x-node: + derived_from: tosca.nodes.Compute + attributes: + x.url: + type: string + + x-instance: + derived_from: tosca.nodes.WebServer + + + + + +topology_template: + + node_templates: + x-host: + type: x-node + + x: + type: x-instance + artifacts: {} + requirements: + - host: x-host + + groups: + add_brooklyn_location: + members: [x-host] + policies: + - brooklyn.location: localhost + + + latency: + members: [ x-host ] + policies: + - latency_detector: + type: org.apache.brooklyn.policy.enricher.HttpLatencyDetector + name: http.latecy + latencyDetector.period: 1s + latencyDetector.requireServiceUp: true + latencyDetector.rollup: 600s + latencyDetector.url: http://localhost:8069 + + http_sensor_mgt: + members: [ x-host ] + policies: + - http_sensor: + type: org.apache.brooklyn.core.sensor.http.HttpRequestSensor + properties: + name: http.healthy + period: 5s + suppressDuplicates: true + jsonPath: "$" + uri: http://localhost:8081/v1/server/up/extended/2 diff --git a/brooklyn-tosca-transformer/src/test/resources/templates/properties-tosca-list.yaml b/brooklyn-tosca-transformer/src/test/resources/templates/properties-tosca-list.yaml new file mode 100644 index 0000000..aa4e118 --- /dev/null +++ b/brooklyn-tosca-transformer/src/test/resources/templates/properties-tosca-list.yaml @@ -0,0 +1,49 @@ +tosca_definitions_version: tosca_simple_yaml_1_0_0_wd03 + +template_name: properties-tosca-list +template_version: 0.1.0-SNAPSHOT + +imports: + - tosca-normative-types:1.0.0.wd06-SNAPSHOT + +node_types: + foo: + derived_from: tosca.nodes.Database + properties: + p1: + type: string + p2: + type: list + entry_schema: + type: string + p3: + type: map + entry_schema: + type: string + interfaces: + Standard: + create: classpath://templates/custom1/scripts/create.sh + configure: + inputs: + arg1: { get_property: [ SELF, p1 ] } + arg2: { get_property: [ SELF, p2.0 ] } + arg3: { get_property: [ SELF, p3.baz ] } + implementation: classpath://templates/custom1/scripts/configure.sh + start: classpath://templates/custom1/scripts/start.sh + stop: classpath://templates/custom1/scripts/stop.sh + +topology_template: + node_templates: + + Host: + type: tosca.nodes.Compute + + Foo1: + type: foo + properties: + p1: foo + p2: [ bar, bip ] + p3: + baz: boo + requirements: + - host: Host diff --git a/karaf/deps-brooklyn/pom.xml b/karaf/deps-brooklyn/pom.xml index d11fedc..b4a7c3c 100644 --- a/karaf/deps-brooklyn/pom.xml +++ b/karaf/deps-brooklyn/pom.xml @@ -4,7 +4,7 @@ io.cloudsoft.brooklyn.tosca brooklyn-tosca-karaf - 1.0.0-SNAPSHOT + 1.1.0-SNAPSHOT ../pom.xml diff --git a/karaf/features/pom.xml b/karaf/features/pom.xml index a2396cb..396432f 100755 --- a/karaf/features/pom.xml +++ b/karaf/features/pom.xml @@ -25,7 +25,7 @@ io.cloudsoft.brooklyn.tosca brooklyn-tosca-karaf - 1.0.0-SNAPSHOT + 1.1.0-SNAPSHOT ../pom.xml diff --git a/karaf/init/pom.xml b/karaf/init/pom.xml index c3d121a..b802e04 100644 --- a/karaf/init/pom.xml +++ b/karaf/init/pom.xml @@ -4,7 +4,7 @@ io.cloudsoft.brooklyn.tosca brooklyn-tosca-karaf - 1.0.0-SNAPSHOT + 1.1.0-SNAPSHOT ../pom.xml diff --git a/karaf/patches/pom.xml b/karaf/patches/pom.xml index e1a9945..12d2246 100644 --- a/karaf/patches/pom.xml +++ b/karaf/patches/pom.xml @@ -4,7 +4,7 @@ io.cloudsoft.brooklyn.tosca brooklyn-tosca-karaf - 1.0.0-SNAPSHOT + 1.1.0-SNAPSHOT ../pom.xml diff --git a/karaf/pom.xml b/karaf/pom.xml index efbd8b5..c287560 100644 --- a/karaf/pom.xml +++ b/karaf/pom.xml @@ -23,7 +23,7 @@ io.cloudsoft.brooklyn.tosca brooklyn-tosca-parent - 1.0.0-SNAPSHOT + 1.1.0-SNAPSHOT ../pom.xml diff --git a/pom.xml b/pom.xml index 89c1b96..ab433c5 100644 --- a/pom.xml +++ b/pom.xml @@ -12,7 +12,7 @@ io.cloudsoft.brooklyn.tosca brooklyn-tosca-parent pom - 1.0.0-SNAPSHOT + 1.1.0-SNAPSHOT Brooklyn TOSCA parent project @@ -62,6 +62,16 @@ false + + cloudsoft-snapshots + https://artifactory.cloudsoftcorp.com/artifactory/libs-snapshot-local/ + + false + + + true + + + 1.1.0-SNAPSHOT ../pom.xml