2017-02-19 8 views
1

私は、0.xから1.0のリリースまで、Puppetを多用していましたが、その後ジョブを変更しましたが、今度は戻ってきました。人形のHieraは私には新しく(他にもたくさんのものがあります)。Hiera経由でホスト名に基づいてノードにクラスを割り当てる

私は、Hieraと一致するホスト名(または証明書名)パターンに基づいてノードのグループにクラスを割り当てることは基本的に不可能だと正しく理解していますか?

私は、たとえば、ホストが "ntp1.foo.com"のようなものだった場合、ntpサーバクラスを割り当てることができました。これは、nodeの定義がsite.ppのストレートでかなり簡単です。私はこの概念をHieraベースの世界に移そうとしています。私はHieraに他のクラスを割り当てていて、それらの割り当てのすべてを1か所にまとめることを望んでいました。

Hiera以外の手段でパラメータを設定し、その値をHieraでパスにマッチさせるためにこれを行うには、これを行うしか方法はありません。例えば、私はこのようなパラメータをエクスポートし、私のencスクリプトで:

echo "parameters:" 
if [ ... ]; do echo " ntpRole: server; else echo " ntpRole: client"; fi 

とHieraに私のようなものだろう:

- "roles/ntp-%{ntpRole}" 

を、私は1つが、カスタム事実を経由してこの操作を行うことができると思います。

これは機能しますが、クルージュのようです。より良い/推奨される選択肢がありますか?これで

一つの問題は、すべてのノード必見は(すべてがNTP-何かクラスが割り当てられている)の値を持っているということです。これはNTPのために働きます。なぜなら、すべてのマシンはNTPのクライアントかサーバーのどちらかですが、存在しないものはないからです。

たとえば、Webサーバーの役割。いくつかのマシンはWebサーバではないので、私はそのクラスを含めたくないのですが、私はそうしていますが、ノードごとのファイルでそれを維持する必要は本当にありません。どこでも空の*-noneロールクラス(例えば、web-noneweb-server)。 www*という名前のマシン、または他の基準に基づいて、roles/webクラスをロードします。これはHieraでできますか?

+0

これには外部カスタムファクトが使用されているため、ファクトにはそのノードが属するロールのロジックがあり、ヒエラではそのファクトを使用してロールクラスを組み込むことができます。 – Walid

答えて

0

ロールにサーバーファクトとの関連がある場合は、カスタムファクトを使用してロールを割り当てることができます。以前はサーバー名に基づいてノード分類を行っていたと言いましたので、これはあなたが行きたいルートであると見なします。あなたは、このようなhieraコンフィグ設定することができます

# custom role fact 
require 'facter' 

Facter.add(:role) do 
    case Facter.value(:hostname) 
    when /ntp/ then 'ntp-server' 
    when /www/ then 'web-server' 
    else abort 'Hostname does not provide a role.' 
    end 
end  

:あなたの主な内部

# role/web-server.yaml 
classes: 
    - web-server 

:あなたの役割データファイル内

:hierarchy: 
    - "nodes/%{::trusted.certname}" 
    - role/%{role} 
    - "common" 

を、あなたは、クラス名の配列を提供することができますマニフェスト(通常$environment/manifest/site.pp

# if no classes array, traverse the else block 
if hiera('classes', false) { 
    hiera_include('classes') 
} 
else { 
    # logic for your 'none' situations since the classes array was not present 
} 

hiera_includeの情報を確認してください:https://docs.puppet.com/hiera/3.2/puppet.html#assigning-classes-to-nodes-with-hiera-hierainclude特定のfqdn.yamlデータファイルのクラスでもマージされます。

これは、あなたが要求している機能を提供し、Hieraを使用してノードグループ/ホスト名ごとにクラスを組み込みます。

+0

'role'が空の場合、Hieraは階層を介してクラスを探す際に' role /%{role} '行をスキップします。 – Josh

+0

@Joshある意味では、はい。もっと正確に言えば、Hieraはカスタムファクトで 'else'のケースに合ったデータファイルを探しますが、それは存在しないので、階層のレベルはデータを提供しません。 –

関連する問題