Проблема заключается в том, что вы используете тип сетевого подключения
public_network
, который позволяет вашей виртуальной машине получать IP-адрес от DHCP-сервера, находящегося в вашей локальной сети. Это означает, что IP-адрес, который вы получаете в своей функции
__get_local_ip()
, может меняться при каждом запуске виртуальной машины, так как он зависит от IP-адреса, выданного DHCP-сервером.
Если вы хотите назначать статический IP-адрес вашей виртуальной машине, вы можете использовать тип сетевого подключения
private_network
. Для этого вам необходимо изменить конфигурацию виртуальной машины в Vagrantfile следующим образом:
Vagrant.configure("2") do |config|
N = 3
(1..N).each do |i|
config.vm.box = "generic/ubuntu2004"
config.vm.define "node_#{i}" do |node|
node.vm.network "private_network", ip: "192.168.50.#{i}"
node.vm.hostname = "vm#{i}"
node.vm.provider :vmware_desktop do |vb|
vb.memory = 2048
vb.cpus = 1
vb.gui = false
end
end
end
config.vm.provision "shell" do |s|
ssh_pub_key = File.readlines("/home/eugene/.ssh/eugene.pub").first.strip
s.inline = <<-SHELL
mkdir /root/.ssh
echo #{ssh_pub_key} >> /home/vagrant/.ssh/authorized_keys
echo #{ssh_pub_key} >> /root/.ssh/authorized_keys
SHELL
end
end
Здесь мы изменили тип сетевого подключения на
private_network
и назначили статический IP-адрес каждой виртуальной машине, используя опцию ip. В данном примере IP-адреса будут назначены в диапазоне
192.168.50.1-3
.
Теперь, когда вы запустите виртуальную машину, она всегда будет иметь тот же IP-адрес, что вы назначили в Vagrantfile, и вы можете использовать этот IP-адрес в своей функции
__get_local_ip()
для получения IP-адреса виртуальной машины.
Если ответ помог или считаете что может быть полезен другим - не забудьте отметить его как решение вашего вопроса. Успехов!