Chef Node Objects Defined!
For the chef-client, two important aspects of nodes are groups of attributes and run-lists.
- An attribute is a specific piece of data about the node, such as a network interface, a file system, the number of clients a service running on a node is capable of accepting, and so on.
- A run-list is an ordered list of recipes and/or roles that are run in an exact order.
The node object consists of the run-list and node attributes, which is a JSON file that is stored on the Chef server. The chef-client gets a copy of the node object from the Chef server during each chef-client run and places an updated copy on the Chef server at the end of each chef-client run.
An attribute is a specific detail about a node. Attributes are used by the chef-client to understand:
- The current state of the node
- What the state of the node was at the end of the previous chef-client run
- What the state of the node should be at the end of the current chef-client run
Attributes are defined by:
- The state of the node itself
- Cookbooks (in attribute files and/or recipes)
During every chef-client run, the chef-client builds the attribute list using:
- Data about the node collected by Ohai
- The node object that was saved to the Chef server at the end of the previous chef-client run
- The rebuilt node object from the current chef-client run, after it is updated for changes to cookbooks (attribute files and/or recipes), roles, and/or environments, and updated for any changes to the state of the node itself
After the node object is rebuilt, all of the attributes are compared, and then the node is updated based on attribute precedence. At the end of every chef-client run, the node object that defines the current state of the node is uploaded to the Chef server so that it can be indexed for search.