use*_*494 3 linux module puppet
我发现的问题是我可以成功安装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)
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试使用nodes.pp文件调用模块时,如下所示:
node 'example.com' {
include '::mysql::server'
}
Run Code Online (Sandbox Code Playgroud)
然后我得到这样的错误:
[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
Run Code Online (Sandbox Code Playgroud)
我该如何解决?
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
Run Code Online (Sandbox Code Playgroud)
完成此操作后,puppet apply命令将正常运行。
进一步的实验表明,如果执行不带-i参数且没有root用户访问权限的Puppet module install命令,它将把模块安装到/ etc / puppet / modules中,但是如果您没有root用户访问权限,它将安装到〜中。 myusername / .puppet / modules /。因此,如果我将sudo放在这样的原始模块安装命令之前:
sudo puppet module install puppetlabs/mysql
Run Code Online (Sandbox Code Playgroud)
这样就不会有任何问题。您不必指定-i参数!
出现整个问题是因为我选择创建一个用户帐户来容纳所有人偶,而不是在根帐户中工作。如果我使用root帐户工作,那么Puppet(大概)会将模块安装到/ etc / puppet / modules中,并且不会有问题。只是因为我创建了一个用户帐户,然后在没有sudo的情况下调用了puppet module install命令,所以这些模块最终以〜myusername / .puppet结尾。作为木偶新手,在〜myusername / .puppet中安装模块似乎不是一个坏主意。似乎是安装模块的明智之地,尤其是如果已经创建了一个用于管理Puppet的用户帐户时。
所有这一切都不会阻止您创建一个用户帐户来保存所有人偶配置文件。但是,如果这样做,请记住在安装模块时将sudo放在安装命令的前面。
代表OP发布。
| 归档时间: |
|
| 查看次数: |
4196 次 |
| 最近记录: |