You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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",
    }

}

问题原因

  1. 资源类型与变量混淆:你错误地将自定义资源类型ssh_user当成变量来使用(比如写成$ssh_user或@ssh_user)。Puppet中调用自定义资源时,直接使用资源类型名称即可,不需要加$或@前缀。一旦写成$ssh_user,Puppet会将其视为变量,但该变量从未被定义,因此触发"Unknown variable"错误。

  2. 额外未定义变量问题:你定义的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 12:46:20