技术头条 - 一个快速在微博传播文章的方式     搜索本站
您现在的位置首页 --> 系统运维 --> puppet运维之使用自定义函数

puppet运维之使用自定义函数

浏览:2594次  出处信息

[导读]

上一篇puppet rsync使用教程,sky提到自定义函数,以及自定义provider和fact.本小节主要是介绍在puppet

下如何编写自定义函数,自定义函数在puppet 使用过程中有什么需要注意的地方,以及puppet 自定义函数是

如何执行的等,要知道答案么,答案均来自puppet 官网<<Writing your own functions>>,主要是sky,对ruby的语法

不是很了解,估大家请见谅.let’s go!

[正文]

1. puppet是如何加载自定义函数的,要注意哪些地方?

答: puppet 下自定义函数会加载以下几个路径下的,并且后缀名为.rb的文件.

  • $libdir/puppet/parser/functions
  • $moduledir/<modulename>/lib/puppet/parser/functions
  • puppet/parser/functions sub-directories in your Ruby $LOAD_PATH

备注:libdir以及moduledir大家都应该知道吧,不知道使用如下命令:

1
2
3
4
5
6
puppetmasterd --configprint libdir
puppetmasterd --configprint  modulepath
  
那么ruby的$LOAD_PATH的值又是如何查看的呢? 
  
可以使用ruby的irb来查看:
1
2
3
#irb
irb(main):001:0> $LOAD_PATH
=> ["/usr/local/lib/site_ruby/1.8",...]
1
sky觉得$LOAD_PATH指的是Ruby读取外部文件的一个环境变量,这点和windows的环境变量差不多吧.

NOTE: In Puppet versions prior to 0.25.0, the lib directory underneath $moduledir/<modulename>/ was named plugins.

我采用第二种方法,如下面编写的get_var,就定义在$moduledir/<modulename>/lib/puppet/parser/functions/get_var.rb中

  • function的名字与文件名最好一致,如你也写了一个get_var,那文件也应该是get_var.rb
  • function中使用客户端facter收集到的参数,应该这样lookupvar(‘fact_name’)
  • function的返回状态有两种statements 和 rvalues,如果你有返回值,应定义 :type ⇒ :rvalue
1
2
3
4
函数是在服务端被执行的,它调用的各种资源包括文件等,应在服务端存在.
  
例子:
把参数值写到文件:
1
2
3
4
5
6
7
8
9
10
11
module Puppet::Parser::Functions
  newfunction(:write_line_to_file) do |args|
    filename = args[0]
    str = args[1]
    File.open(args[0], 'a') {|fd| fd.puts str }
  end
end
  
官网上都有示例,就不多写了.写下注意要点吧!
  
2. 如何调用函数:
1
2
3
4
5
module Puppet::Parser::Functions
newfunction(:myfunc2, :type => :rvalue) do |args|
function_myfunc1(...)
end
end
1
3.函数错误如何处理:
1
2
3
4
raise Puppet::ParseError, "my error"
  
4.函数调试
   a.puppet检查自定义函数是否有语法错误:
1
2
3
4
5
6
7
8
9
ruby -rpuppet my_funct.rb
   b.调试puppet 函数是否可用
irb
> require 'puppet'
> require '/path/to/puppet/functions/my_funct.rb'
> Puppet::Parser::Functions.function(:my_funct)
=> "function_my_funct"
  
  c.puppet模板里调用puppet自定义函数
1
2
3
&lt;%= scope.function_namegoeshere(“one”,”two”) %&gt;
<strong>
[总结]</strong>

这里没有提自定义provider,感兴趣的同学可以看puppet pro那本pdf文档,里面有

详尽的说明.大家可以结合下puppet rsync模块,再看下puppet 组织结构模块.关于

这些自定义的都需要ruby知识.这方面不太懂,就不多说了.

推荐阅读官网:自定义fact以及函数

建议继续学习:

  1. 使用Apache 和Passenger来运行puppetmaster    (阅读:6878)
  2. 自动化运维之企业实际案例分析    (阅读:3744)
  3. puppet使用rsync来同步文件教程    (阅读:3249)
  4. DevOps之Puppet    (阅读:2929)
  5. 如何有效运行puppet cron任务以及如何触发运行puppet    (阅读:2940)
  6. puppet vagrant 管理VirtualBox 虚拟机    (阅读:2683)
  7. puppet extlookup 和puppet hiera使用    (阅读:2204)
  8. puppetmaster集群解决方案之puppet客户端共享一张证书    (阅读:1958)
  9. puppet 手册检查puppet配置文件和使用puppet tags    (阅读:1620)
  10. puppet手册之建立软件安装源    (阅读:1560)
QQ技术交流群:445447336,欢迎加入!
扫一扫订阅我的微信号:IT技术博客大学习
© 2009 - 2024 by blogread.cn 微博:@IT技术博客大学习

京ICP备15002552号-1