Cara menentukan host yang berbeda untuk buku pedoman yang berbeda dalam satu skrip yang memungkinkan

9

Seperti yang saya mengerti, setiap buku pedoman mengambil satu entri host. Saya ingin tahu bahwa jika saya membuat buku pedoman wadah yang menyertakan buku pedoman lain, dapatkah saya mengukur host untuk setiap buku pedoman. Jadi sesuatu seperti itu

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

Saya dapat meletakkan semua buku pedoman yang berbeda dalam satu skrip dan panggilan, tetapi kemudian dengan cara ini saya tidak dapat menggunakan kembali beberapa set_fact dari satu buku pedoman ke yang lain dan karenanya ada banyak duplikasi tugas.

Akibat wajar lain dari pertanyaan ini adalah, dapatkah saya meluncurkan ec2 di amazon yang akan memilikinya

hosts: localhost

dan konfigurasi EC2 yang diluncurkan, yang pada dasarnya akan mengonfigurasi inventaris dari -i ec2.py, dan menetapkan host sebagai

hosts: tag_<some_tag>

terjadi melalui buku pedoman yang sama atau satu set buku pedoman yang disertakan (peran yang berbeda)?

Pankaj Lal
sumber
apakah Anda tahu bahwa Anda dapat memiliki lebih dari satu hosts:bagian di yaml Anda dan pada dasarnya, memiliki beberapa buku pedoman menggunakan grup host yang berbeda dalam inventaris Anda?
Yonsy Solis

Jawaban:

4

Sebenarnya, Anda dapat memiliki lebih dari satu host: bagian per buku pedoman. Tampaknya host: memulai permainan baru. Lihat http://www.tecmint.com/use-ansible-playbooks-to-automate-complex-tasks-on-multiple-linux-servers/ , misalnya.

Sesuatu seperti ini bekerja untuk saya (mungkin 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'

Jadi, letakkan host: di bagian atas masing-masing termasuk .yml, bukan setelah termasuk :.

Bill Welch
sumber
4

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

... Ada tempat lain di mana variabel dapat berasal, tetapi ini adalah jenis variabel yang ditemukan, tidak ditetapkan oleh pengguna.

Fakta adalah informasi yang diperoleh dari berbicara dengan sistem jarak jauh Anda ...

Fakta-fakta tersebut berasal dari host jarak jauh Anda. Jadi ini adalah alasan mengapa biasanya Anda dapat berbagi fakta antara host yang berbeda ketika File * .yml Anda memiliki beberapa buku pedoman .

Sekarang, Anda dapat mengakses fakta dari host lain jika Anda melakukan sesuatu seperti ini di bagian lain dari buku pedoman Anda:

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

tetapi dalam hal ini, Anda harus ingat bahwa Anda perlu mendapatkan fakta sebelum menggunakan ini. Kemudian Anda dapat mengatur bagian pertama dalam buku pedoman Anda yang mendapatkan semua fakta untuk semua host atau menggunakan caching fakta untuk ini (lihat: http://docs.ansible.com/ansible/playbooks_variables.html#fact-caching )

Sekarang, Jika Anda suka berbagi opsi di buku pedoman Anda mungkin bisa lebih baik untuk memikirkan kembali info untuk dimasukkan ke dalam variabel dan, dengan ini, Anda dapat "berbagi" variabel Anda dengan includeinstruksi yang sama , lihat ini:

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

Yonsy Solis
sumber
2
Pertanyaan saya sangat spesifik untuk host, dan bukan variabel secara umum. Kebutuhan saya adalah untuk dapat membuat buku pedoman utama yang tidak memiliki host, tetapi masing-masing playbook yang disertakan berisi host di dalamnya, atau dapat diberikan sebagai parameter. Saya selalu bisa menjalankannya sebagai buku pedoman terpisah tetapi kemudian fakta yang diperoleh dalam satu tidak meneruskan ke yang berikutnya dan jadi ada banyak redundansi
Pankaj Lal
baca di atas lagi tolong: "Sekarang, Anda dapat mengakses fakta dari host lain jika Anda melakukan sesuatu seperti ini di bagian lain dari buku pedoman Anda: ... tetapi dalam hal ini, Anda harus ingat bahwa Anda perlu mendapatkan fakta sebelum menggunakan ini "jadi, ya, Anda dapat membagikan fakta antara buku pedoman yang disertakan dalam buku pedoman utama Anda.
Yonsy Solis