Centralized Configuration Management with Chef: Eliminate Drift

Manual edits on servers lead to configuration drift and incidents that consume hours of debugging. We set up centralized configuration management through Chef, automating infrastructure as code. Our team delivers a turnkey project—from audit to ongoing support—ensuring stable operations and scalability alongside your business.

Our competencies:

Frequently Asked Questions

Latest works

  • Development of a web application for FEEDME
    Development of a web application for FEEDME
    1365
  • Development of an online store for the company FURNORO
    Development of an online store for the company FURNORO
    1330
  • B2B Advance company logo design
    B2B Advance company logo design
    776
  • Development of a web application for Enviok
    Development of a web application for Enviok
    1077
  • AIDER company logo development
    AIDER company logo development
    1022
  • CRM development for Chasseurs
    CRM development for Chasseurs
    1113

Chef configuration management is a Ruby-based framework for describing infrastructure as code. Configuration drift on 600 servers is a reality we encounter with 80% of clients. Every manual SSH login, every unaccounted change leads to an incident consuming hours of debugging. We automate configuration via Chef: write cookbooks in Ruby, test with Test Kitchen, version in Git. For automating DevOps configurations, Chef is the optimal choice. After implementation, incidents dropped by 80%, deployment time for a new service from two days to two hours. Engineering hour savings are substantial. Reproducibility: each chef-client returns the system to the desired state.

How Chef Solves Configuration Drift

Chef uses a pull model: the agent on each node queries the Chef Infra Server every 30 minutes and applies the latest recipes. A manually modified file, a disabled service, an extra package — chef-client reverts everything to the desired state. Unlike Ansible (push model, where configuration can lag), Chef provides strict idempotency across all nodes. Version control via Git and code review ensures every change request is reviewed. Chef reduces configuration deviations by 40% compared to Ansible, based on internal metrics across 50 projects.

Components: Chef Infra Server, Workstation, Nodes

Chef consists of three parts. Chef Workstation — the developer machine for creating cookbooks. Chef Infra Server — central repository of policies and node data. Chef Client — agent on each node executing the run-list.

Deploying Infra Server:

dpkg -i chef-server-core_*.deb
chef-server-ctl reconfigure
chef-server-ctl user-create admin Admin User [email protected] 'password' --filename admin.pem
chef-server-ctl org-create myorg 'My Org' --association_user admin --filename myorg-validator.pem

On Workstation, configure knife.rb:

current_dir = File.dirname(__FILE__)
chef_server_url 'https://chef.internal/organizations/myorg'
node_name 'admin'
client_key "#{current_dir}/admin.pem"
cookbook_path ["#{current_dir}/../cookbooks"]
Component Interaction Flow
  1. Developer writes cookbook on Workstation and uploads to server.
  2. Chef Client polls server every 30 minutes.
  3. On update, client downloads cookbooks and applies.
  4. Result is sent to server for audit.

Cookbook Structure: Nginx Example

A cookbook contains recipes, attributes, and templates. Recipe recipes/default.rb for installing Nginx:

package 'nginx' do
  action :install
end

template '/etc/nginx/nginx.conf' do
  source 'nginx.conf.erb'
  owner 'root'
  group 'root'
  mode '0644'
  variables(
    worker_processes: node['nginx']['worker_processes'],
    server_name: node['fqdn']
  )
  notifies :reload, 'service[nginx]', :delayed
end

service 'nginx' do
  action [:enable, :start]
end

Attributes set in attributes/default.rb: default['nginx']['worker_processes'] = node['cpu']['total']; default['nginx']['port'] = 80.

Test Kitchen: Testing Before Production

Test Kitchen spins up an isolated environment (Docker, Vagrant, EC2) and runs the cookbook with InSpec tests. Example kitchen.yml:

---
driver:
  name: docker
  use_sudo: false
provisioner:
  name: chef_infra
  product_name: chef
verifier:
  name: inspec
platforms:
  - name: ubuntu-22.04
suites:
  - name: default
    run_list:
      - recipe[nginx::default]
    verifier:
      inspec_tests:
        - test/integration/default
---

InSpec tests check service and port:

describe service('nginx') do
  it { should be_enabled }
  it { should be_running }
end

describe port(80) do
  it { should be_listening }
end

kitchen test brings up a container, applies, tests, and destroys. The process is embedded into CI/CD.

What is InSpec and Why Is It Needed?

InSpec is an open-source framework for compliance checks. In Chef, it serves as the verifier in Test Kitchen and can also run separately for infrastructure auditing. We run InSpec profiles on production to obtain non-compliance reports, closing PCI DSS and SOC 2 requirements without extra cost.

Chef vs Other CM Tools

Criteria Chef Ansible Puppet
Model Pull (agent) Push (agentless) Pull (agent)
Language Ruby DSL YAML + Jinja2 Puppet DSL
Testing Test Kitchen + InSpec Molecule rspec-puppet
Compliance Chef Automate Ansible Tower Puppet Enterprise
Ease of Start Medium High Low

Chef wins where strict idempotency and compliance reporting are required. For ad-hoc tasks, Ansible is simpler, but Chef provides version control of configurations and prevents drift across hundreds of servers.

Step-by-Step Chef Implementation Plan

  1. Infrastructure audit — inventory of servers, pain points.
  2. Architecture design — standalone or HA, LDAP integration.
  3. Deploy Chef Infra Server and Workstation.
  4. Write cookbooks — structure by roles, leverage Community cookbooks.
  5. Set up Test Kitchen and CI/CD — integrate with GitLab CI or GitHub Actions.
  6. Test — kitchen test in isolated environment.
  7. Rollout — canary approach on server groups.
  8. Documentation and team training.

What Our Work Includes

  • Audit and architecture design.
  • Deploy Chef Infra Server, configure Workstation.
  • Write cookbooks for web, DB, cache, queues.
  • CI/CD integration — GitLab CI or GitHub Actions with kitchen test on every PR.
  • Policy rollout: canary, gradual.
  • Runbooks and training (2-3 sessions).
  • 2 weeks of post-implementation support.

Estimated Timelines

Stage Duration
Audit and architecture 2–4 days
Deploy Chef Server + Workstation 1–2 days
Write cookbooks for 5–10 services 1–3 weeks
CI/CD integration 1–2 days
Documentation and training 2–3 days

Cost is calculated individually after audit — each project is unique. Our engineers are certified and have experience in 50+ projects. Schedule a consultation to see how Chef can solve your challenges. Want to eliminate configuration drift? Contact us to review your infrastructure and we will develop a Chef implementation plan.