在Ansible中,如何在文件末尾添加一行?

时间:2013-10-30 16:44:28

标签: ansible

我希望这很简单。我正在使用lineinfile模块:

- name: Update bashrc for PythonBrew for foo user
  lineinfile:
    dest=/home/foo/.bashrc
    backup=yes
    line="[[ -s ${pythonbrew.bashrc_path} ]] && source ${pythonbrew.bashrc_path}"
    owner=foo
    regexp='^'
    state=present
    insertafter=EOF
    create=True

我遇到的问题是它用我的新行替换文件中的最后一行(fi)而不是追加该行。这会产生语法错误。

我的参数是否正确?我已经尝试将regexp设置为'^'''(空白)。还有另一种方法可以解决这个问题吗?

我正在使用Ansible 1.3.3。

2 个答案:

答案 0 :(得分:31)

The Ansible discussion group帮我解决了这个问题。问题是regexp参数。

由于我只希望将一行附加到文件中,因此我需要regexp尽可能地匹配该行。在我的情况下,这很复杂,因为我的行包含变量。但是,假设行开始[[ -s $HOME/.pythonbrew,我发现以下内容就足够了:

- name: Update bashrc for PythonBrew for foo user
  lineinfile:
    dest: /home/foo/.bashrc
    line: "[[ -s ${pythonbrew.bashrc_path} ]] && source ${pythonbrew.bashrc_path}"
    regexp: "^\[\[ -s \\$HOME/\.pythonbrew"
    owner: foo
    state: present
    insertafter: EOF
    create: True

答案 1 :(得分:11)

根据documentation,显然ansible已成熟,现在(版本> 2.4.0),仅指定行时的默认值会将给定行附加到目标文件:

    - name: Update bashrc for PythonBrew for foo user
      lineinfile:
        dest=/home/foo/.bashrc
        line="[[ -s ${pythonbrew.bashrc_path} ]] && source {pythonbrew.bashrc_path}"
        owner=foo