我有一个模块,据说需要使用puppetlabs-stdlib
。
[vagrant@learn puppet]$ sudo /opt/puppetlabs/bin/puppet module list --tree --modulepath=/vagrant/puppet -v
Warning: Missing dependency 'puppetlabs-stdlib':
'elk' (v0.1.0) requires 'puppetlabs-stdlib' (>= 1.0.0)
/vagrant/puppet
└─┬ elk (v0.1.0)
└── UNMET DEPENDENCY puppetlabs-stdlib (>= 1.0.0)
我按如下所示安装了模块:
[vagrant@learn puppet]$ sudo /opt/puppetlabs/bin/puppet module install puppetlabs-stdlib
Notice: Preparing to install into /etc/puppetlabs/code/environments/production/modules ...
Notice: Downloading from https://forgeapi.puppet.com ...
Notice: Installing -- do not interrupt ...
/etc/puppetlabs/code/environments/production/modules
└── puppetlabs-stdlib (v6.1.0)
但是,缺少的依存关系仍然无法解决。如何让Puppet看到我安装的库?
答案 0 :(得分:1)
命令
sudo /opt/puppetlabs/bin/puppet module list --tree --modulepath=/vagrant/puppet -v
报告elk
模块对puppetlabs-stdlib
的依赖性未得到满足,而您显示该模块将安装在/etc/puppetlabs/code/environments/production/modules
中。这些事实是一致的。
--modulepath
的{{1}}参数没有达到您的期望。如果您考虑了Puppet's definition of the term,这可能会更清楚:
master服务和puppet apply命令将加载大多数 来自一个或多个目录中的模块的内容。的清单 Puppet在其中查找模块的目录称为 modulepath 。 modulepath由当前节点的环境设置。
modulepath是目录的有序列表,其中 目录优先于以后的目录。使用系统路径 分隔符,用于分隔模块路径中的目录 清单。在* nix系统上,使用冒号(:);在Windows上使用分号 (;)。
puppet module list
命令中的--modulepath
选项表示完整的模块路径,因此,在您的命令中,它告诉Puppet仅考虑puppet module list
中的模块。关于该模块路径,确实没有满足stdlib依赖项。
此替代方法应显示满足的依赖性:
/vagrant/puppet
在Puppet运行时,两种结果的重要性取决于Puppet用于目录构建的模块路径。如果您完全不使用sudo /opt/puppetlabs/bin/puppet module list --tree \
--modulepath=/etc/puppetlabs/code/environments/production/modules:/vagrant/puppet -v
选项,那么您将获得与Puppet的当前配置和默认环境相关的结果,这些结果可能与您的实际使用情况更为相关。
答案 1 :(得分:1)
您没有引用相同的模块路径。
首先,您是按照--modulepath语句列出/vagrant/puppet
中的模块。
在安装时,您没有指定模块路径,因此按照安装时的std进行:
Notice: Preparing to install into /etc/puppetlabs/code/environments/production/modules
因此,您必须将stdlib安装指向同一路径:puppet module --modulepath=/vagrant/puppet install puppetlabs-stdlib
,或更新客户端的模块路径以运行默认的/etc/puppetlabs/code/environments/production/modules