我目前正在测试一本新的厨师食谱,用于zabbix监视,并使用本食谱使我的第一个成功的'厨师'。但是,我被迫更改其中一个属性,因为它将从服务器更改为服务器。我决定使用数据袋,并且很难检索和分配属性。
这是数据袋的内容:
[user@workstation 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'] %>
当我尝试厨师时,我会收到以下错误并转储:
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.sormal分配有什么问题。我是厨师和Ruby的新手,所以我非常感谢您的帮助。我还应该注意,我无法使用方法 get_databag_item ;这种方法显然不存在?
data_bag('zabbix_psk')
返回包中项目名称的数组,而不是所有项目中的数据。您需要data_bag_item('zabbix_psk', 'psk_syslog')
,然后调整您对返回的值的使用。