用于设置 Web 服务器的 Puppet 清单示例

用于设置 Web 服务器的 Puppet 清单示例

刚刚接触 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;
}

相关内容