J'ai une ligne très simple dans le modèle:
ip={{ip|join(', ')}}
Et j'ai la liste pour ip:
ip:
- 1.1.1.1
- 2.2.2.2
- 3.3.3.3
Mais l'application veut des IP avec des guillemets (ip = '1.1.1.1', '2.2.2.2').
Je peux le faire comme ça:
ip:
- "'1.1.1.1'"
- "'2.2.2.2'"
- "'3.3.3.3'"
Mais c'est très moche. Existe-t-il un moyen agréable d’ajouter des guillemets sur chaque élément de la liste en ansible?
Merci!
En réalité, il existe une méthode très simple pour y parvenir:
{{ mylist | map('quote') | join(', ') }}
Le filtre map
parcourt chaque élément et laisse quote
le traiter. Ensuite, vous pouvez facilement join
les réunir.
Cela fonctionnera:
ip={{ '\"' + ip|join('\", \"') + '\"' }}
Un plugin de filtre personnalisé fonctionnera également. Dans ansible.cfg décommentez filter_plugins et donnez-lui un chemin,
def wrap(list):
return [ '"' + x + '"' for x in list]
class FilterModule(object):
def filters(self):
return {
'wrap': wrap
}
dans un fichier appelé core.py. Comme ça . Ensuite, vous pouvez simplement utiliser
ip|wrap|join(', ')
Et il devrait produire une liste séparée par virgule avec chaque adresse IP entourée de guillemets.
essayer:
- hosts: localhost
tags: s20
gather_facts: no
vars:
ip:
- 1.1.1.1
- 2.2.2.2
- 3.3.3.3
joined_ip: "'{{ \"', '\".join(ip)}}'"
tasks:
- debug: msg="(ip={{joined_ip}})"
PS: ansible prend en charge un peu d’exécution de code python dans {{}}
, ce que j’utilise mal ici.
J'ai développé un filtre personnalisé wrap
def wrap(value, wrapper = '"'):
return wrapper + value + wrapper
class FilterModule(object):
def filters(self):
return {
'wrap': wrap
}
Comme vous pouvez le constater, le wrapper est personnalisable et sa valeur par défaut est "
Vous pouvez l'utiliser de cette façon
ip={{ ip | map('wrap') | join(', ') }}
Disclaimer : Je suis un novice ansible et python
NOTECeci est similaire à la réponse de Kashyap, mais j'avais besoin d'une version légèrement différente: l'utiliser pour mettre entre guillemets chaque élément d'un tableau bash), par exemple. le résultat devrait être:
SOME_LIST=( "Johnny" "Joey" "Dee Dee" "Tommy" )
projects/ansible/expand_list.yml
---
- hosts: localhost
connection: local
vars:
some_list:
- Johnny
- Joey
- Dee Dee
- Tommy
tasks:
- name: "Expand the ramones band members list."
template:
src: "templates/expand_list.conf.j2"
dest: "/var/tmp/ramones.conf"
projects/ansible/templates/expand_list.conf.j2
SOME_LIST=( "{{ '" "'.join(some_list) }}" )
Suivre a travaillé pour moi
('{{ iplist | join('\',\'') }}')
Ex:
Inventory
[ips]
1.1.1.1
2.2.2.2
3.3.3.3
#cat temp.sh.j2
"ips": (ip='{{ groups['Zoo'] | join('\',\'') }}')
result:
#cat temp.sh
"ips": (ip='1.1.1.1','2.2.2.2','3.3.3.3')
J'espère que ça aiderait quelqu'un.