#[SoftLayerクッキングLABO] (http://qiita.com/MahoTakara/items/464da29ccf932698b753)
このレシピで出来ること
SoftLayer カスタマー・ポータルからサーバーをオーダーする場合には、OSファイアウォールのAPFの導入を設定できるのですが、コマンドラインからでは、APFをサーバーに導入する指定ができません。 このレシピでは、APFの導入、ルール設定、OS起動時の自動起動までを実現したいと思います。
レシピの要約
この apf01 レシピでは、以下の作業を自動化しています。
- APFのファイルを管理対象サーバーに配置する
- APFのイントールを実行
- ファイアウォールのルールファイルを配置
- 起動スクリプトを Ubuntu 用に修正
- APFの起動設定
- サービスの起動
レシピの説明
解説用のバージョンで、GitHubに登録したものが最新版です。
# 変数の定義
filename = "apf-current.tar.gz"
file_checksum = "793d83ca2657b86b86a23b1c3fe08ee436df8c4a83ef84c92f0f11689531a2cc"
work_dir = "/root/_apf_work"
# APFインストール用のファイルを root のホームディレクトリに置く
cookbook_file "/root/#{filename}" do
source "#{filename}"
checksum "#{file_checksum}"
end
# APFを展開してインストールシェルを実行
script "install_apf" do
interpreter "bash"
user "root"
code <<-EOL
install -d #{work_dir}
tar zxvf /root/#{filename} -C #{work_dir}
cd #{work_dir}/apf-9.7-2
sh install.sh
EOL
end
# APFの設定ファイルをテンプレートから作成します
template "/etc/apf/conf.apf" do
owner "root"
group "root"
mode 0640
source "conf.apf.erb"
action :create
end
#
# Debian/Ubuntuでは起動シェルに変更を加える
# RedHat/CentOS 7 では、ifconfig を追加でインスールする
#
case node['platform']
when 'ubuntu','debian'
bash "edit /etc/init.d/apf" do
only_if { File.exists?("/etc/init.d/apf") }
code <<-EOC
sed -i -e "s/^\\. \\/etc\\/rc.d\\/init.d\\/functions/# &/g" /etc/init.d/apf;
sed -i -e "s/echo_success/# &/g" /etc/init.d/apf
EOC
end
#
execute 'update-rc.d apf defaults' do
command "update-rc.d apf defaults"
end
when 'centos','redhat'
if node['platform_version'].to_i == 7 then
package 'net-tools' do
action :install
end
end
end # node['platform']
#
service "apf" do
action [:enable, :start]
end
対応するソフトレイヤー活用ガイド
確認済みのLinuxディストリビューション
- Ubuntu 14.04 64bit minimal install
- CentOS 7 64bit minimal install
- CentOS 6 64bit minimal install
- Debian 7 64bit minimal install
レシピの置き場所
- [GitHub https://github.com/takara9/chef-repo/tree/master/site-cookbooks/apf01] (https://github.com/takara9/chef-repo/tree/master/site-cookbooks/apf01)
Chef 関連マニュアル
- cookbook_file (https://docs.chef.io/resource_cookbook_file.html )
- script (https://docs.chef.io/resource_script.html )
- template (https://docs.chef.io/resource_template.html )
- bash (https://docs.chef.io/resource_bash.html )
- execute (https://docs.chef.io/resource_execute.html )
- service (https://docs.chef.io/resource_service.html )
管理対象サーバーへの設定実行
Chef-Solo を利用の例で、管理対象サーバーの状態によって、以下の2つのオプションを使い分けます。
初回 Chefのクライアントも含めてインストールする場合
chef@ChefWs:~/chef-repo$ knife solo bootstrap 10.132.253.7 -x root -r 'recipe[apf01]' -i ~/key/chefkey
既存の設定に更新する場合
chef@ChefWs:~/chef-repo$ knife solo cook 10.132.253.7 -x root -r 'recipe[apf01]' -i ~/key/chefkey
レシピ作成の準備
前述のGitHubからクローンする場合は、apfのtarファイルも含まれているので、以下の作業は必要なのですが、今後リリースされる apf の最新版を利用する場合を考慮して記載します。
Chefのリポジトリに移動して、ひな形を作っていきます。
chef@ChefWs:~/chef-repo$ pwd
/home/chef/chef-repo
knifeコマンドで site-cookbooks の下に apf01 というレシピを作ります。 cookbooks を作ると knife solo コマンドを動かした場合、削除されるので注意が必要です。
chef@ChefWs:~/chef-repo$ knife cookbook create apf01 -o site-cookbooks
** Creating cookbook apf01 in /home/chef/chef-repo/site-cookbooks
** Creating README for cookbook: apf01
** Creating CHANGELOG for cookbook: apf01
** Creating metadata for cookbook: apf01
apf01 というクックブックが出来ている事を確認
chef@ChefWs:~/chef-repo$ ls -l site-cookbooks/
合計 4
drwxrwxr-x 10 chef chef 4096 10月 1 22:11 apf01
最新のAPFをダウンロードして、apf01 クックブックの files/default に置くために、ディレクトリを移動します。
chef@ChefWs:~/chef-repo/cookbooks/apf01/files/default$ pwd
/home/chef/chef-repo/cookbooks/apf01/files/default
APFのホームページからダウンロードして、レシピ apf01 の files に保存します。
chef@ChefWs:~/chef-repo/cookbooks/apf01/files/default$ wget http://www.rfxn.com/downloads/apf-current.tar.gz
--2015-10-01 11:19:49-- http://www.rfxn.com/downloads/apf-current.tar.gz
www.rfxn.com (www.rfxn.com) をDNSに問いあわせています... 129.121.132.46
www.rfxn.com (www.rfxn.com)|129.121.132.46|:80 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 200 OK
長さ: 107699 (105K) [application/x-gzip]
`apf-current.tar.gz' に保存中
100%[=======================================================================>] 107,699 149KB/s 時間 0.7s
2015-10-01 11:19:55 (149 KB/s) - `apf-current.tar.gz' へ保存完了 [107699/107699]
後でレシピにセットするために sha256sum を計算しておきます。
chef@ChefWs:~/chef-repo/cookbooks/apf01/files/default$ sha256sum apf-current.tar.gz
793d83ca2657b86b86a23b1c3fe08ee436df8c4a83ef84c92f0f11689531a2cc apf-current.tar.gz
サーバー毎に個別に必要なファイアウォールのルールは、以下のテンプレートファイルを編集します。
apf01/templates/conf.apf.erb