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.

Auszug des Plays:
      - 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