Quelle est la syntaxe dans regex_search () pour correspondre à une variable?
Pour ci-dessous, vcsourcekit = 10, je veux faire correspondre regex ^ 10. Il n'évalue pas la variable, interprète plutôt littéralement.
- name: Do something awesome
vmware_guest:
hostname: "{{ vcenterhostname }}"
...
when:
- item.key | regex_search('^(vcsourcekit)')
with_dict: "{{ vmfacts.virtual_machines }}"
Merci!
Pas la plus belle chose mais ça marche:
- item.key | regex_search('^' + vcsourcekit | string)
Sans la conversion en chaîne, j'obtiens un cannot concatenate 'str' and 'int' objects
sur ansible 2.2.0.0 et je n'ai pas le temps de mettre à jour tout de suite.
Cette concaténation fonctionne sans casting:
when:
- item.key | regex_search('^(' ~ vcsourcekit ~ ')')
with_dict: "{{ vmfacts.virtual_machines }}"
(Testé dans Ansible 2.5.6)
Ce code:
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)
sélectionne juste/etc/ssh/ssh_Host_ed25519_key qui semble analogue à l'exigence de l'OP. Il semble que "match" nécessite un modèle qui corresponde à la chaîne entière, d'où le *. avant et après cette chaîne à faire correspondre.
Deux strophes "set_fact" distinctes sont nécessaires pour que "keytype" soit défini avant d'être utilisé.
Le code fonctionne dans Ansible 2.4.3.0 fonctionnant sur Debian 9 (Raspbian "Stretch").
Ma demande exigeait "pas" dans la déclaration "quand" mais elle ne serait pas nécessaire pour répondre à la question d'origine.
Pour le PO, l'énoncé critique semble être:
matchstring: "^vcsourcekit.*"
Clairement trop tard pour aider le PO, mais l'approche pourrait aider quelqu'un d'autre.
Personnellement, j'utiliserais quelque chose comme
- item.key | regex_search('^%d' % vcsourcekit)
Ceci n'est pas testé BTW. Je ne suis pas sûr non plus qu'il soit compatible avec les meilleures pratiques Ansible/Jinja2.
EDIT: Un de ceux-ci (également non testé) pourrait être plus correct.
- item.key | regex_search('^{0}'.format(vcsourcekit))
- item.key | regex_search('^%d' | format(vcsourcekit))