4

Web サーバーと SQL サーバーをプロビジョニングするためのクックブックのセットがあり、現在、継続的デプロイ パイプラインで使用されています。各開発マシンをchefサーバーに登録せずに、開発者が同じクックブックを使用してローカル開発環境をセットアップできるようにしたいと考えています。シェフゼロを使用してこれを達成できるようですが、使い始めるのにいくつか問題があります.

クックブックを含むchef-repoフォルダーがあり、この記事の手順に従っていました。

PS C:\Temp\chef-repo> tree .
Folder PATH listing
Volume serial number is 3E77-463C
C:\TEMP\CHEF-REPO
└───cookbooks
    └───test
        └───recipes
PS C:\Temp\chef-repo> cat .\cookbooks\test\recipes\default.rb
file "C:\Temp\test.log" do
  content 'HELLO WORLD'
end

ただし、実行するchef-client -z -o testとクックブックが見つからないようです。

これは私が得るエラーです:

Starting Chef Client, version 11.16.0
[2014-09-25T10:17:37-05:00] WARN: Run List override has been provided.
[2014-09-25T10:17:37-05:00] WARN: Original Run List: []
[2014-09-25T10:17:37-05:00] WARN: Overridden Run List: [recipe[test]]
resolving cookbooks for run list: ["test"]

================================================================================
Error Resolving Cookbooks for Run List:
================================================================================

Missing Cookbooks:
------------------
No such cookbook: test

Expanded Run List:
------------------
* test


Running handlers:
[2014-09-25T10:17:37-05:00] ERROR: Running exception handlers
Running handlers complete
[2014-09-25T10:17:37-05:00] ERROR: Exception handlers complete
[2014-09-25T10:17:37-05:00] FATAL: Stacktrace dumped to C:/Users/username/.chef/local-mode-cache/cache/chef-stacktrace.out
Chef Client failed. 0 resources updated in 25.375311 seconds
[2014-09-25T10:17:38-05:00] FATAL: Net::HTTPServerException: 412 "Precondition Failed "

このコマンドC:\Temp\chef-repoは、chef リポジトリ フォルダーのルートである から実行します。%USERPROFILE%\.chef\knife.rbまた、次の設定を含むように my を変更しようとしました。

cookbook_path [
  "C:\Temp\chef-repo\cookbooks"
]
local_mode true
node_name "Chef.example.com"

私は何を間違っていますか?

4

2 に答える 2

4

間違っているのは、confが指定していることです

cookbook_path [
  "C:\Temp\chef-repo\cookbooks"
]

C:Tempchef-repocookbooksこれはおそらく、knife.rb をロードするときに ruby\​​ と解釈されるでしょう/\\

knife.rb は ruby​​ ファイルであり、ruby コードとして解析されます。

多くのプログラミング言語と同様に、\は次の文字をエスケープするために使用されます。

正確に編集する:

常にスラッシュを使用してください。間違いを避けることができ、コピー コマンドなどで必要な場合は、chef が適切にエスケープされたバックスラッシュに置き換えます。

バックスラッシュを使用する唯一の場所は、ヒアドキュメント構文を使用したバッチ リソースであり、とにかくそれらをエスケープする必要がある場合があります (エスケープの必要性については不明です)。

于 2014-09-26T15:21:06.147 に答える