Cách tạo thư mục bằng Ansible


Câu trả lời:


637

Bạn muốn mô-đun tập tin. Để tạo một thư mục, bạn cần chỉ định tùy chọn state=directory:

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

Bạn có thể xem các tùy chọn khác tại http://docs.ansible.com/file_module.html


36
Nếu state=directory, tất cả các thư mục con ngay lập tức sẽ được tạo nếu chúng không tồn tại, vì 1.7 chúng sẽ được tạo với các quyền được cung cấp.
Alex

1
@Alex all immediate subdirectorieskhó hiểu, bạn có thể định nghĩa điều đó và đưa ra một ví dụ không?
Jamie Jackson

8
@JamieJackson Có một lỗi, nên là "tất cả các thư mục con trung gian".
Alex

203

Bạn thậm chí có thể mở rộng mô-đun tệp và thậm chí đặt chủ sở hữu, nhóm & quyền thông qua nó. (Tham khảo: Tài liệu tập tin Ansible )

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

Thậm chí, bạn có thể tạo các thư mục đệ quy:

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

Bằng cách này, nó sẽ tạo cả hai thư mục, nếu chúng không tồn tại.


38
Đối recursivesố làm cho điều này giống như sử dụng mkdir -p(đối với những người đang tìm kiếm mkdir -p ).
Micah Elliott

2
Tôi thấy rằng nó cũng thay đổi quyền truy cập tệp con ... gần giống như mkdir -p / foo / bar && chmod -R 0775 / foo / bar .. có ai khác quan sát điều này với Ansible 2.0.0.2
ThePracticalOne

5
Các recursetham số không thích mkdir -p. Nó đệ quy đặt các thuộc tính tệp được chỉ định (chỉ áp dụng cho thư mục state =). Nếu state=directory, tất cả các thư mục con ngay lập tức sẽ được tạo nếu chúng không tồn tại, vì 1.7 chúng sẽ được tạo với các quyền được cung cấp.
Alex

1
cái này sử dụng cú pháp cũ với các =ký tự, sẽ rất tuyệt khi cập nhật nó với :cú pháp với mỗi thuộc tính trên một dòng mới
ympostor

@ThePracticalOne - Có ... sử dụng "recurse" hành xử giống hệt như cách chmod -Rlàm. Đó là, nếu pathđã tồn tại dưới dạng một thư mục và có các tệp bên trong nó, recursetùy chọn sẽ (đôi khi không may) cũng áp dụng các quyền tương tự cho các tệp. Điều này là do thiết kế , cho tốt hơn hoặc tồi tệ hơn.
Dale Anderson


14

Thư mục chỉ có thể được tạo bằng mô-đun tệp, vì thư mục không là gì ngoài tệp.

# 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

Đó là cách bạn thực sự cũng có thể đặt quyền, chủ sở hữu và nhóm. Ba tham số cuối cùng không bắt buộc.



7

Bổ sung cho tất cả các câu trả lời ở đây, có rất nhiều tình huống khi bạn cần tạo nhiều hơn một thư mục, vì vậy nên sử dụng các vòng lặp thay vì tạo các tác vụ riêng biệt cho mỗi thư mục.

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

3

Chỉ cần đặt điều kiện để thực thi tác vụ để phân phối cụ thể

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

3

Bạn có thể sử dụng câu lệnh

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

3

Nếu bạn muốn tạo thư mục trong windows:

  • Tên: Tạo cấu trúc thư mục
    win_file:
    path: C: \ Temp \ thư mục \ thư mục con>
    trạng thái: thư mục


2

Chúng tôi có sẵn các mô-đun để tạo thư mục, tập tin trong ansible

Thí dụ

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

1

Bạn có thể trực tiếp chạy lệnh và tạo trực tiếp bằng cách sử dụng ansible

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

HOẶC LÀ

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 ở trên sẽ tạo thư mục www trong đường dẫn / src.

Trước khi chạy trên playbook. Vui lòng đảm bảo rằng kết nối máy chủ ansible của bạn phải được đặt,

"localhost ansible_connection = local"

nên có mặt trong / etc / ansible / hosts

để biết thêm thông tin xin vui lòng cho tôi biết.


tệp: path = / src / www state = thư mục
Saurabh

1

để tạo thư mục

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

1

Sử dụng mô-đun tệp để tạo một thư mục và nhận thông tin chi tiết về mô-đun tệp bằng lệnh "ansible-doc file"

Đây là một tùy chọn "trạng thái" giải thích:

Nếu directory, tất cả các thư mục con ngay lập tức sẽ được tạo nếu chúng không tồn tại, vì 1.7 chúng sẽ được tạo với các quyền được cung cấp.
Nếu file, tệp sẽ KHÔNG được tạo nếu nó không tồn tại, hãy xem mô-đun [sao chép] hoặc [mẫu] nếu bạn muốn hành vi đó.
Nếu link, liên kết tượng trưng sẽ được tạo hoặc thay đổi. Sử dụng hardcho các liên kết cứng.
Nếu absent, thư mục sẽ bị xóa đệ quy và các tệp hoặc liên kết tượng trưng sẽ bị hủy liên kết.

Lưu ý rằng filesẽ không thất bại nếu đường dẫn không tồn tại vì trạng thái không thay đổi.

Nếu touch(mới trong 1.4), một tệp trống sẽ được tạo nếu đường dẫn không tồn tại, trong khi tệp hoặc thư mục hiện có sẽ nhận được thời gian truy cập và sửa đổi tệp cập nhật (tương tự như cách touchhoạt động từ dòng lệnh).


1

bạn có thể sử dụng mô-đun "tệp" trong trường hợp này, có rất nhiều đối số mà bạn có thể vượt qua cho một thư mục mới được tạo như chủ sở hữu, nhóm, vị trí, chế độ, v.v.

vui lòng tham khảo tài liệu này để được giải thích chi tiết về mô-đun tệp ...

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

hãy nhớ mô-đun này không chỉ để tạo thư mục !!!


1

Cách dễ nhất để tạo một thư mục trong Ansible.

  • Tên: Tạo your_directory nếu nó không tồn tại. tập tin: đường dẫn: / etc / your_directory

HOẶC LÀ

Bạn muốn cung cấp đặc quyền sudo cho thư mục đó.

  • Tên: Tạo your_directory nếu nó không tồn tại. tệp: đường dẫn: / etc / your_directory chế độ: '777'

0

Tôi thấy rất nhiều ví dụ về Playbooks và tôi muốn đề cập đến ví dụ về lệnh Adhoc.

$ ansible -i Invent -m file -a "path = / tmp / direcory state = thư mục (thay vì thư mục chúng ta có thể đề cập đến cảm ứng để tạo tệp)


0

Bạn cần sử dụng mô-đun tập tin cho trường hợp này. Dưới đây playbook bạn có thể sử dụng để tham khảo của bạn.

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

Để kiểm tra xem thư mục có tồn tại không và sau đó chạy một số tác vụ (ví dụ: tạo thư mục), hãy sử dụng cách sau

- 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

Bạn muốn filemô-đun. Để tạo một thư mục, bạn cần chỉ định tùy chọn state: directory:

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

-5

đây là cách dễ dàng hơn

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


2
Đây không phải là bình thường.
qubsup
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.