Получение данных из post-запроса с помощью плагина Rundeck webhook

#json #post #devops #webhooks #rundeck

Вопрос:

Я пытаюсь получить данные с помощью плагина rundeck webhook, и для этого я использую команду curl:

 curl -X POST -d '{"name":"John", "age":30, "car":null}' https://rundeck_server/api/12/webhook/QSxTDYd08dcYxKh1R5YJNOPQvmSJH2Z8#Netbox_Job
 

В настройках плагина rundeck webhook я добавляю эти 2 переменные: ‘whkpayload’ для получения всех данных json и ‘name’ для получения только имени (в этом примере должен быть возвращен John):

 -whkpayload ${raw} -name ${data.name}
 

И, наконец, я показываю их с помощью этих строк:

 echo @option.whkpayload@
echo @option.name@
 

Я получаю пустой результат и не могу понять, почему. Кто-нибудь может мне помочь, пожалуйста?

Ответ №1:

После этого вам нужно использовать параметр, вызываемый whkpayload в вашем задании, и установить его как ${raw} в конфигурации webhook.

Я привел пример:

  1. Определение задания в формате YAML (с whkpayload опцией):
 - defaultTab: nodes
  description: ''
  executionEnabled: true
  id: 0fcfca07-02f6-4583-a3eb-0002276bdf2d
  loglevel: INFO
  name: HelloWorld
  nodeFilterEditable: false
  options:
  - name: age
  - name: car
  - name: name
  - name: whkpayload
  plugins:
    ExecutionLifecycle: null
  scheduleEnabled: true
  sequence:
    commands:
    - description: command step
      exec: echo "name ${option.name} - age ${option.age} - car ${option.car} - payload
        ${option.whkpayload}"
    - description: inline-script step
      fileExtension: .sh
      interpreterArgsQuoted: false
      script: echo "name @option.name@ - age @option.age@ - car @option.car@ - payload
        @option.whkpayload@"
      scriptInterpreter: /bin/bash
    keepgoing: false
    strategy: node-first
  uuid: 0fcfca07-02f6-4583-a3eb-0002276bdf2d
 
  1. Конфигурация webhook.
  2. Веб-хук, вызываемый из cURL:
 curl -H "Content-Type: application/json" -X POST -d '{"field1":"John", "field2":30, "field3":"chevy"}' http://localhost:4440/api/40/webhook/0vBZjWWrnXWvqENEdxkn0JRvjn5R63J0#MyWebhook
 
  1. Результат.

Комментарии:

1. Спасибо @MegaDrive68k, это подходит для этого варианта использования. Однако мне интересно, работает ли этот метод для получения списка словаря со случайным количеством записей каждый раз. например, мы получим 3 записи: [{"first_name": "Henry", "last_name": "Henry"}, {"first_name": "Lionel", "last_name": "Messi"}, {"first_name": "Cristianno", "last_name": "Ronaldo"}] в следующий раз мы получим только один раз: [{"first_name": "Henry", "last_name": "Henry"}] PS: я пытался получить всю запись с помощью переменной whkpayload, но это не сработало.

2. Я так не думаю, лучший способ в этом случае — повторить вызов curl с предложением «for», всегда передавая три параметра, определенные в webhook.