【问题标题】:Ansible copy module requires writable parent directory?Ansible 复制模块需要可写的父目录?
【发布时间】:2020-05-08 00:56:40
【问题描述】:

需要设置/proc/sys/net/ipv4/conf/all/forwarding为1

这可以通过命令轻松完成

- name: Enable IPv4 traffic forwarding
  command: echo 1 > /proc/sys/net/ipv4/conf/all/forwarding

但这是不好的做法 - 它总是会“改变”任务。

所以我尝试了以下方法:

- name: Enable IPv4 traffic forwarding
  copy: content=1 dest="/proc/sys/net/ipv4/conf/all/forwarding" force=yes

失败并显示消息:“Destination /proc/sys/net/ipv4/conf/all not writable”

根据sources 似乎复制总是需要父目录是可写的。但是 1)我不明白为什么 2)任何其他“惯用”方式将目标文件设置为所需值?

【问题讨论】:

  • 切换到“同步”模块能解决问题吗?
  • command: echo 1 > /proc/sys/net/ipv4/conf/all/forwarding 会直接回显“1 > /proc/sys...”,而不是写入文件-command 不会通过 shell 运行,因此 shell 元字符不会工作。你需要/想要shell: echo 1 > /proc/sys/net/ipv4/conf/all/forwarding

标签: ansible


【解决方案1】:

虽然我仍然不明白为什么复制需要检查父目录权限,但感谢@larsks:

sysctl module 更改 sysctl.conf 和 /proc 值

这解决了我的任务

【讨论】:

    【解决方案2】:
    - name: Enable IPv4 traffic forwarding
      copy: content=1 dest="/proc/sys/net/ipv4/conf/all/forwarding" unsafe_writes=true
    

    将禁用 Ansible 的原子写入功能,而是直接将 1 写入文件。

    原子写入既好又有用,因为它们意味着您永远不会得到一个损坏的文件,该文件具有交错的多个进程的输出,但/proc 是一个特别神奇的东西。经典的 Unix 舞蹈是在完成之前写入一个临时文件,然后将其重命名为您想要中断的最终文件名,因为 /proc 不允许您创建随机临时文件。

    【讨论】:

      【解决方案3】:

      我找到了解决此问题的方法:

        - name: Create temp copy of mongod.conf
          copy:
            src : /etc/mongod.conf
            dest: /tmp/mongod.conf
            remote_src: yes
          diff: no
          check_mode: no
          changed_when: false
      
        - name: Copy config file mongod.conf
          copy:
            src : "/source/of/your/mongod.conf" 
            dest: "/tmp/mongod.conf"
          register: result
      
        - name: Copy temp mongod.conf to /etc/mongod.conf
          shell: "cp --force /tmp/mongod.conf /etc/mongod.conf"
          when: result.changed == true
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-05-03
        • 1970-01-01
        • 2019-02-18
        • 2019-01-01
        • 2019-11-26
        • 1970-01-01
        • 1970-01-01
        • 2012-01-27
        相关资源
        最近更新 更多