Chef cookbook for installing Continuum Analytic's Anaconda: "completely free Python distribution for large-scale data processing, predictive analytics, and scientific computing".
This also serves as a live example of the most up-to-date best practices for writing, maintaining, and testing Chef cookbooks:
- Berkshelf 3 for dependency resolution
- Vagrant for development
- Chefspec for rapid testing
- Test Kitchen for comprehensive testing across multiple platforms, with tests written in serverspec
- Foodcritic for style checking
This repo has only been tested with RVM; YMMV with other installation methods (rbenv, chef-dk, etc).
- Berkshelf 3.1.3
- Chefspec 4.0.0
- Test Kitchen 1.2.1
- Foodcritic 4.0.0
- Vagrant 1.6+
- vagrant-omnibus
- vagrant-berkshelf: note that
>= 2.0.1
is required
It sounds like Chef-DK is the new recommended installation path, but I have not had a good experience with it (as of 0.1.0-1). Again, YMMV.
The Vagrantfile is written to get you an Anaconda environment with minimal effort:
$> vagrant up --provision
...
$> vagrant ssh
$vagrant> export PATH=/opt/anaconda/2.0.1/bin:${PATH}
$vagrant> conda --version
conda 3.5.5
To use it in a cookbook:
include_recipe 'anaconda::default'
The main recipe is anaconda::default
. Include it in your runlist, and it will
install the package as well as any necessary dependencies.
The following are user-configurable attributes. Check attributes/default.rb for default values.
anaconda
version
: the version to installflavor
: eitherx86
(32-bit) orx86_64
(64-bit)install_root
: the parent directory of all anaconda installs. note that individual installs go into#{install_root}/#{version}
accept_license
: must be explicitly set to the stringyes
; any other value will reject the license.owner
: the user who owns the installgroup
: the group who owns the install
Include this to have a source-me.sh
added to ${HOME}
which you can source
on login. Useful for development.
$> vagrant ssh
$vagrant> source source-me.sh
$vagrant> which conda
/opt/anaconda/2.0.1/bin/conda
Run the full test suite:
# this will take a really long time
$> script/cibuild
...
# check the final result; bash return codes: 0 is good, anything else is not
$> echo $?
Run just the chefspecs:
$> rspec
Run just the test kitchen serverspec integration tests:
# this is what takes so long: every platform and version is fully built in vagrant
$> kitchen verify
Check the style with Foodcritic:
$> foodcritic
Standard stuff:
- master is the active version in development
- releases are made with
Github, and
git tag
'ed
Issues should be opened in the Github issue tracker
- autodetect 64-bit versus 32
- (TODO does it matter? who uses it?) populate metadata.rb:
suggests
,supports
, etc - add a pre-provision for kitchen tests to avoid redownloading the installer on every test (really slows down the tests)
- figure out how to publish onto http://community.opscode.com/; the documentation is unbelievably bad
Author:: Matt Chu ([email protected])