make unique tag more configurable and smarter default for workflow sensors and policies
diff --git a/core/src/main/java/org/apache/brooklyn/core/workflow/WorkflowPolicy.java b/core/src/main/java/org/apache/brooklyn/core/workflow/WorkflowPolicy.java
index 3eadfd5..88324b3 100644
--- a/core/src/main/java/org/apache/brooklyn/core/workflow/WorkflowPolicy.java
+++ b/core/src/main/java/org/apache/brooklyn/core/workflow/WorkflowPolicy.java
@@ -59,6 +59,10 @@
public static final ConfigKey<Map<String,Object>> INPUT = WorkflowCommonConfig.INPUT;
public static final ConfigKey<List<Object>> STEPS = WorkflowCommonConfig.STEPS;
+ public static final ConfigKey<String> UNIQUE_TAG_CAMEL = WorkflowSensor.UNIQUE_TAG_CAMEL;
+ public static final ConfigKey<String> UNIQUE_TAG_UNDERSCORE = WorkflowSensor.UNIQUE_TAG_UNDERSCORE;
+ public static final ConfigKey<String> UNIQUE_TAG_DASH = WorkflowSensor.UNIQUE_TAG_DASH;
+
protected transient Poller<Object> poller;
// ? - do we need to have an option not to run when added?
@@ -110,18 +114,26 @@
@Override
public void init() {
- initUniqueTag();
super.init();
}
public String initUniqueTag() {
- if (uniqueTag==null) uniqueTag = "workflow-policy-hash-"+ Objects.hash(getDisplayName(), config().getBag());
+ return getUniqueTag();
+ }
+
+ @Override
+ public String getUniqueTag() {
+ if (uniqueTag==null) {
+ uniqueTag = WorkflowSensor.getUniqueTag(config().getBag(), null);
+ if (uniqueTag==null) {
+ uniqueTag = "workflow-policy-hash-" + Objects.hash(getDisplayName(), config().getBag());
+ }
+ }
return super.getUniqueTag();
}
@Override
public void setEntity(EntityLocal entity) {
- initUniqueTag();
super.setEntity(entity);
poller = new Poller<>(getEntity(), this, false);
diff --git a/core/src/main/java/org/apache/brooklyn/core/workflow/WorkflowSensor.java b/core/src/main/java/org/apache/brooklyn/core/workflow/WorkflowSensor.java
index 7c67301..d86b623 100644
--- a/core/src/main/java/org/apache/brooklyn/core/workflow/WorkflowSensor.java
+++ b/core/src/main/java/org/apache/brooklyn/core/workflow/WorkflowSensor.java
@@ -64,6 +64,18 @@
public static final ConfigKey<EntityValueToSet> SENSOR = ConfigKeys.newConfigKey(EntityValueToSet.class, "sensor");
+ public static final ConfigKey<String> UNIQUE_TAG_CAMEL = ConfigKeys.newStringConfigKey("uniqueTag");
+ public static final ConfigKey<String> UNIQUE_TAG_UNDERSCORE = ConfigKeys.newStringConfigKey("unique_tag");
+ public static final ConfigKey<String> UNIQUE_TAG_DASH = ConfigKeys.newStringConfigKey("unique-tag");
+
+ static String getUniqueTag(ConfigBag bag, String defaultValue) {
+ String result = bag.get(UNIQUE_TAG_CAMEL);
+ if (result==null) result = bag.get(UNIQUE_TAG_UNDERSCORE);
+ if (result==null) result = bag.get(UNIQUE_TAG_DASH);
+ if (result==null) result = defaultValue;
+ return result;
+ }
+
// do we need to have an option not to run when initialization is done?
public WorkflowSensor() {}
@@ -98,6 +110,7 @@
.name("Sensor Workflow Feed: "+sensor.getName())
.entity(entity)
.onlyIfServiceUp(Maybe.ofDisallowingNull(EntityInitializers.resolve(params, ONLY_IF_SERVICE_UP)).or(false))
+ .uniqueTag(getUniqueTag(params, "workflow_sensor_feed:"+sensor.getName()))
.poll(pollConfig);
wc.init(feedBuilder.build(true));
diff --git a/core/src/main/java/org/apache/brooklyn/core/workflow/steps/variables/TransformVariableWorkflowStep.java b/core/src/main/java/org/apache/brooklyn/core/workflow/steps/variables/TransformVariableWorkflowStep.java
index d59f797..14c8ff7 100644
--- a/core/src/main/java/org/apache/brooklyn/core/workflow/steps/variables/TransformVariableWorkflowStep.java
+++ b/core/src/main/java/org/apache/brooklyn/core/workflow/steps/variables/TransformVariableWorkflowStep.java
@@ -220,6 +220,7 @@
TRANSFORMATIONS.put("average", () -> v -> average(v, "average"));
TRANSFORMATIONS.put("size", () -> v -> size(v, "size"));
TRANSFORMATIONS.put("get", () -> v -> {
+ // TODO should this be able to get indexes etc
if (v instanceof Supplier) return ((Supplier)v).get();
return v;
});