Re-fresh

Re-fresh -- это компонент для обновления существующих proxy-сертификатов на различных точках нашей инфраструктуры. Сейчас видны 3 точки, где обновление необходимо: Web UI, Pilot и GRAM.

На данный момент реализована только часть, предоставляющая сервис обновления для Pilot. Обновления обычных файлов в файловой системе пока не делается.

Инсталляция

  • Взять исходники с https://svn.ngrid.ru/re-fresh/trunk;
  • Установить в систему модуль config для Python: easy_install config;
  • Собрать дистрибутив re-fresh: make sdist;
  • Установить его: sudo make install.

Настройка

Нужно взять из исходного архива файл dot.re-fresh.conf и поместить либо в /etc/re-fresh.conf, либо к пользователю, от которого будет запускаться все хозяйство, в ~/.re-fresh.conf.

Можно редактировать следующие параметры конфигурации из секции main:

  • db: полный путь к базе запросов -- каталогу, который будет хранить всю информацию; есть два требования:
    • каталог должен лежать на локальном диске;
    • все содержимое каталога должно располагаться в пределах одной файловой системы.
  • proxytool: полный путь до утилиты proxytool;
  • client_socket: полный путь до локального сокета, который будет использоваться для общения клиента и сервера.

Если вы хотите править конфигурацию логов, то прочитайте http://docs.python.org/library/logging.html.

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

Компоненты

На данный момент есть три компонента:

  • re-freshd: демон, который планирует и производит обновления;
  • re-fresh-interd: демон, который общается с клиентской частью: добавляет новые запросы и посылает сообщения keep-alive для старых;
  • re-fresh: CLI для общения с демонизированными компонентами (на самом деле, только с re-fresh-interd).

Все компоненты в данный момент могут запускаться от непривелегированных пользователей.

Контроллер компонентов re-fresh-ctl

Демонов можно запускать и вручную, но удобнее это делать с помощью компонента re-fresh-ctl. Она поддерживает команды "start", "stop", "restart" и "status". re-fresh-ctl читает свой файл конфигурации из ~/.re-fresh-ctl.conf или из /etc/re-fresh-ctl.conf, что найдет раньше. Это обычные текстовые файлы в формате "переменная=значение" на каждой строчке, вокруг знака "равно" не должно быть пробелов. Распознаются следующие параметры конфигурации:

REFRESHD=/usr/bin/re-freshd
REFRESH_INTERD=/usr/bin/re-fresh-interd
REFRESHD_PID=/var/run/re-freshd.pid
REFRESH_INTERD_PID=/var/run/re-fresh-interd.pid

Первые две переменные -- расположение демонов, вторые две -- расположение их PID-файлов.

Параметры CLI

re-fresh subscribe

Этот режим добавляет новый запрос на обновление в очередь re-freshd.

Параметры:

  • --putback-cmd: shell-команда для возвращения обновленного proxy-сертификата клиенту; на ее стандартный ввод подается содержимое proxy-сертификата, если она возвращает ненулевой код завершения, то считается, что возвращение не удалось и запрос на обновление из очереди удаляется;
  • --retrieve-cmd: shell-команда для вытягивания сертификата, который нужно обновлять; должна выдавать на стандартный вывод содержимое сертификата, если она возвращает ненулевой код завершения, то считается, что получение обновляемого proxy не удалось и запрос на обновление из очереди удаляется;
  • --keepalive-period: [по-умолчанию, один час] сколько секунд запрос будет жить в очереди без получения сообщения keep-alive (другими словами, максимальный период между двумя сообщениями keep-alive); если в течение этого периода keep-alive не приходит, запрос из очереди обновления удаляется;
  • --renewed-validity: [по-умолчанию, один день] сколько секунд будет действителен обновленный proxy-сертификат.

При нормальном завершении код возврата будет нулевым, а на стандартный вывод будет распечатан идентификатор запроса. При ошибке код возврата будет ненулевым, а на стандартный поток ошибок (на самом деле, туда, куда сказано в конфигурации logger-а из re-fresh.conf) будет выведено сообщение о причине неудачи.

re-fresh keepalive

Посылает сообщение keep-alive, чтобы запрос не был удален из очереди на обновление в течение следующего периода времени, указанного как keepalive-period, при subscribe.

Параметры:

  • идентификатор запроса, обязательный параметр.

При нормальном завершении код возврата будет нулевым, а на стандартный вывод будет распечатан идентификатор запроса. При ошибке код возврата будет ненулевым, а на стандартный поток ошибок (на самом деле, туда, куда сказано в конфигурации logger-а из re-fresh.conf) будет выведено сообщение о причине неудачи.

Демон re-freshd

Запускается и производит необходимые обновления proxy-сертификатов, используя Proxytool в качестве провайдера для механизма обновлений.

Параметры:

  • --config: путь к файлу конфигурации.

Демон re-fresh-interd

Общается с клиентской частью, добавляет в очередь новые запросы, посылает сообщения keep-alive.

Параметры:

  • --config: путь к файлу конфигурации.

Техническая информация, в-основном, для разработчиков и прямых потребителей сервиса

Минимально необходимая функциональность:

  • [не требуется, есть только keep-alive] подписать существующий proxy на обновление в режиме "обновляем, пока мы не отменим подписку",
  • подписать существующий proxy на обновление в режиме "обновляем, пока идут keep-alive запросы для данного proxy",
  • отсылка keep-alive запросов для указанного proxy,
  • есть только keep-alive, то этого не требуется отмена подписки для указанного proxy;
  • [неясно, где это нужно, пока не требуется] возможность навешивания глобальных pre-renewal и post-renewal hooks.

Простое обновление нужно на Pilot и GRAM, keep-alive режим -- на Web UI.

Обновляется и proxy-сертификат, и VOMS-расширения, если они есть. Список VOMS-расширений берется из сертификата, который был подписан на обновление; указывать их при подписке не нужно.

Renewal hooks

При подписке можно указать две команды, одна из которых будет выдавать на стандартный вывод proxy-сертификат, который нужно обновлять, другая -- получать на стандартный ввод обновленный сертификат. Они нужны на Pilot, чтобы можно было забрать у Pilot proxy, который нужно обновить, и отдать ему обновленный proxy.

Обновление на GRAM

Есть два решения:

  • обновление с Pilot при помощи globus-credential-refresh, производимое, скажем, из post-renewal hook;
  • обновление на самом GRAM.

Первый способ:

  • снижает нагрузку на VOMS-сервер и MyProxy -- не нужно забирать одни и те же credentials дважды;
  • добавляет нагрузки на Pilot;
  • естественным образом делает так, что на GRAM появляется цепочка с последним сертификатом, у которого нет VOMS-расширений -- раньше у LCMAPS/LCAS были проблемы, если VOMS ACs лежат в последнем из сертификатов цепочки (я спросил у В.Вознесенского, актуальна ли сейчас эта проблема --rea).

Второй способ:

  • требует возможности получать на GRAM уведомления о двух событиях: начало задачи и конец задачи; и нужна информация о расположении proxy-сертификата для этой задачи;
  • не вовлекает Pilot, но добавляет нагрузку на VOMS и MyProxy;
  • возможно, будет необходимо искуственно надставлять цепочку делегирования, чтобы избавиться от VOMS AC в последнем proxy-сертификате цепочки.

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