2015-12-21 4 views
0

Когда я пытаюсь развернуть виртуальную машину с помощью API развертывания Apache CloudStack 4.6.0, он отлично работает без специальных параметров. Когда я хочу развернуть виртуальную машину с пользовательскими cpuSpeed, vCPU и памятью, он выдает ошибку, приведенную ниже.Ошибка развертывания виртуальной машины Apache Cloudstack

Платформа: CloudStack 4.6.0.

ОШИБКА: "не удалось проверить учетные данные пользователя и/или подпись запроса"

Ниже просьба CloudStack без пользовательского размещения через приложение (рабочей):

apiKey=lGMCRQI6maiFCDsKuZAHI63u1upxCrUnNrWbXAnUZZE_qyEv7ozK_yNzYvNfXgX5x5mRcedIKynzSyLA5hf8yg&command=deployVirtualMachine&displayname=admin&displayvm=true&domainid=3776269a-949d-11e5-b907-e06995a35804&keyboard=us&name=priya&networkids=7efa5852-7e1f-4a26-9351-00f9d863aa3e&projectid=527ebed8-23f6-4c9f-9ee0-05926b035b1e&response=json&serviceofferingid=cb9fe060-1870-4bd0-8c0e-3980107acce6&templateid=96e753af-5e1a-4bf9-a28a-9f609ee06202&zoneid=af3ed220-7e36-4459-a6ea-9587a18246c0&signature=FU4xL%2FdGsYoihfWdvT%2FPrwwzthQ%3D 

И ниже под запрос к CloudStack С пользовательским предложением через приложение (Не работает):

apiKey=lGMCRQI6maiFCDsKuZAHI63u1upxCrUnNrWbXAnUZZE_qyEv7ozK_yNzYvNfXgX5x5mRcedIKynzSyLA5hf8yg&command=deployVirtualMachine&details%5B0%5D.cpuNumber=3&details%5B0%5D.cpuSpeed=1500&details%5B0%5D.memory=512&hypervisor=KVM&iptonetworklist%5B0%5D.networkid=7efa5852-7e1f-4a26-9351-00f9d863aa3e&response=json&serviceofferingid=a1613485-8cdf-4d84-8b97-8c2695128a2f&templateid=37acb430-949d-11e5-b907-e06995a35804&zoneid=af3ed220-7e36-4459-a6ea-9587a18246c0&signature=FU4xL%2FdGsYoihfWdvT%2FPrwwzthQ%3D 

Возвращается Ошибка: «не удалось проверить учетные данные пользователя и/или подпись запроса»

Значения отображаются так же, как формирование команды CloudStack строки. Он генерирует одну и ту же подпись для обоих. Заметная разница в CloudStack - cpuSpeed ​​и cpuNumber. Как в скорости, так и в номере, первая буква в верхнем регистре. Во время генерации подписи мы преобразуем все значения в нижний регистр.

+0

Любой удачу на получение источника проблемы? –

ответ

0

Mathar!

Я считаю, что вы ошибочно использовали предыдущую подпись во втором запросе, так как подпись HMAC1 не может быть одинаковой с разными параметрами. В любом случае детали [0] .xxx должны влиять на окончательную подпись

Вы можете использовать this manual для генерации подписи для каждого вызова API (Python).

В коротком алгоритме выглядит следующим образом:

  1. Получить список всех параметров запроса
  2. параметры URL закодировать и значение
  3. Создать пары строку, которая выглядит как param1 = Foo & param2 = бар & param3 = foobar (из запроса)
  4. Получить хэш этой строки с использованием алгоритма HMAC1
  5. Кодировать строку результата с использованием Base64 enc Одинг
  6. Добавить получившуюся строку в конец запроса + & подписи = RESULTSIGNATURESTRING '