试图确保when条件存在一个确切的字符串,但现在正试图让函数在一个简单的playbook中工作,但似乎无法让它工作。也试过逃避角色
我尝试了不同的变化,并尝试切换到“而不是”,反之亦然
my.conf
JAVA_HOME="/opt/java/hotspot/64_bit/jdk1.8.0_201/"
JAVA_HOME=/opt/java/hotspot/64_bit/jdk1.8.0_201/
JAVA_HOME=/opt/java/hotspot/64_bit/jdk1.8.0_202/
JAVA_HOME="/opt/java/hotspot/64_bit/jdk1.8.0_202/"
SUN_JAVA_HOME=/opt/java/hotspot/64_bit/jdk1.8.0_201/
SUN_JAVA_HOME="/opt/java/hotspot/64_bit/jdk1.8.0_201/"
BAE_JAVA_HOME=/opt/java/hotspot/64_bit/jdk1.8.0_201/
BAE_JAVA_HOME=/opt/java/hotspot/64_bit/jdk1.8.0_202/
BAE_JAVA_HOME="/opt/java/hotspot/64_bit/jdk1.8.0_201/"
BAE_JAVA_HOME="/opt/java/hotspot/64_bit/jdk1.8.0_202/"
剧本
---
- hosts: localhost
tasks:
- name: read the passwd file
shell: cat /tmp/my.conf
changed_when: False
register: user_accts
- name: set regex pattern
set_fact:
regex_pattern: ".*^JAVA_HOME=\"/opt/java/hotspot/64_bit/jdk1.8.0_201/\"$"
- name: a task that only happens if the user exists
when: user_accts.stdout |match('{{regex_pattern}}')
debug: msg="user hillsy exists"
我想确保它找到这个JAVA_HOME =“/ opt / java / hotspot / 64_bit / jdk1.8.0_201 /”并且如果我将此行更改为JAVA_HOME =“/ opt / java / hotspot / 64_bit / jdk1.8.0_209 / “它找不到它
我想要得到那个确切的字符串,所以我不会在上面的例子中得到其他字符串
如果您正在寻找那个确切的字符串,那么您不需要正则表达式
- debug:
msg: it matches
# because an empty list is considered "false", if none of the lines
# are equal, this will not run
when: user_accts.stdout_lines | select('eq', the_string) | list
vars:
the_string: JAVA_HOME="/opt/java/hotspot/64_bit/jdk1.8.0_201/"