如何使用Ansible创建目录

Gau*_*wal 347 filesystems directory ansible

如何使用Ansible playbook www/srv基于Debian的系统上创建目录?

leu*_*cos 593

你想要文件模块.要创建目录,您需要指定选项state=directory:

- name: Creates directory
  file:
    path: /src/www
    state: directory
Run Code Online (Sandbox Code Playgroud)

您可以在http://docs.ansible.com/file_module.html上查看其他选项

  • 如果`state = directory`,如果它们不存在,将创建所有直接子目录,因为1.7将使用提供的权限创建它们. (28认同)
  • @JamieJackson有一个错误,应该是“所有中间子目录”。 (4认同)
  • @Alex说“父目录”不是更清楚吗? (3认同)
  • 这个答案是简约且正确的,但有些人认为显式声明所有者、组和模式是最佳实践。这样做的原因之一 - 即使看起来没有必要 - 是因为随着时间的推移,你当前的假设会失败:发行版/版本发生变化,并随之而来不同的 umask 默认值,或者票证数据库可以被迁移+删除(失去对什么命令的跟踪) -line 参数部署/安装声明),也许您无法再回答问题。 (3认同)
  • @Alex“所有直接子目录”令人困惑,您可以定义它并举个例子吗? (2认同)

Arb*_*zar 188

您甚至可以扩展文件模块,甚至可以通过它设置所有者,组和权限.(参考:Ansible文件文档)

- name: Creates directory
  file:
    path: /src/www
    state: directory
    owner: www-data
    group: www-data
    mode: 0775
Run Code Online (Sandbox Code Playgroud)

甚至,您可以递归地创建目录:

- name: Creates directory
  file:
    path: /src/www
    state: directory
    owner: www-data
    group: www-data
    mode: 0775
    recurse: yes
Run Code Online (Sandbox Code Playgroud)

这样,如果它们不存在,它将创建两个目录.

  • `recursive`参数使得它更像是使用`mkdir -p`(对于那些使用googling _ansible mkdir -p_). (33认同)
  • `recurse`参数不喜欢`mkdir -p`.它以递归方式设置指定的文件属性(仅适用于state = directory).如果`state = directory`,如果它们不存在,将创建所有直接子目录,因为1.7将使用提供的权限创建它们. (3认同)
  • 我发现它也改变了子文件权限...几乎像mkdir -p/foo/bar && chmod -R 0775/foo/bar ..还有其他人用Ansible 2.0.0.2观察到这一点 (2认同)

And*_*nin 15

对于此处的所有答案,在很多情况下您需要创建多个目录,因此最好使用循环而不是为每个目录创建单独的任务。

- name: Creates directory
  file:
    path: "{{ item }}"
    state: directory
  with_items:
  - /srv/www
  - /dir/foo
  - /dir/bar
Run Code Online (Sandbox Code Playgroud)


Cha*_*hna 13

你可以创建使用:

最新版本2 <

- name: Create Folder
  file: 
    path: /srv/www/
    owner: user 
    group: user 
    mode: 0755 
    state: directory
Run Code Online (Sandbox Code Playgroud)

旧版本

- name: Create Folder
  file: 
   path=/srv/www/
   owner=user 
   group=user 
   mode=0755 
   state=directory
Run Code Online (Sandbox Code Playgroud)

请参阅 - http://docs.ansible.com/ansible/file_module.html


小智 12

目录只能使用文件模块创建,因为目录只是一个文件.

# create a directory if it doesn't exist
- file:
    path: /etc/some_directory
    state: directory
    mode: 0755
    owner: foo
    group: foo
Run Code Online (Sandbox Code Playgroud)


Sam*_*eeb 10

- name: Create a directory 
  ansible.builtin.file:
    path: /etc/some_directory
    state: directory
    mode: '0755'
Run Code Online (Sandbox Code Playgroud)


qub*_*sup 8

- file:
    path: /etc/some_directory
    state: directory
    mode: 0755
    owner: someone
    group: somegroup
Run Code Online (Sandbox Code Playgroud)

这就是你实际上也可以设置权限,所有者和组的方式.最后三个参数不是强制性的.


Ali*_*ich 7

您可以创建目录.运用

# create a directory if it doesn't exist
- file: path=/src/www state=directory mode=0755
Run Code Online (Sandbox Code Playgroud)

您还可以查阅 http://docs.ansible.com/ansible/file_module.html 以获取有关regaridng目录和文件系统的更多详细信息.