provisioners/puppet: manifests path can be in the VM [GH-1805]

This commit is contained in:
Mitchell Hashimoto 2013-11-25 22:39:20 -08:00
parent d7b74ca8b9
commit 25a8491465
4 changed files with 53 additions and 21 deletions

View File

@ -48,6 +48,7 @@ IMPROVEMENTS:
- provisioners/ansible: allow files for extra vars [GH-2366]
- provisioners/puppet: client cert and private key can now be specified
for the puppet server provisioner. [GH-902]
- provisioners/puppet: the manifests path can be in the VM. [GH-1805]
- provisioners/shell: Added `keep_color` option to not automatically color
output based on stdout/stderr. [GH-2505]
- provisioners/shell: Arguments can now be an array of args. [GH-1949]

View File

@ -29,21 +29,24 @@ module VagrantPlugins
def finalize!
super
if @manifests_path == UNSET_VALUE
@manifests_path = [:host, "manifests"]
end
if @manifests_path && !@manifests_path.is_a?(Array)
@manifests_path = [:host, @manifests_path]
end
@manifests_path[0] = @manifests_path[0].to_sym
@hiera_config_path = nil if @hiera_config_path == UNSET_VALUE
@manifest_file = "default.pp" if @manifest_file == UNSET_VALUE
@manifests_path = "manifests" if @manifests_path == UNSET_VALUE
@module_path = nil if @module_path == UNSET_VALUE
@temp_dir = "/tmp/vagrant-puppet" if @temp_dir == UNSET_VALUE
@working_directory = nil if @working_directory == UNSET_VALUE
@nfs = false if @nfs == UNSET_VALUE
end
# Returns the manifests path expanded relative to the root path of the
# environment.
def expanded_manifests_path(root_path)
Pathname.new(manifests_path).expand_path(root_path)
end
# Returns the module paths as an array of paths expanded relative to the
# root path.
def expanded_module_paths(root_path)
@ -62,18 +65,20 @@ module VagrantPlugins
errors = _detected_errors
# Calculate the manifests and module paths based on env
this_expanded_manifests_path = expanded_manifests_path(machine.env.root_path)
this_expanded_module_paths = expanded_module_paths(machine.env.root_path)
# Manifests path/file validation
if !this_expanded_manifests_path.directory?
errors << I18n.t("vagrant.provisioners.puppet.manifests_path_missing",
:path => this_expanded_manifests_path)
else
expanded_manifest_file = this_expanded_manifests_path.join(manifest_file)
if !expanded_manifest_file.file?
errors << I18n.t("vagrant.provisioners.puppet.manifest_missing",
:manifest => expanded_manifest_file.to_s)
if manifests_path[0].to_sym == :host
expanded_path = File.expand_path(manifests_path[1], machine.env.root_path)
if expanded_path.directory?
errors << I18n.t("vagrant.provisioners.puppet.manifests_path_missing",
:path => this_expanded_manifests_path)
else
expanded_manifest_file = expanded_path.join(manifest_file)
if !expanded_manifest_file.file?
errors << I18n.t("vagrant.provisioners.puppet.manifest_missing",
:manifest => expanded_manifest_file.to_s)
end
end
end

View File

@ -17,7 +17,6 @@ module VagrantPlugins
def configure(root_config)
# Calculate the paths we're going to use based on the environment
root_path = @machine.env.root_path
@expanded_manifests_path = @config.expanded_manifests_path(root_path)
@expanded_module_paths = @config.expanded_module_paths(root_path)
@manifest_file = File.join(manifests_guest_path, @config.manifest_file)
@ -32,8 +31,11 @@ module VagrantPlugins
folder_opts[:owner] = "root" if !folder_opts[:nfs]
# Share the manifests directory with the guest
root_config.vm.synced_folder(
@expanded_manifests_path, manifests_guest_path, folder_opts)
if @config.manifests_path[0].to_sym == :host
root_config.vm.synced_folder(
File.expand_path(@config.manifests_path[1], root_path),
manifests_guest_path, folder_opts)
end
# Share the module paths
@module_paths.each do |from, to|
@ -62,7 +64,8 @@ module VagrantPlugins
# Upload Hiera configuration if we have it
@hiera_config_path = nil
if config.hiera_config_path
local_hiera_path = File.expand_path(config.hiera_config_path, @machine.env.root_path)
local_hiera_path = File.expand_path(config.hiera_config_path,
@machine.env.root_path)
@hiera_config_path = File.join(config.temp_dir, "hiera.yaml")
@machine.communicate.upload(local_hiera_path, @hiera_config_path)
end
@ -71,7 +74,13 @@ module VagrantPlugins
end
def manifests_guest_path
File.join(config.temp_dir, "manifests")
if config.manifests_path[0] == :host
# The path is on the host, so point to where it is shared
File.join(config.temp_dir, "manifests")
else
# The path is on the VM, so just point directly to it
config.manifests_path[1]
end
end
def verify_binary(binary)

View File

@ -64,6 +64,23 @@ end
The path can be relative or absolute. If it is relative, it is relative
to the project root.
You can also specify a manifests path that is on the remote machine
already, perhaps put in place by a shell provisioner. In this case, Vagrant
won't attempt to upload the manifests directory. To specify a remote
manifests path, use the following syntax:
```ruby
Vagrant.configure("2") do |config|
config.vm.provision "puppet" do |puppet|
puppet.manifests_path = ["vm", "/path/to/manifests"]
puppet.manifest_file = "default.pp"
end
end
```
It is a somewhat odd syntax, but the tuple (two-element array) says
that the path is located in the "vm" at "/path/to/manifests".
## Modules
Vagrant also supports provisioning with [Puppet modules](http://docs.puppetlabs.com/guides/modules.html).