मैं कमांड लाइन में चर प्लेबॉय को चर कैसे दे सकता हूं?


219

मैं नया करने के लिए नया हूँ और आश्चर्य है कि ऐसा कैसे करें क्योंकि निम्नलिखित काम नहीं किया

ansible-playbook -i '10.0.0.1,' yada-yada.yml --tags 'loaddata' django_fixtures="tile_colors"

django_fixturesमेरा चर कहाँ है

जवाबों:


307

डॉक्स पढने से मुझे कमांड लाइन पर पासिंग वैरिएबल सेक्शन मिलता है , जो यह नमूना देता है:

ansible-playbook release.yml --extra-vars "version=1.23.45 other_variable=foo"

दूसरों उदाहरण कैसे से लोड करने के लिए प्रदर्शित JSON स्ट्रिंग (≥ 1.2) या फ़ाइल (≥ 1.3)


33
यह भी ध्यान दें कि --extra-varsजिस वेरिएबल को परिभाषित किया गया है वह प्लेबुक के अंदर परिभाषित वेरिएबल (ओं) को ओवरराइड करेगा।
चेकसम

5
यह भी ध्यान दें (डॉक्स से): key=valueसिंटैक्स का उपयोग करके पारित किए गए मानों की व्याख्या स्ट्रिंग्स के रूप में की जाती है । JSON प्रारूप का उपयोग करें यदि आपको कुछ भी पास करने की आवश्यकता है जो एक स्ट्रिंग (बुलियन, पूर्णांक, फ़्लोट, सूची आदि) नहीं होनी चाहिए। उदाहरण के लिए:--extra-vars '{"i_wasted_30_mins_debugging_a_boolean_string":true}'
smilin_stan

159

अन्य उत्तर बताते हैं कि कमांड लाइन के चर में कैसे पास किया जाए, लेकिन उन्हें कैसे एक्सेस किया जाए, इसलिए यदि आप ऐसा करते हैं:

--extra-vars "version=1.23.45 other_variable=foo"

अपनी yml फ़ाइल में आप इन्हें कुछ इस तरह से स्कैन किए गए ansible वेरिएबल्स को असाइन करते हैं:

vars:
    my_version: "{{ version }}"
    my_other_variable: {{ other_variable }}

कमांड लाइन आर्ग्स का उपयोग करने का एक विकल्प पर्यावरणीय चर का उपयोग करना है जो आपके सत्र के भीतर पहले से ही परिभाषित हैं, आप इन्हें इस तरह अपनी ansible yml फ़ाइलों में संदर्भित कर सकते हैं:

vars:
    my_version: "{{ lookup('env', 'version') }}"
    my_other_variable: {{ lookup('env', 'other_variable') }}

29
यकीन नहीं हो रहा है कि आप किस बारे में बात कर रहे हैं ?? मेरा उत्तर कमांड लाइन फ्लैग - टेक्स्ट-वर्स और उन्हें अपने येल विन्यास के भीतर कैसे संदर्भित किया जाए, का उल्लेख करके पहले स्वीकार किए गए उत्तरों पर विस्तार करता है। फिर मैं इसे करने का एक वैकल्पिक तरीका भी प्रस्तुत करता हूं।
ग्रीनस्टररॉक्स

1
यहाँ प्रश्न विशेष रूप से कमांड लाइन के माध्यम से परिवर्तनशील है । यही कारण है कि यह बेहतर होगा क्योंकि यह स्वयं प्रश्न / उत्तर और संबंधित लिंक है। आप कर सकते हैं और संबंधित लिंक प्रश्न के लिए एक टिप्पणी के रूप में।
atdouard लोपेज

43
विस्तारित उत्तर ने मुझे मदद की। निश्चित रूप से जानते हुए कि मापदंडों को कैसे पारित किया जाए, यह जानने के लिए कि कैसे चर का संदर्भ दिया जाए। अन्यथा आपका उन्हें पास नहीं करना, बल्कि सिर्फ यह घोषित करना कि आप चर को पास करना चाहते हैं। एक वस्तु को पास करने के लिए एक दाता और रिसीवर की आवश्यकता होती है। एक चर को पारित करने के लिए एक पैरामीटर घोषणा और पैरामीटर के उपयोग की आवश्यकता होती है।
conteh

lookup('env', SOMETHING)12 कारक से मेल खाता है।
zx1986

1
चर का नाम बदलना याद रखें: version: {{ version }}गलत है, जैसे versionस्वयं को परिभाषित करना ।
मिन्ह नगूआ

41
ansible-playbook release.yml -e "version=1.23.45 other_variable=foo"

25
-eध्वज के संक्षिप्त रूप है--extra-vars
एडवर्ड लोपेज

4
क्या मैं चर फ़ाइल पास कर सकता हूँ?
ओप्सको

13
@ अनिरुद्धजावंजल हां, जैसे--extra-vars "@some_file.json"
एलनसे

1
@OpsEco @AlanSE ध्यान दें कि यदि आप किसी फ़ाइल से चर पास कर रहे हैं, तो आपको --extra-varsफ़ाइल में नहीं चर को पारित करने के लिए दूसरे ध्वज की आवश्यकता है । उदाहरण के लिए--extra-vars "@some_file.json" --extra-vars "other_variable=foo"
15

आपको धन्यवाद @ जो मैं देख रहा था
प्रशंसक


31

किसी कारण के लिए ऊपर दिए गए किसी भी उत्तर ने मेरे लिए काम नहीं किया। जैसा कि मुझे Ansbile 2.2.0 में अपनी प्लेबुक में कई अतिरिक्त संस्करण पास करने की आवश्यकता है, यह है कि मुझे यह कैसे काम करना है (प्रत्येक संस्करण से पहले -e विकल्प पर ध्यान दें):

ansible-playbook site.yaml -i hostinv -e firstvar=false -e second_var=value2

4
-eका संक्षिप्त रूप है--extra-vars
arddouard Lopez

@LXCdev KohaLappi +1 यह प्रदर्शित करने के लिए कि आप अपने स्वयं के -eध्वज में अतिरिक्त संस्करण निर्दिष्ट कर सकते हैं
ctlockey

आप एकल ध्वज का उपयोग करके कई चर भी परिभाषित कर सकते हैं:-e "firstvar=false second_var=value2"
निल्स ब्रुनेसी

एक ही समस्या है। एक झंडे के साथ कई संस्करण काम नहीं करेंगे। मुझे आश्चर्य है क्योंकि?
ब्रेट

14
ansible-playbook test.yml --extra-vars "arg1=${var1} arg2=${var2}"

Yml फ़ाइल में आप उन्हें इस तरह से उपयोग कर सकते हैं

---
arg1: "{{ var1 }}"
arg2: "{{ var2 }}"

इसके अलावा, --extra-varsऔर -eसमान हैं, आप उनमें से एक का उपयोग कर सकते हैं।


4
 s3_sync:
      bucket: ansible-harshika
      file_root: "{{ pathoftsfiles  }}"
      validate_certs: false 
      mode: push
      key_prefix: "{{ folder }}"

यहाँ चर को 'pathoftsfiles' और 'folder' नाम दिया जा रहा है। अब इस चर का मान नीचे दिए गए आदेश द्वारा दिया जा सकता है

sudo ansible-playbook multiadd.yml --extra-vars "pathoftsfiles=/opt/lampp/htdocs/video/uploads/tsfiles/$2 folder=nitesh"

नोट: शेल कमांड में वैरिएबल को मान पास करते समय उल्टे अल्पविराम का उपयोग न करें


2
ansible-playbook release.yml --extra-vars "username=hello password=bye"

#you can now use the above command anywhere in the playbook as an example below:
tasks:
- name: Create a new user in Linux
shell: useradd -m -p {{username}} {{password}}"

2

यदि आप शेल पर्यावरण चर का उपयोग करना चाहते हैं तो यह मेरे लिए भी काम करता है:

ansible-playbook -i "localhost," ldap.yaml --extra-vars="LDAP_HOST={{ lookup('env', 'LDAP_HOST') }} clustername=mycluster env=dev LDAP_USERNAME={{ lookup('env', 'LDAP_USERNAME') }} LDAP_PASSWORD={{ lookup('env', 'LDAP_PASSWORD') }}"


1

ansible-playbok -i <inventory> <playbook-name> -e "proc_name=sshd"

आप नीचे दिए गए कमांड का उपयोग प्लेबुक में कर सकते हैं।

---
- name: Service Status
gather_facts: False
tasks:
- name: Check Service Status (Linux)
shell: pgrep "{{ proc_name }}"
register: service_status
ignore_errors: yes
debug: var=service_status.rc`
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.