Пытаетесь использовать Ansible для поиска и изменения всех владельцев файлов с user_01 на user_02?
- name: "Find files for user_01 or UID of user_01_uid"
command: "find / -path /proc -prune -o -path /sys -prune -o \\( -user user_01 \\) -o \\( -uid user_01_uid \\)"
# escape character "\" prior to backslash character "\" \\. Spacing to work with Ansible CentOS 7
ignore_errors: yes
register: files_2_change
- name: "Display files_2_change"
debug:
msg: "{{ files_2_change.stdout_lines }}"
- name: "Change owner & group permissions"
file:
path: "{{ files_2_change.stdout_lines }}"
owner: user_02
group: user_02
mode: 0760
modification_time: preserve # now
when:
- files_2_change != '/proc'
- files_2_change != '/sys'
# Better soln for chown
# command: "chown -h -R --from=user_01:user_01 user_02:user_02 {{ files_2_change.stdout_lines }}"
Проблема в том, что вы пытаетесь выполнить условную проверку всего files_2_change
переменная, когда то, что вас действительно интересует, - это выполнение условной проверки каждого элемента списка, который вы повторяете. К сожалению, из-за как Ansible обрабатывает условные выражения в циклах, вы не можете просто перебрать file
модуль и каждый раз проводите проверку.
Я бы порекомендовал добавить дополнительную задачу обработки до фактического file
задача отбросить нежелательные пути, используя понимание списка Python:
- name: "Process files_2_change, dropping unwanted files"
set_fact:
processed_files_2_change: >
{{ processed_files_2_change | default([]) +
[ item ] if '/proc' not in item and '/sys' not in item else []
}}
loop: "{{ files_2_change.stdout_lines }}"
- name: "Change owner & group permissions"
file:
path: "{{ item }}"
owner: user_02
group: user_02
mode: 0760
modification_time: preserve
loop: "{{ processed_files_2_change }}"
Обновление: это то, что я получил после отзыва здесь (17 июля 2019 г.).
В исключения добавлен / var / spool / mail.
Текущие испытания, кажется, работают.
- name: "Find files for user_X or UID of user_X_uid"
command: "find / -path /proc -prune -o -path /sys -prune -o \\( -user user01 \\) -o \\( -uid 1051 \\)"
ignore_errors: yes
register: files_2_change
- name: "Change owner & group permissions"
file:
path: "{{ item }}"
owner: user02
group: user02
mode: 0771 # If there are directories - 0760 will make them not accessible for the group.
modification_time: preserve
loop: "{{ files_2_change.stdout_lines }}"
when:
- item is not search('^/proc')
- item is not search('^/sys')
- item is not search('^/var/spool/mail')
Спасибо всем за ваш вклад и помощь!
Атрибут дорожка в модуле файл требуется строка. Список должен потерпеть неудачу.
фатальный: [localhost]: НЕ ВЫПОЛНЕНО! => {"msg": "ошибка шаблона при создании строки шаблона: неожиданно ')'. Строка: {{files_2_change.stdout_lines))"}
(так же, как с обработано_files_2_change)
Вместо этого можно зациклить список.
- name: "Change owner & group permissions"
file:
path: "{{ item }}"
owner: user_02
group: user_02
mode: 0760
modification_time: preserve # now
loop: "{{ files_2_change.stdout_lines }}"
when:
- item is not search('^/proc')
- item is not search('^/sys')
(не проверено)
Ноты