1
votes

Impossible d'analyser le script d'inventaire en tant qu'inventaire

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

  • [AVERTISSEMENT] Impossible d'analyser /etc/ansible/script.py en tant que source d'inventaire
  • [AVERTISSEMENT] Aucun inventaire n'a été analysé, seul l'hôte local implicite est disponible.
  • [AVERTISSEMENT] à condition que la liste d'hôtes soit vide, seul l'hôte local est disponible. Notez que l'hôte local implicite ne correspond pas à «tous»

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"
      }
    }
  }


4 commentaires

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 plugin script .


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 que host_list , yaml et d'autres plugins sont essayés. Cependant, il ne répertorie pas le plugin script , 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.


3 Réponses :



0
votes

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.


0 commentaires

1
votes

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


0 commentaires