Class: VagrantPlugins::ProviderZone::QGA::FreebsdBackend

Inherits:
BaseBackend
  • Object
show all
Defined in:
lib/vagrant-zones/qga/freebsd_backend.rb

Overview

Vanilla FreeBSD: write ifconfig_*, defaultrouter, hostname entries to /etc/rc.conf.local and restart netif + routing services.

Constant Summary collapse

RC_CONF_LOCAL =
'/etc/rc.conf.local'
BEGIN_MARKER =
'# BEGIN vagrant-zones managed block'
END_MARKER =
'# END vagrant-zones managed block'

Instance Method Summary collapse

Methods inherited from BaseBackend

#name, #verify

Instance Method Details

#apply(uii, qga, nics, _ctx) ⇒ Object

Raises:



27
28
29
30
31
32
33
34
35
36
37
38
39
# File 'lib/vagrant-zones/qga/freebsd_backend.rb', line 27

def apply(uii, qga, nics, _ctx)
  block = render_block(nics, qga)
  remove_existing_block(qga)
  append = qga.exec('/bin/sh', args: ['-c', "cat >> #{RC_CONF_LOCAL}"],
                               input_data: block, timeout: 30)
  raise Errors::QGAError, message: "rc.conf.local append failed: #{append[:stderr]}" if append[:exitcode] != 0

  uii.info("#{I18n.t('vagrant_zones.qga_backend_apply')} freebsd-rcconf")
  netif = qga.exec('/usr/sbin/service', args: %w[netif restart], timeout: 60)
  raise Errors::QGAError, message: "service netif restart failed: #{netif[:stderr]}" if netif[:exitcode] != 0

  qga.exec('/usr/sbin/service', args: %w[routing restart], timeout: 30)
end

#cleanup(uii, qga, _nics) ⇒ Object



41
42
43
44
# File 'lib/vagrant-zones/qga/freebsd_backend.rb', line 41

def cleanup(uii, qga, _nics)
  remove_existing_block(qga)
  uii.info("#{I18n.t('vagrant_zones.qga_backend_cleanup')} freebsd-rcconf")
end

#detect?(qga) ⇒ Boolean

Returns:

  • (Boolean)


15
16
17
18
19
20
21
22
23
24
25
# File 'lib/vagrant-zones/qga/freebsd_backend.rb', line 15

def detect?(qga)
  os = qga.osinfo
  return false unless os['id'].to_s.downcase == 'freebsd'

  # Pure FreeBSD only here; pfSense/OPNsense handled by their own backends.
  pfsense = qga.exec('/bin/sh', args: ['-c', 'grep -q pfSense /etc/version 2>/dev/null'], timeout: 10)[:exitcode].zero?
  opnsense = qga.exec('/usr/bin/test', args: ['-d', '/usr/local/opnsense/version'], timeout: 10)[:exitcode].zero?
  !(pfsense || opnsense)
rescue StandardError
  false
end