【问题标题】:How to execute curl command in Chef recipe?如何在 Chef 食谱中执行 curl 命令?
【发布时间】:2015-07-31 12:21:47
【问题描述】:

我有一个 curl 命令,它是肥皂请求,并且带有基本身份验证之类的标头。我需要在 Chef recipe 中实现这个 curl 以实现自动化。所以每次我执行 chef 脚本时,我都会看到这个 curl 也在执行。 请告诉我在厨师脚本中添加 curl 命令的语法。

【问题讨论】:

  • 你的最终目标是什么?这与幂等性思想相矛盾。您是否希望对您的厨师运行进行某种报告/监控?除了执行命令,你还可以使用 Ruby 的 http 客户端。
  • 纠正 Stephen,考虑使用 ruby​​ 调用外部 REST API 并将其包装为轻量级资源。另一方面,如果您只是调用外部服务来设置一些节点数据,那么真正好的方法是将 REST 服务作为 ohai 插件调用。许多选项更详细,可以提供更好的建议。

标签: curl chef-infra


【解决方案1】:

您可以在厨师食谱中使用 bash 命令

bash 'install_something' do
  user 'root'
  cwd '/tmp'
  code <<-EOH
  wget http://www.example.com/tarball.tar.gz
  tar -zxf tarball.tar.gz
  cd tarball
  ./configure
  make
  make install
  EOH
end

这里有这个例子:https://docs.chef.io/resource_bash.html。就叫你 curl 命令吧。 请记住,这不是真正的 Chef 方式。只有在没有其他转义的情况下才应使用 bash 资源。

【讨论】:

  • 但是应该避免使用bash 资源。通常,有一种“厨师的方式”来做事。
  • @StephenKing 你是完全正确的。而且几乎总是有一种厨师的方式。
  • 理想情况下,您将能够添加一个防止它每次运行的警卫(尽管我意识到这是 OP 要求的)。添加一个有用的后卫至少可以让它更接近“厨师之道”。
【解决方案2】:

您不能使用 http_request 资源来执行此操作吗?

类似:

http_request 'SOAP request' do
  url "http://www.example.com/example"
  message <xml request>
  action :post
end

【讨论】:

  • 有没有办法,我可以看到厨师食谱运行了什么 curl 命令?
【解决方案3】:

一个简单的command 应该可以工作,类似于此。

  command "curl -m 5 -i -X POST -d \"payload={}\" http://www.some.place/here"

请参阅 curl 的手册页以了解如何添加 http 标头。

【讨论】:

    【解决方案4】:

    您也可以使用 bash 资源。例如

    bash 'make curl request' do
      cwd ::File.dirname(src_filepath)
      code <<-EOH
        curl -L https://github.com
        EOH
    end
    

    cwd 是运行 bash shell 的目录。

    【讨论】:

      猜你喜欢
      • 2014-11-06
      • 2012-10-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-13
      • 2016-05-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多