Skip to content

Instantly share code, notes, and snippets.

@spuder
Last active October 27, 2016 15:03
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save spuder/00aa024e61392d16f4cc to your computer and use it in GitHub Desktop.
Save spuder/00aa024e61392d16f4cc to your computer and use it in GitHub Desktop.

Option A

#################

Pros: flat 2 layer design Cons: Boat load of nearly identical roles. (could be hundreds)

Environments

- Production : web: 0.12.0, elastic search:0.3.13
- Stage:          web: 1.0.0,  elasticsearch: 0.3.14

Roles ( 9 datacenters/regions * 6 web servers = 54 web server roles)

- us-east1-web-base
- us-east1-web-netsage
- us-east1-web-mailproc
- us-east1-web-fast
- eu-north1-web-base
- eu-north1-web-netsage
- eu-north1-web-mailproc
- aws-west1-web-base
- aws-west1-web-netsage
- aws-west1-web-mailproc
- aws-west1-web-fast

Cookbooks

- web-base
- web-netsage
- web-mailproc
- web-fast

Option B

#########################

Pros: Far less roles, uses two types of roles. You apply both a datacenter role and a web server type role. No real need for wrapper cookbooks. Need to be careful that when you apply two types of roles, they don't overlap settings. Last one applied will win. Make sure datacenter roles are 'overrides' Cons: Be careful you don't duplicate settings between _datacenter and _web override roles. Last one will win.

Databags

- web
 - production
   -web-version = 2.0.0
   -web-version-beta = 2.2.0
   -web-version-previous = 1.0.0
 - stage
   -web-version = 3.0.0

Environments

- Production
- Stage

Roles The roles that start with an underscore are override roles for the special snowflakes. They have a variable that tells the cookbook to look at a special databag (e.g web-version-beta databag and web-version-previous databag).

- _us-east1      #Uses override level attributes
- _eu-north1    #Uses override level attributes
- _aws-west1    #Uses override level attributes
- _azure-south1    #Uses override level attributes
- _web-beta        #Overrides pool of web-base servers 
- _web-previous  #Override pool of web-base servers
- web-base
- web-netsage
- web-mailproc
- web-fast

Cookbooks

- web-base
- web-netsage
- web-mailproc
- web-fast

Option C

#########################

Pros: Simple Roles Cons: Extreme amount of wrapper cookbooks

Databags ???

Environments

- Production
- Stage

Roles

- _us-east1
- _eu-north1
- _aws-west1
- _azure-south1
- web-base
- web-netsage
- web-mailproc
- web-fast
- previous_release 

WrapperCookbooks

- web-base-us-east1
- web-base-eu-north1
- web-base-aws-west1
- web-base-azure-south1
- web-netsage-us-east1
- web-netsage-us-north1
- web-netsage-aws-west1
- web-netsage-azure-south1
- web-mailproc-us-east1
- web-mailproc-us-north1
- web-mailproc-aws-west1
- web-mailproc-azure-south1
- web-fast-us-east1
- web-fast-us-north1
- web-fast-aws-west1
- web-fast-azure-south1

Cookbooks

  • nd-web

Option D

#########################

Pros: Cons:

Databags ???

Environments

- Production
- Stage

Roles

- _us-east1
- _eu-north1
- _aws-west1
- _azure-south1
- web-base
- web-netsage
- web-mailproc
- web-fast
- previous_release 

WrapperCookbooks


Cookbooks

  • nd-web

Option E

###################

Somehow use wrapper cookbooks?

You could do: Base web server wrappers Role wrappers Environment wrappers

That makes for a lot of wrapper cookbooks, that I"m not sure are needed, since roles can do that anyway.

@spuder
Copy link
Author

spuder commented Nov 10, 2015

Finally figured out the best solution for us by using a combination of roles. Will blog about it here: http://spuder.github.io/2015/chef-datacenter-pattern/

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment