刚刚接触 puppet(目前只是阅读),希望有一些示例(真实生活)清单/配方,可以使用 apache/mysql/php 等设置典型的 Web 服务器,以及基本的服务器强化(ubuntu)
答案1
使用 puppet 时最好要记住的是尝试为所有清单创建模块,以便代码可以轻松地在多个服务器和环境中重复使用。
还可以使用 SVN 或 GIT,这样您就可以轻松跟踪更改并签出给定应用程序所需的配置文件。正如 kashani 所说木偶锻造和例42可以提供一些很好的参考。
下面是我为 Web 服务器创建的示例清单。这将为您提供安装/卸载 Web 服务器(如果需要)的选项。您会注意到它使用 facter 事实来检查操作系统和体系结构以安装正确的 RPMS(Centos)。不过,您可以轻松地将其作为模板,并使用正确的软件包名称扩展到 Ubuntu。
class apache ($disable = "false", $apacheconf = "default") {
if $disable == "false" {
$installed = present
$enable = true
$ensure = "running"
} else {
$installed = absent
$enable = false
$ensure = "stopped"
}
case $operatingsystem {
'CentOS', 'RedHat': {
if $architecture == "x86_64" {
package { 'httpd':
name => "httpd.x86_64",
ensure => $installed,
}
} else {
package { 'httpd':
name => "httpd.i386",
ensure => $installed,
}
}
service { 'httpd':
ensure => $ensure,
enable => $enable,
}
file { "http.conf":
path => "/etc/httpd/conf/httpd.conf",
owner => root,
group => root,
mode => 0644,
source => $apacheconf ? {
'default' => "puppet:///modules/apache/httpd.conf",
}
}
}
}
}
要向基本清单添加其他功能,您只需从另一个清单中调用它即可。例如安装 SSL http 服务器。在下面的代码中,您会看到 --include apache-- 用于调用上面的清单,然后还安装其他选项。
class apache::ssl ($disable = "false") {
include apache
if $disable == "false" {
$installed = present
$enable = true
$ensure = "running"
} else {
$installed = absent
$enable = false
$ensure = "stopped"
}
case $operatingsystem {
'CentOS', 'RedHat': {
case $architecture {
'x86_64': {
package { 'mod_ssl':
name => "mod_ssl.x86_64",
ensure => $installed,
require => Package['httpd'],
}
}
'i386':{
package { 'mod_ssl':
name => "mod_ssl.i386",
ensure => $installed,
require => Package['httpd'],
}
}
}
}
}
}
答案2
不幸的是,这样的事情并不存在。使用 Puppet 有点像在有框架之前开发 Web 应用程序。你将编写大量的脚手架代码……至少到目前为止这是我的经验。Puppet 模块锻造非常不稳定,我对那里的大多数模块印象不深。
我建议你看看Example42 的尝试创建一个连贯的系统。我使用了他的许多模块来引导我最新的 Puppet 安装。您将需要修改他的大量代码,因为它基于 RHEL/CentOS,但是他使用 params 类,这使得支持其他发行版变得非常简单。
答案3
您可以拥有类似这样的内容。确切的包名称取决于您使用的操作系统。将以下内容放入 /etc/puppet/modules/webserver/manifests/init.pp 中:
class webserver {
package { apache2: ensure => installed; }
package { php5: ensure => installed; }
package { mysql-server ensure => installed; }
}
然后在您的 /etc/puppet/site/nodes.pp 文件中输入:
node default {
include webserver;
}