1

ノード JSON ファイルから実行リストを実行するように Chef-Zero プロビジョナーをセットアップしようとしています。これが私の Vagrantfile の外観です。

# -*- mode: ruby -*-
# vi: set ft=ruby :

# Vagrantfile API/syntax version. Don't touch unless you know what you're doing!
VAGRANTFILE_API_VERSION = "2"

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.vm.box = "ubuntu-14.04_Base_image"

  config.vm.hostname = "app_node"
  config.omnibus.chef_version = '12.0.3'


  config.vm.provision "chef_zero" do |chef|
    chef.cookbooks_path = ["../kitchen/cookbooks", "../kitchen/site-cookbooks"]
    chef.roles_path = "../kitchen/roles"
    chef.data_bags_path = "../kitchen/data_bags"
    chef.nodes_path = "../kitchen/nodes"
    chef.node_name = "app_node"
  end
end

vagrant up を実行すると、chef-zero プロビジョナーから次の出力が得られます。

==> default: Running provisioner: chef_zero...
==> default: Detected Chef (latest) is already installed
Generating chef JSON and uploading...
==> default: Warning: Chef run list is empty. This may not be what you want.
==> default: Running chef-zero...
==> default: stdin: is not a tty
==> default: [2015-01-08T01:19:51+00:00] INFO: Started chef-zero at http://localhost:8889 with repository at /tmp/vagrant-chef/bec99a1a4e96279669bc5bb3140c0f2e, /tmp/vagrant-chef/2cbca02c0b5c49646d765ae1c9c0738f
==> default:   One version per cookbook
==> default:   data_bags at /tmp/vagrant-chef/72ac2a17a7c339d91d27a954fc49f8c3/data_bags
==> default:   nodes at /tmp/vagrant-chef/83a9002a19a985bce4d26b8c9d050540/nodes
==> default:   roles at /tmp/vagrant-chef/9cdb44a6dfefce6070b32ff28cb96535/roles
==> default: [2015-01-08T01:19:51+00:00] INFO: Forking chef instance to converge...
==> default: [2015-01-08T01:19:51+00:00] INFO: *** Chef 12.0.3 ***
==> default: [2015-01-08T01:19:51+00:00] INFO: Chef-client pid: 1731
==> default: [2015-01-08T01:19:57+00:00] INFO: Run List is []
==> default: [2015-01-08T01:19:57+00:00] INFO: Run List expands to []
==> default: [2015-01-08T01:19:57+00:00] INFO: Starting Chef Run for jira
==> default: [2015-01-08T01:19:57+00:00] INFO: Running start handlers
==> default: [2015-01-08T01:19:57+00:00] INFO: Start handlers complete.
==> default: [2015-01-08T01:19:59+00:00] INFO: Chef Run complete in 1.831177529 seconds
==> default: [2015-01-08T01:19:59+00:00] INFO: Skipping removal of unused files from the cache
==> default: [2015-01-08T01:19:59+00:00] INFO: Running report handlers
==> default: [2015-01-08T01:19:59+00:00] INFO: Report handlers complete

私の質問は、なぜランリストが空だったのですか? シェフ_ゼロプロビジョナーでノードディレクトリとノード名を指定しました。「app_node」の実行リストを指定する JSON ファイルがノード ディレクトリに存在し、シェフがすべてのクックブック/ノード/ロール ファイルをサーバーに正しくコピーしていることがわかります。

ここで何かが欠けているように感じます。どんな助けでも大歓迎です。不明な点があればお知らせください。

4

4 に答える 4

1

Vagrant のchef_zeroプロビジョナーは実際にchef-solo -c solo.rb -j dna.json. の構成はnodes、ディレクトリのマウント以外には使用されません。

次のようなことを行うことで、これを回避できます (nodes/hostname.jsonに入れられた名前と同じであると仮定しますconfig.vm.hostname):

VAGRANTFILE_API_VERSION = "2"
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.vm.box = "chef/centos-6.6"

  config.vm.hostname = "foobarhost"
  VAGRANT_JSON = JSON.parse(Pathname(__FILE__).dirname.join('../../nodes', "#{config.vm.hostname}.json").read)

  config.vm.provision :chef_solo do |chef|
    chef.cookbooks_path  = ["../../cookbooks", "../../site-cookbooks"]
    chef.roles_path      = "../../roles"
    chef.data_bags_path  = "../../data_bags"
    chef.verbose_logging = true

    chef.run_list = VAGRANT_JSON.delete('run_list') if VAGRANT_JSON['run_list']
    # Add JSON Attributes
    chef.json = VAGRANT_JSON
  end
end

実際に を呼び出すときにchef_solo実行するポイントは何かということで、 を使用していることに注意してください。chef_zerochef_solo

于 2015-06-26T21:45:32.977 に答える
0

ローカルディレクトリの指定方法がよくわかりません(まだ調査中)のですが、Vagrantfileでこれを指定すると、vagrantchef.run_list["stuff"]/tmp/vagrant-chef/dna.json

solo.rbが作成された場合、node_name のようなものを挿入するも作成しchef.node_nameます。

于 2015-06-17T23:59:10.570 に答える
0

実行リストを指定していません。あなたが話しているディレクトリは、それらの JSON ファイルが取得される場所ではなく、ノード データが保存される場所です。Chef は、あなたが今何をしようとしているのかわかりません。

# -*- mode: ruby -*-
# vi: set ft=ruby :

# Vagrantfile API/syntax version. Don't touch unless you know what you're doing!
VAGRANTFILE_API_VERSION = "2"

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.vm.box = "ubuntu-14.04_Base_image"

  config.vm.hostname = "app_node"
  config.omnibus.chef_version = '12.0.3'


  config.vm.provision "chef_zero" do |chef|
    chef.cookbooks_path = ["../kitchen/cookbooks", "../kitchen/site-cookbooks"]
    chef.roles_path = "../kitchen/roles"
    chef.data_bags_path = "../kitchen/data_bags"
    chef.nodes_path = "../kitchen/nodes"
    chef.node_name = "app_node"
    chef.run_list = []
    chef.json = {}
  end
end

これにより、実行リストを設定し、それに含めたい JSON 属性を含めることができます。

http://docs.vagrantup.com/v2/provisioning/chef_common.html

ニーズを満たす場合に検討したいオプションが他にもあります。:-)

于 2015-01-08T15:13:37.510 に答える
0

Vagrant は、既存のノードについて Chef に相談しません。作成した Chef ノード ファイルを使用するには、vagrant にそのことを伝える必要があります。Vagrantfile で、次の行を行の下に追加しますchef.node_name = "app_node"

chef.json = JSON.parse(File.read("../kitchen/nodes/app_node.json"))

これを行うと、Chef と Vagrant の両方が同じ場所でノード構成データを探します。

于 2015-06-22T22:33:40.283 に答える