How to use Chef Executables

How to use Chef Executables

chef_executables_demo

Test Environment

Linux machine with ChefDk installed

Chef Executable

  • Generates applications, cookbooks, recipes, attributes, templates, files and custom resources
  • Ensures RubyGems are downloaded properly for ChefDk environment
  • Verifies all components are installed and configured correctly

Useful chef commands

Checking the chef environment variables

[skytap@host-1 ~]$ chef env
---
Chef Development Kit:
ChefDK:
ChefDK Version: 0.16.28
ChefDK Home: "/home/skytap/.chefdk"
ChefDK Install Directory: "/opt/chefdk"
Policyfile Config:
Cache Path: "/home/skytap/.chefdk/cache"
Storage Path: "/home/skytap/.chefdk/cache/cookbooks"
Ruby:
Ruby Executable: "/opt/chefdk/embedded/bin/ruby"
Ruby Version: 2.1.8
RubyGems:
RubyGems Version: 2.6.6
RubyGems Platforms:
- ruby
- x86_64-linux
Gem Environment:
GEM ROOT: "/opt/chefdk/embedded/lib/ruby/gems/2.1.0"
GEM HOME: "/home/skytap/.chefdk/gem/ruby/2.1.0"
GEM PATHS:
- "/home/skytap/.chefdk/gem/ruby/2.1.0"
- "/opt/chefdk/embedded/lib/ruby/gems/2.1.0"
Path:
- "/opt/chefdk/bin"
- "/home/skytap/.chefdk/gem/ruby/2.1.0/bin"
- "/opt/chefdk/embedded/bin"
- "/usr/local/bin"
- "/usr/local/sbin"
- "/usr/bin"
- "/usr/sbin"
- "/bin"
- "/sbin"
- "/home/skytap/.local/bin"
- "/home/skytap/bin"
- "/opt/chefdk/gitbin"

Executing shell commands using chef

[skytap@host-1 ~]$ chef exec hostname
host-1
[skytap@host-1 ~]$ chef exec date +%d%m%y_%T
110617_22:06:23

Installing gem files and ruby applications

[skytap@host-1 ~]$ chef gem install knife-config
Fetching: knife-config-1.1.0.gem (100%)
WARNING: You don't have /home/skytap/.chefdk/gem/ruby/2.1.0/bin in your PATH,
gem executables will not run.
Successfully installed knife-config-1.1.0
1 gem installed

Generate application structure

[skytap@host-1 ~]$ chef generate app chefspace
[skytap@host-1 ~]$ tree chefspace
chefspace

|-- cookbooks
| `-- chefspace
| |-- Berksfile
| |-- chefignore
| |-- metadata.rb
| |-- recipes
| | `-- default.rb
| `-- spec
| |-- spec_helper.rb
| `-- unit
| `-- recipes
| `-- default_spec.rb
|-- README.md
`-- test
`-- recipes
`-- default_test.rb

8 directories, 8 files

Create an attributes file within cookbook

[skytap@host-1 chefspace]$ chef generate attribute cookbooks/chefspace attributes
Recipe: code_generator::attribute
* directory[cookbooks/chefspace/attributes] action create
- create new directory cookbooks/chefspace/attributes
- restore selinux security context
* template[cookbooks/chefspace/attributes/attributes.rb] action create
- create new file cookbooks/chefspace/attributes/attributes.rb
- update content in file cookbooks/chefspace/attributes/attributes.rb from none to e3b0c4
(diff output suppressed by config)
- restore selinux security context

Generate an addition cookbook with the chef application

[skytap@host-1 chefspace]$ chef generate cookbook cookbooks/testcookbook
[skytap@host-1 chefspace]$ tree cookbooks/
cookbooks/
|-- chefspace
| |-- attributes
| | `-- attributes.rb
| |-- Berksfile
| |-- chefignore
| |-- metadata.rb
| |-- recipes
| | `-- default.rb
| `-- spec
| |-- spec_helper.rb
| `-- unit
| `-- recipes
| `-- default_spec.rb
`-- testcookbook
|-- Berksfile
|-- chefignore
|-- metadata.rb
|-- README.md
|-- recipes
| `-- default.rb
|-- spec
| |-- spec_helper.rb
| `-- unit
| `-- recipes
| `-- default_spec.rb
`-- test
`-- recipes
`-- default_test.rb

13 directories, 15 files

Generating lightweight resource and provider (LWRP)

[skytap@host-1 chefspace]$ chef generate lwrp cookbooks/testcookbook lwrp_test
Recipe: code_generator::lwrp
* directory[cookbooks/testcookbook/resources] action create
- create new directory cookbooks/testcookbook/resources
- restore selinux security context
* template[cookbooks/testcookbook/resources/lwrp_test.rb] action create
- create new file cookbooks/testcookbook/resources/lwrp_test.rb
- update content in file cookbooks/testcookbook/resources/lwrp_test.rb from none to e3b0c4
(diff output suppressed by config)
- restore selinux security context
* directory[cookbooks/testcookbook/providers] action create
- create new directory cookbooks/testcookbook/providers
- restore selinux security context
* template[cookbooks/testcookbook/providers/lwrp_test.rb] action create
- create new file cookbooks/testcookbook/providers/lwrp_test.rb
- update content in file cookbooks/testcookbook/providers/lwrp_test.rb from none to e3b0c4
(diff output suppressed by config)
- restore selinux security context

Generating recipe for testcookbook

[skytap@host-1 chefspace]$ chef generate recipe cookbooks/testcookbook test_recipe
Recipe: code_generator::recipe
* directory[cookbooks/testcookbook/spec/unit/recipes] action create (up to date)
* cookbook_file[cookbooks/testcookbook/spec/spec_helper.rb] action create_if_missing (up to date)
* template[cookbooks/testcookbook/spec/unit/recipes/test_recipe_spec.rb] action create_if_missing
- create new file cookbooks/testcookbook/spec/unit/recipes/test_recipe_spec.rb
- update content in file cookbooks/testcookbook/spec/unit/recipes/test_recipe_spec.rb from none to 9a46cc
(diff output suppressed by config)
- restore selinux security context
* directory[cookbooks/testcookbook/test/recipes] action create (up to date)
* template[cookbooks/testcookbook/test/recipes/test_recipe.rb] action create_if_missing
- create new file cookbooks/testcookbook/test/recipes/test_recipe.rb
- update content in file cookbooks/testcookbook/test/recipes/test_recipe.rb from none to 10ae17
(diff output suppressed by config)
- restore selinux security context
* template[cookbooks/testcookbook/recipes/test_recipe.rb] action create
- create new file cookbooks/testcookbook/recipes/test_recipe.rb
- update content in file cookbooks/testcookbook/recipes/test_recipe.rb from none to 63aecc
(diff output suppressed by config)
- restore selinux security context

Generating template files for testcookbook

[skytap@host-1 chefspace]$ chef generate template cookbooks/testcookbook test_template.txt
Recipe: code_generator::template
* directory[cookbooks/testcookbook/templates/default] action create
- create new directory cookbooks/testcookbook/templates/default
- restore selinux security context
* template[cookbooks/testcookbook/templates/test_template.txt.erb] action create
- create new file cookbooks/testcookbook/templates/test_template.txt.erb
- update content in file cookbooks/testcookbook/templates/test_template.txt.erb from none to e3b0c4
(diff output suppressed by config)
- restore selinux security context

For more information refer “Chef Executable“.

Hope you enjoyed reading this article. Thank you..