Ansible_default_ipv4を変更して、eth0ではなくeth1を指すようにします。プレイブックまたは--extra-varsオプションのいずれかでこれを実行できますか?
ansibleはコマンドを使用ip -4 route get 8.8.8.8
でデフォルトのIPv4インターフェースを取得します。 change your ip/routing tableseth1
をデフォルトルートにすると、それが返されます。
または、acustom fact を使用できます== 。
PS:set_fact
を使用してansible_default_ipv4
ファクトをオーバーライドしますが、キャッシング、スコープなどによる独自の落とし穴があります...
別のオプションは、常に明示的にインターフェースを参照することです。クラウドプロバイダーが異なれば、eth0またはeth1にプライベート(通常は10.x.y.z)管理ネットワークを配置するための気象条件が異なります。
参照する代わりに
ansible_default_ipv4["address"]
必要なifaceをいつでも定義できます(group_vars/allなど)
iface:eth0
そしてタスクでそれを参照する
{{'ansible _' + iface ['ipv4'] ['address']}}
単純なgrepはすべての参照を表示します。プロジェクトのグローバルな検索と置換により、これを変更できます。 grep -RH ansible_default_ipv4 .
次に、クラウドプロバイダーを切り替える場合は、必要に応じてifaceを調整するだけです。
冗長ではなく、より明確な定義を好む場合
private_iface: eth0 #switch eth0,eth1 depending on your provider.
public_iface: eth1
private_Host_ipv4: "{{ 'ansible_'+private_iface['ipv4']['address'] }}"
public_Host_ipv4: "{{ 'ansible_'+public_iface['ipv4']['address'] }}"
そして使用するだけ
ansible_default_ipv4
8.8.8.8(インターネット全般)にアクセスするために使用されるプライベートまたはパブリックIPを参照する場合。
ところで、私はルート追加-ネット8.8.8.8ネットマスク255.255.255.255 eth1のEron Wrightの提案を試しました。それは私にとってはうまくいかなかったようで、私はグーグルにpingすることができませんでした(他のパブリックIPにpingすることはできましたが)。
_ip -4 route get 8.8.8.8
_がサーバーで機能していませんでした。
この回避策を作成しました。
- name: find default ipv4... this is a bit of a hack. Shell: ifconfig $(route | grep default | awk '{print $(NF)}') | grep 'inet' | awk '{ print $2}' register: ipv4_address
これで、必要な場所で_ipv4_address
_を使用できます!