【发布时间】:2015-01-22 23:59:22
【问题描述】:
我正在尝试使用 Vagrant 配置 VM 以测试我创建的食谱 (chef-mycookbooks-test)。它取决于 chef-repo 中的 data_bags。我找不到任何关于为什么这不起作用的答案。
VM 启动正常,但在运行 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 时,我看到了来自我的配置的一些数据(例如,环境“本地”)但不是全部(例如,没有设置角色,默认的 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
流浪文件:
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(例如调试级别)中的一些不必要的东西。
【问题讨论】:
标签: json vagrant chef-infra provisioning chef-solo