exec_remote 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,3 +1,10 @@
1
+ == 0.0.2 / October 2, 2009
2
+
3
+ * Syncing the standard output, so that the output if flushed imediately. No need to wait for the line to complete.
4
+ * Moved rsync as an option, which can be disabled in config file.
5
+ * Also rsync ignore pattern can be modified in the config file.
6
+ * Added password option in the config file, so that password can be added once and no need to give password for every command. [Still password will be prompted on rsync.]
7
+
1
8
  == 0.0.1 / October 2, 2009
2
9
 
3
10
  * Some of the basic functionality.
data/Manifest CHANGED
@@ -3,6 +3,7 @@ Manifest
3
3
  README.rdoc
4
4
  Rakefile
5
5
  bin/exec_remote
6
+ exec_remote.gemspec
6
7
  lib/exec_remote.rb
7
8
  lib/exec_remote/cli.rb
8
9
  lib/exec_remote/configuration.rb
data/Rakefile CHANGED
@@ -4,7 +4,7 @@ rescue LoadError
4
4
  abort "gem 'echoe' is required"
5
5
  end
6
6
 
7
- version = "0.0.1"
7
+ version = "0.0.2"
8
8
 
9
9
  Echoe.new('exec_remote', version) do |p|
10
10
  p.include_gemspec = true
@@ -2,17 +2,17 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = %q{exec_remote}
5
- s.version = "0.0.1"
5
+ s.version = "0.0.2"
6
6
 
7
7
  s.required_rubygems_version = Gem::Requirement.new(">= 1.2") if s.respond_to? :required_rubygems_version=
8
8
  s.authors = ["Selvakumar Natesan"]
9
- s.date = %q{2009-10-03}
9
+ s.date = %q{2009-10-04}
10
10
  s.default_executable = %q{exec_remote}
11
11
  s.description = %q{Exec Remote is a simple utility to run tests/build against your development code in a remote machine without checking in to a repository. It sync ups your code in local and remote machine with rsync and the commands are executed in remote machine via SSH}
12
12
  s.email = %q{k.n.selvakumar@gmail.com}
13
13
  s.executables = ["exec_remote"]
14
14
  s.extra_rdoc_files = ["CHANGELOG.rdoc", "README.rdoc", "lib/exec_remote.rb", "lib/exec_remote/cli.rb", "lib/exec_remote/configuration.rb", "lib/exec_remote/remote_executor.rb", "lib/exec_remote/shell.rb"]
15
- s.files = ["CHANGELOG.rdoc", "Manifest", "README.rdoc", "Rakefile", "bin/exec_remote", "lib/exec_remote.rb", "lib/exec_remote/cli.rb", "lib/exec_remote/configuration.rb", "lib/exec_remote/remote_executor.rb", "lib/exec_remote/shell.rb", "spec/functional/basic_spec.rb", "exec_remote.gemspec"]
15
+ s.files = ["CHANGELOG.rdoc", "Manifest", "README.rdoc", "Rakefile", "bin/exec_remote", "exec_remote.gemspec", "lib/exec_remote.rb", "lib/exec_remote/cli.rb", "lib/exec_remote/configuration.rb", "lib/exec_remote/remote_executor.rb", "lib/exec_remote/shell.rb", "spec/functional/basic_spec.rb"]
16
16
  s.homepage = %q{https://github.com/selvakn/exec_remote}
17
17
  s.rdoc_options = ["--line-numbers", "--inline-source", "--title", "Exec_remote", "--main", "README.rdoc"]
18
18
  s.require_paths = ["lib"]
@@ -8,11 +8,12 @@ module ExecRemote
8
8
  end
9
9
 
10
10
  def self.execute
11
+ $stdout.sync = true
11
12
  begin
12
13
  puts "Exec Remote Shell"
13
14
  puts "================="
14
15
 
15
- rsync
16
+ rsync if config.rsync?
16
17
 
17
18
  puts "Enter your commands now"
18
19
  shell = Shell.new
@@ -28,7 +29,7 @@ module ExecRemote
28
29
  def self.process_command(command)
29
30
  if command[0,1] == "!"
30
31
  command = command[1..-1]
31
- print "again? "
32
+ print "again "
32
33
  rsync
33
34
  end
34
35
 
@@ -39,14 +40,19 @@ module ExecRemote
39
40
  def self.exec_remote(command)
40
41
  command = command.to_s.strip
41
42
  command_to_exec = "cd #{config.my_current_project_dir_on_remote} && #{command}"
42
- RemoteExecutor.connect_and_execute(command_to_exec, config.remote_host, config.remote_user) unless command.empty?
43
+ RemoteExecutor.connect_and_execute(command_to_exec, config.remote_host, config.remote_user, config.remote_password) unless command.empty?
44
+ rescue Net::SSH::AuthenticationFailed => e
45
+ puts "Either add your public key to server 'authorized_hosts' or provide password in the '.exec_remote.yml' file"
43
46
  end
44
47
 
45
48
  def self.rsync
46
- rsync_command = <<EOS
47
- rsync -r --exclude=.git #{config.current_dir} #{config.remote_user}@#{config.remote_host}:#{config.my_dir_on_remote}
48
- EOS
49
- puts "rsyncing.."; `#{rsync_command}`
49
+ # FixMe: Read password from config if available
50
+ rsync_command = ["rsync -r"]
51
+ rsync_command << "--exclude=#{config.rsync_ignore_pattern}" if config.rsync_ignore_pattern
52
+ rsync_command << "#{config.current_dir} #{config.remote_user}@#{config.remote_host}:#{config.my_dir_on_remote}"
53
+ puts "rsyncing.."
54
+ cmd = rsync_command.join(' ')
55
+ `#{cmd}`
50
56
  puts "Done"
51
57
  end
52
58
  end
@@ -6,7 +6,11 @@ module ExecRemote
6
6
  updated_config = update_config_from_user(config.dup)
7
7
 
8
8
  return config if config == updated_config
9
- File.open(config_file, "w") {|f| f.puts updated_config.to_yaml}
9
+ File.open(config_file, "w") do |f|
10
+ config_to_write = default_config.merge updated_config
11
+ f.puts config_to_write.to_yaml
12
+ puts "Config written to '.exec_remote.yml'. Add this file to version control ignore list."
13
+ end
10
14
  exec_config
11
15
  end
12
16
 
@@ -25,6 +29,18 @@ module ExecRemote
25
29
  def remote_user
26
30
  exec_config["user"]
27
31
  end
32
+
33
+ def remote_password
34
+ exec_config["password"]
35
+ end
36
+
37
+ def rsync?
38
+ exec_config["rsync"]
39
+ end
40
+
41
+ def rsync_ignore_pattern
42
+ exec_config["rsync_ignore_pattern"]
43
+ end
28
44
 
29
45
  def my_dir_on_remote
30
46
  File.join(exec_config["base_location"], exec_config["location"])
@@ -37,14 +53,13 @@ module ExecRemote
37
53
  private
38
54
  def config_from_file
39
55
  return {} unless File.exists?(config_file)
40
- YAML.load_file config_file
56
+ YAML.load_file(config_file) || {}
41
57
  end
42
58
 
43
59
  def update_config_from_user(config = {})
44
60
  config = check_and_update_config(config, "host", "the remote hostname/ip")
45
61
  config = check_and_update_config(config, "user", "the remote host username")
46
- config = check_and_update_config(config, "location", "your location on remote host", current_project)
47
- config["base_location"] ||= "data"
62
+ config = check_and_update_config(config, "location", "your location on remote host", host_name)
48
63
  config
49
64
  end
50
65
 
@@ -65,5 +80,17 @@ module ExecRemote
65
80
  str = string.strip
66
81
  str.empty? ? nil : str
67
82
  end
83
+
84
+ def host_name
85
+ `hostname`.split(".").first
86
+ end
87
+
88
+ def default_config
89
+ {
90
+ "base_location" => "data",
91
+ "rsync" => true,
92
+ "rsync_ignore_pattern" => ".git",
93
+ }
94
+ end
68
95
  end
69
96
  end
@@ -15,6 +15,9 @@ module ExecRemote
15
15
  ::Net::SSH.start(host, user, :password => password, :config=>false, :paranoid=>false) do |ssh|
16
16
  yield(ssh)
17
17
  end
18
+ rescue Net::SSH::AuthenticationFailed => error
19
+ puts "Authentication with server failed."
20
+ raise error
18
21
  end
19
22
 
20
23
  def self.execute(ssh_connection, command)
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: exec_remote
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Selvakumar Natesan
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-10-03 00:00:00 +05:30
12
+ date: 2009-10-04 00:00:00 +05:30
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
@@ -42,13 +42,13 @@ files:
42
42
  - README.rdoc
43
43
  - Rakefile
44
44
  - bin/exec_remote
45
+ - exec_remote.gemspec
45
46
  - lib/exec_remote.rb
46
47
  - lib/exec_remote/cli.rb
47
48
  - lib/exec_remote/configuration.rb
48
49
  - lib/exec_remote/remote_executor.rb
49
50
  - lib/exec_remote/shell.rb
50
51
  - spec/functional/basic_spec.rb
51
- - exec_remote.gemspec
52
52
  has_rdoc: true
53
53
  homepage: https://github.com/selvakn/exec_remote
54
54
  licenses: []