Официальный модуль postgresql от кукольные лаборатории разрешить предоставление привилегий для конкретной базы данных.
postgresql::database_grant{'grant to myuser':
privilege => 'CREATE',
db => 'app_production',
role => 'myuser',
}
это выполнит:
GRANT ${privilege} ON database ${db} TO ${role};
Однако я хотел бы выполнить запрос о глобальных разрешениях для данного пользователя:
ALTER role myuser login createdb;
Есть способ как это сделать? Или мне следует использовать другой модуль марионеток для PostgreSQL?
Решение, которое мне подходит, - использовать 'postgresql :: сервер :: роль' с участием createdb => истина вместо postgresql :: database_grant. Это имеет смысл, поскольку вы хотите изменить глобальное поведение пользователя, а не то, которое связано с конкретной базой данных.
Это пример директивы, которая добавляет пользователя вместе с привилегиями createdb:
postgresql::server::role { 'username':
password_hash => postgresql_password('username', 'password'),
createdb => true
}
Учитывая «бродяга» в качестве имени пользователя, это ожидаемый результат:
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