簡體   English   中英

廚師ruby_block執行導致錯誤

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM