Ich versuche eine EBS-Rolle für meine Ansible-Skripte zu erstellen. Ich werde das EBS-Volume erstellen und es jetzt selbst über die Konsole anhängen. Ich möchte, dass diese Rolle Befehle ausführt und das Laufwerk mountet, wenn das Laufwerk noch nicht gemountet ist. Überspringe es jedoch, wenn es bereits gemountet ist.Ansible - Überprüfen, ob Drive Mounted ist
ich bestimmte Vars haben hosten, die eine Liste der Festplatten geben und Bereitstellungspunkte:
ebs_vols:
- drive: /dev/sdb
mount_point: /mnt/ebs1
directory: /var/lib/mysql
- drive: /dev/sdc
mount_point: /mnt/ebs2
directory: /var/backups
Ich möchte meine Aufgabe jedes Laufwerk überprüfen Sie mit einem df
Befehl haben, und sehen, ob es angebracht ist. Dann Befehle überspringen, wenn der Antrieb montiert ist:
- name: Check if drives are already mounted
shell: df | grep "{{item.drive}}" | wc -l
with_items: "{{ebs_vols}}"
register: ebs_checked
- name: output debug
debug: var=ebs_checked
- name: Make filesystem
filesystem:
fstype: xfs
dev: "{{item.item.drive}}"
when: "{{item.stdout}} == 0"
with_items: ebs_checked.results
Wenn ich es laufen, so scheint es, jede Scheibe ganz gut zu überprüfen, weil der Ausgang der debug
ist ein Objekt mit den richtigen Laufwerken und stdout. Das Problem ist mit der Aufgabe Make filesystem
. Die Fehler aus mit dem folgenden Fehler:
The conditional check '{{item.stdout}} == 0' failed. The error was: error while evaluating conditional ({{item.stdout}} == 0): 'ansible.vars.unsafe_proxy.AnsibleUnsafeText object' has no attribute 'stdout'\n\n
Was bin ich hier und was ist der beste Weg, Befehle zu überspringen, wenn der Antrieb bereits montiert ist?
Ah, ich verstehe. Anfängerfehler. Ich bin neu bei Ansible und ich vermute, dass ich eine Art von Syntaxfehler erwartet habe, anstatt es tatsächlich auszuführen. Vielen Dank! – gkrizek
Es gibt keinen Syntaxfehler. 'item' ist ein String-Wert von' ebs_checked.results' zugeordnet und es ist ein Fehler aufgetreten, dass er den 'stdout'-Schlüssel nicht enthält, den Sie zu verwenden versucht haben. – techraf
Diese Verwendung von blanken Variablen in 'with_' -Schleifen wurde in Ansible 2.0 veraltet und in 2.2 entfernt - siehe [Leitfaden zur Portierung von Ansible 2.0] (https://docs.ansible.com/ansible/porting_guide_2.0.html#deprecated)). – RichVel