Puppet v8自定义模块出现Unknown variable: 'ssh_user'错误求助
Puppet Agent 同步配置时出现"Unknown variable: 'ssh_user'"错误原因分析
错误信息
Error: Could not retrieve catalog from remote server: Error 500 on SERVER: Server Error: Evaluation Error: Unknown variable: 'ssh_user'
相关代码片段
class users::virtual { define ssh_user( $user=$name, $uid, $password, $key, $home_dir = 'home' ) { user { $user: ensure => present, managehome => true, uid => $uid, password => $password, home => "/${home_dir}/${user}" } ssh_authorized_key { "${user}_key": key => $key, type => "ssh-rsa", user => $user, } } define ssh_home ($home_dir = 'home') { file { "/${home_base_dir}/${name}/.ssh": ensure => directory, owner => $name, group => $name, mode => 0700, } -> file { "/${home_dir}/${name}/.ssh/id_rsa": source => "puppet:///modules/users/${name}/ssh/id_rsa", owner => $name, group => $name, mode => 0600, } -> file { "/${home_dir}/${name}/.ssh/id_rsa.pub": source => "puppet:///modules/users/${name}/ssh/id_rsa.pub", owner => $name, group => $name, mode => 0644, } } ssh_user { "myuser": uid => 1010, password => 'hidden', key => "hidden", } }
问题原因
资源类型与变量混淆:你错误地将自定义资源类型
ssh_user当成变量来使用(比如写成$ssh_user或@ssh_user)。Puppet中调用自定义资源时,直接使用资源类型名称即可,不需要加$或@前缀。一旦写成$ssh_user,Puppet会将其视为变量,但该变量从未被定义,因此触发"Unknown variable"错误。额外未定义变量问题:你定义的
ssh_home资源中,第一个file资源引用了未定义的$home_base_dir变量,这也会导致类似的变量未定义错误,需要将其改为参数中已定义的$home_dir来修复。
修复方案
- 确保调用自定义资源时使用正确的资源类型名,保持代码中最后一段的写法即可:
ssh_user { "myuser": uid => 1010, password => 'hidden', key => "hidden", } - 修正
ssh_home中的变量错误:define ssh_home ($home_dir = 'home') { file { "/${home_dir}/${name}/.ssh": ensure => directory, owner => $name, group => $name, mode => 0700, } -> # 后续代码保持不变 }
内容的提问来源于stack exchange,提问作者Confounder
相关产品推荐
相关产品推荐

