puppet配置
命令
- facter -p: 显示所有的变量
- puppet apply [-v] [--noop] [-e 'puppet expression: 一般为include httpd等']
- puppet module
- puppet describe [-l] [list]
常用资源
- file
- user
- group
- exec
- package
- service
- notify
puppet的资源
puppet中的正则表达式的匹配
- $operatingsystem =~ /(?i-mx:(macox|majaro|debain|gentoo))
- 上述表达的说明
- $operatingsystem是puppet的内置变量
- =~ 是字符串的模式匹配
- 其中/(?i-mx:): 表示模式匹配, /.../里面写正则表达式
- 此表达式表示操作系统的名称是否匹配maosx, majaro, debain, gentoo其中的一种
- /.../是必须的, 里面的(?i-mx:可以不要, 那么就采用默认的
puppet中的语句
- if 语句
if CONDITION {
# statement like notice("Hello, World!")
} elsif CONDITION {
} else {
}
- case 语句
case {
case1, case2: {
}
case3: {
}
case 4, case5, case6: {
}
}
- selector语句
$rootgroup = $osfamily ? {
'Solaris' => 'wheel',
/(Darwin|FreeBSD)/ => 'wheel',
default => 'root',
}
原型为:
variable = $var ? {
var1 => value1,
var2 => value2
}
自定义模块
创建一个module_name目录, 在该目录中包含manifests, lib, tests, spec, files, templates目录, 其中在manifests中放的文件是.pp文件, 且和python一样有类似的要求, 需要有一个init.pp文件, 并且在该文件中需要定义一个class, 他的class name需要和module_name一致
下面为一个简单的示例
nginx/
|-- files # 放置普通的文件
|-- lib
|-- manifests # 放置.pp文件
| `-- init.pp
|-- spec
|-- templates # 放置嵌入ruby脚本的plain text, 就是里面有 <%= %>等标志的文件
| `-- nginx.conf
`-- tests