我希望这很简单。我正在使用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。
答案 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