Hell All,

Was I too hasty to merge the PR - 
https://github.com/apache/brooklyn-server/pull/1358? 
<https://github.com/apache/brooklyn-server/pull/1358?>
We agreed to split the some of the work with Alex, and I did not see why it 
could not be merged to continue with what I’m working on.

Regards,
Mykola

> On 9 Sep 2022, at 20:17, Geoff Macartney <geom...@apache.org> wrote:
> 
> 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
>>>>>> 
>>>> 
>>> 

Reply via email to