ansible: warum überspringt das Dateimodul?

8

Ich habe ein ansible 1.1-Playbook, in dem ich so etwas mache:

- name: copy files
  sudo: True                                                                                                             
  shell: cp /from/* /to/

- name: change owner
  sudo: True
  file: path=$item owner=newuser group=newgroup
  with_fileglob: /to/*

Die zweite Aufgabe, "Eigentümer wechseln", wird immer übersprungen. Kann mir jemand helfen herauszufinden, warum? Überspringt das Dateimodul, weil die Dateien vorhanden sind? Ich stecke fest :)

deadsven
quelle
Ich wusste nie, ob es $ item erlaubt ... Ich dachte, es wäre {{item}}
Arun Sangal

Antworten:

16

Aus der Dokumentation :

Denken Sie daran, dass Such-Plugins auf dem "steuernden" Computer ausgeführt werden:

with_fileglob ist ein Such-Plugin, das nach Dateien auf dem lokalen Server sucht, von dem aus Sie ansible-playbook ausführen.

Folgendes können Sie tun:

- name: list files 
  action: command ls -1 /to/* 
  register: dumpfiles 

- name: change ownership 
  action: file path=$item owner=newuser group=newgroup
  with_items: ${dumpfiles.stdout_lines}
Tom Aac
quelle
das macht jetzt so viel Sinn, dass du es sagst. Übrigens habe ich das gelöst, indem ich [shell: chown -R newuser: newgroup / to]
deadsven
3
Die Verwendung von Shell ist in diesem Fall nicht der bevorzugte Weg, da Sie die Idempotenz verlieren. Sie sollten stattdessen Dateimodul und with_items
Tom Aac
Ja, ich möchte das Dateimodul verwenden, aber with_items unterstützt keine Globs, oder? Das Auflisten jeder Datei in einer with_items-Liste ist nicht wirklich das, was ich will
deadsven
Sehen Sie meine Antwort, es gibt, was Sie brauchen
Tom Aac
2
Jedes Mal, wenn Sie chown ausführen, ändern Sie den Zeitstempel der Datei. Insbesondere ctime. Dies kann beispielsweise bei einer Sicherungssoftware ein Problem sein.
Tom Aac
5

Ansible 1.1 hat den Parameter recurse zum Dateimodul hinzugefügt. Alles, was Sie für Ihre Aufgabe zum Ändern des Eigentums tun müssen, ist Folgendes:

- name: change ownership 
  action: file state=directory recurse=yes path=/to/ owner=newuser group=newgroup

Dies wird deutlicher, wenn sich die Dinge tatsächlich ändern. Wenn Sie die Shell- oder Befehlsmodule verwenden, wird immer ein geänderter Status zurückgegeben, auch wenn nichts geändert wurde.

HitScan
quelle