私のインベントリでは、次のようにホストを定義しています。
[server1]
141.151.176.223
server1
の名前を保持する変数を探しています。サーバーのホスト名を定義するために使用しています。
inventory_hostname
は141.151.176.223
ansible_hostname
に設定され、inventory_hostname_short
は148
に設定されます。
この問題を回避するには、次のように独自の変数を設定します。
[server1]
141.151.176.223 hostname=server1
しかし、私はこのアプローチに満足していません。
何か案は?
説明
インベントリファイルがこの方法で定義された場合:
[server1_group]
server1 ansible_Host=141.151.176.223
次にアクセスできます:
server1
ファクトを持つinventory_hostname
;
141.151.176.223
ファクトを持つansible_Host
;
server1_group
with group_names|first
(group_names
factにはサーバーが属するすべてのグループのリストが含まれ、first
はそのリストから最初の要素を選択します)。
上記に関係なく、ansible_hostname
factには、ホスト自体で定義されたホスト名が含まれます(値はファクトの収集中に設定されます)。
ソリューション
標準のansible_Host
宣言を使用してターゲットのIPアドレスを指し、インベントリのホスト名を、Ansible Playbookでサーバーを参照するように設定する必要があります。
特に、グループ定義を完全にスキップして、次のものだけを定義できます。
server1 ansible_Host=141.151.176.223
[server1]
宣言は、 group の名前であり、ホストではありません(単一のホストのみをそのグループに割り当てた場合でも)。
Ansibleではホストを複数のグループに配置できるため、名前は配列としてのみ取得できます。 http://docs.ansible.com/ansible/latest/playbooks_variables.html#magic-variables-and-他のホストに関する情報へのアクセス方法
したがって、IPアドレスの代わりに実際のホスト名を使用できない場合(DNSまたは静的ホストファイルを使用)を除いて、あなたが見つけた回避策が進むべき方法だと思います。