【问题标题】:Rspec Puppet: Defined Type iterationRspec Puppet:定义类型迭代
【发布时间】:2015-12-11 20:29:45
【问题描述】:
  • 使用 Puppet 3
  • 使用 rspec-puppet 进行测试
  • 使用定义的类型迭代哈希数组
  • 出现错误,告诉我我的参数(默认为 $title 的值)无法按我的方式访问,因为它不是数组或哈希

我在 puppet 模块中使用旧式迭代,创建一个定义的类型来迭代哈希数组。我正在尝试在 rspec-puppet 中为此定义编写一个测试,尝试使用let():title 分配一个哈希值。然后应该将$title 设置为我的名为$daemon 的变量,但我的测试不断抛出错误,指出$daemon 不是哈希或数组。

这是我创建定义类型的方式:

define my_module::daemon_install ($daemon = $title) {

  package {"${daemon['package_name']}":
    ensure => "${daemon['package_version']}",
  }

  file {"${some_fact}/${daemon['binary']}.conf":
    ensure => file,
    content => "blah"
    notify => Service["${daemon['name']}"],
  }

  service {"${daemon['name']}":
    ensure => running,
    enable => true,
  }
}

这是我尝试设置标题的方式:

describe 'my_module::daemon_install' do

  context 'with foo' do

    let(:title) {
      {
        "name" => "foo",
        "package_name" => "bar",
        "package_version" => "1.0.1",
        "binary" => "food",
      }
    }

    # ...

  end
end

这是错误:

daemon is not a hash or array when accessing it with package_version

我实际上对使用定义的类型进行迭代有点陌生,并且在 rspec-puppet 上非常新,所以我不确定我是否在这里遗漏了一些明显的东西。

但为什么它只抱怨package_version 而不是package_name?更重要的是:为什么它不是哈希,当(我相信)我在规范文件中正确地将它设置为哈希时。

我应该提一下,使用此定义类型的类的另一个测试成功完成。因此,如果我猜的话,这似乎与我在直接测试定义时尝试设置标题的方式有关。

【问题讨论】:

    标签: puppet rspec-puppet


    【解决方案1】:

    Rspec 总是将title 转换为String

    define() 中使用$name 而不是$title,并将以下内容添加到测试中:

    let :title do
      { ... }
    end
    
    let :params do
      { :name => title }
    end
    

    请注意$name 应该等于$title

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-13
      • 1970-01-01
      相关资源
      最近更新 更多