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

Ansible: заменить (только) файл конфигурации по умолчанию

Я хотел бы разместить настраиваемый /etc/my.cnf ТОЛЬКО в том случае, если в настоящее время используется my.conf по умолчанию. После того, как my.cnf по умолчанию был заменен или отредактирован, я не хочу рисковать, заменяя его моим настроенным my.cnf.

Мои лучшие идеи и недостатки, которые я вижу:

Возьмите контрольную сумму файла my.cnf по умолчанию, и если она совпадает с этой контрольной суммой, замените ее. Это кажется самым безопасным, но также раздражает, когда в my.cnf появляются новые версии или незначительные изменения.

Найдите в my.cnf текст, который включает только файл по умолчанию, и ни один из моих заменяющих файлов my.cnf не будет включать. Это кажется немного менее раздражающим, чем мой первый вариант, но более рискованным.

Используйте обработчик для замены my.cnf при установке mysql. Это может иметь катастрофические последствия, если я (или кто-то другой) изменю требование mysql с «настоящего» на «последнее». Я также беспокоюсь о странностях, которые могут возникнуть, если мне нужно будет отрегулировать изменения имени пакета mysql (например, теперь, когда mysql больше не включен в centos, репозиторий oracle теперь имеет «community» во всех именах пакетов).

Ищу другие методы. Если это что-то, что вы уже кодировали, я также буду признателен за примеры.

Спасибо!

Вам следует избегать этого, чтобы автоматически управлять «чем-то», которым также управляют вручную. В любом случае это станет конфликтом.

Если ты хочешь управлять my.cnfавтоматически, напечатайте четкое заявление в первой строке, что этот файл управляется автоматически. Любые ручные изменения теряются. И это нормально.

Если вы хотите иметь также ручную настройку, используйте директивы include или что-то в этом роде, чтобы включить подкаталоги. Там пользователь может изменить ваши автоматические настройки. Сейчас достаточно часто conf.d папка, содержащая пользовательские настройки. В большинстве my.cnf в конце есть строка:

!includedir /etc/mysql/conf.d/

Другой вариант - использовать lineinfile. Обычно этого достаточно, если вам нужно изменить только некоторые настройки.

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