Chef-quick-guide
シェフ-概要
Chefは、Opscodeによって開発されたオープンソーステクノロジーです。 Opscodeの共同設立者であるAdam Jacobは、Chefの創設者として知られています。 このテクノロジーは、Rubyエンコードを使用して、レシピやクックブックなどの基本的な構成要素を開発します。 Chefは、インフラストラクチャの自動化に使用され、インフラストラクチャ管理の手作業と反復作業を削減するのに役立ちます。
Chefには、インフラストラクチャの管理と自動化に必要なさまざまなビルディングブロックに対して独自の規則があります。
なぜシェフ?
Chefは、インフラストラクチャのプロビジョニングを自動化するために使用される構成管理テクノロジーです。 Ruby DSL言語に基づいて開発されています。 会社のサーバーの構成と管理のタスクを合理化するために使用されます。 任意のクラウドテクノロジーと統合する機能を備えています。
DevOpsでは、Chefを使用して、社内およびクラウドでサーバーとアプリケーションを展開および管理します。
シェフの特徴
以下は、シェフの最も顕著な特徴です-
- Chefは、一般的なRuby言語を使用して、ドメイン固有の言語を作成します。
- Chefは、ノードの現在のステータスを想定していません。 メカニズムを使用して、マシンの現在のステータスを取得します。
- Chefは、クラウドサーバー、ストレージ、およびソフトウェアの展開と管理に最適です。
シェフの利点
シェフは次の利点を提供しています-
- エントリーの障壁が低い-Chefは標準の構成言語であるネイティブのRuby言語を構成に使用しているため、開発経験のある人なら誰でも簡単に選択できます。
- クラウドとの優れた統合-ナイフユーティリティを使用すると、任意のクラウドテクノロジーと簡単に統合できます。 これは、マルチクラウド環境でインフラストラクチャを配布したい組織にとって最適なツールです。
シェフの短所
Chefの主な欠点のいくつかは次のとおりです-
- Chefの大きな欠点の1つは、クックブックの制御方法です。 働いている人が他の料理本を台無しにしないように、絶え間ない子育てが必要です。
- シェフソロのみが利用可能です。
- 現在の状況では、AWSクラウドに適しています。
- その人がRubyに慣れていない場合、学ぶことは非常に簡単ではありません。
- ドキュメントはまだ不足しています。
シェフの主要な構成要素
レシピ
インフラストラクチャの管理に使用される属性のコレクションとして定義できます。 レシピに存在するこれらの属性は、既存の状態を変更したり、特定のインフラストラクチャノードを設定したりするために使用されます。 Chefクライアントの実行中にロードされ、ノード(マシン)の既存の属性と区画されます。 次に、レシピのノードリソースで定義されているステータスになります。 クックブックの主な機能です。
クックブック
クックブックはレシピのコレクションです。 これらは、Chefサーバーにアップロードされる基本的な構成要素です。 Chefの実行が行われると、その中に存在するレシピが、レシピにリストされているように、指定されたインフラストラクチャを目的の状態に確実に取得します。
リソース
これは、さまざまな種類の状態のインフラストラクチャを管理するために使用されるレシピの基本コンポーネントです。 レシピには複数のリソースがあり、インフラストラクチャの構成と管理に役立ちます。 たとえば-
- package -ノード上のパッケージを管理します
- service -ノード上のサービスを管理します
- user -ノード上のユーザーを管理します
- group -グループを管理します
- template -Rubyテンプレートが埋め込まれたファイルを管理します
- cookbook_file -クックブックのfilesサブディレクトリからノード上の場所にファイルを転送します
- file -ノード上のファイルの内容を管理します
- directory -ノード上のディレクトリを管理します
- execute -ノードでコマンドを実行します
- cron -ノード上の既存のcronファイルを編集します
属性
基本的には設定です。 それらは、クックブックで使用したいもののキーと値のペアと考えることができます。 適用できる属性にはいくつかの種類があり、ノードが動作する最終設定よりも優先順位が異なります。
File
これは、クックブックを使用するノードに配置される静的ファイルを含むクックブック内のサブディレクトリです。 レシピは、そのディレクトリから最終ノードにファイルを移動するリソースとして宣言できます。
テンプレート
ファイルに似ていますが、静的ではありません。 テンプレートファイルは.ebr拡張子で終わります。つまり、埋め込まれたRubyが含まれています。 主に、ファイルに属性値を代入して、ノードに配置される最終ファイルバージョンを作成するために使用されます。
Metadata.rb
パッケージに関するメタデータを管理するために使用されます。 これには、パッケージの名前や詳細などの詳細が含まれます。 また、このクックブックを操作する必要があるクックブックを示す依存関係情報なども含まれます。 これにより、Chefサーバーはノードの実行リストを正しく作成し、すべてのピースが正しく転送されるようにします。
デフォルトのクックブック構造
Chef −関連テクノロジー
以下は、Chef関連テクノロジーのリストです。
人形
Puppetは、実行場所に関係なく、ソフトウェアを配信および操作する標準的な方法を提供します。 Linux、Unix、およびWindowsシステム用の自動化された管理エンジンであり、一元化された仕様に基づいて管理タスクを実行します。
Puppet *の主な機能は次のとおりです-
- 均一な構成で新しいシステムを実装します。
- システムを更新し、セキュリティおよびソフトウェアパッケージをアップグレードします。
- 新機能の組み込みと器用な機能の追加。
- データソースの可用性を確保するための構成のカスタマイズ。
- 利用可能なリソースの最適化とコストの最小化。
- 役割を簡素化し、チームが中核的で生産的な問題に集中できるようにします。 *利用可能なインフラストラクチャの鳥瞰図を取得します。
アンシブル
Ansibleは、アプリケーションとシステムの展開を容易にする、根本的にシンプルなIT自動化プラットフォームです。 アプリケーションを展開および更新するためのスクリプトやカスタムコードの作成を避けます。リモートシステムにインストールするエージェントを使用せずに、SSHを使用して、平易な英語に近い言語で自動化します。
Ansible* の主な機能は次のとおりです-
- シンプルで学びやすい
- Pythonで書かれた
- エージェントレス
- YAMLベースのPlaybook
- アンシブル銀河
ソルトスタック
SaltStackは、データ駆動型の構成に使用されます。 これは、動的通信バス上に構築されたインフラストラクチャ管理の新しいアプローチです。 データ駆動型のオーケストレーション、インフラストラクチャのリモート実行、アプリスタックの構成管理に使用されます。
ファブリック
シェフ-建築
Chefは、クックブックなどの作業ユニットがChefワークステーションで開発される3層のクライアントサーバーモデルで動作します。 knifeなどのコマンドラインユーティリティからChefサーバーにアップロードされ、アーキテクチャに存在するすべてのノードがChefサーバーに登録されます。
稼働中のChefインフラストラクチャを適切に配置するには、複数のものを順番に設定する必要があります。
上記の設定では、次のコンポーネントがあります。
シェフワークステーション
これは、すべての構成が開発される場所です。 Chefワークステーションがローカルマシンにインストールされます。 詳細な構成構造については、このチュートリアルの後の章で説明します。
シェフサーバー
これはChefセットアップの一元化された作業単位として機能し、すべての構成ファイルが開発後にアップロードされます。 Chefサーバーにはさまざまな種類があり、一部はChefサーバーをホストしていますが、一部は組み込みの前提です。
シェフノード
これらは、Chefサーバーによって管理される実際のマシンです。 すべてのノードは、要件ごとに異なる種類のセットアップを持つことができます。 Chefクライアントは、すべてのノードの主要コンポーネントであり、ChefサーバーとChefノード間の通信のセットアップに役立ちます。 Chefノードのその他のコンポーネントはOhaiです。これは、特定の時点でノードの現在の状態を取得するのに役立ちます。
Chef-バージョン管理システムのセットアップ
バージョン管理システムの使用は、インフラストラクチャ自動化の基本的な部分です。 SVN、CVS、GITなど、複数の種類のバージョン管理システムがあります。 ChefコミュニティでのGITの人気により、GITセットアップを使用します。
注-バージョン管理システムのないコードとしてインフラストラクチャを構築することは考えないでください。
Windowsの場合
- ステップ1 *-https://git-scm.com/[www.git-scm.org]からWindowsインストーラーをダウンロードし、インストール手順に従います。
- ステップ2 *-GitHubの中央リポジトリにサインアップします。
- ステップ3 *-sshキーをGitHubアカウントにアップロードして、簡単に操作できるようにします。 sshキーの詳細については、次のリンクhttps://help.github.com/articles/connecting-to-github-with-ssh/[https://help.github.com/articles/generatedssh-keys]にアクセスしてください。
ステップ4 *-最後にchef-repoという名前で [[1]]
実際にクックブックの作成を開始する前に、開発ボックスに初期GITリポジトリを設定し、Opscodeが提供する空のリポジトリを複製できます。
- ステップ1 *-Opscode Chefリポジトリの空の構造をダウンロードします。
- ステップ2 *-タールボールを抽出します。
- ステップ3 *-ディレクトリの名前を変更します。
- ステップ4 *-現在の作業ディレクトリをchef repoに変更します。
- ステップ5 *-新しいgetリポジトリを初期化します。
- ステップ6 *-gitハブのリポジトリに接続します。
- ステップ7 *-ローカルリポジトリをgithubにプッシュします。
上記の手順を使用すると、空のシェフリポジトリが所定の場所に配置されます。 その後、レシピとクックブックの開発に着手できます。 完了したら、GitHubに変更をプッシュできます。
シェフ-ワークステーションのセットアップ
Chefはクライアント/サーバーアーキテクチャの概念に従います。したがって、Chefで作業を開始するには、ワークステーションでChefをセットアップし、ローカルで構成を開発する必要があります。 後でそれをChefサーバーにアップロードして、構成する必要があるChefノードで動作させることができます。
Opscodeは完全にパッケージ化されたバージョンを提供し、外部の前提条件はありません。 この完全にパッケージ化されたChefは、* omnibusインストーラー*と呼ばれます。
Windowsマシン
- ステップ1 *-マシンにchefDKのセットアップ.msiファイルをダウンロードします。
- ステップ2 *-インストール手順に従って、ターゲットの場所にインストールします。
セットアップは、次のスクリーンショットに示すようになります。
ChefDKパス変数
Linuxマシン上
Linuxマシンでセットアップするには、まずマシンでcurlを取得する必要があります。
- ステップ1 *-マシンにcurlをインストールしたら、Opscodeのomnibus Chefインストーラーを使用してワークステーションにChefをインストールする必要があります。
- ステップ2 *-マシンにRubyをインストールします。
- ステップ3 *-パス変数にRubyを追加します。
Omnibus Chefは、 /opt/chef/embedded/bin ディレクトリを.bash_profileファイルに追加することにより、Rubyおよび必要なすべてのRuby gemを /opt/chef/embedded にインストールします。
Rubyがすでにインストールされている場合は、次のコマンドを実行して、マシンにChef Ruby gemをインストールします。
シェフ-クライアントのセットアップ
ChefノードがChefサーバーと通信できるようにするには、ノードでChefクライアントをセットアップする必要があります。
シェフクライアント
これはChefノードの主要コンポーネントの1つであり、Chefサーバーからクックブックを取得し、ノードで実行します。 Chefプロビジョニングツールとも呼ばれます。
ここでは、Vagrantを使用してVMを管理します。 Vagrantは、シェルスクリプト、Chef、Puppetなどのプロビジョニングツールで構成して、VMを目的の状態にすることもできます。 私たちの場合、Vagrantを使用して、VirtualBoxとChefクライアントをプロビジョニング機能として使用してVMを管理します。
- ステップ1 *-https://www.virtualbox.org/wiki/Downloads[https://www.virtualbox.org/wiki/downlod]からVirtualBoxをダウンロードしてインストールします
ステップ2 *- http://downloads.vagrantup.com*でVagrantをダウンロードしてインストールします
- ステップ3 *-Vagrant Omnibusプラグインをインストールして、VagrantがVMにChefクライアントをインストールできるようにします。
仮想の作成と起動
- ステップ1 *-Opscode vagrantリポジトリから必要なVagrantボックスをダウンロードできます。 次のURLからopscode-ubuntu-12.04ボックスをダウンロードしますhttp://www.vagrantbox.es/[https://opscode-vmbento.s3.amazonaws.com/vagrant/opscode_ubuntu-12.04_provisionerless.box]
- ステップ2 *-Vagrantファイルを入手したら、Vagrantファイルを編集するために必要なパスをダウンロードします。
上記のプログラムでは、正しいまたは必要な組織名で<YOUR_ORG>名を更新する必要があります。
- ステップ3 *-構成後の次のステップは、浮浪者ボックスを立ち上げることです。 そのためには、Vagrant boxがある場所に移動して、次のコマンドを実行する必要があります。
- ステップ4 *-マシンが起動したら、次のコマンドを使用してマシンにログインできます。
上記のコマンドでは、vagrantfileは、vagrant仮想マシンを構成するためのRubyドメイン固有言語(DSL)で記述されています。
vagrantファイルには、configオブジェクトがあります。 Vagrantはこの構成オブジェクトを使用してVMを構成します。
構成ブロック内で、ノードを起動するために、使用するVMイメージをvagrantに指示します。
次のステップでは、Vagrantにオムニバスプラグインをダウンロードするように指示します。
起動するVMボックスを選択したら、Chefを使用してボックスをプロビジョニングする方法を構成します。
この中に、仮想ノードをChefサーバーに接続する方法に関する指示をセットアップする必要があります。 Vagrantに、ノード上のすべてのChefのものを保存する必要がある場所を伝える必要があります。
シェフ-キッチンのセットアップをテストする
Test Kitchenは、シェフの統合テストフレームワークです。 クックブックを使用してインスタンス化および収束されると、VM上で実行されるテストレシピの作成が可能になります。 テストレシピはそのVMで実行され、すべてが期待どおりに機能するかどうかを確認できます。
- ステップ1 *-テストキッチンRuby gemおよびテストキッチンvagrant gemをインストールして、テストキッチンがテストのスピンアップにvagrantを使用できるようにします。
ステップ2 *-テストキッチンをセットアップします。 これを行うには、クックブックディレクトリに *.kitchen.yml を作成します。
上記のコードの一部では、迷走者がVMをスピンアップする必要があることを定義し、OmnibusでターゲットノードにChefをインストールすることを定義しています。
2番目の部分では、クックブックをテストするプラットフォームを定義します。 Vagrantは常に新しいインスタンスを作成および破棄します。 Vagrantファイルを使用してスピンアップするVagrant VMの副作用を心配する必要はありません。
テストキッチンは、運用環境に似た一時的な環境でクックブックを実行およびテストするのに役立つ一時的な環境と考えることができます。 テストキッチンを有効にすると、テスト、運用前、および運用環境に実際に展開する前に、特定のコードが動作していることを確認できます。 テストキッチンのこの機能は、クックブックを実際の作業環境に配置する前に、多くの組織がセットで従います。
テストキッチンワークフロー
以下は、テストキッチンワークフローに含まれる手順です。
Chefを使用してクックブックを作成する
次のコードを使用してクックブックを作成します。
以下は、上記のコードの出力として作成されたクックブック構造です。
キッチン構成ファイルのテスト
.kitchen.yamlファイル
ドライバー-マシンを管理するソフトウェアを指定します。
プラットフォーム-これは、ターゲットオペレーティングシステムを指定します。
スイート-仮想環境に適用するものを定義します。 ここでは、複数の定義を定義します。 実行リストを定義する場所であり、実行するレシピと実行する必要があるシーケンスを指定します。
コマンドを順番に実行する
キッチンリスト
キッチンクリエイト
キッチンコンバージ
テストのセットアップ
キッチンログインは、テストVMが正しくプロビジョニングされているかどうかをテストするために使用されます。
最後に終了
セットアップの破棄
シェフ-ナイフのセットアップ
ナイフは、Chefサーバーとやり取りするChefのコマンドラインツールです。 クックブックのアップロードやChefの他の側面の管理に使用します。 ローカルマシン上のchefDK(Repo)とChefサーバー間のインターフェースを提供します。 それは管理に役立ちます-
- シェフノード
- クックブック
- レシピ
- 環境
- クラウドリソース
- クラウドプロビジョニング
- Chefノード上のChefクライアントへのインストール
ナイフは、Chefインフラストラクチャを管理するための一連のコマンドを提供します。
ブートストラップコマンド
- ナイフブートストラップ[SSH_USER @] FQDN(オプション)
クライアントコマンド
- ナイフクライアントの一括削除REGEX(オプション)
- knife client create CLIENTNAME(オプション)
- knife client delete CLIENT(オプション)
- knife client edit CLIENT(オプション)
- 使用法:C:/opscode/chef/bin/knife(オプション)
- knife client key delete CLIENT KEYNAME(オプション)
- knife client key edit CLIENT KEYNAME(オプション)
- knife client key list CLIENT(オプション)
- knife client key show CLIENT KEYNAME(オプション)
- ナイフクライアントリスト(オプション)
- ナイフクライアントはクライアントを再登録します(オプション)
- knife client show CLIENT(オプション)
構成コマンド
- ナイフ設定(オプション)
- knife configure client DIRECTORY
クックブックコマンド
- ナイフクックブック一括削除REGEX(オプション)
- knife cookbook create COOKBOOK(オプション)
- knife cookbook delete COOKBOOK VERSION(オプション)
- ナイフクックブックダウンロードCOOKBOOK [バージョン](オプション)
- ナイフ料理の本のリスト(オプション)
- knife cookbook metadata COOKBOOK(オプション)
- FILEのknife cookbookメタデータ(オプション)
- knife cookbook show COOKBOOK [VERSION] [PART] [FILENAME](オプション)
- ナイフクックブックテスト[COOKBOOKS …](オプション)
- knife cookbook upload [COOKBOOKS …](オプション)
クックブックサイトコマンド
- ナイフクックブックサイトダウンロードCOOKBOOK [バージョン](オプション)
- ナイフクックブックサイトインストールCOOKBOOK [バージョン](オプション)
- ナイフクックブックサイトリスト(オプション)
- ナイフクックブックサイト検索QUERY(オプション)
- ナイフクックブックサイトシェアCOOKBOOK [CATEGORY](オプション)
- ナイフクックブックサイトショーCOOKBOOK [バージョン](オプション)
- ナイフクックブックサイトunshare COOKBOOK
データバッグコマンド
- knife data bag create BAG [ITEM](オプション)
- ナイフデータバッグ削除BAG [ITEM](オプション)
- ナイフデータバッグ編集BAG ITEM(オプション)
- ファイルBAGからのナイフデータバッグFILE | FOLDER [FILE | FOLDER ..](オプション)
- ナイフデータバッグリスト(オプション)
- ナイフデータバッグショーBAG [ITEM](オプション)
環境コマンド
- ナイフ環境比較[環境..](オプション)
- ナイフ環境作成環境(オプション)
- ナイフ環境削除環境(オプション)
- ナイフ環境編集環境(オプション)
- ファイルFILE [FILE ..]からのナイフ環境(オプション)
- ナイフ環境リスト(オプション)
- ナイフ環境ショーENVIRONMENT(オプション)
実行コマンド
- knife exec [SCRIPT](オプション)
ヘルプコマンド
- ナイフヘルプ[list | TOPIC]
インデックスコマンド
- ナイフインデックスの再構築(オプション)
ノードコマンド
- ナイフノードの一括削除REGEX(オプション)
- knife node create NODE(オプション)
- ナイフノード削除ノード(オプション)
- ナイフノード編集ノード(オプション)
- ナイフノード環境セットNODE ENVIRONMENT
- ファイルFILEからのナイフノード(オプション)
- ナイフノードリスト(オプション)
- knife node run_list add [NODE] [ENTRY [、ENTRY]](オプション)
- knife node run_list remove [NODE] [ENTRY [、ENTRY]](オプション)
- ナイフノードrun_listはノードエントリを設定します(オプション)
- knife node show NODE(オプション)
OSCコマンド
- knife osc_user create USER(オプション)
- knife osc_user delete USER(オプション)
- knife osc_user edit USER(オプション)
- knife osc_userリスト(オプション)
- knife osc_user USERの再登録(オプション)
- knife osc_user show USER(オプション)
パスベースのコマンド
- ナイフ削除[PATTERN1 … パターン]
- ナイフデプスPATTERN1 [PATTERNn]
- ナイフ差分パターン
- ナイフダウンロードパターン
- ナイフ編集[PATTERN1 … パターン]
- ナイフリスト[-dfR1p] [PATTERN1 … パターン]
- ナイフショー[PATTERN1 … パターン]
- ナイフアップロードパターン
- knife xargs [コマンド]
生のコマンド
- ナイフ生REQUEST_PATH
レシピコマンド
- ナイフレシピ一覧[PATTERN]
役割コマンド
- ナイフロール一括削除REGEX(オプション)
- knife role create ROLE(オプション)
- knife role delete ROLE(オプション)
- knife role edit ROLE(オプション)
- ナイフロールenv_run_list add [ロール] [環境] [エントリ[、エントリ]](オプション)
- ナイフの役割env_run_list clear [役割] [環境]
- ナイフロールenv_run_list remove [ロール] [環境] [エントリ]
- ナイフの役割env_run_listは[ROLE] [ENVIRONMENT] [OLD_ENTRY] [NEW_ENTRY]を置き換えます
- ナイフの役割env_run_listセット[役割] [環境] [エントリ]
- ファイルFILE [FILE ..]からのナイフの役割(オプション)
- ナイフの役割リスト(オプション)
- ナイフロールrun_list add [ロール] [エントリ[、エントリ]](オプション)
- ナイフの役割run_list clear [ROLE]
- ナイフロールrun_list削除[ロール] [エントリ]
- ナイフの役割run_listは[ROLE] [OLD_ENTRY] [NEW_ENTRY]を置き換えます
- ナイフの役割run_listセット[役割] [エントリ]
- ナイフロールショーロール(オプション)
配信コマンド
- ナイフサーブ(オプション)
SSHコマンド
- knife ssh QUERY COMMAND(オプション)
SSLコマンド
- knife ssl check [URL](オプション)
- knife ssl fetch [URL](オプション)
ステータスコマンド
- ナイフステータスクエリ(オプション)
タグコマンド
- ナイフタグはノードタグを作成します…
- ナイフタグ削除ノードタグ…
- ナイフタグリストNODE
ユーザーコマンド
- knife user create USERNAME DISPLAY_NAME FIRST_NAME LAST_NAME EMAIL PASSWORD(オプション)
- knife user delete USER(オプション)
- knife user edit USER(オプション)
- knife user key create USER(オプション)
- knife user key delete USER KEYNAME(オプション)
- knife user key edit USER KEYNAME(オプション)
- ナイフユーザーキーリストUSER(オプション)
- knife user key show USER KEYNAME(オプション)
- ナイフユーザーリスト(オプション)
- knifeユーザーがUSERを再登録します(オプション)
- knife user show USER(オプション)
ナイフのセットアップ
knifeを設定するには、。chef *ディレクトリに移動し、chefリポジトリ内に *knife.rb を作成する必要があります。これにより、設定の詳細がknifeに通知されます。 これにはいくつかの詳細があります。
上記のコードでは、次の2つのキーを使用するホストされたChefサーバーを使用しています。
ここで、knife.rbは、knifeに使用する組織と秘密キーの場所を伝えます。 ナイフにユーザーの秘密キーの場所を伝えます。
次のコード行は、ホストされたサーバーを使用していることをknifeに伝えます。
knife.rbファイルを使用して、バリデーターナイフは組織のホストされたOpscodeに接続できるようになりました。
シェフ-ソロ設定
Chef-Soloは、ローカルで実行されるオープンソースツールであり、Chefクライアントとサーバーの設定を複雑にすることなく、Chefクックブックを使用してゲストマシンをプロビジョニングできます。 自分で作成したサーバーでクックブックを実行するのに役立ちます。
ローカルマシンでChef-Soloを実行する前に、ローカルマシンに次の2つのファイルをインストールする必要があります。
- Solo.rb -このファイルは、クックブック、ロール、データバッグの場所をChefに伝えます。
- Node.json -必要に応じて、このファイルは実行リストとノード固有の属性を設定します。
solo.rbの構成
以下は、solo.rbを設定する手順です。
- ステップ1 *-chefリポジトリ内にsolo.rbファイルを作成します。
- ステップ2 *-ファイルをgit repoに追加します。
- ステップ3 *-次のコンテンツを含むchefリポジトリ内にnode.jsonファイルを作成します。
- ステップ4 *-ナイフを使用してシェフレポ内でntpクックブックを取得します。
- ステップ5 *-node.jsonファイルをGitに追加します。
- ステップ6 *-ファイルをコミットしてgit repoにプッシュします。
ノードでクックブックを実行する
- ステップ1 *-Chef-Soloをプロビジョニングするノードにログインします。
- ステップ2 *-マシンでChefリポジトリを複製します。
- ステップ3 *-シェフリポジトリにcdします。
最後に、シェフソロを実行してノードを収束させます-
シェフ-クックブック
クックブックはChefの基本的な作業単位であり、作業単位に関連するすべての詳細で構成され、Chefインフラストラクチャ上のノードとして構成されたシステムの構成と状態を変更する機能を備えています。 クックブックは複数のタスクを実行できます。 クックブックには、ノードの望ましい状態に関する値が含まれています。 これは、目的の外部ライブラリを使用してChefで実現されます。
クックブックの主要コンポーネント
- レシピ
- メタデータ
- 属性
- リソース
- テンプレート
- 図書館
- システムの作成に役立つその他のもの
クックブックを作成する
クックブックを動的に作成するには2つの方法があります。
- chefコマンドを使用する *ナイフユーティリティを使用する
Chefコマンドの使用
Chefコマンドを使用して空のクックブックを作成するには、次のコマンドを実行します。
VTestという名前のクックブック構造がディレクトリに作成され、以下が同じ構造になります。
ナイフユーティリティの使用
次のコマンドを使用して、ナイフユーティリティを使用してクックブックを作成します。
クックブックの構造は次のとおりです。
シェフ-クックブックの依存関係
クックブックの依存関係を定義する機能は、クックブックの管理に役立ちます。 この機能は、あるクックブックの機能を他のクックブックで使用する場合に使用されます。
たとえば、Cコードをコンパイルする場合は、コンパイルに必要なすべての依存関係がインストールされていることを確認する必要があります。 そうするために、そのような機能を実行できる別のクックブックがあるかもしれません。
chef-serverを使用している場合、クックブックメタデータファイルで減速する必要があるクックブックのこのような依存関係を知る必要があります。 このファイルは、クックブックのディレクトリ構造の上部にあります。 これは、正しいノードにクックブックを展開するのに役立つヒントをChefサーバーに提供します。
metadata.rbファイルの機能
- クックブックのディレクトリ構造の上部にあります。
- knifeコマンドを使用してクックブックがChefサーバーにアップロードされるとコンパイルされます。
- knife cookbook metadataサブコマンドでコンパイルされています。
- knife cookbook createコマンドの実行時に自動的に作成されます。
metadata.rbの構成
以下は、メタデータファイルのデフォルトのコンテンツです。
シェフ-役割
Chefのロールは、ノードをグループ化する論理的な方法です。 典型的なケースは、Webサーバー、データベースサーバーなどのロールを持つことです。 すべてのノードにカスタム実行リストを設定し、ロール内の属性値をオーバーライドできます。
役割を作成する
ロールを作成したら、Chefサーバーにアップロードする必要があります。
Chef Serverへのロールのアップロード
次に、サーバーと呼ばれるノードにロールを割り当てる必要があります。
ノードに役割を割り当てる
Chef-Clientを実行する
使い方
- Chefリポジトリのrolesフォルダー内のRubyファイルでロールを定義します。
- ロールは、名前と説明の属性で構成されます。
- ロールは、ロール固有の実行リストとロール固有の属性設定で構成されます。
- 実行リストにロールを持つすべてのノードには、ロールの実行リストが独自に厳密に設定されます。
- ロールの実行リスト内のすべてのレシピがノードで実行されます。
- ロールは、fileコマンドからknife roleを使用してChefサーバーにアップロードされます。
- ロールがノード実行リストに追加されます。
- 実行リストにロールを持つノードでChefクライアントを実行すると、ロールにリストされているすべてのレシピが実行されます。
シェフ-環境
Chefは、環境固有の構成の実行を支援します。 開発、テスト、実稼働用に個別の環境を用意することは常に良い考えです。
Chefでは、ノードを個別の環境にグループ化して、順序付けられた開発フローをサポートできます。
環境を作成する
その場で環境を作成するには、knifeユーティリティを使用します。 次のコマンドは、シェルのデフォルトエディターを開き、環境定義を変更できるようにします。
作成された環境のテスト
すべての環境のリストノード
_default環境
各組織は、常にデフォルト環境と呼ばれる少なくとも1つの環境から開始します。デフォルト環境は、常にChefサーバーで使用可能です。 とにかくデフォルト環境を変更することはできません。 あらゆる種類の変更は、作成したカスタム環境でのみ対応できます。
環境属性
環境で属性を定義してから、ノードのデフォルト設定をオーバーライドするために使用できます。 Chefクライアントの実行が行われると、これらの属性は、ノードに既に存在するデフォルトの属性と比較されます。 環境属性がデフォルトの属性よりも優先される場合、Chefクライアントは各ノードで実行されるときにこれらの設定と値を適用します。
環境属性は、default_attributeまたはoverride_attributeのみです。 通常の属性にすることはできません。 default_attributeまたはoverride_attributeメソッドを使用できます。
属性タイプ
デフォルト-デフォルト属性は、すべてのChefクライアントの実行の開始時に常にリセットされ、属性の優先順位が最も低くなります。
オーバーライド-オーバーライド属性は、すべてのChefクライアントの実行の開始時に常にリセットされ、デフォルトのforce_defaultおよびnormalよりも属性の優先順位が高くなります。 オーバーライド属性は、ほとんどの場合レシピで定義されますが、役割または環境の属性ファイルで指定することもできます。
属性を適用する順序
シェフ-デーモンとしてのシェフクライアント
Chef-Clientをデーモンとして実行すると、いつでもすべてのノードの状態を知ることができます。 これは、いつでもChef-Clientを実行するのに役立ちます。
前提条件
ノードはChefサーバーに登録され、エラーなしでChef-Clientが実行されている必要があります。
デーモンモードのChef-Client
30分ごとに実行するデーモンモードでChef-Clientを起動します。
上記のコードでは、– i はChef-Clientを必要なノードでデーモンモードで実行できるようにし、1800秒でChef-Clientデーモンを30分ごとに実行するように定義しています。
デーモン実行の検証
Chef-Clientがデーモンとして実行されていることを検証します。
上記のコマンドは、Chef-Clientの実行中のデーモンプロセスをgrepします。
他の方法
Chef-Clientをデーモンとして実行する代わりに、* cronジョブ*と同じように実行できます。
上記のcronジョブは、15分ごとに実行されます。
シェフ-シェフシェル
シェフの料理本を書くのはいつも大変です。 Chefサーバーへのアップロード、Vagrant VMのプロビジョニング、そこでの失敗の確認、すすぎ、繰り返しのフィードバックサイクルが長いため、さらに困難になります。 このような重い作業を一度に行う前に、いくつかのピースやレシピをテストできると簡単です。
ChefにはChef-Shellが付属しています。これは基本的にChefとのインタラクティブなRubyセッションです。 シェフシェルでは、作成することができます-
- 属性
- レシピを書く
- Chef Runの初期化
レシピの一部をその場で評価し、それらをChefサーバーにアップロードして、ノードで完全なクックブックを実行するために使用されます。
実行中のシェル
- ステップ1 *-スタンドアロンモードでChef-Shellを実行します。
- ステップ2 *-Chef-Shellで属性モードに切り替えます
- chef> attributes_mode
- ステップ3 *-属性値を設定します。
- chef:attributes> set [:title] = "Chef Cookbook"
- 「シェフクックブック」
- chef:attributes> quit
- :属性
- *シェフ> *
- ステップ4 *-レシピモードに切り替えます。
- chef> recipe_mode
- ステップ5 *-ファイルリソースを作成します。
- ステップ6 *-指定されたコンテンツでファイルを作成するためにChefの実行を開始します。
- chef:recipe> run_chef
使い方
- Chef-Shellは、いくつかの特定の機能で強化されたInteractive Ruby(IRB)セッションで始まります。
- attributes_modeやinteractive_modeなどのモードを提供します。
- レシピまたはクックブック内に記述されるコマンドを書くのに役立ちます。
- すべてをインタラクティブモードで実行します。
Chef-Shellは、スタンドアロンモード、クライアントモード、*ソロモード*の3つの異なるモードで実行できます。
- スタンドアロンモード-これはデフォルトのモードです。 クックブックはロードされず、実行リストは空です。
- クライアントモード-ここでは、シェフシェルはシェフクライアントとして機能します。
- ソロモード-ここでは、シェフシェルはシェフソロクライアントとして機能します。
シェフ-クックブックのテスト
クックブックが直接デプロイされ、実稼働サーバーで実行される場合、クックブックが実稼働で分割される可能性が高くなります。 これを防ぐ最善の方法は、セットアップ環境でクックブックをテストすることです。
テストの手順は次のとおりです。
- ステップ1 *-次のコマンドを使用してクックブックをインストールします。
- ステップ2 *-動作しているクックブックでナイフクックブックテストコマンドを実行します。
- ステップ3 *-クックブックで何かを壊して、もう一度テストします。
- ステップ4 *-ナイフテストコマンドを再度実行します。
作業方法
ナイフクックブックテストは、クックブック内のすべてのRubyファイルとすべてのERBテンプレートに対してRuby構文チェックを実行します。 Rubyファイルをループし、それぞれに対してRuby –c を実行します。 Ruby –c はスクリプトの構文をチェックし、実行せずに終了します。
すべてのRubyファイルを調べた後、knife cookbookテストはすべてのERBテンプレートとパイプを調べます。これは、 – x によってRuby –c によって作成された冗長バージョンです。
制限事項
ナイフクックブックテストでは、RubyファイルとERBテンプレートの単純な構文チェックのみを行います。 ChefSpecとテストキッチンを使用して、完全にテストドリブンを進めることができます。
シェフ-Foodcritic
問題なく優れたクックブックを作成することは非常に困難な作業です。 しかし、落とし穴を特定するのに役立つ方法があります。 Chef Cookbookでフラグを立てることができます。 Foodcriticはそれをアーカイブする最良の方法の1つであり、クックブックのロジックとスタイルで考えられる問題を特定しようとします。
Foodcriticセットアップ
- ステップ1 *-Foodcritic gemを追加します。
- ステップ2 *-gemをインストールします。
Foodcritic Gem
- ステップ1 *-クックブックでFoodcriticを実行します。
- ステップ2 *-詳細レポートを生成します。
作業方法
Foodcriticは一連のルールを定義し、それぞれがレシピエージェントをチェックします。 スタイル、接続性、属性、文字列、確率、検索、サービス、ファイル、メタデータなど、さまざまな領域に関する複数のルールが付属しています。
シェフ-ChefSpec
- テスト駆動開発(TDD)*は、実際のレシピコードを記述する前にユニットテストを記述する方法です。 テストは本物でなければならず、レシピが何をするかを検証する必要があります。 開発されたレシピがなかったため、実際には失敗するはずです。 レシピが開発されると、テストに合格するはずです。
ChefSpecは、人気のあるRSpecフレームワーク上に構築され、Chefレシピをテストするためのカスタマイズされた構文を提供します。
ChefSpecの作成
- ステップ1 *-chefSpec gemを含むgemファイルを作成します。
- ステップ2 *-gemをインストールします。
- ステップ3 *-スペックディレクトリを作成します。
- ステップ4 *-仕様を作成する
- ステップ5 *-ChefSpecを検証します。
- ステップ6 *-クックブックのデフォルトのレシピを編集します。
- ステップ7 *-テンプレートファイルを作成します。
- ステップ8 *-rspecを再度実行します。
使い方
動作させるには、まずChefでRSpecを使用するための基本インフラストラクチャをセットアップする必要があります。 次に、Ruby gemをChefSpecする必要があり、クックブックには、すべてのテストを保存するspecというディレクトリが必要です。
シェフ-テストキッチン付きテストクックブック
テストキッチンはChefの統合テストフレームワークです。 クックブックを使用してVMがインスタンス化および収束された後に実行されるテストの作成が可能になります。 テストはVM上で実行され、すべてが期待どおりに機能することを確認できます。
これは、ChefSpecのノードコントラクトであり、Chefの実行のみをシミュレートします。 Test Kitchenは実際のノードを起動し、Chefを実行します。
設定する
これを行うには、仮想マシンの管理に役立つVagrantをマシンにインストールする必要があります。 次に、クックブックの依存関係を管理するために、本棚をインストールしてVagrantにフックする必要があります。
- ステップ1 *-クックブックのデフォルトのレシピを編集します。
- ステップ2 *-クックブックの属性を編集します。
- ステップ3 *-gemファイルを編集して、必要なRuby gemをインストールします。
- ステップ4 *-必要なRuby gemをインストールします。
- ステップ5 *-クックブックに.kitchen.ymlファイルを作成します。
- ステップ6 *-クックブック内にテストディレクトリを作成します。
- ステップ7 *-統合テスト用のテストクックブックを作成します。
- ステップ8 *-テストクックブックのデフォルトレシピを編集します。
- ステップ9 *-クックブック内にミニテスト仕様を作成します。
- ステップ10 *-メインクックブックのBerksfileを編集します。
セットアップのテスト
シェフ-ノード
入門
開始するには、ナイフプリフライトgemをインストールする必要があります。
- ステップ1 *-gemファイルでパスを定義します。
- ステップ2 *-bundlerを実行してknife-preflight gemをインストールします。
作業方法
指定されたクックブックでナイフプリフライトを実行します。
preflightコマンドを実行して、展開された実行リストで特定のクックブックを持つノードとロールを確認できます。
ノードでクックブックを実行する方法は複数あります。
- ノードの実行リストに追加することで、クックブックをノードに直接割り当てることができます。
- ロールにクックブックを追加し、ノードの実行リストにロールを追加できます。
- ロールを別のロールの実行リストに追加し、その別のロールをノードの実行リストに追加できます。
- クックブックは、使用される別のクックブックの依存関係になる場合があります。
どのようにクックブックがノードの実行リストに追加されても、Chefがロールとレシピのすべての拡張リストをノード属性に保存するため、knife preflightコマンドはそれをキャッチします。 knife preflightコマンドは、これらのノード属性を正確に検索します。
シェフ-シェフクライアント実行
Chef-Clientの実行をテストするには、ホストされているChefまたは独自のホストされているサーバーを使用するようにChef-Clientを構成する必要があります。
デバッグモードでのChef-Clientの実行
最後のChef-Client実行の結果の検査
新しいクックブックを開発しているときに、最後のChef-Clientの実行、特に失敗の問題を確認するには、正確に何が間違っていたかを知る必要があります。 Chefはすべてをstdoutに出力しますが、デバッグログをもう一度表示したい場合があります。
テストする場合、コンパイル時に失敗する壊れたクックブックが必要です。
詳細については、スタックトレースを調べることができます。
Chef-レシピの動的構成
属性は、クックブックを動的に構成するための重要なコンポーネントです。 属性により、作成者はクックブックを構成可能にすることができます。 クックブックに設定されているデフォルト値をオーバーライドすることにより、ユーザーは独自の値を注入できます。
- ステップ1 *-クックブック属性のデフォルトファイルを作成し、それにデフォルト属性を追加します。
- ステップ2 *-レシピ内の属性を定義します。
- ステップ3 *-変更したクックブックをアップロードします。
- ステップ4 *-定義されたノードのChef-Clientを実行します。
作業方法
Chefは、属性ファイルからすべての属性をロードしてから実行します。 属性はノードオブジェクトとともに保存されます。 レシピ内のノードオブジェクトに格納されているすべての属性にアクセスし、現在の値を取得できます。
Chefの構造は制限されており、デフォルトの最小値から始まり、通常のセット(セットにエイリアスされます)になり、オーバーライドされます。 レシピで設定された属性レベルは、属性ファイルで設定された同じレベルよりも優先されます。
ノードおよび環境レベルでの属性のオーバーライド
ロールまたは環境で定義された属性が最も優先されます。
- ステップ1 *-ロールを作成します。
- ステップ2 *-Chefサーバーにロールをアップロードします。
- ステップ3 *-ノードに役割を割り当てます。
- ステップ4 *-Chef-Clientを実行します。
シェフ-テンプレート
インフラストラクチャでは、*構成管理*は、ホストをどの程度適切に構成するかに関するものです。 一般に、すべての構成は構成ファイルを使用して行われます。 Chefはテンプレートを使用して、構成ファイルに動的な値を入力できるようにします。
Chefは、レシピで使用できるリソースとしてテンプレートを提供します。 構成ファイルの動的な値は、データバッグ、属性から取得したり、テンプレートに渡して計算したりできます。
それの使い方?
- ステップ1 *-テンプレートをレシピに追加します。
ステップ2 *- *ERB テンプレートファイルを追加します。
- ステップ3 *-変更したクックブックをChefサーバーにアップロードします。
- ステップ4 *-アップロードされたファイルのコンテンツを検証します。
ワークフロー
Chefは、テンプレート言語としてErubisを使用します。 テンプレートの特別なシンボル内に純粋なRubyコードを埋め込むことができます。
- <%=%>は、変数の値またはRuby式を生成されたファイルに出力する場合に使用されます。
- <%-%>は、Rubyロジックをテンプレートファイルに埋め込む場合に使用されます。 これを使用して式を4回ループします。
Chef-Chef DSLを使用したプレーンRuby
Chefでは、単純なレシピを作成する必要がある場合、テンプレート、remote_file、サービスなど、Chefで利用可能なリソースを使用できます。 ただし、レシピが複雑になると、条件に応じてレシピの一部を実行する条件ステートメントなどの高度なテクニックが必要になります。 これは、プレーンRubyとChef Domain Specific Language(DSL)を混合する力です。
それの使い方?
クライアントモードのいずれかのノードでChef Shellを起動して、Chefサーバーにアクセスできるようにします。
Chef DSLの基本条件
プレーンRubyを使用して名前でノードを並べ替えます。
ノードをループし、オペレーティングシステムを印刷します。
配列、ループ、および文字列拡張を使用して複数のRuby gemをインストールし、gem名を作成します。
作業方法
ChefレシピはRubyファイルであり、Chef runのコンテキストで評価されます。 これらには、ifステートメントやループなどの単純なRubyコード、およびリソースなどのChef DSL要素を含めることができます。
レシピ内では、Ruby変数を単純に宣言して値を割り当てることができます。
シェフ-レシピ付きRuby Gems
レシピは、基本的にRubyコードであるクックブックの主要な構成要素です。 Chefレシピ内ですべてのRuby言語機能を使用できます。 ほとんどの場合、Rubyビルドイン機能で十分ですが、場合によっては追加のRuby gemを使用する必要があります。 たとえば、レシピ自体からMySQLデータベースにアクセスする必要がある場合。
Chefレシピには、同じレシピ内で使用するために必要なRuby gemを取得する機能があります。
特定のレシピでiptable Gemを使用する
- ステップ1 *-クックブックのデフォルトレシピを編集し、レシピ内で使用するgemをインストールします。
- ステップ2 *-変更したクックブックをChefサーバーにアップロードします。
- ステップ3 *-Chefクライアントを実行して出力を確認します。
作業方法
Chefの実行手順は、すべてのリソースをコンパイルするコンパイルフェーズと、ノードを目的の状態に収束させるためにChefがリソースプロバイダーを実行する実行フェーズで構成されます。 クックブック内に特定のRuby gemが必要な場合は、複雑化フェーズでgemをインストールする必要があります。
chef_gemリソースはまったく同じことを行います。Chefでは、オムニバスが唯一の作業方法です。 その主な機能は、宝石をChef自体で利用できるようにすることです。
シェフ-図書館
Chefのライブラリは、クックブックのレシピがきれいできれいなままになるように、コンパイルされたロジックをカプセル化する場所を提供します。
ライブラリを作成する
- ステップ1 *-クックブックのライブラリにヘルパーメソッドを作成します。
- ステップ2 *-ヘルパーメソッドを使用します。
- ステップ3 *-変更したクックブックをChef Serverにアップロードします。
ライブラリのテスト
作業方法
- Chefライブラリコードは、chef
- Recipeクラスを開き、手順1で行ったように新しいメソッドを追加できます。 この手順は最もクリーンではありませんが、最も簡単な方法です。
ベストプラクティス
- chef
- recipeクラスを開くと、汚染される変更があります。 ベストプラクティスとして、ライブラリ内に新しいサブクラスを導入し、メソッドをクラスメソッドとして定義することは、常により良い方法です。 これにより、chef :: recipe名前空間のプルが回避されます。
レシピ内で次のようなメソッドを使用できます
シェフ-定義
定義は、繰り返し使用されるリソースをグループ化する論理的な方法として定義できます。 このフローでは、リソースをグループ化し、定義されたクックブックを読みやすくするためにリソースに名前を付けます。
これを行うには、レシピが必要です。 この場合、test_cookbookとクックブックを含むノードの実行リストを使用しています。
定義を作成する
- ステップ1 *-クックブック定義フォルダーに新しい定義ファイルを作成します。
- ステップ2 *-クックブックのデフォルトレシピ内で定義を使用します。
- ステップ3 *-クックブックをchefサーバーにアップロードします。
- ステップ4 *-目的のノードでChefクライアントを実行します。
クックブックの定義は、リソースをグループ化して名前を付けるマイクロのようなものです。 定義には、レシピの内部から呼び出すことができる名前があり、境界のリストがあります。
定義には、コード内で次のように見えるパラメーターがあります。
次のようにデフォルトのレシピ内で使用できます。
シェフ-環境変数
環境変数は、特定のノードでChefレシピを正常に実行するための重要な方法です。 手動で設定する方法とシェルスクリプトを使用する方法のいずれかで、複数の方法があります。 ここで実行する必要があるのは、レシピを介して設定することです。
これを行うには、test_cookbookとtest_cookbookを含む実行リストを使用するクックブックが必要です。
Chef Recipeを使用した環境変数の設定
- ステップ1 *-環境変数でクックブックのデフォルトのレシピを更新します。
- ステップ2 *-更新されたクックブックをサーバーにアップロードします。
- ステップ3 *-Chefクライアントを実行して一時ファイルを作成します。
変数の検証
作業方法
Rubyは、ENV –a ハッシュを介して現在の環境変数を公開し、環境変数を読み取って変更します。
リソースを実行する
実行リソースを使用して、クックブックのChefデフォルトレシピ内で同じことを実行できます。
注-ENVを使用して環境変数を設定すると、Chef全体の実行中にその変数が使用可能になります。 対照的に、それを実行リソースに渡すと、リソースによって実行されるその1つのコマンドでのみ使用可能になります。
シェフ-データバッグ
Chefデータバッグは、クックブックで使用できる任意のデータコレクションとして定義できます。 データバッグの使用は、レシピの属性をハードコーディングしたり、クックブックに属性を保存したくない場合に非常に役立ちます。
作業方法
次のセットアップでは、httpエンドポイントURLと通信しようとしています。 このために、エンドポイントURLの詳細を保持し、レシピで使用するデータバッグを作成する必要があります。
- ステップ1 *-データバッグ用のディレクトリを作成します。
- ステップ2 *-リクエストビンのデータバッグアイテムを作成します。 定義されたrequestBin URLを使用していることを確認する必要があります。
- ステップ3 *-Chefサーバーでデータバッグを作成する
- ステップ4 *-データバッグをChefサーバーにアップロードします。
- ステップ5 *-クックブックのデフォルトレシピを更新して、データバッグから必要なクックブックを受け取ります。
- ステップ6 *-変更したクックブックをChefサーバーにアップロードします。
- ステップ7 *-ノードでChefクライアントを実行して、http要求ビンが実行されるかどうかを確認します。
使い方
データバッグは、構造データエントリの名前付きコレクションです。 データエントリを定義し、JSONファイルでデータバッグアイテムを呼び出す必要があります。 レシピ内からデータバッグアイテムを検索して、データバッグに保存されているデータを使用することもできます。
フックと呼ばれるデータバッグを作成しました。 データバッグは、Chefリポジトリ内のディレクトリです。 サーバーでナイフを作成しました。
Chef-データバッグのスクリプト
特定の条件では、サーバーをChefの完全な制御下に置くことはできません。 そのような場合、スクリプトからChefデータバッグの値にアクセスする必要があります。 これを行うには、データバッグの値をJSONファイルに保存し、追加されたスクリプトがそれらの値にアクセスできるようにする必要があります。
そのためには、料理の本が必要です。 この場合、以前のようにtest_cookbookを使用し、test_cookbook定義を含むノードの実行リストが含まれている必要があります。
作業方法
- ステップ1 *-データバッグを作成します。
- ステップ2 *-データバッグアイテムを作成します。
- ステップ3 *-データバッグアイテムを更新します。
クックブックで使用する
- ステップ1 *-上記のクックブックを使用してデータバッグ値を含むJSONファイルを作成し、外部スクリプトがそれらの値にアクセスできるようにする必要があります。
- ステップ2 *-test_cookbookをChefサーバーにアップロードします。
- ステップ3 *-ノードでChefクライアントを実行します。
- ステップ4 *-生成されたJSONファイルのコンテンツを検証します。
スクリプトのワークフロー
上記のコマンドでは、 /etc ディレクトリ内にJSONファイルを作成するために使用したファイルリソースがデフォルトのクックブックで定義されています。 data_bag_itemメソッドを使用して、データバッグからファイルコンテンツを直接取得します。 データバッグアイテムからホスト値にアクセスし、JSONに変換します。 ファイルリソースは、JSON変換された値をコンテンツとして使用し、ディスクに書き込みます。
シェフ-クックブックのクロスプラットフォーム
Cross-Platformクックブックは、実行する基本的な環境を採用するクックブックです。 Chefは多くの機能を提供します。これは、デプロイされるOSで実行可能なクロスプラットフォームクックブックを作成するのに役立ちます。 これにより、開発者は完全に機能するクックブックを作成できます。
これを行うには、クックブックが必要です。 私たちの場合、それはtest_cookbookとクックブック定義を含む実行リストになります。
作業方法
ノードプラットフォームの詳細を取得し、クックブックで条件ロジックを実行することは、プラットフォームに依存します。 今回のケースでは、Ubuntuでテストします。
- ステップ1 *-ノードがUbuntuの場合、メッセージを記録します。
- ステップ2 *-クックブックをChefサーバーにアップロードします。
- ステップ3 *-ノードでChefクライアントを実行します。
あるいは、特定のプラットフォームに興味がなく、使用している宣言的なプラットフォームを知るだけでよい場合は、次のステートメントを使用できます。
変更されたクックブックをアップロードし、UbuntuノードでChefクライアントを実行すると、次の結果が表示されます。
スクリプトのワークフロー
上記のコマンドで、Ohaiはノードのオペレーティングシステムの現在のステータスを検出し、ノードオブジェクトと共にプラットフォーム属性として保存します。
または、メソッドスタイルの構文を使用することができます-
プラットフォーム固有の値の設定
プラットフォーム固有の値を設定するために、chefは便利なメソッドvalue_for_platformおよびvalue_for_platform_familyを提供しています。 複雑なcaseステートメントを回避し、代わりに単純なハッシュを使用するために使用できます。
クックブックの例
上記の例では、コマンドは定義されているOS固有です。
- Debianの場合、「runsvdir-start」が機能します
- Ubuntuの場合、「start runsvdir」が機能します
- Gentooの場合、「/etc/init.d/runit-start」が機能します
シェフ-リソース
Chefリソースは、望ましい状態のオペレーティングシステムの一部を表します。 これは、現在の構成を使用してリソースプロバイダーを使用するノードの望ましい状態を記述する構成ポリシーのステートメントです。 ChefのOhaiメカニズムを使用して、ターゲットマシンの現在のステータスを知るのに役立ちます。 また、ターゲットマシンをその状態にするために実行するために必要な手順を定義するのにも役立ちます。 リソースは、作業構成を説明するレシピにグループ化されます。
- Chefの場合、chef
- Platformは各ノードのプロバイダーとプラットフォームバージョンをマップします。 すべてのChefクライアントの実行の開始時に、Chefサーバーは現在のマシンの詳細を収集します。 後で、Chefサーバーはこれらの値を使用して正しいプロバイダーを識別します。
リソース構文
上記の構文では、「タイプ」はリソースタイプであり、「名前」は使用する名前です。 「do」ブロックと「end」ブロックには、そのリソースの属性と、その特定のリソースに対して実行する必要があるアクションがあります。
レシピで使用するすべてのリソースには、「do」ブロックと「end」ブロック内で定義される独自のアクションセットがあります。
例
すべてのリソースは、機能、アクション、プロパティ、条件付き実行、通知、およびアクションの関連パスの共通セットを共有します。
Actions | The *:nothing *action can be used with any resource or custom resource. |
Properties | The ignore_failure, provider, retries, retry_delay, and supports properties can be used with any resource or custom resources. |
Guards | The not_if and only_if conditional executions can be used to put additional guards around certain resources, so that they are only run when the condition is met. |
Guard Interpreters | Evaluates a string command using a* script*-based resource: bash, csh, perl, powershell_script, python, *or ruby*. |
Notifications | The notifies and subscribes notifications can be used with any resource. |
Relative Paths | The #\{ENV['HOME']} relative path can be used with any resource. |
Windows File Security | The template, file, remote_file, cookbook_file, directory, *and remote_directory* resources support the use of inheritance and access control lists (ACLs) within recipes. |
Run in Compile Phase | Sometimes a resource needs to be run before every other resource or after all resources have been added to the resource collection. |
利用可能な資源
apt_package
Bash
バッチ
このリソースは、 execute リソースからアクション(:runおよび:nothing)およびプロパティ(creates、cwd、environment、group、path、timeout、およびuser)を継承します。 このリソースで実行されるコマンドは、それらが実行される環境に通常一意であるため、(本来)by等ではありません。 not_if および only_if を使用して、このリソースをべき等性から保護します。
bff_package
chef_gem
cookbook_file
ファイルはファイルの特異性に従って選択されるため、ホスト名、ホストプラットフォーム(オペレーティングシステム、ディストリビューション、または必要に応じて)、またはプラットフォームバージョンに基づいて、さまざまなソースファイルを使用できます。 COOKBOOK_NAME/files/defaultサブディレクトリにあるファイルは、どのプラットフォームでも使用できます。
Cron
cronリソースを使用して、時間ベースのジョブスケジューリング用のcronエントリを管理します。 スケジュールのプロパティはデフォルトで&ast;になります。提供されない場合。 cronリソースには、crontabプログラム(通常はcron)へのアクセスが必要です。
Csh
cshインタープリターを使用してスクリプトを実行するには、cshリソースを使用します。 このリソースは、実行リソースで使用可能なアクションとプロパティのいずれかを使用する場合もあります。
このリソースで実行されるコマンドは、それらが実行される環境に通常一意であるため、(本来)by等ではありません。 not_ifおよびonly_ifを使用して、このリソースのべき等性を保護します。
展開する
ディレクトリ
- ディレクトリ*リソースを使用してディレクトリを管理します。ディレクトリは、コンピュータに保存されているすべての情報を含むフォルダの階層です。 ルートディレクトリはトップレベルで、その下に残りのディレクトリが編成されます。
dpkg_package
easy_install_package
Env
erl_call
実行する
File
freebsd_package
gem_package
Git
グループ
homebrew_package
http_request
ifconfig
インターフェイスを管理するには、 ifconfig リソースを使用します。
ips_package
Ksh
このリソースで実行されるコマンドは、それらが実行される環境に通常一意であるため、(本来)by等ではありません。 not_ifおよびonly_ifを使用して、このリソースのべき等性を保護します。
Link
Log
- log リソースを使用して、ログエントリを作成します。 ログリソースは他のリソースと同様に動作します。コンパイルフェーズでリソースコレクションに組み込まれ、実行フェーズで実行されます。 (リソースコレクションに組み込まれていないログエントリを作成するには、ログリソースの代わりにChef
- Logを使用します)
macports_package
macports_packageリソースを使用して、Mac OS Xプラットフォームのパッケージを管理します。
MDADM
構成ファイルが必要な場合は、正しいアレイレイアウトのテンプレートを指定してから、マウントプロバイダーを使用してファイルシステムテーブル(fstab)エントリを作成する必要があります。
マウント
マウントリソースを使用して、マウントされたファイルシステムを管理します。
Ohai
パッケージ
pacman_package
powershell_script
Python
Pythonインタープリターを使用してスクリプトを実行するには、 python リソースを使用します。 このリソースは、実行リソースで使用可能なアクションとプロパティのいずれかを使用する場合もあります。
このリソースで実行されるコマンドは、それらが実行される環境に通常一意であるため、(本来)by等ではありません。 not_ifおよびonly_ifを使用して、このリソースのべき等性を保護します。
リブート
registry_key
remote_directory
remote_directoryリソースはファイルの特異性に従います。
remote_file
ルート
Linuxリソースでは、ルートリソースを使用してシステムルーティングテーブルを管理します。
rpm_package
Ruby
Rubyインタープリターを使用してスクリプトを実行するには、 ruby リソースを使用します。 このリソースは、実行リソースで使用可能なアクションとプロパティのいずれかを使用する場合もあります。
このリソースで実行されるコマンドは、それらが実行される環境に通常一意であるため、(本来)by等ではありません。 not_ifおよびonly_ifを使用して、このリソースのべき等性を保護します。
ruby_block
スクリプト
スクリプトリソースを使用して、Bash、csh、Perl、Python、Rubyなどの指定されたインタープリターを使用してスクリプトを実行します。 このリソースは、実行リソースで使用可能なアクションとプロパティのいずれかを使用する場合もあります。
このリソースで実行されるコマンドは、それらが実行される環境に通常一意であるため、(本来)by等ではありません。 not_ifおよびonly_ifを使用して、このリソースのべき等性を保護します。
サービス
smart_os_package
solaris_package
転覆
テンプレート
User
windows_package
windows_service
yum_package
シェフ-軽量リソースプロバイダー
- Lightweight Resource Provider(LWRP)*は、機能を拡張することで利用可能なリソースのリストを拡張するオプションを提供し、Chefユーザーがカスタムリソースを作成できるようにします。
カスタムリソースを作成すると、レシピコードをより表現力豊かにするのに役立つChef DSLを使用して充実したカスタムリソースを所有できるため、単にクックブックを作成できます。
Chefコミュニティでは、カスタムリソースの多くはLWRPを使用して実装されます。 iptables_rules や apt_repository など、LWRPの多くの実例があります。
作業方法
クックブック名Testing_resourceと、Testing_resourceクックブックを含むノードのrun_listがあることを確認してください。
LWRPの構築
- ステップ1 *-Testing_resourceクックブックでカスタムリソースを作成します。
- ステップ2 *-Tesing_resourceクックブックでリソースのプロバイダーを作成します。
- ステップ3 *-Testing_resourceのデフォルトレシピを編集して、新しいリソースを使用します。
- ステップ4 *-変更したクックブックをChefサーバーにアップロードします。
- ステップ5 *-ノードでChef-Clientを実行します。
- ステップ6 *-生成されたファイルの内容を検証します。
ワークフロースクリプト
LWRPは料理の本に住んでいます。 カスタムリソースはクックブック内に存在し、クックブック名の下で使用できます。 ワークフローでは、まず定義を定義してから、クックブックで使用されるリソースに属性を渡します。 最後に、レシピでこれらのアクションと属性を使用します。
シェフ-設計図
Chefでは、設計図はサーバー上に存在するものを正確に見つけて記録するためのツールです。 ブループリントは、ディレクター、パッケージ、構成ファイルなど、必要なすべてのものを記録します。 ブループリントには、サーバー情報をさまざまな形式で分割する機能があります。 それらの1つはシェフのレシピです。 これは、Chefを使用して一意のサーバーを構成するのに役立ちます。
装着方法
ブループリントを実行する必要があるノードにPythonとGitをインストールする必要があります。
- ステップ1 *-ブループリントをインストールします。
- ステップ2 *-ブループリントを作成します。
- ステップ3 *-ブループリントからクックブックを作成します。
- ステップ4 *-生成されたファイルの内容を検証します。
ワークフロースクリプト
ブループリントは、サーバーの関連するすべての構成データを見つけてGitリポジトリに保存するPythonパッケージです。 各ブループリントには独自の名前があります。
さまざまなフォルマントでGitリポジトリのコンテンツを表示するように設計図を要求できます。
ブループリント表示コマンド
上記のコマンドは、インストールされているすべての種類のパッケージを表示します。 他のshowコマンドは次のとおりです-
- ショーファイル
- ショーサービス
- show-sources
シェフ-ファイルとパッケージ
Chefでは、構成ファイルの作成とパッケージの移動が重要なコンポーネントです。 Chefが同じことを管理する方法は複数あります。 Chefがファイルとソフトウェアパッケージの処理でサポートする方法は複数あります。
サードパーティリポジトリからのパッケージのインストール
- ステップ1 *-クックブックのデフォルトのレシピを編集します。
- ステップ2 *-メタデータを編集して、aptクックブックへの依存関係を追加します。
- ステップ3 *-変更したクックブックをChefサーバーにアップロードします。
- ステップ4 *-インストールしようとしているパッケージがまだインストールされていないことを検証します。
- ステップ5 *-デフォルトのレポを検証します。
- ステップ6 *-ノードでChef-Clientを実行します。
- ステップ7 *-必要なパッケージがインストールされていることを検証します。
ソースからソフトウェアをインストールする
特定のプラットフォームのパッケージとして利用できないソフトウェアをインストールする必要がある場合は、自分でコンパイルする必要があります。 Chefでは、スクリプトリソースを使用してこれを行うことができます。
- ステップ1 *-デフォルトのレシピを編集します。
- ステップ2 *-変更したクックブックをChefサーバーにアップロードします。
- ステップ3 *-ノードでChef-Clientを実行します。
- ステップ4 *-nginxがインストールされていることを検証します。
シェフ-コミュニティクックブック
コミュニティクックブックは、他のクックブックに似ています。 コミュニティクックブックと呼ばれる唯一の理由は、クックブックを書くことを知っている人なら誰でもこのコミュニティに参加して、クックブックを中央ハブにアップロードできるからです。 これらのクックブックは無料で利用でき、誰でもダウンロードして使用できます。 これらのコミュニティクックブックを使用するには、それらをダウンロードし、要件に従って変更し、それぞれのChefサーバーにアップロードする必要があります。
クックブックを更新、アップロード、ダウンロードするには、システムでナイフを設定する必要があります。 knife cookbookコマンドを使用してクックブックを操作します。 ナイフクックブックを使用すると、クックブックを作成、削除、表示、一覧表示、ダウンロード、およびアップロードできます。 第7章の詳細については、knife cookbookコマンドのドキュメントを参照してください。
コミュニティクックブックのリンクを次に示します。https://supermarket.chef.io/cookbooks-directory[https://supermarket.chef.io/cookbooksdirectory]