Soru Ansible bir ana bilgisayar grubu için hostvars erişme


Sunucu ana bilgisayar dosyasına girişler eklemek için Ansible'ı kullanmaya çalışıyorum. Özel bir LAN üzerinden birbirleriyle konuşmam gereken bir sunucu grubum var.

Envanterim dosyası:

[server_list]
server1
server2

Çalışmaya çalıştığım görev:

- lineinfile: dest=/etc/hosts line="{{ hostvars[" {{ item }} "]['ansible_eth1']['ipv4']['address'] }}   {{ hostvars[" {{ item }} "]['ansible_hostname'] }}"
  with_items: groups['server_list']

Bu hile yapmıyor, bunu anlıyorum:

fatal: [server1] => host not found:  {{item}} 
fatal: [server2] => host not found:  {{item}} 

Bu temelde aynı buancak yeni Ansible değişken erişim biçiminde {{ }}.

Bu nasıl yapılır herhangi bir fikir?


6
2017-07-24 11:39


Menşei




Cevaplar:


TAMAM. Bunu daha önce denedim ve gerçekten işe yaramadı. O yüzden orada yanlış bir şeyler yapmış olmalıyım.

Bu çalışıyor:

- lineinfile: dest=/etc/hosts line="{{ hostvars[item]['ansible_eth1']['ipv4']['address'] }}   {{ hostvars[item]['ansible_hostname'] }}"
  with_items: groups['server_list']

ya da 1.9 ya da daha sonra:

- lineinfile: dest=/etc/hosts line="{{ hostvars[item]['ansible_eth1']['ipv4']['address'] }}   {{ hostvars[item]['ansible_hostname'] }}"
  with_items: "{{ groups['server_list'] }}"

8
2017-07-26 01:39



Bu 1.9'da bozuluyor - bbaassssiiee


Aynı sorun vardı, bir gruptaki ana bilgisayarların listesini gözden geçirmek ve daha sonra ips ile güvenlik duvarı kuralları eklemek istedim. Hostvars [item] 'in nasıl yapılandırıldığına biraz bakın ve bu değere erişmek için farklı bir isim kullandı. Bu benim için çalıştı:

- name: Setting up firewall so web_servers can access MySQL on port {{ mysql_port }}
  ufw: rule=allow proto=tcp to_port={{ mysql_port }} src="{{ hostvars[item]['ansible_default_ipv4']['address'] }}"
  with_items: groups.web_servers

4
2017-10-01 15:08



Mükemmel! Yukarıdaki cevaplardan daha iyi .. - stevemidgley


Sözdizimi sadece biraz kapalı. Kullanmayı deneyin groups.server_list seninki with_items list.

Host_vars'ı sizin yaptığınız gibi kullanmıyorum, bu yüzden oyun defterinizin o kısmını çalıştıran bir ayrıştırıcı hatası alırsanız bana bildirin.

Ancak aşağıdakiler {{item}} yerine bir ana makine adı koymalıdır.

- lineinfile: dest=/etc/hosts line="{{ hostvars[" {{ item }} "]['ansible_eth1']['ipv4']['address'] }}   {{ hostvars[" {{ item }} "]['ansible_hostname'] }}"
  with_items: groups.server_list

0
2017-07-25 21:38



Nop. Hala meteliksizim. groups['server_list'] doğru şekilde genişletilmiştir. Bence sorun yuvalama. {{ }} etrafında item hostvars için {{}}. - melsayed


hem önek hem de sonek eklemeniz gerekiyorsa ve her şeyi bir liste haline getirmeniz gerekiyorsa, aşağıya bakın:

  set_fact:
    extended_etcd_endpoints_list: "{{ groups['etcd'] | map('extract', hostvars, ['ansible_default_ipv4','address']) | map('regex_replace', '^(.*)$','https://\\1:2379') | list  }}"

etcv grubundaki tüm makinelerin listesini alır, ipv4'ü çıkarır, önüne 'https: //' ve sonunda ': 2379' ekler. Son olarak, her şey bir listede dönüştürülür.


0
2017-09-14 15:14