使用ansible仅检查字符串

时间:2016-11-16 09:14:11

标签: ansible ansible-playbook ansible-2.x

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

"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. 如果字符串不是,则必须添加该行的字符串结尾。

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

    如果我使用lineinfile,那么它将改变整行,并且线串位置不同。如果我使用replace,它只会被替换,但如果没有,则不会添加。那么任何其他功能来满足我的条件吗?

1 个答案:

答案 0 :(得分:1)

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

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

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

通常我会尽量避免使用正则表达式,特别是上面那些复杂的表达式。如果您还不了解它们,那么投资学习它们通常是不值得的。所以我会做的是尝试找到解决问题的方法。例如,它是否能够始终指定整个确切的线,而不是试图通过移动其部分来变得聪明?