Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Sprinkle

 Sprinkle

Introducing Sprinkle, the software provisioning tool, as presented to Melbourne Ruby group, Australia, July 2008.

Avatar for Marcus Crafter

Marcus Crafter

November 02, 2011
Tweet

Other Decks in Technology

Transcript

  1. Automated solution, 1 slice now, N later Flexible & orthogonal

    installers eg. rails/gems, ruby/source, mysql/apt... etc Well spec’d, smart & flexible tool Utilized a declarative Ruby domain specific language
  2. Task based Provide a set of commands to be run

    remotely Easier to build, but you have to provide the commands State based Describes the final state, tool determines the commands to run More complex knowledge to build, can do things like self heal, etc, often requires a smart agent on the remote system Tool Designs
  3. Sprinkle Script Script contains 3 declarative sections Packages The world

    as we know it, relationships, installers Policies Associates groups of packages to roles Deployment Settings Command delivery and defaults
  4. Packages package :ruby do description 'Ruby Virtual Machine' version '1.8.6'

    source "ftp://ftp.ruby-lang.org/pub/ruby/1.8/ruby-#{version}-p111.tar.gz" requires :ruby_dependencies end package :rails do description 'Ruby on Rails' gem 'rails' version '2.1.0' end
  5. package :apache, :provides => :webserver do description 'Apache 2 HTTP

    Server' version '2.2.6' source "http://dist.apache.org/httpd/httpd-#{version}.tar.bz2" do enable %w( mods-shared=all proxy proxy-balancer proxy-http rewrite cache headers ssl deflate so ) prefix "/opt/local/apache2-#{version}" post :install, 'install -m 755 support/apachectl /etc/init.d/apache2', 'update-rc.d -f apache2 defaults' end requires :apache_dependencies end
  6. Policies policy :rails, :roles => :app do requires :rails, :version

    => '2.1.0' requires :appserver requires :database requires :webserver requires :search end
  7. Deployment deployment do # mechanism for deployment delivery :capistrano do

    recipes 'deploy' end # source based package installer defaults source do prefix '/usr/local' archives '/usr/local/sources' builds '/usr/local/build' end end
  8. Powder Cloud $> sprinkle -c -t -s rails.rb --> Cloud

    hierarchy for policy rails Policy rails requires package rails Package rails requires rubygems Package rubygems requires build_essential Package rubygems requires ruby Package ruby requires build_essential Package ruby requires ruby_dependencies Policy rails requires package appserver Selecting mongrel_cluster for virtual package appserver Package mongrel_cluster requires rubygems Package rubygems requires build_essential Package rubygems requires ruby Package ruby requires build_essential Package ruby requires ruby_dependencies Package mongrel_cluster requires mongrel Package mongrel requires rubygems Package rubygems requires build_essential Package rubygems requires ruby Package ruby requires build_essential Package ruby requires ruby_dependencies
  9. Normalized Order --> Normalized installation order for all packages: build_essential,

    ruby_dependencies, ruby, rubygems, rails, mongrel, mongrel_cluster, mysql, apache_dependencies, apache, mysql_dev, sphinx
  10. Installing --> Installing build_essential for roles: app --> Installing ruby_dependencies

    for roles: app --> Installing ruby for roles: app --> Installing rubygems for roles: app --> Installing rails for roles: app --> Installing mongrel for roles: app --> Installing mongrel_cluster for roles: app --> Installing mysql for roles: app --> Installing apache_dependencies for roles: app --> Installing apache for roles: app --> Installing mysql_dev for roles: app --> Installing sphinx for roles: app --> Installing git_dependencies for roles: app --> Installing git for roles: app
  11. Summary Support arbitrary packages, installers, transports, via a Ruby DSL

    Aim is to have a simple tool, and define a nice, elegant language for software installation Flexibility & extensibility, while having mundane decisions done for you Used by several other projects, spec coverage is high