Spec-Zone.ru › Ansible

Руководство разработчика localenv

Роль «localenv» в этой коллекции устанавливает внешние зависимости, необходимые для запуска интеграционных тестов. Идея состоит в том, чтобы предоставить участнику проекта готовый способ настроить локальное окружение согласованным и воспроизводимым образом.

Примечание

Это руководство находится в процессе разработки и содержит очень мало подробностей. Пока что, если вы планируете создать новую роль localenv, лучше всего открыть issue в репозитории и обсудить это. Также может быть полезно ознакомиться с setup_localenv_docker — на сегодняшний день это наиболее полная роль.

  • Необходимые внешние зависимости

    • HashiCorp Vault
    • Прокси-сервер
    • Сервер MMock
  • Соглашения для роли localenv

Необходимые внешние зависимости

HashiCorp Vault

Для интеграционных тестов требуется сервер Vault. Рекомендуется использовать режим Dev-сервера Vault — это самый простой и быстрый способ запустить сервер.

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

Чтобы запустить тесты, предназначенные для проверки доступа через TLS/HTTPS, необходимо запустить сервер Vault со слушателем, поддерживающим TLS. Нужно указать адрес и порт TLS, а также сертификат CA (или сам сертификат, если он самоподписанный).

Необходим корневой токен сервера Vault, поскольку интеграционные тесты изменяют конфигурацию Vault и предполагают, что этот токен доступен для выполнения таких действий. Можно позволить Vault сгенерировать токен при запуске, а затем получить его, но проще заранее создать токен и передать его Vault с помощью параметра -dev-root-token-id или переменной окружения VAULT_DEV_ROOT_TOKEN_ID (см. параметры Dev-режима).

Соответствующие переменные integration_config.yml

переменная

пример

описание

vault_test_server_http

http://myvault:8200

Полный URL HTTP вашего тестового сервера Vault.

vault_test_server_https

https://myvault:8300

Полный URL HTTPS вашего тестового сервера Vault.

vault_dev_root_token_id

3ee9a1f7-f115-4f7c-90a3-d3c73361bcb5

Корневой токен, используемый для аутентификации в Vault.

vault_version

1.7.3

Используемая версия Vault (обычно это значение задаётся ролью localenv, поэтому вручную установленное значение нигде не используется).

vault_cert_content

-----BEGIN CERTIFICATE-----<snip>

Открытый сертификат CA, подписавшего сертификат, используемый слушателем TLS Vault (или сам сертификат, если он самоподписанный).

Прокси-сервер

Прокси-сервер используется для тестирования вариантов подключения через прокси.

Теоретически для этой цели подойдёт любой прокси-сервер, поддерживающий цели http/s, но рекомендуется tinyproxy: он, как следует из названия, небольшой, а также прост в настройке и запуске и доступен в пакетных менеджерах и контейнерах.

Соответствующие переменные integration_config.yml

переменная

пример

описание

vault_proxy_server

http://proxy:8080

Полный URL HTTP вашего прокси-сервера.

Сервер MMock

MMock (сокращение от Monster Mock) — это HTTP-сервер, предназначенный для имитации ответов HTTP. Он также может прозрачно перенаправлять запросы на реальный сервер. Мы используем его как прокси для нашего тестового сервера Vault, перехватывая определённые вызовы API Vault и возвращая имитационные ответы.

Это полезно для интеграций с Vault, которые сложнее настроить в нашей среде CI.

Например, мы используем его для тестирования метода аутентификации aws_iam, поскольку у нас нет учётной записи AWS, которую можно было бы использовать, настроить и подключить к ней из GitHub CI.

В этих интеграционных тестах все обращения к Vault направляются в MMock, а не непосредственно в Vault. Мы заранее настраиваем MMock так, чтобы он отвечал на соответствующие вызовы, имитируя успешные ответы и ответы с ошибками реального сервера Vault.

Соответствующие переменные integration_config.yml

переменная

пример

описание

vault_mmock_server_http

http://mmock:8900

Полный URL HTTP сервера MMock.

Соглашения для роли localenv

  • Используйте files/.output для хранения сгенерированных артефактов.
  • Всё сгенерированное должно находиться в .gitignore; соответственно, этот процесс не должен перезаписывать или изменять содержимое, не находящееся в .gitignore. Иными словами, это не должно приводить к изменениям статуса git.
  • Рассмотрите возможность предоставления setup.sh, чтобы не приходилось вручную выполнять команды ansible-. В идеале он должен корректно работать независимо от текущего рабочего каталога.
  • Создайте пригодный к использованию integration_config.yml, позволяющий использовать результат работы localenv. Создайте его в каталоге результатов роли, а не за его пределами. Скопируйте его в нужное место, но не перезаписывайте существующий файл.
  • Если у роли есть внешние зависимости, постарайтесь описать их в файлах, которые можно использовать с соответствующим инструментом, например requirements.yml для ansible-galaxy и т. д.
  • Роли localenv предназначены для запуска вне среды ansible-test, однако они могут использовать другие роли повторно.

© 2012–2018 Michael DeHaan
© 2018–2025 Red Hat, Inc.
Licensed under the GNU General Public License version 3.
https://docs.ansible.com/projects/ansible/latest/collections/community/hashi_vault/docsite/localenv_developer_guide.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API