Поиск точной строки

#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/"