GUI для ansible vault

Столкнувшись с неудобствами работы с ansible vault через консоль, было решено создать удобный графический интерфейс взаимодействия, или gui для ansible vault. Более подробно про работу с секретами в ansible можно прочитать в статье Ansible vault как средство хранения секретов.
Содержание
Проблематика
Все созданные роли и переменные хранятся в репозитории и при обновлении роли или создании нового окружения необходимо подготовить файл с переменными. Далее закинуть его на сервер с ansible vault, зашифровать и скопировать обратно. Это довольно трудоемкий процесс.
Принцип работы
Для работы приложения необходим установленный ansible. Алгоритм работы следующий:
- введенный текст сохраняется в файл;
- выполняется команда ansible-vault encrypt\decrypt;
- зашифрованный\расшифрованный файл считывается и передается в поле вывода.
Первым делом нужно создать секрет:

Вводим имя ключа (имя будет видно всем пользователям) и сам ключ:

Если добавление ключа прошло успешно, появится сообщение об успешном выполнении:

Далее обновляем страницу, выбираем из списка нужный ключ, вводим в поле для расшифровки\зашифровки строку и нажимаем «Выполнить»:

Переменные GUI для ansible vault по умолчанию
OS_PROJECT_PATH=/opt/ans_vault — путь для хранения служебной информации. Папка должна быть создана в операционной системе. Так же пользователю, от которого запускается приложение, должны быть предоставлены права на запись в данную папку;
DATA_FILE=ans_vault_file.dat — имя файла для хранения секретов. Будет создан при запуске приложения;
JETTY_APP_PORT=8080 — порт, на котором будет поднят сервис;
JETTY_CONTEXT_PATH=/ — контекст, на котором будет доступен сервис. Например, приложение запустили на сервере с адресом 10.10.10.10, в этом случае url будет выглядеть так: http://10.10.10.10/.
Запуск приложения в docker на CentOS 7
Сначала устанавливаем docker и запускаем:
sudo yum install docker -y
sudo systemctl start docker
sudo systemctl enable docker
Создаем папку /opt/ans_vault:
sudo mkdir -p /opt/ans_vault
Запуск в самом простом варианте:
sudo docker run -d --rm \
-p 8080:8080 \
-v /opt/ans_vault:/opt/ans_vault \
ittxx/ansiblevaultgui:latest
Про ключи:
- run запустить контейнер;
- -d не зависеть от текущего терминала;
- —rm удалить контейнер после остановки;
- -p проброс порта 8080 на порт 8080 внутрь контейнера;
- -v монтирование директории /opt/ans_vault в директорию /opt/ans_vault внутрь контейнера. То есть, все что приложение будет писать внутри контейнера, сохранится на сервере в папке, указанной в директиве -v.
При обращении по url http://<ip адрес>:8080/ откроется запущенный сервис.
Страница проекта на DockerHub: https://hub.docker.com/r/ittxx/ansiblevaultgui
Запуск GUI для ansible vault через jar на CentOS 7
Устанавливаем java 1.8 и ansible:
sudo yum install java-1.8.0-openjdk -y
sudo yum install ansible -y
Скачиваем готовое java приложение AnsibleVaultGui-<version>.jar:
curl -o AnsibleVaultGui-0.0.1.jar https://ittx.ru/repository/public/AnsibleVaultGui/0.0.1/AnsibleVaultGui-0.0.1.jar
Создаем папку /opt/ans_vault:
sudo mkdir -p /opt/ans_vault
Предоставляем права пользователю, под которым будет запускаться приложение. Мне проще было сделать владельцем папки именно этого пользователя:
sudo chown user:user -R /opt/ans_vault
sudo chmod 755 -R /opt/ans_vault
Далее запускаем приложение:
java -jar AnsibleVaultGui-0.0.1.jar
INFO:..:JettyServer:..:main:..:Метод вызван
INFO:..:CommonVars:..:getJettyAppPort:..:Глобальная переменная JETTY_APP_PORT значение 8080
INFO:..:CommonVars:..:getJettyContextPath:..:Глобальная переменная JETTY_CONTEXT_PATH значение /
INFO:..:FileData:..:createDataFile:..:Метод вызван
INFO:..:CommonVars:..:getOsProjectPath:..:Глобальная переменная OS_PROJECT_PATH значение /opt/ans_vault
INFO:..:CommonVars:..:getPathConnector:..:Глобальная переменная PATH_CONNECTOR значение /
INFO:..:CommonVars:..:getDataFile:..:Глобальная переменная DATA_FILE значение ans_vault_file.dat
INFO:..:FileData:..:createDataFile:..:Data файл уже существует, создание не требуется
INFO:..:FileData:..:createDataFile:..:Метод завершен
INFO:..:JettyServer:..:main:..:Jetty запущен
INFO:..:JettyServer:..:main:..:Используемый порт приложения: 8080
INFO:..:CommonVars:..:getJettyContextPath:..:Глобальная переменная JETTY_CONTEXT_PATH значение /
INFO:..:JettyServer:..:main:..:Используемый context root: /
Запуск c настраиваемыми параметрами
Приложение будет запущено на порту 9098. Папка для хранения данных приложения /u01/jettyVault и контекст /vault, то есть приложение будет доступно по ссылке http://<ip адрес>:9098/vault.
Запуск в докере:
docker run -d --rm \
-p 9098:9098 \
-v /u01/jettyVault:/u01/jettyVault \
-e OS_PROJECT_PATH=/u01/jettyVault \
-e DATA_FILE=ans_vault_file.dat \
-e JETTY_APP_PORT=9098 \
-e JETTY_CONTEXT_PATH=/vault \
ittxx/ansiblevaultgui:latest
Запуск через jar:
export OS_PROJECT_PATH=/u01/jettyVault
export DATA_FILE=ans_vault_file.dat
export JETTY_APP_PORT=9098
export JETTY_CONTEXT_PATH=/vault
java -jar AnsibleVaultGui-0.0.1.jar