As noted in yesterday's post, I'm working on a new customer-project. One of the automation-tools this customer uses is Ansible. This is a new-to-me automation-technology. Previously — and aside from just writing bare BASH and Python code — I've used frameworks like Puppet, SaltStack and a couple others. So, picking up a new automation-technology — especially one that uses a DSL not terribly unlike one I was already familiar with, hasn't been super much of a stretch.
After sorting out yesterday's problem and how I wanted my /etc/fstab to look, I set about implementing it via Ansible. Ultimately, I ended up settling on a list-of-maps variable to drive a lineinfile role-task. I chose a list-of-maps variable mostly because the YAML that Ansible relies on doesn't really do tuples. My var ended up looking like:
s3fs_fstab_nest: - mountpoint: /provisioning/repo bucket: s3fs-build-bukkit folder: RPMs - mountpoint: /provisioning/installers bucket: s3fs-build-bukkit folder: EXEs - mountpoint: /Data/personal bucket: s3fs-users-bukkit folder: build
And my play ended up looking like:
--- - name: "Add mount to /etc/fstab" lineinfile: path: '/etc/fstab' line: "s3fs#{{ item.bucket }}:/{{ item.folder }}\t{{ item.mountpoint }}fuse\t_netdev,allow_other,umask=0000,nonempty 0 0" loop: "{{ s3fs\_fstab\_nest }}" ...
Was actually a lot simpler than I was expecting it to be.
Top comments (1)
Nice Read!
If you don't like to use the
lineinfilemodule, themountmodule also does come with the ability to just create an/etc/fstabentry, without forcing a mount right away, by setting thestatetopresentwhich translates to:docs.ansible.com/ansible/latest/mo...
I personally avoid the use of
lineinfile,blockinfile,command,shellor similar modules in favor of more fit, purpose built, modules.Also it is Easy to mess those up, and hard to make them truly idempotent.