Class: Vagrant::Plugin::V1::Plugin
- Inherits:
-
Object
- Object
- Vagrant::Plugin::V1::Plugin
- Defined in:
- lib/vagrant/plugin/v1/plugin.rb
Overview
This is the superclass for all V1 plugins.
Constant Summary collapse
- ALL_ACTIONS =
Special marker that can be used for action hooks that matches all action sequences.
:__all_actions__
- LOGGER =
The logger for this class.
Log4r::Logger.new("vagrant::plugin::v1::plugin")
- ROOT_CLASS =
Set the root class up to be ourself, so that we can reference this from within methods which are probably in subclasses.
self
Class Method Summary collapse
-
.action_hook(name, &block) ⇒ Array
Registers a callback to be called when a specific action sequence is run.
-
.command(name = UNSET_VALUE, &block) ⇒ Object
Defines additional command line commands available by key.
-
.communicator(name = UNSET_VALUE, &block) ⇒ Object
Defines additional communicators to be available.
-
.config(name = UNSET_VALUE, upgrade_safe = false, &block) ⇒ Object
Defines additional configuration keys to be available in the Vagrantfile.
-
.data ⇒ Hash
Returns the internal data associated with this plugin.
-
.description(value = UNSET_VALUE) ⇒ String
Sets a human-friendly descrition of the plugin.
-
.guest(name = UNSET_VALUE, &block) ⇒ Object
Defines an additionally available guest implementation with the given key.
-
.host(name = UNSET_VALUE, &block) ⇒ Object
Defines an additionally available host implementation with the given key.
-
.manager ⇒ V1::Manager
This returns the manager for all V1 plugins.
-
.name(name = UNSET_VALUE) ⇒ String
Set the name of the plugin.
-
.provider(name = UNSET_VALUE, &block) ⇒ Object
Registers additional providers to be available.
-
.provisioner(name = UNSET_VALUE, &block) ⇒ Object
Registers additional provisioners to be available.
Class Method Details
.action_hook(name, &block) ⇒ Array
Registers a callback to be called when a specific action sequence is run. This allows plugin authors to hook into things like VM bootup, VM provisioning, etc.
61 62 63 64 65 66 67 68 69 70 71 |
# File 'lib/vagrant/plugin/v1/plugin.rb', line 61 def self.action_hook(name, &block) # Get the list of hooks for the given hook name data[:action_hooks] ||= {} hooks = data[:action_hooks][name.to_sym] ||= [] # Return the list if we don't have a block return hooks if !block_given? # Otherwise add the block to the list of hooks for this action. hooks << block end |
.command(name = UNSET_VALUE, &block) ⇒ Object
Defines additional command line commands available by key. The key becomes the subcommand, so if you register a command “foo” then “vagrant foo” becomes available.
78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 |
# File 'lib/vagrant/plugin/v1/plugin.rb', line 78 def self.command(name=UNSET_VALUE, &block) data[:command] ||= Registry.new if name != UNSET_VALUE # Validate the name of the command if name.to_s !~ /^[-a-z0-9]+$/i raise InvalidCommandName, "Commands can only contain letters, numbers, and hyphens" end # Register a new command class only if a name was given. data[:command].register(name.to_sym, &block) end # Return the registry data[:command] end |
.communicator(name = UNSET_VALUE, &block) ⇒ Object
Defines additional communicators to be available. Communicators should be returned by a block passed to this method. This is done to ensure that the class is lazy loaded, so if your class inherits from or uses any Vagrant internals specific to Vagrant 1.0, then the plugin can still be defined without breaking anything in future versions of Vagrant.
103 104 105 106 107 108 109 110 111 |
# File 'lib/vagrant/plugin/v1/plugin.rb', line 103 def self.communicator(name=UNSET_VALUE, &block) data[:communicator] ||= Registry.new # Register a new communicator class only if a name was given. data[:communicator].register(name.to_sym, &block) if name != UNSET_VALUE # Return the registry data[:communicator] end |
.config(name = UNSET_VALUE, upgrade_safe = false, &block) ⇒ Object
Defines additional configuration keys to be available in the Vagrantfile. The configuration class should be returned by a block passed to this method. This is done to ensure that the class is lazy loaded, so if your class inherits from any classes that are specific to Vagrant 1.0, then the plugin can still be defined without breaking anything in future versions of Vagrant.
127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 |
# File 'lib/vagrant/plugin/v1/plugin.rb', line 127 def self.config(name=UNSET_VALUE, upgrade_safe=false, &block) data[:config] ||= Registry.new # Register a new config class only if a name was given. if name != UNSET_VALUE data[:config].register(name.to_sym, &block) # If we were told this is an upgrade safe configuration class # then we add it to the set. if upgrade_safe data[:config_upgrade_safe] ||= Set.new data[:config_upgrade_safe].add(name.to_sym) end end # Return the registry data[:config] end |
.data ⇒ Hash
Returns the internal data associated with this plugin. This should NOT be called by the general public.
204 205 206 |
# File 'lib/vagrant/plugin/v1/plugin.rb', line 204 def self.data @data ||= {} end |
.description(value = UNSET_VALUE) ⇒ String
Sets a human-friendly descrition of the plugin.
51 52 53 |
# File 'lib/vagrant/plugin/v1/plugin.rb', line 51 def self.description(value=UNSET_VALUE) get_or_set(:description, value) end |
.guest(name = UNSET_VALUE, &block) ⇒ Object
Defines an additionally available guest implementation with the given key.
150 151 152 153 154 155 156 157 158 |
# File 'lib/vagrant/plugin/v1/plugin.rb', line 150 def self.guest(name=UNSET_VALUE, &block) data[:guests] ||= Registry.new # Register a new guest class only if a name was given data[:guests].register(name.to_sym, &block) if name != UNSET_VALUE # Return the registry data[:guests] end |
.host(name = UNSET_VALUE, &block) ⇒ Object
Defines an additionally available host implementation with the given key.
164 165 166 167 168 169 170 171 172 |
# File 'lib/vagrant/plugin/v1/plugin.rb', line 164 def self.host(name=UNSET_VALUE, &block) data[:hosts] ||= Registry.new # Register a new host class only if a name was given data[:hosts].register(name.to_sym, &block) if name != UNSET_VALUE # Return the registry data[:hosts] end |
.manager ⇒ V1::Manager
This returns the manager for all V1 plugins.
24 25 26 |
# File 'lib/vagrant/plugin/v1/plugin.rb', line 24 def self.manager @manager ||= Manager.new end |
.name(name = UNSET_VALUE) ⇒ String
Set the name of the plugin. The moment that this is called, the plugin will be registered and available. Before this is called, a plugin does not exist. The name must be unique among all installed plugins.
35 36 37 38 39 40 41 42 43 44 45 |
# File 'lib/vagrant/plugin/v1/plugin.rb', line 35 def self.name(name=UNSET_VALUE) # Get or set the value first, so we have a name for logging when # we register. result = get_or_set(:name, name) # The plugin should be registered if we're setting a real name on it Plugin.manager.register(self) if name != UNSET_VALUE # Return the result result end |
.provider(name = UNSET_VALUE, &block) ⇒ Object
Registers additional providers to be available.
177 178 179 180 181 182 183 184 185 |
# File 'lib/vagrant/plugin/v1/plugin.rb', line 177 def self.provider(name=UNSET_VALUE, &block) data[:providers] ||= Registry.new # Register a new provider class only if a name was given data[:providers].register(name.to_sym, &block) if name != UNSET_VALUE # Return the registry data[:providers] end |
.provisioner(name = UNSET_VALUE, &block) ⇒ Object
Registers additional provisioners to be available.
190 191 192 193 194 195 196 197 198 |
# File 'lib/vagrant/plugin/v1/plugin.rb', line 190 def self.provisioner(name=UNSET_VALUE, &block) data[:provisioners] ||= Registry.new # Register a new provisioner class only if a name was given data[:provisioners].register(name.to_sym, &block) if name != UNSET_VALUE # Return the registry data[:provisioners] end |