Module: DevDNSd::ApplicationMethods::Aliases

Extended by:
ActiveSupport::Concern
Included in:
DevDNSd::Application
Defined in:
lib/devdnsd/application.rb

Overview

Methods to handle interfaces aliases.

Instance Method Summary (collapse)

Instance Method Details

- (Array) compute_addresses(type = :all)

Computes the list of address to manage.

Parameters:

  • type (Symbol) (defaults to: :all)

    The type of addresses to consider. Valid values are :ipv4, :ipv6, otherwise all addresses are considered.

Returns:

  • (Array)

    The list of addresses to add or remove from the interface.



340
341
342
343
# File 'lib/devdnsd/application.rb', line 340

def compute_addresses(type = :all)
  config = self.config
  config.addresses.present? ? filter_addresses(config, type) : generate_addresses(config, type)
end

- (Boolean) is_ipv4?(address)

Checks if an address is a valid IPv4 address.

Parameters:

  • address (String)

    The address to check.

Returns:

  • (Boolean)

    true if the address is a valid IPv4 address, false otherwise.



349
350
351
352
353
354
# File 'lib/devdnsd/application.rb', line 349

def is_ipv4?(address)
  address = address.ensure_string

  mo = /\A(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\Z/.match(address)
  (mo && mo.captures.all? {|i| i.to_i < 256}) ? true : false
end

- (Boolean) is_ipv6?(address)

Checks if an address is a valid IPv6 address.

Parameters:

  • address (String)

    The address to check.

Returns:

  • (Boolean)

    true if the address is a valid IPv6 address, false otherwise.



360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
# File 'lib/devdnsd/application.rb', line 360

def is_ipv6?(address)
  address = address.ensure_string

  catch(:valid) do
    # IPv6 (normal)
    throw(:valid, true) if /\A[\dA-Fa-f]{1,4}(:[\dA-Fa-f]{1,4})*\Z/ =~ address
    throw(:valid, true) if /\A[\dA-Fa-f]{1,4}(:[\dA-Fa-f]{1,4})*::([\dA-Fa-f]{1,4}(:[\dA-Fa-f]{1,4})*)?\Z/ =~ address
    throw(:valid, true) if /\A::([\dA-Fa-f]{1,4}(:[\dA-Fa-f]{1,4})*)?\Z/ =~ address
    # IPv6 (IPv4 compat)
    throw(:valid, true) if /\A[\dA-Fa-f]{1,4}(:[\dA-Fa-f]{1,4})*:/ =~ address && is_ipv4?($')
    throw(:valid, true) if /\A[\dA-Fa-f]{1,4}(:[\dA-Fa-f]{1,4})*::([\dA-Fa-f]{1,4}(:[\dA-Fa-f]{1,4})*:)?/ =~ address && is_ipv4?($')
    throw(:valid, true) if /\A::([\dA-Fa-f]{1,4}(:[\dA-Fa-f]{1,4})*:)?/ =~ address && is_ipv4?($')

    false
  end
end

- (Boolean) manage_address(type, address, dry_run = false)

Adds or removes an alias from the interface.

Parameters:

  • type (Symbol)

    The operation to execute. Can be :add or :remove.

  • address (String)

    The address to manage.

  • dry_run (Boolean) (defaults to: false)

    If only show which modifications will be done.

Returns:

  • (Boolean)

    true if operation succeeded, false otherwise.



320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
# File 'lib/devdnsd/application.rb', line 320

def manage_address(type, address, dry_run = false)
  locale = i18n
  rv, command, prefix = setup_management(type, address)

  # Now execute
  if rv then
    if !dry_run then
      execute_manage(command, prefix, type, address, self.config)
    else
      log_management(:dry_run, prefix, type, locale.remove, locale.add, address, config)
    end
  end

  rv
end

- (Boolean) manage_aliases(operation, message, options)

Manages aliases.

Parameters:

  • operation (Symbol)

    The type of operation. Can be :add or :remove.

  • message (String)

    The message to show if no addresses are found.

  • options (Hash)

    The options provided by the user.

Returns:

  • (Boolean)

    true if operation succeeded, false otherwise.



299
300
301
302
303
304
305
306
307
308
309
310
311
312
# File 'lib/devdnsd/application.rb', line 299

def manage_aliases(operation, message, options)
  config = self.config
  options.each { |k, v| config.send("#{k}=", v) if config.respond_to?("#{k}=") }

  addresses = compute_addresses

  if addresses.present? then
    # Now, for every address, call the command
    addresses.all? {|address| manage_address(operation, address, options[:dry_run]) }
  else
    @logger.error(message)
    false
  end
end