web-dev-qa-db-ja.com

ansible_default_ipv4をどのように変更しますか?

Ansible_default_ipv4を変更して、eth0ではなくeth1を指すようにします。プレイブックまたは--extra-varsオプションのいずれかでこれを実行できますか?

15
jd50

ansibleはコマンドを使用ip -4 route get 8.8.8.8でデフォルトのIPv4インターフェースを取得します。 change your ip/routing tableseth1をデフォルトルートにすると、それが返されます。

または、acustom fact を使用できます== 。

PS:set_factを使用してansible_default_ipv4ファクトをオーバーライドしますが、キャッシング、スコープなどによる独自の落とし穴があります...

16
Kashyap

別のオプションは、常に明示的にインターフェースを参照することです。クラウドプロバイダーが異なれば、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することはできましたが)。

4
darKoram

_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_を使用できます!

0
Chris Bolton