2016-09-17 3 views
2

私は、私の人形マスタープロファイル/ロールのためのコントロール - レポを使用しています。Puppetでロールのカスタムファクトリまたは外部ファクトを追加する方法は?

は私がHieraを使用していると私は、階層内の役割を追加したい

マイhiera.yamlは次のようになります。

:backends: 
    - yaml 
:yaml: 
    :datadir: "/etc/puppetlabs/code/environments/%{::environment}/hieradata" 
:hierarchy: 
    - "nodes/%{::trusted.certname}" 
    - "roles/%{::role}" 
    - "common" 

site.pp

node xx01 { 
include role::cassandra 
} 

node xx02 { 
include role::mysql 
} 

node xx03 { 
include role::cassandra 
} 

たとえば、ノードxx01とxx03にロールファクトを追加する必要があります。将来的には新しいノードごとに事実を追加することは無意味です。新しいノードが追加されるたびに追加する必要があります。

したがって、コントロールのレポにロールのファクトを追加するコードを追加するのが最善の方法です。モジュール内ではありません。

人形エージェントは、本質的な役割の事実を持っていないようですので、私は、私はそれがホスト名が役割を反映している場合の役割のために事実を追加するために、ホスト名と比較しても無駄だと思う/etc/puppetlabs/facter/facts.d

に役割ファクトを追加しました。だから私は、役割ではなくホスト名で階層を使うことができました。

答えて

1

これは、外部ファクトまたはカスタムファクトで行うことができます。あなたのヒエラファイルは完全にうまくいき、その事実が入力されると自動的にあなたの役割の事実をデータ解決のために拾うでしょう。また、あなたがそれらと一貫した構文と慣習を使用しているので、あなたがPuppet 4、Facter 3、およびHiera 3(モジュールデータ検索などのPuppet Data Providerを使用していない)を使用していることを、そのヒエラファイルから推測します。

ここでは、app、db、およびreportの役割を持っているとしましょう。

カスタム事実のために、あなたは、コンパイルされたモジュールのlib/facter/role.rbディレクトリで次のようないくつかのコードを記述するとよいでしょう:

Facter.add('role') do 
    setcode do 
    case Facter.value(:hostname) 
    when /db/ then role = 'db' 
    when /app/ then role = 'app' 
    when /report/ then role = 'report' 
    else role = default 
    role 
    end 
end 

これをこれを行う方法の簡単な例だろう。

コンパイル済みモジュールのlib/facts.dディレクトリ(role.yamlまたはrole.shファイルなど)に配置された外部ファクトでこれを行うこともできます。 yamlは静的なデータには適しています。シェルスクリプトは、Rubyを使用せずにサーバーの役割を動的に確認する方法の例です。

あなたはここに追加のドキュメントをチェックすることができます:あなたの応答のためのhttps://docs.puppet.com/facter/3.4/custom_facts.html

+0

おかげではなく、ロール名は、ホスト名に、異なるだろう。私の場合は、ノード情報に依存するときの役割を知ることができません。他の解決策はありますか?ノードの役割を知るために –

+0

@ YasserB。私はあなたの一般的な質問に基づいて、あなたのニーズに合ったサンプルソリューションを提供しました。ニーズに合った正確なソリューションが必要な場合は、それが何をしようとしているのかを正確に知る必要があります。 –

+0

編集された投稿 –

関連する問題