2015-12-27 17 views
7

के अंदर फ़िल्टर के साथ तथ्यों को इकट्ठा करना मैं एक ऐसी भूमिका पर काम कर रहा हूं जिसे केवल एक तथ्य इकट्ठा करने की आवश्यकता है।उत्तरदायी - प्लेबुक

प्रदर्शन यह एक चिंता है और मुझे पता है कि तथ्यों को इकट्ठा करना समय लेने वाला है।

मैं एक प्लेबुक के अंदर gather_facts फ़िल्टर करने के लिए कुछ रास्ता ढूंढ रहा हूं, इससे मुझे केवल आवश्यक तथ्यों को इकट्ठा करने की अनुमति मिल जाएगी।

इस सेटअप कोर मॉड्यूल का उपयोग कर संभव है:

ansible -m setup -a 'filter=ansible_hostname' my_host 

10.200.0.127 | success >> { 
    "ansible_facts": { 
     "ansible_hostname": "my_host" 
    }, 
    "changed": false 
} 

यह प्लेबुक के अंदर इस सुविधा का उपयोग करने के लिए संभव है? कुछ इस तरह?

- hosts: all 
    sudo: yes 
    gather_facts: True 
    filter: "filter=ansible_*" 

पुनश्च: कोड ऊपर वाक्य रचना अपवाद फेंकता है।

संपादित करें 1: किसी होस्ट नाम होने की जरूरत है अगर वहाँ भी है एक और उपयोगी चर inventory_hostname

उत्तर

13

हां, यह संभव है, लेकिन तथ्यों को इकट्ठा करने के डिफ़ॉल्ट व्यवहार में नहीं। gather_facts से true सेट करने के बाद बस setup module को नाटक के पहले कार्य के रूप में कॉल करें। इस तरह आपके पास setup मॉड्यूल कॉल को पैरामीटर करने का कोई तरीका नहीं है।

लेकिन आप डिफ़ॉल्ट व्यवहार को अक्षम कर सकते हैं और फ़िल्टर पैरामीटर के साथ स्वयं को सेट कर सकते हैं।

- hosts: all 
    sudo: yes 
    gather_facts: False 
    tasks: 
    - setup: 
     filter: ansible_* 

आप एक भूमिका पर काम कर रहे और अपनी भूमिका में इस स्थापना कॉल के लिए नहीं चाहते हो सकता है के बाद से, आप pre_tasks का उपयोग कर सकता।

- hosts: all 
    sudo: yes 
    gather_facts: False 
    pre_tasks: 
    - setup: 
     filter: ansible_* 
    roles: 
    - your_role_here 
1

यदि सब में आपकी रुचि है प्रत्येक मेजबान तो बस इस तरह कुछ करने का होस्ट नाम आपको क्या चाहिए करना चाहिए है:

- hosts: all 
    gather_facts: false 
    tasks: 

    - name: Get hostname 
     command: /bin/hostname 
     register: my_hostname 

    - debug: var=my_hostname 

अगर यह कुछ अन्य तथ्य यह है कि आप तो बस निर्दिष्ट में रुचि रखते हैं उचित आदेश, और पंजीकृत चर के माध्यम से तथ्य का संदर्भ लें।

3

के बाद यह प्रश्न पूछा और उत्तर दिया, Ansible 2.1 added the gather_subset option सेटअप मॉड्यूल के लिए किया गया था ताकि अपने !facter,!ohai,network वाक्य रचना नहीं बल्कि एक regex फिल्टर से दस्तावेज़ में वर्णित उपयोग करने के लिए अब संभव:

- hosts: all 
    sudo: yes 
    gather_facts: False 
    pre_tasks: 
    - setup: 
     gather_subset: !facter,!ohai,network 
    roles: 
    - your_role_here 
संबंधित मुद्दे