Compte tenu de la Playbook suivante:Comment passer des variables Ansible à la requête JMESPath?
---
- name: "foo bar"
hosts: localhost
connection: local
gather_facts: false
vars:
foo:
-
a: aa
b: bb
-
a: cc
b: dd
tasks:
- debug:
msg: " filter {{foo}} to {{ foo | json_query(query)}} "
vars:
bar: ['dd','ee']
query: "[?a == 'cc' && contains (['dd','ee'],b)]"
#query: "[?a == 'cc' && contains ({{bar}} ,b)]"
Je voudrais passer une variable définie dans ansible bar: ['dd','ee']
à une requête jmes_path comme "[?a == 'cc' && contains ({{bar}} ,b)]"
. Malheureusement, cela ne fonctionne pas, le script échoue.
fatale: [localhost]: ÉCHEC! => {"failed": true, "msg": "le champ 'args' a une valeur invalide ([]), et n'a pas pu être converti en un dict Erreur: Expecting: comma, got: literal: Erreur d'analyse dans la colonne 28, jeton «dd» (LITERAL), pour l'expression: \ n \ "[? A == 'cc' & & contient ([u'dd ', u'ee'], b L'erreur semble avoir été dans '/home/vagrant/testnew/lieferschein-deployment/stack.yml': ligne 16, colonne 6, mais peut-être \ nêtre ailleurs dans le fichier en fonction du problème de syntaxe exact . \ n \ nLa ligne incriminée semble être: \ n \ n tâches: \ n - débogage: \ n^ici \ n "}
Cependant, la définition de la liste dans la requête elle-même, en ligne comme "[?a == 'cc' && contains (['dd','ee'],b)]"
, cela fonctionne sans problème
TASK [debug] *******************************************************************
ok: [localhost] => {
"msg": " filter [{u'a': u'aa', u'b': u'bb'}, {u'a': u'cc', u'b': u'dd'}] to [{u'a': u'cc', u'b': u'dd'}] "
}
Est-il possible de mettre une variable Ansible dans la requête, et si oui, comment?
cela fonctionne, mais dans un vrai playbook je voudrais utiliser une variable définie ailleurs. Donc, dans ce cas, j'aurais besoin de quelque chose pour le convertir en chaîne. – user140547
Donc, le convertir en une chaîne, quel est le problème? – techraf
Et la prochaine fois faire une déclaration claire lors de l'écriture "* Compte tenu du playbook suivant: *" que vous attendez réellement lecteurs d'ignorer "le livret donné" et lisez votre esprit. – techraf