puppet函數 多層路徑轉換數組


1、此函數用於將一個不確定長度的路徑拆分成一個數組,可接受兩個參數:

 1.1 arg1: 一個有效的絕對路徑字符串[目前未做數據類型有效性檢查判斷]

 1.2 arg2: 一個有效的數字,用於確認哪一部分是需要puppet創建的[[可選]未做邏輯有效性判斷,譬如傳遞數字大與路徑的有效層級數是不合理]

2、直接放在模塊對應的lib/puppet/parser/functions即可,這裏筆者直接放在stdlib的lib/puppet/parser/functions目錄下

3、未做數據類型以及邏輯錯誤判斷(譬如arg[2]的取值範圍)

4、代碼和簡單使用說明如下:


Code:

module Puppet::Parser::Functions
  newfunction(:path_to_array, :type => :rvalue) do |args|

    res = args[0]
    
    array = []
    array.push(args[0])

    if args.size == 1 
      while res != '/' do
        res = File.dirname(res)
        array.push(res) if res != '/'
      end
    elsif args.size == 2 
      e_count = args[1] - 1
      e_count.times do
        res = File.dirname(res)
        array.push(res) if res != '/'
      end
    end

    return array
  end
end

# vim: set ts=2 sw=2 et :


Usage: 

1、vim test.pp

$aaa=['/aaa/bbb/ccc/ddd', 2]

$bbb=path_to_array($aaa[0])
$ccc=path_to_array($aaa[0], $aaa[1])

notify{ 'result_$bbb': message => [ $bbb ] }
notify{ 'result_$ccc': message => [ $ccc ] }

2、puppet apply test.pp

Notice: Compiled catalog for puppet.mos.com in environment production in 1.03 seconds
Notice: /aaa/bbb/ccc/ddd /aaa/bbb/ccc /aaa/bbb /aaa
Notice: /Stage[main]/Main/Notify[result_$bbb]/message: defined 'message' as '/aaa/bbb/ccc/ddd /aaa/bbb/ccc /aaa/bbb /aaa'
Notice: /aaa/bbb/ccc/ddd /aaa/bbb/ccc
Notice: /Stage[main]/Main/Notify[result_$ccc]/message: defined 'message' as '/aaa/bbb/ccc/ddd /aaa/bbb/ccc'
Notice: Finished catalog run in 0.60 seconds


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章