puppet的hash合并函数

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 :
时间: 2024-10-13 20:52:05

puppet的hash合并函数的相关文章

数组合并函数,二维数组相同字段合并到一起。

一般从数据库中提取数据时,会遇到各种各样类型的数据,要求也不尽相同.自己这两天开发的时候遇到一个很纠结的问题,如下: 比如一个二维数组是这样的: Array ( [0] => Array ( [uid] => 231 [username] => 123456 [active] =>aaaa [transfer] =>1111 ) [1] => Array ( [uid] => 231 [username] =>123456 [active] => bb

php js css加载合并函数 宋正河整理

<?php //php js css加载合并函数 宋正河整理 //转载请注明出处 define('COMBINE_JS',true); define('COMBINE_CSS',true);   define('APPLICATION_JS_ROOT','E:/wwwroot/m/js/'); define('APPLICATION_CSS_ROOT','E:/wwwroot/m/css/');   define('SC_ROOT','E:/wwwroot/m/static_cache/');

mysql 多行(GROUP_CONCAT)和多列(CONCAT)的合并函数

1,多行合并:把查询的一行或者多行进行合并. SELECT GROUP_CONCAT(md.data1) FROM DATA md,contacts cc WHERE md.conskey=cc.id AND md.mimetype_id= 5 AND md.user_id=17: 利用函数:group_concat(),实现一个ID对应多个名称时,原本为多行数据,把名称合并成一行,如|1 | 10,20,20| 本文通过实例介绍了MySQL中的group_concat函数的使用方法,比如sel

?拆分与合并?函数

---拆分函数 1 当需要把一个字符串按某一分隔符分隔后,变为数据列,即把字符串行变为列,可以使用level关键字,例子: with t as (select 'a;b;c;d;e' as str from dual) select level, t.str, substr(t.str, 2 * (level - 1) + 1, 1) as str_signle from t connect by level <= length(t.str) - length(replace(t.str, ';

Oracle合并函数内容

--MINUS去差集,取第一个集合有的而第二集合没有的,并以第一个字段排序select t.bumenbm from T_HQ_BM t minus select b.bumenbm from t_hq_bm2 b --INTERSECT 取交集,取两个集合都有的,并按第一个字段排序 select t.bumenbm from T_HQ_BM t intersect select b.bumenbm from t_hq_bm2 b --UNION去重合并,去重复记录,并按第一个字段排序 sele

MYSQL 分组合并函数

MySQL中group_concat函数完整的语法如下:group_concat([DISTINCT] 要连接的字段 [Order BY ASC/DESC 排序字段] [Separator '分隔符']) 基本查询 mysql> select * from aa;+------+------+| id| name |+------+------+|1 | 10||1 | 20||1 | 20||2 | 20||3 | 200 ||3 | 500 |+------+------+6 rows in

Oracle函数之单列合并函数WM_CONCAT问题记录

不同版本的数据库直接此函数返回类型不一致导致程序映射错误: 1. 错误信息: Cause: java.sql.SQLSyntaxErrorException: ORA-01790: 表达式必须具有与对应表达式相同的数据类型 2.不同版本直接进行比较 2.1 10g测试如下 SELECT*FROM V$VERSION; SELECT WM_CONCAT(T.DNAME) FROM DEPT T 2.2 11g测试如下: 3.修复方法<使用TO_CHAR函数进行转换> SELECT TO_CHAR

Oracle函数--合并,替换,拼接,截取,查找

1.合并函数 wm_concat(column)wm_concat(列名),该函数可以把列值以","号分隔起来,并显示成一行.如果列值是中文的,则选择另一种方式: wm_concat(to_char(列名)) 例如下面例子: 执行下面SQL:select id,wm_concat(to_char(name)) name from testTable group by id; 可得到下面结果 2.替换函数 replace(原字段,"原字段旧内容","原字段新

SQL_wm_concat函数实验:实现字段合并

原创作品,出自 "深蓝的blog" 博客,欢迎转载,转载时请务必注明以下出处,否则追究版权法律责任. 深蓝的blog:http://blog.csdn.net/huangyanlong/article/details/41347109 wm_concat函数:字段合并函数 目标:根据某字段相同值,实现其它某字段合并 [实验] 使用实验scott用户下的emp表 SQL> select * from emp; --先来查看一下emp表的全部内容 EMPNO JOB