Donwload ChefDK(Chef Development Kit) https://downloads.chef.io/chef-dk/
# curl -L -O https://packages.chef.io/stable/el/7/chefdk-0.16.28-1.el7.x86_64.rpm # rpm -ivh chefdk-0.16.28-1.el7.x86_64.rpm
# chef verify Running verification for component 'berkshelf' Running verification for component 'test-kitchen' Running verification for component 'tk-policyfile-provisioner' (abbr) ........ --------------------------------------------- Verification of component 'rubocop' succeeded. Verification of component 'kitchen-vagrant' succeeded. Verification of component 'openssl' succeeded. Verification of component 'delivery-cli' succeeded. Verification of component 'opscode-pushy-client' succeeded. Verification of component 'berkshelf' succeeded. Verification of component 'tk-policyfile-provisioner' succeeded. Verification of component 'fauxhai' succeeded. Verification of component 'inspec' succeeded. Verification of component 'test-kitchen' succeeded. Verification of component 'chef-dk' failed. Verification of component 'chefspec' succeeded. Verification of component 'knife-spork' succeeded. Verification of component 'git' succeeded. Verification of component 'chef-sugar' succeeded. Verification of component 'chef-client' succeeded. Verification of component 'generated-cookbooks-pass-chefspec' succeeded. Verification of component 'package installation' succeeded. Verification of component 'chef-provisioning' succeeded.
# which chef /usr/bin/chef # ls -l /usr/bin/chef lrwxrwxrwx 1 root root 20 Aug 1 23:57 /usr/bin/chef -> /opt/chefdk/bin/chef
System | Explanation |
---|---|
chef-zero | new version |
chef-solo + knife-solo | old chef-solo : knife-solo : “knife-sole” is used to manage many node. “knife-sole” is use “rsync” to deploy Cookbook and “ssh” to execute chef-sole at many node. |
# chef gem install knife-zero
# chef generate repo chef-repo <- create chef repository # tree -a -I .git chef-repo chef-repo |-- .chef-repo.txt |-- .gitignore |-- LICENSE |-- README.md |-- chefignore |-- conf.rb |-- cookbooks | |-- README.md | `-- example | |-- README.md | |-- attributes | | `-- default.rb | |-- metadata.rb | `-- recipes | `-- default.rb |-- data_bags | |-- README.md | `-- example | `-- example_item.json |-- environments | |-- README.md | `-- example.json `-- roles |-- README.md `-- example.json 8 directories, 17 files
# knife cookbook create -o cookbooks sample # tree -a cookbooks/ cookbooks/ |-- README.md |-- example | |-- README.md | |-- attributes | | `-- default.rb | |-- metadata.rb | `-- recipes | `-- default.rb `-- sample |-- CHANGELOG.md |-- README.md |-- attributes |-- definitions |-- files | `-- default |-- libraries |-- metadata.rb |-- providers |-- recipes | `-- default.rb |-- resources `-- templates `-- default 14 directories, 9 files
# vi cookbooks/sample/recipes/default.rb # cat cookbooks/sample/recipes/default.rb package "httpd" do action :install end service "httpd" do action [:enable, :start] end file "/var/www/html/index.html" do content '<h1>Hello, Chef Server World!!</h1>' end
# knife zero bootstrap xx.xx.xx.xx --sudo -N local-node # knife node list # knife node run_list add local-node sample
# knife zero converge 'name:xx.xx.xx.xx' --sudo
# chef gem install knife-solo
# chef generate repo chef-repo <- create chef repository # tree -a chef-repo chef-repo |-- .chef | `-- knife.rb |-- .gitignore |-- Berksfile |-- cookbooks | `-- .gitkeep |-- data_bags | `-- .gitkeep |-- environments | `-- .gitkeep |-- nodes | `-- .gitkeep |-- roles | `-- .gitkeep `-- site-cookbooks `-- .gitkeep 7 directories, 9 files
# cd chef-repo # knife cookbook create -o cookbooks httpd # tree -a cookbooks cookbooks |-- .gitkeep `-- httpd |-- CHANGELOG.md |-- README.md |-- attributes |-- definitions |-- files | `-- default |-- libraries |-- metadata.rb |-- providers |-- recipes | `-- default.rb |-- resources `-- templates `-- default 11 directories, 5 files
# vi cookbooks/httpd/recipes/default.rb package "apache2" do action :install end service "apache2" do supports :status => true, :restart => true, :reload => true action [:enable, :start] end
# knife solo prepare xx.xx.xx.xx # vi chef-repo/nodes/xx.json { "run_list":[ "recipe[httpd]" ] } # knife solo cook xx.xx.xx.xx
System | Explanation |
---|---|
Chef Server | |
Node | Chef Client |
Workstation | You use “knife” command for magagement recip. |
# rpm -vih chef-server-*.x86_64.rpm
# chef-server-ctl reconfigure
# yum install ruby ruby-devel rubygems make gcc # gem install chef
# mkdir ~/.chef # scp CHEFSERVER:/etc/chef-server/admin.pem ~/.chef/ # scp CHEFSERVER:/etc/chef-server/chef-validator.pem ~/.chef/
# knife cookbook upload -a
# yum install ruby ruby-devel rubygems make gcc # gem install chef # mkdir -p /etc/chef # scp CHEFSERVRE:/etc/chef-server/chef-validator.pem /etc/chef/validation.pem # vi /etc/chef/client.rb chef_server_url 'https://CHEFSERVER' node_name 'NODENAME'
# chef-client -o mysql::client
# vi Vagrantfile Vagrant.configure("2") do |config| config.vm.box = "ubuntu" config.vm.network :private_network, ip: "192.168.33.10" config.vm.provision :chef_solo do |chef| chef.cookbooks_path = "./cookbooks" chef.add_recipe "httpd" chef.add_recipe "mysql" chef.add_recipe "php" chef.add_recipe "group" end end # vagrant reload