Як створити каталог за допомогою Ansible


375

Як створити каталог wwwна /srvбазі системи Debian, використовуючи програму "Ansible playbook"?

Відповіді:


635

Ви хочете, щоб модуль файлів. Щоб створити каталог, потрібно вказати параметр state=directory:

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

Ви можете переглянути інші параметри на веб-сторінці http://docs.ansible.com/file_module.html


36
Якщо state=directoryвсі безпосередні підкаталоги будуть створені, якщо їх не існує, оскільки 1.7 вони будуть створені з наданими дозволами.
Олексій

1
@Alex all immediate subdirectoriesзаплутаний, чи можете ви це визначити і навести приклад?
Джеймі Джексон

8
@JamieJackson Є помилка, повинні бути "всі проміжні підкаталоги".
Алекс

203

Ви навіть можете розширити модуль файлів і навіть встановити через нього власника, групу та дозвіл. (Посилання: Довідкова файлова документація )

- 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 / бар && CHMOD -R 0775 / Foo / бар .. Хто - небудь ще спостерігав це з анзіблем 2.0.0.2
ThePracticalOne

5
recurseПараметр не подобається mkdir -p. Він рекурсивно встановлює вказані атрибути файлу (стосується лише стану = каталогу). Якщо state=directoryвсі безпосередні підкаталоги будуть створені, якщо їх не існує, оскільки 1.7 вони будуть створені з наданими дозволами.
Олексій

1
тут використовується старий синтаксис з =символами, було б чудово оновити його :синтаксисом з кожним атрибутом у новому рядку
ympostor

@ThePracticalOne - Так ... використання "повторної роботи" поводиться точно так само, як chmod -Rі. Тобто, якщо pathвже існує dir, а всередині нього є файли, recurseопція (іноді, на жаль,) також застосує ті самі дозволи до файлів. Це задумом , на краще чи на гірше.
Дейл Андерсон


14

Каталог можна створити лише за допомогою файлового модуля, оскільки каталог - це не що інше, як файл.

# create a directory if it doesn't exist
- file:
    path: /etc/some_directory
    state: directory
    mode: 0755
    owner: foo
    group: foo

8
- file:
    path: /etc/some_directory
    state: directory
    mode: 0755
    owner: someone
    group: somegroup

Ось так ви також можете встановити дозволи, власника та групу. Останні три параметри не є обов’язковими.


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:
    path: C: \ Temp \ folder \ subfolder>
    state: каталог


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

1
---
- hosts: all
  connection: local
  tasks:
    - name: Creates directory
      file: path=/src/www state=directory

Над програмою "playbook" буде створено www-каталог у / src-шляху.

Перед запуском над програмою playbook. Будь-ласка, переконайтеся, що ваш безвідмовний хост-зв’язок має бути встановлено,

"localhost ansible_connection = локальний"

має бути присутнім у / etc / ansible / hosts

для отримання додаткової інформації, будь ласка, повідомте мене.


file: path = / src / www state = каталог
Саурах

1

для створення каталогу

ansible host_name -m file -a "dest=/home/ansible/vndir state=directory"

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

пам'ятайте, що цей модуль не є лише для створення каталогу !!!


1

Найпростіший спосіб скласти каталог в Ansible.

  • ім'я: Створіть свою_директорію, якщо вона не існує. file: path: / etc / your_directory

АБО

Ви хочете надати права доступу до цього каталогу.

  • ім'я: Створіть свою_директорію, якщо вона не існує. файл: шлях: / etc / your_directory mode: '777'

0

Я бачу безліч прикладів Playbooks, і я хотів би згадати приклад команд Adhoc.

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


0

Для цього потрібно використовувати файловий модуль. Нижче ви зможете скористатися довідковою книжкою.

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

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.