Comment obtenir des variables de résultat ansible
J'ai un script shell dont la sortie est un écho de la forme suivante
<variable_1>;<variable_2>;<variable_3>
etc
Je veux utiliser ces variables et exécuter une requête mysql pour mettre à jour une base de données comme
mysql -u<user> -p<password> -h<host> -e'insert into test_table values ("variable_1","variable_2","variable_3")'
Mon ansible playbook ressemble à ceci.
---
- hosts: infoServers
sudo: yes
gather_facts: no
tasks:
- name: gather info
script: get_hostdata.sh
register: result
- name: print result
local_action: command mysql -uuser -ppassword -h192.168.101.10 ansible_db -e'insert into test_table values ("{{ item[0] }}","{{ item[1] }}","{{ item[3] }});'
with_items: [ result.stdout.split(';')[0], result.stdout.split(';')[1], result.stdout.split(';')[2] ]
D'ERREUR: Erreur de Syntaxe lors du chargement de YAML script, test_variables.yml
Fondamentalement, je veux être en mesure d'utiliser la sortie d'une commande shell, de le fractionner en certaines variables et être en mesure de les utiliser dans d'autres ansible actions.
Pouvez-vous svp me guider sur la façon d'accéder aux variables correctement?
Merci
OriginalL'auteur Mukul Jain | 2015-03-31
Vous devez vous connecter pour publier un commentaire.
Lorsque vous obtenez une erreur comme cela, vous devriez vraiment fournir tous les détails du message d'erreur. Quand j'ai couper et coller votre playbook dans un fichier et a essayé de courir, j'ai eu la suivante:
Il semble donc, si cela correspond avec le message d'erreur que vous receviez que la syntaxe de votre with_items clause est faux.
Je ne suis pas sûr de savoir pourquoi vous êtes même en essayant de le faire à l'aide de with_items. Tous, vous êtes effectivement en train de faire dans ce cas est non nécessaire substitution de variable. Les éléments suivants doivent également faire exactement ce que vous voulez:
Vous pouvez le faire via le set_fact tâche: set_fact: var1: résultat.la sortie standard stdout.split(';')[1] var2: résultat.la sortie standard stdout.split(';')[2] etc.
J'ai essayé cette solution dans la dernière version de ansible et toujours dit "des objets de la liste n'a pas d'élément 1". Il n'a certainement que la ligne avant j'ai imprimé la même répartition déclaration (sans le tableau de référence) à l'aide d'un debug et il imprime le résultat que 3 entrées séparées... ce qui me manque?
OriginalL'auteur Bruce P
Vous besoin de citer et d'utiliser
{{}}
correctement.Impression sera quelque chose comme:
Comme vous pouvez le voir avec
item[0], .., item[2]
vous êtes d'indexation dans la chaîne"variable_1"
à la place du tableau["variable_1","variable_2","variable_3"]
Plus simple (et beaucoup plus performant) façon de le faire serait:
OriginalL'auteur Kashyap