Chef infra 在角色中使用节点值

Chef infra 在角色中使用节点值,chef-infra,Chef Infra,我有一个角色,在其中我需要使用特定于该节点的值: default_attributes "varnish" => { "listen_address" => node['ipaddress'], "listen_port" => "80", # ... } 但是,这不及格:namererror:role[caching\u server]:Chef::role`的未定义局部变量或方法node' 是否对厨师长客户的“角色”进行了评估?我是否需要以某种不同的方式访问此

我有一个角色,在其中我需要使用特定于该节点的值:

default_attributes "varnish" => {
  "listen_address" => node['ipaddress'],
  "listen_port" => "80",
  # ...
}
但是,这不及格:
namererror:role[caching\u server]:Chef::role`的未定义局部变量或方法
node'


是否对厨师长客户的“角色”进行了评估?我是否需要以某种不同的方式访问此变量?还是应该在角色之外定义此属性?

角色是静态的,在上载期间进行评估

这就是为什么角色被视为一种邪恶:全局的、静态的东西,你不能对它们进行版本化

社区现在正在走Berkshelf之路(,)

其中一个原则是将逻辑从角色下推到配方,这样可以更好地控制节点的配置方式

  • 您可以构建自己的应用程序食谱,例如myface
  • 创建以您的角色命名的配方:app_proxy.rb。这就是你的集成秘诀
  • 使用以下内容覆盖所有需要的属性(如您在角色中所做的): node.override['varnish']['listen_address']=node['ipaddress'] node.override['varnish']['listen\u port']=“80”
  • 将run_列表从角色移动到该配方

  • 角色是静态的,在上载期间进行评估

    这就是为什么角色被视为一种邪恶:全局的、静态的东西,你不能对它们进行版本化

    社区现在正在走Berkshelf之路(,)

    其中一个原则是将逻辑从角色下推到配方,这样可以更好地控制节点的配置方式

  • 您可以构建自己的应用程序食谱,例如myface
  • 创建以您的角色命名的配方:app_proxy.rb。这就是你的集成秘诀
  • 使用以下内容覆盖所有需要的属性(如您在角色中所做的): node.override['varnish']['listen_address']=node['ipaddress'] node.override['varnish']['listen\u port']=“80”
  • 将run_列表从角色移动到该配方
  • 关于“角色食谱”的好主意,刚刚在这篇文章中遇到了相同的概念:关于“角色食谱”的好主意,刚刚在这篇文章中遇到了相同的概念: