2016-05-23 4 views
0

Ruby on Railsアプリケーション(Chef::Knife::Ec2ServerCreate.new())からAWSで新しいインスタンスを起動できます。 JSON属性を設定しようとするまでうまく動作します。コマンドラインから設定して、knife.batを起動すると、動作します。 ec2_server_createを見ると、コマンドラインオプション--json-attributesは、シンボル:json_attributesにマップされています。私は、次のコードを使用して設定しようとしました:Windows、Ec2ServerCreate - Railsアプリケーションからナイフを実行するときにJSON属性を設定できない

Chef::Config[:knife][:json_attributes] = "{'NodeName' : 'Node001'}" 

を、私はエラーを取得する:はTypeError(整数にシンボルの無暗黙的な変換): とすぐに、私はこの単一の行をコメントとして、インスタンスが作成され、に登録シェフサーバーとレシピが実行中です。 最初のシェフクライアントのjson属性を設定する方法はありますか? PS サンプルコードは属性の定数値を示していますが、実際の値は動的に作成されます。

あなたが見つけることができるソースを見ると
/chef/knife/core/bootstrap_context.rb:188:in `[]=': no implicit conversion of Symbol into Integer (TypeError) 

を::

def first_boot 
    (@config[:first_boot_attributes] || {}).tap do |attributes| 
    if @config[:policy_name] && @config[:policy_group] 
     attributes[:policy_name] = @config[:policy_name] 
     attributes[:policy_group] = @config[:policy_group] 
    else 
     attributes[:run_list] = @run_list #THIS LINE CAUSES EXCEPTION 
    end 
    attributes.merge!(:tags => @config[:tags]) if @config[:tags] && [email protected][:tags].empty? 
    end 
end 

私は実行リストを設定し、エラーが発生し エラーメッセージとコード行。

+0

私は、ナイフをRubyライブラリとして使用することはサポートされていないという記録を述べます。ナイフへの唯一のパブリックインターフェイスは、それをコマンドとして実行しています。ブートストラップをサポートするRubyライブラリが必要な場合は、Fogを使用します。 – coderanger

+0

情報ありがとうございます。残念ながら、以前はこの情報が見つかりませんでした.Rails APIアプリケーションとしてRailsが選択されました。 ライブラリとしてサポートしない理由は何ですか? メソッドの実装の最上部にパラメータ解析がいくつかあります。 –

答えて

0

json_attributesは、文字列ではなくハッシュでなければならないという問題があります。 @run_listが失敗しているわけではありませんが、それは"{'NodeName' : 'Node001'}"[:run_list]です。あなたがその場で見ると、おそらく少しはっきりしているでしょう。

+0

残念ながら、動作しません。これは初めて動作しますが、連続して実行するたびに最初の実行の属性が取得され、属性も明示的に異なる値に設定されます。 それに加えて、最初にChef :: Config [:knife] [:architecture] **をx86_64に設定して実行し、アーキテクチャが設定されていることを除いて次の実行に失敗します。回避策として、Chef :: Config [:knife] [:architecture]をnilに設定しました。 json属性の値を取得するための回避策を見つけることができませんでした。 ナイフがライブラリとしてサポートされていない理由を理解しました。 "不安定な"状態で葉の設定を実行し、プロセスを閉じなければならないか??? –

+0

あなたが求めていることは分かりませんが、 '-j'フラグを付けて実行するシェフクライアントは、ノードオブジェクトに追加された属性を持ちます。一般的に、最初の実行時には、そのフラグを1回だけ使用します。 – coderanger

+0

私はRailsアプリケーションから多くのインスタンスを作成しています。 Railsアプリケーションの起動後に初めてインスタンスが作成されると、インスタンスが正しく作成されます。インスタンスが作成されるとすぐに、2番目のREST APIリクエストを実行して新しいインスタンスを作成します(新しいJSON属性セットを使用)。新しいインスタンスが作成されますが、属性は新しい値で上書きされません。属性は最初の実行からの値を持ちます。 Railsアプリケーションを再起動すると、すべて正常に動作します。 属性が一度設定されている場合、属性を上書きすることはできません。 簡単に再現できます。私はコードを投稿することができます。 –

関連する問題