Ansible gruppo di variabile non definita in gioco

0

Domanda

Ho implementato un inventario dinamico per Ansible, durante la sua esecuzione si definisce una variabile di gruppo che sto usando più tardi, in un playbook.

Nel playbook, io sto usando due volte:

  • per il looping oltre il suo contenuto:
    tasks:
       - include_tasks: include/restart.yaml
         loop: "{{ host_set | default(['all']) }}"
         loop_control:
           loop_var: h
    
  • e come un mezzo per impostare la seriale in modo condizionale
    serial: "{{ host_set | default(false) | ternary('100%', '5') }}"
    

Il comportamento credo che non mi riesco a spiegare è che il host_set variabile è definita e compilato correttamente durante l'esecuzione di attività, ma quando cerco di impostare serial sembra di essere definito.

Questo è il comportamento previsto, sono Ansible gruppo di variabili indefinite quando l'impostazione di un gioco gli attributi, ma il pop-up quando l'esecuzione dell'attività per quel particolare gioco inizia?

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

Migliore risposta

3

Le variabili di gruppo si applicano solo per i singoli host. I giochi sono valutati in un non-host contesto, in modo che le uniche variabili che sono disponibili non sono specifiche dell'host variabili, come ad esempio quelli --extra-vars.

2021-11-24 01:32:48
1

Quando la ragione di questo comportamento è perfettamente indicato da @flowerysong la risposta, c'è una soluzione alternativa che è possibile utilizzare per ottenere il vostro requisito.

Il trucco è usare il fatto che si possono definire due svolge all'interno di un playbook e, quindi, utilizzare la variabile impostata su host(s) del primo gioco.

Così, che cosa stiamo andando a fare è:

  1. Eseguire un gioco localhost e impostare un dato di fatto provenienti dal gruppo di host che vogliamo target nel secondo gioco
  2. Facoltativamente: anche io ho definito un target_hosts variabile nel primo gioco, per essere sicuri che, se la seconda partita di destinazione) viene modificato l'host variabile di gruppo è sempre quello che la seconda partita andando a bersaglio.
  3. Utilizzare tale variabile nel secondo gioco, da localhost's hostvars

Nota Extra: non c'è nessun gusti sono gusti, ma io preferisco l' inline se il ternary filtro, comunque, sono assolutamente equivalenti.


Così, dato il playbook:

- 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: 
  • Quando viene eseguito con host_set: true nel nodesgruppo:
    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   
    
  • Quando viene eseguito con host_set: false nel nodesgruppo:
    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

Grazie per le informazioni supplementari!
Radu Stoenescu

In altre lingue

Questa pagina è in altre lingue

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