API OpenXPKI настраивает рабочие процессы для вывода списков сертификатов через curl
Я изо всех сил пытаюсь получить несколько полезных выходных данных curl из API сервера openxpki rpc. Я возился с попытками настроить свои собственные рабочие процессы в /etc/openxpki/config.d/realm.tpl/workflow/def , но ни один из них не сработал. Вместо этого я попытался отредактировать базовый метод SearchCertificate :
action:
initialize:
class: OpenXPKI::Server::Workflow::Activity::Tools::SearchCertificates
param:
_map_cert_subject: "CN=[% context.common_name %],*"
order: notbefore desc
include_revoked: 0
include_expired: 1
limit: 50
input:
- common_name
validator:
- common_name
get_certificate_data:
class: OpenXPKI::Server::Workflow::Activity::Tools::SetContext
param:
_map_notbefore: "[% USE Certificate %][% Certificate.notbefore(context.cert_identifier) %]"
_map_notafter: "[% USE Certificate %][% Certificate.notafter(context.cert_identifier) %]"
_map_status: "[% USE Certificate %][% Certificate.status(context.cert_identifier) %]"
condition:
has_result:
class: Workflow::Condition::Evaluate
param:
test: $context->{cert_identifier}
validator:
common_name:
class: OpenXPKI::Server::Workflow::Validator::Regex
arg:
- $common_name
param:
regex: "\\A [a-zA-Z0-9-\\.\\:]+"
modifier: xi
field:
common_name:
name: common_name
required: 0
type: server
Моя цель здесь — получить список сертификатов с истекающим сроком действия без необходимости вводить в скрипт многочисленные имена хостов. К сожалению, этот рабочий процесс, похоже, не выводит несколько хостов, захваченных регулярными выражениями, например . .mydomain.com*, без common_name ничего не выводит (см. param:limit, field:required). Я также пробовал пользовательские параметры, такие как notafter , пока безрезультатно. Официальной документации также не хватает для пользовательских рабочих процессов. Я был бы очень признателен за любые указатели, привет!
РЕДАКТИРОВАТЬ Пример вывода из завитка:
curl -F "method=SearchCertificate" -F "common_name=hostname1" http://localhost:80/rpc
{"result":{"pid":8045,"id":0,"data":{"cert_identifier":"ZzWtdso_jTxpnDcb_cckUn5X6A0","status":"ISSUED","notafter":"2025-07-20T08:11:05","notbefore":"2022-07-20T08:11:05"},"proc_state":"finished","state":"SUCCESS"}}[09:52:40]
1 ответ
По умолчанию вstate
это определяется так
state:
INITIAL:
action:
- initialize > RESULT
RESULT:
autorun: 1
action:
- get_certificate_data > SUCCESS ? has_result
- global_noop > NORESULT ? !has_result
NORESULT: ~
SUCCESS: ~
Это означает, что сначала при инициализации мы запрашиваем один сертификат, а затем передаем его действию.
Если вы хотите получить список. Вам нужно удалитьlimit: single
, после этого упакуйте результат в массив и вызовитеget_certificate_data
для каждого элемента и упаковать его в результат. См. справочный пример revoke_workflow .