jossh 0.1.1 → 0.1.2

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.
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: