2

我需要编写一个清单,install-apache.pp因为它将安装

  • apache2软件包,如果它是基于 Debian 的系统或
  • httpd如果是基于 RedHat 的系统,则打包

下面是代码;这在 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 应用 install-apache.pp --logdest /root/output.log

4

1 回答 1

3

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

除了修复之外,您还可以使用选择器来改进这一点。还建议在该清单中构建依赖关系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,       
}
于 2018-11-12T13:36:49.663 回答