Ansible: Host tarafından bir Görev Ana Bilgisayarı nasıl çalıştırılır?


15

Oyun düzeyinde, serial: 1tüm oyunu aynı anda bir ana bilgisayarda çalıştırmamıza izin vermeliyiz . Ancak bunu tek bir görevde yapmanın basit bir yolunu bulamadım. Bu, söz konusu görev uygun bir kilitleme (herhangi bir nedenle) yapmazsa, özellikle önemlidir.

Açık bir cevap, görevi kendi oyununa sokmaktır. Ancak bu rollere yardımcı olmaz. ( serial: 1Rolü kullanarak oyuna girmek gerçekten sezgisel değil.)

Yanıtlar:


12

Başucu kitabınızdaki adımları gerçekleştirirken herhangi bir paralellik istemiyorsanız, çatal düzeyini 1 olarak ayarlayın:

ansible-playbook --forks=1 ...

Bunu ansible cfg dosyanıza da koyabilirsiniz:

[defaults]
forks=1

ancak tek tek isterseniz yukarıdaki komut satırı seçeneğini kullanın.

DÜZENLE:

serial: 1tamamen farklı bir şey yapar: bu, her bir ana makine için oyun kitabını sırayla çalıştırmak, bir sonraki ana bilgisayara geçmeden önce tüm oyun kitabının tamamlanmasını beklemek gibidir. forks=1bir sonraki ana bilgisayarda aynı görevi çalıştırmadan önce bir oyundaki ilk görevi bir ana bilgisayarda çalıştırmak anlamına gelir, bu nedenle ilk görev bir sonraki göreve dokunulmadan önce her ana makine için çalıştırılacaktır.

Yani forks=1sadece bir oyun istiyorsun ; maalesef şu anda mümkün değil.


2
Bunu bütün bir oyun kitabına koymak istemiyordum. Tanecikli olmayana kadar bu kadar. serial: 1en azından bir oyuna koyalım. Ama ben sadece bir oyunun bir alt setine koymak istiyorum (bunun doğru adı ne olursa olsun. Ben "görev" olduğunu düşündüm, ama yukarıdaki yorum katılmıyor gibi görünüyor).
Elrond

3
serial: 1tamamen farklı bir şey yapar: bu, her bir ana makine için oyun kitabını sırayla çalıştırmak, bir sonraki ana bilgisayara geçmeden önce tüm oyun kitabının tamamlanmasını beklemek gibidir. forks=1bir sonraki ana bilgisayarda aynı görevi çalıştırmadan önce bir oyundaki ilk görevi bir ana bilgisayarda çalıştırmak anlamına gelir , bu nedenle ilk görev bir sonraki göreve dokunulmadan önce her ana makine için çalıştırılacaktır. Yani forks=1sadece bir oyun istiyorsun ; maalesef şu anda mümkün değil.
wurtel

İyi bir nokta! Bunu cevaba eklemek ister misiniz?
Elrond

2

Bu soruna geçici bir çözüm vardır - biri ana bilgisayarların (veya bir grubun) listesine geçebilir with_itemsve daha sonra delegate_tobu listeyle birlikte kullanılabilir . Bu şekilde görev, ana makine tarafından ana makine tarafından yürütülür.

Örneğin:

- name: start and enable rabbitmq (run task host by host)
  service:
    name: "rabbitmq-server"
    state: "started"
    enabled: true
  delegate_to: "{{ item }}"
  with_items: "{{ groups['rabbitmq-cluster'] }}"
  run_once: true

Neden run_once: trueorada olduğunu merak edenler için dışarı çıkarmayı deneyin. Olanlardan hoşlanmayacaksınız. (çok fazla tekrarlanan çalışır aaaahhhh)
Almenon

1

Tek bir makinede yürütüyorsanız, birden fazla ana bilgisayar için özel kilit sorunu ortaya --forks=1çıkar.Yani tüm ana bilgisayarlar için birer birer yürütmeniz gerekir. Bunun için ansible playbook komutunu çağırırken ayarlanmış olmanız gerekir . Örnek: ansible-playbook webserver.yml --forks=1webserver.yml uygulamasının içinde app01 ve app02 var[webserver]


0

Ne istediğini düşün

run_once: doğru


4
nope: "run_once: true", ana bilgisayar listesinde tam olarak bir ana bilgisayar için görevi çalıştırmak anlamına gelir. Listedeki her ana bilgisayar için birbiri ardına çalıştırmak istiyorum.
Elrond

0

Yerel olarak çalıştırılabilen komutlar için, oyundaki tüm ana bilgisayarları yinelemek için bir döngü kullanın. Bu SADECE komut yerel olarak çalıştırılabilirse çalışır. Ayrıca, tuşlar kuruluysa, uzak makinelere bu şekilde ssh ile bir komut çalıştırabilirsiniz, ancak yükseltme hakkında konuşurken zorlaşır.

ÖRNEĞİN:

- name: Init New Appliances - Remove the known hosts entry for the server in case it has changed
  run_once: yes
  connection: local
  become: no
  command: "ssh-keygen -R {{ item }}"
  with_items:
  - "{{ inventory_hostname }}"

1
Sadece adlı ana bilgisayar yerine ana bilgisayarların bir listesini sağlamanız gerekir inventory_hostname, aksi takdirde döngü bir anlam ifade etmez.
Konstantin Suvorov
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.