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/network
のHOSTNAME
の値を差し替えてます。
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章あたりに色々のってました。