2017-11-23 7 views
0

私はいくつかのLinuxホストをopenstack環境に配備し、それらをできるだけ安全に設定しようとしています。私は、静的なhostsファイルでansibleを実行した場合、私は、https://github.com/ansible/ansible/blob/devel/contrib/inventory/openstack.pyOpenstackで可能な動的インベントリ

から株式ダイナミック在庫スクリプトでいくつかの困難を抱えているすべてのものが

# inventory/static-hosts 
localhost ansible_connection=local 
linweb01 ansible_host=10.1.1.101 
 
% ansible linweb01 -m ping -i ./inventory/static-hosts \ 
    --extra-vars="ansible_user=setup ansible_ssh_private_key_file=/home/ian/keys/setup.key" 
linweb01 | SUCCESS => { 
    "changed": false, 
    "ping": "pong" 
} 

正常に動作します。しかし、私は、ダイナミックな在庫を使用している場合、私は手動で在庫スクリプトを実行すると、ホストは、ホストが発見され、

% ansible linweb01 -m ping -i ./inventory/openstack.py \ 
    --extra-vars="ansible_user=setup ansible_ssh_private_key_file=/home/ian/keys/setup.key" 
linweb01 | UNREACHABLE! => { 
    "changed": false, 
    "msg": "Failed to connect to the host via ssh: ssh: Could not resolve hostname linweb01: Name or service not known\r\n", 
    "unreachable": true 
} 

が見つからず、返されたアドレスは正しいです

% ./inventory/openstack.py --host linweb01 
[...] 
"name": "linweb01", 
"networks": {}, 
"os-extended-volumes:volumes_attached": [], 
"power_state": 1, 
"private_v4": "10.1.1.101", 
[...] 

私の推測では、インベントリスクリプトはIPアドレスの "private_v4"値を使用することを知らないと思いますが、これについては参考にできません。

インベントリスクリプトから返された「private_v4」の値をホストの「ansible_host」値として使用するにはどうすればよいですか?コードに

答えて

1

クイックルックは、IPアドレスがinterface_ipキーになると予想されることを示唆している:

hostvars[key] = dict(
    ansible_ssh_host=server['interface_ip'], 
    ansible_host=server['interface_ip'], 
    openstack=server) 

あなたは回避策が必要な場合は、あなたがあなたgroup_vars/all.ymlにこれを追加しようとすることができます

ansible_host: "{{ private_v4 }}" 
+0

助けてくれてありがとう、コンスタンチン。私はまだ上記の解決に失敗しましたが、あなたの提案は私にopenstack.pyスクリプトを見て、 'interface_ip'を 'private_v4'に変更しました。 –

+0

group_varsの方がhostfile/scriptよりも優先順位が低いことが分かります。上記のansible_host行をロールvarsに移動すると、優先順位が高くなり、期待どおりに動作します。ありがとう@ konstantin-suvorov –

関連する問題