web-dev-qa-db-fra.com

Vérification de plusieurs conditions en utilisant "when" sur une seule tâche dans ansible

Je veux évaluer plusieurs conditions dans ansible en utilisant when, voici mon livre de jeu:

- name: Check that the SSH Key exists
   local_action:
     module: stat
     path: "/home/{{ login_user.stdout }}/{{ ssh_key_location }}"
   register: sshkey_result

 - name: Generating a new SSH key for the current user it's not exists already
   local_action:
      module: user
      name: "{{ login_user.stdout }}"
      generate_ssh_key: yes 
      ssh_key_bits: 2048
   when: sshkey_result.rc == 1 and  ( github_username is undefined or github_username |lower == 'none' )

voici mon fichier var pour référence:

---
vpc_region: eu-west-1
key_name: my_github_key
ssh_key_location: .ssh/id_rsa.pub

Quand j'essaye d'exécuter ce livre de jeu, j'obtiens cette erreur:

TASK: [test | Check that the SSH Key exists] **********************************
ok: [localhost -> 127.0.0.1]

 TASK: [test | Generating a new SSH key for the current user it's not exists already] ***
 fatal: [localhost] => error while evaluating conditional: sshkey_result.rc == 1 and  ( github_username is undefined or github_username |lower == 'none' )

        FATAL: all hosts have already failed -- aborting

Quelqu'un peut-il me dire que nous pouvons utiliser plusieurs conditions avec ansible sur une tâche unique.

Merci

29
Arbab Nazar

Vous pouvez utiliser comme ça.

when: condition1 == "condition1" or condition2 == "condition2"

Lien vers les documents officiels: The When Statement .

Veuillez également vous référer à cet article: https://Gist.github.com/marcusphi/6791404

41

Le problème avec votre conditionnel est dans cette partie sshkey_result.rc == 1, parce que sshkey_result ne contient pas l'attribut rc et toute la condition échoue.

Si vous voulez vérifier si le fichier existe, cochez exists attribut.

Ici vous pouvez en savoir plus sur le module stat et son utilisation .

4
nvartolomei

Ajouter à https://stackoverflow.com/users/1638814/nvartolomei answer, ce qui corrigera probablement votre erreur.

Répondant strictement à votre question, je tiens à souligner que le when: La déclaration est probablement correcte, mais semblerait plus facile à lire en plusieurs lignes et remplit tout de même votre logique:

when: 
  - sshkey_result.rc == 1
  - github_username is undefined or 
    github_username |lower == 'none'

https://docs.ansible.com/ansible/latest/user_guide/playbooks_conditionals.html#the-when-statement

0
user2066480