Ansible-使用正则表达式

时间:2019-09-27 18:17:21

标签: regex ansible

我需要验证PermitRootLogin参数是否等于“ no”,例如:

PermitRootLogin no

但是有时在这些单词之间有多个空格。因此,我使用了正则表达式,但显然我做错了。这行似乎很糟糕:

when: check_config.stdout.find('PermitRootLogin\s+no') != -1

有什么解决方法吗?

- hosts: redhat
  tasks:

  - name: check file
    shell: cat /etc/ssh/sshd_config
    register: check_config

  - name: compare string 
    when: check_config.stdout.find('PermitRootLogin\s+no') != -1
    debug: msg="this server is ok"

1 个答案:

答案 0 :(得分:1)

  

Q:我需要验证PermitRootLogin参数是否等于“否”

A:使用lookup select 来确定服务器是否正常。例如

- debug:
    msg: 'this server is ok'
  when: lookup('file', '/etc/ssh/sshd_config').splitlines()|
        select('match', '^PermitRootLogin\s+no$' )|list

如果要在配置中放置/替换行,请使用lineinfile。例如

- lineinfile:
    path: /etc/ssh/sshd_config
    regexp: '^PermitRootLogin(.*)$'
    line: 'PermitRootLogin no'

(未经测试)


笔记

  • 查阅插件是在Ansible控制计算机上而不是在目标/远程上进行评估的。使用delegate_to检查远程主机。