Завершение PUT с использованием заголовка токена аутентификации для мезосферы завершается неудачно без eval - PullRequest
0 голосов
/ 22 октября 2018

РЕДАКТИРОВАТЬ:

Мне удалось заставить его работать с

response=$(
  curl -k -X PUT -d "$marathon_payload" --write-out %{http_code} --silent --output "$tmp"\
       -H "Authorization: token=$dcos_token" -H "$header_content_type"  $app_id_url
)

Одиночные кавычки были причиной проблемы.Потребовалось несколько вращений, но все хорошо.

МОРАЛЬ: кавычки внутри значения не имеют значения, если значение правильно указано в кавычках, ЕСЛИ БЫ не оценивать все это, и я должен был это знать.Occam снова побеждает.

end edit

Я начинаю развертывание микросервисов в Mesosphere с помощью curl, но это не удастся без использования eval.С тех пор как я недавно унаследовал этот код, я пытался вычистить eval из него просто по привычке, но это мешает мне.

Сценарий инициирует развертывание с помощью

response=$(
 eval curl -k -X PUT -d "'$marathon_payload'" --write-out %{http_code} --silent --output $tmp\
       -H "'Authorization: token=$dcos_token'" -H "'$header_content_type'" $app_id_url
)

Если он получает 200 или 201, он зацикливает curl для эффективного просмотра страницы развертываний до исчезновения запроса.

chkDeploy() { rm -f $tmp;
  eval curl -k -X GET --silent --write-out %{http_code} --silent --output $tmp\
            -H "'Authorization: token=$dcos_token'" -H "'$header_content_type'" $deployments_url
}
response=$( chkDeploy )

$dcos_token - строка в кодировке base64.

Затем он проверяет сервис с помощью другого цикла curl на информационной странице, чтобы проверить номер версии. Этот работает нормально, без оценки.

chkCode() {
  curl -k -X GET --write-out %{http_code} --silent --output $tmp $info_url;
}
response=$( chkCode )

Первые два возвращают 401, ошибка аутентификации.Я предполагаю, что цитирование аутентификационного токена отключено.

1 Ответ

0 голосов
/ 22 октября 2018

Нет смысла использовать eval здесь;вам просто нужно правильно процитировать аргументы -H.

response=$(
  curl -k -X PUT -d "$marathon_payload" \
     --write-out %{http_code} \
     --silent --output "$tmp" \
     -H "Authorization: token=$dcos_token" \
     -H "$header_content_type" "$app_id_url"
)
...