ansible: почему пропускается файловый модуль?

8

У меня есть сборник игр 1.1, где я делаю что-то вроде этого:

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

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

Второе задание «Смена владельца» всегда пропускается. Может ли кто-нибудь помочь мне выяснить, почему? файловый модуль пропускается, потому что файлы существуют? Я застрял :)

deadsven
источник
Никогда не знал, позволяет ли это $ item ... Я думал, что это {{item}}
Арун Сангал

Ответы:

16

Из документации :

Помните, что поисковые плагины запускаются на «управляющей» машине:

with_fileglob это плагин поиска, поэтому он ищет файлы на локальном сервере, с которого вы запускаете ansible-playbook.

Вот что вы можете сделать:

- 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}
Том Аак
источник
это так много значит сейчас, когда ты это говоришь. Кстати, я решил это с помощью [shell: chown -R newuser: newgroup / to]
deadsven
3
Использование оболочки в этом случае не является предпочтительным способом, так как вы теряете идемпотентность. Вместо этого вы должны использовать файловый модуль и with_items
Том Аак
да, я хотел бы использовать файловый модуль, но with_items не поддерживает globs, не так ли? перечисление каждого файла в списке with_items не совсем то, что я хочу
deadsven
Смотри мой ответ, есть то, что тебе нужно
Том Аак
2
Каждый раз, когда вы запускаете chown, вы меняете временную метку файла. В частности ctime. Это может быть проблемой для некоторых программ резервного копирования, например.
Том Аак
5

Ansible 1.1 добавил параметр recurse в файловый модуль, поэтому все, что вам нужно сделать для задачи смены владельца, это:

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

Это станет более очевидным, когда на самом деле все изменится; использование оболочки или командных модулей всегда возвращает измененное состояние, даже если на самом деле ничего не изменилось.

HitScan
источник