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
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
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 .
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