Fro*_*man 10 ansible ansible-2.x
我对Ansible很新
是否可以使用Ansible检查文件中是否存在字符串.
我想检查用户是否有权访问服务器.这可以在服务器上使用cat /etc/passwd | grep username
但如果用户不在,我希望Ansible停止.
我试图使用lineinfile但似乎无法让它返回.
码
- name: find
lineinfile: dest=/etc/passwd
regexp=[user]
state=present
line="user"
Run Code Online (Sandbox Code Playgroud)
如果他不在那里,上面的代码会将用户添加到文件中.我想做的就是检查.我不想以任何方式修改文件,这是可能的
谢谢.
小智 20
这是一个棘手的问题.lineinfile模块专门用于修改文件的内容,但您也可以将其用于验证检查.
- name: find
lineinfile:
dest: /etc/passwd
line: "user"
check_mode: yes
register: presence
failed_when: presence.changed
Run Code Online (Sandbox Code Playgroud)
check_mode确保它永远不会更新文件.
register如上所述保存变量.
failed_when允许您设置失败条件,即添加用户,因为它没有在文件中找到.
根据您希望行为的内容,您可以使用多次迭代.lineinfile docs特别相关state,regexp应该允许你确定是否存在失败等,或者你可以做not presence.changed等等.
hil*_*lsy 11
我可能会注册并评估一个变量.
以下简单的剧本适合我:
- hosts: localhost
tasks:
- name: read the passwd file
shell: cat /etc/passwd
register: user_accts
- name: a task that only happens if the user exists
when: user_accts.stdout.find('hillsy') != -1
debug: msg="user hillsy exists"
Run Code Online (Sandbox Code Playgroud)
如果您想在没有用户时失败:
tasks:
- shell: grep username /etc/passwd
changed_when: false
Run Code Online (Sandbox Code Playgroud)
默认情况下,shell如果命令退出代码非零,则模块将失败.如果用户名在那里
会给你ok,否则就会失败.
我changed_when: false用来防止changedgrepping时的状态.
| 归档时间: |
|
| 查看次数: |
38896 次 |
| 最近记录: |