#ansible
#ansible
Вопрос:
Пытаюсь убедиться, что точная строка существует для условия when, но прямо сейчас пытаюсь заставить функцию работать в простом сборнике воспроизведения, но, похоже, не могу заставить ее работать. Также пробовал экранировать символы
Я пробовал разные варианты и пытался переключиться на «вместо» и наоборот
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/»
он не находит ее
Комментарии:
1. вы должны использовать with_items user_accts.stdout — это выведет все значения сразу. Вам нужно сопоставить эти значения. Также вам следует использовать строку поиска регулярное выражение не требуется, если вы ищете только 1.8.0_201
2. Извините за путаницу, я хочу получить именно эту строку, поэтому я не получаю другие в примере выше. Я пробовал when: with item , when: with_item и with_item: но не смог заставить это работать.
Ответ №1:
Я хочу получить эту точную строку, поэтому я не получаю другие в приведенном выше примере
Если вы ищете именно эту строку, то вам не нужно регулярное выражение
- 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/"