solid 0.1.6.rc3 → 0.1.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/Gemfile ADDED
@@ -0,0 +1,5 @@
1
+ source :gemcutter
2
+
3
+ gem "net-ssh"
4
+ gem "crack"
5
+ gem "json_pure"
@@ -0,0 +1,89 @@
1
+ # solid
2
+
3
+ Version: 0.1.6.beta2
4
+
5
+ master $ solid
6
+
7
+ **** Welcome to Solid ******
8
+ **** Version 0.1.6.beta2 ****
9
+ **** json config file required ****
10
+
11
+ master $
12
+
13
+
14
+ Solid is a CLI that uses ssh to remote into your servers and run chef-solo.
15
+
16
+ Solid uses Chef 9.8 and Chef-Solo to build servers remotely. Its goal is to be very easy to use. Chef-Solo is a command-line application that can execute the chef recipes once installed on the server. Chef-Solo has to be executed on the server node, but we want to execute it remotely. So "Solid" uses the Net::SSH library to connect securely and run chef-solo. It also checks to see if chef-solo is installed, and if it is not, it installs chef. Solid takes one parameter, a path to a configuration json file. This file contains all the attributes you would like to pass to chef-solo, plus some additional attributes that instruct Solid on how to connect to your server nodes, and the location of your cookbooks.
17
+
18
+ solid configuration.json
19
+
20
+ # configuration.json
21
+
22
+ {
23
+ "servers": ["server1","server2"],
24
+ "ssh-auth": "key",
25
+ "run_list": ["role[name]"],
26
+ "user": "[USER]",
27
+ "group": "[GROUP]"
28
+ }
29
+
30
+
31
+
32
+ ## Requirements
33
+
34
+ * Ruby
35
+ * RubyGems
36
+ * net/ssh
37
+
38
+ ## Install
39
+
40
+ gem install solid
41
+
42
+ ## Download Source
43
+
44
+ http://github.com/jackhq/solid
45
+
46
+
47
+ ## What is a dna.json file?
48
+
49
+ It is a file that contains instructions for chef on how to setup and configure your servers, and applications. To learn more go to http://opscode.com
50
+
51
+ {
52
+ "servers": ["server1","server2"],
53
+ "ssh-auth": "key",
54
+ "run_list": ["role[name]"],
55
+ "user": "[USER]",
56
+ "group": "[GROUP]"
57
+ }
58
+
59
+ ## How to use
60
+
61
+ * Create your dna.json file
62
+
63
+ * Make sure it has the following root attributes:
64
+
65
+ * servers - array of servers
66
+ * ssh-auth - (key|pwd) - type ssh authentication
67
+ * key - if ssh authentication is key based
68
+ * password - if ssh authentication is pwd based
69
+ * port
70
+
71
+ * Execute
72
+
73
+ solid dna.json
74
+
75
+
76
+
77
+ ## Note on Patches/Pull Requests
78
+
79
+ * Fork the project.
80
+ * Make your feature addition or bug fix.
81
+ * Add tests for it. This is important so I don't break it in a
82
+ future version unintentionally.
83
+ * Commit, do not mess with rakefile, version, or history.
84
+ (if you want to have your own version, that is fine but bump version in a commit by itself I can ignore when I pull)
85
+ * Send me a pull request. Bonus points for topic branches.
86
+
87
+ == Copyright
88
+
89
+ Copyright (c) 2010 Thing-3. See LICENSE for details.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.6.rc3
1
+ 0.1.6
data/bin/solid CHANGED
@@ -6,10 +6,14 @@ require 'fileutils'
6
6
  require File.dirname(__FILE__) + '/../lib/solid'
7
7
 
8
8
  args = ARGV.dup
9
-
10
- #puts args.first
11
- if args.first == 'logs'
12
- Solid::Commands.logs
9
+ if args.length > 0
10
+ Solid::Commands.new(args[0]) { run_chef }
13
11
  else
14
- Solid::Commands.send(args.first, args[1])
15
- end
12
+ puts <<-MSG
13
+
14
+ **** Welcome to Solid ******
15
+ **** Version 0.1.6.beta2 ****
16
+ **** json config file required ****
17
+
18
+ MSG
19
+ end
@@ -1,8 +1,9 @@
1
1
  require 'net/ssh'
2
2
  require 'crack'
3
3
  require 'json/pure'
4
-
5
- require File.dirname(__FILE__) + '/solid/base'
6
- require File.dirname(__FILE__) + '/solid/chef_solo'
4
+ require File.dirname(__FILE__) + '/solid/constants'
5
+ require File.dirname(__FILE__) + '/solid/errors'
6
+ require File.dirname(__FILE__) + '/solid/json'
7
+ require File.dirname(__FILE__) + '/solid/ssh'
7
8
  require File.dirname(__FILE__) + '/solid/chef'
8
9
  require File.dirname(__FILE__) + '/solid/commands'
@@ -1,81 +1,88 @@
1
1
  module Solid
2
2
 
3
- class Chef < Solid::Base
4
- APT_GET = %w{ ruby ruby1.8-dev libopenssl-ruby1.8 rdoc ri irb build-essential git-core xfsprogs }
5
- RUBYGEMS_DIR = 'rubygems-1.3.7'
6
- RUBYGEMS_FILE = "#{RUBYGEMS_DIR}.tgz"
7
- RUBYGEMS_URL = "http://rubyforge.org/frs/download.php/70696/#{RUBYGEMS_FILE}"
3
+ class Chef
4
+ include Solid::Constants
5
+ include Solid::SSH
8
6
 
9
- def initialize(server, user, options = {})
7
+ def initialize(server, dna, logger=Logger.new(STDOUT), &block)
10
8
  @server = server
11
- @user = user
12
- @options = options
9
+ @dna = dna
10
+ @logger = logger
11
+ @level = "info"
12
+ @user = @dna["user"]
13
+ @cookbooks = @dna["cookbooks"]
14
+ self.instance_eval(&block) if block_given?
13
15
  end
14
16
 
15
17
  def install
16
18
  unless installed?
17
- Net::SSH.start(@server, @user, @options) do |ssh|
18
- puts "installing..."
19
- install_chef_prereqs ssh
20
- install_chef_gems ssh
21
- build_solo_rb ssh
22
- end
19
+ @logger.info "installing..."
20
+ install_chef_prereqs
21
+ install_chef_gems
22
+ build_solo_rb
23
23
  end
24
24
  end
25
25
 
26
26
  def installed?
27
27
  result = false
28
- Net::SSH.start(@server, @user, @options) do |ssh|
29
- puts "checking if installed"
28
+ @logger.info "checking if installed"
29
+ Net::SSH.start(@server, @user, self.options) do |ssh|
30
30
  result = ssh.exec!("which chef-solo")
31
31
  end
32
32
  result =~ /chef-solo/
33
33
  end
34
34
 
35
- def solo(dna, cookbooks, sudo=true)
36
- puts @options.inspect
37
- Net::SSH.start(@server, @user, @options) do |ssh|
38
- puts "deploying..."
39
- build_json dna, ssh
40
- run_solo cookbooks, ssh
41
- end
35
+ def run_solo
36
+ @logger.info "deploying..."
37
+ build_json
38
+ run_chef_solo
42
39
  end
43
40
 
44
- private
41
+ protected
42
+
43
+ def options
44
+ o = @dna['ssh-auth'] == 'key' ? { :keys => @dna["key"] } : { :password => @dna["password"] }
45
+ o.merge!(:port => @dna['port']) if @dna['port']
46
+ o
47
+ end
48
+
49
+ private
50
+
45
51
 
46
52
  def sudo_cmd
47
53
  'sudo '
48
54
  end
55
+
49
56
 
50
- def install_chef_prereqs ssh
57
+ def install_chef_prereqs
51
58
  [ sudo_cmd + "apt-get update -y",
52
59
  sudo_cmd + "apt-get install #{APT_GET.join(' ')} -y",
53
60
  "wget #{RUBYGEMS_URL} && tar zxf #{RUBYGEMS_FILE} && cd #{RUBYGEMS_DIR} && sudo ruby setup.rb && sudo ln -sfv /usr/bin/gem1.8 /usr/bin/gem",
54
61
  sudo_cmd + "gem update --system"].each do |line|
55
- ssh.exec! line
62
+ ssh_exec line
56
63
  end
57
64
  end
58
65
 
59
- def install_chef_gems ssh
66
+ def install_chef_gems
60
67
  CHEF_GEMS.each do |gem|
61
- puts ssh.exec! sudo_cmd + %Q{ gem install #{gem[:name]} -v #{gem[:version]} --no-ri --no-rdoc }
68
+ ssh_exec "#{sudo_cmd} gem install #{gem[:name]} -v #{gem[:version]}"
62
69
  end
63
70
  end
64
71
 
65
- def build_solo_rb ssh
72
+ def build_solo_rb
66
73
  ['file_cache_path "/tmp/chef-solo"',
67
74
  'cookbook_path ["/tmp/chef-solo/cookbooks", "/tmp/chef-solo/site-cookbooks"]'].each do |line|
68
- ssh.exec! "echo '#{line}' >> solo.rb"
75
+ ssh_exec "echo '#{line}' >> solo.rb"
69
76
  end
70
77
  end
71
78
 
72
- def build_json dna, ssh
73
- ssh.exec!("echo \"#{dna.to_json.gsub('"','\"')}\" > dna.json")
79
+ def build_json
80
+ ssh_exec "echo \"#{@dna.to_json.gsub('"','\"')}\" > dna.json"
74
81
  end
75
82
 
76
- def run_solo cookbooks, ssh
77
- puts ssh.exec!(sudo_cmd + " chef-solo -c ~/solo.rb -l debug -j dna.json -r #{cookbooks}")
83
+ def run_chef_solo
84
+ ssh_exec sudo_cmd + " chef-solo -c ~/solo.rb -l #{@level} -j dna.json -r #{@cookbooks}"
78
85
  end
79
-
86
+
80
87
  end
81
88
  end
@@ -1,57 +1,28 @@
1
1
  module Solid
2
-
3
- module Commands
4
-
5
- class << self
6
-
7
- def init(dna_file)
8
- chef_solo = ChefSolo.new
9
- chef_solo.install
10
- end
11
-
12
-
13
- def deploy(dna_file)
14
- dna = Crack::JSON.parse(get_dna(dna_file))
15
- dna["servers"].each do |s|
16
- run(s, dna)
17
- end
18
- end
19
-
20
- def rollback(dna_file)
21
- dna = Crack::JSON.parse(get_dna(dna_file))
22
- dna.merge!(:action => 'rollback')
23
- dna["servers"].each do |s|
24
- run(s, dna)
25
- end
26
-
27
- end
2
+ class Commands
3
+ include Solid::Errors
4
+ include Solid::Json
28
5
 
29
- def logs
30
- puts "Comming Soon!"
31
- end
32
-
33
-
34
-
35
-
36
- private
37
-
38
- def run(s, dna)
39
- options = dna['ssh-auth'] == 'key' ? { :keys => dna["key"] } : { :password => dna["password"] }
40
- options.merge!(:port => dna['port']) if dna['port']
41
- chef = Chef.new(s, dna["user"], options)
42
- chef.install
43
- chef.solo dna, dna["cookbooks"]
44
- end
6
+ def initialize with_dna_file, &block
7
+ @dna = parse_dna(with_dna_file)
8
+ validate_dna
9
+ self.instance_eval(&block) if block_given?
10
+ end
45
11
 
46
-
47
- def get_dna(dna_file)
48
- dna = ""
49
- File.open(dna_file, 'r') do |f|
50
- dna = f.read
51
- end
52
- dna
12
+ def run_chef
13
+ @dna["servers"].each do |server|
14
+ run server
53
15
  end
54
-
55
16
  end
17
+
18
+
19
+ private
20
+
21
+ def run server
22
+ Chef.new(server, @dna) do
23
+ install
24
+ run_solo
25
+ end
26
+ end
56
27
  end
57
28
  end
@@ -0,0 +1,30 @@
1
+ module Solid
2
+ module Constants
3
+ APT_GET = %w{ ruby ruby1.8-dev libopenssl-ruby1.8 rdoc ri irb build-essential git-core xfsprogs }
4
+ RUBYGEMS_DIR = 'rubygems-1.3.7'
5
+ RUBYGEMS_FILE = "#{RUBYGEMS_DIR}.tgz"
6
+ RUBYGEMS_URL = "http://rubyforge.org/frs/download.php/70696/#{RUBYGEMS_FILE}"
7
+
8
+ CHEF_GEMS = [
9
+ {:name => 'uuidtools', :version => '2.1.1'},
10
+ {:name => 'highline', :version => '1.6.1'},
11
+ {:name => 'moneta', :version => '0.6.0'},
12
+ {:name => 'extlib', :version => '0.9.15'},
13
+ {:name => 'abstract', :version => '1.0.0'},
14
+ {:name => 'erubis', :version => '2.6.6'},
15
+ {:name => 'json', :version => '1.4.2'},
16
+ {:name => 'bunny', :version => '0.6.0'},
17
+ {:name => 'mime-types', :version => '1.16'},
18
+ {:name => 'rest-client', :version => '1.5.1'},
19
+ {:name => 'systemu', :version => '1.2.0'},
20
+ {:name => 'mixlib-cli', :version => '1.2.0'},
21
+ {:name => 'mixlib-config', :version => '1.1.2'},
22
+ {:name => 'mixlib-log', :version => '1.1.0'},
23
+ {:name => 'mixlib-authentication', :version => '1.1.4'},
24
+ {:name => 'ohai', :version => '0.5.6'},
25
+ {:name => 'chef', :version => '0.9.8'}
26
+ ]
27
+
28
+
29
+ end
30
+ end
@@ -0,0 +1,35 @@
1
+ module Solid
2
+ module Errors
3
+ SERVER_REQUIRED = "Servers Node Required!"
4
+ SSH_AUTH_REQUIRED = "SSH AUTH Node Required! (key or pwd)"
5
+ SSH_KEY_REQUIRED = "SSH Key node required!"
6
+ SSH_PWD_REQUIRED = "SSH Password node required!"
7
+
8
+ private
9
+
10
+ def validate_dna
11
+ validate_dna_server
12
+ validate_ssh_auth
13
+ validate_ssh_key if @dna['ssh-auth'] == 'key'
14
+ validate_ssh_pwd if @dna['ssh-auth'] == 'pwd'
15
+ end
16
+
17
+ def validate_dna_server
18
+ raise SERVER_REQUIRED unless @dna['servers']
19
+ end
20
+
21
+ def validate_ssh_auth
22
+ raise SSH_AUTH_REQUIRED unless @dna['ssh-auth'] =~ /key|pwd/
23
+ end
24
+
25
+ def validate_ssh_key
26
+ raise SSH_KEY_REQUIRED unless @dna['key']
27
+ end
28
+
29
+ def validate_ssh_pwd
30
+ raise SSH_PWD_REQUIRED unless @dna['password']
31
+ end
32
+
33
+ end
34
+
35
+ end
@@ -0,0 +1,13 @@
1
+ module Solid
2
+ module Json
3
+
4
+ private
5
+ def parse_dna(with_file)
6
+ Crack::JSON.parse(read_dna(with_file))
7
+ end
8
+
9
+ def read_dna file
10
+ File.open(file, 'r') { |f| f.read }
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,9 @@
1
+ module Solid
2
+ module SSH
3
+ def ssh_exec command
4
+ Net::SSH.start(@server, @user, options) do |ssh|
5
+ @logger.info ssh.exec! command
6
+ end
7
+ end
8
+ end
9
+ end
@@ -5,51 +5,62 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{solid}
8
- s.version = "0.1.6.rc3"
8
+ s.version = "0.1.6"
9
9
 
10
- s.required_rubygems_version = Gem::Requirement.new("> 1.3.1") if s.respond_to? :required_rubygems_version=
10
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Thing-3"]
12
- s.date = %q{2010-08-10}
12
+ s.date = %q{2010-08-18}
13
13
  s.default_executable = %q{solid}
14
14
  s.description = %q{ssh deployment application}
15
15
  s.email = %q{thing3@jackhq.com}
16
16
  s.executables = ["solid"]
17
17
  s.extra_rdoc_files = [
18
18
  "LICENSE",
19
- "README.rdoc"
19
+ "README.md"
20
20
  ]
21
21
  s.files = [
22
22
  ".document",
23
23
  ".gitignore",
24
+ "Gemfile",
24
25
  "LICENSE",
25
- "README.rdoc",
26
+ "README.md",
26
27
  "Rakefile",
27
28
  "VERSION",
28
29
  "bin/solid",
29
30
  "lib/solid.rb",
30
- "lib/solid/base.rb",
31
31
  "lib/solid/chef.rb",
32
- "lib/solid/chef_solo.rb",
33
32
  "lib/solid/commands.rb",
33
+ "lib/solid/constants.rb",
34
+ "lib/solid/errors.rb",
35
+ "lib/solid/json.rb",
36
+ "lib/solid/ssh.rb",
34
37
  "solid.gemspec",
35
- "test/helper.rb",
36
- "test/test_solid.rb"
38
+ "spec/fixtures/dna.json",
39
+ "spec/fixtures/error.json",
40
+ "spec/fixtures/no_ssh.json",
41
+ "spec/fixtures/no_ssh_keys.json",
42
+ "spec/fixtures/no_ssh_pwd.json",
43
+ "spec/lib/solid/chef_spec.rb",
44
+ "spec/lib/solid/commands_spec.rb",
45
+ "spec/spec.opts",
46
+ "spec/spec_helper.rb"
37
47
  ]
38
48
  s.homepage = %q{http://github.com/jackhq/solid}
39
49
  s.rdoc_options = ["--charset=UTF-8"]
40
50
  s.require_paths = ["lib"]
41
- s.rubygems_version = %q{1.3.6}
51
+ s.rubygems_version = %q{1.3.7}
42
52
  s.summary = %q{ssh deployment application}
43
53
  s.test_files = [
44
- "test/helper.rb",
45
- "test/test_solid.rb"
54
+ "spec/lib/solid/chef_spec.rb",
55
+ "spec/lib/solid/commands_spec.rb",
56
+ "spec/spec_helper.rb"
46
57
  ]
47
58
 
48
59
  if s.respond_to? :specification_version then
49
60
  current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
50
61
  s.specification_version = 3
51
62
 
52
- if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
63
+ if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
53
64
  s.add_runtime_dependency(%q<net-ssh>, [">= 0"])
54
65
  s.add_runtime_dependency(%q<crack>, [">= 0"])
55
66
  s.add_runtime_dependency(%q<json_pure>, [">= 0"])
@@ -0,0 +1,7 @@
1
+ {
2
+ 'servers': [ 'ec2-184-73-32-12.compute-1.amazonaws.com'],
3
+ 'ssh-auth': 'key',
4
+ 'user': 'ubuntu',
5
+ 'group': 'ubuntu',
6
+ 'key': "~/.ec2/ec2-dev"
7
+ }
@@ -0,0 +1,4 @@
1
+ {
2
+ 'user': 'ubuntu',
3
+ 'group': 'ubuntu'
4
+ }
@@ -0,0 +1,6 @@
1
+ {
2
+ 'servers': [ 'ec2-184-73-32-12.compute-1.amazonaws.com'],
3
+ 'user': 'ubuntu',
4
+ 'group': 'ubuntu',
5
+ 'key': "~/.ec2/ec2-dev"
6
+ }
@@ -0,0 +1,6 @@
1
+ {
2
+ 'servers': [ 'ec2-184-73-32-12.compute-1.amazonaws.com'],
3
+ 'ssh-auth': 'key',
4
+ 'user': 'ubuntu',
5
+ 'group': 'ubuntu'
6
+ }
@@ -0,0 +1,6 @@
1
+ {
2
+ 'servers': [ 'ec2-184-73-32-12.compute-1.amazonaws.com'],
3
+ 'ssh-auth': 'pwd',
4
+ 'user': 'ubuntu',
5
+ 'group': 'ubuntu'
6
+ }
@@ -0,0 +1,51 @@
1
+ require File.dirname(__FILE__) + '/../../spec_helper'
2
+
3
+ describe "Solid::Chef" do
4
+ before(:each) do
5
+ @server = 'ec2-184-73-32-12.compute-1.amazonaws.com'
6
+ @with_dna = Crack::JSON.parse(<<-JSON
7
+ {
8
+ 'servers': [ 'ec2-184-73-32-12.compute-1.amazonaws.com'],
9
+ 'ssh-auth': 'key',
10
+ 'user': 'ubuntu',
11
+ 'group': 'ubuntu',
12
+ 'key': "~/.ec2/ec2-dev"
13
+ }
14
+ JSON
15
+ )
16
+ end
17
+
18
+ it "should check if chef is installed" do
19
+ ssh = mock("Net::SSH")
20
+ ssh.stub!(:exec!).and_return("chef-solo")
21
+ Net::SSH.stub!(:start).and_return(ssh)
22
+
23
+ Solid::Chef.new(@server, @with_dna) do
24
+ print installed?
25
+ end
26
+ end
27
+
28
+ it "should install chef on node" do
29
+ ssh = mock("Net::SSH")
30
+ ssh.stub!(:exec!).and_return("chef-solo")
31
+ Net::SSH.stub!(:start).and_return(ssh)
32
+
33
+ Solid::Chef.new(@server, @with_dna) do
34
+ print install
35
+ end
36
+
37
+ end
38
+
39
+ it "should chef solo on node" do
40
+ ssh = mock("Net::SSH")
41
+ ssh.stub!(:exec!).and_return("chef-solo")
42
+ Net::SSH.stub!(:start).and_return(ssh)
43
+
44
+ Solid::Chef.new(@server, @with_dna) do
45
+ print run_solo
46
+ end
47
+
48
+ end
49
+
50
+
51
+ end
@@ -0,0 +1,40 @@
1
+ require File.dirname(__FILE__) + '/../../spec_helper'
2
+
3
+ describe "Solid::Command" do
4
+ before(:each) do
5
+ Solid::Chef.stub!(:new).and_return(true)
6
+ end
7
+
8
+ it "should run chef" do
9
+ file = File.dirname(__FILE__) + '/../../fixtures/dna.json'
10
+ Solid::Commands.new(file) { run_chef }
11
+ end
12
+
13
+ context "should raise exception if missing" do
14
+
15
+ it "required server attribute" do
16
+ test_validate 'error', Solid::Errors::SERVER_REQUIRED
17
+ end
18
+
19
+ it "required ssh_auth attribute" do
20
+ test_validate 'no_ssh', Solid::Errors::SSH_AUTH_REQUIRED
21
+ end
22
+
23
+ it "required ssh_key attribute" do
24
+ test_validate 'no_ssh_keys', Solid::Errors::SSH_KEY_REQUIRED
25
+ end
26
+
27
+ it "required ssh_pwd attribute" do
28
+ test_validate 'no_ssh_pwd', Solid::Errors::SSH_PWD_REQUIRED
29
+ end
30
+
31
+ def test_validate(file_name, error)
32
+ file = File.dirname(__FILE__) + "/../../fixtures/#{file_name}.json"
33
+ lambda { Solid::Commands.new(file) { run_chef } }.should raise_error(error)
34
+
35
+ end
36
+
37
+ end
38
+
39
+ end
40
+
@@ -0,0 +1,4 @@
1
+ --colour
2
+ --format progress
3
+ --loadby mtime
4
+ --reverse
@@ -0,0 +1,2 @@
1
+ require 'spec'
2
+ require File.dirname(__FILE__) + '/../lib/solid'
metadata CHANGED
@@ -1,13 +1,12 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: solid
3
3
  version: !ruby/object:Gem::Version
4
- prerelease: true
4
+ prerelease: false
5
5
  segments:
6
6
  - 0
7
7
  - 1
8
8
  - 6
9
- - rc3
10
- version: 0.1.6.rc3
9
+ version: 0.1.6
11
10
  platform: ruby
12
11
  authors:
13
12
  - Thing-3
@@ -15,13 +14,14 @@ autorequire:
15
14
  bindir: bin
16
15
  cert_chain: []
17
16
 
18
- date: 2010-08-10 00:00:00 -04:00
17
+ date: 2010-08-18 00:00:00 -04:00
19
18
  default_executable: solid
20
19
  dependencies:
21
20
  - !ruby/object:Gem::Dependency
22
21
  name: net-ssh
23
22
  prerelease: false
24
23
  requirement: &id001 !ruby/object:Gem::Requirement
24
+ none: false
25
25
  requirements:
26
26
  - - ">="
27
27
  - !ruby/object:Gem::Version
@@ -34,6 +34,7 @@ dependencies:
34
34
  name: crack
35
35
  prerelease: false
36
36
  requirement: &id002 !ruby/object:Gem::Requirement
37
+ none: false
37
38
  requirements:
38
39
  - - ">="
39
40
  - !ruby/object:Gem::Version
@@ -46,6 +47,7 @@ dependencies:
46
47
  name: json_pure
47
48
  prerelease: false
48
49
  requirement: &id003 !ruby/object:Gem::Requirement
50
+ none: false
49
51
  requirements:
50
52
  - - ">="
51
53
  - !ruby/object:Gem::Version
@@ -62,23 +64,33 @@ extensions: []
62
64
 
63
65
  extra_rdoc_files:
64
66
  - LICENSE
65
- - README.rdoc
67
+ - README.md
66
68
  files:
67
69
  - .document
68
70
  - .gitignore
71
+ - Gemfile
69
72
  - LICENSE
70
- - README.rdoc
73
+ - README.md
71
74
  - Rakefile
72
75
  - VERSION
73
76
  - bin/solid
74
77
  - lib/solid.rb
75
- - lib/solid/base.rb
76
78
  - lib/solid/chef.rb
77
- - lib/solid/chef_solo.rb
78
79
  - lib/solid/commands.rb
80
+ - lib/solid/constants.rb
81
+ - lib/solid/errors.rb
82
+ - lib/solid/json.rb
83
+ - lib/solid/ssh.rb
79
84
  - solid.gemspec
80
- - test/helper.rb
81
- - test/test_solid.rb
85
+ - spec/fixtures/dna.json
86
+ - spec/fixtures/error.json
87
+ - spec/fixtures/no_ssh.json
88
+ - spec/fixtures/no_ssh_keys.json
89
+ - spec/fixtures/no_ssh_pwd.json
90
+ - spec/lib/solid/chef_spec.rb
91
+ - spec/lib/solid/commands_spec.rb
92
+ - spec/spec.opts
93
+ - spec/spec_helper.rb
82
94
  has_rdoc: true
83
95
  homepage: http://github.com/jackhq/solid
84
96
  licenses: []
@@ -89,6 +101,7 @@ rdoc_options:
89
101
  require_paths:
90
102
  - lib
91
103
  required_ruby_version: !ruby/object:Gem::Requirement
104
+ none: false
92
105
  requirements:
93
106
  - - ">="
94
107
  - !ruby/object:Gem::Version
@@ -96,21 +109,21 @@ required_ruby_version: !ruby/object:Gem::Requirement
96
109
  - 0
97
110
  version: "0"
98
111
  required_rubygems_version: !ruby/object:Gem::Requirement
112
+ none: false
99
113
  requirements:
100
- - - ">"
114
+ - - ">="
101
115
  - !ruby/object:Gem::Version
102
116
  segments:
103
- - 1
104
- - 3
105
- - 1
106
- version: 1.3.1
117
+ - 0
118
+ version: "0"
107
119
  requirements: []
108
120
 
109
121
  rubyforge_project:
110
- rubygems_version: 1.3.6
122
+ rubygems_version: 1.3.7
111
123
  signing_key:
112
124
  specification_version: 3
113
125
  summary: ssh deployment application
114
126
  test_files:
115
- - test/helper.rb
116
- - test/test_solid.rb
127
+ - spec/lib/solid/chef_spec.rb
128
+ - spec/lib/solid/commands_spec.rb
129
+ - spec/spec_helper.rb
@@ -1,67 +0,0 @@
1
- = solid
2
-
3
- An awesome way to deploy with chef!
4
-
5
- == Requirements
6
-
7
- * Ruby
8
- * RubyGems
9
- * net/ssh
10
-
11
- == Install
12
-
13
- gem install solid
14
-
15
- == Download Source
16
-
17
- http://github.com/jackhq/solid
18
-
19
-
20
- == What is it?
21
-
22
- Solid is a command line interface that takes a dna.json file as an argument. It uses this file to establish a ssh connection for each of the application servers specified in the document either by user/key or user/password connections. Then it simply looks for chef-solo, if not available, it installs chef, if available it runs chef-solo, with the dna.json file.
23
-
24
- == What is a dna.json file?
25
-
26
- It is a file that contains instructions for chef on how to setup and configure your servers, and applications. To learn more go to http://opscode.com
27
-
28
- == How to use
29
-
30
- * Create your dna.json file
31
-
32
- * Make sure it has the following root attributes:
33
-
34
- * servers - array of servers
35
- * ssh-auth - (key|pwd) - type ssh authentication
36
- * key - if ssh authentication is key based
37
- * password - if ssh authentication is pwd based
38
- * port
39
-
40
- * Execute
41
-
42
- solid deploy dna.json
43
-
44
- * Rollback
45
-
46
- solid rollback dna.json
47
-
48
- * Logs
49
-
50
- solid logs
51
-
52
-
53
-
54
-
55
- == Note on Patches/Pull Requests
56
-
57
- * Fork the project.
58
- * Make your feature addition or bug fix.
59
- * Add tests for it. This is important so I don't break it in a
60
- future version unintentionally.
61
- * Commit, do not mess with rakefile, version, or history.
62
- (if you want to have your own version, that is fine but bump version in a commit by itself I can ignore when I pull)
63
- * Send me a pull request. Bonus points for topic branches.
64
-
65
- == Copyright
66
-
67
- Copyright (c) 2010 Thing-3. See LICENSE for details.
@@ -1,25 +0,0 @@
1
- module Solid
2
-
3
- class Base
4
- CHEF_GEMS = [
5
- {:name => 'uuidtools', :version => '2.1.1'},
6
- {:name => 'highline', :version => '1.6.1'},
7
- {:name => 'moneta', :version => '0.6.0'},
8
- {:name => 'extlib', :version => '0.9.15'},
9
- {:name => 'erubis', :version => '2.6.6'},
10
- {:name => 'json', :version => '1.4.2'},
11
- {:name => 'bunny', :version => '0.6.0'},
12
- {:name => 'rest-client', :version => '1.5.1'},
13
- {:name => 'systemu', :version => '1.2.0'},
14
- {:name => 'mixlib-authentication', :version => '1.1.4'},
15
- {:name => 'mixlib-log', :version => '1.1.0'},
16
- {:name => 'mixlib-cli', :version => '1.2.0'},
17
- {:name => 'mixlib-config', :version => '1.1.2'},
18
- {:name => 'ohai', :version => '0.5.6'},
19
- {:name => 'chef', :version => '0.9.8'}
20
- ]
21
-
22
-
23
-
24
- end
25
- end
@@ -1,13 +0,0 @@
1
- module Solid
2
-
3
- class ChefSolo < Solid::Base
4
-
5
- def install
6
- CHEF_GEMS.each do |gem|
7
- system "sudo gem install #{gem[:name]} -v #{gem[:version]}"
8
- end
9
- end
10
-
11
- end
12
- end
13
-
@@ -1,10 +0,0 @@
1
- require 'rubygems'
2
- require 'test/unit'
3
- require 'shoulda'
4
-
5
- $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
6
- $LOAD_PATH.unshift(File.dirname(__FILE__))
7
- require 'solid'
8
-
9
- class Test::Unit::TestCase
10
- end
@@ -1,7 +0,0 @@
1
- require 'helper'
2
-
3
- class TestSolid < Test::Unit::TestCase
4
- should "probably rename this file and start testing for real" do
5
- flunk "hey buddy, you should probably rename this file and start testing for real"
6
- end
7
- end