[英]Chef ruby_block execution leads to error
我寫的一些chef
代碼有問題。 ruby塊中的shell命令總是先於其他所有命令執行。 只要未安裝該軟件包,該垃圾箱將不可用。 每一次以這種方式進行連鎖的嘗試都以失敗告終。
錯誤:
Errno::ENOENT
-------------
No such file or directory - icinga2
Cookbook Trace:
---------------
/var/tmp/cookbooks/hit_icinga2/recipes/icinga2_client.rb:25:in ``'
/var/tmp/cookbooks/hit_icinga2/recipes/icinga2_client.rb:25:in `block in from_file'
/var/tmp/cookbooks/hit_icinga2/recipes/icinga2_client.rb:23:in `from_file'
/var/tmp/cookbooks/hit_icinga2/recipes/default.rb:8:in `from_file'
Relevant File Content:
----------------------
/var/tmp/cookbooks/hit_icinga2/recipes/icinga2_client.rb:
18: package 'icinga2' do
19: action :install
20: end
21: end
22:
23: ruby_block 'name' do
24: # get Icinga version output
25>> get_icinga_version_information = %x[icinga2 -V]
26: #we clean up
27: #lines.first - just return first line of output
28: ##chomp - remove line break
29: #scan- match regex
30: #flatten - flatten array
31: #[n] - use array element number n
32: #to_s - convert to string
33: #split - split string at caracter
34: #gsub - search and replace
System Info:
------------
chef_version=13.6.4
platform=centos
platform_version=7.3.1611
ruby=ruby 2.4.2p198 (2017-09-14 revision 59899) [x86_64-linux]
program_name=chef-solo worker: ppid=7301;start=16:37:42;
executable=/opt/chefdk/bin/chef-solo
碼:
package 'icinga2' do
action :install
end
ruby_block 'detect_icinga_version' do
# get Icinga version output
get_icinga_version_information = %x[icinga2 -V]
#we clean up
#lines.first - just return first line of output
##chomp - remove line break
#scan- match regex
#flatten - flatten array
#[n] - use array element number n
#to_s - convert to string
#split - split string at caracter
#gsub - search and replace
#to_i - convert to integer
clean_icinga_version = get_icinga_version_information.lines.first.chomp.scan(/version: [^)]*/).flatten.to_s.scan(/[0-9\.-]+/)[0].to_s.split('-')[0].gsub('.', '').to_i
if clean_icinga_version < 280
icinga_pki_path = '/etc/icinga2/pki'
else
icinga_pki_path = '/var/lib/icinga2/certs'
end
end
任何想法如何做到這一點?
您還需要將代碼放在帶有block do ... end
。
您必須在下面的行中給出icinga2的完整路徑
get_icinga_version_information =%x [icinga2 -V]
或將此icinga2的父目錄添加到環境變量中
解決方案很有趣。 廚師拒絕適當的鏈接和設置條件。 它現在是一個Ohai插件,在安裝軟件包后會重新加載。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.