我需要将一个清单安装为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
答案 0 :(得分:3)
这里的问题是您正在利用事实$facts['os']['name']
,该事实被分配了发行版的特定操作系统,而不是发行版的系列。该事实将在Ubuntu上分配Ubuntu
,而不是Debian
分配。该事实需要固定为$facts['os']['family']
,它将在Ubuntu上分配为Debian
。
除了此修复程序之外,您还可以使用selectors对此进行更多改进。还建议在该清单中构造service
对package
的依赖关系,以确保正确的排序。刷新也将有所帮助。
考虑到这些修复和改进,您的最终清单将如下所示:
$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,
}