it-swarm.com.de

Überprüfung auf mehrere Bedingungen mit "when" für eine einzelne Aufgabe in Ansible

Ich möchte mehrere Zustände in Ansible bewerten, indem ich Folgendes verwende:

- 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' )

hier ist meine var-Datei als Referenz:

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

Wenn ich versuche, dieses Playbook auszuführen, erhalte ich folgende Fehlermeldung:

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

Kann mich jemand darauf hinweisen, wie man mit ansible mehrere Bedingungen auf einmal bearbeiten kann.

Vielen Dank

29
Arbab Nazar

Sie können so verwenden.

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

Link zu offiziellen Dokumenten: The When Statement .

Bitte beachten Sie auch dieses Gist: https://Gist.github.com/marcusphi/6791404

Das Problem mit Ihrer Bedingung ist in diesem Teil sshkey_result.rc == 1, weil sshkey_result enthält kein rc Attribut und die gesamte Bedingung schlägt fehl.

Wenn Sie überprüfen möchten, ob die Datei existiert, überprüfen Sie das exists Attribut.

Hier können Sie lesen Sie mehr über das stat-Modul und wie man es benutzt .

4
nvartolomei

Hinzufügen zu https://stackoverflow.com/users/1638814/nvartolomei Antwort, die wahrscheinlich Ihren Fehler beheben wird.

Ich beantworte Ihre Frage streng und möchte Sie nur darauf hinweisen, dass der when: Aussage ist wahrscheinlich korrekt, würde aber in mehrzeiliger Form einfacher zu lesen sein und trotzdem Ihre Logik erfüllen:

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