Mon script python interroge et génère dynamiquement un fichier JSON comme suit:
[WARNING]: * Failed to parse /etc/ansible/newhost.py with script plugin: failed to parse executable inventory script results from /etc/ansible/script.py: Syntax Error while loading YAML. mapping values are not allowed in this context The error appears to have been in '<string>': line 3, column 8, but may be elsewhere in the file depending on the exact syntax problem. File "/usr/lib/python2.7/site-packages/ansible/plugins/inventory/script.py", line 125, in parse raise AnsibleError("failed to parse executable inventory script results from {0}: {1}\n{2}".format(path, to_native(e), err))
Mais d'une manière ou d'une autre, lorsque j'exécute la commande ci-dessous
enable_plugins = script
il émet les messages d'avertissement suivants
Je ne sais pas ce qui me manque ou ce que je me trompe car je suis nouveau dans l'inventaire dynamique avec Ansible.
Quand j'exécute le script ansible-inventaire -i. py --list
J'ai eu la réponse suivante
{ "_meta": { "hostvars": {} }, "all": { "children": [ "ungrouped" ] }, "ungrouped": {} }
Ma version Ansible est 2.7.7
Le plugin d'inventaire est un script
ansible -i script.py -m ping
[Mis à jour] L'exécution de -v basée sur la suggestion de Steve m'en donne un peu plus
{ "all": { "hosts": [ "192.158.1.1" ], "vars": { "ansible_become_method": "sudo", "ansible_become": "yes" } } }
3 Réponses :
Votre script doit être exécutable:
$ chmod a + x script.py
Consultez la documentation sur l'utilisation des scripts ici < / a>.
Votre script doit également accepter certains arguments a>.
La configuration de chmod ne le fait pas fonctionner. Oui, mon script a aussi --list comme argument et quand je l'exécute avec --list, il renvoie un format JSON.
Fournir le chemin complet peut-être?
Vous devez exécuter la commande comme ceci
ansible-inventaire -i 'chemin-vers-le-fichier / script.py' --list
Il est important d'avoir les guillemets. Sur OsX, c'était pour moi le problème.
Avez-vous ajouté un en-tête comme celui-ci dans la toute première ligne de votre script d'inventaire python?
#!/path/to/python
Exécutez
ansible-inventaire -i script.py --list -vvv
, il vous indiquera quel plugin Ansible utilise et fournira des informations supplémentaires sur les décisions qu'il prend. Il devrait utiliser le pluginscript
.Merci @ SteveE pour l'indication. J'ai mis à jour la question avec plus de résultats. Je pensais que je serais d'accord avec le format JSON retourné qu'Ansible serait capable d'analyser
enable_plugins = script
ne peut pas être ce que votre Ansible utilise. La sortie montre clairement quehost_list
,yaml
et d'autres plugins sont essayés. Cependant, il ne répertorie pas le pluginscript
, ce qui est inattendu. Les valeurs par défaut sont ici@ SteveE a mis à jour la sortie. Semble être lié au cache dont je doute.