使用ansible只检查字符串

Check only string using ansible

我只想检查字符串,而不是整行。比如我的行是这样的

"pwd requisite dcredit=-5 ucredit=-1 lcredit=-1 ocredit=-1 minlen=14 difok=4 retry=2"

我必须检查 lcredit=-1 这个字符串

条件是:

  1. 如果这个字符串和这个一样lcredit=-1我们跳过这个

  2. 如果字符串lcredit=2不在-1那么这里就要改成-1

  3. 如果字符串不存在必须在行尾添加字符串。

还有一个 lcredit=-1 包含该特定行中的任何位置。

如果我使用 lineinfile 它将改变整行并且行字符串位置不同。如果我使用replace,它只会被替换,但如果不存在则不会添加。那么还有其他功能可以满足我的条件吗?

一种方法是使用正则表达式(未经测试):

- name: If lcredit is specified, make sure it is -1
  lineinfile:
    regexp: "^pwd requisite(.*) lcredit=(-?\d+)(.*)"
    backrefs: yes
    line: 'pwd requisite lcredit=-1'
    dest: /etc/pam.d/whatever

- name: If lcredit not specified, add it
  lineinfile:
    regexp: "^pwd requisite((?!.* lcredit=.*).*)"
    backrefs: yes
    line: 'pwd requisite lcredit=-1'
    dest: /etc/pam.d/whatever

通常我尽量避免使用正则表达式,尤其是像上面这样复杂的表达式。如果您还不了解它们,那么投入学习它们通常是不划算的。所以我要做的是尝试找到解决问题的方法。例如,是否始终指定整条确切的行,而不是尝试巧妙地移动其部分?