diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..77cbe8b --- /dev/null +++ b/.gitignore @@ -0,0 +1,10 @@ +.vagrant +Berksfile.lock +Gemfile.lock +*~ +*# +.#* +\#*# +.*.sw[a-z] +*.un~ +/cookbooks diff --git a/Berksfile b/Berksfile new file mode 100644 index 0000000..c4bb297 --- /dev/null +++ b/Berksfile @@ -0,0 +1,3 @@ +site :opscode + +metadata diff --git a/Gemfile b/Gemfile new file mode 100644 index 0000000..f1c74c0 --- /dev/null +++ b/Gemfile @@ -0,0 +1,5 @@ +source :rubygems + +gem 'berkshelf' +gem 'thor-foodcritic' +gem 'vagrant', '~> 1.0.5' diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..49e9269 --- /dev/null +++ b/LICENSE @@ -0,0 +1,3 @@ +Copyright (C) 2013 YOUR_NAME + +All rights reserved - Do Not Redistribute diff --git a/README.md b/README.md new file mode 100644 index 0000000..ce3092d --- /dev/null +++ b/README.md @@ -0,0 +1,13 @@ +# crystalline cookbook + +# Requirements + +# Usage + +# Attributes + +# Recipes + +# Author + +Author:: YOUR_NAME () diff --git a/Thorfile b/Thorfile new file mode 100644 index 0000000..a180240 --- /dev/null +++ b/Thorfile @@ -0,0 +1,6 @@ +# encoding: utf-8 + +require 'bundler' +require 'bundler/setup' +require 'thor/foodcritic' +require 'berkshelf/thor' diff --git a/Vagrantfile b/Vagrantfile new file mode 100644 index 0000000..3c3b583 --- /dev/null +++ b/Vagrantfile @@ -0,0 +1,65 @@ +require 'berkshelf/vagrant' + +Vagrant::Config.run do |config| + # All Vagrant configuration is done here. The most common configuration + # options are documented and commented below. For a complete reference, + # please see the online documentation at vagrantup.com. + + # The path to the Berksfile to use with Vagrant Berkshelf + # config.berkshelf.berksfile_path = "./Berksfile" + + # An array of symbols representing groups of cookbook described in the Vagrantfile + # to skip installing and copying to Vagrant's shelf. + # config.berkshelf.only = [] + + # An array of symbols representing groups of cookbook described in the Vagrantfile + # to skip installing and copying to Vagrant's shelf. + # config.berkshelf.except = [] + + config.vm.host_name = "crystalline-berkshelf" + +# config.vm.box = "Berkshelf-CentOS-6.3-x86_64-minimal" +# config.vm.box_url = "https://dl.dropbox.com/u/31081437/Berkshelf-CentOS-6.3-x86_64-minimal.box" + config.vm.box = "lucid32" + + # Boot with a GUI so you can see the screen. (Default is headless) + # config.vm.boot_mode = :gui + + # Assign this VM to a host-only network IP, allowing you to access it + # via the IP. Host-only networks can talk to the host machine as well as + # any other machines on the same network, but cannot be accessed (through this + # network interface) by any external networks. + config.vm.network :hostonly, "33.33.33.10" + + # Assign this VM to a bridged network, allowing you to connect directly to a + # network using the host's network device. This makes the VM appear as another + # physical device on your network. + + config.vm.network :bridged + + # Forward a port from the guest to the host, which allows for outside + # computers to access the VM, whereas host only networking does not. + # config.vm.forward_port 80, 8080 + + # Share an additional folder to the guest VM. The first argument is + # an identifier, the second is the path on the guest to mount the + # folder, and the third is the path on the host to the actual folder. + config.vm.share_folder "appdir", "/tmp/vagrant_data", "../crystalline" + + config.ssh.max_tries = 40 + config.ssh.timeout = 120 + + config.vm.provision :chef_solo do |chef| + chef.json = { + :mysql => { + :server_root_password => 'rootpass', + :server_debian_password => 'debpass', + :server_repl_password => 'replpass' + } + } + + chef.run_list = [ + "recipe[crystalline::default]" + ] + end +end diff --git a/attributes/default.rb b/attributes/default.rb new file mode 100644 index 0000000..a33c147 --- /dev/null +++ b/attributes/default.rb @@ -0,0 +1,14 @@ +# +# Cookbook Name:: crystalline +# Recipe:: default +# +# Copyright (C) 2013 Ian Coffey +# +# All rights reserved - Do Not Redistribute +# + +default[:app][:user] = 'crystalline' +default[:app][:group] = 'appgroup' +default[:app][:url] = 'git://github.com/iancoffey/crystalline' +default[:app][:revision] = 'HEAD' +default[:app][:local_config][:file] = '' diff --git a/chefignore b/chefignore new file mode 100644 index 0000000..a6de142 --- /dev/null +++ b/chefignore @@ -0,0 +1,96 @@ +# Put files/directories that should be ignored in this file when uploading +# or sharing to the community site. +# Lines that start with '# ' are comments. + +# OS generated files # +###################### +.DS_Store +Icon? +nohup.out +ehthumbs.db +Thumbs.db + +# SASS # +######## +.sass-cache + +# EDITORS # +########### +\#* +.#* +*~ +*.sw[a-z] +*.bak +REVISION +TAGS* +tmtags +*_flymake.* +*_flymake +*.tmproj +.project +.settings +mkmf.log + +## COMPILED ## +############## +a.out +*.o +*.pyc +*.so +*.com +*.class +*.dll +*.exe +*/rdoc/ + +# Testing # +########### +.watchr +.rspec +spec/* +spec/fixtures/* +test/* +features/* +Guardfile +Procfile + +# SCM # +####### +.git +*/.git +.gitignore +.gitmodules +.gitconfig +.gitattributes +.svn +*/.bzr/* +*/.hg/* +*/.svn/* + +# Berkshelf # +############# +Berksfile +Berksfile.lock +cookbooks/* +tmp + +# Cookbooks # +############# +CONTRIBUTING +CHANGELOG* + +# Strainer # +############ +Colanderfile +Strainerfile +.colander +.strainer + +# Vagrant # +########### +.vagrant +Vagrantfile + +# Travis # +########## +.travis.yml diff --git a/metadata.rb b/metadata.rb new file mode 100644 index 0000000..18d30a0 --- /dev/null +++ b/metadata.rb @@ -0,0 +1,12 @@ +name "crystalline" +maintainer "Ian Coffey" +maintainer_email "ian.coffey@gmail.com" +license "BSD" +description "Installs/Configures crystalline" +long_description IO.read(File.join(File.dirname(__FILE__), 'README.md')) +version "0.1.0" + +depends "artifact", "~> 0.10.7" +depends "python", "~> 1.2.0" +depends "couchdb", "~> 2.1.0" +depends "git", "~> 2.1.4" diff --git a/recipes/default.rb b/recipes/default.rb new file mode 100644 index 0000000..fa57fe9 --- /dev/null +++ b/recipes/default.rb @@ -0,0 +1,57 @@ +# +# Cookbook Name:: crystalline +# Recipe:: default +# +# Copyright (C) 2013 Ian Coffey +# +# All rights reserved - Do Not Redistribute +# + +include_recipe "python" +include_recipe "couchdb" +include_recipe "git" + +python_mods = %w{ flask CouchDB configobj Flask-CouchDBKit } + +common_tools = %w{ vim curl wget } + +ENV['CRYSTALLINE_SETTINGS'] = node[:app][:config] + +group node[:app][:group] + +user node[:app][:user] do + system true + shell "/bin/bash" +end + +python_mods.each do |mod| + python_pip mod do + action :install + end +end + +common_tools.each do |tool| + package tool do + action :install + end +end + +directory "/opt/crystalline/shared" do + owner node[:app][:user] + group node[:app][:group] + recursive true +end + +deploy "/opt/crystalline" do + repo node[:app][:url] + revision node[:app][:revision] + user node[:app][:user] + group node[:app][:group] + enable_submodules true + action :deploy + restart_command "touch tmp/restart.txt" + scm_provider Chef::Provider::Git + symlink_before_migrate({}) +end + +