2015-11-30 15 views
12

Tôi có một sổ lưu niệm với nhiều mục lưu trữ. Tôi muốn xác định một biến trong tệp playbook.yml này chỉ áp dụng trong tệp, ví dụ:Biến an toàn cho toàn bộ playbook có thể là

vars: 
    my_global_var: 'hello' 

- hosts: db 
    tasks: 
    -shell: echo {{my_global_var}} 

- hosts: web 
    tasks: 
    -shell: echo {{my_global_var}} 

Ví dụ trên không có tác dụng. Tôi phải sao chép biến cho mỗi mục máy chủ lưu trữ (không hợp lệ) hoặc xác định nó ở cấp cao hơn, ví dụ trong số group_vars/all của tôi (không phải những gì tôi muốn, nhưng hoạt động). Tôi cũng biết rằng các tệp biến có thể được bao gồm, nhưng điều này ảnh hưởng đến khả năng đọc. Bất kỳ đề xuất nào để đưa nó vào đúng phạm vi (ví dụ: bản thân tệp playbook)?

+0

Bạn có thể quan tâm đến PR [# 13.787] (https://github.com/ansible/ansible/pull/13787) mà thực hiện chính xác những gì bạn đang tìm kiếm (và cũng playbook toàn vars_prompt). –

Trả lời

4

Mô-đun set_fact sẽ thực hiện việc này nếu nhóm_vùng không phù hợp với nhu cầu của bạn.

http://docs.ansible.com/ansible/set_fact_module.html

Module này cho phép thiết lập các biến mới. Các biến được thiết lập trên cơ sở host-by-host> giống như các sự kiện được phát hiện bởi mô đun thiết lập. Các biến này sẽ tồn tại giữa các lần phát trong một lần chạy Ansible, nhưng sẽ không được lưu qua các lần thực thi ngay cả khi bạn sử dụng bộ nhớ cache thực tế.

- hosts: db:web 
    tasks: 
    - set_fact: my_global_var='hello' 

- hosts: db 
    tasks: 
    -shell: echo {{my_global_var}} 

- hosts: web 
    tasks: 
    -shell: echo {{my_global_var}} 
3

Tôi muốn giữ các biến toàn cục trong tệp khoảng không quảng cáo, nơi bạn giữ các nhóm và tên của máy chủ lưu trữ.

Ví dụ:

my-hosts:

[all:vars] 
my_global_var="hello" 

[db] 
db1 
db2 
[web] 
web1 
web2 

Chạy playbook của bạn với:

ansible-playbook -i my-hosts playbook.yml 

Biến bây giờ sẽ được định nghĩa cho tất cả các host.

Nếu bạn đang sử dụng ec2.py hoặc một số khác dynamic inventory, bạn có thể đặt các biến toàn cầu trong tệp group_vars/all để đạt được kết quả tương tự.

+0

Như tôi đã đề cập, việc đặt var vào kho lưu trữ hoặc tệp lưu trữ hoạt động, nhưng khó đọc hơn sau đó xác định nó trong playbook, vì bạn phải xem 2 hoặc nhiều tệp. –

+0

Bạn thực sự không đề cập đến khoảng không quảng cáo trong câu hỏi của bạn, đó là lý do tại sao tôi đề xuất :-) Vì đây là tệp bạn phải sử dụng, để xác định máy chủ của bạn, điều đó cũng có ý nghĩa để xác định các biến của bạn. – jonatan

+0

Điều gì sẽ xảy ra khi bạn sử dụng khoảng không quảng cáo động như ec2.py? – xenithorb

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