2017-12-08 2 views
1

Ich habe gerade meine Hände auf Ansible angefangen und einige Sachen auf eigene Faust versucht. Ich verwende den folgenden Code:Wie man einen Befehl überspringt, wenn er schon in ansible existiert

--- 
- hosts: test-server 
    remote_user: root 
    tasks: 
    - name: install java 8 
    apt: name=openjdk-7-jdk update-cache=yes force=yes 
    - name: add group 
    command: addgroup hadoop 

und die folgenden Fehler bekommen: -

fatal: [10.150.0.3]: FAILED! => {"changed": true, "cmd": ["addgroup", "hadoop"], "delta": "0:00:00.033669", "end": "2017-12-08 12:50:15.342671", "msg": "non-zero return code", "rc": 1, "start": "2017-12-08 12:50:15.309002", "stderr": "addgroup: The group `hadoop' already exists.", "stderr_lines": ["addgroup: The group 'hadoop' already exists."], "stdout": "", "stdout_lines": []}
to retry, use: --limit @/root/hdp1.retry

Ich kann die Gruppe ‚hadoop‘ voran gehen und entfernen und den Code erneut versuchen, und es wird nachfolgen. Aber ich möchte eine Bedingung in dem Code machen, so dass, wenn die Gruppe bereits existiert, dieser Schritt ignoriert wird. Ich habe darüber recherchiert und festgestellt, dass wir einige stat_result wie when: stat_result.stat.exists == False verwenden könnten. Aber ich bin nicht sicher, wie man es in den Code einbaut.

Antwort

6

Dies ist nicht wie Sie Ansible Code schreiben sollten.

ansible ist eine deklarative Sprache, und Sie sollten eine native module group verwenden, die idempotence bietet:

- name: Ensure 'hadoop' group exists 
    group: 
    name: hadoop 
    state: present 

Auf diese Weise haben Sie nichts zu überprüfen. Die gleiche Aufgabe erstellt entweder eine neue Gruppe (Status changed) oder meldet, dass die Gruppe bereits existiert (Status ok). Der Zustand nach der Ausführung ist der gleiche: Gruppe hadoop ist vorhanden.

Leider wurde nicht jede Aktion, die Sie ausführen möchten, als native Module implementiert, deshalb existiert command Modul. Aber es sollte als letztes Mittel verwendet werden.

+0

Schöne Antwort. Füge vielleicht eine kurze Erklärung zu Idempotenz oder einen Link zu einer Erklärung hinzu, da es ein neuer Begriff für Benutzer sein könnte, die Devils noch nicht kennen. – Michael

Verwandte Themen