Earlier quoted context omitted.
> I would say it's often hardly about just "operating" the machine. You need to know how the machine works how it can affect other machines and what can you do if parts of the machine break. So, in terms from programming analogy, you need how your runtime operates, how it can affect neighbour processes/services, and what can you do when the runtime breaks down. This still does not affect how you structure your code (…
> So, in terms from programming analogy, you need how your runtime operates, how it can affect neighbour processes/services, and what can you do when the runtime breaks down. This still does not affect how you structure your code (at least usually, when you don't work closely with the OS, which I bet is majority of code in the wild). Working with CFEngine's "DSL" v2 was very different from using Puppet mainly due to…
In this case it only affected where you put which part of the code, not how you managed your servers with the tool.
Note that the analogy with programming languages is =~ , not =~ , what you're trying to put into use here. For judging the approach, it's irrelevant whether you write a shell script or use somebody's Ruby plugin to detect mounted filesystems or something like that. It doesn't change fundamentally how you structure maintenance of your environment.
> There were / are many nuances in CFEngine that make it different from puppet.
Of course, starting with their languages' syntax. Though both use the same underlying ideas, even if they call them differently, and both operate in similar way. If you know how one works, it's a knowledge that's easy to transfer to the other.