Jak utworzyć katalog za pomocą Ansible

Odpowiedzi:

635

Chcesz moduł plików. Aby utworzyć katalog, musisz określić opcję state=directory:

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

Możesz zobaczyć inne opcje na http://docs.ansible.com/file_module.html

leucos
źródło
36
Jeśli state=directorywszystkie bezpośrednie podkatalogi zostaną utworzone, jeśli nie istnieją, od wersji 1.7 zostaną utworzone z podanymi uprawnieniami.
Alex,
1
@Alex all immediate subdirectoriesjest mylące, czy możesz to zdefiniować i podać przykład?
Jamie Jackson,
8
@JamieJackson Wystąpił błąd, powinny być „wszystkie pośrednie podkatalogi”.
Alex
203

Możesz nawet rozszerzyć moduł plików, a nawet ustawić właściciela, grupę i uprawnienia za jego pośrednictwem. (Patrz: dokumentacja pliku Ansible )

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

Możesz nawet tworzyć katalogi rekurencyjnie:

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

W ten sposób utworzą oba katalogi, jeśli nie istniały.

Arbab Nazar
źródło
38
recursiveArgumentem czyni to podobnie jak przy użyciu mkdir -p(dla tych googling ansibl mkdir -p ).
Micah Elliott,
2
Przekonałem się, że zmienia także uprawnienia do plików potomnych ... prawie jak mkdir -p / foo / bar && chmod -R 0775 / foo / bar .. czy ktoś jeszcze to zauważył w Ansible 2.0.0.2
ThePracticalOne
5
Ten recurseparametr nie lubi mkdir -p. Rekurencyjnie ustawia określone atrybuty pliku (dotyczy tylko stanu = katalog). Jeśli state=directorywszystkie bezpośrednie podkatalogi zostaną utworzone, jeśli nie istnieją, od wersji 1.7 zostaną utworzone z podanymi uprawnieniami.
Alex,
1
to używa starej składni z =znakami, byłoby wspaniale zaktualizować ją :składnią z każdym atrybutem w nowej linii
ympostor
@ThePracticalOne - Tak ... użycie „rekurencji” zachowuje się dokładnie tak samo chmod -R. To znaczy, jeśli pathjuż istnieje jako katalog, a są w nim pliki, recurseopcja (czasami niestety) również zastosuje te same uprawnienia do plików. Jest to zgodne z projektem , na lepsze lub gorsze.
Dale Anderson
14

możesz stworzyć używając:

Najnowsza wersja 2 <

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

Starsza wersja

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

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

Chathuranga Abeyrathna
źródło
14

Katalog można utworzyć tylko za pomocą modułu plików, ponieważ katalog to tylko plik.

# create a directory if it doesn't exist
- file:
    path: /etc/some_directory
    state: directory
    mode: 0755
    owner: foo
    group: foo
użytkownik3004224
źródło
8
- file:
    path: /etc/some_directory
    state: directory
    mode: 0755
    owner: someone
    group: somegroup

W ten sposób możesz także ustawić uprawnienia, właściciela i grupę. Ostatnie trzy parametry nie są obowiązkowe.

qubsup
źródło
7

Możesz utworzyć katalog. za pomocą

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

Możesz również zapoznać się z http://docs.ansible.com/ansible/file_module.html w celu uzyskania dalszych szczegółów dotyczących katalogu i systemu plików.

Ali Warrich
źródło
7

Oprócz wszystkich odpowiedzi tutaj istnieje wiele sytuacji, w których musisz utworzyć więcej niż jeden katalog, więc dobrym pomysłem jest użycie pętli zamiast tworzenia osobnego zadania dla każdego katalogu.

- name: Creates directory
  file:
    path: "{{ item }}"
    state: directory
  with_items:
  - /srv/www
  - /dir/foo
  - /dir/bar
Andrey Bistrinin
źródło
3

Wystarczy ustawić warunek, aby wykonać zadanie dla określonej dystrybucji

- name: Creates directory
  file: path=/src/www state=directory
  when: ansible_distribution == 'Debian'
Bhavesh Vasoya
źródło
3

Możesz użyć wyciągu

- name: webfolder - Creates web folder
  file: path=/srv/www state=directory owner=www-data group=www-data mode=0775`
Mazi
źródło
3

Jeśli chcesz utworzyć katalog w systemie Windows:

  • nazwa: Utwórz strukturę katalogów
    plik_win:
    ścieżka: C: \ Temp \ folder \ podfolder>
    stan: katalog

Alexandru Muica
źródło
2

Mamy dostępne moduły do ​​stworzenia katalogu, pliku w ansible

Przykład

- name: Creates directory
  file:
    path: /src/www
    state: directory
Mohd Umar Mubeen
źródło
1

Możesz bezpośrednio uruchomić polecenie i utworzyć bezpośrednio za pomocą ansible

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

LUB

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

Powyższy poradnik utworzy katalog www w ścieżce / src.

Przed uruchomieniem powyżej poradnika. Upewnij się, że połączenie z hostem ansible powinno być ustawione,

„localhost ansible_connection = local”

powinien być obecny w / etc / ansible / hosts

po więcej informacji daj mi znać.

Saurabh
źródło
plik: ścieżka = / src / www state = katalog
Saurabh
1

stworzyć katalog

ansible host_name -m file -a "dest=/home/ansible/vndir state=directory"
sachin_ur
źródło
1

Użyj modułu pliku, aby utworzyć katalog i uzyskać szczegółowe informacje na temat modułu pliku za pomocą polecenia „plik doc-doc”

Oto opcja „stan”, która wyjaśnia:

Jeśli directorywszystkie bezpośrednie podkatalogi zostaną utworzone, jeśli nie istnieją, od wersji 1.7 zostaną utworzone z podanymi uprawnieniami.
Jeśli fileplik NIE zostanie utworzony, jeśli nie istnieje, zobacz moduł [kopia] lub [szablon], jeśli chcesz tego zachowania.
Jeśli linksymboliczne łącze zostanie utworzone lub zmienione. Użyj harddo twardych linków.
Jeśli absentkatalogi zostaną rekursywnie usunięte, a pliki lub dowiązania symboliczne zostaną odłączone.

Pamiętaj, że filenie zawiedzie, jeśli ścieżka nie istnieje, ponieważ stan się nie zmienił.

Jeśli touch(nowość w 1.4), pusty plik zostanie utworzony, jeśli ścieżka nie istnieje, a istniejący plik lub katalog otrzyma zaktualizowany czas dostępu do pliku i modyfikacji (podobnie jak w touchprzypadku wiersza poleceń).

Priyanka Bhardwaj
źródło
1

w tym przypadku możesz użyć modułu „plik”, istnieje tyle argumentów, że możesz przekazać nowy katalog, taki jak właściciel, grupa, lokalizacja, tryb i tak dalej .....

szczegółowe informacje na temat modułu plików znajdują się w tym dokumencie ...

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

pamiętaj, że ten moduł służy nie tylko do tworzenia katalogu !!!

użytkownik11345576
źródło
1

Najprostszym sposobem na utworzenie katalogu w Ansible.

  • nazwa: utwórz katalog, jeśli nie istnieje. file: path: / etc / your_directory

LUB

Chcesz nadać sudo uprawnienia do tego katalogu.

  • nazwa: utwórz katalog, jeśli nie istnieje. file: path: / etc / your_directory tryb: '777'
Muhammad Ahmad
źródło
0

Widzę wiele przykładów Playbooków i chciałbym wspomnieć o przykładzie poleceń Adhoc.

$ ansible -i inwentarz -m plik -a "ścieżka = / tmp / direcory state = katalog (zamiast katalogu możemy wspomnieć o utworzeniu plików dotykiem)

Kandasamy Murugan
źródło
0

W tym przypadku musisz użyć modułu plików. Poniżej poradnika możesz użyć w celach informacyjnych.

    ---
     - 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
źródło
0

Aby sprawdzić, czy katalog istnieje, a następnie uruchomić jakieś zadanie (np. Utworzyć katalog), skorzystaj z następujących poleceń

- 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
źródło
0

Chcesz filemoduł. Aby utworzyć katalog, musisz określić opcję state: directory:

- name: Creates directory
  file:
    path: /src/www
    state: directory
Devang Radadiya
źródło
-5

tutaj jest łatwiejszy sposób.

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

Ender Wan
źródło
2
to nie jest idempotentne.
qubsup,