Предположим, у меня есть хост, который, помимо прочего, является веб-сервером, на котором устанавливается соответствующая роль Ansible nginx
, выполняет некоторые важные настройки /etc/nginx
и открывает порты 80 и 443 в брандмауэре.
В какой-то момент я хочу, чтобы этот конкретный хост больше не был веб-сервером, потому что по какой-то причине я переместил этот сервис в другое место. Простое удаление сервера из [webservers]
инвентаря оставит мусор на сервере. В идеале я хотел бы удалить nginx
, удалить /etc/nginx
каталог (и некоторые другие каталоги) и закрыть порты 80 и 443 в брандмауэре.
В Puppet я могу это сделать. Хост, являющийся веб-сервером, будет иметь такую конфигурацию:
class { 'nginx':
ensure => present,
}
и все, что мне нужно сделать, это заменить «настоящее» на «отсутствующее». Если nginx
класс хорошо написан, он отменит внесенные изменения. (Обычно администратор заменяет «присутствует» на «отсутствует», и позже, когда он уверен, что все затронутые хосты отменили конфигурацию, он удалит элемент из манифеста.)
Более того, я думаю, что модуль межсетевого экрана Puppet автоматически удаляет правила межсетевого экрана, которые больше не могут быть найдены в манифесте; поэтому я думаю, что для брандмауэра вам даже не нужно делать эту «отсутствующую» вещь выше, брандмауэр автоматически все равно закроется.
Как я могу достичь этих вещей с Ansible?
ensure => present
наensure => absent
который также ... Как сделать то же самое с ansible» и т. Д. В идеале с примером всего, что вы уже попробовали.Ответы:
С Ansible вы бы на самом деле не сделали это иначе, чем с Puppet.
В вашем примере, где вы бы установить
вы полагаетесь на то, что автор этого кукольного модуля написал необходимый код для удаления всего. Не каждый кукольный модуль имеет это.
Точно так же с Ansible у вас могут быть роли, которые имеют как необходимые шаги для его установки, так и для удаления. Разница только в том, как вызвать два.
Одним из подходов может быть тот, в котором рассматриваемая роль предоставляет переменную для переключения поведения. Например, эта роль nginx может принимать переменную,
nginx_state
которая принимает значенияinstalled
иabsent
.В роли
tasks/main.yml
, автор роли может иметь что-то вроде ..... с соответствующей логикой установки / удаления, разделяемой между этими двумя условно включенными файлами.
Ansible роли также могут быть вложенными. В качестве другого способа сделать то же самое, автор роли может, например, предоставить роль
nginx
с другой ролью внутри нее, называемойuninstalled
. Вы могли бы тогда сделать:Ansible, по сравнению с Puppet, возможно, имеет меньше правил и руководств о том, как нужно действовать, так что практики немного отличаются в дикой природе, но применяются те же понятия.
источник
- { role: nginx, state: absent }
), но мне она кажется очень многословной. Единственный недостаток вложенной роли, который я видел, заключался в том, что мне нужно было связать переменные по умолчанию с родителем.roles: -nginx/uninstalled
чтобы работать? Я посмотрел повсюду, но не могу найти какую-либо документацию о роли вложений таким образом, чтобы я мог это сделать.Поскольку у вас есть конфигурация / инициализация в Ansible, вы можете просто сдуть весь сервер, переустановить / подготовить новый и получить хорошее чистое известное состояние для его работы.
Если вы действительно хотите «перенастроить» его для других целей, вам нужно будет создать новую пьесу, которая выполняет необходимые задачи по очистке.
Насколько мне известно, все модули упаковки Ansible поддерживают,
state=absent
чтобы гарантировать, что данный пакет не установлен на вашем сервере. Кроме того,apt
модуль имеетpurge=yes
параметр, который будет очищать все оставшиеся настроенные файлы конфигурации.Вы также можете создавать задачи для подтверждения того, что порт 80 защищен брандмауэром. Однако, поскольку у вас не будет никаких процессов, запущенных на этом порту, брандмауэр не будет иметь никакого значения для безопасности вашего сервера.
источник
state=absent
добавлены. Есть хороший шанс, что удалит или отменит значительное большинство изменений конфигурации, которые вы сделали. В зависимости от того, насколько велика роль, это может быть реальная проверка PITA.