2016-08-16 4 views
0

テンプレートファイルにサーバーの外部IPを設定する必要があります。サーバーはNATの後ろにありますので、私は静的ファイルを使用して更新します。このファイルにはローカルIPと関連する外部IPが含まれます。以下にその例を示します。変数を使ってテンプレートに値を設定する

しかし、私は変数値を返し、それをテンプレートファイルに適用する方法が必要です。私はちょうどこれについて行く方法に立ち往生しています。私は私のアトリビュートファイルでこれをローカルIPを静的ファイルに参照していると設定していると思います。

サーバーファイル:

192.168.10.1=88.54.45.15 
192.168.10.2=88.54.45.16 
192.168.10.2=88.54.45.17 
192.168.10.3=88.54.45.18 

現在のテンプレートファイル(これは正しくローカルIPに戻しますので、私は外部IPを微その後、ルックアップとしてこれを使用する必要があります):

data="local_ip_v4=<%= @local_ip_v4 %>" 
data="external_sip_ip=UNSURE WHAT TO PUT HERE"/ 

私は今、以下のデータバッグを使用しています:

データバッグはフリーズスイッチと呼ばれ、以下を含みます。
{ "192.168.1.1": { "extip": "88.54.45.15" }, "192.168.1.2": { "extip": "88.54.45.16" }, "192.168.1.3": { "extip": "88.54.45.17" }, "192.168.1.4": { "extip": "88.54.45.18" }, "192.168.1.5": { "extip": "88.54.45.19" }, "192.168.1.6": { "extip": "88.54.45.20" }, "192.168.1.7": { "extip": "88.54.45.21" }, "192.168.1.8": { "extip": "88.54.45.22" }, "id": "extaddress" }

レシピがあります

data = data_bag_item('freeswitch', 'extaddress') 
template "/usr/local/freeswitch/conf/vars.conf.xml" do 
source "vars.conf.xml.erb" 
mode 0644 
variables(:exitip => data[[node['freeswitch']['local_ip']]['extip']]) 
end 

それは私が悩みの書式を抱えている変数セクション。参考までに、私は['freeswitch'] ['local_ip']という属性を持っています。私は今、受信

エラーは次のとおりです。

Recipe Compile Error in /var/chef/cache/cookbooks/freeswitch/recipes/default.rb 
================================================================================ 

NoMethodError 
------------- 
undefined method `[]' for nil:NilClass 

Cookbook Trace: 
--------------- 
    /var/chef/cache/cookbooks/freeswitch/recipes/default.rb:31:in `block in from_file' 
    /var/chef/cache/cookbooks/freeswitch/recipes/default.rb:28:in `from_file' 

Relevant File Content: 
---------------------- 
/var/chef/cache/cookbooks/freeswitch/recipes/default.rb: 

24: mode 0644 
25: end 
26: 
27: data = data_bag_item('freeswitch', 'extaddress')[node['freeswitch']['local_ip']] 
28: template "/usr/local/freeswitch/conf/vars.conf.xml" do 
29: source "vars.conf.xml.erb" 
30: mode 0644 
31>> variables(:exitip => data[node['freeswitch']['local_ip']]['extip']) 
32: end 

答えて

0

これを解決するために複数の方法があるかもしれません。取得し、テンプレート変数に渡すための簡単なものであるいくつかは、以下のとおりです。

  1. ストアペアデータ袋にレシピに応じて取得します。

    data_bag_item("a", "b")['192.168.10.1'] 
    
  2. を扱うキー値形式や使用ファイル内のいくつかのJSONファイルに保管してJSON宝石特定の値を抽出します。

    JSON.load(File.read("file.json"))['192.168.10.1'] 
    
  3. ストアプロパティファイルなどとファイル処理を使用してparseconfig特定の値を抽出する宝石 。

    ParseConfig.new("file.properties")['192.168.10.1'] 
    

あなたdatabag「extip」にアクセスするには、それは次のようになります。返信用

variables(:exitip => data[node['freeswitch']['local_ip']]['extip']) 
+0

おかげいますが、IPアドレスを指定しているが、私は私と私のレシピでこれを置くことができませんスクリプトが実行されるまでローカルIPを知らないでください。私が何かを逃していない限り? – jaseUK

+0

通常、ノード['ipaddress']をレシピで使用してマシンの内部IPを取得できます。そうしないと、ohaiデータをチェックインできます。 –

+0

私はdatabagを使用することに決めましたが、ノードIPではコード内で宣言する方法に問題があります。以下の変数を参照してください。 データ= data_bag_item( 'freeswitch'、 'extip') テンプレート "/usr/local/freeswitch/conf/vars.conf.xml" やる ソース "vars.conf.xml.erb" 変数( :exitip => data [node ['ipaddress'] ['extip']) end – jaseUK

関連する問題