Ansible - Check if string exists in file

匿名 (未验证) 提交于 2019-12-03 01:00:01

问题:

I'm very new to Ansible

Is it possible to check if a string exists in a file using Ansible.

I want to check is a user has access to a server. this can be done on the server using cat /etc/passwd | grep username

but I want Ansible to stop if the user is not there.

I have tried to use the lineinfile but can't seem to get it to return.

code

 - name: find    lineinfile: dest=/etc/passwd                regexp=[user]                state=present                line="user" 

The code above adds user to the file if he is not there. All i want to do is check. I don't want to modify the file in any way, is this possible

Thanks.

回答1:

I'd probably register and evaluate a variable.

The following simple playbook works for me:

- 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" 


回答2:

It's a tricky one. the lineinfile module is specifically intended for modifying the content of a file, but you can use it for a validation check as well.

- name: find   lineinfile:      dest: /etc/passwd     line: "user"   check_mode: yes   register: presence   failed_when: presence.changed 

check_mode ensures it never updates the file. register saves the variable as noted. failed_when allows you to set the failure condition i.e. by adding the user because it was not found in the file.

There are multiple iterations of this that you can use based on what you want the behavior to be. lineinfile docs particular related to state and regexp should allow you to determine whether or not presence or absence is failure etc, or you can do the not presence.changed etc.




回答3:

If you want to fail if there is no user:

tasks:   - shell: grep username /etc/passwd     changed_when: false 

By default shell module will fail if command exit code is non zero.
So it will give you ok if username is there and fails otherwise.
I use changed_when: false to prevent changed state when grepping.



易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!