expose ability for workflow policy to be invoked
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 2baefe0..1d2c9db 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
@@ -29,6 +29,8 @@
 import org.apache.brooklyn.core.feed.Poller;
 import org.apache.brooklyn.core.policy.AbstractPolicy;
 import org.apache.brooklyn.core.sensor.AbstractAddTriggerableSensor;
+import org.apache.brooklyn.core.workflow.WorkflowExecutionContext.WorkflowContextType;
+import org.apache.brooklyn.core.workflow.WorkflowSensor.WorkflowPollCallable;
 import org.apache.brooklyn.util.collections.MutableSet;
 import org.apache.brooklyn.util.core.predicates.DslPredicates;
 import org.apache.brooklyn.util.exceptions.Exceptions;
@@ -62,6 +64,7 @@
     public static final ConfigKey<String> UNIQUE_TAG_DASH = WorkflowSensor.UNIQUE_TAG_DASH;
 
     protected transient Poller<Object> poller;
+    protected transient WorkflowPollCallable pollCallable;
 
     // ? - do we need to have an option not to run when added?
 
@@ -143,8 +146,8 @@
                 .condition(new ConditionSupplierFromAdjunct());
 
         Set<PollConfig> pollConfigs = MutableSet.of(pc);
-        poller.schedulePoll(this, pollConfigs, new WorkflowSensor.WorkflowPollCallable(WorkflowExecutionContext.WorkflowContextType.POLICY,
-                getDisplayName() + " (policy)", config().getBag(), this), new PolicyNoOpPollHandler());
+        pollCallable = new WorkflowPollCallable(WorkflowContextType.POLICY, getDisplayName() + " (policy)", config().getBag(), this);
+        poller.schedulePoll(this, pollConfigs, pollCallable, new PolicyNoOpPollHandler());
 
         if (!isSuspended()) resume();
     }
@@ -163,5 +166,13 @@
         if (needsStarting) poller.start();
     }
 
+    // we could add an API for this, so arbitrary policies can be re-run from the UI
+    public Object runOnceNow() {
+        try {
+            return pollCallable.call();
+        } catch (Exception e) {
+            throw Exceptions.propagate(e);
+        }
+    }
 }