簡體   English   中英

木偶:所有自定義事實都會得到所有結果

[英]Puppet: all custom facts gets all results

我正在嘗試在Puppet中找到一種方法來獲取FreeBSD存儲服務器的當前zpool容量數字,將其存儲在自定義事實中,並在容量達到“過高”水平時生成警報。 到目前為止,與我發現的問題最接近的匹配是:使用: Facter返回多個自定義事實

那使我想到了這個解決方案:

operatingsystem = Facter.value('operatingsystem')
case operatingsystem
when "FreeBSD"

  present_zpools = IO.popen('zpool list -H -o name').read.chomp            
  if ! present_zpools.empty?

    Facter.add(:zpools) do
      setcode do
        zpools = IO.popen('for i in $(zpool list -H -o name); do echo $i; done').read.chomp.split("\n")
      end
    end

    def addZpoolCapacityFact(zpool)
      zpool_capacity = IO.popen('zpool get -H -o value capacity #{zpool}').read.tr('%','').chomp

      Facter.add("capacity_" + zpool) do
        setcode do
          zpool_capacity
        end
      end

    end                                                                                                    

    zpools = Facter.value(:zpools)
    zpools.each do |zpool|
      addZpoolCapacityFact(zpool)
    end

  end

end

但是並沒有產生我所期望的結果,例如:

capacity_pool1: 10 30
capacity_pool2: 10 30

當我真的期望:

capacity_pool1: 10
capacity_pool2: 30

我究竟做錯了什么?

好,解決了!

問題是我在同一腳本中兩次使用IO.popen,即使我嘗試對變量進行nil操作,我認為,應用於變量'zpools'的第一個拆分函數也運行在'zpool_capacity'上,這使得結果看起來像:

"capacity_pool1":"10\n12","capacity_pool2":"10\n12"

注意數字之間的“ \\ n”嗎? 我敢肯定,有一種可以多次使用IO.popen的Ruby方法,但是我不知道如何,所以我只更改了命令以使用普通反引號(`)執行,這是工作代碼:

operatingsystem = Facter.value('operatingsystem')
case operatingsystem
when "FreeBSD"

  present_zpools = `zpool list -H -o name`.chomp
  if ! present_zpools.empty?

    Facter.add(:zpools) do
      setcode do
        zpools = `for i in $(zpool list -H -o name); do echo $i; done`.chomp.split("\n")
      end
    end

    def addZpoolCapacityFact(zpool)
      zpool_capacity = `zpool get -H -o value capacity #{zpool}`.tr('%','').chomp

      Facter.add(zpool + "_capacity") do
        setcode do
          zpool_capacity
        end
      end

    end                                                                                                    

    zpools = Facter.value(:zpools)
    zpools.each do |zpool|
      addZpoolCapacityFact(zpool)
    end

  end

end

現在結果看起來像我期望的那樣:

pool1_capacity: 10
pool2_capacity: 30

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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