LoginSignup
5

More than 5 years have passed since last update.

External Node Classifiers について

Posted at

Puppet advent calender 6日目です。昨日は@kijibatoさんによるHieraでの動的リソース定義でした。

External Node Classifiers の概要

External Node Classifiers / ENC とは、 node 宣言をやめて、ホスト名などから適用すべきロールを導出するための仕組みです。

具体例を見るとわかりやすいでしょう。以下のようなRubyのスクリプトがあります。

enc.rb
#!/usr/bin/env ruby
require 'yaml'

certname = ARGV[0]
hostname = certname.split('.').first

role = case hostname
       when /^([-_a-z]+)$/, /^([-_a-z]+)\d{3}$/
         $1
       else
         raise("Invalid hostname %s" % hostname)
       end

puts YAML.dump({
  'classes' => ['base', role],
})
exit 0

これを

$ ./enc.rb web001.example.com

と実行すると、標準出力は以下となるでしょう。

---
classes:
- base
- web

ENCとは、このように、引数にホスト名(cert name)をとり、標準出力に一定のフォーマットのyamlを吐き出すようなスクリプトを置くことで、動的に利用するクラスその他を指定できるような仕組みです。

ENCは、puppet masterで、以下のような設定を追加すれば使えるようになります。

node_terminus  = exec
# $vardir/data 配下にデプロイしているとして
external_nodes = $vardir/data/enc.rb

puppet をクライアント実行している場合でも、オプションが存在します。

puppet apply --test --module_path=/vagrant/modules \
  --node_terminus=exec \
  --external_nodes=/vagrant/enc.rb # Vagrantなら。

具体的な応用例は月曜の午後に......

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5