Это - хорошая идея использовать строчные переменные в Ваших сценариях оболочки, поскольку прописные переменные обычно резервируются для внутренностей оболочки. (Переменные среды являются исключением к этому, но должны действительно рассматриваться тот же путь как вещи с особыми значениями, которые Вы не должны произвольно изменять, не понимая то, что Вы делаете.) В этом случае, bash
наборы $UID
к Unix uid это работает под и не позволит этому быть измененным или переменная, которая будет использоваться для чего-либо еще. Оболочки кроме bash
(sh
может быть dash
или некоторая другая оболочка на некоторых платформах), может не использовать $UID
тот путь, и если bash
был создан для работы в режиме эмуляции Оболочки Bourne при вызове как sh
(который является значением по умолчанию, но много дистрибутивов Linux отключают это), оно не будет рассматривать $UID
как особенный также.
Решение, которое мне подходит, - использовать ' postgresql :: server :: role ' с createdb => true вместо 'postgresql: : database_grant '. Это имеет смысл, поскольку вы хотите изменить глобальное поведение пользователя, а не то, которое связано с конкретной базой данных.
Это пример директивы, которая добавляет пользователя вместе с привилегиями createdb:
postgresql::server::role { 'username':
password_hash => postgresql_password('username', 'password'),
createdb => true
}
Учитывая «vagrant» в качестве имени пользователя, это ожидаемый результат:
Role[vagrant]/Postgresql_psql[ALTER ROLE "vagrant" CREATEDB]/command: command changed '' to 'ALTER ROLE "vagrant" CREATEDB'
Важно: Если вы используете версию 2 модуля, вы можете использовать postgresql :: role вместо postgresql :: server :: role. См. https://forge.puppetlabs.com/puppetlabs/postgresql#upgrading