流浪木偶模块路径

时间:2013-03-19 18:23:32

标签: ubuntu-12.04 puppet vagrant

Puppet 2.7.19
Vagrant version 1.0.6
VM OS Ubuntu 12.04

我正在尝试从vagrant设置puppet模块路径。这看起来应该很简单。

在我的Vagrant文​​件中,我有:

Vagrant::Config.run do |config|
  config.vm.provision :puppet, :module_path => "my_modules"
  config.vm.provision :puppet, :options => ["--modulepath", "my_modules"]
end

当我更改模块路径的值时,似乎没有效果(在vagrant reload之后)

以下是来自vagrant up

的宣传片
[default] -- v-root: /vagrant
[default] -- manifests: /tmp/vagrant-puppet/manifests
[default] -- v-pp-m0: /tmp/vagrant-puppet/modules-0

注意/tmp/vagrant-puppet/modules-0?这是关于什么的?

然后从流浪者里面:

vagrant@precise64:~$ puppet apply --configprint modulepath
/home/vagrant/.puppet/modules:/usr/share/puppet/modules

所以当我这样做时:puppet module install puppetlabs/mysql

我收到此错误:

Preparing to install into /home/vagrant/.puppet/modules ...
Error: Could not install module 'puppetlabs-mysql' (latest)
  Directory /home/vagrant/.puppet/modules does not exist

所以我必须:

vagrant@precise64:~/.puppet$ mkdir /home/vagrant/.puppet/modules
vagrant@precise64:~/.puppet$ puppet module install puppetlabs/mysql
Preparing to install into /home/vagrant/.puppet/modules ...
Downloading from http://forge.puppetlabs.com ...
Installing -- do not interrupt ...
/home/vagrant/.puppet/modules
└─┬ puppetlabs-mysql (v0.6.1)
  └── puppetlabs-stdlib (v3.2.0)

然后我必须将模块移动到流浪者可以看到它们的地方......

mv /home/vagrant/.puppet/modules/mysql /tmp/vagrant-puppet/modules-0

似乎这可能是一个错误,或者我真的错过了一些东西。看起来非常基本,所以我想听听其他人如何解决这个问题。

谢谢!

3 个答案:

答案 0 :(得分:12)

你有效地指定了module_path两次:

Vagrant::Config.run do |config|
  config.vm.provision :puppet, :module_path => "my_modules"
  config.vm.provision :puppet, :options => ["--modulepath", "my_modules"]
end

我不确定哪一个会覆盖另一个,但你不应该以两种方式指定模块路径。

我认为最好使用vagrant对module_path的支持,优先于:options数组,就像在第一行中一样。我更喜欢以下风格:

Vagrant::Config.run do |config|
  ...
  config.vm.provision :puppet do |puppet|
    puppet.manifests_path = "manifests"
    puppet.module_path = ["modules-contrib","modules-custom"]
    puppet.manifest_file  = "site.pp"
  end # puppet
end # config

你问过/tmp/vagrant-puppet/modules-0。这是modulepath数组中的第一项,其中0是数组索引。即在上面的示例中,我的vagrant项目中的modules-contribmodules-custom目录分别挂载在/tmp/vagrant-puppet/modules-0/tmp/vagrant-puppet/modules-1

你不应该在流浪盒中安装木偶模块。而是将它们安装在主机环境中的vagrant项目的modules目录中。

我建议不要逐个安装它们,而是建议使用图书管理员木偶(gem install librarian-puppet),并在你的流浪项目中放置Puppetfile,列出你想要的所有第三方模块,以及告诉librarian-puppet将它们放在与用于自定义木偶模块的目录不同的模块目录中。我将modules-contrib目录用于第三方模块,并将其自己放在modules-custom

告诉图书管理员把模块放在哪里:

librarian-puppet config --local path modules-contrib

有关Puppetfile的布局,请参阅https://github.com/rodjek/librarian-puppet。这很简单,让你可以随意混合puppet-forge和git源。

您应该将modules-contrib文件夹添加到.gitignore文件中(假设您使用git),并依赖Puppetfile文件的版本控制。

答案 1 :(得分:6)

Vagrant Documentation读取:

  

Vagrant Puppet配置器允许您安装的本地文件夹   将模块放到VM上,并将Puppet配置为知道它们,   自动。

本地文件夹是指主机上的文件夹。

然后:

  

模块路径相对于包含该文件夹的文件夹进行了扩展   Vagrantfile。

包含VagrantFile的文件夹位于主机上。

因此,您尝试使用一个选项来设置主机上文件夹的路径,以控制VM上文件夹的路径。

您必须将模块放在主机上,而不是放在VM上。这是一个例子:

主机

〜/ Dev / mybox / - > “mybox”Vagrant VM的基本路径

〜/ Dev / mybox / VagrantFile - >控制“mybox”的Vagrant文​​件

〜/ Dev / mybox / puppet / modules - > “mybox”上使用的木偶模块的路径

〜/ dev / mybox / puppet / modules / apache - >要在“mybox”上应用的apache模块的路径

VagrantFile:

  # Enable puppet provisioning
  config.vm.provision :puppet do |puppet|
     puppet.module_path = "puppet/modules"
     puppet.manifests_path = "puppet"
     puppet.manifest_file  = "mybox.pp"
  end

VIRTUAL MACHINE

当我启动mybox时:

[default] Mounting shared folders...
[default] -- v-root: /vagrant
[default] -- manifests: /tmp/vagrant-puppet/manifests
[default] -- v-pp-m0: /tmp/vagrant-puppet/modules-0

然后

vagrant@mybox:~$ cd /tmp/vagrant-puppet/modules-0
vagrant@mybox:/tmp/vagrant-puppet/modules-0$ ls
apache

正如您所看到的,主机上的〜/ Dev / mybox / puppet / modules / apache目录已安装在Vagrant VM上的/ tmp / vagrant-puppet / modules-0上。

希望这有帮助。

答案 2 :(得分:0)

所以,如果你像我一样,一直盯着这个问题和答案,想知道你的情况有什么不同,这就是我一直缺少的:

关于配置的流浪文档,我已经拿起了这个片段:

config.vm.provision :puppet do |puppet|
  puppet.manifests_path = "my_manifests"
  puppet.manifest_file = "default.pp"
end

在尝试在访客中识别模块时,我选择了这一行(可能来自here):

config.vm.provision :puppet, :module_path => "my_modules"

不太了解红宝石或流浪汉,我把它放在第一个片段下,假设它会以某种方式添加到它。那没用。

的工作原理是:

config.vm.provision :puppet do |puppet|
  puppet.manifests_path = "my_manifests"
  puppet.manifest_file  = "default.pp"
  puppet.module_path = "my_modules"
end

有时简单的解决方案最难找到。

[编辑]

还有助于理解在来宾VM上执行“puppet apply --configprint modulepath”命令不会显示puppet在Vagrant调用时将使用的模块路径。