Vagrant 未检测到stdlib模块

Vagrant 未检测到stdlib模块,vagrant,puppet,Vagrant,Puppet,据报道,我有一个模块需要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) /vag

据报道,我有一个模块需要
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看到我安装的lib?

命令

报告未满足
elk
模块对
puppetlabs stdlib
的依赖性,而您显示要安装在
/etc/puppetlabs/code/environments/production/modules
中的模块。这些事实是一致的

傀儡模块列表的
--modulepath
参数似乎没有达到预期效果。如果您考虑到以下因素,这一点可能会更清楚:

主服务和傀儡应用命令加载其大部分 在一个或多个目录中找到的模块的内容。名单 Puppet查找模块的目录称为modulepath。 modulepath由当前节点的环境设置

modulepath是一个有序的目录列表,前面的 优先于后面的目录。使用系统路径 分隔符,用于分隔modulepath中的目录 列表在*nix系统上,使用冒号(:);在Windows上使用分号 (;)

>代码>模块> <代码>选项到您的代码>傀儡模块列表命令表示一个完整的模块,相应地,在您的命令中,它告诉傀儡只考虑“代码> /流浪/傀儡< /代码>中的模块。关于modulepath,stdlib依赖关系确实没有得到满足

此备选方案应显示满足的依赖关系:

sudo /opt/puppetlabs/bin/puppet module list --tree \
  --modulepath=/etc/puppetlabs/code/environments/production/modules:/vagrant/puppet -v

这两个结果在Puppet运行时的意义取决于用于目录构建的modulepath Puppet。如果您完全关闭了
--modulepath
选项,那么您将获得与Puppet当前配置和默认环境相关的结果,这可能与您的实际使用场景相关,也可能与您的实际使用场景无关。

您没有引用相同的modulepath

在第一个实例中,您按照--modulepath语句列出了
/vagrant/puppet
中的模块

安装时,未指定modulepath,因此根据std进行安装:
注意:准备安装到/etc/puppetlabs/code/environments/production/modules中


因此,您必须将stdlib安装指向相同的路径:
puppet模块--modulepath=/vagrant/puppet安装puppetlabs stdlib
,或者更新客户端的modulepath以运行默认路径,
/etc/puppetlabs/code/environments/production/modules

看起来您将stdlib安装到了不同的环境中,而且可能是一个与包含麋鹿的木偶完全不同的木偶装置。然而,很难有信心,因为你没有给出你正在运行的任何实际命令或再现问题所需的任何其他细节。@JohnBollinger我已经更新了帖子。我不认为环境有什么不同。请让我知道你为什么这么认为。我认为环境是不同的,因为麋鹿显示安装在
/vagrant/puppet
中,而stdlib显示安装在
/etc/puppetlabs/code/environments/production/modules
中。后者(默认情况下)位于“生产”环境的modulepath中,对于任何其他环境都不应位于modulepath中。它也是
木偶模块安装的默认目标。尚不清楚哪个环境,甚至哪个Puppet安装的modulepath中有
/vagrant/Puppet
。另外,整个未满足的依赖性是一个好迹象。@JohnBollinger
/vagrant/puppet
不是一个傀儡安装。它是puppet模块源代码所在的目录的名称,即存在
elk
模块。Puppet没有两个安装。不需要多个安装,就可以有多个环境。然而,在仔细检查实际发出的命令后,一个更简单的解释变得显而易见。我很快会写一份答复。
sudo /opt/puppetlabs/bin/puppet module list --tree \
  --modulepath=/etc/puppetlabs/code/environments/production/modules:/vagrant/puppet -v