Как использовать переменные в шеф-ресурсе http_request - PullRequest
0 голосов
/ 20 марта 2020

Я использую ресурс http_request в рецепте шеф-повара, чтобы сделать http-запрос, требующий прокси-пользователя и пароля. Я сталкиваюсь с проблемой замены переменных, определенных в атрибутах или фактически любых переменных, например, следующий код работает нормально, где имя пользователя и пароль жестко запрограммированы.

http_request 'get-info' do
  url "http://host:8080/v123/orgs/abc"
  headers({ 'AUTHORIZATION' => "Basic #{ Base64.encode64('user1:pwd123')}",
    'Content-Type' => 'application/json'  }  )
  message ( "{ } " )
  action :get
end

Но если я использую переменные вместо жестко закодированных учетных данных, таких как после

u_name=node['mychef']['username']
pwd=node['mychef']['password']

http_request 'get-info' do
  url "http://host:8080/v123/orgs/abc"
  headers({ 'AUTHORIZATION' => "Basic #{ Base64.encode64('#{u_name}:#{pwd}')}",
    'Content-Type' => 'application/json'  }  )
  message ( "{ } " )
  action :get
end

тогда я получаю следующую ошибку

    ================================================================================
    Error executing action `get` on resource 'http_request[get-info]'
    ================================================================================

    Net::HTTPServerException
    ------------------------
    401 "Unauthorized"

Конечно, учетные данные не читаются должным образом. Оцените справку о том, как подставить переменные в ресурс шеф-повара http_request.

1 Ответ

0 голосов
/ 20 марта 2020

Тем временем я решил свой вопрос. Если я заранее создаю кодировку Base64 отдельно, как показано ниже, то я могу легко подставить значение в http_request

sys_admin_creds = Base64.encode64("#{node['mychef']['username']}:#{node['mychef']['password']}")

И тогда я смогу подставить значение, подобное следующему

headers({ 'AUTHORIZATION' => "Basic #{sys_admin_creds}",
    'Content-Type' => 'application/json'  }  )

Я думаю, что там могут быть другие способы решить эту проблему. Когда я напрямую подставляю значения в заголовки http_request, я думаю, что количество кавычек и двойных кавычек становится неуправляемым. Но я уверен, что это тоже можно исправить. Но пока я буду впереди своего решения. Если у кого-то есть лучшее решение, оставьте его. Так что мы всегда можем улучшить наших собратьев по сообществу:).

...