[和訳] Validatorなしでのブートストラップ #getchef
この記事は1年以上前に投稿されました。情報が古い可能性がありますので、ご注意ください。
本稿は Validatorless Bootstraps (2015/04/16) の和訳です。
Chef Clientのバージョン12.2.0から、Knifeで新しくChefのNodeをプロビジョニングする際のvalidationキーが必要なくなりました。さらに、この機能の恩恵を受けるために必要なことは、validationキーを削除することと、任意でknife.rbファイルからvalidatorの設定を削除することです。
validationキーを新しくプロビジョニングしたNodeに配布し、新しいClientとNodeをプロビジョニングするためにNodeをvalidationキーで認証する代わりに、knife bootstrapコマンドはNodeのClientキーを作成するためにUserのキーを使い、Node Objectを作成するためにClientキーを使い、そしてNodeにClientキーを配布します。
設定の詳細
Chef Clientのバージョン12.2.0から、既存のUserは新しくknifeでブートストラップする際に次のようなバナーを見るようになったと思います。
Doing old-style registration with the validation key at /home/lamont/.chef/myorg-validator.pem...
Delete your validation key in order to use your user credentials instead
新しい挙動を取るようにするには、単純にvalidatorキーを削除するだけです。
rm -f /home/lamont/.chef/myorg-validator.pem
knife.rbファイルの既存のvalidation_client_nameとvalidation_keyパラメータも削除できます。validation_keyのデフォルト値は「/etc/chef/validation.pem」で、そのファイルがWorkstationかServerに存在してしまっていると、validation_key設定を削除した後でも使われることに注意してください。そのファイルも削除するか、無効にするならばvalidation_keyを「/nonexist」のような値に設定すべきです。
プロビジョニングの詳細
validationキーを使わない場合のknife bootstrapの新しい出力は次のようになります。
desktop% knife bootstrap 10.1.1.1 -N foo01.acme.org \
-E dev -r 'role[base] -j '{ "foo": "bar" }' \
--ssh-user vagrant --sudo
Node foo01.acme.org exists, overwrite it? (Y/N)
Client foo01.acme.org exists, overwrite it? (Y/N)
Creating new client for foo01.acme.org
Creating new node for foo01.acme.org
Connecting to 10.1.1.1
10.1.1.1 Starting first Chef Client run...
[....etc...]
これからわかることは、NodeとClientが既に存在しているなら、knife bootstrapはそれらを上書きしようとすることです。「-y」コマンドラインオプションをつけると、確認をスキップして「y」と答えたことにします。まず新しいClientを作成し、そのClientキーで新しいNodeを作成します。
この舞台裏で、knife bootstrapの「-r」「-E」「-j」オプションは作成された新しいNodeに既に適用されています----つまり、データベース中のNode Objectはrun_listとenvironmentを持っていて、初期の「normal」json Attributeを保存しています。これは何らかの理由によって初回のchef-client実行が失敗してNodeが保存されず、自身のrun_listとenvironmentを「忘れてしまう」という状況を防ぐためです。ホスト上でプロビジョニングを開始する前にNodeが正しいデータを保存していれば、初回のchef-client実行が何らかの理由によって失敗したとしても、run_listは正しい状態となります。
まとめ
Chef 12.2.0に対するvalidatorなしのブートストラップの変更は、次の点を達成しています。
- validationキーがもはや不要に (物事がより少なくなるよう、凝ったことを削減)
- アクセスの共有を排除できるように (そして究極的にはプロビジョニング動作をよりよく監査できるように)
- 初回実行の失敗によってNodeが自身のrun_list、environmentやAttributeを忘れてしまうような状況の排除
- データベース中に古いClientキーやNode Objectが存在している状況も柔軟に対応