【发布时间】:2020-06-25 17:11:02
【问题描述】:
我仍在学习 Puppet 和 rspec 以及所有这些,但是...
我们目前有一个 CI 运行程序,它使用在 Linux 上运行的 Docker 容器测试我们的 Puppet 模块代码。好吧,我们现在正在研究使用 Puppet 的 Windows 特定功能,但我们的测试失败了。所以我们想知道如果运行测试的平台是 Linux,是否有任何方法可以忽略测试?
例如,如果我们需要针对管理本地组 (https://puppet.com/docs/pe/2018.1/managing_windows_configurations.html#manage_local_groups) 的代码运行单元测试,有没有办法让我们在 Windows 开发箱本地运行它时,它可以工作,但是当它在我们的(基于 Linux 的)CI 运行器上运行,它会跳过特定的测试吗?
根据请求,以下是我们希望用于管理本地组的代码示例:
class my_repo::profile::windows::remote_desktop_users (
Array $members = ['MyDomain\MyUserAccount', 'MyDomain\ARandomDomainGroup'],
) {
group{'Set local Remote Desktop Users memberships':
ensure => present,
name => 'Remote Desktop Users',
members => $members,
auth_membership => false
}
}
注意:我们使用的是角色配置文件模式
上面的代码似乎可以工作。当我们的单元测试通过我们的 CI 运行时,它就会爆炸:
describe 'my_repo::profile::windows::remote_desktop_users' do
on_supported_os.select { |_, f| f[:os]['family'] == 'windows' }.each do |os, os_facts|
context "on #{os}" do
let(:facts) { os_facts }
it { is_expected.to compile }
end
end
end
谢谢
【问题讨论】:
-
根据定义,单元测试不受底层平台的影响,并且在单元测试期间模拟操作系统细节。我们可以在这里查看识别根本原因的代码吗?
-
当单元测试爆炸时,会发出什么错误消息?当然,您的 CI 会向您提供这些信息。
-
令我惊讶的是,我能够使用示例代码在 Linux 上运行的 PDK 1.16 中生成一个损坏的测试。它失败并出现围绕此问题的编译错误:“类成员的验证方法失败:Puppet::Util::Windows::SID:Module 的未定义方法‘name_to_principal’”。我不知道这是否反映了您在 CI 中看到的问题(但不是在您的实时 puppetserver 上?),但我倾向于将其归因于 PDK 中的缺陷。如果你看到类似的东西,我鼓励你file a ticket。
标签: continuous-integration puppet pdk