Puppet 6+中如何在rspec-puppet里覆盖hiera_data?
在rspec-puppet中修改Hiera测试数据
你写了一个依赖自动Hiera查找的Puppet类:
class foo::file { file { $foo::file_name: owner => $foo::owner, group => $foo::group, ensure => $foo::ensure, } }
模块里的common.yaml默认配置如下:
foo::file_name: 'bar.txt' foo::owner: 'user' foo::group: 'user_group' foo::ensure: 'present'
之前常用的hiera-puppet-helper已经废弃,它原来的写法是:
let(:hiera_data) { { 'foo::file_name' => 'nope.txt' } }
下面是几种在rspec-puppet里修改Hiera测试数据的正确方式:
1. 直接使用let(:hiera_data)(rspec-puppet 3.x及以上支持)
虽然hiera-puppet-helper被废弃,但rspec-puppet本身已经内置了这个功能,直接沿用类似写法即可,你设置的键值会覆盖默认的Hiera数据:
require 'spec_helper' describe 'foo::file' do let(:hiera_data) do { 'foo::file_name' => 'nope.txt', # 其他需要覆盖的参数按需添加,未指定的会沿用common.yaml里的默认值 'foo::owner' => 'test_user' } end it { is_expected.to contain_file('nope.txt').with_owner('test_user') } end
2. 指定自定义Hiera配置文件
如果需要更复杂的Hiera层级结构,可以在spec目录下搭建一套自定义配置:
首先创建spec/fixtures/hiera.yaml配置文件:
--- version: 5 defaults: datadir: spec/fixtures/hiera_data data_hash: yaml_data hierarchy: - name: '测试环境' path: 'test.yaml'
然后在spec/fixtures/hiera_data/test.yaml中编写测试用的Hiera数据:
foo::file_name: 'custom.txt' foo::owner: 'custom_user'
最后在测试文件里指定这个自定义配置:
require 'spec_helper' describe 'foo::file' do let(:hiera_config) { 'spec/fixtures/hiera.yaml' } it { is_expected.to contain_file('custom.txt') } end
3. 直接给类传递参数(绕开Hiera)
如果只是临时修改少量参数,也可以直接在测试中给类传参,不用改动Hiera数据:
require 'spec_helper' describe 'foo::file' do let(:params) do { file_name: 'direct.txt', owner: 'direct_user' } end it { is_expected.to contain_file('direct.txt').with_owner('direct_user') } end
内容的提问来源于stack exchange,提问作者Cory Ringdahl
相关产品推荐
相关产品推荐

