solid 0.1.6.beta2 → 0.1.6.rc1

Sign up to get free protection for your applications and to get access to all the features.
data/README.rdoc ADDED
@@ -0,0 +1,67 @@
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.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.6.beta2
1
+ 0.1.6.rc1
data/bin/solid CHANGED
@@ -6,14 +6,10 @@ require 'fileutils'
6
6
  require File.dirname(__FILE__) + '/../lib/solid'
7
7
 
8
8
  args = ARGV.dup
9
- if args.length > 0
10
- Solid::Commands.new(args[0]) { run_chef }
11
- else
12
- puts <<-MSG
13
-
14
- **** Welcome to Solid ******
15
- **** Version 0.1.6.beta2 ****
16
- **** json config file require ****
17
9
 
18
- MSG
19
- end
10
+ #puts args.first
11
+ if args.first == 'logs'
12
+ Solid::Commands.logs
13
+ else
14
+ Solid::Commands.send(args.first, args[1])
15
+ end
data/lib/solid/base.rb ADDED
@@ -0,0 +1,25 @@
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
data/lib/solid/chef.rb CHANGED
@@ -1,87 +1,81 @@
1
1
  module Solid
2
2
 
3
- class Chef
4
- include Solid::Constants
5
- include Solid::SSH
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}"
6
8
 
7
- def initialize(server, dna, logger=Logger.new(STDOUT), &block)
9
+ def initialize(server, user, options = {})
8
10
  @server = server
9
- @dna = dna
10
- @logger = logger
11
- @user = @dna["user"]
12
- @cookbooks = @dna["cookbooks"]
13
- self.instance_eval(&block) if block_given?
11
+ @user = user
12
+ @options = options
14
13
  end
15
14
 
16
15
  def install
17
16
  unless installed?
18
- @logger.info "installing..."
19
- install_chef_prereqs
20
- install_chef_gems
21
- build_solo_rb
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
22
23
  end
23
24
  end
24
25
 
25
26
  def installed?
26
27
  result = false
27
- @logger.info "checking if installed"
28
- Net::SSH.start(@server, @user, self.options) do |ssh|
28
+ Net::SSH.start(@server, @user, @options) do |ssh|
29
+ puts "checking if installed"
29
30
  result = ssh.exec!("which chef-solo")
30
31
  end
31
32
  result =~ /chef-solo/
32
33
  end
33
34
 
34
- def run_solo
35
- @logger.info "deploying..."
36
- build_json
37
- run_solo
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
38
42
  end
39
43
 
40
- protected
41
-
42
- def options
43
- o = @dna['ssh-auth'] == 'key' ? { :keys => @dna["key"] } : { :password => @dna["password"] }
44
- o.merge!(:port => @dna['port']) if @dna['port']
45
- o
46
- end
47
-
48
- private
49
-
44
+ private
50
45
 
51
46
  def sudo_cmd
52
47
  'sudo '
53
48
  end
54
-
55
49
 
56
- def install_chef_prereqs
50
+ def install_chef_prereqs ssh
57
51
  [ sudo_cmd + "apt-get update -y",
58
52
  sudo_cmd + "apt-get install #{APT_GET.join(' ')} -y",
59
53
  "wget #{RUBYGEMS_URL} && tar zxf #{RUBYGEMS_FILE} && cd #{RUBYGEMS_DIR} && sudo ruby setup.rb && sudo ln -sfv /usr/bin/gem1.8 /usr/bin/gem",
60
54
  sudo_cmd + "gem update --system"].each do |line|
61
- ssh_exec line
55
+ ssh.exec! line
62
56
  end
63
57
  end
64
58
 
65
- def install_chef_gems
59
+ def install_chef_gems ssh
66
60
  CHEF_GEMS.each do |gem|
67
- ssh_exec "#{sudo_cmd} gem install #{gem[:name]} -v #{gem[:version]}"
61
+ puts ssh.exec! sudo_cmd + %Q{ gem install #{gem[:name]} -v #{gem[:version]} --no-ri --no-rdoc }
68
62
  end
69
63
  end
70
64
 
71
- def build_solo_rb
65
+ def build_solo_rb ssh
72
66
  ['file_cache_path "/tmp/chef-solo"',
73
67
  'cookbook_path ["/tmp/chef-solo/cookbooks", "/tmp/chef-solo/site-cookbooks"]'].each do |line|
74
- ssh_exec "echo '#{line}' >> solo.rb"
68
+ ssh.exec! "echo '#{line}' >> solo.rb"
75
69
  end
76
70
  end
77
71
 
78
- def build_json
79
- ssh_exec "echo \"#{@dna.to_json.gsub('"','\"')}\" > dna.json"
72
+ def build_json dna, ssh
73
+ ssh.exec!("echo \"#{dna.to_json.gsub('"','\"')}\" > dna.json")
80
74
  end
81
75
 
82
- def run_solo
83
- ssh_exec sudo_cmd + " chef-solo -c ~/solo.rb -l debug -j dna.json -r #{@cookbooks}"
76
+ def run_solo cookbooks, ssh
77
+ puts ssh.exec!(sudo_cmd + " chef-solo -c ~/solo.rb -l debug -j dna.json -r #{cookbooks}")
84
78
  end
85
-
79
+
86
80
  end
87
81
  end
@@ -0,0 +1,13 @@
1
+ module Solid
2
+
3
+ class ChefSolo < Solid::Base
4
+
5
+ def install
6
+ CHEF_GEMS.each do |gem|
7
+ %x["sudo gem install #{gem[:name]} -v #{gem[:version]}"]
8
+ end
9
+ end
10
+
11
+ end
12
+ end
13
+
@@ -1,28 +1,57 @@
1
1
  module Solid
2
- class Commands
3
- include Solid::Errors
4
- include Solid::Json
2
+
3
+ module Commands
4
+
5
+ class << self
6
+
7
+ def init
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
28
+
29
+ def logs
30
+ puts "Comming Soon!"
31
+ end
32
+
5
33
 
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
11
34
 
12
- def run_chef
13
- @dna["servers"].each do |server|
14
- run server
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"]
15
44
  end
45
+
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
53
+ end
54
+
16
55
  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
27
56
  end
28
57
  end
data/lib/solid.rb CHANGED
@@ -1,9 +1,8 @@
1
1
  require 'net/ssh'
2
2
  require 'crack'
3
3
  require 'json/pure'
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'
4
+
5
+ require File.dirname(__FILE__) + '/solid/base'
6
+ require File.dirname(__FILE__) + '/solid/chef_solo'
8
7
  require File.dirname(__FILE__) + '/solid/chef'
9
8
  require File.dirname(__FILE__) + '/solid/commands'
data/solid.gemspec CHANGED
@@ -5,62 +5,51 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{solid}
8
- s.version = "0.1.6.beta2"
8
+ s.version = "0.1.6.rc1"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new("> 1.3.1") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Thing-3"]
12
- s.date = %q{2010-08-13}
12
+ s.date = %q{2010-08-10}
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.md"
19
+ "README.rdoc"
20
20
  ]
21
21
  s.files = [
22
22
  ".document",
23
23
  ".gitignore",
24
- "Gemfile",
25
24
  "LICENSE",
26
- "README.md",
25
+ "README.rdoc",
27
26
  "Rakefile",
28
27
  "VERSION",
29
28
  "bin/solid",
30
29
  "lib/solid.rb",
30
+ "lib/solid/base.rb",
31
31
  "lib/solid/chef.rb",
32
+ "lib/solid/chef_solo.rb",
32
33
  "lib/solid/commands.rb",
33
- "lib/solid/constants.rb",
34
- "lib/solid/errors.rb",
35
- "lib/solid/json.rb",
36
- "lib/solid/ssh.rb",
37
34
  "solid.gemspec",
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"
35
+ "test/helper.rb",
36
+ "test/test_solid.rb"
47
37
  ]
48
38
  s.homepage = %q{http://github.com/jackhq/solid}
49
39
  s.rdoc_options = ["--charset=UTF-8"]
50
40
  s.require_paths = ["lib"]
51
- s.rubygems_version = %q{1.3.7}
41
+ s.rubygems_version = %q{1.3.6}
52
42
  s.summary = %q{ssh deployment application}
53
43
  s.test_files = [
54
- "spec/lib/solid/chef_spec.rb",
55
- "spec/lib/solid/commands_spec.rb",
56
- "spec/spec_helper.rb"
44
+ "test/helper.rb",
45
+ "test/test_solid.rb"
57
46
  ]
58
47
 
59
48
  if s.respond_to? :specification_version then
60
49
  current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
61
50
  s.specification_version = 3
62
51
 
63
- if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
52
+ if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
64
53
  s.add_runtime_dependency(%q<net-ssh>, [">= 0"])
65
54
  s.add_runtime_dependency(%q<crack>, [">= 0"])
66
55
  s.add_runtime_dependency(%q<json_pure>, [">= 0"])
data/test/helper.rb ADDED
@@ -0,0 +1,10 @@
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
@@ -0,0 +1,7 @@
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
metadata CHANGED
@@ -1,14 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: solid
3
3
  version: !ruby/object:Gem::Version
4
- hash: -1848230054
5
4
  prerelease: true
6
5
  segments:
7
6
  - 0
8
7
  - 1
9
8
  - 6
10
- - beta2
11
- version: 0.1.6.beta2
9
+ - rc1
10
+ version: 0.1.6.rc1
12
11
  platform: ruby
13
12
  authors:
14
13
  - Thing-3
@@ -16,18 +15,16 @@ autorequire:
16
15
  bindir: bin
17
16
  cert_chain: []
18
17
 
19
- date: 2010-08-13 00:00:00 -04:00
18
+ date: 2010-08-10 00:00:00 -04:00
20
19
  default_executable: solid
21
20
  dependencies:
22
21
  - !ruby/object:Gem::Dependency
23
22
  name: net-ssh
24
23
  prerelease: false
25
24
  requirement: &id001 !ruby/object:Gem::Requirement
26
- none: false
27
25
  requirements:
28
26
  - - ">="
29
27
  - !ruby/object:Gem::Version
30
- hash: 3
31
28
  segments:
32
29
  - 0
33
30
  version: "0"
@@ -37,11 +34,9 @@ dependencies:
37
34
  name: crack
38
35
  prerelease: false
39
36
  requirement: &id002 !ruby/object:Gem::Requirement
40
- none: false
41
37
  requirements:
42
38
  - - ">="
43
39
  - !ruby/object:Gem::Version
44
- hash: 3
45
40
  segments:
46
41
  - 0
47
42
  version: "0"
@@ -51,11 +46,9 @@ dependencies:
51
46
  name: json_pure
52
47
  prerelease: false
53
48
  requirement: &id003 !ruby/object:Gem::Requirement
54
- none: false
55
49
  requirements:
56
50
  - - ">="
57
51
  - !ruby/object:Gem::Version
58
- hash: 3
59
52
  segments:
60
53
  - 0
61
54
  version: "0"
@@ -69,33 +62,23 @@ extensions: []
69
62
 
70
63
  extra_rdoc_files:
71
64
  - LICENSE
72
- - README.md
65
+ - README.rdoc
73
66
  files:
74
67
  - .document
75
68
  - .gitignore
76
- - Gemfile
77
69
  - LICENSE
78
- - README.md
70
+ - README.rdoc
79
71
  - Rakefile
80
72
  - VERSION
81
73
  - bin/solid
82
74
  - lib/solid.rb
75
+ - lib/solid/base.rb
83
76
  - lib/solid/chef.rb
77
+ - lib/solid/chef_solo.rb
84
78
  - lib/solid/commands.rb
85
- - lib/solid/constants.rb
86
- - lib/solid/errors.rb
87
- - lib/solid/json.rb
88
- - lib/solid/ssh.rb
89
79
  - solid.gemspec
90
- - spec/fixtures/dna.json
91
- - spec/fixtures/error.json
92
- - spec/fixtures/no_ssh.json
93
- - spec/fixtures/no_ssh_keys.json
94
- - spec/fixtures/no_ssh_pwd.json
95
- - spec/lib/solid/chef_spec.rb
96
- - spec/lib/solid/commands_spec.rb
97
- - spec/spec.opts
98
- - spec/spec_helper.rb
80
+ - test/helper.rb
81
+ - test/test_solid.rb
99
82
  has_rdoc: true
100
83
  homepage: http://github.com/jackhq/solid
101
84
  licenses: []
@@ -106,20 +89,16 @@ rdoc_options:
106
89
  require_paths:
107
90
  - lib
108
91
  required_ruby_version: !ruby/object:Gem::Requirement
109
- none: false
110
92
  requirements:
111
93
  - - ">="
112
94
  - !ruby/object:Gem::Version
113
- hash: 3
114
95
  segments:
115
96
  - 0
116
97
  version: "0"
117
98
  required_rubygems_version: !ruby/object:Gem::Requirement
118
- none: false
119
99
  requirements:
120
100
  - - ">"
121
101
  - !ruby/object:Gem::Version
122
- hash: 25
123
102
  segments:
124
103
  - 1
125
104
  - 3
@@ -128,11 +107,10 @@ required_rubygems_version: !ruby/object:Gem::Requirement
128
107
  requirements: []
129
108
 
130
109
  rubyforge_project:
131
- rubygems_version: 1.3.7
110
+ rubygems_version: 1.3.6
132
111
  signing_key:
133
112
  specification_version: 3
134
113
  summary: ssh deployment application
135
114
  test_files:
136
- - spec/lib/solid/chef_spec.rb
137
- - spec/lib/solid/commands_spec.rb
138
- - spec/spec_helper.rb
115
+ - test/helper.rb
116
+ - test/test_solid.rb
data/Gemfile DELETED
@@ -1,5 +0,0 @@
1
- source :gemcutter
2
-
3
- gem "net-ssh"
4
- gem "crack"
5
- gem "json_pure"
data/README.md DELETED
@@ -1,80 +0,0 @@
1
- # solid
2
-
3
- Version: 0.1.6.beta1
4
-
5
- Solid is a CLI that uses ssh to remote into your servers and run chef-solo.
6
-
7
- 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.
8
-
9
- solid configuration.json
10
-
11
- # configuration.json
12
-
13
- {
14
- "servers": ["server1","server2"],
15
- "ssh-auth": "key",
16
- "run_list": ["role[name]"],
17
- "owner": "[USER]",
18
- "group": "[GROUP]"
19
- }
20
-
21
-
22
-
23
- ## Requirements
24
-
25
- * Ruby
26
- * RubyGems
27
- * net/ssh
28
-
29
- ## Install
30
-
31
- gem install solid
32
-
33
- ## Download Source
34
-
35
- http://github.com/jackhq/solid
36
-
37
-
38
- ## What is a dna.json file?
39
-
40
- 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
41
-
42
- {
43
- "servers": ["server1","server2"],
44
- "ssh-auth": "key",
45
- "run_list": ["role[name]"],
46
- "owner": "[USER]",
47
- "group": "[GROUP]"
48
- }
49
-
50
- ## How to use
51
-
52
- * Create your dna.json file
53
-
54
- * Make sure it has the following root attributes:
55
-
56
- * servers - array of servers
57
- * ssh-auth - (key|pwd) - type ssh authentication
58
- * key - if ssh authentication is key based
59
- * password - if ssh authentication is pwd based
60
- * port
61
-
62
- * Execute
63
-
64
- solid dna.json
65
-
66
-
67
-
68
- ## Note on Patches/Pull Requests
69
-
70
- * Fork the project.
71
- * Make your feature addition or bug fix.
72
- * Add tests for it. This is important so I don't break it in a
73
- future version unintentionally.
74
- * Commit, do not mess with rakefile, version, or history.
75
- (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)
76
- * Send me a pull request. Bonus points for topic branches.
77
-
78
- == Copyright
79
-
80
- Copyright (c) 2010 Thing-3. See LICENSE for details.
@@ -1,30 +0,0 @@
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
data/lib/solid/errors.rb DELETED
@@ -1,35 +0,0 @@
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
data/lib/solid/json.rb DELETED
@@ -1,13 +0,0 @@
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
data/lib/solid/ssh.rb DELETED
@@ -1,9 +0,0 @@
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
@@ -1,7 +0,0 @@
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
- }
@@ -1,4 +0,0 @@
1
- {
2
- 'user': 'ubuntu',
3
- 'group': 'ubuntu'
4
- }
@@ -1,6 +0,0 @@
1
- {
2
- 'servers': [ 'ec2-184-73-32-12.compute-1.amazonaws.com'],
3
- 'user': 'ubuntu',
4
- 'group': 'ubuntu',
5
- 'key': "~/.ec2/ec2-dev"
6
- }
@@ -1,6 +0,0 @@
1
- {
2
- 'servers': [ 'ec2-184-73-32-12.compute-1.amazonaws.com'],
3
- 'ssh-auth': 'key',
4
- 'user': 'ubuntu',
5
- 'group': 'ubuntu'
6
- }
@@ -1,6 +0,0 @@
1
- {
2
- 'servers': [ 'ec2-184-73-32-12.compute-1.amazonaws.com'],
3
- 'ssh-auth': 'pwd',
4
- 'user': 'ubuntu',
5
- 'group': 'ubuntu'
6
- }
@@ -1,51 +0,0 @@
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
@@ -1,40 +0,0 @@
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
-
data/spec/spec.opts DELETED
@@ -1,4 +0,0 @@
1
- --colour
2
- --format progress
3
- --loadby mtime
4
- --reverse
data/spec/spec_helper.rb DELETED
@@ -1,2 +0,0 @@
1
- require 'spec'
2
- require File.dirname(__FILE__) + '/../lib/solid'