GNU/Linux >> Linux の 問題 >  >> Linux

AnsibleTowerでvirtualenvsを構成するための5つのヒント

AnsibleはPythonで実行され、Ansible Towerを使用すると、Pythonは内部のエンジンでもあります。私の顧客と仕事をしているとき、私は比較的一般的であるように思われるいくつかの実際的な質問を見ました。この記事では、AnsibleTowerシナリオでvirtualenvを設定およびトラブルシューティングするためのヒントをいくつか紹介します。

1。 virtualenvとは何ですか?

Python virtualenv 基本的には、virtualenvで作成されたディレクトリです。 コマンド(ご想像のとおり、Pythonスクリプトです)。

このvirtualenvが「アクティブ化」されると、そこに特定のPythonモジュールを追加し、メインのPython/Ansibleスクリプトやプレイブックに影響を与えることなく実験と開発を行うための分離された環境を構築できます。

Ansible Towerには、デフォルトディレクトリの下に2つのvirtualenvがあります:awx およびansible

1つ目は、/var/lib/awx/venv/awx. awx virtualenvは、Ansible Tower自体専用であり、変更しないでください

他のvirtualenvは次のとおりです:/var/lib/awx/venv/ansible 。このvirtualenvは、Towerがテンプレート(プレイブック)を実行するために使用するものです。

誰かが尋ねる可能性があります:Ansible Towerプレイブックに必要なPythonモジュールを追加する必要がある場合、デフォルトのansibleで追加する必要があります virtualenv?

できます。

ただし、別のを作成することをお勧めします。 virtualenv if:

  1. デフォルトのvirtualenvを安定した開発環境として維持し、別のvirtualenvで新しいモジュールを試してみたいと考えています。
  2. 特定のPython/Ansibleモジュールを必要とするさまざまなプロジェクトで作業するさまざまな開発者グループがいます。

2。 virtualenvを設定するためのヒント

virtualenvのセットアップ方法については、AnsibleTowerとPythonのドキュメントに優れた説明と例があります。

新しいvirtualenvを作成するときは、通常、Ansible Towerのドキュメントに従いますが、見落としがちなトピックがいくつかあります(後で、頭をかいて「うーん...これが期待どおりに機能しないのはなぜですか? ?")。

Pythonモジュールの権限

umask 0022を設定するための推奨事項を必ず守ってください 、作成するときだけではありません virtualenvだけでなく、追加するときも それにPythonモジュール。

これは、AnsibleTowerがユーザーawxとして実行されるためです。 、したがって、このユーザーは読むことができる必要があります virtualenvのPythonモジュール。

権限が正しく設定されていないと、テンプレート/プレイブックでモジュールXYZがインストールされていないなどのエラーが発生する場合があります。 またはモジュールXYZに属性ABCがありません 問題が実際には単純な権限の問題である場合。

[読者も楽しんだ:AnsiblePlaybookの作成方法]

仮想環境にAnsibleをインストールする

virtualenvを使用して実行するプレイブックには、virtualenvにインストールされた特定のPythonモジュールが必要です。そのvirtualenvからAnsibleエンジンも実行するのは理にかなっています。

次のコマンドを使用して、特定のバージョンのAnsibleをインストールできます。

sudo /opt/my-envs/xyz/bin/pip install ansible==2.9.15

:バージョンを指定しない場合は、pip 最新バージョンをインストールします。 Ansible2.9とAnsible2.10の間で動作が変更されているため、2.10以降のバージョンのインストールを許可する前に、このドキュメントを確認することをお勧めします。

Pipを使用してPythonモジュールを一覧表示します

別の環境でvirtualenvのレプリカを作成したい場合、または複数のAnsible Towerノードがあり、すべてのノードにvirtualenvを複製する必要があるとします。比較または文書化のためにモジュールのリストを取得するには、次を使用できます。

pip list > pip_list.txt

head -5 /tmp/pip_list.txt
Package       Version
------------- ---------
ansible       2.9.15
certifi       2020.12.5
cffi          1.14.4

同じモジュールバージョンを別の場所にインストールできる形式でリストを生成することもできます:

pip freeze > /tmp/pip_freeze.txt 

head -3 /tmp/pip_freeze.txt
ansible==2.9.15
certifi==2020.12.5
cffi==1.14.4

次に、このフリーズファイルを使用して、次のコマンドを使用して、まったく同じバージョンの同じモジュールをインストールできます。

sudo /opt/my-envs/xyz/bin/pip install -r pip_freeze.txt

3。タワープロジェクト/テンプレートでvirtualenvsを利用できるようにする

デフォルトでは、AnsibleTowerは自身のvirtualenvについてのみ認識します。

Towerに追加のvirtualenvを認識させるには、次の2つのオプションがあります。

  1. AnsibleTowerのドキュメントで説明されているようにRESTAPI呼び出しを使用します
  2. Webインターフェースを使用して、設定->システムに移動します :

これらの2つの手順のいずれかを実行すると、Towerで組織、プロジェクト、およびテンプレートを操作するときに、新しいvirtualenvを選択できるようになります。

:virtualenvディレクトリがユーザー awxによって読み取り可能であることを確認してください 。そうでない場合、Towerはvirtualenvをリストしません。

「注意を払うべき最も重要なことは、どのvirtualenvがアクティブで、どのバイナリがプレイブックで使用されているかです。」

4。 virtualenvのバックアップと復元

タワーの完全バックアップを作成する場合(setup.sh -bを使用) スクリプト)、virtualenvsはそこに自動的にバックアップされ、setup.sh -rを使用して復元できます。 )。もちろん、この方法で復元すると、他のすべて 復元されます。

virtualenvをバックアップ/復元する必要がある場合は、いつでもtarなどのツールを使用できます。 それをするために。

また、pip freezeの出力を保存した場合 コマンドを使用すると、ディレクトリ構造を再作成して、pip installを使用できます。 -rを使用したコマンド 上記のような引数。

復元されたディレクトリ構造がawxで読み取り可能であることを確認します Towerがvirtualenvを認識し、 ANSIBLE ENVIRONMENTの下にリストできるようにするためのユーザー 組織、プロジェクト、およびテンプレートのフィールド。

:OpenShiftで実行されているAnsible Towerのシナリオでは、virtualenvを処理するときの状況が異なります。それは別の記事のトピックです。

5。バージョンのトラブルシューティング

使用しているPythonのバージョンはどれですか?

潜在的な問題の原因の1つは、使用されているPythonとPipの正確なバージョン、またはツールが認識しているバージョンに関連しています。 。

コマンドラインを使用してPythonモジュールをインストール/確認する必要がある場合があるため、使用しているPythonのバージョンを常に確認することをお勧めします。

たとえば、virtualenvをアクティブ化した後、バージョンを確認します。

source /opt/my-envs/xyz/bin/activate

(xyz) [admin@control my-envs]$ which python
/opt/my-envs/xyz/bin/python

(xyz) [admin@control my-envs]$ which python3
/opt/my-envs/xyz/bin/python3

(xyz) [admin@control my-envs]$ python -V
Python 3.6.8

(xyz) [admin@control my-envs]$ which pip
/opt/my-envs/xyz/bin/pip

(xyz) [admin@control my-envs]$ pip3 -V
pip 20.2.4 from /opt/my-envs/xyz/lib/python3.6/site-packages/pip (python 3.6)

上記の例でわかるように、アクティブ化後、すべてのコマンドは私のvirtualenv内のパスを指します。これは、パスに他のバージョンがない限り、表示されるはずです。 いくつかの問題が発生する可能性があります。

これは、する場合に特に重要です。 サーバーに他のPythonバージョンがあります。 pipを実行したい場合があります コマンドをrootユーザーとして使用し、rootがデフォルトのPythonとして表示するものは、root以外のアカウントが表示するものとは異なる場合があります。これにより、モジュールが間違ったPython環境にインストールされ、Towerから実行するテンプレートがモジュールを検出できなくなります。

sudo pip install module-nameを実行する代わりに 、pipのフルパスを使用します この問題を回避するため。前のシナリオを例として使用すると、次のようになります。

sudo /opt/my-envs/xyz/bin/pip install module-name

どのAnsibleバージョンを使用していますか?

それでもXYZという名前のモジュールがないなどのエラーが表示される場合 、テンプレート出力から実行しているAnsibleバージョンを確認します:

virtualenvにあるバージョン/場所と一致していますか?

仮想環境にAnsibleをインストールする必要はありませんが、AnsibleプレイブックがAnsibleの別のインスタンスによって実行されると、仮想環境にインストールされたPythonモジュールが表示されない場合があることに注意してください。

[Red Hatの無料ガイド:ビジネスを自動化するための5つのステップ。 ]

まとめ

Virtualenvsは、インストールされている他のモジュールに干渉することなく、さまざまなPython/Ansibleモジュールを試すことができる分離シナリオを作成するための優れた方法です。 Virtualenvは、最初から簡単に再作成できます。注意すべき最も重要なことは、どのvirtualenvがアクティブで、どのバイナリがプレイブックで使用されているかです。


Linux
  1. Linuxで印刷するための3つのヒント

  2. Linuxコマンドラインに関する8つのヒント

  3. GNUデバッガーの5つのヒント

  1. Linuxでの印刷にCUPSを使用するためのヒントとコツ

  2. Stratisを使用したLinuxでのローカルストレージの構成

  3. Linuxサーバーのセキュリティを開始するための5つのヒント

  1. 相互運用性のためのSambaの使用開始

  2. Ansibleで仕事中のスリルを一新

  3. LinuxソフトウェアをRPMでパッケージ化するためのその他のヒント