be_owned_by が非推奨になっているぽい話
最近、環境の再構築やら環境移設やらでchefに戻っているワタシですが、タイトルの件でハマったのでメモしておく。
ちなみに手元のrspecは3.0.3だった。
まさに
http://inokara.hateblo.jp/entry/2013/05/04/024224
こちらなどを参考にさせていただきながら、nginxの設定ファイルをtemplateリソースを使って配置する処理に対して、
expect(chef_run).to create_template "/etc/nginx/nginx.conf" file = chef_run.template("/etc/nginx/nginx.conf") expect(file.mode).to eq("0644") expect(file).to be_owned_by('root','root')
とか書いていたら、
Failure/Error: expect(file).to be_owned_by('root','root')
expected template[/etc/nginx/nginx.conf] to respond to `owned_by?`
と、怒られた。あれみんなこう書いてるんじゃないの?
調べてみると、以下の様なドキュメントがすぐに出てくる。
http://rubydoc.info/github/sethvargo/chefspec/ChefSpec/API/DeprecatedMatchers
なるほど非推奨っぽい。んで推奨の書き方は何だろ?と思ったんだけど、ぱっと見わからず。。
(ドキュメント慣れというのが必要だとこの後知った。)
なのでGitHubでソース見てたら、次のように書けとあった。
expect(chef_run).to create_template "/etc/nginx/conf.d/#{type}-proxy.conf" file = chef_run.template("/etc/nginx/conf.d/#{type}-proxy.conf") expect(file.mode).to eq("0644") expect(file.owner).to eq('root') expect(file.group).to eq('root')
これでうまくいった。
その後、公式ドキュメントのview sourceってのを開いてみると、まさに探していたものがあった。
view on GitHubの方、リンク切れてたもんで、なんだこれと思って他をあたってしまったのが時間のロスだった。。
chefspecの使い方書いてくださってる情報は結構日本語も多くて助かっていたんだけど、この辺は古いままだったりするので注意が必要すね。
UTCとJST比較する時ハマったこと
Calendar jstCalendar = Calendar.getInstance(TimeZone.getTimeZone("JST")); Calendar utcCalendar = Calendar.getInstance(TimeZone.getTimeZone("UTC"));
こうするのが多分正しくて、
Calendar jstCalendar = Calendar.getInstance(TimeZone.getTimeZone("Asia/Tokyo")); Calendar utcCalendar = Calendar.getInstance(TimeZone.getTimeZone("Europe/London"));
こうするとサマータイムが考慮されてしまうので一瞬びっくりした話。
すみません超常識でしたマジですみません。
UTC(とGMT)とEurope/Londonって使い分けどうすんのかなとか思ってたけどこういうことね。
そりゃそうだ。
境界値試験とかの時は気をつけたい所です。
sudo と su と nologin
お題
sudo -u $username "command" sudo su - $username "command"
の違いについて。よく理解できてなかったので。
sudo -u $usernameの場合
sudo -u $username "command"
sudoコマンドを使い、$usernameで指定されたユーザーとしてcommandを実行する
sudoで必要になるパスワードは、現在このコマンドを実行しようとしているユーザーのパスワード
sudo su - $usernameの場合
sudo su - $username "command"
$usernameに切り替えて、commandを実行する(のを、rootとしてやる)
su でユーザーの変更を行う場合は、切り替え先のユーザーのパスワードが必要(なのでsudoでrootとして実行)
nologinユーザにおける挙動
- 1.の場合
ログインシェルを切り替えないため、ログインシェルが/sbin/nologinであってもコマンドの実行が可能
- 2.の場合
ログインシェルの切り替えを行うため、/sbin/nologinだと切り替えができず、コマンドは失敗
結論
- 目的にあった方法を選ぶこと。
- ログインシェルが/sbin/nologinであれば、sudo su - $usernameは上記の理由から利用が不可能なため、コマンドの実行の仕方を変更するか、そもそものユーザーの使い方から見直すこと。
って感じかなぁ。
svn2gitで移行作業途中のsvnリポジトリの変更を移行しているGitHub側に送る
タイトルが何を言いたいのかわからない感じになってしまった。。。
svn側のtrunkがブランチ扱いになっているか確認
$ git branch -r
svn/trunk
svnのtrunkから対応するローカルブランチを作成
$ git checkout -b svn-trunk svn/trunk
GitHub側のDevelopブランチにマージしたいので、一旦Developの変更差分を取り込む
$ git pull --rebase origin develop
memcache-topでクラスタ全体の統計情報を見る
memcache-topっつーのがあるってことで使ってみました。
対象のホストは、104行目あたりの@default_instancesって所で設定できたりします。
もう使うクラスタ情報が固定だバカヤロウって人は書き換えちゃってもいいかも。
# List of servers/ ports to query. @default_instances = ( "127.0.0.1:11211", "127.0.0.1:11212" );
もしくは--instancesオプション使って、カンマ区切りでhostを列挙する感じ。
一旦オプション列挙しておく。
- Specify instances w/ --instances (multiple times or comma separated) - Specify default port w/ --port (defaults to 11211) - Specify sleep time w/ --sleep (default 3) - Specify color output w/ --color (default) or --nocolor - Specify lifetime stats w/ --lifetime or --nolifetime (default) NOTE: lifetime stats break thresholds for evictions, bytes. - Specify read and write bytes w/ --bytes (default) or --nobytes - Specify get and set commands w/ --commands or --nocommands (default) - Specify cumulative numbers w/ --cumulative (don't use with lifetime)
evictionの回数も見れるから、「えっ、キャッシュ溢れてる・・・・?」ってのも
一覧で見られるので、助かります。たまに設定値がデフォのとか混ざってるとすぐにわかりますね。
環境によってはしきい値(上回るとデフォルトで文字が赤くなります)を変更したいって時に
以下の項目ををいぢるといいかも。
# 'Alert' threshold values at which to color the text red. %threshold = ( cache_hit => 60, # Cache hit ratio usage => 90, # % space used time => 5, # Number of ms to run the stats query evictions => 0, # Number of evictions per second curr_connections => 3500, # Number of current connections bytes_read => 1000000, # Bytes read, per second bytes_written => 1000000, # Bytes written, per second limit_maxbytes => 0, # Total space allocated bytes => 0, # Total space used cmd_get => 1000, # Get commands cmd_set => 1000, # Set commands );
slabs情報の取得は、これを改変してきっとすてきな人が作ってくれるはず(ぇ
curlで画像ファイルとかをpost
curl -X POST -F file=@./tori.png http://piyopiyo.com/picture
こんな感じ。fileのところはパラメータ名を指定してあげればok。
マルチパート形式で送ってくれます。
余談ですが、ヘッダを指定するときは -H 'Authorization: OAuth 12345....' って感じでoptionを追加すると、いけます。
manを読むのは、結構楽しい。
finagleのClientBuilderの設定値
int hostConnectionLimit; int hostConnectionCoresize; long hostConnectionIdleTime; int hostConnectionMaxWaiters; long hostConnectionMaxIdleTime; long hostConnectionMaxLifeTime;
主にこのへんの値の関連とか。
- hostConnectionLimit
ホストあたりの接続「上限」数。
- hostConnectionCoresize
コネクションプールのcoreサイズ。この値よりプール内のコネクションの数が小さくなることはない。下限値。
- hostConnectionIdleTime
接続がcloseされるまでの時間(?)
- hostConnectionMaxWaiters
コネクションプール取得待ちキューサイズ
- hostConnectionMaxIdleTime
未使用(状態)のコネクションの生存期間
- hostConnectionMaxLifeTime
占有状態に関わらない、コネクションの生存期間
で、hogehogeTimeの設定値が0の時はどうなるのかというところを調べ中。
【参考】
http://twitter.github.com/finagle/api/finagle-core/com/twitter/finagle/builder/ClientBuilder.html
https://github.com/twitter/finagle/blob/master/README.md#clients