Michael DeHaan (ผู้สร้าง Ansible) สร้างโพสต์บนCoderWallที่พูดถึงปัญหาที่คล้ายกันมาก คุณสามารถปรับและขยายตามความต้องการของคุณ (เช่นสิทธิ์และความเป็นเจ้าของ) ส่วนที่เกี่ยวข้องของการโพสต์อยู่ที่นี่:
สิ่งนี้สามารถทำให้ง่ายขึ้นโดยใช้ " with_items
" และnotify
คำสั่งเดียว หากมีการเปลี่ยนแปลงงานบริการจะได้รับการแจ้งเตือนในลักษณะเดียวกับที่จำเป็นต้องรีสตาร์ทเมื่อสิ้นสุด 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
โปรดทราบว่าเนื่องจากเรามีงานที่รับอาร์กิวเมนต์ที่ไม่ซ้ำกันมากกว่าหนึ่งรายการเราไม่เพียง แต่พูดว่า " item
" ในtemplate:
บรรทัด "" แต่ใช้with_items
กับตัวแปรแฮช (พจนานุกรม) นอกจากนี้คุณยังสามารถทำให้รายการสั้นลงได้อีกเล็กน้อยหากต้องการ นี่คือการตั้งค่าโวหาร:
- 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
แน่นอนว่าเราสามารถกำหนดรายการที่คุณกำลังเดินข้ามไปในไฟล์อื่นเช่นgroupvars/webservers
ไฟล์ "" เพื่อกำหนดตัวแปรทั้งหมดที่จำเป็นสำหรับwebservers
กลุ่มหรือไฟล์ YAML ที่โหลดจากvarsfiles
คำสั่ง "" ภายใน playbook ดูสิว่ามันจะสะอาดแค่ไหนถ้าเราทำ
- name: template everything for fooserv
template: src={{item.src}} dest={{item.dest}}
with_items: {{fooserv_template_files}}
notify:
- restart fooserv
with_fileglob
เสมอจากการดำเนินงานคุณจะได้รับเพื่อแม่ด้วยfiles/
stackoverflow.com/a/27407566/1695680../templates/mytemplate/*