У меня есть этот класс, который при запуске должен позволить пользователю изменить свой пароль. Однако, когда я запускаю его с puppet agent --test
, он дает синтаксическую ошибку в строке 9, где он устанавливает пароль, но я не знаю, что не так с этой строкой. Вот код, который у меня есть. «6 долларов» означает хеширование SHA-512, в отличие от 1 доллара для MD5, который используется по умолчанию.
class pwdchange ($newpwd = '', $targetuser = $::id) {
$hash = inline_template("<%
require 'digest'
Digest::SHA1.hexdigest(newpwd)
%>")
$encryptedpwd = '$6'+template($hash)
user {"$targetuser":
ensure => present
password => $encryptedpwd
}
}
Может ли кто-нибудь сказать мне, что я делаю не так?
Строки необходимо завершать запятыми в определении ресурса, также рекомендуется заключать переменные в кавычки:
class pwdchange ($newpwd = '', $targetuser = $::id) {
$hash = inline_template("<%
require 'digest'
Digest::SHA1.hexdigest(newpwd)
%>")
$encryptedpwd = '$6'+template($hash)
user {"$targetuser":
ensure => present,
password => "$encryptedpwd",
}
}
Когда вы уже используете inline_template
, нет необходимости template
функция. Также используйте обратную косую черту, чтобы избежать буквального знака доллара.
$hash = inline_template(...)
$encryptedpwd = "\$6${hash}"
user {$targetuser:
ensure => present,
password => $encryptedpwd,
}
Еще одна возможность построить сложную строку - поместить префикс в другую переменную. Использование одинарных кавычек сохраняет символ доллара как буквальный символ:
$hash = inline_template(...)
$prefix = '$6'
$encryptedpwd = "${prefix}${hash}"