使用Puppet Manifest添加打印机时Cups模块参数错误求助
问题原因分析
报错的核心是cups类的package_names参数收到了未定义值(Undef),但该参数要求必须是字符串或数组类型。
具体触发原因:
- 你使用的
leoarnold-cups2.2.2版本中,cups类的package_names默认值依赖::cups::params::package_names,这个值是模块的params.pp文件根据节点操作系统(通过$::osfamily或$::operatingsystem系统变量)来定义对应包名的。 - 目标节点
ws-ac2d.local的操作系统不在模块支持的列表里,导致params类无法生成有效的package_names值,最终传递了Undef给cups类,触发类型校验失败。 - 另一种可能是节点的操作系统标识(
osfamily/operatingsystem)没有被Puppet正确收集,导致params类找不到匹配的配置分支。
验证与修复建议
- 在目标节点上执行
facter osfamily或facter operatingsystem,确认操作系统的标识值。 - 查看模块的
params.pp文件(路径一般是/etc/puppetlabs/code/environments/production/modules/cups/manifests/params.pp),检查里面是否包含你的节点操作系统对应的package_names定义。 - 如果操作系统不在支持列表里,直接手动指定
package_names参数即可解决,修改后的清单示例:
class mc_hp_mfp_m428fdn_hp0a7a0e_10_139_2_85 { class { '::cups': package_names => ['cups'], # 替换为你操作系统对应的CUPS包名,多数系统都是'cups' } cups_queue { 'mc_hp_mfp_m428fdn_hp099a15_10_139_2_85': ensure => 'printer', model => 'drv:///sample.drv/generpcl.ppd', uri => 'ipp://10.139.2.85', accepting => true, enabled => true, shared => false, location => 'Местоположение неизвестно', } }
内容的提问来源于stack exchange,提问作者Chumka Doc
相关产品推荐
相关产品推荐

