Vagrant chef_solo配置程序引发NoMethodError - 未定义的方法'default_attributes'用于#<hash:.... =“”> </hash:>

时间:2015-01-22 23:59:23

标签: json vagrant chef provisioning chef-solo

我尝试使用Vagrant配置VM以测试我创建的cookbook(chef-mycookbooks-test)。这取决于chef-repo中的data_bags。我找不到任何答案,说明为什么这不起作用。

虚拟机启动正常,但它在运行chef-solo时抛出异常:

INFO: Setting the run_list to ["recipe[mycookbooks-test::default]"] from CLI options
DEBUG: Applying attributes from json file
Error expanding the run_list:
NoMethodError: undefined method `default_attributes' for #<Hash:0x0000000384e3a7>

我不知道它是否重要,但我使用的环境(local.json)定义了default_attributes。当我登录到VM并查看solo.rb时,我看到来自我的配置的一些数据(例如环境&#34;本地&#34;)但不是全部(例如没有角色集,默认cookbook_path, role_path是[])。当我尝试从VM手动运行chef-solo时,我得到了同样的错误。

主机上的目录结构:

.
├── chef-repo
│   ├── data_bags
│   │   ├── groups
│   │   │   └── test.json
│   │   └── users
│   │       └── test.json
│   ├── environments
│   │   └── local.json
│   └── roles
│       └── test_server.json   
└── chef-mycookbooks-test
    ├── Berksfile
    ├── Berksfile.lock
    ├── Vagrantfile
    ├── files
    │   └── default
    │       └── sudoers.test
    ├── metadata.rb
    └── recipes
        └── default.rb

Vagrantfile:

Vagrant.configure("2") do |config|
    config.omnibus.chef_version = :latest
    config.vm.box = "hansode/centos-6.3-x86_64"
    config.berkshelf.enabled = true

    config.vm.provision :chef_solo do |chef|
        chef.cookbooks_path = ".."
        chef.data_bags_path = "../chef-repo/data_bags"
        chef.environments_path = "../chef-repo/environments"
        chef.environment = "local"
        chef.roles_path = "../chef-repo/roles"
        chef.add_role("test_server")
        chef.run_list = [
            "recipe[mycookbooks-test::default]"
        ]
    end
end

有趣的是,如果我删除了定义chef.environment的行,run_list就可以很好地扩展到[mycookbooks-test :: default],但是当它尝试运行一些依赖项时,chef-solo会失败,为此环境需要数据。

任何帮助都将非常感谢。我完全没有想法。

注意:为了清楚起见,我清理了目录树中的一些不必要的东西(例如README.md)和Vagrantfile(例如调试级别)。

1 个答案:

答案 0 :(得分:1)

cookbooks_path之类的东西与主机相关,而不是客人。你确定你真的有/的食谱吗?您可能正在加载一堆无效数据而且Chef正在窒息。您还可以通过chef.log_level = :debug提高您的日志记录级别。