Ansible ile farklı bir hostun host değişkenine nasıl erişilir?


45

Diyelim ki bazı verileri toplayan bir ana bilgisayar var ve bu bir grupta [collectors]. Ayrıca grupta ev sahibi var [reporters]. Bu yüzden groups['collectors'][0]ip adresinden muhabirlere bir değişken ayarlamak istiyorum . Ancak muhabirlerin kurulması için oyun kitabı [collectors]grupta yayınlanmaz, bu yüzden bu ev sahibinin gerçekleri toplanmaz. IP adresini kodlamamanın bir yolu var mı?

Yanıtlar:


87

Buna benzer bir şeyi yaparak hemen hemen tüm envanter olgularına / değişkenlerine erişebilirsiniz:

{{ hostvars['foo.example.com']['ansible_eth0']['ipv4']['address'] }}

veya, bir indeks aracılığıyla bir gruba yapmak istiyorsanız:

{{ hostvars[groups['collectors'][0]]['ansible_eth0']['ipv4']['address'] }}

İşin püf noktası, ilgilendiğiniz tüm ana bilgisayarlar / gruplar için gerçekleri toplamanız gerektiğidir. Bu nedenle, gazeteciler grubuna karşı çalışan oyun kitabınızı uygulanan no-op (kukla) görevi içerecek şekilde değiştirmek isteyeceksinizdir. koleksiyoner grubuna. Bu, Ansible'ın koleksiyoncuların ev sahipleriyle ilgili gerçekleri toplamasına neden olacak, böylece gazetecilerin grubundan erişilebilirler. Dolayısıyla, muhabirlerin oyun kitabının tepesine böyle bir şey eklemek isteyebilirsiniz:

- hosts: collectors
  name: Gather facts from collectors
  tasks: [ ]

Boş parantezler temelde hiçbir işin yürütülmeyeceği anlamına gelir, ancak bu yine de Ansible'ı toplayıcılar hakkında gerçekleri toplamaya zorlar, böylece onları gazetecilere karşı koyacağınız görevlerde referans alabilirsiniz.

# 1 düzenle

Ayrıca, Ansible'ın 1.8 sürümünden itibaren , şu anda mevcut olan bir gerçeği önbelleğe alma özelliğinin bulunduğunu da belirtmeliyim. Gerçek önbellekleme, oyun kitabı çalıştırmaları arasında gerçekleri depolamak için redis sunucusuna dayanır. Etkinleştirildiğinde, bir oyun kitabı daha önce çalıştırılan başka bir oyun kitabı tarafından edinilen gerçeklere başvurabilir. Ansible belgelerinin verdiği örnek:

Mesela, binlerce ev sahibi ile çok büyük bir altyapı düşünün. Gerçek önbellekleme, gece çalışacak şekilde yapılandırılabilir, ancak küçük bir sunucu kümesinin yapılandırılması, geçici veya geçici olarak gün boyunca çalışabilir. Gerçeği önbelleğe alma etkin durumdayken, değişkenlere ve bunlar hakkındaki bilgilere referans vermek için tüm sunuculara “vurmak” gerekmez.


2
İlişkisel dizini değişken olarak ayarlamanın bir yolu var mı? örnek olarak "asil localhost --extra-vars" metamorphosis_ip = 172.16.3.73 "-a" echo {{hostvars [{{metamorphosis_ip}}] ['inv_domain']}} "
16'da

Yukarıdaki cevaba eklemek için, burada bir Ansible SSS’ine atıfta bulunduğunuzdan emin olun: Bir grup sunucuyu döngü içine almak veya belirli bir ana bilgisayarı elde etmek için bir değişken ayarlamak gibi, ayrıntıları ayrıntılı bir şekilde açıklayan docs.ansible.com/ansible/faq.html grup içinde.
einarc

Boş bir görev listesine sahip bir düğümden gerçekleri alma fikri için teşekkür ederiz.
pedz
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.