Как отправить содержимое типа октет-потока с помощью плагина Cloudify REST - PullRequest
0 голосов
/ 03 апреля 2019

Используя последний плагин REST Cloudify, я пытаюсь отправить запрос с типом контента octet-stream.

Попробовал несколько способов отправки данных, но безуспешно

Мой шаблон REST выглядит так:

rest_calls:
  - path: /v2/projects/{{ PROJECT_ID }}/import?name={{ PROJECT_NAME }}
    method: POST
    headers:
        Content-type: application/octet-stream
        Content-Length: 28022
    payload:
        {{ PROJECT_BINARY }}
    response_format: json
    recoverable_codes: [400]
    response_translation: [project_info]
    response_expectation:
        - [ 'name', '{{ PROJECT_NAME }}' ]

И вот как были установлены параметры: выполнить

 params {u'PROJECT_ID': u'8c76f840-fb1f-401f-b348-22b432caeef2', u'PROJECT_NAME': u'isis', u'PROJECT_BINARY': u'504b03041400080000003757814e'} 
 template 
 templates/create_and_import.yaml

Я инициализирую параметр PROJECT_BINARY (и другие переменные), используя функцию get_input. В журнале Cloudify я вижу, что переменные установлены на правильное значение.

Однако при запуске рабочего процесса установки появляется следующая ошибка:

'install' workflow execution failed: RuntimeError: Workflow failed: Task failed 'cloudify_rest.tasks.execute' -> while constructing a mapping
  in "<string>", line 8, column 9:
            {{ PROJECT_BINARY }}
            ^
found unacceptable key (unhashable type: 'dict')
  in "<string>", line 8, column 10:
            {{ PROJECT_BINARY }}
             ^

1 Ответ

0 голосов
/ 04 апреля 2019

Можно использовать одно из возможных решений "prerender == true". Смотрите здесь . В таком случае мы визуализируем {{PLACEHOLDERS}}, а затем анализируем YAML. Это может быть хорошим решением для некоторых случаев. Он будет работать для любого контента, кроме разбитого JSON (незакрытые кавычки и подсказки) и контента с новыми строками.

Если вы можете использовать предварительно созданные файлы - вы можете попробовать использовать raw_payload. Смотри здесь .

Или как решение, которое можно проверить:

====
rest_calls:
 - path: /v2/projects/{{ PROJECT_ID }}/import?name={{ PROJECT_NAME }}
   method: POST
   headers:
       Content-type: application/octet-stream
       Content-Length: 28022
   payload: "{{ PROJECT_BINARY }}"
   response_format: json
   recoverable_codes: [400]
   response_translation: [project_info]
   response_expectation:
       - [ 'name', '{{ PROJECT_NAME }}' ]
====
...