2015-11-30 8 views
12

मेरे पास एकाधिक होस्ट अनुभाग के साथ एक प्लेबुक है। मैं उदाहरण के लिए, केवल फ़ाइल के भीतर लागू होने वाला यह playbook.yml फ़ाइल में एक चर को परिभाषित करना चाहते हैं:उत्तरदायी प्लेबुक-व्यापी चर

vars: 
    my_global_var: 'hello' 

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

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

उदाहरण से काम नहीं होता। मुझे या तो प्रत्येक होस्ट सेक्शन (खराब) के लिए चर को डुप्लिकेट करना होगा या इसे उच्च स्तर पर परिभाषित करना होगा, उदाहरण के लिए मेरे group_vars/all (जो मैं चाहता हूं, लेकिन काम नहीं करता) में। मुझे यह भी पता है कि चर फ़ाइलों को शामिल किया जा सकता है, लेकिन यह पठनीयता को प्रभावित करता है। इसे सही दायरे में लाने के लिए कोई सुझाव (जैसे प्लेबुक फ़ाइल स्वयं)?

+0

आप पीआर [# 13787] (https://github.com/ansible/ansible/pull/13787) जो वास्तव में लागू करता है में रुचि हो सकती आप जो खोज रहे हैं (और यह भी प्लेबुक चौड़ा vars_prompt)। –

उत्तर

4

set_fact मॉड्यूल यह पूरा करेगा यदि group_vars आपकी आवश्यकताओं के अनुरूप नहीं है।

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

इस मॉड्यूल नए चर स्थापित करने की अनुमति देता है। वैरिएबल होस्ट-बाय-होस्ट> आधार पर सेटअप मॉड्यूल द्वारा खोजे गए तथ्यों की तरह सेट हैं। इन चरों को एक उत्तर चलाने के दौरान नाटकों के बीच जीवित रहेंगे, लेकिन यदि आप एक तथ्य कैश का उपयोग करते हैं तो भी निष्पादन में सहेजा नहीं जाएगा।

- 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

मैं इन्वेंट्री फ़ाइल में वैश्विक चर रखना पसंद करता हूं, जहां आप समूह और अपने मेजबानों के नाम रखते हैं।

उदाहरण के लिए:

my-hosts:

[all:vars] 
my_global_var="hello" 

[db] 
db1 
db2 
[web] 
web1 
web2 

के साथ अपने प्लेबुक चलाएँ:

ansible-playbook -i my-hosts playbook.yml 

चर अब सभी मेजबानों के लिए परिभाषित किया जाएगा।

यदि आप ec2.py या कुछ अन्य dynamic inventory का उपयोग कर रहे हैं, तो आप उसी परिणाम को प्राप्त करने के लिए group_vars/all फ़ाइल में वैश्विक चर डाल सकते हैं।

+0

जैसा कि मैंने उल्लेख किया है, सूची या मेजबान फ़ाइल में var डालकर काम करना मुश्किल है, फिर इसे प्लेबुक में परिभाषित करना कठिन है, क्योंकि आपको 2 या अधिक फाइलें देखना है। –

+0

आपने वास्तव में अपने प्रश्न में इन्वेंट्री का जिक्र नहीं किया था, इसलिए मैंने सुझाव दिया :-) चूंकि यह एक फ़ाइल है, इसलिए आपको अपने मेजबान को परिभाषित करने के लिए किसी भी तरह का उपयोग करना चाहिए, यह आपके चर को परिभाषित करने के लिए भी समझ में आता है। – jonatan

+0

जब आप ec2.py जैसे डायनामिक इन्वेंट्री का उपयोग कर रहे हैं तो क्या होगा? – xenithorb

संबंधित मुद्दे