Introduzione (2023)

Benvenuti! Siamo qui per fornirvi un articolo completo e dettagliato sulle modalità di acquisizione dell'input dagli utenti durante l'esecuzione di un playbook Ansible. Capiremo come ottenere input dagli utenti utilizzando la direttiva vars_prompt e il modulo pause. Queste due opzioni offrono diverse possibilità di interazione con gli utenti e possono essere utilizzate in base alle esigenze specifiche del vostro playbook.

Ottenere l'input utilizzando la direttiva vars_prompt

La direttiva vars_prompt viene eseguita come primo passaggio quando si avvia il playbook. Di seguito è riportata la sintassi per la direttiva vars_prompt:

vars_prompt:
  - name: nome_variabile
    prompt: Messaggio di prompt
    private: False
    default: valore_predefinito
    confirm: True
  • name: Questa è la variabile in cui viene memorizzato l'input fornito dall'utente.
  • prompt: Messaggio di prompt visualizzato nell'output.
  • private: Quando impostato su True, l'input dell'utente non verrà visualizzato nel terminale mentre viene digitato.
  • default: Imposta il valore predefinito se l'utente non fornisce alcun input.
  • confirm: Richiede una doppia conferma da parte dell'utente.

Ecco un esempio di playbook che utilizza la direttiva vars_prompt:

---
- name: Ottenere l'input dell'utente durante l'esecuzione del playbook
  hosts: localhost
  connection: local
  gather_facts: False
  vars_prompt:
    - name: user_input
      prompt: Scegli la versione [1.0, 2.0, 3.0]
      private: False
      default: 3.0
      confirm: True
  tasks:
    - name: Task 1
      ansible.builtin.debug:
        var: user_input

Potete copiare e incollare il codice sopra riportato nel vostro playbook e eseguirlo utilizzando il comando seguente:

$ ansible-playbook playbook_name.yml

Ottenere l'input utilizzando il modulo pause

Il modulo pause viene fornito con l'installazione di Ansible ed è utilizzato per sospendere l'esecuzione del playbook per un determinato periodo di tempo o in attesa dell'input dell'utente.

Il playbook seguente contiene tre task che illustrano l'utilizzo del modulo pause:

---
- name: PAUSE MODULE - Ottenere l'input dell'utente durante l'esecuzione del playbook
  hosts: localhost
  connection: local
  gather_facts: False
  tasks:
    - name: Pausa per 3 secondi
      ansible.builtin.pause:
        seconds: 3

    - name: Utilizzo del modulo pause per ottenere l'input dell'utente
      ansible.builtin.pause:
        prompt: "Scegli la versione di rilascio: "
        echo: True
      register: response

    - name: Stampa la risposta dell'utente
      ansible.builtin.debug:
        var: response.user_input

Differenza tra la direttiva vars_prompt e il modulo pause

Ora che conoscete la sintassi di entrambi, è importante capire la differenza tra la direttiva vars_prompt e il modulo pause in modo da poter scegliere quello più adatto alle vostre esigenze.

La direttiva vars_prompt viene eseguita sempre prima di qualsiasi ruolo o task nel playbook. Anche se avete dei pre_tasks nel playbook, la direttiva vars_prompt verrà eseguita prima dei pre_tasks. Pertanto, se il vostro caso d'uso richiede di ottenere l'input dell'utente come primo passaggio, la direttiva vars_prompt sarà una buona scelta.

Il modulo pause, invece, viene eseguito come task separato e può essere utilizzato per ottenere l'input dell'utente in qualsiasi punto del playbook. È possibile creare un pre_task utilizzando il modulo pause e eseguirlo come primo task nel playbook.

Esecuzione basata su tag

Non è possibile applicare tag alla direttiva vars_prompt. Se si tenta di aggiungere un tag, si otterrà un errore. D'altra parte, è possibile creare tag per i task che utilizzano il modulo pause. In questo modo, è possibile raggruppare più task che richiedono risposte dall'utente e eseguirli utilizzando i tag.

Esecuzione basata su condizioni

Se si desidera eseguire la direttiva vars_prompt in base a una condizione, si otterrà un errore. Al contrario, l'esecuzione basata su condizioni è possibile utilizzando il modulo pause. È possibile controllare se una variabile è impostata su un determinato valore e quindi eseguire il task corrispondente o saltarlo.

Input multipli in un singolo task utilizzando i cicli

Non è possibile utilizzare i cicli nella direttiva vars_prompt, ma è possibile utilizzarli con il modulo pause per richiedere input multipli dall'utente con un singolo task. Nel playbook seguente, il primo task richiede più risposte dall'utente utilizzando il ciclo e le memorizza come una lista di valori di dizionario. Il secondo task stampa gli input.

---
- name: Utilizzo dei cicli per ottenere input multipli dall'utente
  hosts: localhost
  connection: local
  gather_facts: False
  tasks:
    - name: Utilizzo del modulo pause per ottenere l'input dell'utente
      ansible.builtin.pause:
        prompt: "{{ item }}"
        echo: True
      register: response
      loop:
        - "Scegli la versione di rilascio: "
        - "Premi [Yy] per un build incrementale: "

    - name: Stampa la risposta dell'utente
      ansible.builtin.debug:
        var: response.results[item].user_input
      loop:
        - 0
        - 1

Passaggio dell'input dell'utente utilizzando l'opzione -e

Come alternativa alla direttiva vars_prompt e al modulo pause, è possibile creare variabili vuote e passare i valori utilizzando l'opzione -e durante l'esecuzione del playbook. Nel playbook seguente, ho creato due variabili. La prima variabile è vuota e il valore della seconda variabile è impostato su "n", che fungerà da valore predefinito se l'utente non fornisce alcun input.

---
- name: Validazione dell'input dell'utente
  hosts: localhost
  connection: local
  gather_facts: False
  vars:
    release_version: ""
    incremental_build: "n"
  pre_tasks:
    - name: Validazione dell'input dell'utente
      ansible.builtin.debug:
        msg: "Sto creando con la versione {{ release_version }} e l'incremental_build è impostato su {{ incremental_build }}"

È possibile passare i valori utilizzando l'opzione -e, che ha la precedenza:

$ ansible-playbook -i ../../config/hosts from_command_line.yml -e "release_version=1.15" -e "incremental_build=y"

Conclusione

Ora avete una buona comprensione di come ottenere l'input dagli utenti durante l'esecuzione di un playbook Ansible. Abbiamo esaminato l'utilizzo della direttiva vars_prompt, del modulo pause e dell'opzione -e per passare l'input dell'utente. Speriamo che queste informazioni vi siano state utili e vi auguriamo buona fortuna nella vostra avventura con Ansible!

Grazie per aver letto il nostro articolo completo sulle modalità di acquisizione dell'input dagli utenti durante l'esecuzione di un playbook Ansible. Speriamo che queste informazioni vi siano state utili e vi auguriamo buona fortuna nella vostra avventura con Ansible!

References

Top Articles
Latest Posts
Article information

Author: Lidia Grady

Last Updated: 10/01/2024

Views: 5939

Rating: 4.4 / 5 (45 voted)

Reviews: 84% of readers found this page helpful

Author information

Name: Lidia Grady

Birthday: 1992-01-22

Address: Suite 493 356 Dale Fall, New Wanda, RI 52485

Phone: +29914464387516

Job: Customer Engineer

Hobby: Cryptography, Writing, Dowsing, Stand-up comedy, Calligraphy, Web surfing, Ghost hunting

Introduction: My name is Lidia Grady, I am a thankful, fine, glamorous, lucky, lively, pleasant, shiny person who loves writing and wants to share my knowledge and understanding with you.