一、基本概念
- 资源:是Puppet最基础的元素。资源可以是文件、服务、软件包、自定义脚本等。Puppet主要的特色就是处理资源与资源之间的依赖与关系
- 属性:资源需要定义的相关属性值,通过属性的定义才知道资源在做什么
- 类:将多个资源组织起来进行重新定义。
- 模块:多个类的集合。
- 变量:与其他语言类似,同样支持变量。
- 参数:通常把传递给变量的值称为参数
- 节点:Puppet的每一个客户端,即主机。Puppet在管理主机时要求与计算机配置的主机名保持一致,并建议采用DNS来管理主机名。
二、语法与命令
1、语法基础
Puppet语法规则是以括号{}分类,以冒号 : 声明,以逗号 , 属性结束
例: file {‘nginx’:
ensure=> file,
}
注释
- #这是一个注释
- /*这是一个注释*/
- //这是一个注释,不建议使用这种
变量的引用
不包含变量的字符串应该使用单引号(’’)括起来。
包含变量的字符串应该使用双引号(””)括起来,字符串中的所有变量应该使用花括号{}括起来
例:“${::operatingsystem}is not supported by ${module_name}”
对变量本身的引用最好不用花括号
例:mode => $my_mode
资源
(1)资源名
资源名采用单引号(’’)引起来,采用冒号:结尾。如果有变量的时候就用双引号引起来。
例:package { ‘nginx’:
ensure=> present
}
(2)对齐
资源名称和各个符号之间都有一个空格
(3)属性的顺序
当声明一个资源时,应该先指定它的ensure属性,方便阅读
(4)文件权限
设置一个文件的权限时,需要将权限用单引号引起来
例:
file {‘/var/log/syslog’:
ensure=> present,
mode=> ‘0644’,
}
(5)资源默认值
通常需要设置一些资源默认值,为一组资源指定一个默认的参数值,减少重复定义。资源默认值类似于全局变量。设置资源默认值时应将资源类型的第一个字母大写。最常见的用法是使用exec资源指定path变量目录,避免在以后使用命令时找不到操作系统的环境变量
例:
vim /etc/puppet/manifests/site.pp
Exec { PATH => “/usr/bin:/usr/sbin:/usr/local/bin”}
定义一个文件资源的用户默认值
vim /etc/puppet/manifests/site.pp
file {
mode=> ‘0644’,
owner=> ‘root’,
group=> ‘root’,
}
类
(1)文件名的命名方式
在一个模块中,如果定义了一个类,且它还有子类,那么它的文件命名方式就是”子类名.pp“。比如定义一个apache的类,包含ssl与virtual_host两个类。那么在manifests目录同时有3个文件:init.pp、ssl.pp、virtual_host.pp。配置方法如下:
# /etc/puppet/modules/apache/manifests
#init.pp
class apache {}
#ssl.pp
class apache::ssl {}
#virtual_host.pp
define apache::virtual_host () {}
(2)关系声明
声明两个资源之间的关系时,必须是从左到右的顺序进行,不能从右到左
例: Package[‘httpd’]-> Service[‘httpd’]
(3)类的继承
表达方式如下:
class ssh {}
class ssh::client inherits ssh {...}#client 子类继承ssh类
class ssh::server inherits ssh {...}#server子类继承ssh类
2.语法检查
puppet parservalidate init.pp #对init.pp做语法检查
一次检查多个文件
方法一:
$ for file in $(find . -iname ‘*.pp’); dopuppet parser validate --color false --render-ass --modulepath=modules $file ;done;
#通过find命令查找当前目录下pp结尾的文件,然后采用for循环执行puppet检查文件语法
方法二:
$ find -name ‘*.pp’ | xargs -n 1 -t puppetparser validate
#通过find命令查找当前目录下以pp结尾的文件,通过管道传给xargs命令
#-n 参数指定一次只处理一个变量,-t参数启用跟踪方式执行puppet检查文件语法
代码的调试
方法一:
用logoutput输出更详细的信息
例:
$ vim test_output.pp
exec { ‘test_logoutput’:
command=> “/bin/ls linuxtone.org”,
logoutput=> on_failure,
}
如果你想不管命令执行成功或者失败都输出错误信息,可以这样做:
logoutput => true,
方法二:
用notify输出需要的信息
例:
notify { “i am running on node $fqdn” }
二、资源
三、模块
四、类
五、模板
六、节点
七、Facter
八、标签