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/*

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


Никогда не знал, позволяет ли это $ 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

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.