如何在命令行中捕获值并添加到配方?

Mar*_*ama 4 ruby chef-infra

我是Chef和Ruby的新手

我需要在命令行上将两个变量传递给Chef,并在配方中提供这些变量.

我如何捕捉这些价值观并将其送到厨师手中?

我需要这样的东西:

before_deploy command 
  execute param1 param2
deploy{ param1/param2}
Run Code Online (Sandbox Code Playgroud)

param1param2从命令行运行时得到他们的价值观.

Dra*_*ter 7

通过运行配置机器时

chef-solo
Run Code Online (Sandbox Code Playgroud)

要么

chef-client
Run Code Online (Sandbox Code Playgroud)

您无法为这些命令提供任何参数,这些参数对于食谱是可见的.厨师食谱仅适用于属性.好的(或不那么好)是可以从许多不同的地方设置属性:角色,节点,环境和json文件.

与您的请求最接近的解决方法是

  • 在机器上创建一个json文件
  • 跑步时传递它chef-clientchef-solo
  • 使用配方中的属性

例如:apache config.

创建json文件:my_attrs.json

{ 
  "apache": {
    "listen_port": "81",
    "listen_path": "/myapp"
  }
}
Run Code Online (Sandbox Code Playgroud)

然后在你的食谱中使用它们:

node[:apache][:listen_port]
node[:apache][:listen_path]
Run Code Online (Sandbox Code Playgroud)

chef-clientchef-solo-j旗帜.

chef-solo -j my_attrs.json
Run Code Online (Sandbox Code Playgroud)

如果my_attrs.json在某个远程服务器上,那么您可以提供一个URL.

chef-solo -j http://remote.host/path/my_attrs.json
Run Code Online (Sandbox Code Playgroud)