Ansible: chỉ sao chép mẫu khi tệp đích không tồn tại


47

Tôi đang sử dụng Ansible 1.6.6để cung cấp máy của tôi.

Có một tác vụ mẫu trong sổ chơi của tôi tạo tệp đích từ mẫu Jinja2:

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

Tôi không muốn thay thế somefile.confnếu nó đã tồn tại. Có thể với Ansible? Nếu vậy thì thế nào?

Câu trả lời:


61

Bạn có thể kiểm tra sự tồn tại của tệp bằng stat và sau đó chỉ sử dụng mẫu nếu tệp không tồn tại.

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

42

Bạn chỉ có thể sử dụng thông số lực của mô-đun mẫu:

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

Hoặc đặt tên cho nhiệm vụ ;-)

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

Từ các tài liệu mô-đun mẫu Ansible :

lực lượng: mặc định là có, sẽ thay thế tệp từ xa khi nội dung khác với nguồn. Nếu không, tệp sẽ chỉ được chuyển nếu đích không tồn tại.

Các câu trả lời khác sử dụng statvì tham số lực được thêm vào sau khi chúng được viết.


2
câu trả lời của tôi sử dụng stat, bởi vì tại thời điểm câu hỏi / câu trả lời không có đối số bắt buộc nào có thể áp dụng cho mẫu
Teftin

10

Trước tiên, bạn có thể kiểm tra xem tệp đích có tồn tại hay không và sau đó đưa ra quyết định dựa trên đầu ra của kết quả.

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
Tôi thích câu trả lời này vì nó đặt tên cho nhiệm vụ của nó :)
Asfand Qazi

-3

Theo tôi, giải pháp đơn giản nhất là sử dụng thuộc tính "force = no" từ mô-đun mẫu

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.