jossh 0.1.1 → 0.1.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 15cd40420f857c0961001c61dab3d683f89c907a
4
- data.tar.gz: 884df776481c6aca398241d303fa6a58aceb3b80
3
+ metadata.gz: 44f63f279e57f3d0989f79931804f0c5739e1500
4
+ data.tar.gz: ab66d4c0dd2ce09933bec771b2bd62998039f214
5
5
  SHA512:
6
- metadata.gz: dab42099d80d7d3aff945323a136cdd6078d244c7b2dceaf4e8c36e104ed7cb44300a0f7fb06c926643761e7a0e5f54daed53df8a95e78c3dbd69d09d269706f
7
- data.tar.gz: 13a3af70813a58a68dec6784389c48beee274a41655a60c5fcdb5e9acc3427b6fd94af16d5e315a38367aa686357d8eac5760e1392cdfad8a03a76f12b5805c9
6
+ metadata.gz: 810969e0823f92a77c6e3060b86a8cda94f8b9c02097db57ac2bbffed7273c3e949f9e98cc1847111025a8d69084a2e8b90bc0c394a647a5c9ac02c832e4ae1e
7
+ data.tar.gz: 721e0c004c4814567509951875c9d6f9270625a62412e770b8a18458bf59b04b59f7413256986aa1f9b7c9bffea06267dc70308f0549ca4cbaea2d2a0972dd67
data/README.md CHANGED
@@ -40,24 +40,38 @@ After installing, you can call `jossh` from the command line to run arbitrary
40
40
  commands or a local script over SSH.
41
41
 
42
42
  ```
43
- $ jossh
43
+ $ jossh -h
44
44
 
45
- Usage: jossh <host> <script>
46
- jossh -h
45
+ Jossh
47
46
 
48
- <host> can be:
49
- - :symbol - in this case we will look in ./ssh_hosts.yml
50
- - host - in this case we will use the current logged in user
51
- - user@host
47
+ Usage:
48
+ jossh <host> <script>
49
+ jossh -m | --make-hostfile
50
+ jossh -h | --help
51
+ jossh -v | --version
52
52
 
53
- <script> can be:
54
- - a filename
55
- - one or more direct command - quotes are only needed if you include
56
- multiple commands with && or semicolor (;)
53
+ Arguments:
54
+ <host>
55
+ can be:
56
+ - :symbol : in this case we will look in ./ssh_hosts.yml
57
+ - host : in this case we will use the current logged in user
58
+ - user@host
59
+
60
+ <script>
61
+ can be:
62
+ - a filename
63
+ - one or more direct command
64
+
65
+ Options:
66
+ -m --make-hostfile Generate a template ssh_hosts.yml
67
+ -h --help Show this screen
68
+ -v --version Show version
69
+
70
+ Examples:
71
+ jossh :production "git status"
72
+ jossh jack@server.com "cd ~ && ls -l"
73
+ jossh server.com deploy
57
74
 
58
- Examples: jossh :production git status
59
- jossh jack@server.com "cd ~ && ls -l"
60
- jossh server.com deploy
61
75
 
62
76
  ```
63
77
 
@@ -127,4 +141,8 @@ ssh_hostfile "my_hosts.yml"
127
141
  ssh! :myhost, 'ls'
128
142
  ```
129
143
 
144
+ You can ask Jossh to create a sample file for you by running:
145
+
146
+ $ jossh --make-hostfile
147
+
130
148
  See [ssh_hosts.example.yml](https://github.com/DannyBen/jossh/blob/master/ssh_hosts.example.yml) as an example.
data/bin/jossh CHANGED
@@ -1,62 +1,7 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
3
  require 'jossh'
4
- require 'etc'
5
-
6
- # for dev (not needed in most cases)
7
- # require File.dirname(__FILE__) + "/../lib/jossh"
8
-
9
4
  trap(:INT) { abort "\r\nGoodbye" }
5
+ include Jossh
6
+ BinHandler.new.handle ARGV
10
7
 
11
- def short_usage
12
- "\nUsage: jossh <host> <script>\n" +
13
- " jossh -h\n\n"
14
- end
15
-
16
- def usage
17
- short_usage +
18
- " <host> can be:\n"+
19
- " - :symbol - in this case we will look in ./ssh_hosts.yml\n" +
20
- " - host - in this case we will use the current logged in user\n" +
21
- " - user@host\n\n" +
22
- " <script> can be:\n" +
23
- " - a filename\n" +
24
- " - one or more direct command - quotes are only needed if you include\n" +
25
- " multiple commands with && or semicolor (;)\n\n" +
26
- "Examples: jossh :production git status\n" +
27
- " jossh jack@server.com \"cd ~ && ls -l\"\n" +
28
- " jossh server.com deploy"
29
- end
30
-
31
- def run
32
- ARGV.empty? and abort short_usage
33
- ARGV[0] == '-h' and abort usage
34
- host = ARGV.shift.dup
35
- script = ARGV.join ' '
36
- host and script or abort short_usage
37
- host = standardize_host host
38
- begin
39
- if File.exist? script
40
- ssh_script! host, script
41
- else
42
- ssh host, script
43
- end
44
- rescue => e
45
- abort e.message
46
- end
47
- end
48
-
49
- def standardize_host(str)
50
- if str[0] == ':'
51
- str[0] = ''
52
- return str.to_sym
53
- end
54
-
55
- if str =~ /^(.+)@(.+)$/
56
- return { user: $1, host: $2 }
57
- end
58
-
59
- return { user: Etc.getlogin, host: str }
60
- end
61
-
62
- run
@@ -0,0 +1,77 @@
1
+ require 'etc'
2
+ require 'docopt'
3
+ require 'fileutils'
4
+
5
+ module Jossh
6
+
7
+ class BinHandler
8
+
9
+ def handle(args)
10
+ begin
11
+ execute Docopt::docopt(doc, argv: args)
12
+ rescue Docopt::Exit => e
13
+ puts e.message
14
+ end
15
+ end
16
+
17
+ private
18
+
19
+ def execute(args)
20
+ return make_hostfile if args['--make-hostfile']
21
+ return show_version if args['--version']
22
+ handle_script args['<host>'].dup, args['<script>']
23
+ end
24
+
25
+ def handle_script(host, script)
26
+ host = standardize_host host
27
+
28
+ begin
29
+ if File.exist? script
30
+ ssh_script! host, script
31
+ else
32
+ ssh host, script
33
+ end
34
+ # :nocov:
35
+ rescue => e
36
+ abort e.message
37
+ end
38
+ # :nocov:
39
+ end
40
+
41
+ def standardize_host(str)
42
+ if str[0] == ':'
43
+ str[0] = ''
44
+ return str.to_sym
45
+ end
46
+
47
+ # :nocov:
48
+ # We DO have a test for these two cases, requires manual password type
49
+ if str =~ /^(.+)@(.+)$/
50
+ return { user: $1, host: $2 }
51
+ end
52
+
53
+ return { user: Etc.getlogin, host: str }
54
+ # :nocov:
55
+ end
56
+
57
+ def make_hostfile
58
+ abort "ssh_hosts.yml already exists" if File.exist?('ssh_hosts.yml')
59
+ FileUtils.copy template('ssh_hosts.yml'), './ssh_hosts.yml'
60
+ File.exist? './ssh_hosts.yml' or abort "Unable to create ssh_hosts.yml"
61
+ puts "Created ssh_hosts.yml"
62
+ end
63
+
64
+ def show_version
65
+ puts VERSION
66
+ end
67
+
68
+ def doc
69
+ return @doc if @doc
70
+ @doc = File.read template 'docopt.txt'
71
+ end
72
+
73
+ def template(file)
74
+ File.expand_path("../templates/#{file}", __FILE__)
75
+ end
76
+ end
77
+ end
@@ -0,0 +1,30 @@
1
+ Jossh
2
+
3
+ Usage:
4
+ jossh <host> <script>
5
+ jossh -m | --make-hostfile
6
+ jossh -h | --help
7
+ jossh -v | --version
8
+
9
+ Arguments:
10
+ <host>
11
+ can be:
12
+ - :symbol : in this case we will look in ./ssh_hosts.yml
13
+ - host : in this case we will use the current logged in user
14
+ - user@host
15
+
16
+ <script>
17
+ can be:
18
+ - a filename
19
+ - one or more direct command
20
+
21
+ Options:
22
+ -m --make-hostfile Generate a template ssh_hosts.yml
23
+ -h --help Show this screen
24
+ -v --version Show version
25
+
26
+ Examples:
27
+ jossh :production "git status"
28
+ jossh jack@server.com "cd ~ && ls -l"
29
+ jossh server.com deploy
30
+
@@ -0,0 +1,21 @@
1
+ # SSH Hosts File for Jossh
2
+ #
3
+ # Supports any of the attributes available in Net::SSH#start
4
+ # http://net-ssh.github.io/net-ssh/classes/Net/SSH.html#method-c-start
5
+ #
6
+ # :host: and :user: are required, everything else is optional
7
+ #
8
+
9
+ :localhost:
10
+ :host: 'localhost'
11
+ :user: 'me'
12
+
13
+ :production:
14
+ :host: 'production.server.com'
15
+ :user: 'josh'
16
+ :port: 22
17
+ :timeout: 60
18
+ :passphrase: 'when using private key to prevent prompt'
19
+ :password: 'when using user/password'
20
+ :forward_agent: true
21
+ :use_agent: true
data/lib/jossh/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Jossh
2
- VERSION = "0.1.1"
2
+ VERSION = "0.1.2"
3
3
  end
data/lib/jossh.rb CHANGED
@@ -1,6 +1,7 @@
1
1
  require 'jossh/version'
2
2
  require 'jossh/command_runner'
3
3
  require 'jossh/output_handler'
4
+ require 'jossh/bin_handler'
4
5
  require 'jossh/api'
5
6
 
6
7
  self.extend Jossh
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jossh
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Danny Ben Shitrit
@@ -38,6 +38,20 @@ dependencies:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
40
  version: '3.0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: docopt
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '0.5'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '0.5'
41
55
  - !ruby/object:Gem::Dependency
42
56
  name: minitest
43
57
  requirement: !ruby/object:Gem::Requirement
@@ -120,8 +134,11 @@ files:
120
134
  - bin/jossh
121
135
  - lib/jossh.rb
122
136
  - lib/jossh/api.rb
137
+ - lib/jossh/bin_handler.rb
123
138
  - lib/jossh/command_runner.rb
124
139
  - lib/jossh/output_handler.rb
140
+ - lib/jossh/templates/docopt.txt
141
+ - lib/jossh/templates/ssh_hosts.yml
125
142
  - lib/jossh/version.rb
126
143
  homepage: https://github.com/DannyBen/jossh
127
144
  licenses: