Ansible: Hinzufügen von Suffixen und Präfixen zu allen Elementen

Kürzlich musste ich in einem meiner Ansible-Playbooks allen Elementen einer Liste eine ausgewählte Zeichenfolge voranstellen.

Die Liste sah ungefähr so aus:

[ "lino.dev", "l1f.de", "google.com" ]

Was ich allerdings haben wollte ist:

[ "https://lino.dev:443", "https://l1f.de:443", "https://google.com:443" ]

Um einen Prefix hinzufügen:

- debug:
    var: result
  vars:
    prefix: "https://"
    domains: [ "lino.dev", "l1f.de", "google.com" ]
    result: "{{ [prefix] | product(domains) | map('join') }}"

Um einen Suffixe hinzufügen:

- debug:
    var: result
  vars:
    suffix: ":443"
    domains: [ "lino.dev", "l1f.de", "google.com" ]
    result: "{{ domains | product([suffix]) | map('join') }}"

Das ganze kann folgendermaßen kombiniert werden, um auch das eigentliche Ziel zu erreichen

- debug:
    var: result
  vars:
    prefix: "https://"
    suffix: ":443"
    domains: [ "lino.dev", "l1f.de", "google.com" ]
    result: "{{ [prefix] | product(domains) | map('join') | product([suffix]) | map('join') }}"

Das ganz ist möglich durch den product Filter. Dieser gibt das Kartesisches Produkt der eigegeben Variable zurück.

Ein Beispiel aus der Python Doku:

product('ABCD', 'xy') # --> Ax Ay Bx By Cx Cy Dx Dy