2017-12-14 19 views
1

私は現在、Zabbixの監視のための新しいシェフ料理の本を試しています。この料理の本を使って私の最初の成功した「シェフ」を持っていました。私はしかし、それはサーバーからサーバーに変更されるので、属性の1つに変更を加えなければなりませんでした。私はデータバッグを使用することにしましたが、私は属性の取得と割り当てに問題があります。ここでChef TypeErrorを解決するには:node.normalを使用して「Stringを整数に暗黙的に変換しない」?

は、データのバッグの中身です:

[[email protected] chef-repo]# knife data bag show zabbix_psk psk_syslog 
    WARNING: Unencrypted data bag detected, ignoring any provided secret options. 
    id: psk_syslog 
    psk: PSK 060 

私は、属性ファイルに属性を割り当てるのではなく、レシピにしませんでした: default.rb

keyvalue = data_bag('zabbix_psk') 
node.normal['zabbix_agentd']['psk_number'] = keyvalue['psk_syslog']['psk'] 

次にテンプレートに割り当てます:

TLSPSKIdentity=<%= node['zabbix_agentd']['psk_number'] %> 
0私はシェフしようとすると

は、私は次のようなエラーとダンプを受け取る:

TypeError 
--------- 
no implicit conversion of String into Integer 

Cookbook Trace: 
--------------- 
    /var/chef/cache/cookbooks/zabbix_agentd/recipes/default.rb:28:in `[]' 
    /var/chef/cache/cookbooks/zabbix_agentd/recipes/default.rb:28:in `from_file' 

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

21: # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 
22: # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
23: # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 
24: # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 
25: # THE SOFTWARE. 
26: 
27: keyvalue = data_bag('zabbix_psk') 
28>> node.normal['zabbix_agentd']['psk_number'] = keyvalue['psk_syslog']['psk'] 
29: 
30: case node['platform'] 
31: when 'centos', 'redhat' 
32: include_recipe 'zabbix_agentd::yum_repo' 
33: end 
34: 
35: package 'zabbix-agent' 
36: 
37: directory node['zabbix_agentd']['log_dir'] do 

System Info: 
------------ 
chef_version=13.6.0 
platform=centos 
platform_version=7.4.1708 
ruby=ruby 2.4.2p198 (2017-09-14 revision 59899) [x86_64-linux] 
program_name=chef-client worker: ppid=11127;start=14:18:48; 
executable=/opt/chef/bin/chef-client 


Running handlers: 
[2017-12-14T14:18:56-06:00] ERROR: Running exception handlers 
Running handlers complete 
[2017-12-14T14:18:56-06:00] ERROR: Exception handlers complete 
Chef Client failed. 0 resources updated in 07 seconds 
[2017-12-14T14:18:56-06:00] FATAL: Stacktrace dumped to /var/chef/cache/chef-stacktrace.out 
[2017-12-14T14:18:56-06:00] FATAL: Please provide the contents of the stacktrace.out file if you file a bug report 
[2017-12-14T14:18:56-06:00] ERROR: no implicit conversion of String into Integer 
[2017-12-14T14:18:56-06:00] FATAL: Chef::Exceptions::ChildConvergeError: Chef run process exited unsuccessfully (exit code 1) 

私はdefault.rbでnode.normal割り当てと間違って何を理解困難を抱えています。私はシェフとRubyの両方に新しいので、本当に助けに感謝します。私はまた、メソッドを使用することができなかったことに注意する必要がありますget_databag_item;そのメソッドは存在しませんでしたか?

答えて

1

data_bag('zabbix_psk')は、すべてのアイテムのデータではなく、バッグ内のアイテムの名前の配列を返します。代わりにdata_bag_item('zabbix_psk', 'psk_syslog')が必要で、返された値の使用方法を調整します。

+0

お世話になりました。理由は分かりませんが、data_bag_item()メソッドを最後に使用したときにはうまくいきませんでした。私はdata_bag()がうまくいかなかった理由を知ることができます。 – Bernard2324

関連する問題