1.4. インベントリーのビルド
インベントリーは、Ansible にシステム情報とネットワークの場所を提供する集中ファイルにマネージドノードを編成します。インベントリーファイルを使用すると、Ansible は 1 つのコマンドで多数のホストを管理できます。次の手順を完了するには、少なくとも 1 つのホストシステムの IP アドレスまたは完全修飾ドメイン名 (FQDN) が必要です。デモの目的で、ホストはコンテナーまたは仮想マシン内でローカルに実行できます。
また、公開 SSH 鍵が各ホストの authorized_keys
ファイルに追加されていることを確認する必要があります。インベントリーを構築するには、以下の手順を使用します。
手順
作成した ansible_quickstart
ディレクトリーに inventory.ini
という名前のファイルを作成します。新しい [myhosts]
グループを inventory.ini ファイルに追加し、各ホストシステムの IP アドレスまたは完全修飾ドメイン名 (FQDN) を指定します。
[myhosts] 192.0.2.50 192.0.2.51 192.0.2.52
[myhosts]
192.0.2.50
192.0.2.51
192.0.2.52
以下を使用してインベントリーを確認します。
ansible-inventory -i inventory.ini --list
ansible-inventory -i inventory.ini --list
以下を使用して、インベントリー内の myhosts
グループに ping します。
ansible myhosts -m ping -i inventory.ini
ansible myhosts -m ping -i inventory.ini
コントロールノードと管理ノードでユーザー名が異なる場合は、Ansible コマンドに -u
オプションを渡します。
192.0.2.50 | SUCCESS => { "ansible_facts": { "discovered_interpreter_python": "/usr/bin/python3" }, "changed": false, "ping": "pong" } 192.0.2.51 | SUCCESS => { "ansible_facts": { "discovered_interpreter_python": "/usr/bin/python3" }, "changed": false, "ping": "pong" } 192.0.2.52 | SUCCESS => { "ansible_facts": { "discovered_interpreter_python": "/usr/bin/python3" }, "changed": false, "ping": "pong" }
192.0.2.50 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python3"
},
"changed": false,
"ping": "pong"
}
192.0.2.51 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python3"
},
"changed": false,
"ping": "pong"
}
192.0.2.52 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python3"
},
"changed": false,
"ping": "pong"
}
インベントリーが正常に作成されました。
1.4.1. INI または YAML 形式のインベントリー
インベントリーは、INI ファイルまたは YAML のいずれかで作成できます。前述の例のように、ほとんどの場合、INI ファイルは単純で、マネージドノードが少数の場合は簡単に確認できます。マネージドノードの数が増えると、YAML 形式でインベントリーを作成すると適切なオプションになります。
たとえば、次のコードは、マネージドノードの一意の名前を宣言し、ansible_host
フィールドを使用する inventory.ini
と同等です。
myhosts: hosts: my_host_01: ansible_host: 192.0.2.50 my_host_02: ansible_host: 192.0.2.51 my_host_03: ansible_host: 192.0.2.52
myhosts:
hosts:
my_host_01:
ansible_host: 192.0.2.50
my_host_02:
ansible_host: 192.0.2.51
my_host_03:
ansible_host: 192.0.2.52
1.4.2. インベントリーのビルドに関するヒント
- グループ名が一意で、わかりやすいものであることを確認してください。
- グループ名も大文字と小文字が区別されます。
- グループ名にはスペース、ハイフン、または前に数字を付けないでください (19th_floor ではなく、floor_19 を使用してください)。
What (内容)、Where (場所)、および When (タイミング) に従って、インベントリー内のホストを論理的にグループ化します。
- What: トポロジーに従ってホストを分類します (例: db、web、leaf、spine)。
- Where: 地理的な場所でホストを分類します (例: datacenter、region、floor、build)。
- When: ステージごとにホストを分類します (例: development、test、staging、production)。
1.4.3. メタグループの使用
以下の構文を使用して、インベントリー内に複数のグループを整理するメタグループを作成します。
metagroupname: children:
metagroupname:
children:
次のリスト表は、データセンターの基本構造を示しています。以下のインベントリーは、データセンターの基本構造を示しています。このインベントリーの例には、すべてのネットワークデバイスを含む network メタグループと、network グループとすべての Web サーバー含む datacenter メタグループが含まれます。
leafs: hosts: leaf01: ansible_host: 192.0.2.100 leaf02: ansible_host: 192.0.2.110 spines: hosts: spine01: ansible_host: 192.0.2.120 spine02: ansible_host: 192.0.2.130 network: children: leafs: spines: webservers: hosts: webserver01: ansible_host: 192.0.2.140 webserver02: ansible_host: 192.0.2.150 datacenter: children: network: webservers:
leafs:
hosts:
leaf01:
ansible_host: 192.0.2.100
leaf02:
ansible_host: 192.0.2.110
spines:
hosts:
spine01:
ansible_host: 192.0.2.120
spine02:
ansible_host: 192.0.2.130
network:
children:
leafs:
spines:
webservers:
hosts:
webserver01:
ansible_host: 192.0.2.140
webserver02:
ansible_host: 192.0.2.150
datacenter:
children:
network:
webservers: