【问题标题】:How do I use Chef data bags from my Vagrantfile?如何使用我的 Vagrantfile 中的 Chef 数据包?
【发布时间】:2014-01-22 01:53:09
【问题描述】:

当我运行vagrant up 时,我正在尝试将Fnichol's Chef User 配方与 Vagrant 一起使用以自动创建特定的用户帐户。因为我为我从事的几乎每个项目都设置了这个用户,所以我想将用户数据存储在我从 JSON 文件加载的 data bag 中,以便在多个项目中重复使用。

这是我的Vagrantfile 目前的样子:http://pastebin.com/b0riZZCz

失败并出现错误:

[2014-01-20T16:09:39+00:00] ERROR: could not find recipe ben for cookbook user

我创建了一个名为“users”的data bag,并在该数据包中创建了一个名为“ben”的data bag item,来自以下 JSON:

{
  "id": "ben",
  "comment": "Ben Harold",
  "groups": ["admin", "www-data"],
  "ssh_keys": ["...longtextstring..."],
  "ssh_keygen": false
}

我正在尝试按照http://fnichol.github.io/chef-user/ 的使用说明来:

  1. 导入 Chef Users 配方
  2. 告诉厨师用户配方从数据包users创建用户ben

在我看来,Vagrantfile 中的 Chef 配置语法与大多数可用文档中提供的语法有很大不同。例如:

“只需​​在您的run_listuser_account 中包含recipe[user] 资源将可用。”

我对@9​​87654339@ 的定义以及recipe[user] 语法感到困惑。从Vagrant documentation看来,我的run_list就是这个区块的一切:

config.vm.provision :chef_solo do |chef|
  chef.add_recipe "apt"
  ...etc...
end

但是,我已经在该块中定义了 also found referenceschef.run_list,尽管我无法找到任何专门提到 chef.run_list 的文档。

问题 1

run_list 只是 config.vm.provision :chef_solo do |chef| 块中的代码,还是别的什么?

问题 2

chef.run_list 的文档在哪里?我不是在 Chef 网站上寻找文档。语法对我来说似乎完全不同。

我已经搞砸了几个小时。我尝试了一堆不起作用的东西。我能够导入Chef User 配方,但我无法弄清楚如何告诉厨师针对data bag item“本”运行user 配方。

问题 3

如何让 Chef 使用 data bag item“ben”运行 user 配方?还是我做错了?

【问题讨论】:

    标签: ruby json chef-infra vagrant


    【解决方案1】:

    回答 1

    不,run_list 实际上只是一个字符串数组,代表应该在 Vagrant Machine 上运行的配方/角色。 add_recipe 将新食谱添加到此列表中。像这样:

    config.vm.provision :chef_solo do |chef|
      [...]
      chef.add_recipe 'cookbook::recipe' #now run_list has it in
      chef.add_role 'myrole' #now run_list has a role too
      #adding more recipes from ENV variable, just as example
      chef.run_list += ENV['CHEF_RUN_LIST'].split ',' if ENV.has_key? 'CHEF_RUN_LIST' 
      [...]
    end
    

    答案 2

    您正在编辑 Vagrantfile,因此文档位于 Vagrant site

    答案 3

    你需要告诉 Vagrant 你的食谱、数据包和角色在哪里。

    config.vm.provision :chef_solo do |chef|
      [...]
      chef.cookbooks_path = 'cookbooks' #paths are relative to Vagrantfile location
      chef.roles_path = 'roles'
      chef.data_bags_path = 'data_bags'
      [...]
    end
    

    【讨论】:

    • 如何将fnichol.github.io/chef-user 中看到的语法recipe[user::data_bag] 转换为Vagrantfile 中的语法?
    • 使用上述add_roleadd_recipe 添加角色和配方,并使用p chef.run_list 打印run_list - 您将看到它们是如何保存的。在你的情况下chef.add_recipe 'user::data_bag'
    猜你喜欢
    • 1970-01-01
    • 2013-05-18
    • 2013-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多