file#
Модуль ansible.builtin.file управляет атрибутами файлов, каталогов и символических ссылок.
Особенности работы#
Особенности использования модуля ansible.builtin.file:
модуль
ansible.builtin.fileподдерживает те же параметры SELinux и управления атрибутами файлов, что и модули ansible.builtin.copy, ansible.builtin.template и ansible.builtin.assemble;для управления файлами, каталогами и символическими ссылками на узлах под управлением ОС Windows используйте модуль
ansible.windows.win_file.
Параметры#
Модуль принимает следующие параметры:
- access_time#
Время последнего доступа к файлу.
Возможные значения:
preserve– не изменять время доступа. Используется по умолчанию если параметруstateприсвоено одно из значений:file,directory,link,hard.now– установить текущее системное время. Используется по умолчанию еслиstate=touch.YYYYMMDDHHMM.SS– конкретное время, например,202506012030.00(1 июня 2025 года, 20 часов 30 минут 00 секунд).
- access_time_format#
Формат времени для параметра
access_time.Основано на стандартном формате Python (см. документацию time.strftime).
Значение по умолчанию:
"%Y%m%d%H%M.%S".
- attributes, attr#
Изменение атрибутов объекта файловой системы. Чтобы узнать о поддерживаемых атрибутах, обратитесь к руководству
chattrв целевой системе:man chattrЗначение параметра должно представлять собой строку, содержащую атрибуты в порядке, принятом в выводе
lsattrна целевой системе. Строка также может включать один из следующих операторов:=– установить строго указанный набор атрибутов;+– добавить указанные атрибуты к существующим;-– удалить указанные атрибуты из существующих.
Если оператор не указан, используется оператор
=. Это значит, что будут сброшены все ранее установленные атрибуты, кроме явно указанных в строке.Пример
Пусть файл имеет атрибуты
rw-r--r--. Эта запись означает следующее:пользователь-владелец имеет права на чтение файла и запись в него;
группа-владелец имеет права на чтение файла;
прочие пользователи и группы имеют права на чтение файла.
Пусть значение
attributesзадано следующим образом:attributes: 'u=rwx,g=r'
Применение этих атрибутов изменит режим доступа на
rwxr-----, то есть:пользователь-владелец сможет читать и запускать файл, а также писать в него;
группа-владелец сможет только читать файл;
прочие пользователи и группы потеряют доступ к файлу.
- follow#
Порядок обработки символических ссылок.
Особенности работы:
Если
follow=trueиstate=link, то параметрmodeбудет применяться не к ссылке, а к файлу, на который она указывает (src).При создании ссылки на несуществующий объект файловой системы установите
follow=false, чтобы избежать предупреждения о проблемах с разрешениями. Предупреждающее сообщение добавляется для информирования пользователя о том, что Ansible не может установить разрешения для несуществующего объекта файловой системы.
Возможные значения:
false– операции применяются к символической ссылке;true– Ansible переходит по ссылке и применяет операции к содержимому, на которое она указывает.
Значение по умолчанию:
true.
- force#
Принудительное создание ссылки в двух случаях:
если ссылка символическая и исходный файл не существует (но появится позже);
если целевой объект существует и является файлом (в этом случае существующий файл по пути
pathбудет удален, и вместо него будет создана ссылка на файл, указанный в параметреsrc).
Возможные значения:
false– не создавать ссылку;true– создать ссылку.
Значение по умолчанию:
false.
- group#
Название группы, которой будет принадлежать объект файловой системы. Параметр работает как утилита
chown.Если параметр не указан, используется группа пользователя, от имени которого выполняется задача.
Если задача выполняется от имени пользователя с привилегиями
root, может быть сохранено старое значение группы, если оно уже было у файла.
- mode#
Режим доступа к объекту файловой системы.
Значения могут быть следующих типов:
Восьмеричное число, например,
0644или0755. Обязательно указывать с ведущим нулем или в кавычках:0644;'644'.
Если указать
644, Ansible воспримет это как десятичное число, что приведет к непредсказуемому результату.Примечание
Добавление ведущего нуля иногда работает, но может дать сбой в циклах и некоторых других обстоятельствах.
Символьное значение, например,
u=rw,g=r,o=rилиu+rwx,g+rx,o=r.Специальное значение
preserve. При указании этого значения режим доступа к объекту файловой системы не изменяется.
Поведение по умолчанию:
если файл или каталог на управляемом узле уже существует, его режим доступа сохраняется;
если объект создается заново и параметр
modeне задан, режим доступа определяется системным значениемumaskна удаленном узле.
Предупреждение
Рекомендуется всегда явно задавать параметр
mode, чтобы избежать назначения небезопасных или непредсказуемых прав доступа. См. описание уязвимости CVE-2020-1736.
- modification_time#
Время последнего изменения файла.
Возможные значения:
preserve– не изменять время. Используется по умолчанию если параметруstateприсвоено одно из значений:file,directory,link,hard.now– установить текущее системное время. Используется по умолчанию еслиstate=touch.YYYYMMDDHHMM.SS– конкретное время, например,202506012030.00(1 июня 2025 года, 20 часов 30 минут 00 секунд).
- modification_time_format#
Формат времени для параметра
modification_time.Основано на стандартном формате Python (см. документацию time.strftime).
Значение по умолчанию:
"%Y%m%d%H%M.%S".
- owner#
Название учетной записи пользователя, которому будет принадлежать объект файловой системы. Параметр работает как утилита
chown.Если значение параметра не указано, владельцем становится активный пользователь. Если задача выполняется с привилегиями пользователя
root, предыдущий владелец может быть сохранен.Если указано числовое значение, владельцем становится пользователь с указанным идентификатором. Во избежание путаницы избегайте числовых значений.
- path, dest, name#
Обязательный параметр.
Путь к объекту файловой системы на управляемом узле.
- recurse#
Рекурсивная установка указанных атрибутов для содержимого каталога.
Применяется только если
state=directory.Возможные значения:
false– устанавливать атрибуты только каталогу;true– установить атрибуты на каталог и его содержимое.
Значение по умолчанию:
false.
- selevel#
Уровень объекта файловой системы в контексте безопасности SELinux.
Представляет собой MLS/MCS-атрибут, также известный как
range, который задает уровень доступа к объекту в системе с включенным SELinux.Если установлено значение
_default, будет использован уровень по умолчанию из политики SELinux для данного объекта, если такая политика определена.
- serole#
Роль объекта файловой системы в контексте безопасности SELinux.
Если установлено значение
_default, будет использована роль по умолчанию из политики SELinux для данного объекта, если такая политика определена.
- setype#
Тип объекта файловой системы в контексте безопасности SELinux.
Если установлено значение
_default, будет использован тип по умолчанию из политики SELinux для данного объекта, если такая политика определена.
- seuser#
Пользователь объекта файловой системы в контексте безопасности SELinux.
Если значение не указано, используется системная политика определения пользователя.
Если установлено значение
_default, будет использован пользователь по умолчанию из политики SELinux для данного объекта, если такая политика определена.
- src#
Путь к файлу, на который будет указывать ссылка.
Особенности работы:
применяется только если
state=linkилиstate=hard;при
state=linkдопускается указание несуществующего пути;относительные пути интерпретируются относительно целевого пути (
path), что аналогично поведению командыln -s SRC DEST.
- state#
Желаемое состояние объекта файловой системы.
Возможные значения:
absent– удалить объект файловой системы. Если при удалении каталога задан параметрdiff, в секции выводаpath_contentsбудет указан список удаленных файлов и каталогов.directory– создать промежуточные подкаталоги, если они не существуют.file– изменить атрибуты и режим доступа существующего файла.Особенности работы:
если не указано других параметров, возвращает текущее значение параметра
path;если указаны другие параметры (например,
mode), и файл существует, он будет изменен;если файл не существует – он не будет создан.
Примечание
Если вы хотите создать файл, установите значение
touchили используйте модуль ansible.builtin.copy или ansible.builtin.template.hard– создать или изменить жесткую ссылку.link– создать или изменить символическую ссылку.touch– создать пустой файл, если он не существует. Если файл или каталог существует, обновить время последнего доступа и изменения (аналогично тому, как работаетtouchв командной строке).
Значение по умолчанию:
directoryприrecurse=true;fileво всех остальных случаях.
- unsafe_writes#
Использование атомарной записи для предотвращения повреждения данных или несогласованного чтения целевого файлового объекта.
По умолчанию модуль использует атомарные операции записи, при которых данные сначала записываются во временный файл, а затем временный файл заменяет целевой. Это исключает возможность считывания неполных или поврежденных данных другим процессом во время записи.
На некоторых системах (например, при работе с томами Docker) атомарные операции могут быть недоступны или вызывать ошибки. В этом случае установка значения
trueпозволяет Ansible выполнить небезопасную (неатомарную) запись напрямую в целевой файл.Предупреждение
Небезопасная запись может привести к состоянию гонки и повреждению данных.
Возможные значения:
false– атомарные операции обязательны. При их невозможности задача завершится с ошибкой.true– если атомарная запись невозможна, будет использован небезопасный способ записи.
Значение по умолчанию:
false.
Возвращаемые значения#
В этом списке указаны только возвращаемые значения, специфичные для модуля ansible.builtin.file.
dest– файл или путь назначения, который был передан с помощью параметраpath.Условия: параметр
stateустановлен в значениеtouch,hardилиlink.path– файл или путь назначения, который был передан с помощью параметраpath.Условия: параметр
stateустановлен в значениеabsent,directoryилиfile.
Атрибуты#
Атрибуты определяют функции Ansible, которые может использовать модуль.
Атрибут |
Описание |
|---|---|
|
Модуль работает в режиме проверки ( |
|
Модуль частично поддерживает режим сравнения ( |
|
Модуль поддерживает только POSIX-совместимые ОС. |
Примеры#
Для изучения возможностей модуля ознакомьтесь с приведенными ниже примерами.
Изменение атрибутов файла#
Следующий пример демонстрирует изменение владельцев и режима доступа к файлу:
---
- name: Change file ownership, group and permissions
ansible.builtin.file:
path: /etc/example_directory/example_file
owner: root
group: root
mode: "0644"
Создание ссылки#
Следующий пример демонстрирует создание символической ссылки /opt/log/example_link, указывающей на файл /var/log/example_file:
---
- name: Create a symbolic link
ansible.builtin.file:
src: /var/log/example_file
dest: /opt/log/example_link
owner: root
group: adm
state: link
Изменение прав доступа файла#
Следующий пример демонстрирует изменение режима доступа к файлу /etc/example_file:
---
- name: Touch the same file, but add/remove some permissions
ansible.builtin.file:
path: /etc/example_file
state: touch
mode: u+rw,g-wx,o-rwx
Создание каталога#
Следующий пример демонстрирует создание каталога /etc/example_directory/:
---
- name: Create a directory if it does not exist
ansible.builtin.file:
path: /etc/example_directory
state: directory
mode: "0755"
Обновление времени последнего изменения файла#
Следующий пример демонстрирует обновление времени последнего изменения файла /etc/example_file:
---
- name: Update modification time of given file
ansible.builtin.file:
path: /etc/example_file
state: file
modification_time: now
Установка времени последнего доступа#
Следующий пример демонстрирует установку времени последнего доступа с использованием фильтра ansible.builtin.strftime:
---
- name: Set access time based on seconds from epoch value
ansible.builtin.file:
path: /etc/example_file
state: file
access_time: '{{ "%Y%m%d%H%M.%S" | ansible.builtin.strftime(seconds=0) }}'
Удаление файла#
Следующий пример демонстрирует удаление файла /etc/example_file:
---
- name: Delete file
ansible.builtin.file:
path: /etc/example_file
state: absent