2015-06-05 16 views
7

Nếu tôi có một cái gì đó như thế này:include_vars Ansible tiếp tục nếu tập tin không tìm thấy

- include_vars: this_file_doesnt_exist.yml 

ansible sẽ ném lỗi "tập tin đầu vào không được tìm thấy ở ..." và ngăn chặn quá trình trích lập dự phòng.

Tôi tự hỏi liệu có thể cho phép quy trình cấp phép tiếp tục nếu không tìm thấy tệp.

trường hợp sử dụng của tôi là như sau:

  • cố gắng để tải biến nộp
  • thực hiện nhiệm vụ nếu các biến tồn tại

Ví dụ:

- include_vars: aptcacher.yml 

- name: use apt-cache 
    template: src=01_proxy.j2 dest=/etc/apt/apt.conf.d/01_proxy owner=root group=root mode=644 
    sudo: true 
    when: aptcacher_host is defined 

phiên bản Ansible: 1.9 .1

Trả lời

1

Bạn có thể sử dụng with_first_found để lưu trữ nội dung này.

- include_vars: "{{ item }}" 
    with_first_found: 
    - this_file_doesnt_exist.yml 

Tôi không chắc chắn 100% nó sẽ hoạt động mà không có khiếu nại nếu không có ít nhất một tệp phù hợp. Trong trường hợp nó không hoạt động, bạn sẽ cần phải thêm một tập tin dự phòng trống:

- include_vars: "{{ item }}" 
    with_first_found: 
    - this_file_doesnt_exist.yml 
    - empty_falback.yml 
+0

Trường hợp đầu tiên không hoạt động, cần ít nhất một tệp phù hợp (kết quả đầu ra "Không có tệp nguồn nào được cung cấp"). Trường hợp thứ hai thực sự hoạt động, nhưng nó có vẻ giống như một giải pháp thay vì một giải pháp thích hợp/sạch. Cảm ơn! –

4

Bạn có thể chỉ ignore_errors trên include_vars nhiệm vụ:

- include_vars: nonexistant_file 
    ignore_errors: yes 

EDIT

Với ansible > 1.6.5 Tôi nhận được

test.yml

--- 

- hosts: localhost 
    tasks: 
    - include_vars: nonexistent_file 
     ignore_errors: yes 

    - debug: 
     msg="The show goes on" 

CHƠI [localhost] FACTS


GATHERING ***************************** ********************************** ok: [localhost]

TASK: [include_vars nonexistent_file] ***************************************** không thành công: [localhost] => {" không thành công ": true", tệp ": "/home/ilya/spielwiese/ansible/nonexistent_file "} msg: Tệp nguồn không phải là được tìm thấy. ... bỏ qua

NHIỆM VỤ: [debug msg = "Chương trình diễn ra"] **************************** ************** ok: [localhost] => { "msg": "Chương trình hiển thị"}

+1

Tôi đã thử với "ignore_errors" nhưng dường như không hoạt động. Ansible sẽ ném cùng một lỗi "tập tin đầu vào không tìm thấy tại ...".Cảm ơn –

+0

Bạn đang sử dụng 'include_vars' làm nhiệm vụ? Bạn đã thử playbook như tôi đã đăng ở trên chưa? – ProfHase85

+0

Chỉ cần thử playbook của bạn ('ansible-playbook -i localhost, test.yml') và có cùng lỗi" input file not found at ... ". Bạn đang sử dụng một lệnh khác để chạy sách của bạn? Tôi đang sử dụng ansible 1.9.1. –

Các vấn đề liên quan