Назад | Перейти на главную страницу

Ansible синтаксис для regex_search с использованием переменной для соответствия

Каков синтаксис в regex_search () для сопоставления с переменной?

Ниже vcsourcekit = 10, я хочу сопоставить регулярное выражение ^ 10. Он не оценивает переменную, а интерпретирует буквально.

- name: Do something awesome
  vmware_guest:
  hostname: "{{ vcenterhostname }}"
  ...

 when:
      - item.key | regex_search('^(vcsourcekit)')
 with_dict: "{{ vmfacts.virtual_machines }}"

Спасибо!

Не самое красивое, но это работает:

- item.key | regex_search('^' + vcsourcekit | string)

Без преобразования в строку я получаю cannot concatenate 'str' and 'int' objects на ansible 2.2.0.0, и сейчас у меня нет времени обновляться.

Эта конкатенация работает без приведения:

when:
      - item.key | regex_search('^(' ~ vcsourcekit ~ ')')
 with_dict: "{{ vmfacts.virtual_machines }}"

(Проверено в Ansible 2.5.6)

Этот код:

tasks:
- set_fact: 
    keytype: ed25519

- set_fact: 
    matchstring: ".*_{{ keytype }}_.*"

- debug:
    var: item
  with_fileglob: "/etc/ssh/ssh_host_*_key"
  when: not item is match(matchstring)

выбирает просто / etc / ssh / ssh_host_ed25519_key, что похоже на требование OP. Кажется, что для «соответствия» требуется шаблон, который соответствует всей строке, поэтому *. до и после этой строки для сопоставления.

Две отдельные строфы "set_fact" необходимы, чтобы "keytype" был установлен перед его использованием.

Код работает в Ansible 2.4.3.0 под управлением Debian 9 (Raspbian "Stretch").

Мое приложение требовало «не» в заявлении «когда», но оно не требовалось для ответа на исходный вопрос.

Для OP критическое заявление могло бы выглядеть так:

matchstring: "^vcsourcekit.*"

Очевидно, что уже слишком поздно помогать OP, но этот подход может помочь кому-то другому.

Лично я бы использовал что-то вроде

- item.key | regex_search('^%d' % vcsourcekit)

Кстати, это непроверено. Я также не уверен, соответствует ли это передовой практике Ansible / Jinja2.

РЕДАКТИРОВАТЬ: один из них (также непроверенный) мощь вернее.

- item.key | regex_search('^{0}'.format(vcsourcekit))

- item.key | regex_search('^%d' | format(vcsourcekit))