• data_bagsの用途について

    こんにちは。小宮です。 data_bagsについて内部的に解説する必要が生じたのでこちらにも書いておきます。

    最近のdata_bagsの活用方法は以下のとおり

    1.LDAPで管理していないシステム用途のOSユーザ情報をロードしてレシピで追加 2.SSL証明書の格納とレシピからロードしてtemplateで設定 3.ntpサーバの情報のロードとtemplateで設定 4.awsのクレデンシャル情報を管理して各種スクリプトへ埋め込み 5.mysqlやldapなどのパスワードなどアカウント情報の管理 6.roleとenvironmentに収まりきらないnginxやapacheのvhostやupstream等の情報の管理 7.gangliaのhead_nodeやcluster_nameの情報の管理


    0.下準備的な解説

    ※前提条件としてchef-soloの場合"knife-solo_data_bag"というgemが必要なので入れる。 (gem listでなければgem installかbundlerで入れてください)

    格納方法と確認方法

    暗号化しない場合、viなど任意のエディタで編集OK chef-repository/data_bags/任意のディレクトリ名/任意のファイル名.json をつくる。 中身はjsonの規則にのっとっている必要があるので、シンタックスをjson_verifyでCHK。

    cat data_bags/dirname/filename.json |json_verify で、JSON is valid と出るのを確認する

    暗号化する場合、 まずEDITORの環境変数を~/.bashrcなりに設定しておく必要があるのと暗号化用の鍵を作って設定しておく必要がある。 (※鍵は案件ごとに異なるイメージで、.gitignoreに書いとく必要があります。  流出厳禁かつ無くすとデータが見えなくなります。)

    export EDITOR=vi
    vi .chef/knife.rb
    ------コメントを外す---------------------
    encrypted_data_bag_secret "data_bag_key"
    -----------------------------------------
    

    ※コメント外すと鍵指定しなくてもknifeコマンドでcreateした場合常に暗号化される  ゆえに暗号化せず扱いたいデータファイルはviで作るかコメントインしてから作る必要有

    鍵が必要なら作る (※.chef/knife.rbの相対パスはchefリポジトリ直下を意味します)

    openssl rand -base64 512 > data_bag_key
    
    knife solo data bag create dirname filename # 作成(※既存は上書きされる)
    knife solo data bag edit dirname filename   # ファイルをエディタで編集
    knife solo data bag show dirname filename   # jsonの中身を表示
    knife solo data bag list            # ディレクトリ一覧表示
    

    ・注意するべきこと →bashやexecuteリソースは極力使うべきではない。templateリソースつかってください。  bashでsedるとdata_bagsから変数に入れた特殊文字が展開されて意図しない値が入ったりします  もうひとつ、sedると毎度毎度同じsedをする必要が生じるなど冪等にならないです。

    ...