Назад | Перейти на главную страницу

Изменение паролей пользователей с помощью Puppet

У меня есть этот класс, который при запуске должен позволить пользователю изменить свой пароль. Однако, когда я запускаю его с 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}"