Ansible template模块mode以0开头时的异常行为问询
Ansible循环中mode值被转换的问题解析
这是预期行为,并非Ansible Bug,原因和YAML的解析规则直接相关:
- YAML语法中,以
0开头的数字会被自动解析为八进制数,八进制0775对应的十进制值就是509。 - 单个任务中直接写
mode: 0775时,Ansible的参数处理逻辑会直接识别这个八进制格式的数值,不会触发转换问题。 - 但在循环场景中,如果你的
item.mode是未加引号的0775,YAML会先将其转换为十进制509再传递给Ansible。而Ansible的mode参数要求必须是带0前缀的八进制格式或符号形式(比如u=rwx,g=rwx,o=rx),十进制数值不符合要求,因此触发报错。
解决方法很简单:给循环中的mode值添加引号,比如定义为'0775',这样YAML会将其当作字符串处理,Ansible就能正确识别为合法的八进制mode格式。
内容的提问来源于stack exchange,提问作者Kevin C
相关产品推荐
相关产品推荐

