首页 文章

Ansible:更改目录问题的权限

提问于
浏览
1

我正在运行以下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

运行时我遇到以下问题:

任务[appserver:更改/ opt / as2 / app-server下所有内容的所有权] ****致命:[192.168.1.182]:失败! => {“已更改”: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行,在主\ 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 \”,第146行,在recursive_set_attributes \ r \ n中更改了| =模块 . set_fs_attributes_if_different(tmp_file_args,已更改)\ 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 / 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 . 时,它执行没有任何问题 .

帮助我理解这里发生的事情 .

1 回答

  • 2

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

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

    传递名称时不会转义 $ 字符(或者更确切地说是使用显式转换请求os.path.expandvars(filename)),序列 $_ 作为内置变量处理,解析为当前进程的路径(在这种情况下为 /usr/bin/python ,因为Ansible使用Python来运行其模块) .

    结果文件名:

    As2MetricsService$_$tt__collectStats_closure14.class
    

    被解释为:

    As2MetricsService/usr/bin/python$tt__collectStats_closure14.class
    

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


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

相关问题