我有这个类,运行时应该允许用户更改密码。但是,当我用 运行它时puppet agent --test
,它会在第 9 行(设置密码的地方)给出语法错误,但我不知道那一行有什么问题。这是我目前的代码。“$6”是因为它是 SHA-512 散列的,而不是 MD5 的 $1,这是默认值。
class pwdchange ($newpwd = '', $targetuser = $::id) {
$hash = inline_template("<%
require 'digest'
Digest::SHA1.hexdigest(newpwd)
%>")
$encryptedpwd = '$6'+template($hash)
user {"$targetuser":
ensure => present
password => $encryptedpwd
}
}
谁能告诉我我做错了什么?
答案1
您需要在资源定义中用逗号终止行,同时建议引用变量:
class pwdchange ($newpwd = '', $targetuser = $::id) {
$hash = inline_template("<%
require 'digest'
Digest::SHA1.hexdigest(newpwd)
%>")
$encryptedpwd = '$6'+template($hash)
user {"$targetuser":
ensure => present,
password => "$encryptedpwd",
}
}
答案2
如果您已经在使用inline_template
,则无需使用该template
函数。另外,使用反斜杠来转义文字美元符号。
$hash = inline_template(...)
$encryptedpwd = "\$6${hash}"
user {$targetuser:
ensure => present,
password => $encryptedpwd,
}
构建复杂字符串的另一种可能性是将前缀放在不同的变量中。使用单引号可将美元符号保留为文字字符:
$hash = inline_template(...)
$prefix = '$6'
$encryptedpwd = "${prefix}${hash}"