puppet 中文基础教程系列之sky学习笔记(一)

四月 25, 2012 by · 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学习笔记(一)

本文标题:puppet 中文基础教程系列之sky学习笔记(一)
本文链接:http://www.mysqlops.com/2012/04/25/puppet-basic.html
订阅本站:http://feed.mysqlops.com   转载请注明来源,如果喜欢本站可以Feed 订阅本站。

About sky

Speak Your Mind

Tell us what you're thinking...
and oh, if you want a pic to show with your comment, go get a gravatar!

知识共享许可协议
作品采用知识共享署名 2.5 中国大陆许可协议进行许可。