1

在独立模式下(第一次)运行 Puppet以安装 mongodb 并使用puppet apply -v node.pp我收到此错误:

Error: undefined method `downcase' for :undef:Symbol at /etc/puppet/modules/mongodb/manifests/install.pp:12 on node ec2.internal
Wrapped exception:
undefined method `downcase' for :undef:Symbol
Error: undefined method `downcase' for :undef:Symbol at /etc/puppet/modules/mongodb/manifests/install.pp:12 on node ec2.internal

我做了一个快速的谷歌搜索,没有什么对我来说很明显。谁能解释我错过了什么?我认为这与在独立模式下运行 Puppet 没有任何关系。顺便说一句,在 Debian wheezy 上运行 Puppet v3.2.1 和 Ruby v1.8.7。

这是我的mongodb模块的简化版本, apt是从 git 下载的标准 puppet-modue。

参数.pp:

# == Class: mongodb::params ==
#
class mongodb::params {

    $server_pkg_name = $::operatingsystem ? { 
        Debian  => 'mongodb-10gen',
        Redhat  => 'mongo-10gen-server',
    }   
}

回购.pp:

# == mongodb::repos ==
#
class mongodb::repos {

    if $::operatingsystem == 'Debian' {
        class { 'apt': }
        apt::source { '10gen':
            location    => 'http://downloads-distro.mongodb.org/repo/debian-sysvinit',
            release     => 'dist',
            repos       => '10gen',
            key         => '7F0CEB10',
            key_server  => 'keyserver.ubuntu.com',
            include_src => false;
        }   
    }

    #...... Other operatingsystem .......
}

安装.pp:

# == Class: mongodb::install
#
class mongodb::install {

    class { 'mongodb::params': }
    anchor { 'mongodb::install::begin': }
    anchor { 'mongodb::install::end': }

    package { 'mongodb-server':
        name    => "$::mongodb::params::server_pkg_name",
        ensure  => installed,
        require => [ Anchor['mongodb::install::begin'], Class[$::mongodb::repos] ],
        before  => Anchor['mongodb::install::end']
    }   
}

初始化.pp:

# == Class: mongodb ==
#
class mongodb {
    include mongodb::repos
    include mongodb::install
}

节点.pp:

node default {
    class { 'mongodb': }
}

有谁知道我错过了什么?如果您可能需要任何其他信息,请告诉我。提前致谢。干杯!!

4

1 回答 1

1

install.php 文件中没有第 19 行,但该错误基本上意味着您正在尝试调用downcase符号而不是字符串的东西。您需要在安装程序本身或配置文件中将它获取的任何参数转换为字符串而不是符号。

编辑:我不熟悉 gem 本身,但我也打赌该:undef符号被扔在那里某处以替换您未在配置文件中定义的东西。如果最终出现这种情况,请考虑向 gem 的维护者报告错误,以便它向最终用户返回一些理智的东西。

于 2013-06-15T21:31:33.963 回答