2016Vagrantでのprovisionerとしての使用を想定しつつ、Chefの基本的な操作をチュートリアルに従って確認。公式のドキュメントを流し見して、全体の概要をまとめてみる。環境確認Vagrantで構築したCentOSの仮想マシンを使用する。今回はすでにChefのインストールされているボックスファイルを選択。hello.rbを実行してもhello.rbが認識されなくてしょっぱなから躓く。調べて以下のようなディレクトリ構成、コマンドを書き換えてから動作することを確認。パッケージをインストールしてみるチュートリアルに従って’httpd’パッケージをインストールしてみる。19:03:53簡単にインストールできたので、起動、index.html表示と流れるようにいけると思いきややはり躓く。iptables周りが原因なようだったので、一旦OFFにしてhttpサーバの動作を確認することにする。192.168.33.10で目的のindex.htmlにアクセスできることを確認。Chefに関するMemo公式のチュートリアルやドキュメントを触り読みながらChefに関する概要をメモ書き。Resourceというものがある。Resourceが最も最小単位であり、1つの動作を表す。上でいうfile‘Recipe’は’Resource’をまとめたもの。renamed.rb‘Cookbook’はRecipeをまとめたもの。上でいうhelloworldrecipe名のデフォルトはdefault.rbのよう。違うrecipeを指定したい時は<cookbook>::<recipe>という記述となる。Chefを構成するマシン基本的にChefはクライアント-サーバ構成を持つ。マシンの主要な役割と関係するツールは以下のような感じ。<repository_name>chef-repoの作成。cookbooks/を含むディレクトリ構成を持つ。<cookbook_name>cookbookの作成。様々なファイルを作って含めてくれる。recipeとしてはrecipes/default.rbが自動で生成される。<recipe_name>recipeの作成。<path_to_cookbook>/recipes/<recipe_name>.rb等が作成される。<template_name>templateの作成。<path_to_cookbook>/templates/default/<template_name>.erbが作成される。%>等の記述で変数の埋込や処理の実行を行える。<attribute_name>attributeファイルの作成。<path_to_cookbook>/attributes/<attribute_name>.rbが作成される。Chefでのattributeの概念は結構複雑で、異なる箇所に、幾つかの優先度を持たせて書くことができる。recipeに値をベタ書きしたくない、という程度ならdefault.rbでattributeを定義してあげれば十分そう。kitchenテスト用仮想マシンの管理を行うツール。自作のcookbookの動作確認を行うために使用する。.kitchen.ymlが設定ファイルとなる。listテスト用仮想マシン一覧の表示。convergeテスト用仮想マシンの作成。<path_to_cookbook>/.kitchen.ymlを参照して仮想マシンを作成し、cookbookを適用する。login作成したテスト用仮想マシンへのログイン。destroyテスト用仮想マシンの破棄。.kitchen.ymlの記述例は以下の通り。attributes:Berkshelfcookbookのインストールおよび依存関係を解決するためのツール。Berksfileが設定ファイル。installBerksfileに記載したcookbookを依存関係を解決しつつダウンロードする。デフォルトのダウンロード先は~/.berkshelfとなる。そもそも2つは用途が異なる。以下は現在の認識であり、間違いがあるかも。metadata.rbに含めるということは、cookbookのメタデータの一つになるということだといえる。cookbookのディレクトリ下でberksコマンドを実行すれば、その依存関係を解決して全ての必要なcookbookをダウンロードしてくれるが、それが主目的で依存関係をmetadata.rbに書くわけではない(と思う)。Berksfileは純粋にcookbookを集めるためのもの。特定のcookbookに関わったりするものではない(はず)。<path_to_repo>指定したパスにcookbookをダウンロードする。Vagrantのprovisionとして用いたりするときに使っているのをよく見る。Policyに関してChefを実行する際の設定等を管理する仕組みというイメージ。Server用マシンを構築する、というような。Policyとしては以下の3つが含まれる。Role対象のサーバタイプを決定する。server’attributeやrun-listが定義できるEnvironment対象の開発プロセスを決定する。bagsパスワードのようなセキュアに管理したい設定を保管する仕組みRole設定ファイルは<path_to_cookbook>/roles/<name_of_role>.jsonrb形式でも設定できるらしいが、未確認。roleの定義ファイルは以下のような感じ。]}Environment設定ファイルは<path_to_cookbook>/environments/<name_of_environment>.jsonrb形式でも設定できるらしいが、試しにkitchenで動かしている際には確認できず。attributeで設定した値をenvironmentで定義した値で上書きすることができる。