Edited at

ohaiのhostnameの利用方法について

More than 3 years have passed since last update.

awsのインスタンスのデフォルトのホスト名はip-10.x.x.xみたいな感じだけど、覚えられないしzabbixとかの監視側から分かりづらすぎるのでインスタンス作成時につけたタグからchefでホスト名変えています。

base_settingというcookbookがあって、renamehost.rbというレシピを以下のような感じで書いてます。

cookbook_file "/usr/local/sbin/renamehost" do

source "renamehost"
owner 'root'
group 'root'
mode 0750
end

prd = Chef::EncryptedDataBagItem.load("awskeys","hoge")
prd_id = prd["aws_access_key_id"]
prd_key = prd["aws_secret_access_key"]
prd_region = prd["region"]
dev = Chef::EncryptedDataBagItem.load("awskeys","fuga")
dev_id = dev["aws_access_key_id"]
dev_key = dev["aws_secret_access_key"]
dev_region = dev["region"]

ohai "reload" do
plugin "hostname"
end

environment = node.chef_environment
role = ("#{node.roles}"[/[\w_-]+/])
if "#{environment}" == 'mng' || "#{environment}" == 'prod' || "#{environment}" == 'test'
bash "exec-renamehost" do
not_if { node[:hostname] =~ /^#{role}/ }
notifies :reload, "ohai[reload]", :immediately
notifies :restart, "service[rsyslog]", :immediately
code <<-EOC
/usr/local/sbin/renamehost `echo #{prd_id} #{prd_key} #{prd_region}`
EOC
end
else
bash "exec-renamehost" do
not_if { node[:hostname] =~ /^#{role}/ }
notifies :reload, "ohai[reload]", :immediately
notifies :restart, "service[rsyslog]", :immediately
code <<-EOC
/usr/local/sbin/renamehost `echo #{dev_id} #{dev_key} #{dev_region}`
EOC
end
end

include_recipe "base_setting::hosts"

クレデンシャルはdata_bagsにencryptedで入れてます。

renameしてるbashリソースのnotifiesにrsyslogのrestartしてるのはログに出るホスト名変えるためです。

role名がhost名の頭につくことになってるので、not_ifでrole名から始まらなかったら実行されるというガード付けてます。

bashリソース内で実行されてるrenamehostはただのシェルスクリプトで、cookbook_fileで置いてるだけで、

処理内容的には自ホストのメタデータからタグ内容取得してhostnameコマンドでホスト名変えて/etc/sysconfig/networkHOSTNAMEの値を差し替えてます。

hostsはohaiのreloadがimmediatelyで終わった後のタイミングでtemplateで配っています。

(immediatelyつけなかったらどうなるかというと全てのレシピが流れたあとに実行されるようです。

 参考:http://www.engineyard.co.jp/blog/2013/chef-recipe-lifecycle/

たとえば以下のようなファイル。

127.0.0.1  localhost <%= node['hostname'] %> localhost.localdomain localhost4 localhost4.localdomain4

<%= node['ipaddress'] %> <%= node['hostname'] %> localhost

zabbix_agentd.confとかのHostnameも変えた値が入るようにrunlist的に後ろのほうになってます。

今のところこんな感じです。

Ohaiのプラグインの話は「Chef活用ガイド」の3章あたりに色々のってました。