{"id":4924,"date":"2022-11-21T06:10:38","date_gmt":"2022-11-21T06:10:38","guid":{"rendered":"http:\/\/www.scmgalaxy.com\/tutorials\/?p=4924"},"modified":"2022-12-23T05:45:30","modified_gmt":"2022-12-23T05:45:30","slug":"ecosystem-of-chef-and-its-associated-tools-explained","status":"publish","type":"post","link":"https:\/\/www.devopsschool.com\/blog\/ecosystem-of-chef-and-its-associated-tools-explained\/","title":{"rendered":"Chef Tutorials: List Of Chef Tools and their explainations"},"content":{"rendered":"\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">chef-apply<\/h2>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p>chef-apply is an executable program that runs a single recipe from the command line. Is part of the Chef development kit. A great way to explore resources<\/p>\n\n\n\n<p>chef-apply is an executable program that runs a single recipe from the command line:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Is part of the Chef development kit and Chef workstation<\/li>\n\n\n\n<li>A great way to explore resources<\/li>\n\n\n\n<li>Is&nbsp;<strong>NOT<\/strong>&nbsp;how Chef is run in production<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\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\">$ chef-apply -h\nUsage: chef-apply &#091;RECIPE_FILE | -e RECIPE_TEXT | -s] &#091;OPTIONS]\n        --&#091;no-]always-dump-stacktrace\n                                     Always dump the stacktrace regardless of the log_level setting.\n        --chef-license ACCEPTANCE    Accept the license <span class=\"hljs-keyword\">for<\/span> this product <span class=\"hljs-keyword\">and<\/span> any contained products (<span class=\"hljs-string\">'accept'<\/span>, <span class=\"hljs-string\">'accept-no-persist'<\/span>, <span class=\"hljs-keyword\">or<\/span> <span class=\"hljs-string\">'accept-silent'<\/span>)\n        --&#091;no-]color                 <span class=\"hljs-keyword\">Use<\/span> <span class=\"hljs-title\">colored<\/span> <span class=\"hljs-title\">output<\/span>, <span class=\"hljs-title\">defaults<\/span> <span class=\"hljs-title\">to<\/span> <span class=\"hljs-title\">enabled<\/span>.\n    -<span class=\"hljs-title\">e<\/span>, --<span class=\"hljs-title\">execute<\/span> <span class=\"hljs-title\">RECIPE_TEXT<\/span>        <span class=\"hljs-title\">Execute<\/span> <span class=\"hljs-title\">resources<\/span> <span class=\"hljs-title\">supplied<\/span> <span class=\"hljs-title\">in<\/span> <span class=\"hljs-title\">a<\/span> <span class=\"hljs-title\">string<\/span>.\n        --<span class=\"hljs-title\">force<\/span>-<span class=\"hljs-title\">formatter<\/span>            <span class=\"hljs-title\">Use<\/span> <span class=\"hljs-title\">formatter<\/span> <span class=\"hljs-title\">output<\/span> <span class=\"hljs-title\">instead<\/span> <span class=\"hljs-title\">of<\/span> <span class=\"hljs-title\">logger<\/span> <span class=\"hljs-title\">output<\/span>.\n        --<span class=\"hljs-title\">force<\/span>-<span class=\"hljs-title\">logger<\/span>               <span class=\"hljs-title\">Use<\/span> <span class=\"hljs-title\">logger<\/span> <span class=\"hljs-title\">output<\/span> <span class=\"hljs-title\">instead<\/span> <span class=\"hljs-title\">of<\/span> <span class=\"hljs-title\">formatter<\/span> <span class=\"hljs-title\">output<\/span>.\n    -<span class=\"hljs-title\">F<\/span>, --<span class=\"hljs-title\">format<\/span> <span class=\"hljs-title\">FORMATTER<\/span>           <span class=\"hljs-title\">The<\/span> <span class=\"hljs-title\">output<\/span> <span class=\"hljs-title\">format<\/span> <span class=\"hljs-title\">to<\/span> <span class=\"hljs-title\">use<\/span>.\n    -<span class=\"hljs-title\">j<\/span> <span class=\"hljs-title\">JSON_ATTRIBS<\/span>,                 <span class=\"hljs-title\">Load<\/span> <span class=\"hljs-title\">attributes<\/span> <span class=\"hljs-title\">from<\/span> <span class=\"hljs-title\">a<\/span> <span class=\"hljs-title\">JSON<\/span> <span class=\"hljs-title\">file<\/span> <span class=\"hljs-title\">or<\/span> <span class=\"hljs-title\">URL<\/span>.\n        --<span class=\"hljs-title\">json<\/span>-<span class=\"hljs-title\">attributes<\/span>\n    -<span class=\"hljs-title\">l<\/span>, --<span class=\"hljs-title\">log_level<\/span> <span class=\"hljs-title\">LEVEL<\/span>            <span class=\"hljs-title\">Set<\/span> <span class=\"hljs-title\">the<\/span> <span class=\"hljs-title\">log<\/span> <span class=\"hljs-title\">level<\/span> (<span class=\"hljs-title\">trace<\/span>, <span class=\"hljs-title\">debug<\/span>, <span class=\"hljs-title\">info<\/span>, <span class=\"hljs-title\">warn<\/span>, <span class=\"hljs-title\">error<\/span>, <span class=\"hljs-title\">fatal<\/span>).\n    -<span class=\"hljs-title\">L<\/span>, --<span class=\"hljs-title\">logfile<\/span> <span class=\"hljs-title\">LOGLOCATION<\/span>        <span class=\"hljs-title\">Set<\/span> <span class=\"hljs-title\">the<\/span> <span class=\"hljs-title\">log<\/span> <span class=\"hljs-title\">file<\/span> <span class=\"hljs-title\">location<\/span>, <span class=\"hljs-title\">defaults<\/span> <span class=\"hljs-title\">to<\/span> <span class=\"hljs-title\">STDOUT<\/span> - <span class=\"hljs-title\">recommended<\/span> <span class=\"hljs-title\">for<\/span> <span class=\"hljs-title\">daemonizing<\/span>.\n        --<span class=\"hljs-title\">minimal<\/span>-<span class=\"hljs-title\">ohai<\/span>               <span class=\"hljs-title\">Only<\/span> <span class=\"hljs-title\">run<\/span> <span class=\"hljs-title\">the<\/span> <span class=\"hljs-title\">bare<\/span> <span class=\"hljs-title\">minimum<\/span> <span class=\"hljs-title\">Ohai<\/span> <span class=\"hljs-title\">plugins<\/span> <span class=\"hljs-title\">Chef<\/span> <span class=\"hljs-title\">Infra<\/span> <span class=\"hljs-title\">Client<\/span> <span class=\"hljs-title\">needs<\/span> <span class=\"hljs-title\">to<\/span> <span class=\"hljs-title\">function<\/span>.\n        --&#091;<span class=\"hljs-title\">no<\/span>-]<span class=\"hljs-title\">profile<\/span>-<span class=\"hljs-title\">ruby<\/span>          <span class=\"hljs-title\">Dump<\/span> <span class=\"hljs-title\">complete<\/span> <span class=\"hljs-title\">Ruby<\/span> <span class=\"hljs-title\">call<\/span> <span class=\"hljs-title\">graph<\/span> <span class=\"hljs-title\">stack<\/span> <span class=\"hljs-title\">of<\/span> <span class=\"hljs-title\">entire<\/span> <span class=\"hljs-title\">Chef<\/span> <span class=\"hljs-title\">Infra<\/span> <span class=\"hljs-title\">Client<\/span> <span class=\"hljs-title\">run<\/span> (<span class=\"hljs-title\">expert<\/span> <span class=\"hljs-title\">only<\/span>).\n    -<span class=\"hljs-title\">s<\/span>, --<span class=\"hljs-title\">stdin<\/span>                      <span class=\"hljs-title\">Execute<\/span> <span class=\"hljs-title\">resources<\/span> <span class=\"hljs-title\">read<\/span> <span class=\"hljs-title\">from<\/span> <span class=\"hljs-title\">STDIN<\/span>.\n    -<span class=\"hljs-title\">v<\/span>, --<span class=\"hljs-title\">version<\/span>                    <span class=\"hljs-title\">Show<\/span> <span class=\"hljs-title\">Chef<\/span> <span class=\"hljs-title\">Infra<\/span> <span class=\"hljs-title\">Client<\/span> <span class=\"hljs-title\">version<\/span>.\n    -<span class=\"hljs-title\">W<\/span>, --<span class=\"hljs-title\">why<\/span>-<span class=\"hljs-title\">run<\/span>                    <span class=\"hljs-title\">Enable<\/span> <span class=\"hljs-title\">whyrun<\/span> <span class=\"hljs-title\">mode<\/span>.\n        --<span class=\"hljs-title\">yaml<\/span>                       <span class=\"hljs-title\">Parse<\/span> <span class=\"hljs-title\">recipe<\/span> <span class=\"hljs-title\">as<\/span> <span class=\"hljs-title\">YAML<\/span>\n    -<span class=\"hljs-title\">h<\/span>, --<span class=\"hljs-title\">help<\/span>                       <span class=\"hljs-title\">Show<\/span> <span class=\"hljs-title\">this<\/span> <span class=\"hljs-title\">help<\/span> <span class=\"hljs-title\">message<\/span>.\n<\/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\n<h2 class=\"wp-block-heading\">Chef Automate<\/h2>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p>Chef Automate is a centralized dashboard for following product of chef for enterprise.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Chef InSpec<\/li>\n\n\n\n<li>Chef Infra Server<\/li>\n\n\n\n<li>Chef Habitat<\/li>\n<\/ul>\n\n\n\n<p>Chef Automate provides Chef servers that include premium features of Chef Automate: Chef Infra and Chef InSpec. Chef Automate provides a full suite of enterprise capabilities for maintaining continuous visibility into application, infrastructure, and security automation.<\/p>\n\n\n\n<p>A Chef Automate server manages the configuration of nodes in your environment by instructing chef-client which Chef recipes to run on the nodes, stores information about nodes, and serves as a central repository for your Chef cookbooks.<\/p>\n\n\n\n<p>Chef Automate is the dashboard, data aggregation, and analytics layer for all Chef products, including<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Chef Infrastructure Management,<\/li>\n\n\n\n<li>Chef Compliance,<\/li>\n\n\n\n<li>Chef App Delivery,<\/li>\n\n\n\n<li>Chef Desktop, and<\/li>\n\n\n\n<li>Chef Enterprise Automation Stack.<\/li>\n<\/ul>\n\n\n\n<p>It allows developers, operators, and security engineers to collaborate effortlessly to<br>deliver application and infrastructure changes at speed and scale. Chef Automate provides actionable<br>insights across multiple data centers and cloud providers where your nodes live.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2022\/11\/chef-automate-1.png\" alt=\"\"\/><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<figure class=\"wp-block-embed is-type-wp-embed is-provider-devopsschool-com wp-block-embed-devopsschool-com\"><div class=\"wp-block-embed__wrapper\">\n<blockquote class=\"wp-embedded-content\" data-secret=\"B8JIE5HnEY\"><a href=\"https:\/\/www.devopsschool.com\/blog\/introduction-of-chef-automate\/\">Introduction of Chef Automate<\/a><\/blockquote><iframe loading=\"lazy\" class=\"wp-embedded-content\" sandbox=\"allow-scripts\" security=\"restricted\" style=\"position: absolute; visibility: hidden;\" title=\"&#8220;Introduction of Chef Automate&#8221; &#8212; \" src=\"https:\/\/www.devopsschool.com\/blog\/introduction-of-chef-automate\/embed\/#?secret=CmQpF05IFx#?secret=B8JIE5HnEY\" data-secret=\"B8JIE5HnEY\" width=\"600\" height=\"338\" frameborder=\"0\" marginwidth=\"0\" marginheight=\"0\" scrolling=\"no\"><\/iframe>\n<\/div><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n<p><strong>Chef Code Correctness (Chef Code Analysis)<\/strong><\/p>\n<ul>\n<li><a href=\"https:\/\/www.devopsschool.com\/blog\/chef-code-analysis-using-foodcritic\/\">Foodcritic Tutorials<\/a><\/li>\n<li>Rubocop<\/li>\n<\/ul>\n<p><strong>Chef Unit Testing<\/strong><\/p>\n<ul>\n<li><a href=\"https:\/\/www.devopsschool.com\/tutorial\/chef\/chef-spec.html\">ChefSpec<\/a><\/li>\n<\/ul>\n<p><strong>Chef Integration Testing<\/strong><\/p>\n<ul>\n<li>TestKitchen<\/li>\n<li>ServerSpec<\/li>\n<li>RSpec<\/li>\n<\/ul>\n<p>Some other tools which can be used along with Chef<\/p>\n<ul>\n<li>dsh<\/li>\n<li>gsh<\/li>\n<\/ul>\n<p><strong>Some other chef &amp; Knife tools<\/strong><\/p>\n<ul>\n<li>knife-lastrun<\/li>\n<li>knife-preflight<\/li>\n<li>Chef-handlers<\/li>\n<li>knife-flip<\/li>\n<li>knife-bulkchangeenvironment<\/li>\n<li>knife-env-diff<\/li>\n<li>knife spork<\/li>\n<\/ul>\n<p><strong>Chef Tools for Windows<\/strong><\/p>\n<ul>\n<li>POSHChef &#8211; POSHChef has been built as a native chef client on Windows using PowerShell.<\/li>\n<\/ul>\n<p><a href=\"https:\/\/www.devopsschool.com\/tutorial\/chef\/chef-ohai.html\">Ohai<\/a><br>Ohai is a tool that is used to collect system configuration data, which is provided to the chef-client for use within cookbooks. Ohai is run by the chef-client at the beginning of every Chef run to determine system state. Ohai includes many built-in plugins to detect common configuration details as well as a plugin model for writing custom plugins.<\/p>\n<p><a href=\"https:\/\/www.devopsschool.com\/tutorial\/chef\/chef-ohai.html\">Chef Ohai Tutorials<\/a><\/p>\n<p><strong>chef-solo<\/strong> is a command that executes Chef Infra Client aks chef client in a way that does not require the Chef Infra Server or chef server in order to converge cookbooks. chef-solo uses Chef Infra Client\u2019s Chef local mode, and does not support the following functionality present in Chef Infra Client \/ server configurations:<\/p>\n<ul>\n<li>Centralized distribution of cookbooks<\/li>\n<li>A centralized API that interacts with and integrates infrastructure components<\/li>\n<li>Authentication or authorization<\/li>\n<\/ul>\n<p><a href=\"https:\/\/www.devopsschool.com\/blog\/chef-solo\/\">Detail Guide and Tutorials of Chef Solo<\/a><\/p>\n<p><strong>Chef<\/strong><br>The chef executable is a command-line tool which Generates applications, cookbooks, recipes, attributes, files, templates, and custom resources (LWRPs) and Ensures that RubyGems are downloaded properly for the chef-client development environment along with Verifies that all components are installed and configured correctly<\/p>\n<p><strong>Knife<\/strong><br>knife is a command-line tool that provides an interface between a local chef-repo and the Chef server. knife helps users to manage Nodes, Cookbooks and recipes, Roles, Environments, and Data Bags, Resources within various cloud environments, The installation of the chef-client onto nodes, Searching of indexed data on the Chef server<\/p>\n<p><strong>Chef Client<\/strong><br>The Chef client works with the Chef server to bring nodes to their desired states with policies you provide as recipes. The chef-client executable can be run as a daemon. A chef-client is an agent that runs locally on every node that is under management by Chef. When a chef-client is run, it will perform all of the steps that are required to bring the node into the expected state, including:<\/p>\n<ul>\n<li>Registering and authenticating the node with the Chef server<\/li>\n<li>Building the node object<\/li>\n<li>Synchronizing cookbooks<\/li>\n<li>Compiling the resource collection by loading each of the required cookbooks, including recipes, attributes, and<\/li>\n<li>all other dependencies<\/li>\n<li>Taking the appropriate and required actions to configure the node<\/li>\n<li>Looking for exceptions and notifications, handling each as required<\/li>\n<\/ul>\n<p><strong>Chef Development Kit<\/strong><br>The Chef development kit contains all you need to develop and test your infrastructure, built by the awesome Chef community. Chef Development Kit has following Component installed&#8230;<\/p>\n<ul>\n<li>fauxhai<\/li>\n<li>kitchen-vagrant<\/li>\n<li>openssl<\/li>\n<li>delivery-cli<\/li>\n<li>test-kitchen<\/li>\n<li>git<\/li>\n<li>berkshelf<\/li>\n<li><a href=\"https:\/\/www.devopsschool.com\/tutorial\/chef\/chef-spec.html\">chefspec<\/a><\/li>\n<li>knife-spork<\/li>\n<li>inspec<\/li>\n<li>tk-policyfile-provisioner<\/li>\n<li>opscode-pushy-client<\/li>\n<li>chef-dk<\/li>\n<li>chef-sugar<\/li>\n<li>chef-client<\/li>\n<li>generated-cookbooks-pass-chefspec<\/li>\n<li>chef-provisioning<\/li>\n<li>package installation<\/li>\n<\/ul>\n<p><strong>Chef Server<\/strong><br>The Chef server makes it easy to automate your infrastructure, manage scale and complexity, and safeguard your systems.<\/p>\n<p>Chef Server has following tools which should be running&#8230;<\/p>\n<ul>\n<li>bookshelf<\/li>\n<li>nginx<\/li>\n<li>oc_bifrost<\/li>\n<li>oc_id<\/li>\n<li>opscode-erchef<\/li>\n<li>opscode-expander<\/li>\n<li>opscode-solr4<\/li>\n<li>postgresql<\/li>\n<li>rabbitmq<\/li>\n<li>redis_lb<\/li>\n<\/ul>\n<p><strong>InSpec<\/strong><br>InSpec is an open-source testing framework for infrastructure with a human- and machine-readable language for specifying compliance, security and policy requirements.<\/p>\n<p><strong>Push Jobs Client<\/strong><br>The Push Jobs client communicates with the Push Jobs server, which extends the Chef Server to allow you to execute commands across hundreds or even thousands of nodes in your Chef-managed infrastructure.<\/p>\n<p><strong>Push Jobs Server<\/strong><br>The Push Jobs server add-on, along with its associated client, extends the Chef Server to allow you to execute commands across hundreds or even thousands of nodes in your Chef-managed infrastructure.<\/p>\n<p><strong>Supermarket<\/strong><br>Supermarket is an artifact repository that makes it easy to browse, use, and share communal cookbooks and tools within your organization.<\/p>\n<p><strong>Chef Automate<\/strong><br>One platform with a unified workflow, end-to-end visibility, and automated compliance over your entire Chef ecosystem.<\/p>\n<p><strong>Chef Compliance<\/strong><br>Assess and monitor infrastructure compliance and use InSpec compliance profiles to validate that production servers are properly configured.<\/p>\n<p><strong>Chef Backend<\/strong><br>Chef High Availability makes it easy to build high-availability Chef clusters on any infrastructure.<\/p>\n<p><strong>Chef Manage<\/strong><br>Chef Manage is an Enterprise Chef add-on that enables a web-based user interface for visualizing and managing nodes, data bags, roles, environments, cookbooks and role-based access control (RBAC).<\/p>\n<p><strong>Kitchen or&nbsp;Test Kitchen<\/strong><br>kitchen is the command-line tool for Kitchen, an integration testing tool used by the chef-client. Kitchen runs tests against any combination of platforms using any combination of test suites. Each test, however, is done against a specific instance, which is comprised of a single platform and a single set of testing criteria.<\/p>\n<p>\u201cTest Kitchen is an integration tool for developing and testing infrastructure code and software on isolated target platforms.\u201d It creates test machines, converges them, and runs post-convergence tests against them to verify their state. Test Kitchen is written in Ruby. It has a plugin system for supporting machine creation through a variety of virtual machine technologies such as vagrant, EC2, docker, and several others. Test Kitchen makes it easy for Chef developers to test cookbooks on a variety of platforms. It uses busser to install post-convergence integration test tools such as Serverspec or BATS that actually perform the tests.<\/p>\n<p><strong>foodcritic<\/strong><br>Foodcritic is a helpful lint tool you can use to check your Chef cookbooks for common problems.<br>http:\/\/www.foodcritic.io\/<\/p>\n<p><a href=\"https:\/\/www.devopsschool.com\/tutorial\/chef\/chef-spec.html\"><strong>ChefSpec<\/strong><\/a><br>ChefSpec is a framework that tests resources and recipes as part of a simulated chef-client run. ChefSpec tests execute very quickly. When used as part of the cookbook authoring workflow, ChefSpec tests are often the first indicator of problems that may exist within a cookbook.<br>ChefSpec is packaged as part of the Chef development kit. To run ChefSpec<br>$ chef exec rspec<br>https:\/\/docs.chef.io\/chefspec.html<\/p>\n<p><strong>RuboCop<\/strong><br>Rubocop is a Ruby command-line tool that performs lint and style checks based on the community driven Ruby Style Guide. It performs static analysis of any Ruby code, which includes Chef recipes, resources, library helpers, and so forth. Rubocop can be configured via .rubocop.yml to exclude certain rules, and it can be run with \u201c\u2013lint\u201d to perform only lint checking, excluding all style checks. Rubocop is used in the Chef community in cookbooks to make contributions more consistent and easier to manage.<\/p>\n<p><strong>Serverspec<\/strong><br>Serverspec is an \u201coutside-in\u201d integration test framework. It is platform and tool agnostic, and is used by other configuration management systems to verify systems are configured as desired. It checks the actual state of the target node by executing commands locally, via SSH, via WinRM, or other remote transports. Serverspec is implemented in RSpec, and uses RSpec test syntax.<\/p>\n\n<div class=\"epyt-gallery\" data-currpage=\"1\" id=\"epyt_gallery_99921\"><figure class=\"wp-block-embed wp-block-embed-youtube is-type-video is-provider-youtube epyt-figure\"><div class=\"wp-block-embed__wrapper\"><iframe loading=\"lazy\"  id=\"_ytid_24897\"  width=\"760\" height=\"427\"  data-origwidth=\"760\" data-origheight=\"427\" src=\"https:\/\/www.youtube.com\/embed\/?enablejsapi=1&#038;autoplay=0&#038;cc_load_policy=0&#038;cc_lang_pref=&#038;iv_load_policy=1&#038;loop=0&#038;rel=1&#038;fs=1&#038;playsinline=0&#038;autohide=2&#038;theme=dark&#038;color=red&#038;controls=1&#038;disablekb=0&#038;\" class=\"__youtube_prefs__  no-lazyload\" title=\"YouTube player\"  data-epytgalleryid=\"epyt_gallery_99921\"  allow=\"fullscreen; accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen data-no-lazy=\"1\" data-skipgform_ajax_framebjll=\"\"><\/iframe><\/div><\/figure><div class=\"epyt-gallery-list\"><div>Sorry, there was a YouTube error.<\/div><\/div><\/div>","protected":false},"excerpt":{"rendered":"<p>chef-apply chef-apply is an executable program that runs a single recipe from the command line. Is part of the Chef development kit. A great way to explore resources chef-apply is an executable program that runs a single recipe from the command line: Chef Automate Chef Automate is a centralized dashboard for following product of chef&#8230;<\/p>\n","protected":false},"author":1,"featured_media":5030,"comment_status":"open","ping_status":"open","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":[88],"tags":[407,4900,4905,4907,636,4906,4899,4908,1469,4911,1456,4901,4909,1173,4902,4903,4912,4913,4904,4910,311],"class_list":["post-4924","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-chef","tag-chef","tag-chef-apply","tag-chef-automate","tag-chef-backend","tag-chef-client","tag-chef-compliance","tag-chef-development-kit","tag-chef-manage","tag-chef-server","tag-chefspec","tag-foodcritic","tag-inspec","tag-kitchen","tag-knife","tag-push-jobs-client","tag-push-jobs-server","tag-rubocop","tag-serverspec","tag-supermarket","tag-test-kitchen","tag-tools"],"_links":{"self":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/4924","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=4924"}],"version-history":[{"count":17,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/4924\/revisions"}],"predecessor-version":[{"id":31892,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/4924\/revisions\/31892"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/media\/5030"}],"wp:attachment":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/media?parent=4924"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/categories?post=4924"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/tags?post=4924"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}