#opengrok
Вопрос:
Согласно документации, API REST OpenGrok не проходит проверку подлинности на локальном хосте, но требует аутентификации из любого другого приложения.
В моей настройке K8S я хочу запустить OpenGrok (стандартный opengrok/docker:1.7
) в качестве контейнера, но для самостоятельного обновления/проверки исходного кода, а также для повторной индексации после обновления исходного кода. У меня работает opengrok
контейнер и src-update
контейнер. Они делят 3 тома ( /opengrok/src
, /opengrok/etc
, /opengrok/data
).
opengrok
Контейнер настроен со REST_TOKEN
значением и SYNC_PERIOD_MINUTES
значением 0
для отключения индексирования. src-update
Контейнер запускает и обновляет кодовые базы, а затем выполняет opengrok-indexer
повторную индексацию данных и уведомляет (с помощью -U
опции) opengrok
контейнер об изменении индекса. При opengrok-indexer
запуске он индексируется нормально, но завершается ошибкой HTTP 401 при попытке ПОМЕСТИТЬ обновленную конфигурацию на сервер opengrok:
2021-12-08 16:01:03.980 0000 SEVERE t1 Indexer.sendToConfigHost: Failed to send configuration to http://opengrok-service:8080 (is web application server running with opengrok deployed?) java.io.IOException: InboundJaxrsResponse{context=ClientResponse{method=PUT, uri=http://opengrok-service:8080/api/v1/configuration?reindex=true, status=401, reason=Unauthorized}} at org.opengrok.indexer.configuration.RuntimeEnvironment.writeConfiguration(RuntimeEnvironment.java:1462) at org.opengrok.indexer.index.Indexer.sendToConfigHost(Indexer.java:1157) at org.opengrok.indexer.index.Indexer.main(Indexer.java:383)
Это команда, которую я выполняю в контейнере обновления исходного кода. Значение среды OPENGROK_REST_TOKEN
-это то же значение, которое передается в контейнер opengrok, REST_TOKEN
что и .
opengrok-indexer -J=-Djava.util.logging.config.file=/opt/opengrok/repo-mgmt/config/opengrok-logging.properties -a /opengrok/lib/opengrok.jar -- --progress -c /usr/local/bin/ctags -s /opengrok/src -d /opengrok/data -H -S -G --token $OPENGROK_REST_TOKEN -W /opengrok/etc/configuration.xml -U http://opengrok-service:8080
Я посмотрел /usr/local/tomcat/webapps/ROOT/WEB-INF/web.xml
файл в контейнере opengrok и не вижу там никакой конфигурации безопасности.
Что я делаю неправильно или чего не хватает в моей конфигурации? Каков наилучший способ обеспечить проверку подлинности, необходимую для REST API, из контейнера обновления исходного кода?
Ответ №1:
Вам нужно установить токен в configuration.xml файл (параметр-W) со следующими:
lt;void property="authenticationTokens"gt; lt;void method="add"gt; lt;stringgt;TOKENlt;/stringgt; lt;/voidgt; lt;/voidgt;