Как создать каталог www
в /srv
в системе на основе Debian, используя Ansible playbook?
Как создать каталог с помощью Ansible
Ответы (23)
Вам нужен файловый модуль. Для создания каталога нужно указать опцию state=directory
:
- name: Creates directory
file:
path: /src/www
state: directory
Вы можете увидеть другие варианты на https://docs.ansible.com/ansible/latest/collections/ansible/builtin/file_module.html
state=directory
, будут созданы все непосредственные подкаталоги, если они не существуют, поскольку начиная с версии 1.7 они будут созданы с предоставленными разрешениями.
- person Alex; 06.10.2016
all immediate subdirectories
сбивает с толку, не могли бы вы определить это и привести пример?
- person Jamie Jackson; 13.09.2018
Вы даже можете расширить файловый модуль и даже установить через него владельца, группу и права доступа. (Ссылка: документация по файлу Ansible)
- name: Creates directory
file:
path: /src/www
state: directory
owner: www-data
group: www-data
mode: 0775
Даже вы можете создавать каталоги рекурсивно:
- name: Creates directory
file:
path: /src/www
state: directory
owner: www-data
group: www-data
mode: 0775
recurse: yes
Таким образом, будут созданы оба каталога, если их не было.
recursive
делает это очень похожим на использование mkdir -p
(для тех, кто ищет в Google ansible mkdir -p).
- person Micah Elliott; 21.01.2016
recurse
не любит mkdir -p
. Он рекурсивно устанавливает указанные атрибуты файла (применяется только к state = directory). Если state=directory
, будут созданы все непосредственные подкаталоги, если они не существуют, поскольку начиная с версии 1.7 они будут созданы с предоставленными разрешениями.
- person Alex; 06.10.2016
=
символами, было бы здорово обновить его синтаксисом :
с каждым атрибутом в новой строке
- person ympostor; 08.06.2017
chmod -R
. То есть, если path
уже существует как каталог и внутри него есть файлы, опция recurse
(иногда, к сожалению) также применяет те же разрешения к файлам. Это намеренно, хорошо это или плохо.
- person Dale Anderson; 12.10.2017
recurse
указана с owner
или group
, будет применяться chmod -R
(эквивалент). Это станет проблемой, если файлов много. Для меня у меня было ~ 200 версий приложений в папке, каждая из которых содержала ~ 35 тыс. Файлов, что в сумме составляло ~ 7 млн файлов. Команда chmod займет так много времени, что истекло время ожидания общего SSH-соединения.
- person Eric Wong; 26.08.2020
recurse: yes
практически бесполезным для меня, поскольку я хочу указать режим каталога с помощью + x, но я не хочу, чтобы все файлы внутри каталога были сделаны исполняемыми.
- person EM0; 09.11.2020
вы можете создать, используя:
Последняя версия 2 ‹
- name: Create Folder
file:
path: /srv/www/
owner: user
group: user
mode: 0755
state: directory
Старая версия
- name: Create Folder
file:
path=/srv/www/
owner=user
group=user
mode=0755
state=directory
Обратитесь - http://docs.ansible.com/ansible/file_module.html
Дополнительно для всех ответов здесь существует множество ситуаций, когда вам нужно создать более одного каталога, поэтому рекомендуется использовать циклы вместо создания отдельной задачи для каждого каталога.
- name: Creates directory
file:
path: "{{ item }}"
state: directory
with_items:
- /srv/www
- /dir/foo
- /dir/bar
Каталог может быть создан только с использованием файлового модуля, поскольку каталог - это не что иное, как файл.
# create a directory if it doesn't exist
- file:
path: /etc/some_directory
state: directory
mode: 0755
owner: foo
group: foo
- file:
path: /etc/some_directory
state: directory
mode: 0755
owner: someone
group: somegroup
Таким образом вы также можете установить разрешения, владельца и группу. Последние три параметра не являются обязательными.
Вы можете создать каталог. с использованием
# create a directory if it doesn't exist
- file: path=/src/www state=directory mode=0755
Вы также можете обратиться к http://docs.ansible.com/ansible/file_module.html. для получения дополнительных сведений о каталоге и файловой системе.
Просто нужно поставить условие для выполнения задачи для конкретного распределения
- name: Creates directory
file: path=/src/www state=directory
when: ansible_distribution == 'Debian'
Вы можете использовать инструкцию
- name: webfolder - Creates web folder
file: path=/srv/www state=directory owner=www-data group=www-data mode=0775`
Если вы хотите создать каталог в Windows:
- имя: Создать структуру каталогов
win_file:
путь: C: \ Temp \ папка \ подпапка>
состояние: каталог
У нас есть модули для создания каталога, файла в доступе
Пример
- name: Creates directory
file:
path: /src/www
state: directory
Вы можете напрямую запустить команду и создать напрямую с помощью ansible
ansible -v targethostname -m shell -a "mkdir /srv/www" -u targetuser
OR
ansible -v targethostname -m file -a "path=/srv/www state=directory" -u targetuser
---
- hosts: all
connection: local
tasks:
- name: Creates directory
file: path=/src/www state=directory
Вышеупомянутая playbook создаст каталог www в пути / src.
Перед запуском выше playbook. Пожалуйста, убедитесь, что ваше соединение с доступным хостом должно быть установлено,
"localhost ansible_connection = local"
должен присутствовать в / etc / ansible / hosts
для получения дополнительной информации, пожалуйста, дайте мне знать.
создать каталог
ansible host_name -m file -a "dest=/home/ansible/vndir state=directory"
Используйте файловый модуль, чтобы создать каталог и получить подробную информацию о файловом модуле с помощью команды "ansible-doc file"
Вот вариант «состояние», который объясняет:
Если
directory
, будут созданы все непосредственные подкаталоги, если они не существуют, начиная с версии 1.7 они будут созданы с предоставленными разрешениями.
Еслиfile
, файл НЕ будет создан, если он не существует, см. [Копия] или [шаблон], если вам нужно такое поведение.
Еслиlink
, будет создана или изменена символическая ссылка. Используйтеhard
для жестких ссылок.
Еслиabsent
, каталоги будут рекурсивно удаляться, а файлы или символические ссылки не будут связаны.Обратите внимание, что
file
не завершится ошибкой, если путь не существует, поскольку состояние не изменилось.Если
touch
(новое в 1.4), пустой файл будет создан, если путь не существует, в то время как существующий файл или каталог получит обновленное время доступа и модификации (аналогично тому, какtouch
работает из командной строки).
вы можете использовать модуль «файл» в этом случае, есть так много аргументов, которые вы можете передать для вновь созданного каталога, таких как владелец, группа, местоположение, режим и так далее ...
пожалуйста, обратитесь к этому документу для подробного объяснения файлового модуля ...
https://docs.ansible.com/ansible/latest/modules/file_module.html#file-module
помните, что этот модуль предназначен не только для создания каталога !!!
Самый простой способ создать каталог в Ansible.
- name: Создайте your_directory, если он не существует. файл: путь: / etc / your_directory
ИЛИ
Вы хотите предоставить этому каталогу привилегии sudo.
- name: Создайте your_directory, если он не существует. файл: путь: / etc / your_directory mode: '777'
Привет, добрый день, команда.
Я делюсь с вами следующим.
- name: Validar Directorio
stat:
path: /tmp/Sabana
register: sabana_directorio
- debug:
msg: "Existe"
when: sabana_directorio.stat.isdir == sabana_directorio.stat.isdir
- name: Crear el directorio si no existe.
file:
path: /tmp/Sabana
state: directory
when: sabana_directorio.stat.exists == false
С помощью которого вы можете проверить, существует ли каталог перед его созданием
/srv/www
, а ваш пример касается /tmp/Sabana
. Вы должны попытаться сопоставить свои примеры с вопросами, когда это возможно, и избегать повторения любого из 22 ответов.
- person seshadri_c; 24.09.2020
Я вижу много примеров Playbook, и я хотел бы упомянуть пример команд Adhoc.
$ ansible -i inventory -m file -a "path = / tmp / direcory state = каталог (вместо каталога мы можем указать касание для создания файлов)
В этом случае вам необходимо использовать файловый модуль. Ниже приведены инструкции, которые вы можете использовать для справки.
---
- hosts: <Your target host group>
name: play1
tasks:
- name: Create Directory
files:
path=/srv/www/
owner=<Intended User>
mode=<Intended permission, e.g.: 0750>
state=directory
Чтобы проверить, существует ли каталог, а затем запустить какую-либо задачу (например, создать каталог), используйте следующие
- name: Check if output directory exists
stat:
path: /path/to/output
register: output_folder
- name: Create output directory if not exists
file:
path: /path/to/output
state: directory
owner: user
group: user
mode: 0775
when: output_folder.stat.exists == false
enter code here
- name: creating directory in ansible
file:
path: /src/www
state: directory
owner: foo
вы можете обратиться к доступной документации
вот способ попроще.
- name: create dir
command: mkdir -p dir dir/a dir/b
-p
это идемпотент
- person Sławomir Lenart; 08.12.2020