3 ms·
True, nix is also a package manager, and that is the crucial step necessary to actually provide a declarative interface to system state. Without it you can only
by matrss 3y ago
True, nix is also a package manager, and that is the crucial step necessary to actually provide a declarative interface to system state. Without it you can only get the leaky abstraction that is ansible.
To illustrate my point, imagine this playbook:
---
- name: Bring system into some state
hosts: localhost
tasks:
- name: Install hello
ansible.builtin.apt:
name: hello
become: true
Apply it and you get GNU hello installed. Now remove the package installation step, which really is just a glorified "ssh $host < script.sh":
---
- name: Bring system into some state
hosts: localhost
tasks:
Apply that and you will still have hello installed, even though it was removed from the "declared state". This just pretends to be declarative but really isn't, the tasks are still imperative steps.
Not to blame ansible for this, it is just that ansible is build on a foundation that inherently makes declarative system management impossible to begin with and ansible is more or less the best thing you could do given the constraints.