Tek bir sesli komut dosyasında farklı oyun kitapları için farklı ana bilgisayarlar nasıl belirtilir


9

Anladığım kadarıyla, her oynatma kitabı bir ana bilgisayar girişi alır. Diğer playbook'ları içeren bir kapsayıcı playbook oluşturursam, her playbook içerdiği ana bilgisayarları parametrelendirebilir miyim bilmek istiyorum. Yani böyle bir şey

---
- include playbook_1.yml
    hosts: tag_postgres
- include: playbook_2.yml
    hosts: tag_rabbitmq

Bir komut dosyasına ve çağrıya tüm farklı oyun kitaplarını koyabiliyorum, ama sonra bu şekilde bir setbook'tan bazı set_fact'i başka bir oyun kitabına tekrar kullanamıyorum ve bu nedenle çok sayıda görev çoğaltması var.

Sorunun başka bir sonucu, amazon üzerinde ec2'ler başlatabilir miyim

hosts: localhost

temel olarak envanteri yapılandıracak -i ec2.pyve ana bilgisayarları

hosts: tag_<some_tag>

aynı oyun kitabında mı yoksa bir dizi oyun kitabında mı (farklı roller)?


hosts:yaml dosyanızda birden fazla bölümün olabileceğini ve özünde, envanterinizde farklı ana bilgisayar gruplarını kullanan birkaç oyun kitabınızın olabileceğini biliyor musunuz ?
Yonsy Solis

Yanıtlar:


4

Aslında, her oynatma kitabı için birden fazla ana makineye sahip olabilirsiniz: bölümü. Bir ana bilgisayar: yeni bir oyun başlatır gibi görünüyor. Örneğin, bkz. Http://www.tecmint.com/use-ansible-playbooks-to-automate-complex-tasks-on-multiple-linux-servers/ .

Bunun gibi bir şey benim için çalışıyor (ansible 2.2):

---
- hosts: localhost 
  connection: local
  roles:
    - { role: ec2,
        tag: 'master',
        instance_type: t2.2xlarge,
        count: 1
      }
  tasks:
  - shell: hostname # reports localhost

- hosts: tag_master
  tasks:
  - shell: hostname # reports instance(s) with tag 'master'

Yani, hosts koyun: her dahil .yml üstüne, dahil sonra değil:.


4

http://docs.ansible.com/ansible/playbooks_variables.html#information-discovered-from-systems-facts

... Değişkenlerin gelebileceği başka yerler de vardır, ancak bunlar kullanıcı tarafından belirlenmeyen keşfedilen bir değişken türüdür.

Gerçekler, uzak sistemlerinizle konuşmaktan elde edilen bilgilerdir ...

Gerçekler uzak ana bilgisayarlarınızdan türetilir. Bu nedenle , * .yml Dosyanızın birkaç oynatma kitabı olduğunda normalde farklı ana bilgisayarlarınız arasında gerçekleri paylaşabilmenizin nedeni budur .

Şimdi, oyun kitabınızın başka bir bölümünde böyle bir şey yaparsanız diğer ana bilgisayarlardan gerçeklere erişebilirsiniz:

{{ hostvars['server01.example.com']['ansible_eth0']['ipv4']['address'] }}
...
...
{{ hostvars[groups['servers'][0]]['ansible_eth0']['ipv4']['address'] }}

ancak bu durumda, bunu kullanmadan önce gerçekleri almanız gerektiğini hatırlamanız gerekir . Ardından, oyun kitabınızda tüm ana bilgisayarlar için tüm gerçekleri elde eden veya bunun için gerçek önbellekleme kullanan bir ilk bölüm oluşturabilirsiniz (bkz: http://docs.ansible.com/ansible/playbooks_variables.html#fact-caching )

Şimdi, oyun kitaplarınızdaki seçenekleri paylaşmak isterseniz, değişkenleri koymak için bilgileri yeniden düşünmek daha iyi olabilir ve bununla, değişkenlerinizi aynı includetalimatla "paylaşabilirsiniz" , şuna bakın:

http://docs.ansible.com/ansible/playbooks_variables.html#variables-defined-from-included-files-and-roles


2
Sorum genel olarak değişkenlere değil, ev sahiplerine çok özeldi. Benim ihtiyacım, bir ana bilgisayarı olmayan bir ana oynatma kitabı oluşturabilmektir, ancak dahil edilen her oynatma kitabı ya bir ana bilgisayar içerir ya da parametre olarak sağlanabilir. Onları her zaman ayrı oyun kitapları olarak çalıştırabilirim, ancak birinde elde edilen gerçekler bir sonrakine ilerlemez ve bu nedenle çok fazla yedeklilik vardır
Pankaj Lal

tekrar okuyun lütfen: "Şimdi, oyun kitabınızın başka bir bölümünde böyle bir şey yaparsanız, diğer ev sahiplerinden gerçeklere erişebilirsiniz: ... ancak bu durumda, kullanmadan önce gerçekleri almanız gerektiğini hatırlamanız gerekir. bu "evet, ana oyun kitabınızdaki dahil edilen oyun kitapları arasında gerçeklerinizi paylaşabilirsiniz.
Yonsy Solis
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.