4 ms·
Ansible 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
by tryauuum 2y ago
Ansible 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.