2

パペット マスター プロファイル/ロールに control-repo を使用しています。

Hiera を使用しており、階層に役割を追加したい

私のhiera.yamlは次のようになります:

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

サイト.pp

node xx01 {
include role::cassandra
}

node xx02 {
include role::mysql
}

node xx03 {
include role::cassandra
}

たとえば、ノード xx01 と xx03 のロール ファクトを追加する必要があります。したがって、将来すべての新しいノードにファクトを追加しても意味がありません。そのため、新しいノードごとに事実を追加したいと考えています。

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

操り人形エージェントは本質的にロールファクトを持っていないようなので、ロールファクトを追加しました/etc/puppetlabs/facter/facts.d

ホスト名が役割を反映している場合、役割の事実を追加するためにホスト名と比較するのは無意味だと思います。そのため、ロールではなくホスト名で階層を使用できました。

4

1 に答える 1

1

これは、外部ファクトまたはカスタム ファクトのいずれかで行うことができます。また、あなたの hiera ファイルは完全に問題なく、その事実が入力されると、データ解決のために役割の事実を自動的に取得することにも注意してください。また、その hiera ファイルから、Puppet 4、Facter 3、および Hiera 3 (モジュール データ ルックアップなどを備えた Puppet データ プロバイダーではない) を使用していると仮定します。これは、それらと一致する構文と規則を使用しているためです。

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

ここで追加のドキュメントを確認できます: https://docs.puppet.com/facter/3.4/custom_facts.html

于 2016-09-17T12:07:37.410 に答える