Chef と Ruby は初めてです
コマンド ラインで 2 つの変数を Chef に渡し、これらの変数をレシピで使用できるようにする必要があります。
これらの値をキャプチャして Chef で取得するにはどうすればよいですか?
私はこのようなものが必要です:
before_deploy command
execute param1 param2
deploy{ param1/param2}
コマンドラインから実行時にその値を取得しますparam1
。param2
Chef と Ruby は初めてです
コマンド ラインで 2 つの変数を Chef に渡し、これらの変数をレシピで使用できるようにする必要があります。
これらの値をキャプチャして Chef で取得するにはどうすればよいですか?
私はこのようなものが必要です:
before_deploy command
execute param1 param2
deploy{ param1/param2}
コマンドラインから実行時にその値を取得しますparam1
。param2
実行してマシンをプロビジョニングする場合
chef-solo
また
chef-client
これらのコマンドに、レシピに表示される引数を指定することはできません。Chef レシピは属性でのみ機能します。良いこと (またはあまり良くないこと) は、さまざまな場所 (ロール、ノード、環境、および 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
ファイルの名前が example.rb の場合
ruby example.rb argument1 argument2
それで
ARGV.each do|a|
puts "Argument: #{a}"
end
出力:
Argument: argument1
Argument: argument2
コマンドを呼び出すことで、レシピ内に変数を設定できます
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 属性が取得されます。