Ansible: คัดลอกเทมเพลตเฉพาะเมื่อไม่มีไฟล์ปลายทาง


47

ฉันใช้Ansible 1.6.6เพื่อจัดเตรียมเครื่องของฉัน

มีงานแม่แบบใน playbook ของฉันที่สร้างไฟล์ปลายทางจากแม่แบบ Jinja2:

tasks:
    - template: src=somefile.j2 dest=/etc/somefile.conf

ฉันไม่ต้องการแทนที่somefile.confหากมีอยู่แล้ว เป็นไปได้ไหมกับ Ansible? ถ้าเป็นเช่นนั้นได้อย่างไร

คำตอบ:


61

คุณสามารถตรวจสอบการมีอยู่ของไฟล์โดยใช้ stat จากนั้นใช้แม่แบบเฉพาะในกรณีที่ไม่มีไฟล์อยู่

tasks:
  - stat: path=/etc/somefile.conf
    register: st
  - template: src=somefile.j2 dest=/etc/somefile.conf
    when: not st.stat.exists

42

คุณสามารถใช้แรงพารามิเตอร์ของโมดูลแม่แบบ:

tasks:
    - template: src=somefile.j2 dest=/etc/somefile.conf force=no

หรือตั้งชื่อภารกิจ ;-)

tasks:
    - name: Create file from template if it doesn't exist already.
      template: 
        src: somefile.j2
        dest:/etc/somefile.conf
        force: no

จากเอกสารโมดูลเทมเพลต Ansible :

force: ค่าเริ่มต้นคือใช่ซึ่งจะแทนที่ไฟล์ระยะไกลเมื่อเนื้อหาต่างจากแหล่งที่มา หากไม่มีไฟล์จะถูกถ่ายโอนหากไม่มีปลายทาง

คำตอบอื่น ๆ ใช้statเพราะพารามิเตอร์แรงถูกเพิ่มหลังจากพวกเขาถูกเขียน


2
คำตอบของฉันใช้สถิติเพราะในช่วงเวลาของคำถาม / คำตอบไม่มี avaialable อาร์กิวเมนต์แรงสำหรับแม่
Teftin

10

คุณสามารถตรวจสอบว่าไฟล์ปลายทางนั้นมีอยู่หรือไม่จากนั้นทำการตัดสินใจตามผลลัพธ์ของผลลัพธ์

tasks:
  - name: Check that the somefile.conf exists
    stat:
      path: /etc/somefile.conf
    register: stat_result

  - name: Copy the template, if it doesnt exist already
    template:
      src: somefile.j2
      dest: /etc/somefile.conf
    when: stat_result.stat.exists == False   

1
ฉันชอบคำตอบนี้เพราะตั้งชื่อว่ามันเป็นงาน :)
Asfand Qazi

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.