puppet 中文基础教程系列之sky学习笔记(一)
四月 25, 2012 by sky · Leave a Comment
【导读】
目前puppet 中文资料比较少,虽然有部分,但多是对应用的说明,没有puppet基础入门文档,于是sky 就想起之前的puppet 学习笔记,
于是在下班后抽时间整理,分享给大家,希望对puppet 初学者有用。
【正文】
(-) Puppet 变量要点
puppet除facter变量外,也可以自定义变量,也可以通过extlookup,hiera这插件来获取变量值,但不允许你在同一个类里面对一个变量进行两次赋值.
a.那么什么是facter呢? puppet的facter是什么,puppet facter有什么用?
初学者会有这样的疑问.那么在这里解释下,puppet的facter是puppet工具,它提供的一个标准方式去获得客户端环境变量信息,关于puppet
facter 是如何使用以及运作的不是本节讨论的内容.
b.那如何定义puppet变量呢?
是以$(美元符号)开头.使用=(等于)号来赋值 。例如: $test = puppetfans
c. 变量的作用域 #这里翻译可能不准确。
变量有局部变量(local scope),还有全局变量(top scope)。变量有短的变量名(short name),还有一个长名(Fully qualified)。
例如:$::hostname
c.那如何引用变量值呢?
有两种方法
1)是直接使用$加上变量名.可以参阅后面puppet 代码的示例.
2)是$符号在前,并使用{}来括住变量名. 参阅后面puppet 代码示例.强烈推荐使用此方法.也是标准写法.
d. puppet 变量使用示例,我们编写了个test.pp,用来输出变量值.
#cat test.pp
$test = puppetfans
notice "get test value $test"
notice "get test value ${test}"
我们来运行test.pp,查看结果.
#puppet apply test.pp notice: Scope(Class[main]): get test value puppetfans notice: Scope(Class[main]): get test value puppetfans notice: Finished catalog run in 0.03 seconds
e.我们之前也说过可以通过facter 来获取变量值,我们编写test1.pp,来获取操作,架构,以及kernerl信息.我们来个示例:
root@test1:~# cat test1.pp
notify { "This is $operatingsystem version $operatingsystemrelease, on $architecture architecture, kernel
version $kernelversion": }
接下来我们运行puppet,查看输出结果:
root@test1:~# puppet apply test1.pp notice: This is Ubuntu version 11.10, on x86_64 architecture, kernel version 3.0.0 notice: /Stage[main]//Notify[This is Ubuntu version 11.10, on x86_64 architecture, kernel version 3.0.0]/message: defined 'message' as 'This is Ubuntu version 11.10, on x86_64 architecture, kernel version 3.0.0' notice: Finished catalog run in 0.04 seconds
我们编写个test2.pp 来测试全局变量使用:
cat test2.pp
if $::hostname == "puppet1" {
notice ("hi hi:${::hostname}" )
}
我们来运行下puppet ,查看输出结果:
notice: Scope(Class[main]): hi hi:puppet1
那什么时候使用全局变量什么时候引用局部变量呢?
那就是变量在局部范围内找不到,那就要使用全局变量。或者说变量不在它的作用域,那么就使用全局变量。
(二).puppet 数组
puppet 支持的数组是非常有限,你可以给数组赋值,但是不能删除数组.puppet 数组有两种实现方式,
第一种是我们常用的,就是自定义数组,另一种方式就是可以通split函数来实现创建数组.
2).puppet 数组格式
放在中括号里,各个元素之间以逗号分隔.例如:
$puppetfans = ["jim","tim","john"]
3).如何建创puppet 数组,我们演示两种常用方法:
a.自定义数组.
$package = [ "puppet","puppet-server","ruby-doc"]
b. 通过split 函数来创建数组.
$package = "puppet puppet-server ruby-doc" $soft = split($package, ' ') $soft,是puppet 数组,这里以空格来分隔$package而来.
4.)puppet 数组示例:
vim arrary.pp
$package = [ "puppet","puppet-server","ruby-doc"]
notify { $package: }
#puppet apply arrary.pp
notice: puppet-server
notice: /Stage[main]//Notify[puppet-server]/message: defined 'message' as 'puppet-server'
notice: puppet
notice: /Stage[main]//Notify[puppet]/message: defined 'message' as 'puppet'
notice: ruby-doc
notice: /Stage[main]//Notify[ruby-doc]/message: defined 'message' as 'ruby-doc'
notice: Finished catalog run in 0.04 seconds
这样输出不太好看,我们演示下格化化puppet 数组输出信息:
cat arrary_format.pp
$package = [ "puppet","puppet-server","ruby-doc"]
define print() {
notice ("soft need package is: '${name}'")
}
print { $package:}
root@test1:~# puppet apply !$
puppet apply arrary_print.pp
notice: Scope(Print[puppet]): soft need package is: 'puppet'
notice: Scope(Print[puppet-server]): soft need package is: 'puppet-server'
notice: Scope(Print[ruby-doc]): soft need package is: 'ruby-doc'
notice: Finished catalog run in 0.04 seconds
【总结】
puppet 学习笔记未完待续,本次是讲puppet 变量与puppet 数组。本文已同步更新至puppet 中文社区,欢迎大家移步前往讨论puppet 中文社区,自学教程栏目讨论。
原创文章,转载请注明: 文章地址puppet 中文基础教程系列之sky学习笔记(一)
