更新问题:
我正在尝试使用ansible验证某些函数出现在.basrch文件中。
我尝试了lineinfile
模块:
vars:
bashrc:
- name: my_func
lines:
- "my_func() {"
- "echo name=username\n}"
tasks:
- name: add my_func() to .bashrc
lineinfile: "dest=~/.bashrc regexp=\"{{ item.1 }}\" line=\"{{ item.1 }}\""
with_subelements:
- bashrc
- lines
但问题是,每次我运行这个游戏时,都会附加这些行:
...
my_func() {
echo name=username
}
my_func() {
echo name=username
}
EOF
如果已经存在
,我不希望这些行被追加答案 0 :(得分:3)
Ansible有一个完全用于此目的的模块,它被称为...... lineinfile
。
您可以在此处找到文档:Ansible - lineinfile
对于多行replace
模块是另一种选择:Ansible - replace
$ cat myfile
this is my file
aaa
bb
c
foo bar baz
---
任务:
- hosts: all
tasks:
- name: replace something
replace:
dest=/home/vagrant/myfile
regexp="^aaa\nbb\nc"
replace="replaced some text"
在剧本运行之后:
$ cat myfile
this is my file
replaced some text
foo bar baz
---
我从未使用过这个,但您可能想尝试blockinfile
:https://github.com/yaegashi/ansible-role-blockinfile
修改强>
这完全没问题:
- hosts: all
sudo: false
tasks:
- name: ensure my_func
lineinfile:
dest="~/.bashrc"
line="my_func() { echo name=username; }"
state=present
sudo: false
部分非常重要。如果您使用sudo执行任务,则代字号(~
)将扩展为sudo_user
(根)主目录,否则会扩展为您作为(remote_user
)
如果您必须为多个用户执行此操作,请尝试以下操作:
- hosts: all
sudo: true
tasks:
- name: ensure my_func
lineinfile:
dest="/home/{{ item }}/.bashrc"
line="my_func() { echo name=username; }"
state=present
owner={{ item }}
mode=0644
with_items:
- user1
- user2