我发现的问题是我可以成功安装 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
我该如何解决?
最佳答案
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 apply 命令就可以正常工作了。
进一步的实验表明,如果您执行 Puppet 模块安装 没有 -i 参数和 root 权限的命令,它将把模块安装到 /etc/puppet/modules,但如果您没有 root 访问权限,它会安装它 进入 ~myusername/.puppet/modules/。所以如果我在我原来的前面放了一个 sudo 模块安装命令如下:
sudo puppet module install puppetlabs/mysql
那就没有问题了。您不必指定 -i 参数!
整个问题的出现是因为我选择创建一个用户帐户来保存所有 puppet 的东西,而不是在 root 帐户中工作。如果我曾在 root 帐户,Puppet 会(大概)将模块安装到 /etc/puppet/modules 就没有问题了。只是因为 我创建了一个用户帐户,然后调用了 puppet 模块安装命令 没有 sudo,模块最终在 ~myusername/.puppet 中。做 puppet 新手,在 ~myusername/.puppet 中安装模块似乎不错 主意。这似乎是安装模块的明智之选, 特别是如果已经创建了一个用户帐户来管理 Puppet。
所有这些都不应该阻止您创建一个用户帐户来保存您所有的 puppet 配置文件。但是如果你这样做,记得把 sudo 放在 安装模块时在安装命令前面。
代表 OP 发布。
关于linux - Puppet 找不到我刚安装的模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21580011/