1 votes

Ansible attend une erreur de regex

Je suis un débutant en Ansible. J'essayais d'utiliser expect avec Ansible pour automatiser l'installation de packages (désinstallation dans l'exemple ci-dessous). Lors de la désinstallation manuelle du package lynx, j'obtiens le prompt suivant. Dans le champ de réponse d'expect - j'essayais de faire correspondre ce motif (les deux lignes) mais mon script échoue. Bien que cela fonctionne pour une ligne - Est-ce que c'est ok [y/N] : y. L'expression régulière que j'ai utilisée pour les deux lignes est Installed size: 5.4 M\nIs this ok [y/N]: y

-----------------------
Installed size: 5.4 M
Is this ok [y/N]: 
----------------------

Code 1 (correspondance de motif pour les deux lignes - échec) :

[ansible@localhost ansible]$ cat main.yml
---
- hosts: localhost 
  remote_user: ansible
  become: yes
  become_method: sudo
  connection: ssh
  gather_facts: yes
  tasks:
  - name: remove a package 
    expect:
      command: yum remove lynx
      responses:
        Installed size: 5.4 M\nIs this ok \[y\/N\]: y 
        #Is this ok \[y\/N\]: y
      echo: yes

Output:

[ansible@localhost ansible]$ ansible-playbook main.yml
[DEPRECATION WARNING]: DEFAULT_SUDO_USER option, In favor of become which is a generic framework . This feature will be removed in version 2.8. Dépréciation 
les avertissements peuvent être désactivés en définissant deprecation_warnings=False dans ansible.cfg.
ERREUR! Erreur de syntaxe lors du chargement de YAML.

L'erreur semble être dans '/etc/ansible/main.yml' : ligne 13, colonne 51, mais le problème de syntaxe exact peut être
ailleurs dans le fichier en fonction du problème de syntaxe exact.

La ligne offensante semble être :

      responses:
        Installed size: 5.4 M\nIs this ok \[y\/N\]: y
                                                  ^ ici

type d'exception: 
exception: les valeurs de mappage ne sont pas autorisées dans ce contexte
  in "", ligne 13, colonne 51
[ansible@localhost ansible]$ 

\======================================================================= Code 2 (correspondance de motif pour une seule ligne - fonctionne bien):

[ansible@localhost ansible]$ cat main.yml
---
- hosts: localhost 
  remote_user: ansible
  become: yes
  become_method: sudo
  connection: ssh
  gather_facts: yes
  tasks:
  - name: remove a package 
    expect:
      command: yum remove lynx
      responses:
        #Installed size: 5.4 M\nIs this ok \[y\/N\]: y 
         Is this ok \[y\/N\]: y
      echo: yes

Sortie :

[ansible@localhost ansible]$ 

[ansible@localhost ansible]$ ansible-playbook main.yml
[DEPRECATION WARNING]: DEFAULT_SUDO_USER option, In favor of become which is a generic framework . This feature will be removed in version 2.8. Dépréciation 
warnings can be disabled by setting deprecation_warnings=False in ansible.cfg.

PLAY [localhost] *********************************************************************************************************************************************

TASK [Gathering Facts] ***************************************************************************************************************************************
ok: [127.0.0.1]

TASK [remove a package] **************************************************************************************************************************************
changed: [127.0.0.1]

PLAY RECAP ***************************************************************************************************************************************************
127.0.0.1                  : ok=2    changed=1    unreachable=0    failed=0

4voto

jammus Points 1796

Il serait préférable d'utiliser le module yum.

---
- hosts: localhost
  remote_user: ansible
  become: yes
  become_method: sudo
  connection: ssh
  gather_facts: yes
  tasks:
  - yum:
      name: lynx
      state: absent

Ou package

---
- hosts: localhost
  remote_user: ansible
  become: yes
  become_method: sudo
  connection: ssh
  gather_facts: yes
  tasks:
  - pacakge:
      name: lynx
      state: absent

Vous devriez toujours utiliser un module plutôt que command/shell lorsque c'est possible. Les modules vous offrent de la vérification d'erreur et de l'idempotence sans que vous ayez besoin d'ajouter des tonnes de logique à votre shell/commande.

2voto

user433531 Points 635

Merci les gars pour vos suggestions. Oui, je vais utiliser YUM. Quoi qu'il en soit, l'expression regex ci-dessous a résolu mon problème.

Installed.*\nEst-ce ok \[o\/N\]: o

Code:
---
- hosts: localhost 
  remote_user: ansible
  become: yes
  become_method: sudo
  connection: ssh
  gather_facts: yes
  tasks:
  - name: supprimer un paquet 
    expect:
      command: yum remove lynx
      responses:
        Installed.*\nEst-ce ok \[o\/N\]: o 
        # Est-ce ok \[o\/N\]: o
      echo: yes

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X