Ansible事実 ターゲットノード(構成するホストノード)について収集され、コントローラーノードに返されるデータです。 AnsibleファクトはJSON形式で保存され、統計に基づいてタスクに関する重要な決定を行うために使用されます。事実はansible_factsにあります 変数。AnsibleEngineによって管理されます。 リアルタイムデータに従ってホストと同期する際には、Ansibleファクトが主要な役割を果たします。 。
[次のこともお勧めします:AnsibleTowerの紹介]
Ansibleファクトとは正確には何であり、どのように使用されますか?
Ansibleファクトは、接続するホスト固有のシステムデータとプロパティです。事実は、IPアドレス、BIOS情報、システムのソフトウェア情報、さらにはハードウェア情報である可能性があります。 Ansibleファクトは、管理者がシステムの状態に関する情報を持たずに直接アクションを実行するのではなく、現在の状態に基づいてホストを管理するのに役立ちます。
シナリオは次のとおりです。すべてのLinuxホストにApacheウェブサーバーをインストールする必要があります。 Red Hat Enterprise Linux(RHEL)ベースのホストがRed Hat Package Manager(RPM)およびyum/dnf
と連携することをご存知でしょう。 。他のLinuxディストリビューションは、独自のパッケージマネージャーを使用しているため、変更を加えたり、それらの違いを参照したりせずに、異なるシステムで同じタスクを実行することはできません。パッケージ名もディストリビューションによって異なります。たとえば、RHELシステムでは、Apache Webサーバーパッケージはhttpdですが、他のディストリビューションではapache2という名前です。
この問題を実証するためのAnsibleプレイブックは次のとおりです。
- hosts: all
tasks:
- package:
name: "httpd"
state: present
when ansible_facts["os_name"] == "RedHat"
- package:
name: "apache2"
state: present
when ansible_facts["os_name"] == "Ubuntu"
ここで、スクリプトはAnsibleファクトを使用してシステムに関する情報を収集し、それに応じて操作を実行します。 RHELシステムにインストールすると、Ubuntuベースのパッケージが自動的にスキップされます。その逆も同様です。同様に、システムに利用可能なリソースが最小限の場合は、Ansibleファクトを使用して操作を実行できます。
つまり、システム管理者はAnsibleファクトを使用して、タスクを実行するタイミングと実行しないタイミングのパラメーターを指定することで、Ansibleをよりスマートにすることができます。
事実へのアクセス
Ansibleファクトはsetup
を使用します プレイブックを実行する前に毎回事実を収集するためのモジュール。
Ansibleアドホックコマンドの使用
1.アドホックコマンドを使用してAnsibleファクトにアクセスする
setup
モジュールは、リモートホストからコントローラーノードにすべての詳細をフェッチし、それらを画面に直接ダンプして、事実をユーザーに表示します。
ansible all -m setup
2.Ansibleファクトから特定の値を除外する
ここでは、setup
モジュールは、システムに関する事実を取得するために使用され、さらに、フィルターを使用します Ansibleファクトからの値を表示するための引数。
ansible all -m setup -a "filter=ansible_cmdline"
注 :Ansibleファクトは、プレイブックを操作する場合にのみ取得されます。アドホックコマンドを使用してAnsibleファクトにアクセスするには、setup
を使用します モジュール。
Ansibleプレイブックの使用
AnsibleプレイブックのAnsibleファクトから変数にアクセスするには、 ansibleを使用せずに実際の名前を使用する必要があります キーワード。
ansible_facts["ansible_system"]❌
ansible_facts["system"]✔️
gather_facts
Ansibleプレイブックのモジュールはsetup
を実行します デフォルトでは、各プレイブックの冒頭にモジュールがあり、リモートホストに関する事実を収集します。
3.Ansibleプレイブックを使用してファクトにアクセスする
Ansibleファクトを取得し、プレイブックを使用して表示します。
- hosts: all
tasks:
- debug:
var: ansible_facts
4.Ansibleプレイブックを使用して特定の事実にアクセスする
Ansibleファクトを取得し、フィルタリングし、プレイブックを使用して表示します。
- hosts: all
tasks:
- debug:
var: ansible_facts["cmdline"]
Ansibleファクトとデータ型
AnsibleファクトはJSON形式で保存され、次の3つの主要なカテゴリに分類できます。
リスト :アイテムのリストを保存し、保存された情報は角かっこで囲まれています [] 。これらは主に、複数の値を持つ可能性のあるファクトです(例:system_capablities
) 。リストには、角かっこを使用してインデックスを指定してアクセスします。
ansible_facts["all_ipv6_addresses"][1]
ansible_facts["all_ipv6_addresses"][2]
辞書 :データをキーと値のペアのコレクションとして格納し、情報を中括弧で囲んで格納します {} 。これらは主に、内部にサブファクトがあるファクトです(例:memory_mb
) 。辞書にはドット演算子を使用してアクセスします。
ansible_facts.memory_mb.real
安全でないテキスト :このタイプの変数にはサブパートがなく、データを直接保存します(例:machine
) 。 Ansible Unsafe Textには、ファクト名を使用して直接アクセスできます。
ansible_facts["machine"]
type_debugを使用します フィルタして、Ansibleファクトのデータ型をチェックします。
- hosts: all
tasks:
- debug:
var: ansible_facts["all_ipv6_addresses"]|type_debug
- debug:
var: ansible_facts["memory_mb"]|type_debug
- debug:
var: ansible_facts["machine"]|type_debug
type_debug filterは、ファクトの値を出力せずに、指定されたファクトのデータ型を要求します。
[システム自動化についてもっと知りたいですか? RedHatの無料の本であるTheAutomatedEnterpriseを始めましょう。 ]
まとめ
Ansibleファクトは、構成するシステムに関するデータです。これらの事実は、タスクをいつ処理するかについての条件を提供することにより、Ansibleシステムをインテリジェントにします。 Ansibleファクトを指定または使用せずに処理することもできますが、スクリプトが失敗したり、変更することを意図していないファイルの一部が変更されたりする可能性があるため、システム管理者としての仕事はより忙しくなります。
Ansibleの事実の詳細については、公式ドキュメントを参照してください。