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
似乎这可能是一个错误,或者我真的错过了一些东西。看起来非常基本,所以我想听听其他人如何解决这个问题。
谢谢!
答案 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-contrib
和modules-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 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调用时将使用的模块路径。