• 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をする必要が生じるなど冪等にならないです。

    ...
  • chef-soloのレシピのカスタマイズの記録

    こんにちは。小宮です。
    おかげ様でカスタマイズする機会があったため、その一部を引用してご紹介いたします。

    基本的なことなどは、
    以下のリンクや「入門chef-solo」その落ち穂拾いもご覧になるとよいと思います。
    Chef Soloと Knife Soloでの ニコニコサーバー構築 (2) 〜導入編〜:dwango エンジニア ブロマガ
    chef-solo - Chefを読んで実行するための全知識 - Qiita
    DevOpsを実現するChef活用テクニック // Speaker Deck
    あとGW前後にchef実践入門的な書籍をエンジンヤード(chefが出る前から8年くらい使ってる会社)の御方が出されるそうで大変期待してるところです。

    chefのnode、role、enviroment、attribute、data_bagsの解説になります。
    この記事は基本の説明とカスタマイズの為の簡単な情報提供になるかと思います。
    以下に記載しているレシピを実際ためした環境はCentOS6.4のみで、申し訳ありませんが異なる環境での動作保障はできないです。
    異なるOS間の動作保障するような汎用的(複雑)なレシピはopscodeコミュニティの☆がいっぱいついてるクックブックを使えばいいらしいです。
    (余計なものを極力入れないとか既存の環境または手順をレシピ化するという需要には不向きかとは思います。)

    chefリポジトリ直下のディレクトリの解説を以下に記します。
      cookbooks :サードパーティのクックブック置き場
     data_bags :data_bagsのデータ置き場
     environments :環境設定ファイル置き場
     nodes :ノード(ホスト・各サーバ)設定ファイル置き場
     roles :役割設定ファイル置き場
     site-cookbooks :自作クックブック置き場(クックブックはレシピ、配布ファイル等を含む)

    各用語を以下に軽く解説します。
    ・ohai
    chefに同梱されているレシピを適用するホストの情報を取得するコマンドです。
    ohaiで取得した値に基づいてattributeを定義することが可能です。
    たとえばOS搭載メモリやCPUコア数に応じて設定値を変えたい場合やホスト名や
    IPアドレスなど固有の情報を設定ファイルに載せたい場合などに利用すると便利です。

    ・node
    nodesディレクトリ直下にhostname.jsonまたはipaddress.jsonというファイルを置き、
    そこにそのサーバ固有の設定値(attribure)や割り当てる役割(role)を定義します。

    ・role
    dbやwebなど、同じ役割のサーバをroleでまとめ、同じ役割のサーバ群に適用するレシピ
    やパラメータをまとめて定義します。

    ...
  • Chefで既存手順のレシピを書く1(初期設定)

    こんにちは。プラットフォームの小宮です。
    前回はChefでレシピを書く前のroleやdata_bagsなどの環境定義について書きました。
    今回は既存手順のレシピ化ということで淡々と地味に書いていきたいと思います。

    注意:
     scriptリソースを使うときはnot_ifまたはonly_ifを必ず書くこと(複数回実行されないように)
     bash内でcdを書き忘れるとtarの解凍先パスがその後のコマンドの指定と一致しなくなるので注意
     scriptリソースを使うとエラーがまともに出ないので自分でコマンドをたたいて状況を確認する必要がある
     リソースのマニュアルを熟読推奨。

    クックブック名とその内容は以下の通り。
     base_setting 初期設定など ★今回ご紹介するレシピはこちらのみです。
     login-users ログインユーザ作成
     httpd web関連設定
     mysqld db関連設定
     munin 統計グラフ設定
     zabbix 監視設定

    レシピを書く
    ・base_settingのレシピを書く
    使いまわしやすさを意識した結果細かく分割して書くことにしました。
    ☆バックアップディレクトリ作成レシピ
    [shell]# cd site-cookbooks/base_setting/recipes/ # for i in bkup_dir hosts sysctl disable ntpd ntpdate mail logrotate ;do touch $i.rb ;done # vi bkup_dir.rb directory ‘/etc/.backup/’ do owner ‘root’ group ‘root’ mode ‘0755’ action :create end[/shell]

    ...