Ansiblu grup de variabile nedefinite în joc

0

Problema

Am implementat o dinamică de inventar pentru Ansiblu, în timpul execuției sale se definește un grup de variabile care eu sunt, folosind mai târziu într-o carte.

În playbook, eu sunt, folosind de două ori:

  • pentru looping peste conținutul său:
    tasks:
       - include_tasks: include/restart.yaml
         loop: "{{ host_set | default(['all']) }}"
         loop_control:
           loop_var: h
    
  • și ca un mijloc de a stabili serial condiționat
    serial: "{{ host_set | default(false) | ternary('100%', '5') }}"
    

Comportamentul înțeleg că nu-mi pot explica este faptul că host_set variabila este definită și populate în mod corect în timpul execuției sarcinii, dar atunci când încearcă să stabilească serial se pare a fi nedefinită.

Acest lucru este așteptat de comportament, sunt Ansiblu grup de variabile nedefinite atunci când se stabilește un joc atributele, dar pop-up mai târziu, atunci când sarcina de executie pentru acea piesă începe?

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

Cel mai bun răspuns

3

Grupul de variabile se aplică doar individual gazde. Piesele de teatru sunt evaluate într-un non-gazdă context, deci singurele variabile care sunt disponibile sunt non-host-variabile specifice, cum ar fi cele de la --extra-vars.

2021-11-24 01:32:48
1

Atunci când motivul acestui comportament este foarte bine precizat de @flowerysong răspunsul lui, nu este o soluție pe care o puteți folosi pentru a obține dvs. cerință.

Trucul este folosind faptul că puteți defini două piese în interiorul-o carte și, apoi, utilizați set de variabile pe gazdă(s) de la primul play.

Deci, ce am de gând să faceți este:

  1. Rula un joc de localhost și a stabilit un fapt vine de la gazdă grupul pe care dorim să-țintă în cel de-al doilea joc
  2. Opțional: am, de asemenea, definit un target_hosts variabilă în primul joc, pentru a fi sigur că, dacă cel de-al doilea play-țintă este modificat, gazda grup variabilă este întotdeauna cel de-al doilea joc este de a merge la țintă.
  3. Utilizarea ca variabilă în cel de-al doilea joc, de localhostmodelului hostvars

Notă suplimentară: nu există nici o contabilitate pentru gusturile, dar eu prefer inline dacă la ternary filtru, încă, acestea sunt strict echivalente.


Deci, având în vedere schemele:

- 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: 
  • Atunci când a alerga cu host_set: true în nodesgrup:
    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   
    
  • Atunci când a alerga cu host_set: false în nodesgrup:
    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

Multumesc pentru informatii suplimentare!
Radu Stoenescu

În alte limbi

Această pagină este în alte limbi

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