IT技术博客大学习 共学习 共进步

puppet运维之使用自定义函数

MySQLOPS 数据库与运维自动化技术分享 2012-02-26 23:23:20 浏览 3,302 次

[导读]

上一篇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 (阅读 8,165)
  2. 自动化运维之企业实际案例分析 (阅读 4,623)
  3. puppet使用rsync来同步文件教程 (阅读 4,081)
  4. DevOps之Puppet (阅读 3,822)
  5. 如何有效运行puppet cron任务以及如何触发运行puppet (阅读 3,762)
  6. puppet vagrant 管理VirtualBox 虚拟机 (阅读 3,442)
  7. puppet extlookup 和puppet hiera使用 (阅读 3,043)
  8. puppetmaster集群解决方案之puppet客户端共享一张证书 (阅读 2,781)
  9. puppet手册之建立软件安装源 (阅读 2,563)
  10. puppet 手册检查puppet配置文件和使用puppet tags (阅读 2,482)