Ansible复制模块需要可写的父目录?

时间:2016-03-21 20:12:22

标签: ansible

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

可以通过命令

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

但这是一种不好的做法 - 它总会被改变#34;任务。

所以我尝试了以下内容:

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

使用msg失败了:"目的地/ proc / sys / net / ipv4 / conf / all不可写"

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

3 个答案:

答案 0 :(得分:1)

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

sysctl module更改了sysctl.conf和/ proc值

这解决了我的任务

答案 1 :(得分:0)

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

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

原子写入既好又有用,因为它们意味着您永远不会得到一个交错了多个进程输出的损坏文件,但是/proc是一种特殊的魔术。 Unix的经典做法是写一个临时文件直到完成,然后将其重命名为您想要的最终文件名,因为/proc不允许您创建随机的临时文件。

答案 2 :(得分:0)

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

  - 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
相关问题