4

Chef と Ruby は初めてです

コマンド ラインで 2 つの変数を Chef に渡し、これらの変数をレシピで使用できるようにする必要があります。

これらの値をキャプチャして Chef で取得するにはどうすればよいですか?

私はこのようなものが必要です:

before_deploy command 
  execute param1 param2
deploy{ param1/param2}

コマンドラインから実行時にその値を取得しますparam1param2

4

3 に答える 3

7

実行してマシンをプロビジョニングする場合

chef-solo

また

chef-client

これらのコマンドに、レシピに表示される引数を指定することはできません。Chef レシピは属性でのみ機能します。良いこと (またはあまり良くないこと) は、さまざまな場所 (ロール、ノード、環境、および json ファイル) から属性を設定できることです。

あなたの要求に最も近い回避策は

  • マシン上に json ファイルを作成する
  • 実行時に渡すchef-clientか、chef-solo
  • レシピで属性を使用する

例: Apache 構成。

json ファイルを作成します: my_attrs.json

{ 
  "apache": {
    "listen_port": "81",
    "listen_path": "/myapp"
  }
}

次に、それらをレシピで使用します。

node[:apache][:listen_port]
node[:apache][:listen_path]

実行chef-clientまたはフラグchef-solo付き。-j

chef-solo -j my_attrs.json

my_attrs.json がリモート サーバー上にある場合は、URL を指定できます。

chef-solo -j http://remote.host/path/my_attrs.json
于 2013-02-06T18:57:15.687 に答える
0

ファイルの名前が example.rb の場合

ruby example.rb argument1 argument2

それで

ARGV.each do|a|
  puts "Argument: #{a}"
end

出力:

Argument: argument1
Argument: argument2
于 2013-02-06T14:04:36.147 に答える
0

コマンドを呼び出すことで、レシピ内に変数を設定できます

nodename = `cat /etc/chef/client.rb | grep "node_name" | sed -e 's/\<node_name\>//g' | sed '/^$/d;s/[[:blank:]]//g' | sed 's/\"//g'`

そして、変数を他のシェフブロックに使用します

execute "echo nodename for node #{nodename}"
 command "echo #{nodename}"
 action :run
 only_if {nodename == "node1"}
end

これにより、シェフサーバーに要求することなく、 client.rb ファイルから node.name 属性が取得されます。

于 2014-12-17T23:23:27.987 に答える