Why cant I use use an attribute as a resource name in a chef recipe?
Asked Answered
M

2

5

I have this attribute defined in my default attributes file:

default['remote_machine']['user']['file_name'] = '/folder/path/file_name.html'

And I am trying to reference this attribute name in a recipe as follows:

list_of_nodes = search(:node,"name:production_* AND name:*app*")

template default['remote_machine']['user']['home']['file_name'] do #ERROR HERE
  source "file_name.html.erb"
  mode "755"
  variables(
    :list_of_ips=>list_of_nodes
  )

Trying to upload this cookbook, I get an error as:

FATAL: ArgumentError: You must supply a name when declaring a default resource

If I provide a string containing the path as the argument to the resource, it works.

Can anyone help me understand what I am missing?

Thanks.

Misapprehend answered 22/11, 2013 at 11:47 Comment(1)
Hi theTuxRacer. If any of the answers solved your problem, could you please mark one as correct?Curvilinear
C
14

There are two issues here, the first is more obvious that the second

setting vs accessing

When you set a node attribute, you specify the precedence level (like automatic, default, normal, and override). Typically this is done in your attribtue files.

When you access that information, it's stored on the node object, so you need to use the node key:

node['remote_machine']['user']['home']['file_name']

wrong attribute

But the real reason you're getting this error is that you are accessing an undefined attribute. You've defined remote_machine.user.file_name but you're using remote_machine.user.home.file_name

Curvilinear answered 28/11, 2013 at 19:2 Comment(0)
A
4

You set attributes based on the precedence level (default, normal, override), but you access them through the node object:

template node['remote_machine']['user']['home']['file_name'] do 
Aleman answered 22/11, 2013 at 14:58 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.