Ansible:更改目录问题的权限

Ansible: Changing permission of a directory issue

我正在 运行执行以下 Ansible 任务来更改目录及其内容的权限。

- name: Change ownership of everything below /opt/as2/app-server
  file: path=/opt/as2/app-server state=directory recurse=yes owner=adrt group=adrt

当运行宁它我得到以下问题:

TASK [appserver : Change ownership of everything below /opt/as2/app-server] ****
fatal: [192.168.1.182]: FAILED! => {"changed": false, "failed": true, "module_stderr": "", "module_stdout": "Traceback (most recent call last):\r\n File \"/tmp/ansible_UrBo6x/ansible_module_file.py\", line 451, in \r\n main()\r\n File \"/tmp/ansible_UrBo6x/ansible_module_file.py\", line 335, in main\r\n changed |= recursive_set_attributes(module, to_bytes(file_args['path'], errors='surrogate_or_strict'), follow, file_args)\r\n File \"/tmp/ansible_UrBo6x/ansible_module_file.py\", line 146, in recursive_set_attributes\r\n changed |= module.set_fs_attributes_if_different(tmp_file_args, changed)\r\n File \"/tmp/ansible_UrBo6x/ansible_modlib.zip/ansible/module_utils/basic.py\", line 1163, in set_fs_attributes_if_different\r\n File \"/tmp/ansible_UrBo6x/ansible_modlib.zip/ansible/module_utils/basic.py\", line 929, in set_owner_if_different\r\n File \"/tmp/ansible_UrBo6x/ansible_modlib.zip/ansible/module_utils/basic.py\", line 842, in user_and_group\r\nOSError: [Errno 2] No such file or directory: '/opt/as2/app-server-1.0.0/apps/station/WEB-INF/classes/org/adroitlogic/isuite/metrics/As2MetricsService/usr/bin/python$tt__collectStats_closure14.class'\r\n", "msg": "MODULE FAILURE"}

基本上它说没有这样的文件或目录,

/opt/as2/app-server-1.0.0/apps/station/WEB-INF/classes/org/adroitlogic/isuite/metrics/As2MetricsService/usr/bin/python$tt__collectStats_closure14.class

目录的内容,/opt/as2/app-server/apps/station/WEB-INF/classes/org/adroitlogic/isuite/metrics/是,

As2MetricsService$_$tt__CountStatisticsLists_closure3.class
As2MetricsService$_$tt__collectStats_closure10.class
As2MetricsService$_$tt__collectStats_closure11.class
As2MetricsService$_$tt__collectStats_closure12.class
As2MetricsService$_$tt__collectStats_closure13.class
As2MetricsService$_$tt__collectStats_closure14.class
As2MetricsService$_$tt__collectStats_closure15.class
As2MetricsService$_$tt__collectStats_closure4.class
As2MetricsService$_$tt__collectStats_closure5.class
As2MetricsService$_$tt__collectStats_closure6.class
As2MetricsService$_$tt__collectStats_closure7.class
As2MetricsService$_$tt__collectStats_closure8.class
As2MetricsService$_$tt__collectStats_closure9.class
As2MetricsService$_CountStatisticsLists_closure1.class
As2MetricsService$_collectStats_closure2.class
As2MetricsService.class

没有子目录。

另外,当我 运行 目录 /opt/as2/app-server 中的命令 chown -R adrt:adrt . 时,它执行时没有任何问题。

帮助我了解这里发生的事情。

Help me to understand what is happening here.

您刚刚在 Ansible 中发现了一个错误,当它处理的文件名包含 $_ 序列时,该错误会导致模块失败。

名称在没有转义 $ 字符的情况下传递(或者更确切地说是使用显式转换请求 os.path.expandvars(filename))并且序列 $_ 作为 built-in 变量处理解析为当前进程的路径(在本例中为 /usr/bin/python,因为 Ansible 使用 Python 到 运行 其模块)。

结果文件名:

As2MetricsService$_$tt__collectStats_closure14.class

解释为:

As2MetricsService/usr/bin/python$tt__collectStats_closure14.class

并且系统抛出文件不存在的错误(这是真的)。​​


在修复之前,我猜你必须用 command 模块调用 chown