编辑:我做了一个愚蠢的思想错误,我通过一个无形的docker基础图像运行ansible。该目录已创建,但在运行ansible的容器中,而不是在ansible docker映像的主机上
我使用ansible来创建稍后用于docker挂载的目录。
在剧本中我有以下内容:
- name: Create DB mount point
file:
path: /mnt/sda1/bic-mounts/oracle-database
state: directory
directory_mode: "777"
mode: "777"
我不得不添加directory_mode
参数,即使它没有记录,以使其工作:从几个月前看看this ansible issue似乎我不是唯一一个有这个问题。
使用该参数创建目录,但其模式为755
而不是777
。它似乎不是八进制与十进制的问题(因为它不应该,因为它是一个字符串,但谁知道),因为十进制中的777是八进制的1411。
有谁知道导致权限错误的原因是什么?我在文档中找不到任何阻止777的东西,但是directory_mode
的需求也没有记录:)
我确认指定前导零工作:
- name: Create DB mount point
file:
path: /mnt/sda1/bic-mounts/oracle-database
state: directory
mode: 0777
模式文件或目录应该是。对于那些习惯于/ usr / bin / chmod的人来说,记住模式实际上是八进制数。你必须指定前导零,以便Ansible的YAML解析器知道它是一个八进制数(如0644或01777)或引用它(如'644'或'0644'所以Ansible接收一个字符串并可以自己从字符串转换为在没有遵循这些规则之一的情况下给Ansible一个数字将得到一个十进制数,这将产生意想不到的结果。从版本1.8开始,模式可以指定为符号模式(例如,u + rwx或u = rw ,G = R,O = r)的。