Как создать каталог с помощью Ansible

Ответы:

637

Вы хотите файловый модуль. Чтобы создать каталог, вам нужно указать опцию state=directory:

- name: Creates directory
  file:
    path: /src/www
    state: directory

Вы можете увидеть другие варианты на http://docs.ansible.com/file_module.html

LEUCOS
источник
36
Если state=directoryвсе непосредственные подкаталоги будут созданы, если они не существуют, с версии 1.7 они будут созданы с предоставленными разрешениями.
Алекс
1
@ Алекс all immediate subdirectoriesсбивает с толку, не могли бы вы это определить и привести пример?
Джейми Джексон
8
@JamieJackson Есть ошибка, должны быть «все промежуточные подкаталоги».
Алекс
203

Вы даже можете расширить файловый модуль и даже установить владельца, группу и разрешение через него. (Ссылка: 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

Таким образом, он создаст оба каталога, если они не существуют.

Арбаб Назар
источник
38
recursiveАргумент делает это так же, как с использованием mkdir -p(для тех , прибегая к помощи анзибль MkDir -p ).
Мика Эллиотт
2
Я обнаружил, что это также меняет права доступа к дочерним файлам ... почти как mkdir -p / foo / bar && chmod -R 0775 / foo / bar ... кто-нибудь еще наблюдал это с Ansible 2.0.0.2
ThePracticalOne
6
recurseПараметр не нравится mkdir -p. Он рекурсивно устанавливает указанные атрибуты файла (применяется только к состоянию = директории). Если state=directoryвсе непосредственные подкаталоги будут созданы, если они не существуют, начиная с 1.7 они будут созданы с предоставленными разрешениями.
Алекс
1
при этом используется старый синтаксис с =символами, было бы здорово обновить его :синтаксисом с каждым атрибутом в новой строке
ympostor
@ThePracticalOne - Да ... использование "recurse" ведет себя точно так chmod -Rже. То есть, если он pathуже существует как dir и в нем есть файлы, recurseопция (иногда, к сожалению, к сожалению) также применяет те же разрешения к файлам. Это по замыслу , к лучшему или к худшему.
Дейл Андерсон
14

Вы можете создать с помощью:

Последняя версия 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.

Чатуранга Абейратна
источник
14

Каталог может быть создан только с использованием файлового модуля, так как каталог - это не что иное, как файл.

# create a directory if it doesn't exist
- file:
    path: /etc/some_directory
    state: directory
    mode: 0755
    owner: foo
    group: foo
user3004224
источник
8
- file:
    path: /etc/some_directory
    state: directory
    mode: 0755
    owner: someone
    group: somegroup

Таким образом, вы также можете установить права доступа, владельца и группу. Последние три параметра не являются обязательными.

qubsup
источник
7

Вы можете создать каталог. с помощью

# create a directory if it doesn't exist
- file: path=/src/www state=directory mode=0755

Вы также можете обратиться к http://docs.ansible.com/ansible/file_module.html для получения более подробной информации о каталоге и файловой системе regaridng.

Али Уоррич
источник
7

Дополнительный ответ на все ответы здесь, есть много ситуаций, когда вам нужно создать более одного каталога, поэтому лучше использовать циклы, вместо этого создавая отдельную задачу для каждого каталога.

- name: Creates directory
  file:
    path: "{{ item }}"
    state: directory
  with_items:
  - /srv/www
  - /dir/foo
  - /dir/bar
Андрей Бистринин
источник
3

Просто нужно поставить условие для выполнения задачи для конкретного распределения

- name: Creates directory
  file: path=/src/www state=directory
  when: ansible_distribution == 'Debian'
Бхавеш Васоя
источник
3

Вы можете использовать заявление

- name: webfolder - Creates web folder
  file: path=/srv/www state=directory owner=www-data group=www-data mode=0775`
Мази
источник
3

Если вы хотите создать каталог в Windows:

  • имя: создать структуру
    каталогов win_file:
    путь: C: \ Temp \ folder \ subfolder>
    состояние: каталог

Александру Муика
источник
2

У нас есть модули для создания каталога, файла в ansible

пример

- name: Creates directory
  file:
    path: /src/www
    state: directory
Мохд Умар Мубин
источник
1

Вы можете напрямую запустить команду и создать напрямую, используя ansible

ansible -v targethostname -m shell -a "mkdir /srv/www" -u targetuser

ИЛИ

ansible -v targethostname -m file -a "path=/srv/www state=directory" -u targetuser
RegexCracker
источник
1
---
- hosts: all
  connection: local
  tasks:
    - name: Creates directory
      file: path=/src/www state=directory

Над playbook создаст каталог www в пути / src.

Перед запуском выше playbook. Пожалуйста, убедитесь, что ваше соединение с ansible host должно быть установлено,

"localhost ansible_connection = local"

должен присутствовать в / etc / ansible / hosts

Для получения дополнительной информации, пожалуйста, дайте мне знать.

Саурабх
источник
file: path = / src / www state = каталог
Саурабх
1

создать каталог

ansible host_name -m file -a "dest=/home/ansible/vndir state=directory"
sachin_ur
источник
1

Используйте файловый модуль для создания каталога и получения подробной информации о файловом модуле с помощью команды «ansible-doc file»

Вот опция «состояние», которая объясняет:

Если directoryвсе непосредственные подкаталоги будут созданы, если они не существуют, начиная с 1.7 они будут созданы с предоставленными разрешениями.
Если fileфайл НЕ будет создан, если он не существует, см. Модуль [copy] или [template], если вы хотите такого поведения.
Если linkсимволическая ссылка будет создана или изменена. Используйте hardдля жестких ссылок.
Если absentкаталоги будут рекурсивно удалены, а файлы или символические ссылки будут удалены.

Обратите внимание, что fileне произойдет сбой, если путь не существует, так как состояние не изменилось.

Если touch(новое в 1.4), будет создан пустой файл, если путь не существует, в то время как существующий файл или каталог получат обновленные времена доступа к файлу и изменения (аналогично тому, как это touchработает из командной строки).

Приянка Бхардвадж
источник
1

в этом случае вы можете использовать модуль «файл», так как вы можете передать столько аргументов для вновь созданного каталога, как владелец, группа, местоположение, режим и т. д. .....

Пожалуйста, обратитесь к этому документу для подробного объяснения файлового модуля ...

https://docs.ansible.com/ansible/latest/modules/file_module.html#file-module

помните, что этот модуль предназначен не только для создания каталога !!!

user11345576
источник
1

Самый простой способ сделать каталог в Ansible.

  • name: создайте your_directory, если он не существует. файл: путь: / etc / your_directory

ИЛИ

Вы хотите дать привилегии sudo этому каталогу.

  • name: создайте your_directory, если он не существует. file: path: / etc / your_directory mode: '777'
Мухаммед Ахмад
источник
0

Я вижу много примеров Playbooks, и я хотел бы упомянуть пример команд Adhoc.

$ ansible -i инвентаризация -m файл -a "путь = / tmp / direcory state = каталог (вместо каталога можно упомянуть касание для создания файлов)

Кандасамы Муруган
источник
0

Вам нужно использовать файловый модуль для этого случая. Ниже Playbook вы можете использовать для справки.

    ---
     - 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 
S.MANDAL
источник
0

Чтобы проверить, существует ли каталог, а затем запустить какую-либо задачу (например, создать каталог), используйте следующее

- 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
Левон
источник
0

Вы хотите fileмодуль. Чтобы создать каталог, вам нужно указать опцию state: directory:

- name: Creates directory
  file:
    path: /src/www
    state: directory
Деванг Рададия
источник
-5

здесь более простой способ.

- name: create dir command: mkdir -p dir dir/a dir/b

Эндер Ван
источник
2
это не идемпотент.
Qubsup