【问题标题】:Rspec could not find require package from puppet, can I skip require in define type?Rspec 无法从 puppet 中找到 require 包,我可以在定义类型中跳过 require 吗?
【发布时间】:2020-12-05 02:45:33
【问题描述】:

我正在尝试编写 rspec 测试木偶代码。在我的 puppet 中,我调用了一个不属于此类的定义类型。 (先前定义)人偶代码在分支测试中找到,但 rspec 无法通过“reuire”。 木偶:

$gluster_path = '/usr/libexec/zabbix-gluster'
  $gluster_discovery_script = "${gluster_path}/gstatus_discovery.py"
  $user_param_lines = [
    "UserParameter=gluster_volume_info[*],${gluster_discovery_script} \$1 \$2\n",
    "UserParameter=gluster_storage_info[*],${gluster_discovery_script} \$1\n",
    "UserParameter=gluster_volume_name.discovery,${gluster_discovery_script}\n",
  ]
...
zabbix::agent::userparam { 'glusterfs':
    content => join($user_param_lines, ''),
  }

Rspec:

...
 it {
    is_expected.to contain_zabbix__agent__userparam('cnvr-zabbix-gluster')
  }

定义类型:

define zabbix::agent::userparam($content = undef, $source = undef) {
...
  file { "/etc/zabbix/zabbix_agentd.d/userparameter_${title}.conf":
...
    require => [
        Package['zabbix-agent'],
        File['zabbix_agentd_dir'],
      ],
    content => $content,
    source  => $_source,
    notify  => Service['zabbix-agent'],
  }

zabbix-agent 已从其他模块安装。但是一直提示错误:

木偶::错误: 在节点上的参数“require”(文件:/home/edwu/puppet/modules/zabbix/manifests/agent/userparam.pp,行:17)中找不到资源“Package [zabbix-agent]”

有没有办法在 rspec 中跳过此要求检查?

【问题讨论】:

    标签: rspec puppet


    【解决方案1】:

    有没有办法在 rspec 中跳过这个要求检查?

    RSpec 测试报告的错误是目录编译错误。它绝不是 RSpec 特有的。事实上,它指出了zabbix::agent::userparam 中的一个真正弱点,以及由此导致的你的测试类中可能存在的缺陷。这正是编写 RSpec 测试的原因之一!

    问题是zabbix::agent::userparam 不是独立存在的。它需要声明Package['zabbix-agent'],但它既没有声明它本身,也没有声明一个这样做的类。你的测试类继承了这个弱点,尽管你离问题的中心越远,你就越倾向于称它为错误,而不是简单的弱点。您的类也可以声明所需的其他类,它可能应该这样做。

    您不能让目录构建器让对不存在资源的需求不加注释地通过,您也不应该这样做,因为这是您希望测试要做的事情之一揭示给你。但是如果你想让你的类中的这个弱点持续存在,那么你可以使用an RSpec pre-condition让RSpec为你声明合适的类,这样需求才真正得到满足。

    【讨论】:

    • 感谢@John 的详细解释。我在规范顶部添加了 let(:pre_condition) 以涵盖可能需要的任何可能的类,包括“include zabbix::agent”、“include other::classes”、...。正如你所说,这些是弱点zabbix::agent::userparam 的。感谢您的解释。
    猜你喜欢
    • 2020-02-11
    • 2017-04-15
    • 2014-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多