チップスと言うよりは相談です。みなさんどうやっているのか、いい方法があったらぜひ教えてください。
Infratasterでmysql.user
テーブルの内容(要はユーザーの存在やアクセス元ホストの許可状況)のテストをする時、今はMySQLのroot
ユーザーでアクセスしています。そうすると、アクセス時のパスワードは直接リポジトリーに入れたくないので、たまたま構築にknife-soloを使っていることもあって、knife-solo_data_bagのEncrypted Data Bagの機能を使って管理しています。
knife-solo_data_bagでは、秘密情報を暗号化して保存することができて、こんなふうにして復号します:
$ knife solo data bag show mysql root --secret-file=./data_bag_key
ご想像の通り「data_bag_key」というファイルに鍵を保存して、それを使って復号するようになっています(だからこのファイルはリポジトリーに入れていません)。で、これは鍵のファイルだから、とroot:root
、0600
で保存しています。だから、実は、上のコマンドはこんなふうにして実行しています:
$ sudo knife solo data bag show mysql root --secret-file=./data_bag_key
で、ようやく本題なんですが、root
でMySQLに接続するということはパスワードが必要で、そのためには上の鍵ファイルを読み取らなくてはいけません。そんなわけで、spec_helper.rb
にこう書いています。
require 'json'
require 'infrataster/rspec'
require 'infrataster-plugin-mysql'
mysql_config = JSON.parse(`sudo knife solo data bag show mysql root --secret-file=./data_bag_key -F json`)
Infrataster::Server.define(
:db,
'192.168.33.10',
mysql: {user: 'root', password: mysql_config['password']},
vagrant: true
)
やってみれば、やらなくてもちゃんと読めばすぐ分かりますが、テストの度にsudo
のパスワードを入力しなくてはいけません。
そこの面倒臭さを除けばまあ機能してはいるんですが、みなさんはこの辺どうしているんでしょう? やっぱり環境変数?