Install Chef server

Chef is a powerful configuration management utility writy in ruby. This post will help you to setup a chef 13 on CentOS 7

  • Chef Server: This is the central hub server that stores the cookbooks and recipes uploaded from workstations.
  • Chef Workstations: This where recipes, cookbooks, and other chef configuration details are created or edited.
  • Chef Client: This the target node where the configurations are deployed by the chef-client.

Chef Server Install:

cd /opt
wget https://packages.chef.io/files/stable/chef-server/13.2.0/el/7/chef-server-core-13.2.0-1.el7.x86_64.rpm
yum install chef-server-core-13.2.0-1.el7.x86_64.rpm -y

chef-server-ctl reconfigure
chef-server-ctl status

Create admin user for chef server:

# chef-server-ctl user-create USER_NAME FIRST_NAME LAST_NAME EMAIL 'PASSWORD' -f PATH_FILE_NAME
chef-server-ctl user-create admin admin admin admin@devopstales.intra Password1 -f /etc/chef/admin.pem

Now create an organization to hold the chef configurations.

# chef-server-ctl org-create short_name 'full_organization_name' --association_user user_name --filename ORGANIZATION-validator.pem

chef-server-ctl org-create devopstales "DevOpsTales, Inc" --association_user admin -f /etc/chef/devopstales-validator.pem

Install Chef workstation:

Fot this demo I will install the workstation on the same server as the Chef server, but in a pruduction enviroment it is your laptop or pc.

wget https://packages.chef.io/files/stable/chefdk/4.7.73/el/7/chefdk-4.7.73-1.el7.x86_64.rpm
yum install -y chefdk-4.7.73-1.el7.x86_64.rpm
chef verify
which ruby
echo 'eval "$(chef shell-init bash)"' >> ~/.bash_profile
. ~/.bash_profile
which ruby
cd ~
chef generate repo chef-repo
mkdir -p ~/chef-repo/.chef
cp /etc/chef/admin.pem ~/chef-repo/.chef/
cp /etc/chef/devopstales-validator.pem ~/chef-repo/.chef/
nano ~/chef-repo/.chef/knife.rb
current_dir = File.dirname(__FILE__)
log_level                :info
log_location             STDOUT
node_name                "admin"
client_key               "#{current_dir}/admin.pem"
validation_client_name   "devopstzales-validator"
validation_key           "#{current_dir}/itzgeek-validator.pem"
chef_server_url          "https://cchef.mydomain.intra/organizations/devopstales"
syntax_check_cache_path  "#{ENV['HOME']}/.chef/syntaxcache"
cookbook_path            ["#{current_dir}/../cookbooks"]

test kinife client:

cd ~/chef-repo/
knife ssl fetch
knife client list

Install chef client:

Before we can bootstrap a chef client on a server we need valid DNS resolution for both.

knife bootstrap -N test.mydomain.intra test.mydomain.intra -y root -P vagrant