class Vagrant::Plugin::V2::Manager

This class maintains a list of all the registered plugins as well as provides methods that allow querying all registered components of those plugins as a single unit.

Attributes

registered[R]

Public Class Methods

new() click to toggle source
# File lib/vagrant/plugin/v2/manager.rb, line 12
def initialize
  @logger = Log4r::Logger.new("vagrant::plugin::v2::manager")
  @registered = []
end

Public Instance Methods

action_hooks(hook_name) click to toggle source

This returns all the action hooks.

@return [Array]

# File lib/vagrant/plugin/v2/manager.rb, line 20
def action_hooks(hook_name)
  result = []

  @registered.each do |plugin|
    result += plugin.components.action_hooks[Plugin::ALL_ACTIONS]
    result += plugin.components.action_hooks[hook_name]
  end

  result
end
commands() click to toggle source

This returns all the registered commands.

@return [Registry<Symbol, Array<Proc, Hash>>]

# File lib/vagrant/plugin/v2/manager.rb, line 87
def commands
  Registry.new.tap do |result|
    @registered.each do |plugin|
      result.merge!(plugin.components.commands)
    end
  end
end
communicators() click to toggle source

This returns all the registered communicators.

@return [Hash]

# File lib/vagrant/plugin/v2/manager.rb, line 98
def communicators
  Registry.new.tap do |result|
    @registered.each do |plugin|
      result.merge!(plugin.communicator)
    end
  end
end
config() click to toggle source

This returns all the registered configuration classes.

@return [Hash]

# File lib/vagrant/plugin/v2/manager.rb, line 109
def config
  Registry.new.tap do |result|
    @registered.each do |plugin|
      result.merge!(plugin.components.configs[:top])
    end
  end
end
find_action_hooks(key) click to toggle source

Find all hooks that are applicable for the given key. This lookup does not include hooks which are defined for ALL_ACTIONS. Key lookups will match on either string or symbol values. The provided keys is broken down into multiple parts for lookups, which allows defining hooks with an entire namespaced name, or a short suffx. For example:

Assume we are given an action class
  key = Vagrant::Action::Builtin::SyncedFolders

The list of keys that will be checked for hooks:
  ["Vagrant::Action::Builtin::SyncedFolders", "vagrant_action_builtin_synced_folders",
   "Action::Builtin::SyncedFolders", "action_builtin_synced_folders",
   "Builtin::SyncedFolders", "builtin_synced_folders",
   "SyncedFolders", "synced_folders"]

@param key [Class, String] key Key for hook lookups @return [Array<Proc>]

# File lib/vagrant/plugin/v2/manager.rb, line 49
def find_action_hooks(key)
  result = []

  generate_hook_keys(key).each do |k|
    @registered.each do |plugin|
      result += plugin.components.action_hooks[k]
      result += plugin.components.action_hooks[k.to_sym]
    end
  end

  result
end
generate_hook_keys(key) click to toggle source

Generate all valid lookup keys for given key

@param [Class, String] key Base key for generation @return [Array<String>] all valid keys

# File lib/vagrant/plugin/v2/manager.rb, line 66
def generate_hook_keys(key)
  if key.is_a?(Class)
    key = key.name.to_s
  else
    key = key.to_s
  end
  parts = key.split("::")
  [].tap do |keys|
    until parts.empty?
      x = parts.join("::")
      keys << x
      y = x.gsub(/([a-z])([A-Z])/, '\1_\2').gsub('::', '_').downcase
      keys << y if x != y
      parts.shift
    end
  end
end
guest_capabilities() click to toggle source

This returns all the registered guest capabilities.

@return [Hash]

# File lib/vagrant/plugin/v2/manager.rb, line 131
def guest_capabilities
  results = Hash.new { |h, k| h[k] = Registry.new }

  @registered.each do |plugin|
    plugin.components.guest_capabilities.each do |guest, caps|
      results[guest].merge!(caps)
    end
  end

  results
end
guests() click to toggle source

This returns all the registered guests.

@return [Hash]

# File lib/vagrant/plugin/v2/manager.rb, line 120
def guests
  Registry.new.tap do |result|
    @registered.each do |plugin|
      result.merge!(plugin.components.guests)
    end
  end
end
host_capabilities() click to toggle source

This returns all the registered host capabilities.

@return [Hash]

# File lib/vagrant/plugin/v2/manager.rb, line 157
def host_capabilities
  results = Hash.new { |h, k| h[k] = Registry.new }

  @registered.each do |plugin|
    plugin.components.host_capabilities.each do |host, caps|
      results[host].merge!(caps)
    end
  end

  results
end
hosts() click to toggle source

This returns all the registered guests.

@return [Hash]

# File lib/vagrant/plugin/v2/manager.rb, line 146
def hosts
  Registry.new.tap do |result|
    @registered.each do |plugin|
      result.merge!(plugin.components.hosts)
    end
  end
end
provider_capabilities() click to toggle source

This returns all the registered provider capabilities.

@return [Hash]

# File lib/vagrant/plugin/v2/manager.rb, line 183
def provider_capabilities
  results = Hash.new { |h, k| h[k] = Registry.new }

  @registered.each do |plugin|
    plugin.components.provider_capabilities.each do |provider, caps|
      results[provider].merge!(caps)
    end
  end

  results
end
provider_configs() click to toggle source

This returns all the config classes for the various providers.

@return [Hash]

# File lib/vagrant/plugin/v2/manager.rb, line 198
def provider_configs
  Registry.new.tap do |result|
    @registered.each do |plugin|
      result.merge!(plugin.components.configs[:provider])
    end
  end
end
providers() click to toggle source

This returns all registered providers.

@return [Hash]

# File lib/vagrant/plugin/v2/manager.rb, line 172
def providers
  Registry.new.tap do |result|
    @registered.each do |plugin|
      result.merge!(plugin.components.providers)
    end
  end
end
provisioner_configs() click to toggle source

This returns all the config classes for the various provisioners.

@return [Registry]

# File lib/vagrant/plugin/v2/manager.rb, line 209
def provisioner_configs
  Registry.new.tap do |result|
    @registered.each do |plugin|
      result.merge!(plugin.components.configs[:provisioner])
    end
  end
end
provisioners() click to toggle source

This returns all registered provisioners.

@return [Hash]

# File lib/vagrant/plugin/v2/manager.rb, line 220
def provisioners
  Registry.new.tap do |result|
    @registered.each do |plugin|
      result.merge!(plugin.provisioner)
    end
  end
end
push_configs() click to toggle source

This returns all the config classes for the various pushes.

@return [Registry]

# File lib/vagrant/plugin/v2/manager.rb, line 242
def push_configs
  Registry.new.tap do |result|
    @registered.each do |plugin|
      result.merge!(plugin.components.configs[:push])
    end
  end
end
pushes() click to toggle source

This returns all registered pushes.

@return [Registry]

# File lib/vagrant/plugin/v2/manager.rb, line 231
def pushes
  Registry.new.tap do |result|
    @registered.each do |plugin|
      result.merge!(plugin.components.pushes)
    end
  end
end
register(plugin) click to toggle source

This registers a plugin. This should NEVER be called by the public and should only be called from within Vagrant. Vagrant will automatically register V2 plugins when a name is set on the plugin.

# File lib/vagrant/plugin/v2/manager.rb, line 279
def register(plugin)
  if !@registered.include?(plugin)
    @logger.info("Registered plugin: #{plugin.name}")
    @registered << plugin
  end
end
reset!() click to toggle source

This clears out all the registered plugins. This is only used by unit tests and should not be called directly.

# File lib/vagrant/plugin/v2/manager.rb, line 288
def reset!
  @registered.clear
end
synced_folder_capabilities() click to toggle source

This returns all the registered synced folder capabilities.

@return [Hash]

# File lib/vagrant/plugin/v2/manager.rb, line 264
def synced_folder_capabilities
  results = Hash.new { |h, k| h[k] = Registry.new }

  @registered.each do |plugin|
    plugin.components.synced_folder_capabilities.each do |synced_folder, caps|
      results[synced_folder].merge!(caps)
    end
  end

  results
end
synced_folders() click to toggle source

This returns all synced folder implementations.

@return [Registry]

# File lib/vagrant/plugin/v2/manager.rb, line 253
def synced_folders
  Registry.new.tap do |result|
    @registered.each do |plugin|
      result.merge!(plugin.components.synced_folders)
    end
  end
end
unregister(plugin) click to toggle source

This unregisters a plugin so that its components will no longer be used. Note that this should only be used for testing purposes.

# File lib/vagrant/plugin/v2/manager.rb, line 294
def unregister(plugin)
  if @registered.include?(plugin)
    @logger.info("Unregistered: #{plugin.name}")
    @registered.delete(plugin)
  end
end