Я пытаюсь использовать марионетку в качестве управления пользователями unix.
Вот класс, который я создал для добавления новых пользователей:
class unix_accounts( $username, $forename, $name, $email, $uid) {
user { $username:
comment => '$forename $name',
home => '/home/$username',
shell => '/bin/bash',
uid => $uid,
groups => [$username, 'sudo'],
}
Я хотел бы, поскольку в основном электронная почта и имя пользователя могут быть выведены из $ name и $ forename, чтобы определить эти переменные в классе unix_accounts. Я пробовал это:
$username = $forename[0].chr.downcase+name.downcase
$email = $forename.downcase+'.'+$name.downcase+'@localnet.lan'
Но проверка puppetd на стороне клиента завершается ошибкой при первой точке (.) Со следующим сообщением:
Error 400 on server: Syntax error at '.'; expected '}' at ....
Это не имеет ничего общего с рубином, потому что я пробовал раньше с irb, похоже, это связано только с синтаксисом марионетки. Возможно ли вообще создать эти переменные внутри класса? Как это сделать?
Большое спасибо
$username = $forename[0].chr.downcase+name.downcase $email $forename.downcase+'.'+$name.downcase+'@localnet.lan'
Что заставляет вас думать, что это сработает? Ни одна из этих функций не предоставляется языком Puppet.
Посмотри на http://docs.puppetlabs.com/references/stable/function.html чтобы увидеть, что вы можете делать со строками прямо в Puppet (немного). Тогда посмотри на http://docs.puppetlabs.com/guides/templating.html чтобы узнать, как использовать шаблоны ERB, которые решат вашу проблему.
Кроме того, и это не ваша проблема, но это а проблема: если вы хотите, чтобы ваши строки интерполировали переменные, вам нужно использовать двойные кавычки, например:
user { $username:
comment => "$forename $name",
...