Puppet¶
Puppet 是来自Puppet Labs的IT自动化和配置管理软件,允许系统管理员定义他们的IT基础设施状态,
这样就能够提供一种优雅的方式管理他们成群的物理和虚拟机器。
Puppet均可作为开源版和企业版获取到。其模块是小的、可共享的代码单元,用以自动化或定义系统的状态。
Puppet Forge 是一个模块仓库,它由社区编写,面向开源和企业版的Puppet。
Puppet代理安装于其状态需要被监控或者修改的节点上。作为特定服务器的Puppet Master负责组织代理节点。
代理节点发送系统的基本信息到Puppet Master,比如说操作系统、内核、架构、IP地址、主机名等。
接着,Puppet Master编译携带有节点生成信息的目录,告知每个节点应如何配置,并发送给代理。
代理便会执行前述目录中的变化,并向Puppet Master发送回一份报告。
Facter是一个有趣的工具,它用来传递Puppet获取到的基本系统信息。这些信息可以在编写Puppet模块的时候作为变量来引用。
$ facter kernel
Linux
$ facter operatingsystem
Ubuntu
在Puppet中编写模块十分直截了当。Puppet清单(manifest)组成了Puppet模块。Puppet清单以扩展名 .pp 结尾。
下面是一个Puppet中 ‘Hello World’的例子。
notify { 'This message is getting logged into the agent node':
#As nothing is specified in the body the resource title
#the notification message by default.
}
这里是另一个基于系统的逻辑的例子。注意操纵系统信息是如何作为变量使用的,变量前加了前缀符号 $ 。
类似的,其他信息比如说主机名就能用 $hostname 来引用。
notify{ 'Mac Warning':
message => $operatingsystem ? {
'Darwin' => 'This seems to be a Mac.',
default => 'I am a PC.',
},
}
Puppet有多种资源类型,需要时可以使用包-文件-服务(package-file-service)范式来承担配置管理的主要任务。
下面的Puppet代码确保了系统中安装了OpenSSH-Server包,并且在每次sshd配置文件改变时重启sshd服务。
package { 'openssh-server':
ensure => installed,
}
file { '/etc/ssh/sshd_config':
source => 'puppet:///modules/sshd/sshd_config',
owner => 'root',
group => 'root',
mode => '640',
notify => Service['sshd'],# sshd will restart
# whenever you edit this
# file
require => Package['openssh-server'],
}
service { 'sshd':
ensure => running,
enable => true,
hasstatus => true,
hasrestart=> true,
}