私は個人的に、この問題に対する3つの可能な解決策を見つけました。
オプション1- デフォルトでインストールされansible_python_interpreter: /usr/bin/python3
てpython3
いるホストに設定
python3
デフォルトでインストールされているかどうかによってホストをグループ化する方法がある場合、これは問題を解決するための優れた方法だと思います。私の知る限り、python3
はUbuntuのすべてのリリース16.04 以降で使用できます。
- すべてのホストに確実にが
python3
ある場合、変数をgroup_vars/all.yml
(または同等のもの)に追加できます。
# group_vars/all.yml
ansible_python_interpreter: /usr/bin/python3
- 一部のホストになく
python3
、動的インベントリを使用するときにそれらにタグを付ける方法がある場合(例:のAWSタグ付けec2.py
)、次のように特定のホストに変数を適用できます。
# group_vars/tag_OS_ubuntu1804.yml
ansible_python_interpreter: /usr/bin/python3
- 静的インベントリを使用していて
python3
、ホストがあるかどうかに基づいてホストをグループ化できる場合は、次のようなことができます。
# inventory/hosts
[python2_hosts]
centos7_server
[python3_hosts]
u1804_server
[python3_hosts:vars]
ansible_python_interpreter=/usr/bin/python3
すべてのプレイブックに追加が必要なオプション2と3とは対照的に、リモートホストでの変更は必要なく、変数への小さな変更のみが必要なため、このオプションが最も好きです。
オプション2-を使用してPython 2をインストールする raw
このオプションでは、とのすべての脚本の上部に遊びを置く必要がありgather_facts: false
、その用途raw
をインストールするにはpython
:
- name: install python2 on all instances
hosts: "*"
gather_facts: false
tasks:
- name: run apt-get update and install python
raw: "{{ item }}"
loop:
- sudo apt-get update
- sudo apt-get -y install python
become: true
ignore_errors: true
ignore_errors: true
apt-get
インストールされていないホスト(RHELベースなど)でプレイを実行する場合は必須です。それ以外の場合は、最初のプレイでエラーになります。
このソリューションは機能しますが、いくつかの理由で私のリストの中で最も低いものです。
- すべてのプレイブックの一番上に移動する必要があります(オプション1ではなく)
apt
システム上にあると想定し、エラーを無視します(オプション3ではなく)
apt-get
コマンドが遅い(オプション3とは対照的)
オプション3-Symlink /usr/bin/python -> /usr/bin/python3
usingraw
このソリューションが他の人から提案されたのを見たことがありません。これは理想的ではありませんが、オプション2よりも多くの点で優れていると思います。私の提案は使用することですraw
シンボリックリンクにシェルコマンドを実行する/usr/bin/python -> /usr/bin/python3
場合はpython3
、システムにあると python
ではありません。
- name: symlink /usr/bin/python -> /usr/bin/python3
hosts: "*"
gather_facts: false
tasks:
- name: symlink /usr/bin/python -> /usr/bin/python3
raw: |
if [ -f /usr/bin/python3 ] && [ ! -f /usr/bin/python ]; then
ln --symbolic /usr/bin/python3 /usr/bin/python;
fi
become: true
このソリューションは、すべてのプレイブックの一番上に配置する必要があるという点でオプション2に似ていますが、いくつかの点で優れていると思います。
python3
存在しpython
ていない特定のケースでのみシンボリックリンクを作成します-すでにインストールされている場合、Python 2をオーバーライドしません
apt
インストールされているとは想定していません
- 特別なエラー処理なしですべてのホストに対して実行できます
- と比べて超高速です
apt-get
明らかにPython 2をにインストールする必要がある場合/usr/bin/python
、このソリューションはノーゴーであり、オプション2の方が優れています。
結論
- 可能であれば、すべての場合にオプション1を使用することをお勧めします。
- インベントリが非常に大きく複雑で、でホストを簡単にグループ化する方法がない場合は、オプション3を使用することをお勧めします。これにより
python3
、オプション1ははるかに困難でエラーが発生しやすくなります。
- にPython 2をインストールする必要がある場合にのみ、オプション3よりもオプション2をお勧めします。
/usr/bin/python
出典