Vagrant、Puppet和Node.js模块:在安装npm模块时抛出错误

6
我有以下清单:

我有以下清单:

include nodejs

package { 'serve':
  ensure => latest,
  provider => 'npm',
}

我使用Puppetlab的Node.js模块: http://forge.puppetlabs.com/puppetlabs/nodejs Vagrantfile:
Vagrant::Config.run do |config|
  config.vm.box = "precise64"
  config.vm.box_url = "http://files.vagrantup.com/precise64.box"

  config.vm.provision :puppet do |puppet|
    puppet.manifests_path = '~/work/environments/default/'
    puppet.manifest_file = 'site.pp'
    puppet.module_path = '~/work/environments/default/modules'
  end

end

当我运行vagrant up时,我得到以下错误:
[default] Running provisioner: Vagrant::Provisioners::Puppet...
[default] Running Puppet with /tmp/vagrant-puppet/manifests/site.pp...
stdin: is not a tty
err: /Stage[main]//Package[serve]/ensure: change from absent to latest failed: Could not update: Got nil value for ensure at /tmp/vagrant-puppet/manifests/site.pp:6
notice: /Stage[main]/Nodejs/Package[nodejs]/ensure: ensure changed 'purged' to 'present'
notice: /Stage[main]/Nodejs/Package[npm]/ensure: ensure changed 'purged' to 'present'
notice: Finished catalog run in 14.89 seconds

起初我以为可能是在npm安装之前尝试安装“serve”模块,因此我尝试了require => Package[npm],但结果相同。所以能否有人解释一下为什么它没有安装“serve”模块?
2个回答

11

我也遇到了这个问题-在我看来,puppetlabs-nodejs模块实际上并不接受ensure => latest,这与文档相反。当我改为ensure => present时,我的问题得到了解决,代码似乎也支持特定版本,例如ensure => 1.12.4


有一个拉取请求来修复这个问题,但目前它的Travis构建失败了,如果有人想帮忙纠正,请访问以下链接:https://github.com/puppetlabs/puppetlabs-nodejs/pull/78 - Scott Buchanan

8

看起来需要安装 - 提供程序需要 npm 命令,而您还没有安装。

尝试修改您的清单文件如下:

class { 'nodejs': } -> package { 'serve': ensure => present, provider => 'npm', }

另外一种可能的方式是:
include nodejs

package { 'serve':
  ensure => present,
  provider => 'npm',
  require => Package['npm'],
}

你怎么才能要求 Package['npm']?它似乎没有被定义(“找不到依赖项 Package[npm]”)。 - Karan
你可以使用 "require => Class['nodejs']," - Sergej Brazdeikis

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接