Проблема заключается в том, что вы используете тип сетевого подключения 
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-адреса виртуальной машины.
Если ответ помог или считаете что может быть полезен другим - не забудьте отметить его как решение вашего вопроса. Успехов!