Sintaxe anível para regex_search usando a variável para combinar

1

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!

    
por jacksonp 19.10.2017 / 19:42

4 respostas

3

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.

    
por 20.10.2017 / 01:34
1

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.

    
por 12.04.2018 / 16:34
0

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))
    
por 15.06.2018 / 14:56
0

Esta concatenação funciona sem conversão:

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

(testado no Ansible 2.5.6)

    
por 17.08.2018 / 11:22

Tags