Hacker News new | past | comments | ask | show | jobs | submit login

Giant disclaimer: I work at StackStorm...but I also have an extensive Ops background.

This is really the next step in runbook automation. It gives users a way to express procedures and operational patterns in code (the workflow definitions are in yaml). With any sort of automated remediation there is always the concern of "painting over the mold" but at the same time you don't want to get stuck doing a large number of manual steps when you could be focusing your energy on tracking down the root cause of the issue and resolving that. The more important aspect to me personally is the easy of version controlling these ops patterns. Store the workflow definitions in source control and it is easy to diff the changes in your procedure.




It seems YAML is the new S-expressions for people trying to pretend they didn't actually invent a programming language.

This is, I guess, less annoying than executable XML.


YAML is definitely the hotness right now but it works. No need to invent a full blown language for something like this. Way easier than trying to write json.


Or you can use Ruby or Python and Perl and have a scripting language that looks and acts as a scripting language is generally expected to look and act. (And with Ruby in particular it's very easy to provide a flexible and terse DSL that provides significant benefits on its own.)

This "invent your own worse programming language" fad is disappointing.


>Or you can use Ruby or Python and Perl

Then you get turing completeness, and turing completeness harms readability and makes your language a magnet for technical debt.

This is why most of us these days use an intentionally dumb language to template HTML (another non-turing complete language). The alternative was a god-awful fucking mess (remember PHP without a framework/templating language?).

This is what Tim Berners Lee alluded to with this: https://en.wikipedia.org/wiki/Rule_of_least_power

Here's my example (yes, I'm one of those people):

http://hitchtest.com/

I don't think you could write a cleaner, more readable parameterized test case in python.

>This "invent your own worse programming language" fad is disappointing.

There's a lot of disasters out there for sure (in the testing world as well =), but I'm pretty happy to see custom YAML-based declarative languages catching on.

I think Ansible states are, likewise, way easier to deal with than the equivalent in python would end up being.


You're making the same exact mistake that the guy who decided ant should use xml as a programming language did.

As soon as you need loops, conditionals, subroutines -- which are all very common when writing tests -- you're making up your own language with horrible warts.


>You're making the same exact mistake that the guy who decided ant should use xml as a programming language did.

Ant was a badly done turing complete langauge. I did not create a turing complete language I created an very, very dumb declarative language with no functions or control structures - only data.

>As soon as you need loops, conditionals, subroutines -- which are all very common when writing tests

I already have loops and conditionals via jinja2 (a templating language I did not create) on the high level and in python on the step level.

I am not and will never implementing any control structures in YAML (a la ant). The YAML will always remain dumb to help maintain a strict separation of concerns and test readability.

>you're making up your own language with horrible warts.

Warts such as what?


https://github.com/saltstack-formulas/mysql-formula/blob/mas...

Down this path lies madness. Now the user has to deal with the difference between YAML values and Jinja values. Can't really reference YAML data set in other files, or other places in this file.

It's a tangled mess. Please don't do this to your users.

Maybe use tcl? Guile? Some real language that lends itself to making a clean api/dsl for what you're trying to do.


I agree that YAML block style as on lines 22, 23, 24 should be eliminated (I will probably prevent my framework from parsing this). If you use an unescaped { or } it should signify that you are using Jinja2.

Similarly, I'm no fan of the {% sets %} at the top - it's a code smell.

Apart from those things, though, what you linked to seems easy to read and understand to me.

I'm absolutely positive that Tcl or Guile (or python) would create the potential for bigger messes than what you just linked to under similar circumstances. Simply being turing complete is enough for that.


Such as using a text templating language to define control flow. Literally everything you describe is why you shouldn't do that. =(


The templating language isn't and can't be used to define test control flow.

It's only used to generate test cases - e.g. 7 login scenario tests on 7 different browsers. Or, as on my website, two virtually identical tests running on two different versions of python.

It isn't necessary to write test cases using jinja2 either. YAML on its own is enough.


For plain config, I mostly use JSONY now.

For executable declarationish things, I like Tcl (usually embedded in perl so I can use Moo(se) for OO rather than the inferior crap in other languages).

Hashicorp's HCL is an interesting middle ground.


I can respect Tcl. I'm not super familiar with it aside from hacking on eggdrop, but it's in the same ballpark. For configuration, I just source a shell script and grab env vars wherever I can. It's the most portable (between applications, not necessarily between platforms) option available to me and plays nicely with stuff like jails. At a glance, I don't quite understand the value prop of JSONY over YAML, which (as you see used in something like Rails) allows for a good bit of flexibility with references to more tersely communicate intent.

I think HCL is one of the worse decisions made by a somewhat influential software company in quite some time. It's harder to use than YAML (which is funny because the stated reason for its existence is "YAML is harder", and it makes me really, really curious what sort of users they're polling) while being less expressive and they're very careful to not really care about anybody's interop "because you can just use JSON instead", except that, as trying to work with Terraform amply proved, no, you can't use JSON, because that path isn't tested because nobody cares and unit tests are hard. =(

HCL is a regular problem in my life. I needed to vent a little.


>for configuration, I just source a shell script and grab env vars wherever I can.

That can cause you headaches when you want to store lists or associative data in your config.


> This "invent your own worse programming language" fad is disappointing.

Fad? This has been a common anti-pattern basically since the dawn of computing. :)


Fine, fine. Boondoggle?


> Way easier than trying to write json.

Which is why ingy and I invented http://p3rl.org/JSONY for config files.


not sure how yaml is easier than json also not sure how yaml is easier than python or what not


StackStorm developer here!

Just to clarify, YAML is one way to write the workflow spec. Just like how YAML is way to write docker compose file. We picked YAML over JSON because it is less verbose and allows one to add comments which is pretty useful if someone is looking at a remediation workflow early in the AM. We do use YAQL expressions for some variable manipulation but that is not a YAML spec. A workflow is a collection of actions and actions can be written in almost any language (as a script) or python (first class actions). So you can think YAML workflow as a declarative spec rather than a programming language. Maybe that helps?


Some nice readable example YAML definitions would be good to show on the README.




Join us for AI Startup School this June 16-17 in San Francisco!

Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: