3
votes

La version d'Ansible Python ne changera pas

J'exécute:

ansible-playbook --version

Et j'obtiens le résultat suivant:

python version = 3.5.2

Mais quand j'exécute:

ansible-playbook --version -e 'ansible_python_interpreter = / usr / bin / python3'

Je suis ayant exactement la même sortie. Je m'attendais à avoir quelque chose comme:

ansible-playbook 2.5.14
  config file = /etc/ansible/ansible.cfg
  configured module search path = [u'~/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/lib/python2.7/dist-packages/ansible
  executable location = /usr/bin/ansible-playbook
  python version = 2.7.12 (default, Nov 12 2018, 14:36:49) [GCC 5.4.0 20160609]

Qu'est-ce que je ne comprends pas?


0 commentaires

3 Réponses :


2
votes

ansible-playbook est un logiciel installé sur votre ordinateur, avec ses propres dépendances, vous ne pouvez pas modifier ses dépendances avec un argument - vous devez installer une version appropriée pour cela.

Avec cet argument, vous modifiez l'interpréteur Python sur l'hôte distant, un ou plusieurs, dont traite le playbook.


7 commentaires

Avec cet argument, vous changez l'interpréteur Python sur l'hôte distant c'est exactement ce que je veux faire, comment puis-je tester si je change efficacement l'interpréteur python sur l'hôte distant?


Essayez d'exécuter la tâche command: python --version contenant register: python_version , puis une autre tâche - debug: msg = "{{python_version.stdout} } ".


Merci, je peux confirmer qu'il utilise python2.7 même si j'ai défini ansible_python_interpreter: / usr / bin / python3 . Je ne peux pas comprendre ce qui me manque.


Je pense que cet argument sert uniquement à définir le chemin vers Python 2, c'est-à-dire la version de Python que votre Ansible comprend et utilise - il ne génère tout simplement pas d'erreur lors du retour par défaut après avoir exclu votre python3 directif.


Vous ne pouvez pas changer l'interpréteur avec une variable supplémentaire. Essayez de l'ajouter à votre hôte dans l'inventaire - par exemple. mon_hôte ansible_python_interpreter = / usr / bin / python3


@MattP utilise toujours python2 :(


Hmm ... il s'avère que vous pouvez définir l'interpréteur avec une variable supplémentaire - apprenez quelque chose de nouveau chaque jour. J'ajouterai une réponse appropriée car je suis presque sûr de savoir ce qui se passe.



5
votes

Pour changer l'interpréteur python utilisé sur un hôte géré, vous pouvez utiliser une variable supplémentaire ou d'inventaire, selon votre question. Cela ne change pas la version de python utilisée pour exécuter ansible localement - qui est mentionnée dans l'autre réponse.

Pour confirmer que vous utilisez un interpréteur différent sur l'hôte géré, vous aurez besoin d'une sortie plus détaillée (au moins 3 ' v's, -vvv ). Lancer python --version dans une commande shell va simplement vous montrer quelle est la version python par défaut du système.

Exemple

Interpréteur Python2:

$ ansible localhost -a 'python --version' -e 'ansible_python_interpreter=/usr/bin/python3' -vvv
ansible 2.8.1
<snip>
  python version = 3.7.3 (default, May 11 2019, 00:38:04) [GCC 9.1.1 20190503 (Red Hat 9.1.1-1)]
<snip>
'/bin/sh -c '"'"'/usr/bin/python3 /home/mattp/.ansible/tmp/ansible-tmp-1564023350.3869421-223113472194736/AnsiballZ_command.py && sleep 0'"'"''
<snip>
localhost | CHANGED | rc=0 >>
Python 2.7.16

Interpréteur Python3:

$ ansible localhost -a 'python --version' -e 'ansible_python_interpreter=/usr/bin/python2' -vvv
ansible 2.8.1
<snip>
  python version = 3.7.3 (default, May 11 2019, 00:38:04) [GCC 9.1.1 20190503 (Red Hat 9.1.1-1)]
<snip>
'/bin/sh -c '"'"'/usr/bin/python2 /home/mattp/.ansible/tmp/ansible-tmp-1564023345.0848873-106174541151316/AnsiballZ_command.py && sleep 0'"'"''
<snip>
localhost | CHANGED | rc=0 >>
Python 2.7.16

Points clés à retenir p >

  • La version python utilisée pour exécuter Ansible localement reste inchangée
  • La version python par défaut du système reste inchangée
  • La version python utilisée pour exécuter le module de commande Ansible à distance (c'est-à-dire l'interpréteur python) est passée de la version 2 à la version 3


1 commentaires

J'ai revérifié les logs et il semble que le ansible_python_interpreter ait été bien pris en compte lors de son utilisation dans l'inventaire d'hôte, j'étais juste confus d'avoir la version inchangée comme vous l'avez dit dans vos clés 1 et 2.



1
votes

Une autre solution de contournement consiste à spécifier var ansible_python_interpreter: / usr / bin / python3 dans votre playbook car dans mon cas, parfois ansible ne prend pas l'interpréteur du fichier ansible.cfg .

Exemple:

- name: Common package
  hosts: all
  gather_facts: no
  vars:
    ansible_python_interpreter: /usr/bin/python3
  roles:
    - { role: python, tags: [ init, python, common, addusers] }
...
...

Désormais, à chaque exécution, le playbook prendra / usr / bin / python3 comme interpréteur par défaut.

REMARQUE: si vous souhaitez utiliser python2.7, vous pouvez changer python3 en python et cela devrait fonctionner correctement. [FYI python2.7 sera obsolète à partir de janvier 2020]


0 commentaires