要安装的平台独立清单和 运行 apache2 或 httpd

Platform Independent Manifest to install and run apache2 or httpd

我需要写一个清单作为 install-apache.pp 来安装

下面是代码;这适用于 CentOS 但不适用于 Ubuntu.

case $facts['os']['name'] {
  'Debian': {
    package { 'apache2':         
      ensure => installed,       
    }            
    service { 'apache2':     
      ensure => running,     
    }
  }
  'RedHat': {
    package { 'httpd' :
      ensure => installed,
    } 
    service { 'httpd':
      ensure => running,
    }
  }
}

所以我做了如下一些更改,但我不确定为什么它不起作用。

case $operatingsystem {
  'Debian': {
    package { 'apache2':         
      ensure => installed,       
    } ->             
    service { 'apache2':     
      ensure => running,     
      enable => true,        
    }
  }
  'RedHat': {
    package { 'httpd' :
      ensure => installed,
    } ->
    service { 'httpd':
      ensure => running,
      enable => true,    
    }
  }
}

用于执行的命令:

puppet apply install-apache.pp --logdest /root/output.log

这里的问题是您正在利用事实 $facts['os']['name'],它分配给了特定的发行版操作系统,而不是发行版的系列。该事实将在 Ubuntu 而不是 Debian 上分配 Ubuntu。事实需要固定为 $facts['os']['family'],它将在 Ubuntu 上分配 Debian

除了修复之外,您还可以使用 selectors 对此进行更多改进。还建议在该清单中构建 servicepackage 的依赖关系,以确保正确排序。提神也有帮助。

考虑到这些修复和改进,您的最终清单将如下所示:

$web_service = $facts['os']['family'] ? {
  'RedHat' => 'httpd',
  'Debian' => 'apache2',
  default  => fail('Unsupported operating system.'),
}

package { $web_service:        
  ensure => installed,      
}            
~> service { $web_service:    
  ensure => running,    
  enable => true,       
}