Cara membuat direktori menggunakan Ansible

Jawaban:

637

Anda ingin modul file. Untuk membuat direktori, Anda perlu menentukan opsi state=directory:

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

Anda dapat melihat opsi lain di http://docs.ansible.com/file_module.html

leucos
sumber
36
Jika state=directory, semua subdirektori langsung akan dibuat jika tidak ada, karena 1.7 mereka akan dibuat dengan izin yang disediakan.
Alex
1
@Alex all immediate subdirectoriesmembingungkan, bisakah Anda mendefinisikannya dan memberikan contoh?
Jamie Jackson
8
@JamieJackson Ada kesalahan, harus "semua subdirektori antara".
Alex
203

Anda bahkan dapat memperluas modul file dan bahkan mengatur pemilik, grup & izin melalui itu. (Ref: Dokumentasi file yang mungkin )

- name: Creates directory
  file:
    path: /src/www
    state: directory
    owner: www-data
    group: www-data
    mode: 0775

Bahkan, Anda dapat membuat direktori secara rekursif:

- name: Creates directory
  file:
    path: /src/www
    state: directory
    owner: www-data
    group: www-data
    mode: 0775
    recurse: yes

Dengan cara ini, ini akan membuat kedua direktori, jika tidak ada.

Arbab Nazar
sumber
38
The recursiveargumen membuat banyak ini seperti menggunakan mkdir -p(bagi mereka googling ansible mkdir -p ).
Micah Elliott
2
Saya menemukan bahwa itu mengubah hak akses file anak juga ... hampir seperti mkdir -p / foo / bar && chmod -R 0775 / foo / bar .. ada orang lain yang mengamati ini dengan Ansible 2.0.0.2
ThePracticalOne
6
The recurseparameter tidak suka mkdir -p. Secara rekursif mengatur atribut file yang ditentukan (hanya berlaku untuk negara = direktori). Jika state=directory, semua subdirektori langsung akan dibuat jika tidak ada, karena 1.7 mereka akan dibuat dengan izin yang disediakan.
Alex
1
ini menggunakan sintaks lama dengan =karakter, akan lebih baik untuk memperbaruinya dengan :sintaks dengan masing-masing atribut pada baris baru
ympostor
@ThePracticalOne - Ya ... menggunakan "recurse" berperilaku dengan cara yang persis sama chmod -R. Artinya, jika pathsudah ada sebagai dir, dan ada file di dalamnya, recurseopsi akan (kadang-kadang sayangnya) juga menerapkan izin yang sama ke file. Ini dengan desain , baik atau buruk.
Dale Anderson
14

Anda dapat membuat menggunakan:

Versi terbaru 2 <

- name: Create Folder
  file: 
    path: /srv/www/
    owner: user 
    group: user 
    mode: 0755 
    state: directory

Versi yang lebih lama

- name: Create Folder
  file: 
   path=/srv/www/
   owner=user 
   group=user 
   mode=0755 
   state=directory

Rujuk - http://docs.ansible.com/ansible/file_module.html

Chathuranga Abeyrathna
sumber
14

Direktori dapat dibuat menggunakan modul file saja, karena direktori tidak lain adalah file.

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

Itulah cara Anda sebenarnya dapat mengatur izin, pemilik dan grup. Tiga parameter terakhir tidak wajib.

qubsup
sumber
7

Anda dapat membuat direktori. menggunakan

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

Anda juga dapat berkonsultasi dengan http://docs.ansible.com/ansible/file_module.html untuk perincian lebih lanjut tentang direktori dan sistem file.

Ali Warrich
sumber
7

Tambahan untuk semua jawaban di sini, ada banyak situasi ketika Anda perlu membuat lebih dari satu direktori sehingga merupakan ide yang baik untuk menggunakan loop alih-alih membuat tugas terpisah untuk setiap direktori.

- name: Creates directory
  file:
    path: "{{ item }}"
    state: directory
  with_items:
  - /srv/www
  - /dir/foo
  - /dir/bar
Andrey Bistrinin
sumber
3

Hanya perlu menempatkan kondisi untuk menjalankan tugas untuk distribusi tertentu

- name: Creates directory
  file: path=/src/www state=directory
  when: ansible_distribution == 'Debian'
Bhavesh Vasoya
sumber
3

Anda bisa menggunakan pernyataan itu

- name: webfolder - Creates web folder
  file: path=/srv/www state=directory owner=www-data group=www-data mode=0775`
Mazi
sumber
3

Jika Anda ingin membuat direktori di windows:

  • nama: Buat struktur direktori
    win_file:
    path: C: \ Temp \ folder \ subfolder>
    state: direktori

Alexandru Muica
sumber
2

Kami memiliki modul yang tersedia untuk membuat direktori, file dalam ansible

Contoh

- name: Creates directory
  file:
    path: /src/www
    state: directory
Mohd Umar Mubeen
sumber
1

Anda dapat langsung menjalankan perintah dan membuat langsung menggunakan yang dimungkinkan

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

ATAU

ansible -v targethostname -m file -a "path=/srv/www state=directory" -u targetuser
RegexCracker
sumber
1
---
- hosts: all
  connection: local
  tasks:
    - name: Creates directory
      file: path=/src/www state=directory

Playbook di atas akan membuat direktori www di jalur / src.

Sebelum menjalankan buku pedoman di atas. Harap pastikan koneksi host yang memungkinkan Anda harus disetel,

"localhost ansible_connection = local"

harus ada di / etc / ansible / hosts

untuk informasi lebih lanjut, silakan beri tahu saya.

Saurabh
sumber
file: path = / src / www state = direktori
Saurabh
1

untuk membuat direktori

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

Gunakan modul file untuk membuat direktori dan dapatkan detail tentang modul file menggunakan perintah "file ansible-doc"

Berikut adalah opsi "status" yang menjelaskan:

Jika directory, semua subdirektori langsung akan dibuat jika tidak ada, karena 1.7 mereka akan dibuat dengan izin yang disediakan.
Jika file, file TIDAK akan dibuat jika tidak ada, lihat modul [copy] atau [template] jika Anda menginginkan perilaku itu.
Jika link, tautan simbolik akan dibuat atau diubah. Gunakan harduntuk hardlink.
Jika absent, direktori akan dihapus secara rekursif, dan file atau symlink akan dibatalkan tautannya.

Perhatikan bahwa filetidak akan gagal jika jalur tidak ada karena negara tidak berubah.

Jika touch(baru dalam 1.4), file kosong akan dibuat jika path tidak ada, sementara file atau direktori yang ada akan menerima akses file yang diperbarui dan waktu modifikasi (mirip dengan cara touchkerjanya dari baris perintah).

Priyanka Bhardwaj
sumber
1

Anda dapat menggunakan modul "file" dalam hal ini, ada begitu banyak argumen yang dapat Anda lewati untuk direktori yang baru dibuat seperti pemilik, grup, lokasi, mode dan sebagainya .....

lihat dokumen ini untuk penjelasan terperinci tentang modul file ...

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

ingat modul ini bukan hanya untuk membuat direktori !!!

pengguna11345576
sumber
1

Cara termudah untuk membuat direktori di Ansible.

  • name: Buat direktori_anda jika tidak ada. file: path: / etc / your_directory

ATAU

Anda ingin memberikan hak istimewa sudo ke direktori itu.

  • name: Buat direktori_anda jika tidak ada. file: path: / etc / your_directory mode: '777'
Muhammad Ahmad
sumber
0

Saya melihat banyak contoh Playbook dan saya ingin menyebutkan contoh perintah Adhoc.

$ ansible -i inventaris -m file -a "path = / tmp / direcory state = direktori (alih-alih direktori kita dapat menyebutkan sentuhan untuk membuat file)

Kandasamy Murugan
sumber
0

Anda perlu menggunakan modul file untuk kasus ini. Di bawah ini buku pedoman yang dapat Anda gunakan untuk referensi Anda.

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

Untuk memeriksa apakah direktori ada dan kemudian menjalankan beberapa tugas (misalnya membuat direktori) gunakan yang berikut ini

- 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
Levon
sumber
0

Anda menginginkan filemodul. Untuk membuat direktori, Anda perlu menentukan opsi state: directory:

- name: Creates directory
  file:
    path: /src/www
    state: directory
Devang Radadiya
sumber
-5

ini cara yang lebih mudah.

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

Ender Wan
sumber
2
ini bukan idempoten.
qubsup