The Mgmt configuration management language
purpleidea.com
purpleidea.com
FRP has a more general purpose way to do that kind of thing; a behavior can accumulate occurrances of an event, using a function provided by the user that takes the previous accumulation and adds a new value to it. This makes it easy to implement things like a rolling average, or to access historical values without keeping unnecessary ones around.
For example, here's a rolling buffer of size n in haskell's reactive-banana:
rollingbuffer n event = accumB [] (fmap update event)
where
update v l
| length l < n || null l = v : l
| otherwise = v : init l
Of course, this needs a language that functions can be implemented in, not a special-purpose DSL.And it's mostly the same problem for programming. With programming we're using language to express a complex set of interactions, but we still often fail to catch important distinctions, and most of our code does not learn from its past experience. Language can express complex ideas, but only if you have a brain that can re-interpret the language continuously and act differently in each case. That is the hope of language-based configuration management, but rarely do you see a CM tool that is fed regular data solely so it can change how it makes decisions.
I think modeling languages like TOSCA are a much better design for expressing how to manage a complex system. By modeling the components and interactions, it's much easier to observe and test for various conditions in simulation. You can get incredibly detailed in modeling, and as such it's much easier to manage all the complex interactions, rather than hoping you are good enough at language to be able to express your ideas in a way that will be interpreted the right way by an otherwise rigid computer program.
Not to say configuration management and traditional servers are going away within the next years, but it will probably hinder the popularity and growth of new tools like these. Sadly.
That's super cool! I definetly will keep an eye on it.
I would have preferred a more standard language, but I guess it's difficult given the problem space. Actually looks easier to understand than force feeding yaml into ansible.
[1] https://en.m.wikipedia.org/wiki/Functional_reactive_programm...
Edit: Puppet has what it calls "data types", but they are not checked statically.
$ cat test.pp
function f(Boolean $arg) >> String {
5
}
if false {
f("not a Boolean")
}
$ puppet apply test.pp
Notice: Compiled catalog for foo in environment production in 0.03 seconds
Notice: Applied catalog in 0.02 seconds