Ansible kullanarak dizin nasıl oluşturulur


Yanıtlar:


637

Dosya modülünü istiyorsunuz. Bir dizin oluşturmak için seçeneği belirtmeniz gerekir state=directory:

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

Diğer seçenekleri http://docs.ansible.com/file_module.html adresinde görebilirsiniz.


36
Eğer mevcut değilse state=directory, hemen tüm alt dizinler oluşturulacaktır, 1.7'den beri verilen izinlerle oluşturulacaktır.
Alex

1
@Alex all immediate subdirectorieskafa karıştırıcı, bunu tanımlayıp bir örnek verebilir misiniz?
Jamie Jackson

8
@JamieJackson Bir hata var, "tüm ara alt dizinler" olmalıdır.
Alex

203

Hatta dosya modülünü genişletebilir ve hatta sahibi, grubu ve izni ayarlayabilirsiniz. (Ref: Ansible dosya belgeleri )

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

Hatta dizinleri özyinelemeli olarak oluşturabilirsiniz:

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

Bu şekilde, eğer olmasaydı her iki dizini de yaratacaktır.


38
recursiveArgüman kullanmak gibi bu kadar yapar mkdir -p(bu googling için yanıtlayıcı 'mkdir -p ).
Micah Elliott

2
Alt dosya izinlerini de değiştirdiğini gördüm ... neredeyse mkdir -p / foo / bar && chmod -R 0775 / foo / bar gibi ... Ansible 2.0.0.2
ThePracticalOne

5
recurseParametre sevmez mkdir -p. Belirtilen dosya özniteliklerini özyineli olarak ayarlar (yalnızca state = dizin için geçerlidir). Eğer mevcut değilse state=directory, hemen tüm alt dizinler oluşturulacaktır, 1.7'den beri verilen izinlerle oluşturulacaktır.
Alex

1
Bu =karakterlerle eski sözdizimini kullanır, :yeni bir satırdaki her öznitelikle sözdizimi ile güncellemek harika olurdu
ympostor 7

@ThePracticalOne - Evet ... "recurse" kullanmak tam olarak aynı şekilde davranır chmod -R. Yani, pathzaten bir dir olarak varsa ve içinde dosyalar varsa, recurseseçenek (bazen ne yazık ki) dosyalara da aynı izinleri uygulayacaktır. Bu, tasarımla , daha iyi veya daha kötü için.
Dale Anderson


14

Dizin yalnızca dosya modülü kullanılarak oluşturulabilir, çünkü dizin bir dosyadan başka bir şey değildir.

# 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

Aslında izinleri, sahibi ve grubu da ayarlayabilirsiniz. Son üç parametre zorunlu değildir.



7

Buradaki tüm yanıtlar için ek olarak, birden fazla dizin oluşturmanız gerektiğinde birçok durum vardır, bu nedenle her dizin için ayrı görev oluşturmak yerine döngüler kullanmak iyi bir fikirdir.

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

3

Sadece belirli dağıtım için görevi yürütmek için koşul koymanız gerekiyor

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

3

İfadeyi kullanabilirsiniz

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

3

Windows'da dizin oluşturmak istiyorsanız:

  • name: Dizin yapısı oluşturun
    win_file:
    path: C: \ Temp \ folder \ subfolder>
    durum: dizin


2

Biz dizin oluşturmak için kullanılabilir modüller var, ansible dosya

Misal

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

1

Doğrudan komutu çalıştırabilir ve doğrudan ansible kullanarak oluşturabilirsiniz

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

VEYA

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

Yukarıdaki playbook / src yolunda www dizini oluşturacaktır.

Başucu kitabının üzerinde çalıştırmadan önce. Lütfen sorumlu ana makine bağlantınızın ayarlandığından emin olun,

"localhost ansible_connection = yerel"

/ etc / ansible / host dosyalarında bulunmalıdır

daha fazla bilgi için lütfen bana bildirin.


dosya: yol = / src / www durum = dizin
Saurabh

1

dizin oluşturmak

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

1

Bir dizin oluşturmak ve "ansible-doc dosyası" komutunu kullanarak dosya modülü hakkındaki ayrıntıları almak için dosya modülünü kullanın

İşte açıklayan bir seçenek "durum":

Eğer mevcut değilse directory, hemen tüm alt dizinler oluşturulacaktır, 1.7'den beri verilen izinlerle oluşturulacaktır. Dosya
yoksa file, dosya OLUŞMAZ, bu davranışı istiyorsanız [kopya] veya [şablon] modülüne bakın.
Eğer varsa link, sembolik bağlantı oluşturulur veya değiştirilir. hardSert bağlantılar için kullanın .
Eğer absentdizinler özyinelemeli olarak silinecek ve dosya veya sembolik bağlantılar kaldırılacaktır.

fileDurum değişmediği için yol yoksa, başarısız olmayacağını unutmayın .

Eğer touchyol yoksa varolan bir dosya ya da dizin (yön benzer dosya erişim ve değişiklik zamanlarını güncellenmiş alacaksınız ise (1.4 yeni), boş bir dosya, oluşturulacak touchkomut satırından eserleri).



1

Ansible'da bir dizin yapmanın en kolay yolu .

  • name: Varsa dizininizi oluşturun. dosya: yol: / etc / dizininiz

VEYA

Bu dizine sudo ayrıcalıkları vermek istiyorsunuz .

  • name: Varsa dizininizi oluşturun. dosya: yol: / etc / dizininiz: '777'

0

Çok sayıda Playbooks örneği görüyorum ve Adhoc komutları örneğinden bahsetmek istiyorum.

$ ansible -i envanter -m dosya -a "yol = / tmp / direcory state = dizin (dizin yerine dosya oluşturmak için dokunmadan bahsedebiliriz)


0

Bu durumda dosya modülünü kullanmanız gerekir. Referansınız için kullanabileceğiniz oyun kitabının altında.

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

Dizin olup olmadığını kontrol etmek ve ardından bazı görevleri çalıştırmak (örneğin, dizin oluşturmak) için aşağıdakileri kullanın

- 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

fileModülü istiyorsunuz . Bir dizin oluşturmak için seçeneği belirtmeniz gerekir state: directory:

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

-5

işte daha kolay bir yol.

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


2
bu idempotent değil.
qubsup
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.