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 15
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 23
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 90
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 101
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 112
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 52
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 69
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 134
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 123
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 160
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 149
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 186
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 201
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 175
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 212
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 223
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 245
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 234
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 282
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 291
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 267
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 256
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 297
def unregister(plugin)
  if @registered.include?(plugin)
    @logger.info("Unregistered: #{plugin.name}")
    @registered.delete(plugin)
  end
end