尝试使用Puppet安装Apache时“不支持的osfamily:Linux”

我正在尝试使用最新的Amazon Linux AMI在AWS EC2上设置一个简单的Puppet设置。

我已经遵循了RHEL的安装指南,并且运行了一个puppetmasterd守护进程。

/etc/puppet/manifests/site.pp应用以下清单时:

 node 'ip-172-31-1-239.eu-west-1.compute.internal' { class { 'apache': } } 

我得到的错误:

 [ec2-user@ip-172-31-1-239 ~]$ sudo puppet agent --test info: Loading facts in /etc/puppet/modules/concat/lib/facter/concat_basedir.rb info: Loading facts in /etc/puppet/modules/stdlib/lib/facter/pe_version.rb info: Loading facts in /etc/puppet/modules/stdlib/lib/facter/root_home.rb info: Loading facts in /etc/puppet/modules/stdlib/lib/facter/facter_dot_d.rb info: Loading facts in /etc/puppet/modules/stdlib/lib/facter/puppet_vardir.rb err: Could not retrieve catalog from remote server: Error 400 on SERVER: Class['apache::version']: Unsupported osfamily: Linux at /etc/puppet/modules/apache/manifests/version.pp:37 on node ip-172-31-1-239.eu-west-1.compute.internal warning: Not using cache on failed catalog err: Could not retrieve catalog; skipping run 

从Puppet的Apache模块的version.pp中,我可以看到为什么清单无法安装Apache,但我不明白为什么Facter首先报告osfamily为“Linux”:

 [ec2-user@ip-172-31-1-239 ~]$ facter | grep osfamily osfamily => Linux [ec2-user@ip-172-31-1-239 ~]$ rpm -qa | grep facter facter-1.6.18-7.25.amzn1.noarch [ec2-user@ip-172-31-1-239 ~]$ rpm -qa | grep puppet puppetlabs-release-6-11.noarch puppet-2.7.25-1.4.amzn1.noarch puppet-server-2.7.25-1.4.amzn1.noarch [ec2-user@ip-172-31-1-239 ~]$ sudo puppet module list /etc/puppet/modules ├── puppetlabs-apache (v1.4.0) ├── puppetlabs-concat (v1.2.0) └── puppetlabs-stdlib (v4.5.1) /usr/share/puppet/modules (no modules installed) 

任何人有任何想法我可以解决这个问题?

不要使用Amazon Linux。 Puppet Labs Apache模块与Amazon Linux不兼容。 您将需要使用与其兼容的其中一个分发版本,或者创build您自己的Puppet模块。

今天看了一眼,我发现Facter v1.7.0包含一个修正,把Amazon Linux分类为“RedHat”: https : //github.com/puppetlabs/facter/commit/c12d3b6c557df695a7b2b009da099f6a93c7bd31

现在我知道为什么这是不正确的报告,我需要知道为什么我没有从PuppetLabs Yum回购安装Facter v1.7.0,这是超出了这个问题的范围。

问题似乎在文件/usr/lib/ruby/site_ruby/1.8/facter/osfamily.rb

在Amazon Linux的情况下,最终使用osoperatingsystem作为osfamily。

19号线是:

  when "RedHat", "Fedora", "CentOS", "Scientific", "SLC", "Ascendos", "CloudLinux", "PSBM", "OracleLinux", "OVS", "OEL" 

应该是:

  when "RedHat", "Fedora", "CentOS", "Scientific", "SLC", "Ascendos", "CloudLinux", "PSBM", "OracleLinux", "OVS", "OEL", "Amazon"