Michael DeHaan (người tạo ra Ansible) đã đăng một bài trên CoderWall nói về vấn đề rất giống nhau. Bạn có thể điều chỉnh và mở rộng nó theo nhu cầu của bạn (chẳng hạn như quyền và quyền sở hữu). Phần có liên quan của bài viết ở đây:
Điều này có thể được đơn giản hóa bằng cách sử dụng " with_items
" và một notify
câu lệnh. Nếu bất kỳ tác vụ nào thay đổi, dịch vụ sẽ được thông báo chính xác theo cùng một cách mà nó cần khởi động lại khi kết thúc quá trình phát playbook.
- 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
Lưu ý rằng vì chúng tôi có các tác vụ có nhiều hơn một đối số duy nhất, chúng tôi không chỉ nói " item
" trong dòng ' template:
', mà sử dụng with_items
với biến băm (từ điển). Bạn cũng có thể giữ nó ngắn hơn một chút bằng cách sử dụng danh sách, nếu bạn muốn. Đây là một sở thích phong cách:
- 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
Tất nhiên, chúng tôi cũng có thể xác định danh sách bạn đang xem trong một tệp khác, như groupvars/webservers
tệp "" để xác định tất cả các biến cần thiết cho webservers
nhóm hoặc tệp YAML được tải từ varsfiles
chỉ thị "" trong sổ chơi. Hãy nhìn cách này có thể dọn sạch nếu chúng ta làm.
- name: template everything for fooserv
template: src={{item.src}} dest={{item.dest}}
with_items: {{fooserv_template_files}}
notify:
- restart fooserv
with_fileglob
luôn luôn hoạt động từfiles/
, bạn có thể nhận được mẫu với../templates/mytemplate/*
. stackoverflow.com/a/27407566/1695680