Hi Alex, Thanks for the link, will have a look at the PR.
As for the new shorthand proposal, +1 from me. I think it will be a majority of cases when things *are* simple - setting sensors, etc. Your example above goes from eight lines of markup for the steps to two, I think that's a compelling argument in itself in favour of the proposal. Cheers Geoff On Thu, 8 Sept 2022 at 09:35, Alex Heneveld <a...@cloudsoft.io> wrote: > > Hi team, > > An initial PR with a few types and the ability to define an effector is > available [1]. > > This is enough for the next steps to be parallelized, e.g. new steps > added. The proposal has been updated with a work plan / list of tasks > [2]. Any volunteers to help with some of the upcoming tasks let me know. > > Finally I've been thinking about the "shorthand syntax" and how to bring us > closer to Peter's proposal of a DSL. The original proposal allowed instead > of a map e.g. > > step_sleep: > type: sleep > duration: 5s > > or > > step_update_service_up: > type: set-sensor > sensor: > name: service.isUp > type: boolean > value: true > > being able to use a shorthand _map_ with a single key being the type, and > value interpreted by that type, so in the OLD SHORTHAND PROPOSAL the above > could be written: > > step_sleep: > sleep: 5s > > step_update_service_up: > set-sensor: service.isUp = true > > Having played with syntaxes a bit I wonder if we should instead say the > shorthand DSL kicks in when the step _body_ is a string (instead of a > single-key map), and the first word of the string being the type, and the > remainder interpreted by the type, and we allow it to be a bit more > ambitious. > > Concretely this NEW SHORTHAND PROPOSAL would look something like: > > step_sleep: sleep 5s > step_update_service_up: set-sensor service.isUp = true > # also supporting a type, ie `set-sensor [TYPE] NAME = VALUE`, eg > step_update_service_up: set-sensor boolean service.isUp = true > > You would still need the full map syntax whenever defining flow logic -- eg > condition, next, retry, or timeout -- or any property not supported by the > shorthand syntax. But for the (majority?) simple cases the expression > would be very concise. In most cases I think it would feel like a DSL but > has the virtue of a very clear translation to the actual workflow model and > the underlying (YAML) model needed for resumption and UI. > > As a final example, the example used at the start of the proposal > (simplified a little -- removing on-error retry and env map as those > wouldn't be supported by shorthand): > > brooklyn.initializers: > - type: workflow-effector > name: run-spark-on-gcp > steps: > 1: > type: container > image: my/google-cloud > command: gcloud dataproc jobs submit spark > --BUCKET=gs://$brooklyn:config("bucket") > 2: > type: set-sensor > sensor: spark-output > value: ${1.stdout} > > Could be written in this shorthand as follows: > > steps: > 1: container my/google-cloud command "gcloud dataproc jobs submit spark > --BUCKET=gs://${entity.config.bucket}" > 2: set-sensor spark-output ${1.stdout} > > Thoughts? > > Best > Alex > > > [1] https://github.com/apache/brooklyn-server/pull/1358 > [2] > https://docs.google.com/document/d/1u02Bi6sS8Fkf1s7UzRRMnvLhA477bqcyxGa0nJesqkI/edit#heading=h.gbadaqa2yql6 > > > On Wed, 7 Sept 2022 at 09:58, Alex Heneveld <a...@cloudsoft.io> wrote: > > > Hi Peter, > > > > Yes - thanks for the extra details. I did take your suggestion to be a > > procedural DSL not YAML, per the illustration at [1] (second code block). > > Probably where I was confusing was in saying that unlike DSLs which just > > run (and where the execution can be delegated to eg java/groovy/ruby), here > > we need to understand and display, store and resume the workflow progress. > > So I think it needs to be compiled to some representation that is well > > described and that new Apache Brooklyn code can reason about, both in the > > UI (JS) and backend (Java). Parsing a DSL is much harder than using YAML > > for this "reasonable" representation (as in we can reason _about_ it :) ), > > because we already have good backend processing, persistence, > > serialization; and frontend processing and visualization support for > > YAML-based models. So I think we almost definitely want a well-described > > declarative YAML model of the workflow. > > > > We might *also* want a Workflow DSL because I agree with you a DSL would > > be nicer for a user to write (if writing by hand; although if composing > > visually a drag-and-drop to YAML is probably easier). However it should > > probably get "compiled" into a Workflow YAML. So I'm suggesting we do the > > workflow YAML at this stage, and a DSL that compiles into that YAML can be > > designed later. (Designing a good DSL and parser and reason-about-able > > representation is a big task, so being able to separate it feels good too!) > > > > Best > > Alex > > > > [1] > > https://docs.google.com/document/d/1u02Bi6sS8Fkf1s7UzRRMnvLhA477bqcyxGa0nJesqkI/edit#heading=h.75wm48pjvx0h > > > > > > On Fri, 2 Sept 2022 at 20:17, Geoff Macartney <geoff.macart...@gmail.com> > > wrote: > > > >> Hi Peter, > >> > >> Thanks for such a detailed writeup of how you see this working. I fear > >> I've too little experience with this sort of thing to be able to say > >> anything very useful about it. My thought on the matter would be, > >> let's get started with the yaml based approach and see how it goes. I > >> think that experience would then give us a much better feel for what a > >> really nice and usable DSL for workflows would look like (probably to > >> address all the pain points of the yaml approach! :-) The outline > >> above will then be a good starting point, I'm sure. > >> > >> Cheers > >> Geoff > >> > >> On Thu, 1 Sept 2022 at 21:26, Peter Abramowitsch > >> <pabramowit...@gmail.com> wrote: > >> > > >> > Hi All > >> > I just wanted to clarify something in my comment the other day about > >> DSLs > >> > since I see that the acronym was also used in Alex's original document. > >> > Unless I misunderstood, Alex was proposing to create a DSL for Brooklyn > >> > using yaml as syntax and writing a code layer to translate between that > >> > syntax and underlying APIs which are presumably all in Java. > >> > > >> > What I was suggesting was a DSL written directly in Java (I guess) > >> whose > >> > syntax would be that language, but whose grammar would be keywords that > >> > were also Java functions. Some of these functions would be pre-defined > >> in > >> > the DSL, while others could be defined by the user and could use other > >> > functions of the DSL. The result would be turned into a JAR file (or > >> > equivalent in another platform) But during the compile phase, it > >> would be > >> > checked for errors, and it could be debugged line by line either > >> invoking > >> > live functionality or using a library of mock versions of the Brooklyn > >> API. > >> > > >> > In this 'native' DSL one could provide different types of workflow > >> > constructs as functions (In the BaseClass), taking function names as > >> method > >> > pointers, or using Lambdas. It would be a lot easier in Ruby or Python > >> > > >> > // linear > >> > brooklynRun(NamedTaskMethod, NamedTaskMethod) > >> > > >> > // chained > >> > TaskMethodA()TaskMethodB(). > >> > > >> > // asynchronous > >> > brooklynJoin(NamedTaskMethod, NamedTaskMethod,...) > >> > > >> > // conditional > >> > brooklynRunIf(NamedTaskMethod, NamedConditionMethod,...) > >> > > >> > // iterative > >> > brooklynRunWhile(NamedTaskMethod, NamedConditionMethod,...) > >> > brooklynRunUntil(NamedTaskMethod, NamedConditionMethod,...) > >> > > >> > // there could even be a utility to implement legacy syntax (this of > >> course > >> > would require the extra code layer I was trying to avoid) > >> > runYaml(Path) > >> > > >> > A basic class structure might be > >> > > >> > // where BrooklynRecipeBase implements the utility functions including, > >> > among others Join, Run, If, While, Until mentioned above > >> > // and the BrooklynWorkflowInterface would dictate the functional > >> > requirements for the mandatory aspects of the Recipe. > >> > class MyRecipe extends BrooklynRecipeBase implements, > >> > BrooklynWorkflowInterface > >> > { > >> > Initialize() > >> > createContext() - spin up resources > >> > workflow() - the main launch sequence using aspects of the DSL > >> > monitoring() - an asynchronous workflow used to manage sensor output or > >> for > >> > whatever needs to be done while the "orchestra" is plating > >> > shutdownHook() - called whenever shutdown is happening > >> > } > >> > > >> > For those who don't like the smell of Java, the source file could just > >> be > >> > the contents, which would then be injected into the class framing code > >> > before compilation. > >> > > >> > These are just ideas. I'm not familiar enough with Brooklyn in its > >> current > >> > implementation to be able to create realistic pseudocode. > >> > > >> > Peter > >> > > >> > On Thu, Sep 1, 2022 at 9:24 AM Geoff Macartney < > >> geoff.macart...@gmail.com> > >> > wrote: > >> > > >> > > Hi Alex, > >> > > > >> > > That's great, I'll be excited to hear all about it. 7th September > >> > > suits me fine; I would probably prefer 4.00 p.m. over 11.00. > >> > > > >> > > Cheers > >> > > Geoff > >> > > > >> > > On Thu, 1 Sept 2022 at 12:41, Alex Heneveld <a...@cloudsoft.io> > >> wrote: > >> > > > > >> > > > Thanks for the excellent feedback Geoff and yes there are some very > >> cool > >> > > and exciting things added recently -- containers, conditions, and > >> terraform > >> > > and kubernetes support, all of which make writing complex blueprints > >> much > >> > > easier. > >> > > > > >> > > > I'd love to host a session to showcase these. > >> > > > > >> > > > How does Wed 7 Sept sound? I could do 11am UK or 4pm UK -- > >> depending > >> > > what time suits for people who are interested. Please RSVP and > >> indicate > >> > > your time preference! > >> > > > > >> > > > Best > >> > > > Alex > >> > > > > >> > > > > >> > > > On Wed, 31 Aug 2022 at 22:17, Geoff Macartney < > >> geoff.macart...@gmail.com> > >> > > wrote: > >> > > >> > >> > > >> Hi Alex, > >> > > >> > >> > > >> Another thought occurred to me when reading that workflow > >> proposal. You > >> > > wrote > >> > > >> > >> > > >> "and with the recent support for container-based tasks and > >> declarative > >> > > >> conditions, we have taken big steps towards enabling YAML > >> authorship" > >> > > >> > >> > > >> Unfortunately over the past while I haven't been able to keep up as > >> > > >> closely as I would like with developments in Brooklyn. I'm just > >> > > >> wondering if it might be possible to get together some time, on > >> Google > >> > > >> Meet or Zoom or whatnot, if you or a colleague could spare half an > >> > > >> hour to demo some of these recent developments? But don't worry > >> about > >> > > >> it if you're too busy at present. > >> > > >> > >> > > >> Adding dev@ to this in CC for the sake of Openness. Others might > >> also > >> > > >> be interested! > >> > > >> > >> > > >> Cheers > >> > > >> Geoff > >> > > > >> > >