码迷,mamicode.com
首页 > 其他好文 > 详细

puppet的hash合并函数

时间:2015-09-30 14:39:50      阅读:302      评论:0      收藏:0      [点我收藏+]

标签:create_resources   puppet   函数   

puppet官方提供的create_resources函数的参数生成版,主要使用场景用以转换对应传递的hash字段给erb模板使用.


# 相关代码的github地址,传送门如下:

代码: hash_merge.rb

erb部分的使用,可参考笔者前阵子的rsync管理模块的 类引用erb迭代



函数文件: hash_merge.rb  函数注释部分写在代码中了,因此直接上代码如下:

module Puppet::Parser::Functions
  newfunction(:hash_merge, :type => :rvalue, :doc => <<-EOS

*Examples:*
  $ddd = {‘t1‘ => ‘aa‘, ‘t2‘ => ‘ab‘}
  $ttt = {
     ‘key_1‘ => { ‘t3‘ => ‘a1‘},
     ‘key_2‘ => { ‘t1‘ => ‘zz‘, ‘t3‘ => ‘a8‘ }
  }
  hash_merge($ttt, $ddd)

Would result in: "
  {
    ‘key_1‘ => { ‘t3‘ => ‘a1‘, ‘t1‘ => ‘aa‘, ‘t2‘ => ‘ab‘ }, 
    ‘key_2‘ => { ‘t1‘ => ‘zz‘, ‘t3‘ => ‘a8‘, ‘t2‘ => ‘ab‘ }
  }
"
    EOS
  ) do |arguments|
      
     # Technically we support two arguments but only first is mandatory ...
     raise(Puppet::ParseError, "hash_merge(): Wrong number of arguments " +
       "given (#{arguments.size} for 1)") if arguments.size < 1
    
     res = arguments[0]
    
     unless res.is_a?(Hash)
       raise Puppet::ParseError, "hash_merge(): The argument must be a hash"
     end

     if arguments.size == 2
       t_hash = arguments[1] || {}
       res.each_key do |k|
         t_hash.each_key do |t|
           res[k][t] = t_hash[t] unless res[k].key?(t) 
         end 
       end
     end
     
     return res
  end
end
# vim: set ts=2 sw=2 et :


本文出自 “自强不息” 博客,谢绝转载!

puppet的hash合并函数

标签:create_resources   puppet   函数   

原文地址:http://mos1989.blog.51cto.com/4226977/1699509

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!