Ansible Galaxy rolleri otomatik olarak nasıl kurulur?


129

Tüm Ansible oyun kitaplarım / rollerim git depomda kontrol edildi.

Bununla birlikte, Ansible Galaxy rolleri için, Ansible'ı çalıştırmak istediğim her makineye bunları birer birer indirmem gerekiyor.

Ansible, çalışma zamanında eksik bir rol hakkında şikayette bulunana kadar tam olarak hangi Ansible Galaxy rollerinin gerekli olduğunu önceden bilmek bile zor.

Ansible Galaxy rol bağımlılıkları nasıl yönetilir? Ya onların cevaplanabilir kodumun geri kalanıyla birlikte git depomda kontrol edilmesini ya da Ansible'ı yeni bir makinede çalıştırdığımda otomatik olarak tanımlanmasını ve indirilmesini istiyorum.


galaxy.ansible.com/docs/using/index.html İşte ansible-galaxy kullanmak için ihtiyacınız olan her şey. İyi yapılmış bir doktor! Başlangıç ​​seviyesindeyseniz bile :)
Ayra

@pdeva Aşağıdaki geçerli cevaplardan birini kabul edebilir misiniz?
GG.

Yanıtlar:


149

requirements.ymlBu kullanım örneği için bir dosya kullanmalısınız. Çeşitli yükleme yöntemlerinden herhangi birini kullanarak ihtiyaç duyduğunuz rolleri açıklayın:

# Install a role from the Ansible Galaxy
- src: dfarrell07.opendaylight

# Install a role from GitHub
- name: opendaylight
  src: https://github.com/dfarrell07/ansible-opendaylight

# Install a role from a specific git branch
- name: opendaylight
  src: https://github.com/dfarrell07/ansible-opendaylight
  version: origin/master

# Install a role at a specific tag from GitHub
- name: opendaylight
  src: https://github.com/dfarrell07/ansible-opendaylight
  version: 1.0.0

# Install a role at a specific commit from GitHub
- name: opendaylight
  src: https://github.com/dfarrell07/ansible-opendaylight
  version: <commit hash>

Ardından bunları kurun:

ansible-galaxy install -r requirements.yml

İşte çalışan bir örnek (Ansible'ı Vagrant sağlama aracı olarak kullanarak OpenDaylight'ı kurma). Daha fazla bilgi için ilgili Ansible belgelerine bakın .


Ayrıca aşağıdaki @ Kieran Andrews cevabına da bakın. Bunu genişletir.
Marco Ferrari

1
Bu, bir başucu kitabının rol bağımlılıklarını gerçekten otomatik olarak yüklemiyor, başucu kitabını yapan insan tarafından manuel olarak listelenmiş bir bağımlılıklar listesini açıkça yüklüyor.
Neil

53

Önerildiği gibi, bu ihtiyaç için cevapsız galaksi kullanabilirsiniz.

Ansible, requirements.ymltüm rollerinizi listeleyen bir dosya oluşturabileceğiniz bir özelliğe sahiptir . Bununla ilgili bilgiyi burada bulabilirsiniz: http://docs.ansible.com/ansible/latest/galaxy.html#installing-multiple-roles-from-a-file

Örneğin (requirements.yml):

- src: yatesr.timezone

Daha sonra ansible-galaxy install -r requirements.ymlburada listelenen tüm rolleri indirmek için bu dosya üzerinde çalıştırırsınız .

Daha fazla otomatikleştirmek isterseniz, iki komutu çalıştıracak basit bir kabuk betiği oluşturabilirsiniz.

Örneğin (ansible.sh):

./ansible.sh

ansible-galaxy install -r requirements.yml
ansible-playbook playbook.yml -i inventory 

1
Henüz test edildi, rollerin zaten indirildiğini, hata olmadığını belirten bir mesaj görüntüler. Version2.2.1
Igonato

Başucu kitabı, yüklediğiniz galaksi rollerini kullanırsa, oyun kitabı ilk kez çalıştırıldığında çalışmaz, çünkü bunlar indirilmeden önce varlıkları kontrol edilir. Başucu kitabını ikinci kez aramak, yeni yüklenen rolleri alacaktır.
Ben

Komutları azaltmak için bir sarmalayıcı betiği ile şimdi nasıl yaptığımı güncelledim.
Kieran Andrews

19

Sık sık kendimi bir Java JDK kurarken buluyorum. Bir rol kullanmak bu dokunuşu kolaylaştırır. Birkaç farklı yol denedim (birçok .gitmodül ve alt modül dahil ... İş için birden çok git sistemi kullanmam gerekiyor ve her şey çirkinleşiyor). En büyük gereksinimim, rol kodunu oyun kitabı projemde kontrol etmemem, çoğunlukla her şeyi tek bir yerde tutabilmem için.

'Requirements.yml' dosyamın içeriği:

- src: https://github.com/staylorx/ansible-role-wls-prep.git
  version: master
  name: staylorx.wls-prep

- src: https://my-work-git-extravaganza.com
  version: 2.x
  name: coolplace.niftyrole

#From Ansible Galaxy
- src: staylorx.oracle-jdk

Ayrı bir başucu kitabı çalıştırıyorum, install-roles.yml:

---

- hosts: localhost

  tasks:
    - file:
        path:  roles
        state: absent

    - local_action:
        command ansible-galaxy install -r requirements.yml --roles-path roles

    - lineinfile:
        dest:   .gitignore
        regexp: '^\/roles$'
        line:   '/roles'
        state:  present

Bu ilk oyun kitabını çalıştırıyorum, ardından normal şekilde herhangi bir oyun kitabındaki rollerimi çalıştırıyorum. Benim için sır, git tarafından görmezden gelinmesini sağlamaktır, bu yüzden yanlışlıkla rolleri kontrol etmiyorum. Ayrıca, klasörü her seferinde sildiğim için, hataları zorlamama veya yok saymama gerek olmadığından emin oluyorum.


Siz yerel komutu çalıştırmadan önce 'rol bulunamadı' ile başarısız olur.
Daniel Andrei Mincă

1
@ Mincă Daniel Andrei dinamik bir yol kullanmanız gerekiyor, ex include_role. bunu kontrol et
user1686407

4

Diğer bir çözüm de git alt modüllerini kullanmaktır. Sonuçta, Ansible Galaxy yalnızca bir github depoları dizini ...

Herhangi bir Galaxy rolünü bir alt modül olarak otomatik olarak eklemek için bu komutu kullanıyorum:

ansible-galaxy info <package> | grep -A 1 github_repo | tr '\n' ' ' | sed -e "s/.*github_repo: \([^[:space:]]*\)[^\w]*github_user: \([^[:space:]]*\)[[:space:]]*/git submodule add git:\/\/github.com\/\2\/\1.git roles\/\2.\1/g" | sh

Değişiklikleri git deponuza işleyin. Deponuzu gelecekte klonladığınızda alt modüller ile klonladığınızdan emin olun, örn.git clone ... --recursive

Bunun bir avantajı, git alt modülünün her zaman belirli bir sürüme (git commit-hash) başvurmasıdır. Bu, üretken ortamınızda test edilmemiş güncellemeleri çalıştırmanızı önleyecektir. Galaxy rolünün yeni bir sürümünde hatalar olabilir veya öncekinden tamamen farklı çalışabilir. Git alt modülü ile bir rolü yeni sürüme güncelleyip güncellemeyeceğinize ve ne zaman güncelleyeceğinize karar verirsiniz.

Ayrıca, .gitignorekodlarının deponuza işlenmesini önlemek için , galaksi rollerinizi kara listeye almakla da ilgilenmeniz gerekmez.


5
Bu bence kötü bir uygulama. Bağımlılık yönetimi araçlarını kullanmak ve ardından SCM depolarını birbirine yapıştırmak genellikle daha kolaydır, özellikle de SCM için git alt modülleri hakkında konuştuğumuzda.
David Resnick

1
Kabul. Aslında artık bunu kullanmıyorum. Yine de, cevapsız galaksi mükemmel olmaktan uzak olduğu için geçerli bir yaklaşımdır. Galaxy, gereksinimler dosyanızda bir sürüm çarpılmış olsa bile güncellemeleri kontrol etmez, eğer onu belgelenmemiş --forcebayrakla tüm rolleri yeniden indirmeye zorlarsanız, gerçekten neyin değişip değişmediğini veya neyin değiştiğini göstermez. Bu, yalnızca indirilen galaksi rollerini SCM'de tutarsanız kontrol edebileceğiniz bir kara kutu. Diğer nedenlerden dolayı bu yine de iyi bir fikir. Alt modülleri çekerken en azından hangi rollerin değiştiğini görürsünüz.
udondan

BTW, alt modüllerin sahip olduğu tüm sorunlar, AFAIK bu durumda önemsizdir çünkü içeriklerini değiştirmekle ilgilidir.
Çekmek

4

Komut modülünü kullanarak gerekli rolleri yüklemek için Ansible rolü kullanabilirsiniz .

İşte çalışan çok basit bir örnek ansible-galaxy install:

- name: Install roles from Ansible Galaxy
  command: ansible-galaxy install {{ item.item }}
  with_items:
    - "{{ ansible_roles_list }}"

ansible_roles_listBir değişken olarak ya da bir rol parametre olarak temin edilebilir.

Bunu bir rolde yaparsanız, onu kullanarak yüklemek istediğiniz diğer rollerden önce ayrı bir oyun kitabında uygulanması gerekir. Bunun nedeni Ansible'ın, onlara referans verdiğiniz oyun kitabını çalıştırmadan önce tüm rollerin mevcut olup olmadığını kontrol etmesidir.


yumurta ve tavuk :)
bazeusz

2

Zamanın bu noktasında, bildiğim kadarıyla çalışma zamanında rolleri indirmenin otomatik bir yolu yok. En iyi bahsiniz, bunları kendi deponuza dahil etmek veya tüm gereksinimleri listeleyen uygun bir dokümantasyona sahip olmaktır. Rollerinizi yükleyen bir uçuş öncesi oyun kitabı bile oluşturabilirsiniz. :)


3
Bunun için bir requirements.txt dosyası kullanabilirsiniz. Bakınız: docs.ansible.com/…
toast38coza

0

Burada gereksinimlerim rol üzerinedir ve install.yml dosyasında kullanılır

main.yml

 # tasks file for MY_ROLE
- name: Install requirements
  local_action: command ansible-galaxy install -r {{ role_path }}/requirements.yml -p /etc/ansible/roles

- include_tasks: install.yml 
.  
├── playbook.yml  
├── inventory  
├── roles  
│    └── My_Role   
│        ├── tasks  
│        │   └── main.yml  
│        │   └── install.yml  
│        └── requirements.yml

0

Gereksinimler.yml, projenizin roller dizininde bulunuyorsa, Tower / AWX rolleri otomatik olarak yükler.

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.