michelin starred cooking with chef
play

Michelin Starred Cooking with Chef Jon Cowie, Etsy.com - PowerPoint PPT Presentation

Michelin Starred Cooking with Chef Jon Cowie, Etsy.com jcowie@etsy.com @jonlives Wednesday, June 27, 12 What? Wednesday, June 27, 12 What? Chef at Etsy Wednesday, June 27, 12 What? Chef at Etsy Familiarity and Understanding


  1. Simplicity • Think of yourself at 3AM! • Please, won’t you think of the new guy? • Minimize the logics! • As few logical steps from start to finish as possible. Wednesday, June 27, 12

  2. Simplicity - Not! Date: Mon Dec 05 2011 23:07:18 GMT+0000 (GMT) Subject: so close to death # Don't install v2 on search or Cent 5.6 nodes -if node[:fqdn] !~ /\b(^(preprod-)?search[0-9]{2}|ny4dev\.etsy\.com|^(preprod-)? giftsweb[0-9]{2}|^db(shard|spare|data)[0-9]{2}|^qa-web01|^devsearch[0-9]{2}|^nagios01| ^webnest[0-9]{2}|^prodking[0-9]{2}|^sandboxweb[0-9]{2}|^virt((0[5-9])|(1[0-9]))| ^msysmgr[0-9]{2}|^msysmta[0-9]{2}|^dbconvo[0-9]{2}|^dbshowcase01|atlasweb[0-9]{2}| devnagios[0-9]{2}|cimaster02|worker[0-9]{2}|^ganglia[0-9]{2}|^imgcache[0-9]{2}| imgconvert[0-9]{2}|^imgwriter[0-9]{2}|dev-img02|^datacache04|^graphite01|^graphite03| ^webutil03|^webutil04|^statsd01|^maintweb[0-9]{2}|^(dev-|preprod-)?convosearch[0-9]{2}| deployinator[0-9]{2}|^wpadmin01|^(preprod-)?dbtasks[0-9]{2})\b/ and node.role?("Web56") == false and node.role?("Preprodweb56") == false and node.role?("Princess53") == false +if node[:fqdn] !~ /\b(^(preprod-)?search[0-9]{2}|ny4dev\.etsy\.com|^(preprod-)? giftsweb[0-9]{2}|^db(shard|spare|data)[0-9]{2}|^qa-web01|^devsearch[0-9]{2}|^nagios01| ^webnest[0-9]{2}|^prodking[0-9]{2}|^sandboxweb[0-9]{2}|^virt((0[5-9])|(1[0-9]))| ^msysmgr[0-9]{2}|^msysmta[0-9]{2}|^dbconvo[0-9]{2}|^dbshowcase01|atlasweb[0-9]{2}| devnagios[0-9]{2}|cimaster02|worker[0-9]{2}|^ganglia[0-9]{2}|^imgcache[0-9]{2}| imgconvert[0-9]{2}|^imgwriter[0-9]{2}|dev-img02|^datacache04|^graphite01|^graphite03| ^webutil03|^webutil04|^statsd01|^maintweb[0-9]{2}|^(dev-|preprod-)?convosearch[0-9]{2}| deployinator[0-9]{2}|^wpadmin01|^(preprod-)?dbtasks[0-9]{2})\b/ and node.role?("Web56") == false and node.role?("Preprodweb56") == false and node.role?("Princess53") == false and node.role?("Auth") == false Wednesday, June 27, 12

  3. Simplicity - Better! if node.chef_environment == "libmemcached_upgrade" package "libmemcached" do version "1.0.4-1" action :install end <snip> else package "libmemcached" do version "0.53-1.1" action :install end <snip> end Wednesday, June 27, 12

  4. Simplicity - Complexity Wednesday, June 27, 12

  5. Simplicity - Complexity • Sometimes you need complex behaviour Wednesday, June 27, 12

  6. Simplicity - Complexity • Sometimes you need complex behaviour • Don’t fight it, try to abstract it. Wednesday, June 27, 12

  7. Simplicity - Complexity • Sometimes you need complex behaviour • Don’t fight it, try to abstract it. • Case in point: Syslog-ng refactor Wednesday, June 27, 12

  8. Case Study: Syslog-ng Wednesday, June 27, 12

  9. Case Study: Syslog-ng • 36 recipes Wednesday, June 27, 12

  10. Case Study: Syslog-ng • 36 recipes • 30 versions of syslog-ng.conf Wednesday, June 27, 12

  11. Case Study: Syslog-ng • 36 recipes • 30 versions of syslog-ng.conf • 27 manually configured files in /etc/syslog- ng.d on central server Wednesday, June 27, 12

  12. Case Study: Syslog-ng • 36 recipes • 30 versions of syslog-ng.conf • 27 manually configured files in /etc/syslog- ng.d on central server • Edge cases and exceptions galore Wednesday, June 27, 12

  13. Case Study: Syslog-ng Wednesday, June 27, 12

  14. Case Study: Syslog-ng • Down to: Wednesday, June 27, 12

  15. Case Study: Syslog-ng • Down to: • 2 recipes (one client, one server) Wednesday, June 27, 12

  16. Case Study: Syslog-ng • Down to: • 2 recipes (one client, one server) • 2 templates (one for syslog-ng.conf, one for stuff in /etc/syslog-ng.d) Wednesday, June 27, 12

  17. Case Study: Syslog-ng • Down to: • 2 recipes (one client, one server) • 2 templates (one for syslog-ng.conf, one for stuff in /etc/syslog-ng.d) • Attributes in roles Wednesday, June 27, 12

  18. Case Study: Syslog-ng • Down to: • 2 recipes (one client, one server) • 2 templates (one for syslog-ng.conf, one for stuff in /etc/syslog-ng.d) • Attributes in roles • Not open sourced yet, sorry :( Wednesday, June 27, 12

  19. Case Study: Syslog-ng "syslog": { "group": "preprod_web", "items": { "web_apache_access_log": { "source": "/var/log/httpd/access_log", "source_program_override": "APACHEACCESS: ", "destination": "<snip>/access.log", "destination_filters": [ "host('^preprod-web')", "match('APACHEACCESS')" ], "destination_options": [ "template_escape(no)" ] }, } } Wednesday, June 27, 12

  20. Remember, No Panacea! Wednesday, June 27, 12

  21. Remember, No Panacea! • A new package hits the repo. Wednesday, June 27, 12

  22. Remember, No Panacea! • A new package hits the repo. • Are you in control of when it goes out? Wednesday, June 27, 12

  23. Remember, No Panacea! • A new package hits the repo. • Are you in control of when it goes out? • Memcached Outage Wednesday, June 27, 12

  24. Remember, No Panacea! • A new package hits the repo. • Are you in control of when it goes out? • Memcached Outage • Do you know what services are going to restart and when? Wednesday, June 27, 12

  25. Remember, No Panacea! • A new package hits the repo. • Are you in control of when it goes out? • Memcached Outage • Do you know what services are going to restart and when? • Image Service Outage Wednesday, June 27, 12

  26. Standards Wednesday, June 27, 12

  27. Standards • Not going to talk about testing [8]! Wednesday, June 27, 12

  28. Standards • Not going to talk about testing [8]! • But I don’t have time for standards! Wednesday, June 27, 12

  29. Standards - No Time! Wednesday, June 27, 12

  30. Standards - No Time! • I won’t say “Make Time”, but you should... Wednesday, June 27, 12

  31. Standards - No Time! • I won’t say “Make Time”, but you should... • For a quick win, try Foodcritic Wednesday, June 27, 12

  32. Standards - No Time! • I won’t say “Make Time”, but you should... • For a quick win, try Foodcritic • Good out of the box rules Wednesday, June 27, 12

  33. Standards - No Time! • I won’t say “Make Time”, but you should... • For a quick win, try Foodcritic • Good out of the box rules • Jenkins integration in seconds Wednesday, June 27, 12

  34. Standards - No Time! • I won’t say “Make Time”, but you should... • For a quick win, try Foodcritic • Good out of the box rules • Jenkins integration in seconds • Supports custom rules Wednesday, June 27, 12

  35. Standards - No Time! • I won’t say “Make Time”, but you should... • For a quick win, try Foodcritic • Good out of the box rules • Jenkins integration in seconds • Supports custom rules • Plays well with others Wednesday, June 27, 12

  36. Foodcritic Wednesday, June 27, 12

  37. Foodcritic • gem install foodcritic Wednesday, June 27, 12

  38. Foodcritic • gem install foodcritic • foodcritic <cookbook_repo> Wednesday, June 27, 12

  39. Foodcritic • gem install foodcritic • foodcritic <cookbook_repo> • Simple Jenkins job: Wednesday, June 27, 12

  40. Foodcritic • gem install foodcritic • foodcritic <cookbook_repo> • Simple Jenkins job: #!/usr/bin/env rvm-shell 1.9.3 foodcritic -f correctness . Wednesday, June 27, 12

  41. Standards at Etsy Wednesday, June 27, 12

  42. Standards at Etsy • “style” not “correctness”[9] Wednesday, June 27, 12

  43. Standards at Etsy • “style” not “correctness”[9] • ETSY001 - Package or yum_package resource used with :upgrade action Wednesday, June 27, 12

  44. Standards at Etsy • “style” not “correctness”[9] • ETSY001 - Package or yum_package resource used with :upgrade action • ETSY002 - Execute resource used to run git commands Wednesday, June 27, 12

Recommend


More recommend