Oyunda tanımlanamayan Ansible grup değişkeni

0

Soru

Ansible için dinamik bir envanter uyguladım, yürütülmesi sırasında daha sonra bir oyun kitabında kullandığım bir grup değişkenini tanımlar.

Oyun kitabında iki kez kullanıyorum.:

  • içeriği üzerinde döngü yapmak için:
    tasks:
       - include_tasks: include/restart.yaml
         loop: "{{ host_set | default(['all']) }}"
         loop_control:
           loop_var: h
    
  • ve şartlı olarak seri ayarlamak için bir araç olarak
    serial: "{{ host_set | default(false) | ternary('100%', '5') }}"
    

Açıklayamadığım davranış şu: host_set değişken, görev yürütme sırasında doğru şekilde tanımlanır ve doldurulur, ancak ayarlamaya çalışırken serial tanımlanmamış gibi görünüyor.

Bu beklenen davranış mı, bir oyunun özniteliklerini ayarlarken Ansible grup değişkenleri tanımlanmamış mı, ancak daha sonra bu belirli oyun için görev yürütme başladığında açılır mı?

ansible
2021-11-23 21:48:17
2

En iyi cevabı

3

Grup değişkenleri yalnızca tek tek ana bilgisayarlar için geçerlidir. Oynatmalar ana bilgisayar dışı bir bağlamda değerlendirilir, bu nedenle kullanılabilen tek değişkenler, ana bilgisayara özgü olmayan değişkenlerdir, örneğin --extra-vars.

2021-11-24 01:32:48
1

Bu davranışın nedeni @flowerysong'un cevabı tarafından mükemmel bir şekilde ifade edildiğinde, gereksiniminize ulaşmak için kullanabileceğiniz bir geçici çözüm vardır.

İşin püf noktası, bir oyun kitabının içinde iki oyun tanımlayabilmeniz ve ardından ilk oyunun ana bilgisayar(lar) ında ayarlanan değişkeni kullanabilmenizdir.

Peki, ne yapacağız ne:

  1. Bir oyun çalıştırın localhost ve ikinci oyunda hedeflemeyi hedeflediğimiz ev sahibi gruptan gelen bir gerçeği belirledik
  2. İsteğe bağlı olarak: Ayrıca bir tanımladım target_hosts değişken ilk oyunda, ikinci oyunun hedefi değiştirilirse, ana grup değişkeninin her zaman ikinci oyunun hedefleyeceği değişken olduğundan emin olmak için.
  3. Bu değişkeni ikinci oyunda kullanın: localhost'shostvars

Ekstra not: tat için bir muhasebe yoktur, ancak satır içi tercih ederim ternary filtre, yine de, kesinlikle eşdeğerdir.


Bu yüzden, senaryo verilen :

- hosts: localhost
  gather_facts: no

  tasks:
    - set_fact:
        target_hosts: nodes
        
    - set_fact:
        host_set: "{{ hostvars[groups[target_hosts].0].host_set }}"

- hosts: "{{ hostvars.localhost.target_hosts }}"
  gather_facts: no
  serial: "{{ '100%' if hostvars.localhost.host_set else '1' }}"
  
  tasks:
    - debug: 
  • İle çalıştırıldığında host_set: true in the nodes grup:
    PLAY [localhost] *******************************************************************************************************************
    
    TASK [set_fact] ********************************************************************************************************************
    ok: [localhost]
    
    TASK [set_fact] ********************************************************************************************************************
    ok: [localhost]
    
    PLAY [nodes] ***********************************************************************************************************************
    
    TASK [debug] ***********************************************************************************************************************
    ok: [node1] => 
      msg: Hello world!
    ok: [node2] => 
      msg: Hello world!
    ok: [node3] => 
      msg: Hello world!
    
    PLAY RECAP *************************************************************************************************************************
    localhost                  : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
    node1                      : ok=1    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
    node2                      : ok=1    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
    node3                      : ok=1    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
    
  • İle çalıştırıldığında host_set: false in the nodes grup:
    PLAY [localhost] *******************************************************************************************************************
    
    TASK [set_fact] ********************************************************************************************************************
    ok: [localhost]
    
    TASK [set_fact] ********************************************************************************************************************
    ok: [localhost]
    
    PLAY [nodes] ***********************************************************************************************************************
    
    TASK [debug] ***********************************************************************************************************************
    ok: [node1] => 
      msg: Hello world!
    
    PLAY [nodes] ***********************************************************************************************************************
    
    TASK [debug] ***********************************************************************************************************************
    ok: [node2] => 
      msg: Hello world!
    
    PLAY [nodes] ***********************************************************************************************************************
    
    TASK [debug] ***********************************************************************************************************************
    ok: [node3] => 
      msg: Hello world!
    
    PLAY RECAP *************************************************************************************************************************
    localhost                  : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
    node1                      : ok=1    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
    node2                      : ok=1    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
    node3                      : ok=1    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
    
2021-11-24 11:14:59

Ekstra bilgi için teşekkür ederiz!
Radu Stoenescu

Diğer dillerde

Bu sayfa diğer dillerde

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................