it-swarm.com.de

Ansible Syntax für regex_search mit passender Variable

Wie lautet die Syntax in regex_search (), die mit einer Variablen übereinstimmt?

Für unten, vcsourcekit = 10, möchte ich mit Regex ^ 10 übereinstimmen. Die Variable wird nicht ausgewertet, sondern wörtlich interpretiert.

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

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

Vielen Dank!

4
jacksonp

Nicht das Schönste, aber das funktioniert:

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

Ohne die Besetzung zum String bekomme ich ein cannot concatenate 'str' and 'int' objects auf ansible 2.2.0.0 und ich habe gerade keine Zeit für ein Update.

3
jscott

Diese Verkettung funktioniert ohne Casting:

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

(Getestet in Ansible 2.5.6)

2
Timm

Dieser 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)

wählt nur/etc/ssh/ssh_Host_ed25519_key aus, was analog zu den Anforderungen des OP zu sein scheint. Es scheint, dass "Übereinstimmung" ein Muster erfordert, das mit der gesamten Zeichenfolge übereinstimmt, daher das *. vor und nach dieser Zeichenfolge, die abgeglichen werden soll.

Es werden zwei separate Zeilengruppen "set_fact" benötigt, damit "keytype" festgelegt wird, bevor es verwendet wird.

Der Code funktioniert in Ansible 2.4.3.0 unter Debian 9 (Raspbian "Stretch").

Meine Bewerbung erforderte "nicht" in der "wann" -Anweisung, aber es wäre nicht erforderlich, um die ursprüngliche Frage zu beantworten.

Für das OP scheint die kritische Aussage zu sein:

matchstring: "^vcsourcekit.*"

Offensichtlich zu spät, um dem OP zu helfen, aber der Ansatz könnte jemand anderem helfen.

1
user8150417

Persönlich würde ich etwas in der Art von verwenden

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

Dies ist übrigens ungetestet. Ich bin mir auch nicht sicher, ob es mit der Best Practice von Ansible/Jinja2 übereinstimmt.

EDIT: Eine davon (auch ungetestet) könnte korrekter sein.

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

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