我发现的问题是我可以成功安装Puppet模块。例如:
[puppet@swarmcritic ~]$ puppet module install puppetlabs/mysql
Notice: Preparing to install into /home/puppet/.puppet/modules ...
Notice: Created target directory /home/puppet/.puppet/modules
Notice: Downloading from https://forge.puppetlabs.com ...
Notice: Installing -- do not interrupt ...
/home/puppet/.puppet/modules
└─┬ puppetlabs-mysql (v2.1.0)
└── puppetlabs-stdlib (v4.1.0)
但是当我尝试使用如下的nodes.pp文件调用模块时:
node 'example.com' {
include '::mysql::server'
}
然后我收到这样的错误:
[puppet@example mysql]$ sudo puppet apply ~puppet/puppet/manifests/site.pp
Error: Could not find class ::mysql::server for example.com on node example.com
Error: Could not find class ::mysql::server for example.com on node example.com
我该如何解决?
答案 0 :(得分:5)
Puppet正在.puppet目录中安装该模块 我的主目录的树,但是当它看到时,它没有看到那里 对于模块!相反,它只是在/ etc / puppet / modules中查找。它似乎 默认情况下,它只在那里看。如果你想让它查看~myusername / .puppet, 你必须在/etc/puppet/puppet.conf中配置一个路径变量。
为了解决这个问题,我没有试图弄清楚如何修改Puppet路径。 相反,我使用了将模块显式安装到/ etc / puppet / modules中 以下命令:
sudo puppet module install -i /etc/puppet/modules puppetlabs/mysql
一旦完成,木偶申请命令工作正常。
进一步的实验表明,如果你执行Puppet模块安装 没有-i参数和root访问权限的命令,它会将模块安装到 / etc / puppet / modules,但是如果你没有root访问权限,它会安装它 进入~myusername / .puppet / modules /。所以,如果我在我原来的前面放了一个sudo 模块安装命令如下:
sudo puppet module install puppetlabs/mysql
那时就没有任何问题了。您不必指定-i参数!
出现了整个问题,因为我选择创建一个用户帐户来容纳所有人 木偶的东西,而不是在root帐户中工作。如果我曾经工作过 根帐户,Puppet(可能)已将模块安装到 / etc / puppet / modules并没有问题。这只是因为 我创建了一个用户帐户,然后调用了puppet module install命令 没有sudo,模块最终在~myusername / .puppet中。作为一个傀儡 新手,在~myusername / .puppet中安装了模块似乎并不坏 理念。它似乎是安装模块的合理位置, 特别是如果有人创建了一个用户帐户来管理Puppet。
所有这一切都不应该让你忘记创建一个用户帐户来容纳你的所有人 木偶配置文件。但如果你这样做,记得把sudo放在 安装模块时安装命令的前面。
代表OP发表。
答案 1 :(得分:2)
值得注意的是,模块路径可以如下找到:
# puppet config print modulepath
/etc/puppetlabs/puppet/modules:/opt/puppet/share/puppet/modules
可在此处找到更多信息......
答案 2 :(得分:2)
这取决于您使用的木偶版本:
在旧版本(3.6或更早版本)中,您可以将modulepath
变量添加到puppet conf(在/etc/puppet/puppet.conf中)
在主人上应用更改运行puppet module list
以确认puppet识别出更改。
在较新版本中,您可以创建一个木偶环境(在/ etc / puppet下为puppet 4.0或/ etc / puppetlabs / code for puppet 4.0及更高版本)并在environment.conf中包含模块路径。
您可以使用相同的命令(puppet module list
)来确保模块安装正确。