第18章 インベントリー
Red Hat Ansible Automation Platform は、インベントリーファイルを使用して、論理的に編成されたインフラストラクチャー内の管理対象ノードまたはホストのリストに対して機能します。Red Hat Ansible Automation Platform インストーラーインベントリーファイルを使用して、インストールシナリオを指定し、Ansible へのホストのデプロイを説明できます。インベントリーファイルを使用することで、Ansible は単一のコマンドで多数のホストを管理できます。インベントリーは、指定する必要があるコマンドラインオプションの数を減らすことで、Ansible をより効率的に使用するのにも役立ちます。インベントリーはグループに分割されており、これらのグループにはホストが含まれます。
グループは、Automation Controller にホスト名を入力して手動で取得することも、サポートされているクラウドプロバイダーの 1 つから取得することもできます。
カスタム動的インベントリースクリプト、または Automation controller でまだネイティブにサポートされていないクラウドプロバイダーがある場合は、それを Automation controller にインポートすることもできます。
詳細は、Automation controller 管理ガイド の インベントリーファイルのインポート を参照してください。
ナビゲーションパネルから、
Inventory details ページには次の内容が含まれます。
- Name: インベントリー名。
- Status
ステータスは以下のとおりです。
- Success: インベントリーソースの同期が正常に完了した時
- Disabled: インベントリーに追加されたインベントリーソースがない
Error: インベントリーソースの同期がエラーを出して完了する場合
- Type: 標準インベントリー、スマートインベントリー、構築インベントリーのいずれであるかを識別します。
- Organization: インベントリーが属する組織。
- Actions: 以下のアクションを選択したインベントリーについて実行できます。
-
Edit (
): 選択したインベントリーのプロパティーを編集します。
-
Copy
: 新しいインベントリーの作成用のテンプレートとして、既存のインベントリーのコピーを作成します。
インベントリー名をクリックすると、選択したインベントリーの Details ページが表示され、インベントリーのグループとホストが表示されます。
18.1. スマートインベントリー リンクのコピーリンクがクリップボードにコピーされました!
スマートインベントリーは、保存された検索によって定義されたホストのコレクションであり、標準インベントリーと同様に表示でき、ジョブの実行で簡単に使用できます。組織管理者は組織内のインベントリーに対する管理者パーミッションを持っており、スマートインベントリーを作成できます。
スマートインベントリーは、KIND=smart で識別されます。
検索で使用されているのと同じ方法を使用して、スマートインベントリーを定義できます。InventorySource はインベントリーに直接関連付けられます。
スマートインベントリーは非推奨となり、今後のリリースでは削除される予定です。機能の拡張と置き換えのために、構築型インベントリーへの移行を検討してください。
Inventory モデルには、デフォルトで空白にされる以下の新規フィールドがありますが、スマートインベントリーについては以下のように設定されます。
-
スマートインベントリーの場合、
Inventoryはsmartに設定される -
スマートインベントリーの場合、
host_filterが設定され、kindはsmartに設定される
ホスト モデルには、ホストが関連付けられているすべてのスマートインベントリーのセットを識別する関連エンドポイント、smart_inventories があります。メンバーシップテーブルは、スマートインベントリーに対してジョブが実行されるたびに更新されます。
メンバーシップをさらに頻繁に更新するには、AWX_REBUILD_SMART_MEMBERSHIP ファイルベースの設定を True に変更します。(デフォルトは False です)。これにより、次のイベントが発生した場合にメンバーシップが更新されます。
- 新規ホストが追加される
- 既存ホストが変更される (更新または削除される)
- 新規スマートインベントリーが追加される
- 既存スマートインベントリーが変更される (更新または削除される)
編集できなくてもインベントリーを表示できます。
- ホストおよびグループの名前はインベントリーソースの同期の結果として作成されます。
- グループのレコードは編集したり、移動したりすることはできません。
通常のインベントリーの場合のように、スマートインベントリーホストエンドポイント (/inventories/N/hosts/) からホストを作成できません。スマートインベントリーの管理者には、名前、説明、変数などのフィールドを編集するパーミッションと、削除するパーミッションがありますが、スマートインベントリーに含まれるホスト (別のインベントリーでプライマリーメンバーシップを持つホスト) が左右されるため、host_filter を変更するパーミッションはありません。
host_filter は、スマートインベントリーの組織に含まれるインベントリーのホストにのみ適用されます。
host_filter を変更するには、インベントリーの組織の組織管理者である必要があります。組織管理者は、組織内のすべてのインベントリーに対する暗黙的な "admin" アクセス権を持っているため、組織管理者がまだ所有していないパーミッションが継承されるわけではありません。
スマートインベントリーの管理者は、他のユーザー (組織の管理者ではないユーザー) に、スマートインベントリーに対する「使用」や「アドホック」などのアクセス許可を付与できます。これらは、他の標準インベントリーと同様に、ロールで指定されたアクションを許可します。ただし、これはホスト (別のインベントリーに存在する) に特別なパーミッションを付与するものではありません。ホストへの直接読み取りパーミッションは割り当てられず、/#/hosts/ の下にある追加のホストを表示することも許可されませんが、スマートインベントリーホストリストの下にあるホストは表示できます。
状況によっては、以下のものを変更できます。
- インベントリーソースを使用してインベントリーに手動で作成した新しいホスト。
- インベントリーソースの同期の結果として作成されたグループ。
- ホストとグループの変数は、ローカルシステム管理者であっても変更できません。
スマートインベントリーに関連付けられたホストは表示される際に明示されます。スマートインベントリーの結果に同じホスト名を持つ複数のホストが含まれる場合、一致するホストの 1 つのみがスマートインベントリーの一部として組み込まれ、ホスト ID 別に並べ替えられます。
18.1.1. スマートホストフィルター リンクのコピーリンクがクリップボードにコピーされました!
検索フィルターを使用して、インベントリーのホストを入力できます。この機能はファクト検索機能を使用します。
Automation Controller は、ジョブテンプレート別に use_fact_cache=True が設定されるたびに、ジョブテンプレートを実行中に Ansible Playbook で生成されたファクトをデータベースに保存します。新しいファクトはホスト別となっており、既存のファクトとマージされます。これらの保存されたファクトは、GET クエリーパラメーター host_filter を使用して /api/v2/hosts エンドポイントでホストをフィルター処理するために使用できます。
以下に例を示します。
/api/v2/hosts?host_filter=ansible_facts__ansible_processor_vcpus=8
/api/v2/hosts?host_filter=ansible_facts__ansible_processor_vcpus=8
host_filter パラメーターでは次のことが許可されます。
- () でのグループ化
ブール値および演算子の使用:
-
__関連付けられたフィールドの関連フィールドを参照します。 -
__JSON キーパスでキーを分離するために ansible_facts で使用されます。 - `[] パスの指定で json アレイを表すために使用されます。
-
""値にスペースが必要な場合は、その値に使用されます。
-
-
「標準的」な Django クエリーを
host_filterに組み込むことができる
例:
host_filter は、ホスト名、グループ名、および Ansible ファクト 別に検索できます。
グループ検索の形式は次のとおりです。
groups.name:groupA
groups.name:groupA
ファクト検索の形式は次のとおりです。
ansible_facts.ansible_fips:false
ansible_facts.ansible_fips:false
また、ホスト名とホストの説明で構成されるスマート検索の検索を実行することもできます。
host_filter=name=my_host
host_filter=name=my_host
host_filter の検索語が文字列型の場合、数値 (例: 2.66) または JSON キーワード (例: null、true、または false) の値を有効にするには、値の前後に二重引用符を追加して、コントローラーが検索語を二重引用符で囲み、非文字列として解析されないようにします。
host_filter=ansible_facts__packages__dnsmasq[]__version="2.66"
host_filter=ansible_facts__packages__dnsmasq[]__version="2.66"
18.1.2. ansible_facts を使用したホストフィルターの定義 リンクのコピーリンクがクリップボードにコピーされました!
スマートインベントリーの作成時に ansible_facts を使用してホストフィルターを定義するには、次の手順を実行します。
手順
-
ナビゲーションパネルから、
を選択します。 - Add リストから Add Smart Inventory を選択します。
Create new smart inventory ページで、
Smart host filter フィールドのアイコンをクリックします。これにより、このインベントリーのホストをフィルタリングするためのウィンドウが開きます。
検索メニューで、検索基準を Name から Advanced に変更し、Key フィールドから ansible_facts を選択します。
次の Ansible fact を追加する場合:
/api/v2/hosts/?host_filter=ansible_facts__ansible_processor[]="GenuineIntel"
/api/v2/hosts/?host_filter=ansible_facts__ansible_processor[]="GenuineIntel"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 検索フィールドに
ansible_processor[]="GenuineIntel"と入力し (値の前に余分なスペースや__はなし)、 をクリックします。
指定した Ansible fact の検索条件が表示されます。
正規表現変数でフィルタリングするには、
ansible.builtin.regex_search filterのドキュメントと、ナレッジベースのソリューション記事 How to filter hosts not having a particular variable name using regex when creating Smart Inventory を参照してください。
- をクリックして、Smart host filter フィールドに追加します。
- をクリックします。
- 新規スマートインベントリーの Details タブが開き、Smart host filter フィールドに指定した Ansible ファクトが表示されます。
Details ビューで、Edit をクリックして Smart host filter フィールドを編集することや、既存フィルターの削除、すべての既存フィルターの消去、新しいフィルターの追加が可能です。