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

марионетка пытается определить переменные глобального класса

Я пытаюсь использовать марионетку в качестве управления пользователями 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",
    ...