Class: VagrantPlugins::ProviderZone::SetupStrategies::DHCP

Inherits:
Base
  • Object
show all
Defined in:
lib/vagrant-zones/setup_strategies/dhcp.rb

Overview

DHCP strategy: relies on the host-side dhcpd serving the zone’s private etherstub. Waits for SSH to come up; the host’s dhcpd provides the reserved IP via Hosts.yml configuration. No in-guest configuration.

Instance Method Summary collapse

Methods inherited from Base

#initialize

Constructor Details

This class inherits a constructor from VagrantPlugins::ProviderZone::SetupStrategies::Base

Instance Method Details

#control(uii, action) ⇒ Object



53
54
55
56
57
58
59
60
61
62
63
64
65
# File 'lib/vagrant-zones/setup_strategies/dhcp.rb', line 53

def control(uii, action)
  config = @machine.provider_config
  case action
  when /restart/
    command = config.safe_restart || 'sudo shutdown -r'
    @driver.ssh_run_command(uii, command)
  when 'shutdown'
    command = config.safe_shutdown || 'sudo init 0 || true'
    @driver.ssh_run_command(uii, command)
  else
    uii.info(I18n.t('vagrant_zones.control_no_cmd'))
  end
end

#get_ip_address(uii) ⇒ Object



30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
# File 'lib/vagrant-zones/setup_strategies/dhcp.rb', line 30

def get_ip_address(uii)
  config = @machine.provider_config
  uii.info(I18n.t('vagrant_zones.get_ip_address')) if config.debug
  @machine.config.vm.networks.each do |(_adaptertype, opts)|
    if opts[:dhcp4] && opts[:managed] && !opts[:ip].to_s.empty?
      return opts[:ip].to_s.gsub("\t", '')
    elsif (opts[:dhcp4] == false || opts[:dhcp4].nil?) && opts[:managed]
      static = opts[:ip].to_s
      return nil if static.empty?

      return static.gsub("\t", '')
    end
  end
  nil
end

#setup_network(uii) ⇒ Object



46
47
48
49
50
51
# File 'lib/vagrant-zones/setup_strategies/dhcp.rb', line 46

def setup_network(uii)
  # The host's dhcpd provides the zone's reserved address via the etherstub;
  # the guest auto-configures over DHCP, so no in-guest setup is required.
  uii.info(I18n.t('vagrant_zones.chk_dhcp_addr')) if @machine.provider_config.debug
  nil
end

#wait_for_boot(uii, metrics, interrupted) ⇒ Object



12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# File 'lib/vagrant-zones/setup_strategies/dhcp.rb', line 12

def wait_for_boot(uii, metrics, interrupted)
  config = @machine.provider_config
  return if config.cloud_init_enabled

  metrics ||= {}
  metrics['instance_dhcp_ssh_time'] = Util::Timer.time do
    @driver.retryable(on: Errors::TimeoutError, tries: 60) do
      next if interrupted

      loop do
        break if interrupted
        break if @machine.communicate.ready?
      end
    end
  end
  uii.info("#{I18n.t('vagrant_zones.dhcp_boot_ready')} in #{metrics['instance_dhcp_ssh_time']} Seconds")
end