Não é a coisa mais bonita, mas isso funciona:
- item.key | regex_search('^' + vcsourcekit | string)
Sem o elenco para string, recebo um cannot concatenate 'str' and 'int' objects
no ansible 2.2.0.0 e não tenho tempo para atualizar agora.
Qual é a sintaxe dentro do regex_search () para combinar com uma variável?
Para abaixo, vcsourcekit = 10, quero corresponder a regex ^ 10. Não avalia a variável, mas interpreta literalmente.
- name: Do something awesome
vmware_guest:
hostname: "{{ vcenterhostname }}"
...
when:
- item.key | regex_search('^(vcsourcekit)')
with_dict: "{{ vmfacts.virtual_machines }}"
Obrigado!
Não é a coisa mais bonita, mas isso funciona:
- item.key | regex_search('^' + vcsourcekit | string)
Sem o elenco para string, recebo um cannot concatenate 'str' and 'int' objects
no ansible 2.2.0.0 e não tenho tempo para atualizar agora.
Este código:
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)
seleciona apenas / etc / ssh / ssh_host_ed25519_key o que parece análogo ao requisito do OP. Parece que "match" requer um padrão que corresponda a toda a string, daí o *. antes e depois da sequência a ser correspondida.
Duas sub-rotinas "set_fact" separadas são necessárias para que "keytype" seja definido antes de ser usado.
O código funciona no Ansible 2.4.3.0 rodando no Debian 9 (Raspbian "Stretch").
Minha inscrição exigia "não" na instrução "when", mas não seria necessário responder à pergunta original.
Para o OP, a declaração crítica parece ser:
matchstring: "^vcsourcekit.*"
É claro que é muito tarde para ajudar o OP, mas a abordagem pode ajudar outra pessoa.
Pessoalmente, eu usaria algo nos moldes de
- item.key | regex_search('^%d' % vcsourcekit)
Isso não é testado BTW. Também não tenho certeza se é consistente com as melhores práticas do Ansible / Jinja2.
EDIT: Um desses (também não testado) pode ser mais correto.
- item.key | regex_search('^{0}'.format(vcsourcekit))
- item.key | regex_search('^%d' | format(vcsourcekit))
Esta concatenação funciona sem conversão:
when:
- item.key | regex_search('^(' ~ vcsourcekit ~ ')')
with_dict: "{{ vmfacts.virtual_machines }}"
(testado no Ansible 2.5.6)
Tags ansible