Puppetlabs-mysq (v3.0.0): временный пользователь

у нас есть марионеточная установка, которая в основном работает следующим образом:

  1. Создать пользователя "puppetdeploy"
  2. Предоставьте доступ ко всем таблицам для пользователя "puppetdeploy"
  3. Запускает скрипты, которые создают и обновляют базы данных из.sql файлов, используя 'puppetdeploy'
  4. Отменить весь доступ к "puppetdeploy" пользователя,

.pp файл выглядит примерно так:

mysql_user { 'puppetdeploy@localhost':
 ensure => 'present',
 password_hash => '*****', 
}->
mysql_grant { 'grant_all_for_puppetdeploy':
 ensure => 'present',
 options => ['GRANT'],
 privileges => ['ALL'],
 table => '*.*',
 user => 'puppetdeploy@localhost',
}
#... execute scripts to import bunch of .sql files using mysql user 'puppetdeploy'
mysql_grant { 'revoke_all_for_puppetdeploy':
 options => ['REVOKE'],
 privileges => ['ALL'],
 table => '*.*',
 user => 'puppetdeploy@localhost',
}

В более поздних версиях mysql-модуля это больше не работает, так как имя для каждого гранта должно быть в формате "[user]/[table]", и мне не разрешено иметь одно и то же имя для двух или более mysql_grants.

Есть ли способ обойти это ограничение в puppetlabs-mysql 3.0.0, или есть ли лучшие способы борьбы с временными пользователями mysql?

1 ответ

Проблема в том, что такие рабочие процессы плохо подходят с кукольной парадигмой. Кукольный манифест - это не сценарий. Это описание состояния, которое вы хотите, чтобы Puppet обеспечивал соблюдение. Конечно, для переходов часто требуются последовательные шаги настройки, чтобы получить право, но все должно иметь одно определенное состояние, которое Puppet должен синхронизировать, и он должен оставаться в этом состоянии.

Все рабочие процессы, требующие одного или нескольких ресурсов для выполнения нескольких разных состояний во время одной и той же транзакции Puppet, создают трудности и обычно решаются с помощью какого-то взлома.

В вашем конкретном сценарии лучше всего отказаться от типа mysql_grant в пользу скрипта, который будет mysql_grant и mysql_grant Puppet, который будет выполнять все шаги, описанные в выписке манифеста. Это не очень-то Кукольная вещь, но гораздо более чистая, потому что вы не пытаетесь сделать Puppet жонглировать одним и тем же ресурсом из одного состояния в другое.

Еще лучше, разрешите Puppet использовать привилегии фактической учетной записи администратора.

В качестве компромисса вы можете добавить пользовательский факт, который позволит Puppet определить, что все GRANTs находятся в порядке в начале последующей транзакции и затем удаляют пользователя.

if $grants_are_deployed {
 mysql_grant { 'revoke_all_for_puppetdeploy': ... }
else {
 mysql_user { 'puppetdeploy@localhost': }
}

licensed under cc by-sa 3.0 with attribution.