2015-08-26 17 views
5

Tôi có một file ansible (my_file.yml) mà trông giống như sau:Làm cách nào để chuyển các biến cho các tác vụ được bao gồm trong ansible?

--- 
- name: The name 
    hosts: all 
    tasks: 

    - include:my_tasks.yml 
     vars: 
      my_var: "{{ my_var }}" 

my_tasks.yml trông như thế này:

- name: Install Curl 
    apt: pkg=curl state=installed 

- name: My task 
    command: bash -c "curl -sSL http://x.com/file-{{ my_var }} > /tmp/file.deb" 

Tôi muốn vượt qua my_var như một đối số dòng lệnh để ansible vì vậy tôi làm như thế này:

ansible-playbook my_file.yml --extra-vars "my_var=1.2.3" 

Nhưng tôi kết thúc với lỗi sau:

... Failed to template {{ my_var }}: Failed to template {{ my_var }}: recursive loop detected in template string: {{ my_var }} 

Nếu tôi các vars trong my_file.yml trông như thế này:

- include:my_tasks.yml 
    vars: 
     my_var: "1.2.3" 

nó hoạt động! Tôi cũng đã thử thay đổi tên biến thành cái gì đó không bằng my_var, ví dụ:

- include:my_tasks.yml 
    vars: 
     my_var: "{{ my_var0 }}" 

nhưng sau đó tôi kết thúc với một lỗi. Dường như với tôi rằng biến không được mở rộng và thay vào đó, chuỗi "{{ my_var }}" hoặc {{ my_var0 }} được chuyển đến my_tasks.yml. Tôi giải quyết điều này như thế nào?

Trả lời

7

Bạn không cần phải chuyển rõ ràng my_var tới include. Tất cả các biến bao gồm thêm vars phải có sẵn trực tiếp ở mọi nơi. Vì vậy, chỉ cần gọi

ansible-playbook my_file.yml --extra-vars "my_var=1.2.3" 

và sử dụng nó làm {{ my_var }} trong công việc sẽ hoạt động.

- name: My task 
    command: bash -c "curl -sSL http://x.com/file-{{ my_var }} > /tmp/file.deb" 
+2

Làm cách nào để chuyển biến từ một tác vụ (thay vì đặt var trong sách bài vở hoặc tại dòng lệnh)? –

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