A cookbook store compatible with berkshelf API.
Currently it is a simple webservice :
- POST /v1/cookbooks
- cookbook param contains tgz
- GET /v1/universe
- this is berkshelf API
- GET /v1/cookbooks/$Name/$Version/$Name-$Version.tgz
- this is how berkshelf gets the cookbook
Storage is a simple directory tree (easy to backup)
- It works, basicly
- It's still a work in progress
- API is not stable
- 0.3.0 introduce an upload api modification : no more name and version in path
It is my first ruby project, any advise is welcome :)
- Upload API
- Syslog logging
Why would I need this ?
If you have private cookbooks or a validation process for public cookboks, you need an internal storage.
If you use chef-solo, knife-solo and/or more than one chef-server, you'll need a central catalog of your cookbooks.
Yes there is berkshelf-api, but it needs a chef server :
- A litle overkill if you do no plan to really use it.
- not a uniform service
- upload via chef
- read via berkshelf
gem install berkshelf-store
Launch the deamon
Usage: berkshelf-store [options] -D, --datadir DIRECTORY Data directory (default: ./datadir) -T, --tmpdir DIRECTORY Tmp directory (default: ./tmpdir) -b, --bind IP bind IP (default: 127.0.0.1) -p, --port PORT port to listen on (default: 80) -l, --logger TYPE file, syslog, stderr (default: syslog) -L, --logger-conf TYPE file: filename, syslog: program.facility, stderr n/a (default: berkshelf-store.daemon)
berkshelf-store -D /var/lib/berkshelf-store -T /var/tmp/berkshelf-store --bind 0.0.0.0 -l stderr
upload some cookbooks
bash style :
curl -F [email protected]/path/to/the/cookbook.tgz http://localhost/v1/cookbooks #or if you have a cookbook_dir : tar cvzf - cookbook_dir | curl -F [email protected] http://localhost/v1/cookbooks
or by UI:
use it with berkshelf
in the berkfile:
source "http://localhost/v1" cookbook "cookbookname"
Explode available cookbooks dy ui
- more Comments and tests
- ACL (limit uploads by cookbook/users/groups)
- cli (knife or berks plugin) for uploading
- multi-tenancy ?
- clusterized/cloudified backend (mongo, S3, whatelse ?)