Class: VagrantPlugins::ProviderZone::QGA::IfupdownBackend

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

Overview

Rewrites a managed block in /etc/network/interfaces and brings interfaces up. Block is delimited by BEGIN/END marker comments so subsequent applies stay idempotent.

Constant Summary collapse

IFACES_PATH =
'/etc/network/interfaces'
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:



22
23
24
25
26
27
28
29
30
31
32
33
34
35
# File 'lib/vagrant-zones/qga/ifupdown_backend.rb', line 22

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

  uii.info("#{I18n.t('vagrant_zones.qga_backend_apply')} ifupdown")
  nics.each do |entry|
    qga.exec('/sbin/ifdown', args: [entry[:vnic_name]], timeout: 30)
    up = qga.exec('/sbin/ifup', args: [entry[:vnic_name]], timeout: 60)
    raise Errors::QGAError, message: "ifup #{entry[:vnic_name]} failed: #{up[:stderr]}" if up[:exitcode] != 0
  end
end

#cleanup(uii, qga, _nics) ⇒ Object



37
38
39
40
# File 'lib/vagrant-zones/qga/ifupdown_backend.rb', line 37

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

#detect?(qga) ⇒ Boolean

Returns:

  • (Boolean)


15
16
17
18
19
20
# File 'lib/vagrant-zones/qga/ifupdown_backend.rb', line 15

def detect?(qga)
  qga.exec('/usr/bin/test', args: ['-f', IFACES_PATH], timeout: 10)[:exitcode].zero? &&
    qga.exec('/usr/bin/test', args: ['-x', '/sbin/ifup'], timeout: 10)[:exitcode].zero?
rescue StandardError
  false
end