किसी होस्ट या समूह के लिए एक तदर्थ कमांड के साथ सभी Ansible चर की सूची बनाएं?


25

विविध चर विभिन्न स्रोतों से आते हैं। उदाहरण के लिए यह संभव है कि host_vars और group_vars को एक सबफ़ोल्डर में YAML फ़ाइलों को बनाकर host_varsऔर group_varsक्रमशः सूची फ़ाइल वाले फ़ोल्डर में उपलब्ध कराया जाए ।

मैं उन सभी चर को कैसे सूचीबद्ध कर सकता हूं , जिनके बारे में अंसिबल को किसी समूह या होस्ट के बारे में पता होगा, जो एक प्लेबुक के अंदर हैं? नोट: मैंने कोशिश की ansible -m debug -e 'var=hostvars' hostऔर ansible -m debug -e '- debug: var=hostvars'कोई फायदा नहीं हुआ।

: सुझाव ansible <group|host> -m setupहै नहीं सही जवाब के रूप में यह करता है नहीं (यह केवल शामिल सभी चर कि अन्य स्रोतों से आते शामिल { "ansible_facts" : { ... } }वास्तव में तो यह और भी के माध्यम से एक गतिशील सूची लिपि (द्वारा प्रदान की चर शामिल नहीं है। _metaऔर इसी तरह)।

उत्तर देने योग्य संस्करण: 1.9.1।

जवाबों:


26

ansible -m debug -a "var=hostvars[inventory_hostname]"काम करने लगता है। वैध चर स्रोतों ( host_vars, group_vars, _metaएक गतिशील सूची में, आदि) सभी को ध्यान में रखा जाता है।

डायनामिक इन्वेंट्री स्क्रिप्ट के साथ hosts.sh:

#!/bin/sh
if test "$1" = "--host"; then
        echo {}
else
        cat <<EOF
{
  "ungrouped": [ "x.example.com", "y.example.com" ],
  "group1": [ "a.example.com" ],
  "group2": [ "b.example.com" ],
  "groups": {
    "children": [ "group1", "group2" ],
    "vars": { "ansible_ssh_user": "user" }
  },
  "_meta": {
    "hostvars": {
      "a.example.com": { "ansible_ssh_host": "10.0.0.1" },
      "b.example.com": { "ansible_ssh_host": "10.0.0.2" }
    }
  }
}
EOF
fi

आप प्राप्त कर सकते हैं:

$ chmod +x hosts.sh
$ ansible -i hosts.sh a.example.com -m debug -a "var=hostvars[inventory_hostname]"
a.example.com | success >> {
    "var": {
        "hostvars": {
            "ansible_ssh_host": "10.0.0.1", 
            "ansible_ssh_user": "user", 
            "group_names": [
                "group1", 
                "groups"
            ], 
            "groups": {
                "all": [
                    "x.example.com", 
                    "y.example.com", 
                    "a.example.com", 
                    "b.example.com"
                ], 
                "group1": [
                    "a.example.com"
                ], 
                "group2": [
                    "b.example.com"
                ], 
                "groups": [
                    "a.example.com", 
                    "b.example.com"
                ], 
                "ungrouped": [
                    "x.example.com", 
                    "y.example.com"
                ]
            }, 
            "inventory_hostname": "a.example.com", 
            "inventory_hostname_short": "a"
        }
    }
}

Ansible के साथ 2.0.2, यह अब काम नहीं करता है। आउटपुट हैlocalhost | SUCCESS => { "hostvars": "<ansible.vars.hostvars.HostVars object at 0x7f320943da10>" }
ज़ुल्किस

"var=hostvars[inventory_hostname]"सुस्पष्ट> 2.0
स्टुअर्ट-वॉरेन

1.9.4 के लिए यह सामान द्वारा वापस वापस नहीं करता हैansible my.hostname.example.com -m setup -i ../my/inventory/hosts.example -u root
akostadinov

1
इसने मेरे लिए काम कियाansible host-name -m debug -a "var=[var_name]" -i inventory/testing/hosts
मोंटेरो

2

FYI करें: यह github प्रोजेक्ट आपको दिखाता है कि सभी मेजबानों में 90% चर को कैसे सूचीबद्ध किया जाए। मुझे यह एकल होस्ट कमांड की तुलना में विश्व स्तर पर अधिक उपयोगी लगता है। README में एक सरल इन्वेंट्री रिपोर्ट बनाने के निर्देश शामिल हैं। यह सभी तथ्यों को देखने के लिए एक प्लेबुक के अंत में इसे चलाने के लिए और भी अधिक मूल्यवान है। टास्क व्यवहार उपयोग रजिस्टर को डीबग करने के लिए भी:


2

ऊपर दिए गए वास्तव में अच्छे उत्तर के लिए एक छोटी सी टिप जोड़ना, यदि आप प्रोग्रामेटिक रूप से अपने चारों ओर प्रहार करना चाहते हैं

होस्टवारों के लिए मौजूदा उत्तर का उपयोग करें :

ansible -m debug myhost -a "var=hostvars[inventory_hostname].ansible_version"

लेकिन ansible_facts खाली है क्योंकि मॉड्यूल debugनहीं चलता है setup। इसलिए आपको jqआउटपुट को ट्रिम करने के बाद कुछ अतिरिक्त प्रयास करने की आवश्यकता है, ताकि इसे वैध जॅसन बना सकें।

ansible -m setup myhost | sed 's#.*SUCCESS =>##' | jq .ansible_facts.ansible_all_ipv4_addresses

मैंने सोचा कि लोगों को यह उपयोगी मिल सकता है जब पाठ की विशाल दीवार की जाँच करें जो कि एक तथ्य में वापस आते हैं जब आप बस एक चीज चाहते हैं jq .ansible_facts.ansible_devices.vda.size

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.