web-dev-qa-db-ja.com

インベントリで定義されているAnsible getホスト名

私のインベントリでは、次のようにホストを定義しています。

 [server1]
 141.151.176.223

server1の名前を保持する変数を探しています。サーバーのホスト名を定義するために使用しています。

inventory_hostname141.151.176.223ansible_hostnameに設定され、inventory_hostname_short148に設定されます。

この問題を回避するには、次のように独自の変数を設定します。

 [server1]
 141.151.176.223 hostname=server1

しかし、私はこのアプローチに満足していません。

何か案は?

7

説明

インベントリファイルがこの方法で定義された場合:

[server1_group]
server1 ansible_Host=141.151.176.223

次にアクセスできます:

  • server1ファクトを持つinventory_hostname;

  • 141.151.176.223ファクトを持つansible_Host;

  • server1_group with group_names|firstgroup_names factにはサーバーが属するすべてのグループのリストが含まれ、firstはそのリストから最初の要素を選択します)。

上記に関係なく、ansible_hostnamefactには、ホスト自体で定義されたホスト名が含まれます(値はファクトの収集中に設定されます)。


ソリューション

標準のansible_Host宣言を使用してターゲットのIPアドレスを指し、インベントリのホスト名を、Ansible Playbookでサーバーを参照するように設定する必要があります。

特に、グループ定義を完全にスキップして、次のものだけを定義できます。

server1 ansible_Host=141.151.176.223
14
techraf

[server1]宣言は、 group の名前であり、ホストではありません(単一のホストのみをそのグループに割り当てた場合でも)。

Ansibleではホストを複数のグループに配置できるため、名前は配列としてのみ取得できます。 http://docs.ansible.com/ansible/latest/playbooks_variables.html#magic-variables-and-他のホストに関する情報へのアクセス方法

したがって、IPアドレスの代わりに実際のホスト名を使用できない場合(DNSまたは静的ホストファイルを使用)を除いて、あなたが見つけた回避策が進むべき方法だと思います。

0
Costi Ciudatu