search
LoginSignup
5

More than 5 years have passed since last update.

Organization

External Node Classifiers について

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
What you can do with signing up
5