私たちが知っているように、 Ansible 最も強力な自動化ツールです ホストを簡単に構成できます。自動化ツールとしてAnsibleを使用する主な利点は、ホストにエージェントをインストールする必要がないことです。 Ansibleサーバーとそのクライアントまたは管理対象ホスト間の通信はエージェントレスであり、sshメカニズムを介して機能します。
Ansibleの用語では、ansibleソフトウェアをインストールするシステムは「コントロールノード」と呼ばれます 」およびAnsibleサーバーまたはコントロールノードによって管理および構成されているサーバーは、「管理対象ホスト」と呼ばれます。 「。管理対象ホストのエントリは、ホストインベントリファイルに保存されます。これは、管理対象ホスト名またはIPアドレスで構成される制御ノード上のテキストファイルです。 Ansibleでは、2つのタイプのホストインベントリを管理できます。つまり、静的 および動的 。
この記事では、Ansibleで静的および動的ホストインベントリを管理する方法について説明します。 Ansibleソフトウェアがすでにコントロールノードにインストールされていると想定しています。 ansibleソフトウェアをインストールするたびに、デフォルトのansibleホストファイルが「hosts」という名前で作成されます 」フォルダの下にある「/etc / ansible 」Ansibleソフトウェアがサーバーにインストールされていない場合は、以下を参照してください
- CentOS 8 / RHEL 8にAnsible(自動化ツール)をインストールする方法
- CentOS7.xにAnsibleAutomationツールをインストールする方法
このチュートリアルでは、以下を使用します:
1つのコントロールノード – control-node.example.com(192.168.0.10)
2つの管理対象ホスト – servera.example.com(192.168.0.20)およびserverb.example.com(192.168.0.30)
静的ホストインベントリ
Ansibleの静的ホストインベントリはINIに似ています テキストファイル。各セクションでホストの1つのグループ(ホストグループ)を宣言します。各セクションは、角かっこ([])で囲まれたホストグループ名で始まり、グループ内の各管理対象ホストのホストエントリがそれぞれ1行に一覧表示されます。ホストエントリは、管理対象ホストのホスト名またはIPアドレスにすることができます。ユーザーのホームディレクトリの「test-lab」フォルダの下に「inventory」という名前のインベントリファイルを作成しましょう。
[[email protected] ~]$ mkdir test-lab [[email protected] ~]$ cd test-lab/ [[email protected] test-lab]$ vi inventory control-node.example.com 192.168.0.10 [webserver] servera.example.com [dbserver] serverb.example.com [datacenter:children] webserver dbserver
ファイルを保存して終了します。
インベントリファイルに、webserverとdbserverという名前の2つのホストグループを作成しました。これとは別に、ホストグループのグループを含むdatacenterという名前のグループをもう1つ作成しました。 Anisbleホストインベントリには、ホストグループのグループを含めることができます。これは、「:children」で実行されます。 ‘接尾辞の例は、上記で作成したインベントリに示されています。また、ホストをグループに配置することは必須ではありません。インベントリファイルの「control-node.exmaple.com」エントリのように、ホストグループに言及せずにホストを配置するだけです。
インベントリホストを参照して、ansibleコマンドで基本的な操作を行いましょう。
ホスト管理にansibleコマンドを使用するには、ホストインベントリファイルのパスを「 -i」で指定する必要があります 」オプション。
$ ansible {host-pattern} -i /
例:1すべての管理ホストを一覧表示します
すべての管理対象ホストを一覧表示するには、ansibleコマンドでホストパターンの代わりに「all」キーワードを指定します。例を以下に示します
[[email protected] test-lab]$ ansible all -i /home/linuxtechi/test-lab/inventory --list-hosts hosts (4): control-node.example.com 192.168.0.10 servera.example.com serverb.example.com [[email protected] test-lab]$
すべての管理対象ホストを一覧表示する別の方法は、「*」ワイルドカード文字を使用することです。
[[email protected] test-lab]$ ansible '*' -i /home/linuxtechi/test-lab/inventory --list-hosts
例:2ホストグループに基づいて管理対象ホストを一覧表示します。
ホストパターンの代わりにホストグループ名を指定してください
[[email protected] test-lab]$ ansible webserver -i /home/linuxtechi/test-lab/inventory --list-hosts hosts (1): servera.example.com [[email protected] test-lab]$ [[email protected] test-lab]$ ansible datacenter -i /home/linuxtechi/test-lab/inventory --list-hosts hosts (2): servera.example.com serverb.example.com [[email protected] test-lab]$
例:3ワイルドカードホストパターンに基づいて管理対象ホストを一覧表示します。
ドメイン「*.example.com」にあるすべてのホストを一覧表示します
[[email protected] test-lab]$ ansible '*.example.com' -i /home/linuxtechi/test-lab/inventory --list-hosts hosts (3): control-node.example.com servera.example.com serverb.example.com [[email protected] test-lab]$
ネットワーク「192.168.0.0」にあるすべてのホストを一覧表示します
[[email protected] test-lab]$ ansible '192.168.0.*' -i /home/linuxtechi/test-lab/inventory --list-hosts hosts (1): 192.168.0.10 [[email protected] test-lab]$
例:4包含や除外などの高度なホストパターン
ワイルドカードとは別に、Ansibleを使用すると、包含ロジックと除外ロジックを使用して複雑なホストパターンを作成できます。包含は、ORロジックを示すためにホストパターンでグループを区切る「:」文字で実現されます。
ホスト包含パターンの例
[[email protected] test-lab]$ ansible 'webserver:dbserver' -i /home/linuxtechi/test-lab/inventory --list-hosts hosts (2): servera.example.com serverb.example.com [[email protected] test-lab]$
ホスト交差パターンの例
「:&」は、インベントリファイル内の2つのグループの共通部分を表します
[[email protected] test-lab]$ ansible 'datacenter:&dbserver' -i /home/linuxtechi/test-lab/inventory --list-hosts hosts (1): serverb.example.com [[email protected] test-lab]$
ホスト除外パターンの例
除外は、「:」文字と「!」文字を組み合わせて使用することで実現されます
[[email protected] test-lab]$ ansible 'datacenter:!dbserver' -i /home/linuxtechi/test-lab/inventory --list-hosts hosts (1): servera.example.com [[email protected] test-lab]$
動的ホストインベントリ
Ansibleのホストインベントリは動的に生成できます。動的インベントリ情報のソースには、パブリック/プライベートクラウドプロバイダー、コブラーシステム情報、LDAPデータベースまたはCMDB(構成管理データベース)が含まれます。 Ansibleには、Amazon EC2、Cobbler、Rackspace、OpenStackなどの最も一般的なプロバイダーからの動的ホスト、グループ、および変数の情報を処理するスクリプトが含まれています。
クラウドプロバイダーの場合、認証とアクセス情報は、スクリプトがアクセスできるファイルで定義する必要があります。多数の既存のスクリプトがAnsibleのGitHubサイト(https://github.com/ansible/ansible/tree/devel/contrib/inventory)から入手できます。これらのスクリプトは、から入手可能なホスト情報に基づいたインベントリの動的生成をサポートします。 Openstackのような多数のプラットフォーム 、 AWS 、 Ovirt 、 Red Hat Satellite およびOpenShift 。
独自のカスタマイズ動的インベントリプログラムを任意のプログラミング言語で記述でき、適切なオプションが渡された場合はJSON形式で返す必要があります。 Ansibleがスクリプトを使用して外部インベントリシステムからホスト情報を取得するには、このスクリプトが –listをサポートしている必要があります。 パラメータ、JSONハッシュ/ディクショナリと同様のホストグループとホスト情報を返します。例を以下に示します:
[[email protected] test-lab]$ ./inventoryscript --list { "webservers" :["web1.example.com", "web2.example.com" ], "dbservers" :["db1.example.com", "db2.example.com"] }
動的インベントリを作成するスクリプトは、Ansibleがそれを使用するために実行可能である必要があります。
注:Ansibleは、同じ実行での複数のインベントリの使用をサポートしています。 「-i」パラメータに渡された値、または/etc/ansible/ansible.cfgのinventoryパラメータの値のいずれか。複数のインベントリファイルが存在する場合、それらはアルファベット順に調べられます。したがって、ファイルの内容が他のファイルの内容に依存している場合は、ファイルの名前がアルファベット順に別のファイルの名前の後に続くことが重要です。