Лучший инструмент Ansible для добавления и удаления конфигураций в запущенные приложения?

#tomcat #configuration #ansible

#tomcat #конфигурация #ansible

Вопрос:

Я новичок в Ansible и вижу преимущества использования Ansible для запуска и запуска голого сервера со всеми необходимыми программными пакетами и т. Д. Тем не менее, мне интересно, является ли это правильным инструментом для того, что я пытаюсь сделать:

  • У меня есть несколько серверов (< 10), на которых запущены экземпляры Tomcat с несколькими приложениями war
  • для каждого клиента развертываются новые файлы конфигурации war
  • для каждого клиента, который останавливает службу, файлы war config удаляются с сервера Tomcat
  • аналогично: конфигурации добавляются / удаляются из файла в формате ini
  • Я хочу только добавлять / удалять файлы и конфигурацию для определенного клиента и не касаться других конфигураций

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

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

Поэтому мне интересно, подходит ли Ansible для этой работы или есть ли лучшие инструменты, которые можно использовать для этой конкретной задачи. И если есть лучшие инструменты, какие из них?

Комментарии:

1. На чем вы остановились для управления конфигурациями? Я нахожусь в том же месте, где мне нужно их обновить, и мне интересно, что использовать.

2. На данный момент я остановился на создании специализированных ролей для управления одним аспектом конфигурации, например, общим обновлением файла war. Для развертывания нового клиента я все еще полагаюсь на свои старые сценарии оболочки. Тем временем я переделываю конфигурацию, чтобы она лучше подходила для управления с помощью Ansible.

Ответ №1:

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

Вы можете установить разумные значения по умолчанию для переменных в файле defaults роли, например:

role/defaults/main.yml:

 customer_name: ~
customer_war_file: "{{ customer_name }}.war"
  

роль /шаблоны/server.config.j2:

 some_setting_x: {{ setting_x }}
some_setting_y: {{ setting_y }}
  

Таким образом, вы можете использовать эту роль в сборнике заданий снова и снова:

 - name: Playbook for customer deploys
  ...

  roles:
    - { role: my_deploy_role, customer_name: 'acme',  setting_x: 'foo', setting_y: 'bar' }
    - { role: my_deploy_role, customer_name: 'emca',  setting_x: 'bat', setting_y: 'baz' }
  

Расширяя это, вы можете добавить параметр, который удаляет, а не развертывает в вашей роли, или, если это становится слишком сложным, просто создайте отдельную роль для удалений:

   roles:
    - { role: my_deploy_role, customer_name: 'emca',  setting_x: 'bat', setting_y: 'baz' }
    - { role: my_remove_role, customer_name: 'acme' }
  

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

Большинство модулей Ansible позаботятся об этом за вас, например, если шаблон server.config.j2 в приведенном выше примере уже существует на целевой машине и идентичен, Ansible сообщит «ok», а не «изменен».

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

Ответ №2:

Для редактирования ini-файлов вы можете использовать http://www.pixelbeat.org/programs/crudini / С скоро выпущенной версией 0,5 вы можете инициировать изменения, используя опцию —verbose, например:

 - command: crudini --set /your/config.ini section param value
  register: command_result
  changed_when: command_result.stderr | match("^changed")