Boxen: How to Manage an Army of Laptops and Live to Talk About It

2,669 views
2,556 views

Published on

Will Farrington of Github talks about Boxen at Puppet Camp Atlanta, 2013. Original slides can be found: https://speakerdeck.com/wfarr/boxen-puppetcamp-atl Learn about upcoming Puppet Camps at http://puppetlabs.com/community/puppet-camp/

Published in: Technology
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
2,669
On SlideShare
0
From Embeds
0
Number of Embeds
44
Actions
Shares
0
Downloads
18
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

Boxen: How to Manage an Army of Laptops and Live to Talk About It

  1. 1. boxen
  2. 2. wfarr
  3. 3. ops
  4. 4. friction
  5. 5. what is boxen?
  6. 6. STORY TIME
  7. 7. @jbarnette + @wfarr
  8. 8. developing software isharder than it used to be
  9. 9. our toolchains have gotten more robust
  10. 10. our toolchains have gotten more complicated
  11. 11. want to work on $anything?
  12. 12. better install a ruby versionmanager, like 8 versions of ruby, ahandful of gems to try and make the behavior remotely sane, and then pray it doesnt break
  13. 13. s/ruby/literally everything but bash/g
  14. 14. lets make it better
  15. 15. THINGS BOXEN IS
  16. 16. a framework
  17. 17. stdli b
  18. 18. wat
  19. 19. THINGS BOXEN IS NOT
  20. 20. n o pe
  21. 21. n o pe
  22. 22. newp
  23. 23. sadly, no
  24. 24. why should i use boxen?
  25. 25. FRICTION SUCKS
  26. 26. friction is anything thatgets in the way of doing stuff
  27. 27. friction is the greatest source offrustration in every organization
  28. 28. configuring developmentenvironments is a week-long marathon in friction
  29. 29. "all right, new work laptop! i wonder where that blog post i used last time to set up ruby,python, go, and git is. hopefully it still works and by the end of the week i can start shipping."
  30. 30. e "all right, new work laptop! i m wonder where that blog post i a used last time to set up ruby,lpython, go, and git is. hopefully it still works and by the end of the week i can start shipping."
  31. 31. getting any part of the stackrunning locally should never block someone from shipping
  32. 32. STUFF OOL SS CU
  33. 33. INCONSISTENCY SUCKS
  34. 34. when was the last time you knew every human was running the same services in dev and prod?
  35. 35. "hey so my postgresql isnt working. is yours working? it is?huh. i have no idea whats wrong."
  36. 36. m e "hey so my postgresql isnt al working. is yours working? it is?huh. i have no idea whats wrong."
  37. 37. manual audits are tedious
  38. 38. manual audits are error-prone
  39. 39. ask software instead of humans
  40. 40. lock every core component to the same version as in prod
  41. 41. UPDATING SUCKS
  42. 42. "jeeeeeez the mac app store hasbeen bugging me for like forever! i have a billion updates... meh"
  43. 43. m e "jeeeeeez the mac app store has albeen bugging me for like forever! i have a billion updates... meh"
  44. 44. maybe you use CM in dev already, but when was the last time you updated and ran it?
  45. 45. SECURITY SUCKS
  46. 46. security is a war of attrition
  47. 47. bug people enough about security and they stop caring about it
  48. 48. "ugh, another security thing? whatever, i have way more important things to do"
  49. 49. m e"ugh, another security thing? al whatever, i have way more important things to do"
  50. 50. let code handle security,then inform people so they know why the codes making changes
  51. 51. no surprises
  52. 52. BOXEN ENABLES YOU TO MAKE THESE THINGS BETTER FOR YOUR ORG
  53. 53. what do i get?
  54. 54. RUNNER
  55. 55. boxen is run via some ruby
  56. 56. it collects info for facter
  57. 57. it checks for prerequisites and conflicts before each run
  58. 58. it detects certain changes post-run
  59. 59. it has hooks too
  60. 60. PUPPET
  61. 61. "the core"
  62. 62. homebrew, git, hub, gcc, rbenv, ruby 1.8.7, ruby 1.9.3, ruby 2.0.0, nvm, nodejs 0.4.x, nodejs 0.6.x,nodejs 0.8.x, nginx, .dev dns, FDE, and puppetlabs-stdlib
  63. 63. rbenv_gem, repository, osx_chsh, osx_login_item, boxen::project, ruby::local, mysql::database, etc.
  64. 64. package: homebrew, compressed_app
  65. 65. repository: git
  66. 66. service: ghlaunchd
  67. 67. "the library"
  68. 68. 130+ modules on GitHub
  69. 69. GitHub uses ~81 of those
  70. 70. travis-ci
  71. 71. CARDBOARD
  72. 72. gem that simplifies creating newpuppet modules, optimized for the boxen-recommended stack
  73. 73. librarian-puppet, rspec-puppet, puppet-lint, etc.
  74. 74. PUPPET-TEMPLATE
  75. 75. example module using cardboard
  76. 76. OUR-BOXEN
  77. 77. template boxen project
  78. 78. BOXEN-WEB
  79. 79. small rails app to allow distributing your boxen easily, with auth
  80. 80. how do i get it?
  81. 81. Automate Everything
  82. 82. boxen/boxen-web
  83. 83. how do i use it?
  84. 84. CLI
  85. 85. $ boxen# run it
  86. 86. $ boxen --projects# list projects Boxen knows about
  87. 87. $ boxen <project># run it but include <project> in thecatalog automatically
  88. 88. PROJECT MANIFESTS
  89. 89. i want to hack on my project
  90. 90. # modules/projects/manifests/team.ppclass projects::team { boxen::project { team: dotenv => true, mysql => true, nginx => true, ruby => 1.9.3, source => github/team, }}
  91. 91. $ boxen teamwarning: Setting up team. This canbe made permanent by having includeprojects::team in your personalmanifest.
  92. 92. cloned repo nginx vhost ruby versionmysql databases .env file
  93. 93. $ cd ~/src/team$ script/server$ open http://team.dev/
  94. 94. PERSONAL MANIFESTS
  95. 95. i want to install $x but only for me
  96. 96. # modules/people/manifests/wfarr.ppclass people::wfarr { include minecraft}
  97. 97. # modules/people/manifests/wfarr.ppclass people::wfarr { include zsh}
  98. 98. # modules/people/manifests/wfarr.ppclass people::wfarr { case $::hostname { bender: { include projects::all } scruffy: { include projects::team } default: {} }}
  99. 99. # modules/people/manifests/wfarr.ppclass people::wfarr {  git::config::global {    alias.st: value => status;    alias.ci: value => commit;    alias.di: value => diff;    alias.lp: value => log -p;    color.ui: value => true;    user.name: value => Will Farrington;    user.email: value => wfarr@github.com;  }}
  100. 100. # modules/people/manifests/wfarr.ppclass people::wfarr { include osx::example_things}
  101. 101. ISSUES
  102. 102. $ boxenError: ZOMG at /opt/boxen/repo/modules/people/manifests/wfarr.pp:8on node scruffy.gateway.github.lanSorry! Creating an issue on github/totally-a-madeup-repo-name.
  103. 103. CODEZ
  104. 104. who failedCODEZ
  105. 105. how long agoCODEZ
  106. 106. CODEZ machine
  107. 107. os versionCODEZ
  108. 108. CODEZ shell
  109. 109. refCODEZ
  110. 110. compare viewCODEZ
  111. 111. git statusCODEZ
  112. 112. CODEZ full command
  113. 113. CODEZ full log
  114. 114. i fix the error and run `boxen`
  115. 115. CODEZ
  116. 116. via issues api
  117. 117. # config/boxen.rbENV[BOXEN_REPO_NAME] = github/boxenENV[BOXEN_ISSUES_ENABLED] = yes
  118. 118. UPDATES
  119. 119. $ boxenBoxen is up-to-date.
  120. 120. $ boxenBoxen has a dirty tree, wont auto-update!
  121. 121. $ boxenBoxen has unpushed commits onmaster, wont auto-update!
  122. 122. $ boxenBoxen on a non-master branch new-project, wont auto-update!
  123. 123. im sold.
  124. 124. what if i have problems?
  125. 125. file issues
  126. 126. irc.freenode.net
  127. 127. be chuck yeager
  128. 128. "So, were uh in the air. We made it. Thats uh good news, obviously."
  129. 129. "Flight attendants, if you couldjust hang on to uh... whatever..."
  130. 130. detail text
  131. 131.  wfarrcome work with me on things like boxen
  132. 132. CODEZ
  133. 133. thanks
  134. 134. speakerdeck.com/wfarr/ boxen-puppetcamp-atl

×