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


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.


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

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

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.



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

3

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

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

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`

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


2

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

Przykład

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

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

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


plik: ścieżka = / src / www state = katalog
Saurabh

1

stworzyć katalog

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

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



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'

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)


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 

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

0

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

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

-5

tutaj jest łatwiejszy sposób.

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


2
to nie jest idempotentne.
qubsup,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.