5. ユーザーで共有されるリソース
システム管理者用リソース
PHP Perl Ruby Python Apache postfix sshd
user A user B user C user D
ユーザーごとのリソース (任意のタイミングで追加/削除)
レンサバ モデルレイヤ
nagios munin fluentd ldap
ftpd
resque
2013年5月10日金曜日
25. ユーザー作成
user node.username do
action :create
end
directory "/var/www/#{node.username}" do
owner node.username
group node.username
action :create
mode "0755"
end
template "/etc/httpd/conf.d/#{node.username}.conf" do
notifies :restart, "service[httpd]"
source "httpd.conf.erb"
owner "apache"
group "apache"
mode "0644"
end
service "httpd" do
action :restart
end
{
"username": "sushi",
}
attribute/sushi.json
2013年5月10日金曜日
27. ユーザー削除
• 消す時にも便利
• べき等性が効いてくる
user node.username do
action :remove
end
directory "/var/www/#{node.username}" do
action :delete
end
file "/etc/httpd/conf.d/#{node.username}.conf" do
notifies :restart, "service[httpd]"
action :delete
end
service "httpd" do
action :restart
end
2013年5月10日金曜日
45. RSpec / Railsの例
describe "rubyコンテナでRailsをUnicornで動かす" do
before(:all) do
system("/etc/init.d/rails stop")
end
it "アプリケーション /home/sqale/current に配置することができること" do
system("tar xfz /home/sqale/rspec/misc/rails_app.tar.gz").should be_true
system("rm -rf /home/sqale/current").should be_true
system("mv rails_app /home/sqale/current").should be_true
end
it "Railsを /etc/init.d/rails で 起動することができる" do
system("/etc/init.d/rails start").should be_true
end
it "HTTPリクエストを出して200が返ってくること" do
response = http_get
response.code.should == "200"
response.body.should == "hello,world"
end
end
2013年5月10日金曜日
46. RSpec / rbenvの例
%w{ 2.0.0-p0 2.0.0-preview1 1.9.3-p327 1.9.3-p286 1.9.3-p194 }.each do |version|
context "rbenv で #{version} に切り替える場合に" do
it "バージョン切り替えできていること" do
rbenv_global(version)
end
it "rubyのパスが通っていること" do
system("which ruby >/dev/null").should be_true
end
it "irbのパスが通っていること" do
system("which irb >/dev/null").should be_true
end
it "gemsのパスが通っていること" do
system("which gem >/dev/null").should be_true
end
it "bundlerのバージョンが #{@bundler_version} であること" do
`bundle -v`.split[2].should == @bundler_version
end
end
2013年5月10日金曜日
47. RSpec / PHP Pearの例
describe "phpコンテナのpear" do
it "pearでライブラリをインストールできること" do
system("pear install Numbers_Roman").should be_true
end
it "pearでインストールしたライブラリを読み込めること" do
File.write("numbers_roman.php", <<'....')
<?php
require_once 'Numbers/Roman.php';
$roman = new Numbers_Roman();
echo $roman->toNumeral(1);
....
`php numbers_roman.php`.chomp.should == "I"
end
end
2013年5月10日金曜日
50. Rspec / ○○できない
it "/var/log/messagesを読み込めないこと" do
expect { File.read("/var/log/messages") }.to raise_error(Errno::EACCES)
end
it "/var/log/secureを読み込めないこと" do
expect { File.read("/var/log/messages") }.to raise_error(Errno::EACCES)
end
it "cgroup の fork.remaing で fork bomb対策が施されている" do
# forkbomb するワンライナー
system "perl -e 'for(0..255){$i = fork;exit 255 unless defined $i;$i == 0 && sleep 1 && exit 0; }'"
$?.success?.should be_false
end
context "カーネルの制限で sqaleユーザーはポートをbindできない" do
it "httpdの予約ポート 8000 ~ 10000 をbindできない" do
(8000..10000).each do |port|
expect { TCPServer.open(port) }.to raise_error(Errno::EACCES)
end
end
2013年5月10日金曜日