I'm attempting to create a dataflow template, and within the template have
a variable
    ValueProvider<DateTime> now
such that now is the time the dataflow is started, note the time that the
template was created.

My first attempt was
    ValueProvider<DateTime> now = StaticValueProvider.of(
DateTime.now(DateTimeZone.UTC));

My second attempt was

  public interface MyOptions extends PipelineOptions,
DataflowPipelineOptions {
    @Description("Now")
    @Default.InstanceFactory(GetNow.class)
    ValueProvider<DateTime> getNow();
    void setNow(ValueProvider<DateTime> value);
  }

  static class GetNow implements DefaultValueFactory<DateTime> {
    @Override
    public DateTime create(PipelineOptions options) {
      return DateTime.now(DateTimeZone.UTC);
    }
  }

  ValueProvider<DateTime> now = options.getNow()

My final attempt was:

   ValueProvider<SerializableFunction<Void, DateTime>> nowFn =
        StaticValueProvider.of(x -> DateTime.now(DateTimeZone.UTC));

    ValueProvider<DateTime> now = NestedValueProvider.of(nowFn, x ->
x.apply(null));



In every case, it was clear that "now" was being set to template-creation
time rather than actual runtime.

I note that the documentation talks about a RuntimeValueProvider, but there
is no user-visible constructor for this.

Reply via email to