Michael DeHaan (twórca Ansible) napisał post na CoderWall, który mówi o bardzo podobnym problemie. Możesz go dostosować i rozszerzyć zgodnie z własnymi potrzebami (takimi jak uprawnienia i własność). Odpowiednia część postu znajduje się tutaj:
Można to uprościć, używając „ with_items
” i pojedynczej notify
instrukcji. Jeśli którekolwiek z zadań ulegnie zmianie, usługa zostanie o tym powiadomiona dokładnie tak samo, jak musi zostać uruchomiona ponownie na końcu uruchomienia playbooka.
- name: template everything for fooserv
template: src={{item.src}} dest={{item.dest}}
with_items:
- { src: 'templates/foo.j2', dest: '/etc/splat/foo.conf' }
- { src: 'templates/bar.j2', dest: '/etc/splat/bar.conf' }
notify:
- restart fooserv
Zauważ, że ponieważ mamy zadania, które wymagają więcej niż jednego unikalnego argumentu, nie mówimy tylko „ item
” w template:
wierszu „ ”, ale używamy with_items
ze zmienną hash (słownik). Jeśli chcesz, możesz też nieco go skrócić, używając list. To jest preferencja stylistyczna:
- name: template everything for fooserv
template: src={{item.0}} dest={{item.1}}
with_items:
- [ 'templates/foo.j2', '/etc/splat/foo.conf' ]
- [ 'templates/bar.j2', '/etc/splat/bar.conf' ]
notify:
- restart fooserv
Oczywiście możemy również zdefiniować listę, w której chodziłeś w innym pliku, np. Plik „ groupvars/webservers
” do zdefiniowania wszystkich zmiennych potrzebnych dla webservers
grupy, lub plik YAML załadowany z varsfiles
dyrektywy „ ” wewnątrz podręcznika. Zobacz, jak możemy to wyczyścić, jeśli to zrobimy.
- name: template everything for fooserv
template: src={{item.src}} dest={{item.dest}}
with_items: {{fooserv_template_files}}
notify:
- restart fooserv
with_fileglob
zawsze działa odfiles/
, możesz dostać się do szablonów za pomocą../templates/mytemplate/*
. stackoverflow.com/a/27407566/1695680