IT Automation with Chef


Published on

Learn to automate system configuration IT infrastructure with Chef

Published in: Technology, Self Improvement
  • Be the first to comment

No Downloads
Total views
On SlideShare
From Embeds
Number of Embeds
Embeds 0
No embeds

No notes for slide

IT Automation with Chef

  1. 1. IT Automation with Chef Anuchit Chalothorn
  2. 2. Chef Server *hosted* Node *chef-client* Workstation *chef* Git
  3. 3. Tools ● Chef client tools for admin workstation ● Chef server ● Node with bootstrap
  4. 4. Chef client Install from choose match with your operating system and arch.
  5. 5. Chef client * for Linux and Mac user can use shell script installer from curl :)
  6. 6. Chef server You can use on premises chef server or use hosted chef. choose your version at your-version/
  7. 7. Chef server
  8. 8. Chef server
  9. 9. Starter kit Download Starter Kit on Administration page, then extract to your home directory.
  10. 10. Starter kit
  11. 11. Git repository Chef need repository for your cookbook. Change to your chef- repo and using git to init your repository. git init git add . git commit -m “add starter kit” * Ref : Customized Git Configuration
  12. 12. Try knife Change to your Chef repo directory and use knife command line eg: knife client list knife client list
  13. 13. Node bootstrap To add node to Chef server, use knife bootstrap to your node. knife bootstrap fqdn/ip --sudo -x username -P passwd -N "nodename" knife bootstrap --sudo -x username -P passwd -N "nodename"
  14. 14. Node bootstrap
  15. 15. Node bootstrap
  16. 16. Cookbook Now write your first cookbook call apache, use knife to create new cookbook. knife cookbook create apache
  17. 17. Cookbook : Apache Edit cookbooks/apache/recipes/default.rb to create your recipe, with following structure # install apache ... # start the apache service make sure the service starts ... # write our home page ...
  18. 18. Cookbook : Apache # install apache package "apache2" do action :install end # start the apache service make sure the service starts service "apache2" do action [ :enable, :start] end # write our home page cookbook_file "/var/www/index.html" do source "index.html" mode "0644" end
  19. 19. Cookbook : Apache At the last part in cookbook_file you must have index.html in cookbooks/apache/files/default/index.html write your own content. <html> <title>Hello World from Chef</title> <body> <h1>Hello World from Chef</h1> </body> </html>
  20. 20. Cookbook upload Each part call resources, which are step to install apache, enable service and create default html file. Now you are ready to publish your cookbook. knife cookbook upload apache
  21. 21. Cookbook Ubuntu need you to update APT cache before install any package the you shuld create apt cookbook to update APT cache first knife cookbook create apt
  22. 22. Cookbook : apt Use the execute command to update APT cache execute "apt-get update" do command "apt-get update" end
  23. 23. Cookbook upload Now you are ready to publish your apt cookbook. knife cookbook upload apt
  24. 24. Cookbook
  25. 25. Run list After upload cookbook to Chef server, you must create a run list for the node to apply recipes.
  26. 26. Run list
  27. 27. Run list
  28. 28. Chef Client Now back to your node, run command sudo chef-client to apply run list. sudo chef-client * Run remote by knife: knife ssh ‘name:*’ ‘sudo chef-client’ -x username -P password
  29. 29. Check the result Open your browser and browse to your node with an ip address or fqdn.
  30. 30. Check the report Goto Chef server to check your report; success, failure, aborted.
  31. 31. Reports
  32. 32. Reports
  33. 33. Make more dynamic Your first recipe support only Ubuntu node, then make support another distributions you may add following items for more dynamically ● Attributes ● Templates ● Metadata
  34. 34. Attributes Add cookbooks/apache/attributes/default.rb as a default values for your recipes. case node["platform_family"] when "debian" default["package_name"] = "apache2" default["service_name"] = "apache2" default["document_root"] = "/var/www" when "rhel" default["package_name"] = "httpd" default["service_name"] = "httpd" default["document_root"] = "/var/www/html" end
  35. 35. Recipes # install apache package node["package_name"] do action :install end # start the apache service # make sure the service starts service node["service_name"] do action [ :enable, :start] end # write our home page template "#{node["document_root"]}/index.html" do source "index.html.erb" mode "0644" end
  36. 36. Templates Add template file for your index.html in cookbooks/apache/templates/default/index.html. erb <html> <title>Hello World</title> <body> <h1>Hello World from <%= node["fqdn"] %>!</h1> </body> </html>
  37. 37. Metadata Edit metadata file in cookbooks/apache/metadata.rb name 'apache' maintainer 'Anuchit Chalothorn' maintainer_email '' license 'All rights reserved' description 'Installs/Configures apache' long_description, 'README. md')) version '0.1.0'
  38. 38. Rules Roles allow you to encapsulate run lists and attribute required for a server to be. eg: ● Web Server ● Database Server ● etc
  39. 39. Rules Create role for your web server by adding a webserver.rb in roles directory edit with following content. name "webserver" description "Web Server" run_list "recipe[apache]" default_attributes({ "company" => "RedLineSoft" })
  40. 40. Rules Create role for your web server by adding a base-ubuntu.rb in roles directory edit with following content. name "base-ubuntu" description "Base Ubuntu" run_list "recipe[apt]"
  41. 41. Rules Update your cookbook version in metadata and add new role with following knife command knife role create from file webserver.rb knife role create from file base-ubuntu.rb knife cookbook upload apache
  42. 42. Rules Goto Chef server and add new roles to your node instead of using cookbook then use chef-client to apply recipes
  43. 43. Rules
  44. 44. Community Cookbook Chef also have a community cookbooks. You can find an interest cookbook at http://community.opscode. com/cookbooks
  45. 45. Community Cookbook
  46. 46. Community Cookbook You can use community cookbook from Chef community by using knife. knife cookbook site download mysql 4.1.2 You'll get an archive file mysql-4.1.2.tar.gz in your chef- repo * Easy way use; knife cookbook site install mysql
  47. 47. Using Community Cookbook Now you get the archive cookbook from community already then extract an archive to cookbooks directory tar zxvf mysql-4.1.2.tar.gz -C cookbooks/
  48. 48. Using Community Cookbook Check dependency in metadata.rb, if you don’t have please download them, for homebrew, windows is dependency for OSX and Windows if you not use it, just comment it. depends 'openssl', '~> 1.1' depends 'build-essential', '~> 1.4' #depends 'homebrew' #depends 'windows'
  49. 49. Using Community Cookbook Read the recipe files, mysql cookbook has mysql::client, mysql::server and mysql::ruby so you can specify which recipe you will use.
  50. 50. Using Community Cookbook Download dependency cookbook for mysql knife cookbook site download openssl 1.1.0 knife cookbook site download build-essential 1.4.4 tar zxvf openssl-1.1.0.tar.gz -C cookbooks/ tar zxvf build-essential-1.4.4.tar.gz -C cookbooks/ knife cookbook upload build-essential openssl mysql
  51. 51. Using Community Cookbook Create new role webserver-mysql to install webserver and mysql in this role. name "webserver-mysql" description "Webserver and MySQL Database Server" run_list "recipe[apache]","recipe[mysql::client]","recipe[mysql:: server]" knife role from file webserver-mysql.rb
  52. 52. Using Community Cookbook Goto Chef server add role to node then apply webserver- mysql role in node
  53. 53. Using Community Cookbook
  54. 54. Using Community Cookbook Goto node and run chef-client to apply role. sudo chef-client
  55. 55. Further Resources ● ● ● ● ●