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
时间: 2024-10-20 20:15:20

puppet函数 多层路径转换数组的相关文章

使用指针形式向函数传递多维数组并在函数内部使用指针形式对多维数组进行引用和修改

定义一个double型二维数组A和另一个同等尺寸的double空二维数组B,编写一个函数将A中的数据复制到B中.并测试该程序. 1 #include <stdio.h> 2 void copy_ptr(const double (*s)[12],double (*tar)[12],int row,int col); 3 int main(void){ 4 const double rain[5][12]={ 5 {4.3,4.3,4.3,3.0,2.0,1.2,0.2,0.2,0.4,2.4,

Puppet函数介绍(十八)

puppet函数 puppet函数主要用途是完成一个功能的集合,puppet的函数很多,只例举常用的几个. define函数 define函数主要用于创建自定义函数,define支持参数但不支持继承.通常可以通过define函数将多个资源整合为一个资源. define函数示例(crontab计划任务模块): 新建cron模块,依次建{templates,manifests,lib,files}文件夹,模块资源清单文件manifests下必须有init.pp文件,定义此模块的类且类名唯一. ini

C++_第七章函数的基本知识_求阶乘的子函数_ 函数参数类型为数组_ 求数组内所有元素和、部分元素和的方法_实现了先从键盘输入到一个数组中,再用for循环取读出数组中的元素 for循环也可以用break来结束循环的

/* 第七章函数的基本知识 */ /*01)c++对于返回值有一定的限制:可以是常量.变量.指针.结构对象或表达式,但不可以是数组02)c++返回数组的方法:将数组作为结构会对象组成部分来返回03)函数遇到return则结束该函数04)如果一个函数的两房额参数类型相同,则必须分别制定每个参数的类型,而不能像声明常规变量那样,将声明组合在一起05)*/ //本代码注意double类型的写法以及double和int类型数据的转换 1 #include <iostream> 2 3 void che

24、输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。

输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变.  思路:新建一个数组先把原数组中的奇数push进去再把偶数push进去,然后用新数组数据覆盖原数组即可 复杂度O(n),用空间换时间 class Solution { public:     void reOrderArray(vector<int> &array) {         vector<int&

黑马程序员——c语言学习心得——函数传递二维数组

黑马程序员——c语言学习心得——函数传递二维数组 -------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 一.定义指针的时候一定要初始化.   变量定义的时候给变量初始化,这是保证不出错的一个很好的习惯.尤其是在指针的使用上,如果我们没有给指针初始化,就会出现野指针,该指针的指向并不是我们所希望的,一旦错误的释放了这个指针,就会发生内存的访问.那么如何初始化指针变量呢,一般有以下几种方法:   1.初始化空指针   int* pInteger=N

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

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

android Uri获取真实路径转换成File的方法

Uri uri = data.getData(); String[] proj = { MediaStore.Images.Media.DATA }; Cursor actualimagecursor = managedQuery(uri,proj,null,null,null); int actual_image_column_index = actualimagecursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA); actua

【C/C++学院】0822-类型转换函数与构造转换函数/类的继承/类的继承以及区别/继承静态成员与静态函数//继承实现代码重用/单继承QT案例/多继承简介以及实战/Gpu编程

类型转换函数与构造转换函数 #include<iostream> class fushu { public: explicit fushu(int num)//避免隐式转换,引发歧义 { x = num; y = num; } void print() { std::cout << x << "+" << y << "i" << std::endl; } operator int(); //不支

回调函数实现对整形数组和字符串的排序

(一)冒泡排序实现对整形数组的排序 在以前,我们只会使用冒泡排序的方法对整行数组进行排序,简单的两个for循环,外层循环控制循环次数,内层循环控制比较次数,就像下面代码,便可实现: #include<stdio.h> int main() { int arr[10]={11,9,8,7,6,5,4,3,2,1}; int i=0; int j=0; int tmp=0; for(j=0;j<10;j++) { for(i=0;i<10-j;i++) if(arr[i]>arr