How chef/cheffish works
Cheffish is a Ruby library for convergent Chef Server resources, with an additional recipe-based RSpec testing framework. The principal workflow is a recipe author declaring server changes, then Chef resources reconciling those changes against the server. The graph also shows the shared resource machinery and the separate RSpec execution path. Some resource implementations were not sampled; their capabilities are included from the README, but uncertain implementation links are omitted.
Main entry points: cheffish.rb Cheffish entry · recipe_dsl.rb Recipe DSL · chef_actor_base.rb Actors and keys · chef_acl.rb ACL management
Components 22
Server resources
- ACL management
lib/chef/resource/chef_acl.rb - Actors and keys
lib/cheffish/chef_actor_base.rb - Data bags
lib/chef/resource/chef_data_bag_item.rb - Environments
lib/chef/resource/chef_environment.rb - Server mirroring
lib/chef/resource/chef_mirror.rb - Organizations
lib/chef/resource/chef_organization.rb - Roles
lib/chef/resource/chef_role.rb - Other resources
lib/chef/resource - Public keys
lib/chef/resource/public_key.rb
Convergence runtime
- Resource base
lib/cheffish/base_resource.rb - Shared properties
lib/cheffish/base_properties.rb - Basic Chef client
lib/cheffish/basic_chef_client.rb - Chef run
lib/cheffish/chef_run.rb - Server API helpers
lib/cheffish/server_api.rb - Cheffish entry
lib/cheffish.rb
Recipe integration
- Recipe DSL
lib/cheffish/recipe_dsl.rb - Node properties
lib/cheffish/node_properties.rb
RSpec support
- RSpec run support
lib/cheffish/rspec/chef_run_support.rb - Recipe run wrapper
lib/cheffish/rspec/recipe_run_wrapper.rb - Run matchers
lib/cheffish/rspec/matchers
Other components
- Recipe author
- Chef Server
Connections 30
- Recipe author → Recipe DSL: writes recipe
- Recipe author → ACL management: declares changes
- Recipe author → Actors and keys: declares changes
- Recipe author → Data bags: declares changes
- Recipe author → Environments: declares changes
- Recipe author → Server mirroring: declares changes
- Recipe author → Organizations: declares changes
- Recipe author → Roles: declares changes
- Recipe author → Other resources: declares changes
- Recipe author → Public keys: declares changes
- ACL management → Chef Server: reads and writes
lib/chef/resource/chef_acl.rb - Actors and keys → Chef Server: reads and writes
lib/cheffish/chef_actor_base.rb - Data bags → Chef Server: reads and writes
lib/chef/resource/chef_data_bag_item.rb - Server mirroring → Chef Server: copies files
lib/chef/resource/chef_mirror.rb - Environments → Chef Server: reconciles
- Organizations → Chef Server: reconciles
- Roles → Chef Server: reconciles
- Other resources → Chef Server: reconciles
- Resource base → Shared properties: uses
lib/cheffish/base_resource.rb - Actors and keys → Resource base: inherits
lib/cheffish/chef_actor_base.rb - Cheffish entry → Basic Chef client: loads
lib/cheffish.rb - Cheffish entry → Server API helpers: loads
lib/cheffish.rb - Cheffish entry → Recipe DSL: loads
lib/cheffish.rb - Cheffish entry → Node properties: loads
lib/cheffish.rb - Recipe DSL → ACL management: registers
lib/cheffish/recipe_dsl.rb - Recipe DSL → Other resources: registers
lib/cheffish/recipe_dsl.rb - RSpec run support → Recipe run wrapper: uses
lib/cheffish/rspec/chef_run_support.rb - Recipe run wrapper → Chef run: extends
lib/cheffish/rspec/recipe_run_wrapper.rb - Chef run → Basic Chef client: uses
lib/cheffish/chef_run.rb - RSpec run support → Run matchers: loads
lib/cheffish/rspec/chef_run_support.rb