वैरिएबल जो मौजूदा एन्सिबल-प्लेबुक का मार्ग है जो निष्पादित कर रहा है?


109

क्या एक अनुशीलन चर है जिसमें निष्पादित करने योग्य वर्तमान अंसुख-प्लेबुक का पूर्ण मार्ग है?

कुछ संदर्भ: मैं localhostmysql docker को कॉन्फ़िगर करने और ansible स्क्रिप्ट के सापेक्ष डेटा वॉल्यूम को माउंट करना चाहता हूं ।

उदाहरण के लिए, मान लें कि मैंने एक रिपॉजिटरी को चेकआउट कर दिया है ~/branch1/और फिर मुझे ansible-playbook dev.ymlलगता है कि मैं सोच रहा था कि इसे वॉल्यूम को सहेजना चाहिए ~/branch1/.docker_volume/। अगर मैंने इसे चलाया ~/branch2तो इसे वॉल्यूम को कॉन्फ़िगर करना चाहिए ~/branch2/.docker_volume/


2
एक दिलचस्प सवाल, जिसके बारे में मैंने कभी नहीं सोचा था। हालाँकि यह तथ्य कि आप पूछ रहे हैं यह एक संकेतक है कि आप कुछ गलत तरीके से कर रहे हैं।
एंटोनी क्रिस्टोफाइड्स

मैं मानता हूं, मैं @AntonisChristofides का विस्तार करूंगा
जोश

जवाबों:


192

आप playbook_dirचर का उपयोग कर सकते हैं ।


2
मैं एक समान मुद्दे का सामना कर रहा था और आपके उत्तर ने इसे हल कर दिया। धन्यवाद। हालाँकि, मुझे ऐसी कोई जगह नहीं मिली जहाँ playbook_dirचर का दस्तावेजीकरण किया गया हो। क्या आप कृपया मुझे दस्तावेज की ओर इशारा कर सकते हैं। या, क्या आप बता सकते हैं कि आपको इस चर के बारे में कैसे पता चला?
slayedbylucifer

3
मुझे यह एक असंगत कोड में लगता है: github.com/ansible/ansible/blob/…
सेवा पोलीकोव

2
ALSO, सभी वेरिएबल्स के साथ दिलचस्प रेपो github.com/lorin/ansible-quickref है
सेवा पोलाकोव

46

ऐसा प्रतीत नहीं होता है कि एक वैरिएबल हो, जो वास्तव में वही हो जो आप चाहते हैं।

हालाँकि, डॉक्स के हवाले से :

यह भी उपलब्ध है, inventory_dirनिर्देशिका inventory_fileका पथ नाम है अंसिबिल की इन्वेंट्री होस्ट फ़ाइल को रखने के लिए, यह पथनाम है और एंसेबल की इन्वेंट्री होस्ट फ़ाइल की ओर इंगित नाम है।

playbook_dir में playbook आधार निर्देशिका सम्‍मिलित है।

और अंत में, role_pathवर्तमान भूमिका का पथनाम वापस कर देगा (1.8 से)। यह केवल एक भूमिका के अंदर काम करेगा।

आपके सेटअप पर निर्भर, उन या- $ pwdआधारित समाधान पर्याप्त हो सकते हैं।


2

दुर्भाग्य से वहाँ नहीं है। वास्तव में निरपेक्ष पथ थोड़ा सा अर्थहीन (और संभावित रूप से भ्रमित करने वाला) है कि कैसे अंसिबल चलता है। संक्षेप में, जब आप किसी कार्यपुस्तिका को आमंत्रित करते हैं तो प्रत्येक कार्य के लिए Ansible शारीरिक रूप से कार्य से जुड़े मॉड्यूल को लक्ष्य मशीन पर एक अस्थायी निर्देशिका में कॉपी करता है और फिर आवश्यक मापदंडों के साथ मॉड्यूल को आमंत्रित करता है। तो टार्गेट मशीन पर निरपेक्ष पथ केवल एक अस्थायी निर्देशिका है जिसमें केवल कुछ अस्थायी फ़ाइलें हैं, और इसमें पूर्ण प्लेबुक भी शामिल नहीं है। इसके अलावा, जब तक आप लक्ष्य पर अपने पूरे Ansible निर्देशिका पेड़ की नकल नहीं कर रहे हैं, तब तक Ansible सर्वर पर एक फ़ाइल का पूर्ण पथ जानना लक्ष्य मशीन पर बहुत बेकार है।

सभी चरों को देखने के लिए जिन्हें Ansible द्वारा परिभाषित किया गया है, आप बस निम्न कमांड चला सकते हैं :

$ ansible -m setup hostname

ऐसा क्या कारण है जो आपको लगता है कि आपको प्लेबुक के निरपेक्ष मार्ग को जानने की आवश्यकता है?


धन्यवाद ब्रूस, मैंने अपने सवाल को संशोधित किया कि मैं क्या करने की कोशिश कर रहा था।
जोश Unger

6
निरपेक्ष स्थानीय मार्ग बिल्कुल भी निरर्थक नहीं है। उदाहरण के लिए, इसका उपयोग किसी भी स्थानीय कमांड को चलाने और / या अन्य स्थानीय फाइलों या सेवाओं को क्वेरी करने के लिए किया जा सकता है, जिन्हें सीधे आनुषंगिक विन्यास में शामिल नहीं किया जा सकता है। मात्र तथ्य यह है कि ansible के पास local_actionमॉड्यूल का मतलब है कि इसके लिए वैध उपयोग-मामले हैं।
क्रे

1

मैं स्थानीय स्तर पर अपनी भूमिकाओं का परीक्षण करने के लिए इस तरह से एक प्लेबुक का उपयोग कर रहा था:

---
- hosts: localhost
  roles:
     - role: .

लेकिन इसने विसिबल v2.2 के साथ काम करना बंद कर दिया।

मैंने उपरोक्त समाधान पर बहस की

---
- hosts: all
  tasks:
    - name: Find out playbooks path
      shell: pwd
      register: playbook_path_output
    - debug: var=playbook_path_output.stdout

और इसने मेरे होम डायरेक्टरी का निर्माण किया न कि "वर्तमान वर्किंग डाइरेक्टरी" का।

मैं सेटल हो गया

---
- hosts: all
  roles:
    - role: '{{playbook_dir}}'

ऊपर दिए गए समाधान के अनुसार।


1

इस उद्देश्य के लिए कोई बिल्ड-इन वैरिएबल नहीं है, लेकिन आप हमेशा "pwd" कमांड के साथ प्लेबुक के निरपेक्ष पथ का पता लगा सकते हैं, और इसके आउटपुट को वेरिएबल में पंजीकृत कर सकते हैं।

- name: Find out playbook's path
  shell: pwd
  register: playbook_path_output
- debug: var=playbook_path_output.stdout

अब पथ परिवर्तनशील playbook_path_output.stdout में उपलब्ध है


7
इस मामले pwdमें प्लेबुक स्क्रिप्ट का पथ वापस नहीं आता है। यह प्रक्रिया की वर्तमान निर्देशिका (सामान्य रूप से ansible-playbook) लौटाता है । दोनों को समान नहीं होना चाहिए और उस सटीक तरीके पर निर्भर करना होगा जिसमें ansible को लागू किया गया था।
क्रे

5
@Cray सही है। गैर-जिम्मेदार, मैं सिर्फ यह उल्लेख करना चाहता था कि एंसिबल पहले से ही इस चर को आपके लिए तैयार करता है: debug: var=ansible_env.PWD(यह मुझे वह निर्देशिका देता है जिससे मैंने ansible-playbookअपने स्थानीय मशीन और दूरस्थ सर्वर पर होम डायरेक्टरी निष्पादित की है)
NS du Toit

4
वैकल्पिक रूप से वर्तमान निर्देशिका के साथ पाया जा सकता है:{{ lookup('env','PWD') }}
isedwards
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.