Puppet找不到我刚刚安装的模块

时间:2014-02-05 14:28:59

标签: 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)

但是当我尝试使用如下的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

我该如何解决?

3 个答案:

答案 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

可在此处找到更多信息......

https://puppetlabs.com/learn/autoloading

答案 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)来确保模块安装正确。