jossh 0.1.2 → 0.1.3

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: 44f63f279e57f3d0989f79931804f0c5739e1500
4
- data.tar.gz: ab66d4c0dd2ce09933bec771b2bd62998039f214
3
+ metadata.gz: 3857009678775cc0439cfbc76d384550da761b35
4
+ data.tar.gz: bea78d4e9600dfb3d87b589c7529cbfe2a9ac071
5
5
  SHA512:
6
- metadata.gz: 810969e0823f92a77c6e3060b86a8cda94f8b9c02097db57ac2bbffed7273c3e949f9e98cc1847111025a8d69084a2e8b90bc0c394a647a5c9ac02c832e4ae1e
7
- data.tar.gz: 721e0c004c4814567509951875c9d6f9270625a62412e770b8a18458bf59b04b59f7413256986aa1f9b7c9bffea06267dc70308f0549ca4cbaea2d2a0972dd67
6
+ metadata.gz: bb2711d5f7ca8ad17daf52d042a16d2590c5b182d2a0ad237b6f01a4bf8672f2a5923d2946837a169cbbb2cc899237e6b5640ce16b569c6ca8bd0ac74b6c2c28
7
+ data.tar.gz: f5108787af8a0048589d0503810113028672d20fb3fa58565302746114c68dcea8e50b85dd7de03fb89f53c3c7727f048e70f3482fc6920de1cf2034308522f6
data/README.md CHANGED
@@ -39,41 +39,40 @@ Or install manually
39
39
  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
- ```
43
- $ jossh -h
44
-
45
- Jossh
42
+ $ jossh -h
46
43
 
47
- Usage:
48
- jossh <host> <script>
49
- jossh -m | --make-hostfile
50
- jossh -h | --help
51
- jossh -v | --version
44
+ Jossh
52
45
 
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
46
+ Usage:
47
+ jossh <host> <script>
48
+ jossh -m | --make-hostfile
49
+ jossh -l | --list
50
+ jossh -h | --help
51
+ jossh -v | --version
59
52
 
60
- <script>
61
- can be:
62
- - a filename
63
- - one or more direct command
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
64
59
 
65
- Options:
66
- -m --make-hostfile Generate a template ssh_hosts.yml
67
- -h --help Show this screen
68
- -v --version Show version
60
+ <script>
61
+ can be:
62
+ - a filename
63
+ - one or more direct command
69
64
 
70
- Examples:
71
- jossh :production "git status"
72
- jossh jack@server.com "cd ~ && ls -l"
73
- jossh server.com deploy
65
+ Options:
66
+ -m --make-hostfile Generate a template ssh_hosts.yml
67
+ -l --list Show hosts in ./ssh_hosts.yml or ~/ssh_hosts.yml
68
+ -h --help Show this screen
69
+ -v --version Show version
74
70
 
71
+ Examples:
72
+ jossh :production "git status"
73
+ jossh jack@server.com "cd ~ && ls -l"
74
+ jossh server.com deploy
75
75
 
76
- ```
77
76
 
78
77
  ## Library Usage
79
78
 
@@ -132,12 +131,21 @@ See also: The [examples folder](https://github.com/DannyBen/jossh/tree/master/ex
132
131
 
133
132
  ## Host specification file
134
133
 
135
- Host specifications should be configured in `ssh_hosts.yml` by default.
134
+ When using a :symbol as the host name, Jossh will look for a YAML
135
+ configuration file named `ssh_hosts.yml`. The file is expected to be either
136
+ in the current directory or the user's home directory.
136
137
 
137
- If you wish to use a different location, use the `ssh_hostfile` method:
138
+ If you wish to use a different filename or location, use the `ssh_hostfile`
139
+ method. If you specify only a filename or a relative path, Jossh will still
140
+ look for this file in both the current directory and user's home directory.
138
141
 
139
142
  ```ruby
140
- ssh_hostfile "my_hosts.yml"
143
+ # Specify exact location
144
+ ssh_hostfile "/etc/my_hosts.yml"
145
+ ssh! :myhost, 'ls'
146
+
147
+ # Look for ./configs/hosts.yml or ~/configs/hosts.yml
148
+ ssh_hostfile "configs/hosts.yml"
141
149
  ssh! :myhost, 'ls'
142
150
  ```
143
151
 
data/lib/jossh/api.rb CHANGED
@@ -26,7 +26,7 @@ module Jossh
26
26
  #
27
27
  # ssh { host: 'localhost', user: 'vagrant' }, "ls -l"
28
28
  #
29
- # def my_puts(data)
29
+ # def my_puts(data, stream)
30
30
  # puts "> #{data}"
31
31
  # end
32
32
  # ssh :localhost, "ls -l", method: my_puts
@@ -73,6 +73,13 @@ module Jossh
73
73
  CommandRunner.instance.ssh_script! hostspec, script
74
74
  end
75
75
 
76
+ # Set the name of the hostfile
77
+ #
78
+ # ==== Params:
79
+ #
80
+ # +file+::
81
+ # Path to a YAML file
82
+ #
76
83
  def ssh_hostfile(file)
77
84
  CommandRunner.instance.ssh_hostfile file
78
85
  end
@@ -1,11 +1,14 @@
1
1
  require 'etc'
2
2
  require 'docopt'
3
+ require 'colsole'
3
4
  require 'fileutils'
4
5
 
5
6
  module Jossh
6
7
 
7
8
  class BinHandler
8
9
 
10
+ include Colsole
11
+
9
12
  def handle(args)
10
13
  begin
11
14
  execute Docopt::docopt(doc, argv: args)
@@ -17,8 +20,9 @@ module Jossh
17
20
  private
18
21
 
19
22
  def execute(args)
20
- return make_hostfile if args['--make-hostfile']
21
23
  return show_version if args['--version']
24
+ return make_hostfile if args['--make-hostfile']
25
+ return list_hosts if args['--list']
22
26
  handle_script args['<host>'].dup, args['<script>']
23
27
  end
24
28
 
@@ -58,7 +62,19 @@ module Jossh
58
62
  abort "ssh_hosts.yml already exists" if File.exist?('ssh_hosts.yml')
59
63
  FileUtils.copy template('ssh_hosts.yml'), './ssh_hosts.yml'
60
64
  File.exist? './ssh_hosts.yml' or abort "Unable to create ssh_hosts.yml"
61
- puts "Created ssh_hosts.yml"
65
+ say "!txtgrn!Created ssh_hosts.yml"
66
+ end
67
+
68
+ def list_hosts
69
+ runner = CommandRunner.new
70
+ if runner.active_hostfile
71
+ say "!txtgrn!Using: #{runner.active_hostfile}\n"
72
+ runner.ssh_hosts.each do |key, spec|
73
+ say " :#{key.to_s.ljust(14)} = !txtblu!#{spec[:user]}!txtrst!@!txtylw!#{spec[:host]}"
74
+ end
75
+ else
76
+ say "!txtred!Cannot find ssh_hosts.yml or ~/ssh_hosts.yml"
77
+ end
62
78
  end
63
79
 
64
80
  def show_version
@@ -39,6 +39,7 @@ module Jossh
39
39
  end
40
40
 
41
41
  def ssh_hostfile(file)
42
+ file = 'ssh_hosts.yml' if file == :default
42
43
  @hostfile = file
43
44
 
44
45
  # force reload in case we were called after some ssh call was
@@ -46,6 +47,20 @@ module Jossh
46
47
  @ssh_hosts = nil
47
48
  end
48
49
 
50
+ def ssh_hosts
51
+ @ssh_hosts ||= load_ssh_hosts
52
+ end
53
+
54
+ def active_hostfile
55
+ if File.exist? hostfile
56
+ hostfile
57
+ elsif hostfile[0] != '/' and File.exist? user_hostfile
58
+ user_hostfile
59
+ else
60
+ false
61
+ end
62
+ end
63
+
49
64
  private
50
65
 
51
66
  def simple_puts(data, stream)
@@ -57,22 +72,25 @@ module Jossh
57
72
  end
58
73
 
59
74
  def load_spec(key)
60
- ssh_hosts[key] or raise "Cannot find :#{key} in #{hostfile}"
61
- end
62
-
63
- def ssh_hosts
64
- @ssh_hosts ||= load_ssh_hosts
75
+ ssh_hosts[key] or raise "Cannot find :#{key}"
65
76
  end
66
77
 
67
78
  def load_ssh_hosts
68
- File.exist? hostfile or raise "Cannot find #{hostfile}"
69
- YAML.load_file hostfile
79
+ if active_hostfile
80
+ YAML.load_file active_hostfile
81
+ else
82
+ raise "Cannot find #{hostfile} or #{user_hostfile}"
83
+ end
70
84
  end
71
85
 
72
86
  def hostfile
73
87
  @hostfile ||= 'ssh_hosts.yml'
74
88
  end
75
89
 
90
+ def user_hostfile
91
+ "#{Dir.home}/#{hostfile}"
92
+ end
93
+
76
94
  def load_script(script)
77
95
  File.read script
78
96
  end
@@ -3,6 +3,7 @@ Jossh
3
3
  Usage:
4
4
  jossh <host> <script>
5
5
  jossh -m | --make-hostfile
6
+ jossh -l | --list
6
7
  jossh -h | --help
7
8
  jossh -v | --version
8
9
 
@@ -20,6 +21,7 @@ Arguments:
20
21
 
21
22
  Options:
22
23
  -m --make-hostfile Generate a template ssh_hosts.yml
24
+ -l --list Show hosts in ./ssh_hosts.yml or ~/ssh_hosts.yml
23
25
  -h --help Show this screen
24
26
  -v --version Show version
25
27
 
data/lib/jossh/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Jossh
2
- VERSION = "0.1.2"
2
+ VERSION = "0.1.3"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jossh
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.1.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Danny Ben Shitrit
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-11-27 00:00:00.000000000 Z
11
+ date: 2015-11-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: colsole