これは#4590のフォローアップアイテムです。
systemd linuxでは、NICはeth0
またはeth1
ではなく、 ens32
またはens33
ようなIDで識別されます。 systemd IDは、NICのPCIスロットに基づいています。 VagrantがVMを起動すると、NICが再初期化され、PCIスロットが変更される可能性があります。
問題は、OSに特定の場所(例:ens33)でネットワークインターフェイスを初期化するように指示する構成(通常は/ etc / network / interfaces内)があることです。 VagrantがPCIスロットを32に変更すると、VM内のネットワークは開始できません。
ここには2つのアプローチがあります。
Vagrantは常にPCIスロット32を使用すると推測できます(これは特定の状況では当てはまるかもしれませんが、どれかはわかりません)。
Vagrantは、決定論的動作を使用して、VMXファイルで指定された既存のNICを識別できます(これは、VM内で既に構成されているものを反映している必要があります)。
いずれにせよ、私はこれを決定論的にしたいので、次のようになります。
デフォルトでは、packerはPCIスロット33のNICを初期化しますが、Vagrantはこれを32に変更します。代わりに、VagrantがVMXファイルを解析し、すでに割り当てられているのと同じPCIスロットを再割り当てすることをお勧めします。
また、NICに常にPCIスロット32を使用するようにPackerを変更し、NICが再初期化されたときにVagrantが決定論的にPCIスロット32を使用することが示されている場合に限ります。 私はこれを証明することができませんでした。
私はこれを少なくとも3つの方法で回避できますが、箱から出してこの機能は壊れており、VagrantはPackerでのVMXビルドなどの他のワークフローを壊します。回避策はOSによって異なるため、これはかなり面倒です。
@cbednarski起動時のpciスロット番号の変更を確実に再現し、それを分離して、Vagrantプラグインがスロット番号の変更の原因であることを示すことができました。 これをクリアするカスタム定義の構成を削除しないようにデバイスをセットアップします。
また、 Vagrantfile
は、現在のバージョンのスロット番号を保持します。
Vagrant.configure(2) do |config|
...
config.vm.provider :vmware_fusion do |vmware|
vmware.vmx["ethernet0.pcislotnumber"] = "33"
end
end
この@chrisrobertsを調べてくれてありがとう!
最も参考になるコメント
@cbednarski起動時のpciスロット番号の変更を確実に再現し、それを分離して、Vagrantプラグインがスロット番号の変更の原因であることを示すことができました。 これをクリアするカスタム定義の構成を削除しないようにデバイスをセットアップします。