cloudler 0.1.5 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (3) hide show
  1. data/bin/cloud +26 -4
  2. data/lib/cloudler.rb +70 -56
  3. metadata +2 -2
data/bin/cloud CHANGED
@@ -1,22 +1,44 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
3
  require 'cloudler'
4
- if ARGV.first == 'init'
4
+ action = ARGV.shift
5
+ if action == 'init'
5
6
  Cloudler.init
6
- elsif ARGV.first == 'run'
7
+ elsif action == 'test'
8
+ if File.exists? 'Cloudfile'
9
+ File.open 'Cloudfile', 'r' do |f|
10
+ config = f.read
11
+ eval config
12
+ end
13
+
14
+ Cloudler.test_connection
15
+ else
16
+ puts "It doesn't like this is a cloudler project. Try running 'cloud init'"
17
+ end
18
+ elsif action == 'run'
7
19
  if File.exists? 'Cloudfile'
8
20
  File.open 'Cloudfile', 'r' do |f|
9
21
  config = f.read
10
22
  eval config
11
23
  end
12
24
 
13
- Cloudler.run
25
+ if ARGV.length > 0
26
+ Cloudler.run ARGV.collect {|a| a.to_sym}
27
+ else
28
+ Cloudler.run
29
+ end
14
30
  else
15
31
  puts "It doesn't like this is a cloudler project. Try running 'cloud init'"
16
32
  end
17
33
  else
18
- puts "Usage: cloud [command]"
34
+ puts "Usage: cloud [command] [args]"
19
35
  puts " commands:"
20
36
  puts " init -- create a new cloudler project"
37
+ puts " test -- test the cloudler settings"
21
38
  puts " run -- run a cloud project"
39
+ puts " If you want to run only part of the actions, you can use:"
40
+ puts " upload -- Upload files"
41
+ puts " precommands -- Run the precommands"
42
+ puts " gems -- Install the gems"
43
+ puts " command -- Run the command"
22
44
  end
data/lib/cloudler.rb CHANGED
@@ -3,41 +3,26 @@ require 'net/scp'
3
3
 
4
4
  class Cloudler
5
5
 
6
- VERSION = '0.1.5'
6
+ VERSION = '0.2.0'
7
7
 
8
- def self.hosts= hosts
9
- @hosts = hosts
8
+ class << self
9
+ attr_accessor :hosts, :username, :command, :gems, :password, :files, :precommands, :path
10
10
  end
11
-
12
- def self.username= username
13
- @username = username
14
- end
15
-
16
- def self.command= string
17
- @command = string
18
- end
19
-
20
- def self.gems= array
21
- @gems = array
22
- end
23
-
24
- def self.password= password
25
- @password = password
26
- end
27
-
28
- def self.files= files
29
- @files = files
30
- end
31
-
32
- def self.precommands= precommands
33
- @precommands = precommands
34
- end
35
-
36
- def self.path= path
37
- @path = path
11
+
12
+ def self.test_connection
13
+ @hosts.each do |host|
14
+ begin
15
+ Net::SSH.start(host, @username, :password => @password) do |ssh|
16
+ puts "Connected to #{host} successfully."
17
+ end
18
+ rescue
19
+ puts "Error connecting to #{host}."
20
+ end
21
+ end
38
22
  end
39
23
 
40
- def self.run
24
+ def self.run to_run = [:upload, :precommands, :gems, :command]
25
+ # Set some defaults
41
26
  @files ||= []
42
27
  @gems ||= []
43
28
  @precommands ||= []
@@ -50,44 +35,73 @@ class Cloudler
50
35
 
51
36
  @hosts.each do |host|
52
37
  Net::SSH.start(host, @username, :password => @password) do |ssh|
53
- puts "Uploading files..."
54
- ssh.exec! "rm -rf #{@path}"
55
- ssh.exec! "mkdir #{@path}"
56
- if @files.length > 0
57
- ssh.scp.upload!(@files.join(' '), @path, :recursive => true)
58
- else
59
- ssh.scp.upload!('.', @path, :recursive => true)
38
+ if to_run.member? :upload
39
+ puts "Uploading files..."
40
+ upload_files ssh
41
+ puts "Files uploaded."
60
42
  end
61
-
62
- puts "Files uploaded."
63
43
 
64
- if @precommands.length > 0
65
- puts "Executing pre-commands"
66
- @precommands.each do |command|
67
- ssh.exec "cd #{@path} && #{command}" do |ch,stream,data|
68
- puts data
69
- end
44
+ if to_run.member? :precommands
45
+ if @precommands.length > 0
46
+ puts "Executing pre-commands"
47
+ execute_precommands ssh
48
+ puts "Pre-commands executed."
70
49
  end
71
- puts "Pre-commands executed."
72
50
  end
73
51
 
74
- if @gems.length > 0
75
- puts "Installing gems..."
76
- ssh.exec! "gem install #{@gems.join ' '}" do |ch, stream, data|
77
- puts data
52
+ if to_run.member? :gems
53
+ if @gems.length > 0
54
+ puts "Installing gems..."
55
+ install_gems ssh
56
+ puts "Gems installed"
78
57
  end
79
- puts "Gems installed"
80
58
  end
81
59
 
82
- puts "Executing command..."
83
- ssh.exec! "cd #{@path} && #{@command}" do |ch, stream, data|
84
- puts data
60
+ if to_run.member? :command
61
+ puts "Executing command..."
62
+ execute_command ssh
63
+ puts "Command finished."
85
64
  end
86
- puts "Command finished."
87
65
  end
88
66
  end
89
67
  end
90
68
 
69
+ def self.upload_files ssh
70
+ ssh.exec! "rm -rf #{@path}"
71
+ ssh.exec! "mkdir #{@path}"
72
+
73
+ # By default, Cloudler uploads the entire current directory
74
+ if @files.length > 0
75
+ ssh.scp.upload!(@files.join(' '), @path, :recursive => true)
76
+ else
77
+ ssh.scp.upload!('.', @path, :recursive => true)
78
+ end
79
+ end
80
+
81
+ def self.execute_precommands ssh
82
+ @precommands.each do |command|
83
+ # We cd to @path so that the user can modify or run their uploaded files if
84
+ # they need to
85
+ ssh.exec "cd #{@path} && #{command}" do |ch,stream,data|
86
+ puts data
87
+ end
88
+ end
89
+ end
90
+
91
+ def self.install_gems ssh
92
+ ssh.exec! "gem install #{@gems.join ' '}" do |ch, stream, data|
93
+ puts data
94
+ end
95
+ end
96
+
97
+ def self.execute_command ssh
98
+ # We cd to @path so that the user has access to their uploaded files when
99
+ # they try to run them
100
+ ssh.exec! "cd #{@path} && #{@command}" do |ch, stream, data|
101
+ puts data
102
+ end
103
+ end
104
+
91
105
  def self.init
92
106
  File.open "Cloudfile", 'w' do |f|
93
107
  f.write <<-EOS
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: cloudler
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 0.1.5
5
+ version: 0.2.0
6
6
  platform: ruby
7
7
  authors:
8
8
  - Bruce Spang
@@ -10,7 +10,7 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2011-02-23 00:00:00 -05:00
13
+ date: 2011-02-24 00:00:00 -05:00
14
14
  default_executable: cloud
15
15
  dependencies: []
16
16