【问题标题】:Vagrant-Chef roles: chef-solo not finding roles in my cookbook流浪厨师角色:厨师独奏在我的食谱中找不到角色
【发布时间】:2013-11-03 09:35:01
【问题描述】:

我有一堆食谱文件,一些定义为食谱,一些定义为角色。例如,顶级角色是:

运行列表( “角色[el-drupal-cookbook::drupal_lamp_dev]”, “食谱[drupal-site-jnl-el-cookbook::default]” )

上面的意图是将服务器设置为drupal Lamp服务器,然后在其上安装特定的网站。

我是从 Vagrant 调用这一切的,使用 add_role 请求,并且图书馆管理员将所有的部分放在一起。 Cookbook 路径是“cookbooks”,role_path 是“roles”。

执行此操作时,它会找到顶级角色(与 Vagrantfile 位于同一目录中),但不会找到不同食谱中的角色。

由于角色和食谱都存储在食谱路径应该服务的食谱中,所以我显然遗漏了一些东西。有人可以帮忙吗?

我在下面附上了错误信息:

[2013-10-24T14:37:28+00:00] INFO: Setting the run_list to ["recipe[apt]", "recipe[git]", "role[drupal-jnl-el]", "recipe[drupal-site-jnl-el-cookbook::disable-cdn]"] from JSON
[2013-10-24T14:37:28+00:00] ERROR: Role el-drupal-cookbook::drupal_lamp_dev (included by 'role[drupal-jnl-el]') is in the runlist but does not exist. Skipping expand.

================================================================================
Error expanding the run_list:
================================================================================


Missing Role(s) in Run List:
----------------------------
* el-drupal-cookbook::drupal_lamp_dev included by 'role[drupal-jnl-el]'


Original Run List
-----------------
* recipe[apt]
* recipe[git]
* role[drupal-jnl-el]
* recipe[drupal-site-jnl-el-cookbook::disable-cdn]

编辑:

vagrantfile 说:

# define where things have been collected together by librarian-chef
chef.cookbooks_path = ["cookbooks"]
chef.roles_path = ["roles"]

# this installs most of the infrastrucutre required to support a drupal instance
chef.add_recipe "apt" # add this so we have updated packages available
chef.add_recipe "git"
# chef.add_recipe "openvpn"  # vpn needed, but using tunnelblick on mac host instead.

# This role represents our default Drupal development stack.
chef.add_role   "drupal-jnl-el"

【问题讨论】:

  • 您能分享一下您的 Vagrantfile 的那一部分吗?我想知道,为什么你说你的角色在食谱中。对于角色,每个角色都应该有一个 *.rb 文件。对于食谱,您在 cookbooks/ 下有子目录。
  • 附加的 vagrantfile 片段。在源(lib-chef 收集的)中,角色和配方目录彼此相邻,每个目录中都有适当的文件。 L-C 将这些收集到食谱文件夹中......

标签: chef-infra vagrant chef-solo cookbook


【解决方案1】:

您需要将该角色添加到您的刀角色列表中,尝试

knife role from file your_role_name.js

默认情况下,该命令将在角色/目录(在您的项目根目录中)中查找该角色

【讨论】:

  • 嗨 ryan,谢谢你的想法,但我使用的是 chef-solo,而不是服务器......有没有对应的?
  • hmm.. 只是为了仔细检查一下,您是否在 solo.rb 中设置了 role_path?
  • 我不确定...我还没有在solo.rb 中做过任何事情,但 Vagrant 当然可能有?我将如何检查?
  • solo.rb 中的 role_path 派生自上面列出的 vagrantfile 定义:chef.roles_path,但转换为从 VM 端工作。 VM 视图是 /tmp/vagrant-chef-1/chef-solo-1/cookbooks 和 vagrant-chef-1/chef-solo-1/roles,而主机视图是 ./cookbooks 和 ./roles where 。是包含 Vagrantfile 和 Cheffile 的目录。
【解决方案2】:

它说

Missing Role(s) in Run List:
----------------------------
* el-drupal-cookbook::drupal_lamp_dev included by 'role[drupal-jnl-el]'

这意味着roles/drupal.{rb,json} 尝试包含role[el-drupal-cookbook::drupal_lamp_dev],但它应该是recipe[el-drupal-cookbook::drupal_lamp_dev]

【讨论】:

  • 我希望这就是问题所在 :-)
  • 我想我基本上已经到了那里:本质上,不要将角色用于任何通用的东西,因为你不能将它们嵌套在食谱中,这与食谱不同。我很困惑,因为在我继承的食谱中我有 ../{attributes,recipes,roles,templates,...} 这让我不这么认为。
  • 别找你了。角色可以嵌套。例如。 run_list("角色[some_other_role]").
  • 我的意思是,与配方不同,角色存在于一个命名空间和一个目录中。据我所知,没有角色的搜索路径。
猜你喜欢
  • 1970-01-01
  • 2015-11-27
  • 1970-01-01
  • 2015-10-23
  • 2015-11-17
  • 2012-09-21
  • 2021-11-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多