4 ms·
I like Ansible, but that doesn't mean thera are no pain points. One of them is handling "if-this-then-that-else-that". Being purely declarative, Ansible is hor
by Anarch157a 2y ago
I like Ansible, but that doesn't mean thera are no pain points.
One of them is handling "if-this-then-that-else-that". Being purely declarative, Ansible is horrible at that.
Pyinfra can be used in imperative mode, am I right? This would make the use of if-else a breeze, which would be a really good reason for me to to switch.
- tryauuum 2y agoAnsible is declarative? In puppet and saltstack you can declare that a folder is empty and declare a specific file in this folder. The system's smart enough to delete all the files except the one. To achieve such feat in ansible is hard. Easiest way is to have two tasks, one deletes everything and second recreates your file. Doesn't feel very declarative Unrelated thing, they don't even try to be declarative in ansible E.g you can have a file with state "touch". It not a state if it updates each playbook run!
- emmelaich 2y agorsync covers this and should ne used instead of a lot of Ansible tasks
- Anarch157a 2y agoYou're confusing declarative with idempotent. Ansible is both, it won't change anything if the state is already what you declared. The nitpicked case you chose, you want the file to have the latest timestamp, this is a valid state to declare.
- verdverm 2y agoThe shell task breaks the declarative nature a bit, along with registering task results and then writing conditional whens based on them. Interpolating values based on the registered results does too imho
- aflukasz 2y agoPlus, what your are declaring is often times not the state you desire but... action you want to take. Say you use `apt.name: [pkg1, pkg2]`, run it, then remove `pkg2` from the list. Running this again won't remove `pkg2` from your system. So it's declarative, but not necessarily on the optimal level all the times.
- goodpoint 2y agoAnsible is neither.
- otabdeveloper4 2y agoAnsible tries to be declarative and idempotent, but fails at being both.
- gtirloni 2y agoansible-core succeeds pretty well in being both. ansible modules (built-in and community) are a different matter. generally, quality will vary.
- soraminazuki 2y agoAnsible is neither and it shows. For example, deleting a configuration in Ansible doesn't revert the system back to its original state. That's the definition of statefulness.
- zaphirplane 2y agoYou can use Rsync to to a puppet created folder You’d need to have a source folder with the file which is fine
- mrweasel 2y agoThere's a lot of cases where Puppet fails on something similar. Packages is probably the easiest example. Puppet won't remove all package not explicitly declared, nor will it remove files it created, if you remove the Puppet code for managing that file. I'm fairly sure that the way to make Puppet do what you suggest is the same in Puppet and Ansible. The difference is that Puppet is smart enough to not actually remove you file during every run (I think). On the other hand, Ansible will normally not be configured to run every 30 minutes like Puppet, so it's much less of an issue. Both tools are great but they work some what differently. How you think about using them is much the same though, you need to tell the computer what to do. In Puppet this is often talked about is if you describe the state, I suppose that's partly true, but in the end you have a series of actions the computer will need to take to achieve this state.
- verdverm 2y agoThere's definitely a trend in this direction. Pulumi for Terraform and Dagger for Docker are two examples I use I like CUE as a language to replace my Yaml that has some of the typical language constructs but maintains the declarative approach