Geçici komutu olan bir ana bilgisayar veya grup için TÜM Ansible değişkenleri listele?


25

Kesin değişkenler çeşitli kaynaklardan gelir. Örneğin , envanter dosyasını içeren klasörün host_varsve group_varssırasıyla adlandırılmış bir alt klasörde YAML dosyaları oluşturarak host_vars ve group_vars sağlamak mümkündür .

Nasıl listeleyebilirsiniz değişkenlerin tümünü yanıtlayıcı ' olur bir kitabından içinde bir grup ya da konak hakkında bilmek? Not: Denedim ansible -m debug -e 'var=hostvars' hostve ansible -m debug -e '- debug: var=hostvars'boşuna.

İpucu: ansible <group|host> -m setupolduğu değil o gelmez Doğru yanıt olarak değil başka kaynaklardan gelen tüm değişkenleri içeren (yalnızca içeren { "ansible_facts" : { ... } }Aslında bu bile yoluyla dinamik envanter komut dosyası (sağladığı değişkenleri içermez. _metaBöyle devam eder).

Uygun sürüm: 1.9.1.

Yanıtlar:


26

ansible -m debug -a "var=hostvars[inventory_hostname]"iş gibi görünüyor. Geçerli değişken kaynaklar ( host_vars, group_vars, _metavb dinamik envanterindeki) Tüm dikkate alınır.

Dinamik envanter komut dosyasıyla 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

Alabilirsiniz:

$ 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.2ile bu artık işe yaramıyor. Çıktılocalhost | SUCCESS => { "hostvars": "<ansible.vars.hostvars.HostVars object at 0x7f320943da10>" }
Zulakis

"var=hostvars[inventory_hostname]"Ansible> 2.0
stuart-warren

1.9.4 için geri dönenleri iade etmiyoransible my.hostname.example.com -m setup -i ../my/inventory/hosts.example -u root
akostadinov

1
Bu benim için çalıştıansible host-name -m debug -a "var=[var_name]" -i inventory/testing/hosts
Montaro

2

FYI: Bu github projesi, tüm ana bilgisayarlardaki değişkenlerin% 90'ını nasıl listeleyeceğinizi gösterir. Tek ana bilgisayar komutlarından daha global olarak daha kullanışlı buluyorum. README basit bir envanter raporu oluşturmak için talimatlar içerir. Tüm Gerçekleri görmek için bunu bir oyun kitabının sonunda çalıştırmak daha da değerli. Ayrıca Görev davranışı hata ayıklamak için register kullanın:


2

Gerçekten iyi bir cevaba küçük bir ipucu ekleyerek, programatik olarak etrafta dürtmek istiyorsanız

Hostvarlar için mevcut cevabı kullanın :

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

Fakat ansible_facts boş çünkü modülü debugçalıştırmıyor setup. Bu yüzden jqgeçerli bir json yapmak için çıkışı kestikten sonra olduğu gibi ekstra bir şey denemeniz gerekir .

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

İnsanların bunu, faydalı bir gerçek gibi geri döndüğünüz dev metin duvarını araştırırken yararlı bulabileceğini düşündüm. jq .ansible_facts.ansible_devices.vda.size

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.