Docs for the new vagrantfile settings

This commit is contained in:
Mitchell Hashimoto 2010-03-12 22:35:58 -08:00
parent c496460ad3
commit f7f590717a
1 changed files with 89 additions and 23 deletions

View File

@ -17,12 +17,14 @@ value overwrites the older value. Vagrant loads Vagrantfiles in the following or
1. Vagrantfile from the gem directory is loaded. This contains all the defaults
and should never be edited.
2. Vagrantfile from the box directory is loaded if a box is specified.
3. Vagrantfile from the project directory is loaded. This is typically the
1. Vagrantfile from the box directory is loaded if a box is specified.
1. Vagrantfile from the home directory (defaults to `~/.vagrant/`) is loaded if it exists.
1. Vagrantfile from the project directory is loaded. This is typically the
file that users will be touching.
Therefore, the Vagrantfile in the project directory overwrites any conflicting
configuration from a box which overwrites any conflicting configuration from
configuration from the home directory which overwrites any conflicting configuration
from a box which overwrites any conflicting configuration from
the default file.
## Vagrantfile Options
@ -81,14 +83,8 @@ and updating operating system configuration to accommodate changing mac addresse
force a predetermined mac address at vm creation. This setting is also only useful for those creating boxes
for distribution.
`config.vm.project_directory` tells vagrant where to mount the current project directory as a shared folder
withing the new virtual machine's file system.
{% highlight ruby %}
config.vm.project_directory = "/vagrant"
{% endhighlight %}
The above will use the vagrant folder under root as the mount point for the shared project directory.
`config.vm.disk_image_format` alerts Vagrant to the prefered virtual disk image file format for use when creating new virtual machines. VirtualBox
supports many disk formats such as .vdi (VirtualBox's own format), .vmdk (VMWare's disk image format), and .vhd (Microsoft's format).
`config.vm.forward_port` is a function that will add a set of ports to forward from the host machine to the virtual machine
created with vagrant. The default Vagrantfile that is packaged with Vagrant itself forwards port 2222 on the host machine to
@ -103,9 +99,37 @@ The first parameter of the `forward_port` method is simply a key used internally
forwarded port. It doesn't affect the actual ports forwarded at all. The above example could've
changed `web` to `fluffy bananas` and it still would've worked fine.
`config.vm.disk_image_format` alerts Vagrant to the prefered virtual disk image file format for use when creating new virtual machines. VirtualBox
supports many disk formats such as .vdi (VirtualBox's own format), .vmdk (VMWare's disk image format), and .vhd (Microsoft's format).
`config.vm.project_directory` tells Vagrant where to mount the current project directory as a shared folder
withing the new virtual machine's file system.
{% highlight ruby %}
config.vm.project_directory = "/vagrant"
{% endhighlight %}
The above will use the vagrant folder under root as the mount point for the shared project directory.
`config.vm.provisioner` tells Vagrant which provisioner to use to provision the system. By
default, this is set to `nil` which disables provisioning. It can also be set to a symbol
to use a built-in provisioner, or a class to use a custom provisioner. Example:
{% highlight ruby %}
# Use a built-in provisioner
config.vm.provisioner = :chef_solo
# Use a custom provisioner
config.vm.provisioner = MyCustomProvisioner
{% endhighlight %}
`config.vm.share_folder` is a function that will share a folder on the host machine with the
guest machine, allowing the guest machine to read and write to a folder on the host machine.
This function takes three parameters, in the same way as `config.vm.forward_port`, with the
first parameter being a key used internally to reference the folder, the second parameter being
the path on the guest machine, and the third parameter being the path to the folder to share
on the host machine.
{% highlight ruby %}
config.vm.share_folder("my-folder", "/folder", "/path/to/real/folder")
{% endhighlight %}
## config.package
@ -114,19 +138,45 @@ when [packaging](/docs/getting-started/packaging.html) a vm for distribution.
## config.chef
Vagrant leverages Chef's ability to [provision](/docs/provisioning.html) environments quickly and easily through this set of configuration options.
Vagrant can use [chef solo](/docs/provisioners/chef_solo.html) or [chef server](/docs/provisioners/chef_server.html)
to provision virtual environments. These are built-in provisioners which include their own configuration.
`config.chef.enabled` is set to false in the default Vagrantfile and must be explicity turned on in a packaged or project specific Vagrantfile.
### Chef Solo Configuration
The settings below only have an effect if chef solo is used as the provisioner. Chef solo
provisioning can be enabled by setting `provisioner` to `:chef_solo`.
`config.chef.cooksbooks_path` represents the cookbooks path on your host machine located relative to your project directory. Vagrant will expand whatever path you
place in this configuration option and use those cookbooks during provisioning
place in this configuration option and use those cookbooks during provisioning. This value can also be an array of paths, which will cause
chef to look through all specified directories for the necessary cookbooks.
`config.chef.provisioning_path` is the folder on the virtual machine where Vagrant will copy a small ruby script to include the cookbooks and a json chef configuration file. A chef solo command will be issued from within this directory to put chef to work.
### Chef Server Configuration
{% highlight bash %}
$ sudo chef solo -c solo.rb -j dna.json
The settings below only have an effect if chef server is used as the provisioner. Chef
server provisioning can be enabled by setting `provisioner` to `:chef_server`.
`config.chef.chef_server_url` represents the URL (and possibly port) to the chef server. An example is shown below:
{% highlight ruby %}
config.chef.chef_server_url = "http://mychefserver.com:4000"
{% endhighlight %}
`config.chef.validation_key_path` denotes the path to the validation key used to register a new node with
the chef server. This path is expanded relative to the project directory.
`config.chef.validation_client_name` is used to specify the name of the validation client. By default this is
set to `chef-validator` which is the default for chef server installations. Most of the time this won'
be changed.
`config.chef.client_key_path` is used to specify the path to store the client key once the
registration is complete. This defaults to `/etc/chef/client.pem`. This setting typically
doesn't need to be changed.
### Shared Chef Configuration
The configuration keys below are shared among chef solo and chef server, and affect
both.
`config.chef.json` is the place for any extra json that might be required for the chef solo command to properly provision your virtual machine. By default it includes
{% highlight ruby %}
@ -136,10 +186,7 @@ config.chef.json = {
}
{% endhighlight %}
If you don't want to create a vagrant_main recipe in your cookbooks directory you can override the recipes by placing `config.chef.json.merge({:recipes => 'you_want'})`
in either a packaged or project directory Vagrantfile.
This configuration value can also be used to set attributes for the cookbooks used in provisioning.
This configuration value can be used to set attributes for the cookbooks used in provisioning.
For example, to set the MySQL root password used in the default [opscode mysql cookbook](http://github.com/opscode/cookbooks/tree/master/mysql/), it can be
configured in the Vagrantfile like so:
@ -149,4 +196,23 @@ config.chef.json.merge!({
:server_root_password => "my_root_password"
}
})
{% endhighlight %}
`config.chef.provisioning_path` is the folder on the virtual machine where Vagrant will copy a small ruby script to include the cookbooks and a json chef configuration file. A chef solo command will be issued from within this directory to put chef to work. This setting usually doesn't have to be changed.
{% highlight bash %}
$ sudo chef solo -c solo.rb -j dna.json
{% endhighlight %}
`config.chef.run_list` is an array of recipes and/or roles to run on the node. This can be used to run
different recipes on the node. There are also helper methods `add_recipe` and `add_role` which can
be used as well.
{% highlight ruby %}
# Accessing the run list directly
config.chef.run_list = ["recipe[foo]", "recipe[bar]"]
# Using the helpers
config.chef.add_recipe("foo")
config.chef.add_role("bar")
{% endhighlight %}