17

はじめ に 私は、職場でのサーバー管理を自動化するために Chef を学んでいます。ここからchefdk 3.0をダウンロードしまし た 。今、chefを使用して最初のクックブックを作成しようとしています。

重要 私はこれを Windows 環境でテスト目的で使用しています。Windows には iptables がないため、失敗すると予想されますが、クックブックが見つからないという理由で失敗することはないと思います。Windowsクックブックを使用してみましたが、動作します。

クックブックを作成して実行することはできますが、スーパーマーケットから依存関係を参照することはできません

私は2つの選択肢を試しました:

代替案 1

次のコマンドを使用してクックブックを作成しました

chef generate cookbook learn_chef_httpd

このチュートリアルから)

チュートリアルを完了することができたので、別のクックブックを参照してテストしたいので、simple_iptablesを選択しました

この行を追加しました

cookbook 'simple_iptables', '~> 0.7.0'

スーパーマーケットで説明されているように、私のBerksfileに。

次に、次の行を default.rb ファイルに追加しました。

include_recipe 'simple_iptables'

# Allow HTTP, HTTPS
simple_iptables_rule "http" do
  rule [ "--proto tcp --dport 80",
         "--proto tcp --dport 443" ]
  jump "ACCEPT"
end

そして、次を使用してクックブックを実行します。

chef-client --local-mode --runlist 'recipe[learn_chef_httpd]'

問題は、シェフがクックブックを見つけられないことです

Chef::Exceptions::CookbookNotFound
----------------------------------
Cookbook simple_iptables not found. If you're loading simple_iptables from anoth er cookbook, make sure you configure the dependency in your metadata

メタデータに追加してみました:

depends 'simple_iptables', '~> 0.7.0'

しかし、私はまだエラーが発生します:

Error Resolving Cookbooks for Run List:
Missing Cookbooks:

No such cookbook: simple_iptables

代替案 2

私はまだそれを機能させようとしているので、「バークシェルフの方法」も試してみたので、新しいクックブックを作成しました。

berks cookbook test

そして、私はこの行を追加しました

cookbook 'simple_iptables', '~> 0.7.0'

スーパーマーケットで説明されているように、私のBerksfileに。

次に、次の行を default.rb ファイルに追加しました。

include_recipe 'simple_iptables'

# Allow HTTP, HTTPS
simple_iptables_rule "http" do
  rule [ "--proto tcp --dport 80",
         "--proto tcp --dport 443" ]
  jump "ACCEPT"
end

実行された berks インストール:

バークスのインストール

そしてそれを実行しました:

chef-client --local-mode --runlist 'recipe[test]'

同じエラーが返ってきました

Chef::Exceptions::CookbookNotFound
----------------------------------
Cookbook simple_iptables not found. If you're loading simple_iptables from anoth er cookbook, make sure you configure the dependency in your metadata

メタデータに追加してみました:

depends 'simple_iptables', '~> 0.7.0'

しかし、私はまだエラーが発生します:

Error Resolving Cookbooks for Run List:
Missing Cookbooks:

No such cookbook: simple_iptables

~/berkshelf フォルダーを見てみると、そこにクックブックがあります。

** 代替案 3 **

Amazon で CentOS 6.5 EC2 インスタンスを開始し、Ruby 2.1.3 と Chef をインストールしました。~/chef-repo/cookbooks フォルダーを作成しました

berkshelf を使用してクックブックを作成し、実行しました

bundle install

他の代替案と同様に参照/コードを追加してから

berks install

前回と同じように走りました。

私は同じ問題を抱えています。

私は何が欠けていますか?機能させるには何が必要ですか?

4

4 に答える 4

23

docschef_repo_pathの説明に従って構成したことを確認してください。

基本的local-modeには、クックブック、ロール、環境、データ バッグなどの場所を知る必要があります。chef_repo_path

コードからわかることは次のとおりです。

  1. client.rbが見つかり、cookbook_path, chef_repo_path=を含む場合"#{cookbook_path}/.."
  2. knife.rbが見つかり、含まれている場合cookbook_pathchef_repo_path = "#{cookbook_path}/.."
  3. シェフは道を占うことができます。 コードは上から検索しpwdて、 というディレクトリを探しcookbooksます。見つかった場合はcookbooks/..、chef_repo_path として設定されます。
  4. 他のすべてが失敗した場合、pwdあなたのchef_repo_path

Berkshelf を使用している場合は、berks vendor必要なすべてのクックブックを含む単一のディレクトリを取得するために a を実行することをお勧めします。cookbooksその後、chef_repo_path を、ベンダーのクックブックを保持するディレクトリの親に向けることができます。

これはソース コードを 10 分間掘り下げた結果なので、まったく正しくない可能性があります。

于 2014-10-16T02:45:29.307 に答える
1

hereからの@kilianと@gratzyの回答の組み合わせを試して数時間頭を悩ませた後、これは役に立ちました、

cmd /c E: && cd /d E:\Items_CI Exploration\chef\chef-repo\cookbooks\ && chef-client --local-mode --runlist 'recipe[cisamplecookbooks::web]'

はい、引用符なしで。前に追加された「E:」にも注意してください。ただし、「&」の数は違いはありませんでした。

"E:\Items_CI Exploration\chef\chef-repo\cookbooks\"これは、クックブックを実行するためのパスです。cookbooks隣の最後のスラッシュ ("\")も重要だと思います。

于 2016-04-26T09:16:07.203 に答える
0

別のオプション:以下のエラーは、ロール/レシピ名にタイプミスがある場合にも表示されることがあります。

Missing Cookbooks:
------------------
The following cookbooks are required by the client but don't exist on the server:
* some-cookbook-name

クックブックをchef-serverにアップロードしたら 、たとえば、ランリストで正しい名前を呼び出すようにしてください:

$ cd <chef-repo-path>
$ chef generate cookbook example
$ knife cookbook upload example

//output:
Uploading example [0.1.0]
Uploaded 1 cookbook.

$ vim roles/example-role.rb
 
name "example-role"
description "example to some role"
run_list    "recipe[example]"

//save and upload
$ knife role from file example-role.rb
于 2020-11-15T15:39:10.327 に答える