Je mets un fait dans Ansible et cette variable a une valeur avec des tirets, comme ceci " dos-e1-south-209334567829102380 ". je veux diviser, donc je ne reçois que "dos-e1-south"

Voici la pièce

- set_fact:
    config: "{{ asg.results|json_query('[*].launch_configuration_name') }}"

- debug:
    var: config
3
sherri 15 mars 2019 à 19:35

2 réponses

Meilleure réponse

Une autre option est le filtre d'expressions régulières ansibles, que vous trouverez ici : https ://docs.ansible.com/ansible/latest/user_guide/playbooks_filters.html#regular-expression-filters

vars:
  var: dos-e1-south-209334567829102380
tasks:
  - debug:
      msg: '{{ var | regex_replace("^(.*)-[^-]+$", "\\1") }}'

A le même résultat :

"msg": "dos-e1-south"

Explication pour l'expression régulière:

^(.*)

Tout garder depuis le début de la chaîne dans la première référence arrière

-[^-]+$

Trouver le dernier "-" suivi des caractères non-"-" jusqu'à la fin de la chaîne.

\\1

Remplace la chaîne par la première référence arrière.

6
Oliver Gaida 16 mars 2019 à 14:11

Une option serait d'utiliser split(). Les tâches ci-dessous

    vars:
      var1: dos-e1-south-209334567829102380
    tasks:
      - set_fact:
          var2: "{{ var1.split('-') }}"
      - debug:
          msg: "{{ var2.0 }}-{{ var2.1 }}-{{ var2.2 }}"

Donner


    "msg": "dos-e1-south"

Pour concaténer les éléments, il est également possible d'utiliser join(). La tâche ci-dessous donne le même résultat

      - debug:
          msg: "{{ var2[0:3] | join('-') }}"
11
Vladimir Botka 7 juil. 2020 à 08:32