2017-06-21 1 views
2

私の現在のモジュールでは、PHPバージョン5または7がインストールされているかどうかを確認し、そのための事実を作成する必要があります。ファクトファイルはfacts.d/packageversion.rbにmodulesディレクトリに保存され、次のような内容があるさ:ファクトファイルが解析されましたが、空のデータセットが返されました

#!/usr/bin/ruby 
require 'facter' 

Facter.add(:php_version) do 
    setcode do 
    if File.directory? '/etc/php5' 
     5 
    else 
     if File.directory? '/etc/php7' 
     7 
     else 
     0 
     end 
    end 
    end 
end 

をしかし、私は私のモジュールで使用することはできません。パペットエージェントのログで、私はこのエラーが表示されます:

Fact file /var/lib/puppet/facts.d/packageversion.rb was parsed but returned an empty data set

どうすればこの問題を解決できますか?

答えて

2

facts.dは、外部ファクトのモジュールディレクトリです。このファイルを外部のファクトディレクトリに置くこともできますが、期待される出力はキーと値のペアである必要があります。これは起こっていないので、Puppetはその事実のデータセットを見つけていません。 https://docs.puppet.com/facter/3.6/custom_facts.html#executable-facts-----unix

あなたはこの事実を外部事実ではなくカスタム事実として書いています。したがって、代わりにモジュールのlib/facterディレクトリ内に配置する必要があります。その後、正しく機能します。私は、この重要な情報が最新のFacterのドキュメントから削除されているように見えます。おそらくあなたの混乱に役立ちます。

また、明快さと最適化のために、あなたのコード内でelsifを使用することを検討してください:

if File.directory? '/etc/php5' 
    5 
elsif File.directory? '/etc/php7' 
    7 
else 
    0 
end 
+0

このロジックを使用すると、両方のレポートがインストールされている場合は、5 –

+0

パーフェクト、ありがとう!それが間違ったディレクトリにあることを知らなかった。 – Studentus

1

何マットSchuchardは語りました。 Facter::Util::Resolution.execFacter::Core::Execution.execの非推奨されていることを

Facter.add(:phpversion) do 
    setcode do 
    output = Facter::Util::Resolution.exec('php -v') 

    unless output.nil? 
     output.split("\n").first.split(' '). 
     select { |x| x =~ %r{^(?:(\d+)\.)(?:(\d+)\.)?(\*|\d+)} }.first 
    end 
    end 
end 

注:

また、あなたは承認のVox Populi人形モジュールはPHPバージョンのthisコードを使用することを検討するかもしれません。

これ以外にも、これをPHPバージョンを入手するためのより良い方法と考えることができます。

+0

ええ、私は 'Facter :: Util :: Resolution'が廃止されたと思っていたと言いました。モジュールに更新が必要なように見えます。 –

関連する問題