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


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.


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

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

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.



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

3

Hanya perlu menempatkan kondisi untuk menjalankan tugas untuk distribusi tertentu

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

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`

3

Jika Anda ingin membuat direktori di windows:

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


2

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

Contoh

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

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

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.


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

1

untuk membuat direktori

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

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



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'

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)


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 

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

0

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

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

-5

ini cara yang lebih mudah.

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


2
ini bukan idempoten.
qubsup
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.