平台独立清单,用于安装和运行apache2或httpd

时间:2018-11-11 20:53:54

标签: puppet puppet-enterprise puppetlabs-apache

我需要将一个清单安装为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 apply install-apache.pp --logdest /root/output.log

1 个答案:

答案 0 :(得分:3)

这里的问题是您正在利用事实$facts['os']['name'],该事实被分配了发行版的特定操作系统,而不是发行版的系列。该事实将在Ubuntu上分配Ubuntu,而不是Debian分配。该事实需要固定为$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,       
}