voms-client
EGI VOMS Клиент
Общая информация
О VOMS и VO
Это роль Ansible, которая настраивает VOMS клиенты. VOMS — это веб-сервис для управления членством в Виртуальных Организациях (VO). VOMS клиенты необходимы для получения авторизации (в виде краткосрочных прокси) для взаимодействия с конкретными сервисами, основанными на членстве в VO. VOMS клиенты представляют собой набор командных утилит, которые отправляют аутентифицированные запросы к соответствующему серверу VOMS для запроса авторизации.
Для использования VOMS клиента, индивидуум должен
- иметь личный сертификат x.509
- быть зарегистрированным в VO, для которой он хочет получить авторизацию
VOMS клиенты обычно устанавливаются на профили Узлов Пользователя или Рабочих Узлов.
Конфигурация
Конфигурация VOMS клиентов осуществляется с помощью нескольких файлов:
.lsc
файлыvomses
файлы
См. документацию VOMS для получения более подробной информации.
Для каждой VO, с которой вы хотите взаимодействовать, необходимо настроить соответствующую конфигурацию. Это может занять много времени, особенно в случаях, когда администратор сайта не знает заранее, какие VO настраивать.
Чтобы облегчить жизнь, мы используем данные как основу.
Необходимые данные доступны через API Портала Операций EGI, который используется в этой роли как источник данных. Это позволяет нам настроить все VO, зарегистрированные на Портале Операций, за один раз. Для генерации конфигурации можно использовать два подхода:
- конфигурация из сырых данных, извлеченных из Lavoisier во время выполнения Ansible
- конфигурация на основе отфильтрованных данных, извлеченных из Lavoisier до выполнения Ansible.
В первом подходе можно использовать хорошо составленный
json_query
для перебора данных, возвращаемых Lavoisier. Запрос в этом случае должен отражать сложность и структуру объекта данных, возвращаемого Lavoisier, который нельзя считать возвращающим массив согласованных данных. Во втором подходе используется гораздо более простой метод перебора кэшированного
объекта данных, который был отфильтрован так, чтобы исключить элементы, не содержащие соответствующую информацию. Эти кэшированные данные легко создаются простым скриптом на Python - files/create_clean_vo_data.py, который читает переменные роли и создает локальный кэш данных. Формат данных выбран в формате YAML, чтобы мы могли добавить его в репозиторий и отслеживать изменения — это было бы трудно сделать с JSON из-за недостатка строк.
Мы выбрали второй подход (см. 4215026e18c) по следующим причинам:
- Легче поддерживать хорошо задокументированный скрипт, чем сложный json запрос.
- Легче читать хорошо задокументированный скрипт, чем сложный json запрос.
- Если роль добавляется как зависимость к плейбукам (что, безусловно, произойдет, поскольку клиенты VOMS используются повсюду), данные должны быть доступны.
Однако существует недостаток — данные в репозитории могут быстро выйти из синхронизации с фактическими данными на Lavoisier. Это может произойти как в случае ручного редактирования кэша, так и в случае, если обслуживающий не запустит скрипт, когда это необходимо. Единственный способ преодолеть это — поддерживать надежный набор тестов.
Обновление данных VO
Для обновления данных VO с помощью files/create_clean_vo_data.py требуется токен аутентификации для взаимодействия с API Портала Операций EGI.
Токен можно сгенерировать, зайдя, используя аутентификацию через EGI Check-in, на страницу документации API Портала Операций, следуя инструкциям на странице, а затем экспортировав токен в среду перед выполнением files/create_clean_vo_data.py.
Можно протестировать, что токен работает, используя вызов curl:
# Экспорт токена API Портала Операций
$ export OPS_PORTAL_API_TOKEN='...'
# Тестирование вызова API с помощью curl
$ curl -X GET "https://operations-portal.egi.eu/api/vo-voms/json" \
-H "Accept: application/json" \
-H "X-API-Key: $OPS_PORTAL_API_TOKEN"
После того, как вызов curl
подтвердит свою работоспособность, можно использовать предоставленный
скрипт:
# Экспорт токена API Портала Операций
$ export OPS_PORTAL_API_TOKEN='...'
# Обновление данных VO
$ ./files/create_clean_vo_data.py
Тестирование
Роль тестируется с помощью molecule для следующих сценариев:
default
(тестируется с TestInfra)
Тесты охватывают модульные и интеграционные тесты, но не функциональные тесты, поскольку для использования VOMS клиента необходим личный сертификат. Включенные специфические тесты:
- наличие бинарных исполняемых файлов
- наличие конфигурационных директорий
- содержимое конфигурационных файлов для выбранных VO
Требования
См. requirements.txt
.
Переменные роли
Переменные роли хранятся в defaults/main.yml
и включают:
prerequisites
- необходимые пакеты на основе ОСvoms_dir
,vomses_dir
- пути к директориям на целевом хосте, которые содержат информацию о vomslavoisier
- конечные точки фреймворка lavoisier, необходимые для извлечения данных, необходимых для заполнения конфигурационных файлов.
Нет необходимости изменять переменные по умолчанию.
Зависимости
Зависимости явно не указаны в метаданных, но эта роль зависит от роли UMD:
- { role: EGI-Foundation.umd, release: 4 }
Пример Playbook
- hosts: servers
roles:
- { role: EGI-Foundation.umd, release: 4 }
- { role: EGI-Foundation.voms-client }
Лицензия
Apache-2.0
Информация об авторе
См. AUTHORS.md
ansible-galaxy install EGI-Foundation/ansible-VOMS-client-role