Sich in den Fuß taggern
Zum Zweck alle möglichen Maschinen nach der Installation mit einer Grundkonfiguration auszustatten habe ich ein Playbook.
Im Prinzip wird das nur einmal nach der Installation ausgeführt und soll für alle möglichen Installationen vom Spielserver, produktive Server, bis hin zu Arbeitssystemen genutzt werden.
Ein Teil dieser Systeme wird danach nicht mehr per Ansible betreut.
Um verschiedene Konfigurationen zu erlauben benutze ich Tags.
- name: htop installed
ansible.builtin.apt:
name: htop
state: present
- name: zsh installed
ansible.builtin.apt:
name: zsh
state: latest
- name: zshrc copied
become: false
tags:
- mod_user
ansible.builtin.copy:
src: ~/.zshrc
dest: "{{ ansible_user_dir }}/.zshrc"
- name: Copy vim config
become: false
tags:
- mod_user
ansible.builtin.copy:
src: ./init.lua
dest: "{{ ansible_user_dir }}/.config/nvim/"
- name: "{{ ansible_user }}'s shell is zsh"
tags:
- mod_user
block:
- name: Get installed packages
ansible.builtin.package_facts:
manager: apt
- name: "Default shell zsh for {{ ansible_user }}"
when: ansible_facts.packages['zsh'] is defined
ansible.builtin.user:
name: "{{ ansible_user }}"
shell: /usr/bin/zsh
Der Aufruf sieht dann z.B. so aus:
ansible-playbook -t mod_user,server -i 192.168.127.48, primer.yml -u someone
Ausgeführt wurde daraufhin (Tasknamen):
-
zshrc copied
-
Copy vim config
-
{{ ansible_user }}'s shell is zsh
Nicht ausgeführt wurde hingegen:
-
htop installed
-
zsh installed
Die ausgeführten Tasks waren die per Tags (-t) ausgewählten.
Aber die nicht getaggten wurden seltsamerweise nicht ausgeführt.
Die Lösung ist ganz einfach und eigentlich wusste ich es, hatte es aber zwischenzeitlich vergessen und es hat mich einen Moment gedauert den Grund zu finden…
Ändert man die Tag-Liste:
ansible-playbook -t mod_user,untagged,server -i 192.168.127.48, primer.yml -u someone
funktioniert es.
Gibt man bei Ansible keine Tags an, werden alle Tasks ohne Tags ausgeführt.
Gibt man aber Tags an, werden nur die Tasks mit Tags ausgeführt - also keine nicht getaggten Tasks!
Damit bei der Angabe von Tags nicht getaggte Tasks auch ausgeführt werden, muss man das Tag untagged angeben