Какие драгоценные камни вы рекомендуете использовать для этого вида автоматизации? - PullRequest
0 голосов
/ 15 ноября 2011

Мне нужно создать скрипт для управления сервером страниц обслуживания для моей хостинговой компании.

Мне нужно будет создать интерфейс CLI, который будет работать следующим образом (пример сценария):

(давайте предположим, что mcli - это имя скрипта, 1.1.1.1 - оригинальный адрес сервера (на котором размещен веб-сайт www.exemple.com)

Здесь я просто создаю интерфейс обратной связи на сервере обслуживания сисходный IP-адрес и создайте специфичный для сайта конфигурационный файл nginx в сайтах с поддержкой

$ mcli register www.exemple.com 1.1.1.1
[DEBUG] Adding IP 1.1.1.1 to new loopback interface lo:001001001001
[WARNING] No root directory specified, setting default maintenance page.
[DEBUG] Registering www.exemple.com maintenance page and reloading Nginx: OK

Затем, когда я хочу включить страницу обслуживания и полностью закрыть сайт:

$ mcli maintenance www.exemple.com
[DEBUG] Connecting to router with SSH: OK
[DEBUG] Setting new route to 1.1.1.1 to maintenance server: OK
[DEBUG] Writing configuration: Ok

Затем удалите страницу обслуживания:

$ mcli nomaintenance www.exemple.com
[DEBUG] Connecting to router with SSH: OK
[DEBUG] Removing route to 1.1.1.1: Ok
[DEBUG] Writing configuration: Ok

И мне понадобится функция, чтобы увидеть фактическое состояние сайтов

$ mcli list
+------------------+-----------------+------------------+
| Site Name        | Server I.P      | Maintenance mode |
+------------------+-----------------+------------------+
| www.example.com  | 1.1.1.1         | Enabled          |
| www.example.org  | 1.1.1.2         | Disabled         |
+------------------+-----------------+------------------+

$ mcli show www.example.org
Site Name:        www.example.org
Server I.P:       1.1.1.1
Maintenance Mode: Enabled
Root Directory :  /var/www/maintenance/default/

Но я никогда не делал такого рода сценариев с Ruby.gems вы рекомендуете для такого рода вещей? Для разбора командной строки? Столбец / Colorized выход? SSH-соединение (необходимо для подключения к маршрутизаторам Cisco)

Вы рекопорекомендуйте мне использовать локальную базу данных (sqlite) для хранения метаданных (изменения этапов, фактические состояния) или вы рекомендуете выполнять вычисления на лету, анализируя файлы конфигурации nginx / interfaces и используя syslog для мониторинга изменений, выполненных с помощью этого сценария?

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

Спасибо

Ответы [ 3 ]

1 голос
/ 15 ноября 2011

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

Тем не менее, вы можете проверить

  • GLI синтаксический анализ командной строки, как git

  • OptionParser анализ командной строки

Лично я бы пошел на подход SQLite для хранения данных, но я предвзят (с сильным фоном SQL).

0 голосов
/ 15 ноября 2011

У нас похожая задача.Я использую следующую архитектуру

  • Небольшое приложение (C), которое генерирует конфигурационный файл
  • Добавьте скрипт nginx init.d новый переключатель update_clusters.Этот скрипт перезапустит nginx, только если файл конфигурации будет изменен
update_clusters() {
   ${CONF_GEN} --outfile=/tmp/nginx_clusters.conf
   RETVAL=$?            
   if [[ "$RETVAL" !=  "0" ]]; then
     return 5
   fi
   if ! diff ${CLUSTER_CONF_FILE} /tmp/nginx_clusters.conf > /dev/null; then
       echo "Cluster configuration changed. Reload service"
       mv -f /tmp/nginx_clusters.conf ${CLUSTER_CONF_FILE}
       reload
   fi                   
}
  • Набор скриптов bash для добавления записей в базу данных.
  • Веб-консоль для добавления / изменения / удалениязаписи в базе данных (модуль extjs + nginx)
0 голосов
/ 15 ноября 2011

Thor - это хорошая жемчужина для обработки опций CLI.Это позволяет организовать такой тип организации в вашем скрипте:

class Maintenance < Thor
  desc "maintenance", "put up maintenance page"
  method_option :switch, :aliases => '-s', :type => 'string'
  #The method name is the name of the task that would be run   => mcli maintenance
  def maintenance
    #do stuff
  end

  no_tasks do
    #methods that you don't want cli tasks for go here
  end
end
Maintenance.start

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...