【问题标题】:Ansible: Changing permission of a directory issueAnsible:更改目录问题的权限
【发布时间】:2017-01-20 09:42:44
【问题描述】:

我正在运行以下 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 : 更改 /opt/as2/app-server 下所有内容的所有权] ****
致命:[192.168.1.182]:失败! => {"changed": false, "failed": true, "module_stderr": "", "module_stdout": "Traceback (最近一次调用最后):\r\n 文件\"/tmp/ansible_UrBo6x/ansible_module_file.py \",第 451 行,在 \r\n main()\r\n 文件 \"/tmp/ansible_UrBo6x/ansible_module_file.py\",第 335 行,在 main\r\n 中更改 |= 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 文件 \"/tmp/ansible_UrBo6x/ansible_modlib.zip/ansible/module_utils/basic.py\",第 1163 行,在 set_fs_attributes_if_different\r\n 文件 \"/tmp/ansible_UrBo6x/ansible_modlib .zip/ansible/module_utils/basic.py\",第 929 行,在 set_owner_if_different\r\n 文件 \"/tmp/ansible_UrBo6x/ansible_modlib.zip/ansible/module_utils/basic.py\",第 842 行,在 user_and_group\ r\nOSError: [Errno 2] 没有这样的文件或目录:'/opt/as2/a pp-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失败”}

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

/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 . 时,它的执行没有任何问题。

帮助我了解这里发生了什么。

【问题讨论】:

  • 不幸的是它对我来说并不那么明显。
  • 你要向 GitHub 提交问题吗?
  • 是的,我打算这样做。
  • @techraf 在github.com/ansible/ansible/issues/20496 报告。如果需要修改,请告诉我。
  • 我不是决定好坏的人,但既然您问...乍一看,我认为您不需要将读者与这条漫长的道路混淆。它甚至失败了./testdir/test$_$file

标签: java ansible ansible-playbook chown


【解决方案1】:

帮助我了解这里发生了什么。

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

传递名称时没有转义$ 字符(或者更确切地说是使用显式转换请求os.path.expandvars(filename)),并且序列$_ 被处理为解析为当前进程路径的内置变量(@ 987654326@ 在这种情况下,因为 Ansible 使用 Python 来运行它的模块)。

结果文件名:

As2MetricsService$_$tt__collectStats_closure14.class

被解释为:

As2MetricsService/usr/bin/python$tt__collectStats_closure14.class

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


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

【讨论】:

    猜你喜欢
    • 2013-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-01
    • 2012-04-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多