SlideShare une entreprise Scribd logo
1  sur  20
Rick Copeland @rick446
Arborian Consulting, LLC
   Infrastructure as Code

   Resources & Providers

   Cookbooks, Recipes, Clients, and Nodes
CouchDB                                Solr



                                     SolrIndexer


Chef Server
                       RabbitMQ
                         RabbitMQ
                          RabbitMQ
   (API)



       HTTP REST API


Chef Server
                        knife        chef-client
 (Web UI)
Build, register, and authenticate the node

             Synchronize cookbooks

Build resource collection (run the recipes in order)


          Configure node (“converge”)

            Run notification handlers
CouchDB                                  Solr


                                       Ruby
                                              SolrIndexer


       Chef Server
                              RabbitMQ
                                RabbitMQ
                                 RabbitMQ
          (API)
                                                 Ruby
Ruby
              HTTP REST API


       Chef Server
                               knife          chef-client
        (Web UI)
   Chef assumes a bootstrapped node exists

   Chef doesn’t keep release notes

   Code and infrastructure are versioned
    differently

   Solution: Web app to manage deployments &
    generate release notes
MonQ
     MongoDB
                                           SolrIndexer



                                  Python

    Chef Server
    (API + web)              Solr

                    Ruby
HTTP REST API



            knife            chef-client
   Reduce # of processes & technologies

   Don’t know Ruby well

   Keep private keys out of the system

   Integrate with existing authentication

   Performance
/clients       /nodes


  /data      /environments


  /roles      /sandboxes


/cookbooks      /search
   Mostly JSON  almost BSON
       References to Ruby files stored separately
{
    "name": "allura-0.0.1”,…
    "json_class": "Chef::CookbookVersion",
                                                    Ruby files stored on S3
    "attributes": [
     {
       "name": "default.rb",
       "url": "https://s3.amazonaws.com/opscode-platform-production-data/…
       "checksum": "749a3a328d6c47a32d134b336183981f",
       "path": "attributes/default.rb",
       "specificity": "default”…
MongoDBValidator
role = collection(
'chef.role', doc_session,
Field('_id', S.ObjectId()),
Field('account_id', S.ObjectId(if_missing=None)),
                                                    Shorthand with
Field('name', str),
                                                     Python Types
Field('description', str),
Field('default_attributes', str),
Field('override_attributes', str),
Field('run_list', [ str ] ),
Field('env_run_lists', { str: [ str ]}),
Index('account_id', 'name', unique=True))


                                                         Embedded
                    Index Definitions
                                                         Documents
classRole(ModelBase):                                              Models know
                                                                  where they live
def__name__(self):
returnself.name
                                                                Models can be
def__json__(self):                                            turned into dict (to
returndict(                                                     be JSONified)
chef_type='role',
json_class='Chef::Role',
        …
default_attributes=loads(self.default_attributes),
                                                       Models can be
        …)
                                                      updated from dict
defupdate(self, d):
self.name = d['name']
      …
self.default_attributes = dumps(d['default_attributes'])
self.override_attributes = dumps(d['override_attributes'])
      …
classRoleSchema(JSONModelSchema):

model_class=CM.role

chef_type='role’

json_class='Chef::Role’

exclude_fields=['_id', 'account_id']
   Find resource
     /foo/bar/bazRoot()[‘foo’][‘bar’][‘baz’]

   (Resource, method)  view
     @view_config(context=Resource, request_method=‘GET’, …)

   Authorization
     @view_config(…, permission=‘read’, …)

   Rendering
     @view_config(…, renderer=‘json’)
classResourceCollection(object):
__name__ = None                                   Check auth
__model__ = None
key_property='name’

  defallow_access(self, client, permission):
return permission == 'read'orclient.admin      Traverse to find
                                                 sub-objects
def__getitem__(self, name):
obj = self.account.get_object(
self.__model__, **{
self.key_property: name })
ifobjisNone: raiseexc.HTTPNotFound()
obj.__parent__ = self
returnobj
@view_config(context=Roles, renderer='json',          Resources can be
request_method='GET’, permission='read')                  located
deflist_roles(context, request):
returndict(
(n.name, request.resource_url(n))
fornincontext.find())
                                                Convert and
@view_config(context=Roles, renderer='json',   validate JSON
request_method='POST’,permission='create')          input
defcreate_role(context, request):
n = context.new_object()
  value = V.RoleSchema().to_python(
request.json, None)
n.update(value)
  …
   Don’t trust the docs
     Don’t trust the docs
      ▪ Don’t trust the docs

   Use fat models

   Framework support for REST & JSON

   You’re gonna have to learn some Ruby anyway

   JSON != BSON
   Port from homegrown framework to Pyramid

   Better test coverage

   Search support (SOLR / ElasticSearch)

   More testing with real-world deployments

   Finalize integration with deployment
    manager
Rick Copeland @rick446
Arborian Consulting, LLC
Rick Copeland @rick446
Arborian Consulting, LLC

Contenu connexe

Tendances

Tendances (20)

Mongoose getting started-Mongo Db with Node js
Mongoose getting started-Mongo Db with Node jsMongoose getting started-Mongo Db with Node js
Mongoose getting started-Mongo Db with Node js
 
Nodejs mongoose
Nodejs mongooseNodejs mongoose
Nodejs mongoose
 
Build your own entity with Drupal
Build your own entity with DrupalBuild your own entity with Drupal
Build your own entity with Drupal
 
Yii, frameworks and where PHP is heading to
Yii, frameworks and where PHP is heading toYii, frameworks and where PHP is heading to
Yii, frameworks and where PHP is heading to
 
2013-03-23 - NoSQL Spartakiade
2013-03-23 - NoSQL Spartakiade2013-03-23 - NoSQL Spartakiade
2013-03-23 - NoSQL Spartakiade
 
Nodejs do teste de unidade ao de integração
Nodejs  do teste de unidade ao de integraçãoNodejs  do teste de unidade ao de integração
Nodejs do teste de unidade ao de integração
 
Drush. Secrets come out.
Drush. Secrets come out.Drush. Secrets come out.
Drush. Secrets come out.
 
Client-side MVC with Backbone.js
Client-side MVC with Backbone.js Client-side MVC with Backbone.js
Client-side MVC with Backbone.js
 
Drush - use full power - DrupalCamp Donetsk 2014
Drush - use full power - DrupalCamp Donetsk 2014Drush - use full power - DrupalCamp Donetsk 2014
Drush - use full power - DrupalCamp Donetsk 2014
 
ZF2 for the ZF1 Developer
ZF2 for the ZF1 DeveloperZF2 for the ZF1 Developer
ZF2 for the ZF1 Developer
 
Angular Restmod (english version)
Angular Restmod (english version)Angular Restmod (english version)
Angular Restmod (english version)
 
Mongoose: MongoDB object modelling for Node.js
Mongoose: MongoDB object modelling for Node.jsMongoose: MongoDB object modelling for Node.js
Mongoose: MongoDB object modelling for Node.js
 
Talkaboutlithium
TalkaboutlithiumTalkaboutlithium
Talkaboutlithium
 
2015 02-09 - NoSQL Vorlesung Mosbach
2015 02-09 - NoSQL Vorlesung Mosbach2015 02-09 - NoSQL Vorlesung Mosbach
2015 02-09 - NoSQL Vorlesung Mosbach
 
How to work with legacy code
How to work with legacy codeHow to work with legacy code
How to work with legacy code
 
How to work with legacy code PHPers Rzeszow #2
How to work with legacy code PHPers Rzeszow #2How to work with legacy code PHPers Rzeszow #2
How to work with legacy code PHPers Rzeszow #2
 
2012-08-29 - NoSQL Bootcamp (Redis, RavenDB & MongoDB für .NET Entwickler)
2012-08-29 - NoSQL Bootcamp (Redis, RavenDB & MongoDB für .NET Entwickler)2012-08-29 - NoSQL Bootcamp (Redis, RavenDB & MongoDB für .NET Entwickler)
2012-08-29 - NoSQL Bootcamp (Redis, RavenDB & MongoDB für .NET Entwickler)
 
Ruby on Rails 中級者を目指して - 大場寧子
Ruby on Rails 中級者を目指して - 大場寧子Ruby on Rails 中級者を目指して - 大場寧子
Ruby on Rails 中級者を目指して - 大場寧子
 
WordPress for developers - phpday 2011
WordPress for developers -  phpday 2011WordPress for developers -  phpday 2011
WordPress for developers - phpday 2011
 
Your code sucks, let's fix it - DPC UnCon
Your code sucks, let's fix it - DPC UnConYour code sucks, let's fix it - DPC UnCon
Your code sucks, let's fix it - DPC UnCon
 

Similaire à Chef on MongoDB and Pyramid

Fast Web Applications Development with Ruby on Rails on Oracle
Fast Web Applications Development with Ruby on Rails on OracleFast Web Applications Development with Ruby on Rails on Oracle
Fast Web Applications Development with Ruby on Rails on Oracle
Raimonds Simanovskis
 
PofEAA and SQLAlchemy
PofEAA and SQLAlchemyPofEAA and SQLAlchemy
PofEAA and SQLAlchemy
Inada Naoki
 
JRuby + Rails = Awesome Java Web Framework at Jfokus 2011
JRuby + Rails = Awesome Java Web Framework at Jfokus 2011JRuby + Rails = Awesome Java Web Framework at Jfokus 2011
JRuby + Rails = Awesome Java Web Framework at Jfokus 2011
Nick Sieger
 
Learning to code for startup mvp session 3
Learning to code for startup mvp session 3Learning to code for startup mvp session 3
Learning to code for startup mvp session 3
Henry S
 

Similaire à Chef on MongoDB and Pyramid (20)

Fast Web Applications Development with Ruby on Rails on Oracle
Fast Web Applications Development with Ruby on Rails on OracleFast Web Applications Development with Ruby on Rails on Oracle
Fast Web Applications Development with Ruby on Rails on Oracle
 
PofEAA and SQLAlchemy
PofEAA and SQLAlchemyPofEAA and SQLAlchemy
PofEAA and SQLAlchemy
 
How to create a libcloud driver from scratch
How to create a libcloud driver from scratchHow to create a libcloud driver from scratch
How to create a libcloud driver from scratch
 
How to create a libcloud driver from scratch
How to create a libcloud driver from scratchHow to create a libcloud driver from scratch
How to create a libcloud driver from scratch
 
Ember Data and JSON API
Ember Data and JSON APIEmber Data and JSON API
Ember Data and JSON API
 
Django Multi-DB in Anger
Django Multi-DB in AngerDjango Multi-DB in Anger
Django Multi-DB in Anger
 
JRuby + Rails = Awesome Java Web Framework at Jfokus 2011
JRuby + Rails = Awesome Java Web Framework at Jfokus 2011JRuby + Rails = Awesome Java Web Framework at Jfokus 2011
JRuby + Rails = Awesome Java Web Framework at Jfokus 2011
 
Connecting the Worlds of Java and Ruby with JRuby
Connecting the Worlds of Java and Ruby with JRubyConnecting the Worlds of Java and Ruby with JRuby
Connecting the Worlds of Java and Ruby with JRuby
 
Scalable web application architecture
Scalable web application architectureScalable web application architecture
Scalable web application architecture
 
Intro to fog and openstack jp
Intro to fog and openstack jpIntro to fog and openstack jp
Intro to fog and openstack jp
 
Learning to code for startup mvp session 3
Learning to code for startup mvp session 3Learning to code for startup mvp session 3
Learning to code for startup mvp session 3
 
Services Stanford 2012
Services Stanford 2012Services Stanford 2012
Services Stanford 2012
 
SproutCore and the Future of Web Apps
SproutCore and the Future of Web AppsSproutCore and the Future of Web Apps
SproutCore and the Future of Web Apps
 
Chef or how to make computers do the work for us
Chef or how to make computers do the work for usChef or how to make computers do the work for us
Chef or how to make computers do the work for us
 
Replacing Oracle with MongoDB for a templating application at the Bavarian go...
Replacing Oracle with MongoDB for a templating application at the Bavarian go...Replacing Oracle with MongoDB for a templating application at the Bavarian go...
Replacing Oracle with MongoDB for a templating application at the Bavarian go...
 
Rails on Oracle 2011
Rails on Oracle 2011Rails on Oracle 2011
Rails on Oracle 2011
 
Consuming REST services with ActiveResource
Consuming REST services with ActiveResourceConsuming REST services with ActiveResource
Consuming REST services with ActiveResource
 
Chef 0.8, Knife and Amazon EC2
Chef 0.8, Knife and Amazon EC2Chef 0.8, Knife and Amazon EC2
Chef 0.8, Knife and Amazon EC2
 
KubeCon EU 2016: Templatized Application Configuration on OpenShift and Kuber...
KubeCon EU 2016: Templatized Application Configuration on OpenShift and Kuber...KubeCon EU 2016: Templatized Application Configuration on OpenShift and Kuber...
KubeCon EU 2016: Templatized Application Configuration on OpenShift and Kuber...
 
Writing Redis in Python with asyncio
Writing Redis in Python with asyncioWriting Redis in Python with asyncio
Writing Redis in Python with asyncio
 

Plus de Rick Copeland

Real-Time Python Web: Gevent and Socket.io
Real-Time Python Web: Gevent and Socket.ioReal-Time Python Web: Gevent and Socket.io
Real-Time Python Web: Gevent and Socket.io
Rick Copeland
 

Plus de Rick Copeland (11)

Python Functions (PyAtl Beginners Night)
Python Functions (PyAtl Beginners Night)Python Functions (PyAtl Beginners Night)
Python Functions (PyAtl Beginners Night)
 
Schema Design at Scale
Schema Design at ScaleSchema Design at Scale
Schema Design at Scale
 
Building Your First MongoDB Application
Building Your First MongoDB ApplicationBuilding Your First MongoDB Application
Building Your First MongoDB Application
 
Rapid and Scalable Development with MongoDB, PyMongo, and Ming
Rapid and Scalable Development with MongoDB, PyMongo, and MingRapid and Scalable Development with MongoDB, PyMongo, and Ming
Rapid and Scalable Development with MongoDB, PyMongo, and Ming
 
Scaling with MongoDB
Scaling with MongoDBScaling with MongoDB
Scaling with MongoDB
 
Real-Time Python Web: Gevent and Socket.io
Real-Time Python Web: Gevent and Socket.ioReal-Time Python Web: Gevent and Socket.io
Real-Time Python Web: Gevent and Socket.io
 
Rapid and Scalable Development with MongoDB, PyMongo, and Ming
Rapid and Scalable Development with MongoDB, PyMongo, and MingRapid and Scalable Development with MongoDB, PyMongo, and Ming
Rapid and Scalable Development with MongoDB, PyMongo, and Ming
 
Realtime Analytics Using MongoDB, Python, Gevent, and ZeroMQ
Realtime Analytics Using MongoDB, Python, Gevent, and ZeroMQRealtime Analytics Using MongoDB, Python, Gevent, and ZeroMQ
Realtime Analytics Using MongoDB, Python, Gevent, and ZeroMQ
 
Rapid, Scalable Web Development with MongoDB, Ming, and Python
Rapid, Scalable Web Development with MongoDB, Ming, and PythonRapid, Scalable Web Development with MongoDB, Ming, and Python
Rapid, Scalable Web Development with MongoDB, Ming, and Python
 
Allura - an Open Source MongoDB Based Document Oriented SourceForge
Allura - an Open Source MongoDB Based Document Oriented SourceForgeAllura - an Open Source MongoDB Based Document Oriented SourceForge
Allura - an Open Source MongoDB Based Document Oriented SourceForge
 
MongoATL: How Sourceforge is Using MongoDB
MongoATL: How Sourceforge is Using MongoDBMongoATL: How Sourceforge is Using MongoDB
MongoATL: How Sourceforge is Using MongoDB
 

Dernier

Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
Joaquim Jorge
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
vu2urc
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
Enterprise Knowledge
 

Dernier (20)

The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 
A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slides
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed texts
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)
 
Advantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your BusinessAdvantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your Business
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonets
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 

Chef on MongoDB and Pyramid

  • 2. Infrastructure as Code  Resources & Providers  Cookbooks, Recipes, Clients, and Nodes
  • 3. CouchDB Solr SolrIndexer Chef Server RabbitMQ RabbitMQ RabbitMQ (API) HTTP REST API Chef Server knife chef-client (Web UI)
  • 4. Build, register, and authenticate the node Synchronize cookbooks Build resource collection (run the recipes in order) Configure node (“converge”) Run notification handlers
  • 5. CouchDB Solr Ruby SolrIndexer Chef Server RabbitMQ RabbitMQ RabbitMQ (API) Ruby Ruby HTTP REST API Chef Server knife chef-client (Web UI)
  • 6. Chef assumes a bootstrapped node exists  Chef doesn’t keep release notes  Code and infrastructure are versioned differently  Solution: Web app to manage deployments & generate release notes
  • 7. MonQ MongoDB SolrIndexer Python Chef Server (API + web) Solr Ruby HTTP REST API knife chef-client
  • 8. Reduce # of processes & technologies  Don’t know Ruby well  Keep private keys out of the system  Integrate with existing authentication  Performance
  • 9. /clients /nodes /data /environments /roles /sandboxes /cookbooks /search
  • 10. Mostly JSON  almost BSON  References to Ruby files stored separately { "name": "allura-0.0.1”,… "json_class": "Chef::CookbookVersion", Ruby files stored on S3 "attributes": [ { "name": "default.rb", "url": "https://s3.amazonaws.com/opscode-platform-production-data/… "checksum": "749a3a328d6c47a32d134b336183981f", "path": "attributes/default.rb", "specificity": "default”…
  • 11. MongoDBValidator role = collection( 'chef.role', doc_session, Field('_id', S.ObjectId()), Field('account_id', S.ObjectId(if_missing=None)), Shorthand with Field('name', str), Python Types Field('description', str), Field('default_attributes', str), Field('override_attributes', str), Field('run_list', [ str ] ), Field('env_run_lists', { str: [ str ]}), Index('account_id', 'name', unique=True)) Embedded Index Definitions Documents
  • 12. classRole(ModelBase): Models know where they live def__name__(self): returnself.name Models can be def__json__(self): turned into dict (to returndict( be JSONified) chef_type='role', json_class='Chef::Role', … default_attributes=loads(self.default_attributes), Models can be …) updated from dict defupdate(self, d): self.name = d['name'] … self.default_attributes = dumps(d['default_attributes']) self.override_attributes = dumps(d['override_attributes']) …
  • 14. Find resource  /foo/bar/bazRoot()[‘foo’][‘bar’][‘baz’]  (Resource, method)  view  @view_config(context=Resource, request_method=‘GET’, …)  Authorization  @view_config(…, permission=‘read’, …)  Rendering  @view_config(…, renderer=‘json’)
  • 15. classResourceCollection(object): __name__ = None Check auth __model__ = None key_property='name’ defallow_access(self, client, permission): return permission == 'read'orclient.admin Traverse to find sub-objects def__getitem__(self, name): obj = self.account.get_object( self.__model__, **{ self.key_property: name }) ifobjisNone: raiseexc.HTTPNotFound() obj.__parent__ = self returnobj
  • 16. @view_config(context=Roles, renderer='json', Resources can be request_method='GET’, permission='read') located deflist_roles(context, request): returndict( (n.name, request.resource_url(n)) fornincontext.find()) Convert and @view_config(context=Roles, renderer='json', validate JSON request_method='POST’,permission='create') input defcreate_role(context, request): n = context.new_object() value = V.RoleSchema().to_python( request.json, None) n.update(value) …
  • 17. Don’t trust the docs  Don’t trust the docs ▪ Don’t trust the docs  Use fat models  Framework support for REST & JSON  You’re gonna have to learn some Ruby anyway  JSON != BSON
  • 18. Port from homegrown framework to Pyramid  Better test coverage  Search support (SOLR / ElasticSearch)  More testing with real-world deployments  Finalize integration with deployment manager

Notes de l'éditeur

  1. Keep your infrastructure definitions in source controlResources = users, packages, services,files, etc. Providers = How you build a resource on a particular platformCookbook = Collection of resources, providers, templates, libraries, and filesRecipe = Ruby script defining the configuration of some resourcesClient = anyone talking to the chef serverNode = a machine instance managed by chef
  2. “url” field Opscode stores everything on S3, I store it all in GridFS
  3. Note the ‘loads’  there IS valid JSON that is not a valid BSON doc for a collection. Dotted key names, for example.