Ansible Playbooks ve Roller


98

Ansible belgelerine göre bir Başucu Kitabı :

... halihazırda mevcut olanların aksine gerçekten basit bir konfigürasyon yönetimi ve çok makineli dağıtım sisteminin temeli ve karmaşık uygulamaları devreye almak için çok uygun bir sistem.

Ve yine aynı belgelere göre, Roller :

... belirli değişken_dosyalarını, görevleri ve işleyicileri bilinen bir dosya yapısına göre otomatik olarak yükleme yolları. İçeriği rollere göre gruplamak, rollerin diğer kullanıcılarla kolayca paylaşılmasına da olanak tanır.

Bununla birlikte, bunlar ve farklı kullanım durumları arasındaki ayrım bana hemen açık değil. Örneğin, dosyamı /etc/ansible/hostsşöyle görünecek şekilde yapılandırırsam :

[databases]
mydb01.example.org
mydb02.example.org

[mail_servers]
mymail01.example.org
mymail_dr.example.org

... o zaman bu " [databases]" giriş nedir ... bir rol ? Veya bir yerde bir playbook YAML dosyasının adı? Veya başka bir şey?!?

Birisi bana bunların arasındaki farklılıkları açıklayabilirse, Ansible hakkındaki anlayışım büyük ölçüde artacaktır!

  • Başucu Kitabı, Rol [databases]ve benzeri girişler/etc/ansible/hosts
  • Başucu Kitapları YAML dosyalarının içinde tanımlanmışsa, Roller nerede tanımlanır?
  • ansible.cfgAnsible sunucusundaki yaşamın yanı sıra , Ansible'ı mevcut Başucu Kitapları / Rolleri ile nasıl eklerim / yapılandırırım? Örneğin ansible-playbook someplaybook.yaml, koştuğumda Ansible bu oyun kitabını nerede bulacağını nasıl biliyor?

2
Roller, işlevselliği daha sonra herhangi bir başucu kitabında gerektiğinde kullanılabilecek genelleştirilmiş "kitaplıklara" koyarak oyun kitaplarındaki kodu yeniden kullanılabilir hale getirmenin bir yoludur.
Juan Jimenez

tasksşeyler yapmak. playbooksgörevleri organize edin ve başlatın. rolesbelirli bir işlevi yerine getiren görevler, işleyiciler vb. organize edin. (Leri) playbookbaşlatmak için bazılarına ihtiyaç vardır role. Eğer koleksiyonu ne denir rolesve playbooks? Örneğin, sitenizdeki tüm ana bilgisayarların yapılandırmasını yöneten bir tane varsayalım.
fbicknel

Yanıtlar:


113

Başucu Kitabı - Rol - [veritabanları] ve / etc / ansible / hosts içindeki benzer girişler

[databases]bir grup ana bilgisayar için tek bir isimdir. Birden çok ana bilgisayara tek bir adla başvurmanıza olanak tanır.

Rol, ana bilgisayarı belirli bir role hizmet edecek şekilde yapılandırmak için bir dizi görev ve ek dosyadır .

Başucu Kitabı, ana bilgisayarlar ve roller arasında bir eşlemedir.

Örnek belgeleri , örneğin bir projedir. İki şey içerir:

  • Oyun kitapları. site.yml, webservers.yml, fooservers.ymlPlaybooks bulunmaktadır.
  • Roller: roles/common/ve buna göre roles/webservers/tanımları commonve webserversrolleri içerir .

Başucu kitabının ( webservers.yml) içinde aşağıdakilere benzer bir şey var:

---
- hosts: webservers <- this group of hosts defined in /etc/ansible/hosts, databases and mail_servers in example from your question
  roles: <- this is list of roles to assign to these hosts
     - common
     - webservers

Başucu Kitapları YAML dosyalarının içinde tanımlanmışsa, Roller nerede tanımlanır?

roles/*Dizinler içinde tanımlanırlar . Roller çoğunlukla YAML dosyaları kullanılarak tanımlanır, ancak her türden kaynakları da ( files/, templates/) içerebilir . Dokümantasyona göre rol tanımı şu şekilde yapılandırılmıştır:

  • / X / tasks / main.yml rolleri varsa, burada listelenen görevler oyuna eklenecektir
  • / X / handlers / main.yml rolleri varsa, burada listelenen işleyiciler oyuna eklenecektir
  • / X / vars / main.yml rolleri varsa, burada listelenen değişkenler oyuna eklenecektir
  • / X / meta / main.yml rolleri varsa, burada listelenen herhangi bir rol bağımlılığı rol listesine eklenir (1.3 ve sonrası)
  • Herhangi bir kopyalama görevi, dosyalara görece veya mutlak olarak yol vermek zorunda kalmadan / x / dosyalar / rollerinde başvurabilir
  • Herhangi bir komut dosyası görevi, göreceli veya mutlak olarak yönlendirmek zorunda kalmadan / x / dosyalar / rollerdeki komut dosyalarına başvurabilir
  • Herhangi bir şablon görevi, dosyalara göreceli veya mutlak olarak yol vermek zorunda kalmadan / x / templates / rollerinde başvurabilir
  • Herhangi bir dahil etme görevi, dosyalara görece veya mutlak olarak yol vermek zorunda kalmadan / x / görevler / rollerine başvurabilir

En önemli dosya roles/x/tasks/main.yml, burada rol yürütüldüğünde yürütülecek görevleri tanımlarsınız.

Ansible sunucusunda yaşayan ansible.cfg dışında, Ansible'ı mevcut Başucu Kitapları / Rolleri ile nasıl eklerim / yapılandırırım? Örneğin, ansible-playbook someplaybook.yaml'yi çalıştırdığımda Ansible bu oyun kitabını nerede bulacağını nasıl biliyor?

$ ansible-playbook someplaybook.yaml

Geçerli dizinin içinde bir başucu kitabı arayacak.

$ ansible-playbook somedir/somedir/someplaybook.yaml

somedir/somedir/Dizinin içinde bir başucu kitabı arayacak .

Projenizi tüm oyun kitapları ve rollerle birlikte sunucuya koymak sizin sorumluluğunuzdadır. Ansible'ın bununla hiçbir ilgisi yok.


Teşekkürler @Yaroslav Admin (+1) - hızlı bir takip sorusu: rollerin dizinlerin içinde tanımlandığını söylüyorsunuz , ancak sonra rolü gerçekte ne oluşturuyor? Başka bir deyişle, webservers.ymloyun kitabı, [webservers]sunucuları commonve webserversrolüyle eşler . Ama commonrole tam olarak ne dahildir ? Bunu dizinlerde tanımlamanın bir yolu yok, bu yüzden bu "rol dizinleri" içinde tipik YAML dosyaları var mı? Tekrar teşekkürler!
smeeb

@smeeb Evet, haklısınız rol o dizindeki dosyalar tarafından tanımlanır. Çoğunlukla YAML'dir, ancak başka dosya türlerini de içerebilirler. Daha fazla ayrıntı için güncellenmiş yanıta bakın.
Yaroslav Admin

36

Başucu Kitabı - Rol - [veritabanları] ve / etc / ansible / hosts içindeki benzer girişler

Roller, görevleri tek bir kapta gruplamanın bir yoludur. MySQL'i kurmak için, Postfix'i kurmak için başka bir rolünüz olabilir.

Bir başucu kitabı, neyin nerede olduğunu tanımlar . Burası, ana bilgisayarları (ana bilgisayar grupları, aşağıya bakın) ve bu ana bilgisayarlara uygulanacak rolleri tanımladığınız yerdir.

[databases]ve envanterinizdeki diğer girişler ana bilgisayar gruplarıdır. Ana grup grupları, bir oyunun çalıştırılacağı bir dizi ana bilgisayar tanımlar.

Oyun, bir oyun kitabındaki bir dizi görev veya roldür (veya her ikisi). Çoğu durumda (ve örneklerde) bir başucu kitabı yalnızca tek bir oyun içerir. Ama istediğin kadar alabilirsin. Araçlarla Yani rol çalışacak bir taktik kitabı olabilir postfixhostgroup üzerinde mail_serversve rol mysqlhostgroup üzerinde databases:

- hosts: mail_servers
  roles:
    - postfix

- hosts: databases
  roles:
    - mysql

Başucu Kitapları YAML dosyalarının içinde tanımlanmışsa, Roller nerede tanımlanır?

Ansible'da hemen hemen her şey, roller ve oyun kitapları için önemli olan YAML'de tanımlanmıştır.

Ansible sunucusunda yaşayan ansible.cfg dışında, Ansible'ı mevcut Başucu Kitapları / Rolleri ile nasıl eklerim / yapılandırırım? Örneğin, ansible-playbook someplaybook.yaml'yi çalıştırdığımda Ansible bu oyun kitabını nerede bulacağını nasıl biliyor?

AFAIK, çağırırken başucu kitabına giden yolu sağlamalısınız ansible-playbook. Yani mevcut dizinde ansible-playbook someplaybook.yamlolmasını beklerdim someplaybook.yaml. Ancak tam yolu sağlayabilirsiniz:ansible-playbook /path/to/someplaybook.yaml


13

Bu bir terminoloji / anlamsal soru. Temel bir tanım olsa bile öznel olabilir.

Benim görüşüm aşağıdaki gibidir:

Herhangi bir yapılandırma yönetimi / dağıtım sistemi şunları içerir:

  1. source data - hedef ana bilgisayarın yapılandırmasını oluşturmak için kullanılan veriler
  2. target data - hedef ana bilgisayarları tanımlamak için kullanılan veriler
  3. config changes- source datahedef ana bilgisayar üzerinden uyguladığımız kurallar / eylemler listesi /target data

Ansible terimleriyle:

  1. source data- verileri koyabileceğimiz çeşitli yerlerdir - group_vars, playbookvars, rolevars, vb., Bu yerler önceliği etkiler (aynı adlı bir değişken farklı yerlerde yeniden tanımlanırsa, değerinin ne olacağına dair çok özel kurallar vardır. ansible/ ansible-playbookyürütme sırasında değişken
  2. target data - envanterdir (Ayrıca, envanter içinde envanter / ana bilgisayar grubu değişkenlerini tanımlamak da mümkündür!)
  3. config changes - ansible 4 seviyeli soyutlamaya sahiptir:
    1. görev - tek eylem
    2. görev listesi - eylemlerin listesi
    3. rol - aynı 'konu' tarafından gruplandırılan eylemlerin listesi (veya listelerin listesi), genellikle tüm hedefler aynı ana bilgisayar / ana bilgisayar grubunda çalışıyor
    4. playbook - oyunların listesi, her biri muhtemelen farklı ana grupta çalışan, birkaç roles / tasks / görev listesi uygulayan (ve gibi özel görevler handlers)

'Yazılım' açısından - rol, yeniden kullanılabilecek kadar genel olmalıdır .

Ayrıca bazı (oldukça büyük) kuruluşlarda, 'roller' A grubu tarafından gönderilirken, B grubu tarafından tutulan oyun kitaplarında kullanılır.

özet

Yukarıdakilerin tümü benzer konfigürasyonların bir role. ilgili alt sistemleri / bileşenleri tek bir grupta gruplamak playbook. Ayrıca, söz değer bir oyun kitabında 1 YAML öğe (dahil hosts:ve ya ya tasks, pre_tasks, post_tasks, rolesbir adlandırılır)play

Şimdi sorunuz için:

Evet, ilk başta kafa karıştırıcı.

Genellikle source datarolünüzün anlambilgisine bağlanırsınız , bu nedenle setup_dbbir oyunda ilgili ana bilgisayar grubuna uygulandığını gördüğünüzde (örneğin db_hosts) Ancak a play, birkaç ana bilgisayar grubunun bir birleşimi üzerinden çalışıyor olabilir. Bu sadece esnekliğe karşı bir kongre meselesi.

PS

Lütfen bunun kafa karışıklığını artırıp artırmadığını veya açıklığa kavuşturulduğunu bana yazın. Teşekkürler.


2

Basit ifadeyle:

Bir başucu kitabı ana program gibidir, işi bitirmek için eksiksiz talimatlar içerir. Ancak, büyük projeler için, aslında her detayı içine koymak arzu edilmez. Yani role ihtiyacın var.

Rol, bir alt yordamdır ve genellikle tek bir hedefe ulaşır, örneğin bir veritabanı sunucusu kurmak. roles/Dizine koyabilir veya URI'leri sağlayarak 3. taraf rollerini indirebilir rolesfile.ymlve ansible-galaxy'den bunları sizin için indirmesini isteyebilirsiniz .

[database]Tanımlanan bir konak grubudur envanter dosyasına listeleri barındıran ait olduğunu o databasegrubun. Ayrıca, aşağıdaki gibi bir şey belirterek bir web sunucusu grubu da belirtebilirsiniz.

[web]
web1.example.com
web2.example.com

Grup webveya databasedaha sonra uygulanacak ana bilgisayarları belirtmek için başucu kitaplarında veya rollerde kullanılabilir.

Gruplar ayrıca ansiblead-hoc komutları çalıştırmak için komutta da kullanılabilir .


1

Ayrıca, farklı rolleri etkilemesi amaçlanan bir meta dosyası kullanılırsa, bir başucu kitabının birden fazla rolü çağırabileceğini unutmayın.

Örnek Başucu Kitabı: dual_role-playbook.yml

- name: Some Action for two roles
  hosts: localhost

  vars_files:
    - roles/dual_role/meta/main.yml

  roles:
    - dual_role/container-1
    - dual_role/container-2

Rol klasörü ve dosya düzeni şöyle görünecektir:

dual_role-playbook.yml
  -- roles
     -- dual_role
        -- meta/main.yml
        -- container-1
           -- tasks/main.yml
           -- templates/template.j2
        -- container-2
           -- tasks/main.yml
           -- templates/template.j2
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.