{"id":31839,"date":"2022-11-22T05:53:06","date_gmt":"2022-11-22T05:53:06","guid":{"rendered":"https:\/\/www.devopsschool.com\/blog\/?p=31839"},"modified":"2022-12-23T05:45:28","modified_gmt":"2022-12-23T05:45:28","slug":"chef-tutorials-working-with-chef-attributes","status":"publish","type":"post","link":"https:\/\/www.devopsschool.com\/blog\/chef-tutorials-working-with-chef-attributes\/","title":{"rendered":"Chef Tutorials: Working with Chef Attributes"},"content":{"rendered":"\n<p>Attributes represent information about your node. In addition to the information that can be automatically generated by&nbsp;<code>ohai<\/code>, you can set attributes in Chef recipes or in separate attribute files.<\/p>\n\n\n\n<p>Because attributes can be defined in multiple places, all attribute values are composed together during a Chef run according to the priority levels<\/p>\n\n\n\n<p>Attributes defined by\u00a0<code>ohai<\/code>\u00a0have the highest priority, followed by attributes defined in a recipe, then attributes defined in an attribute file. In other words, recipe attributes have a higher priority than those defined in attribute file in cookbooks, and will override them by default. Attributes defined by\u00a0<code>ohai<\/code>\u00a0trump everything else.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Declaring Attributes in Chef Recipe<\/h2>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p>Attributes can be set directly in recipes. Image shows the format of an attribute when it is set in a recipe. You must precede the attribute name with node. when you set an attribute directly in a recipe.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"445\" src=\"https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2022\/11\/image-18-1024x445.png\" alt=\"\" class=\"wp-image-31840\" srcset=\"https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2022\/11\/image-18-1024x445.png 1024w, https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2022\/11\/image-18-300x130.png 300w, https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2022\/11\/image-18-768x333.png 768w, https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2022\/11\/image-18.png 1237w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-1\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">node.<span class=\"hljs-keyword\">default<\/span>&#91;<span class=\"hljs-string\">'devopsschool'<\/span>]&#91;<span class=\"hljs-string\">'message'<\/span>] = <span class=\"hljs-string\">'Hello People'<\/span>\n\n\nlog <span class=\"hljs-string\">\"Welcome to Chef, #{node&#91;'devopsschool']&#91;'message']}!\"<\/span> <span class=\"hljs-keyword\">do<\/span>\n  level :info\nend\n\nlog <span class=\"hljs-string\">\"Welcome to DevOps\"<\/span> <span class=\"hljs-keyword\">do<\/span>\n  level :info\nend<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-1\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-2\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">node.<span class=\"hljs-keyword\">default<\/span>&#91;<span class=\"hljs-string\">'web'<\/span>]&#91;<span class=\"hljs-string\">'file'<\/span>] = <span class=\"hljs-string\">'\/opt\/index.html'<\/span>\n\n\n\nfile <span class=\"hljs-string\">\"#{node&#91;'web']&#91;'file']}\"<\/span> <span class=\"hljs-keyword\">do<\/span>\n  content <span class=\"hljs-string\">\"Welcome to Chef Class\"<\/span>\nend<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-2\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"423\" src=\"https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2022\/11\/image-19-1024x423.png\" alt=\"\" class=\"wp-image-31843\" srcset=\"https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2022\/11\/image-19-1024x423.png 1024w, https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2022\/11\/image-19-300x124.png 300w, https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2022\/11\/image-19-768x317.png 768w, https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2022\/11\/image-19.png 1060w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Declaring Attributes in Chef Cookbooks<\/h2>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p>Attribute files are located in the&nbsp;<em>attributes<\/em>&nbsp;folder of a cookbook. Similar to recipes, the default attribute file is called:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"139\" src=\"https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2022\/11\/image-20-1024x139.png\" alt=\"\" class=\"wp-image-31845\" srcset=\"https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2022\/11\/image-20-1024x139.png 1024w, https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2022\/11\/image-20-300x41.png 300w, https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2022\/11\/image-20-768x105.png 768w, https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2022\/11\/image-20.png 1212w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"268\" src=\"https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2022\/11\/image-21-1024x268.png\" alt=\"\" class=\"wp-image-31847\" srcset=\"https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2022\/11\/image-21-1024x268.png 1024w, https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2022\/11\/image-21-300x79.png 300w, https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2022\/11\/image-21-768x201.png 768w, https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2022\/11\/image-21.png 1114w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p><strong>In cookbook, I visualize three levels of attributes: <\/strong><\/p>\n\n\n\n<p>&#8211; Default values to converge successfully &#8212; attributes\/default.rb <\/p>\n\n\n\n<p>&#8211; Local testing override values &#8212; JSON or .kitchen.yml (have you tried chef_zero using ChefDK and Kitchen?) <\/p>\n\n\n\n<p>&#8211; Environment\/role override values <\/p>\n\n\n\n<h2 class=\"wp-block-heading\">SUMMARY of Attributes in Recipe and Cookbook<\/h2>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p><\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-3\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">In an attributes file you don<span class=\"hljs-string\">'t have to type '<\/span>node<span class=\"hljs-string\">' so that this in attributes\/default.rb:\n\ndefault&#91;'<\/span>foo<span class=\"hljs-string\">']&#91;'<\/span>bar<span class=\"hljs-string\">']&#91;'<\/span>baz<span class=\"hljs-string\">'] = '<\/span>qux<span class=\"hljs-string\">'\n\nIn an recipes\/whatever.rb file\n\nnode.default&#91;'<\/span>foo<span class=\"hljs-string\">']&#91;'<\/span>bar<span class=\"hljs-string\">']&#91;'<\/span>baz<span class=\"hljs-string\">'] = '<\/span>qux<span class=\"hljs-string\">'<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-3\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>","protected":false},"excerpt":{"rendered":"<p>Attributes represent information about your node. In addition to the information that can be automatically generated by&nbsp;ohai, you can set attributes in Chef recipes or in separate attribute files. Because attributes can be defined in multiple places, all attribute values are composed together during a Chef run according to the priority levels Attributes defined by\u00a0ohai\u00a0have&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_kad_post_transparent":"","_kad_post_title":"","_kad_post_layout":"","_kad_post_sidebar_id":"","_kad_post_content_style":"","_kad_post_vertical_padding":"","_kad_post_feature":"","_kad_post_feature_position":"","_kad_post_header":false,"_kad_post_footer":false,"_kad_post_classname":"","_joinchat":[],"footnotes":""},"categories":[2],"tags":[],"class_list":["post-31839","post","type-post","status-publish","format-standard","hentry","category-uncategorised"],"_links":{"self":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/31839","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/comments?post=31839"}],"version-history":[{"count":5,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/31839\/revisions"}],"predecessor-version":[{"id":31851,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/31839\/revisions\/31851"}],"wp:attachment":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/media?parent=31839"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/categories?post=31839"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/tags?post=31839"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}