Manchmal hat man in seinem ansible Plabooks Rollen, die man beispielsweise nicht bei jedem Durchgang ausführen möchte, sondern nur wenn ein Tag explizit gesetzt ist.
Ein Beispiel dafür wäre eine „update“ Rolle, welche das System aktualisiert und ggf. danach den Server gleich neu startet. Das will man natürlich nicht bei jedem durchlauf machen.
Mit den zwei Spezial-Tags never
und always
bietet ansible hierfür die richtigen Werkzeuge.
Hat man beispielsweise ein solches Playbook:
playbook.yml
- hosts: all roles: - role: baseline - role: update tags: ['update'] - role: apache # [...] |
Würde man jetzt das playbook.yml ausführen würden alle Rollen durchlaufen, auch die Rolle update, welche das ganze System aktualisert und danach den Server neu bootet. Das will man natürlich normalerweise nicht und stattdessen dies nur in ausnahmefällen ausführen, nämlich wenn man den tag „update“ setzt:
ansible-playbook playbook.yml --limit example-server --tags update |
In ansible gibt es dazu zwei Spezial-Tags, ’never‘ und ‚always‘. Setzt man diese wird die Rolle nur dann ausgeführt, wenn man explizit einen Tag aus dieser Liste angibt:
- hosts: all roles: - role: baseline tags: ['always'] - role: update tags: ['never', 'update'] - role: apache tags: ['apache'] # [...] |
Nun wird beim normalen ausführen die Rolle „update“ übergangen, ausser man setzt den Tag mit –tags auf ‚update‘.
Das Gegenteil macht der Tag ‚always‘: Rollen mit diesem Tag werden auch ausgeführt, wenn man eine Tag angbinbt in denen sie nicht enthalten sind. Beispielsweise würde im nachfolgenden Beispiel die Rolle „baseline“ trotzdem ausgeführt:
ansible-playbook playbook.yml --tags apache |
Will man dies ausnahmsweise verhinden, kann man das explizit durch die Option: --skip-tags always
machen.