cloudkick 0.1.2 → 0.2.0

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/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.2
1
+ 0.2.0
data/bin/cloudkick ADDED
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'rubygems'
4
+
5
+ $LOAD_PATH.unshift(File.dirname(__FILE__) + '/../lib')
6
+
7
+ require 'cloudkick'
8
+ require 'cloudkick/command'
9
+
10
+ args = ARGV.dup
11
+ ARGV.clear
12
+ command = args.shift.strip rescue 'help'
13
+
14
+ Cloudkick::Command.run(command, args)
data/cloudkick.gemspec CHANGED
@@ -5,13 +5,15 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{cloudkick}
8
- s.version = "0.1.2"
8
+ s.version = "0.2.0"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Cloudkick"]
12
- s.date = %q{2010-02-17}
12
+ s.date = %q{2010-02-22}
13
+ s.default_executable = %q{cloudkick}
13
14
  s.description = %q{Ruby interface to the Cloudkick API}
14
15
  s.email = %q{support@cloudkick.com}
16
+ s.executables = ["cloudkick"]
15
17
  s.extra_rdoc_files = [
16
18
  "LICENSE",
17
19
  "README.rdoc"
@@ -23,10 +25,14 @@ Gem::Specification.new do |s|
23
25
  "README.rdoc",
24
26
  "Rakefile",
25
27
  "VERSION",
28
+ "bin/cloudkick",
26
29
  "cloudkick.gemspec",
27
30
  "doc/example.rb",
28
31
  "lib/cloudkick.rb",
29
32
  "lib/cloudkick/base.rb",
33
+ "lib/cloudkick/command.rb",
34
+ "lib/cloudkick/commands/base.rb",
35
+ "lib/cloudkick/commands/parallel.rb",
30
36
  "lib/cloudkick/node.rb",
31
37
  "test/helper.rb",
32
38
  "test/test_cloudkick-gem.rb"
data/lib/cloudkick.rb CHANGED
@@ -11,9 +11,9 @@
11
11
  # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
12
  # See the License for the specific language governing permissions and
13
13
  # limitations under the License.
14
- require 'rubygems'
15
- require 'crack'
16
- require 'oauth'
14
+ module Cloudkick; end
17
15
 
18
- require 'cloudkick/base'
19
- require 'cloudkick/node'
16
+ $LOAD_PATH.unshift(File.dirname(__FILE__) + '/cloudkick')
17
+
18
+ require 'base'
19
+ require 'node'
@@ -11,6 +11,8 @@
11
11
  # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
12
  # See the License for the specific language governing permissions and
13
13
  # limitations under the License.
14
+ require 'oauth'
15
+
14
16
  module Cloudkick
15
17
  class Base
16
18
 
@@ -0,0 +1,27 @@
1
+ require 'commands/base'
2
+
3
+ Dir["#{File.dirname(__FILE__)}/commands/*"].each { |c| require c }
4
+
5
+ module Cloudkick
6
+ module Command
7
+ class InvalidCommand < RuntimeError; end
8
+ class CommandFailed < RuntimeError; end
9
+
10
+ class << self
11
+ def run(command, args)
12
+ run_internal(command, args.dup)
13
+ end
14
+
15
+ def run_internal(command, args)
16
+ klass, method = parse(command)
17
+ runner = klass.new(args)
18
+ raise InvalidCommand unless runner.respond_to?(method)
19
+ runner.send(method)
20
+ end
21
+
22
+ def parse(command)
23
+ return eval("Cloudkick::Command::#{command.capitalize}"), :index
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,33 @@
1
+ module Cloudkick::Command
2
+ class Base
3
+ attr_accessor :args
4
+
5
+ def initialize(args)
6
+ @args = args
7
+ end
8
+
9
+ def client
10
+ if !@client
11
+ key, secret = credentials
12
+ @client = Cloudkick::Base.new(key, secret)
13
+ end
14
+
15
+ return @client
16
+ end
17
+
18
+ def credentials
19
+ key = ''
20
+ File.open('/etc/cloudkick.conf') do |f|
21
+ f.grep(/oauth_key (\w+)/) { key = $1 }
22
+ end
23
+
24
+ secret = ''
25
+ File.open('/etc/cloudkick.conf') do |f|
26
+ f.grep(/oauth_secret (\w+)/) { secret = $1 }
27
+ end
28
+
29
+ return key, secret
30
+ end
31
+
32
+ end
33
+ end
@@ -0,0 +1,22 @@
1
+ require 'tempfile'
2
+
3
+ module Cloudkick::Command
4
+ class Pssh < Base
5
+ def index
6
+ file = Tempfile.new('ck')
7
+
8
+ client.get('nodes').each do |node|
9
+ file.puts node.ipaddress
10
+ end
11
+
12
+ file.flush
13
+ exec("pssh -h #{file.path} -l #{@args[0]} -o #{args[1]} #{args[2]}")
14
+ file.close
15
+ end
16
+ end
17
+
18
+ class Pscp < Base
19
+ def index
20
+ end
21
+ end
22
+ end
@@ -11,6 +11,8 @@
11
11
  # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
12
  # See the License for the specific language governing permissions and
13
13
  # limitations under the License.
14
+ require 'crack'
15
+
14
16
  module Cloudkick
15
17
  class Node < Base
16
18
 
@@ -65,14 +67,5 @@ module Cloudkick
65
67
  end
66
68
  end
67
69
 
68
- def pssh(command)
69
- file = File.new('pssh-ips.txt', 'w')
70
-
71
- @nodes.each do |node|
72
- file.puts node.ipaddress
73
- end
74
-
75
- "run: pssh -h pssh-ips.txt -o /tmp/ck \'#{command}\'"
76
- end
77
70
  end
78
71
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cloudkick
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Cloudkick
@@ -9,8 +9,8 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2010-02-17 00:00:00 -08:00
13
- default_executable:
12
+ date: 2010-02-22 00:00:00 -08:00
13
+ default_executable: cloudkick
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: crack
@@ -34,8 +34,8 @@ dependencies:
34
34
  version:
35
35
  description: Ruby interface to the Cloudkick API
36
36
  email: support@cloudkick.com
37
- executables: []
38
-
37
+ executables:
38
+ - cloudkick
39
39
  extensions: []
40
40
 
41
41
  extra_rdoc_files:
@@ -48,10 +48,14 @@ files:
48
48
  - README.rdoc
49
49
  - Rakefile
50
50
  - VERSION
51
+ - bin/cloudkick
51
52
  - cloudkick.gemspec
52
53
  - doc/example.rb
53
54
  - lib/cloudkick.rb
54
55
  - lib/cloudkick/base.rb
56
+ - lib/cloudkick/command.rb
57
+ - lib/cloudkick/commands/base.rb
58
+ - lib/cloudkick/commands/parallel.rb
55
59
  - lib/cloudkick/node.rb
56
60
  - test/helper.rb
57
61
  - test/test_cloudkick-gem.rb