tmux-connector 0.0.2 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -28,9 +28,16 @@ Manage multiple servers using SSH and [tmux].
28
28
 
29
29
  - send `top` command to all loadbalancing nodes in 'staging' session
30
30
 
31
- `tcon send production 'tail -f' -f 'rdb'`
31
+ `tcon send production 'tail -f /var/log/syslog' -f 'rdb'`
32
32
 
33
- - send `tail -f` command to all database nodes in 'production' session
33
+ - send `tail -f /var/log/syslog` command to all database nodes in 'production'
34
+ session
35
+
36
+ `tcon send production -f 'rdb' 'C-c'`
37
+
38
+ - send `Ctrl-C` to all database nodes in 'production' session (if executed
39
+ after the `tail -f /var/log/syslog` command, it will exit the `tail -f`
40
+ command
34
41
 
35
42
  `tcon resume s#3`
36
43
 
@@ -54,7 +61,8 @@ Usage:
54
61
  tcon delete (<session-name> | --all)
55
62
  tcon list
56
63
  tcon send <session-name> (<command> | --command-file=<file>)
57
- [--server-filter=<regex>] [--group-filter=<regex>] [--verbose]
64
+ [--server-filter=<regex>] [--group-filter=<regex>]
65
+ [--filter=<regex>] [--verbose]
58
66
  tcon --help
59
67
  tcon --version
60
68
 
@@ -63,14 +71,18 @@ Options:
63
71
  describes how new session is started. YAML format.
64
72
  <session-name> Name that identifies the session. Must be unique.
65
73
  <command> Command to be executed on remote server[s].
74
+ <regex> String that represents valid Ruby regex.
66
75
  -s --ssh-config=file Path to ssh config file [default: ~/.ssh/config].
67
76
  -n --session-name=name Name of the session to be used in the tcon command.
68
77
  -p --purpose=description Description of session's purpose.
69
78
  --all Delete all existing sessions.
70
- -f --server-filter=regex Filter to select a subset of the servers.
71
- Should be valid ruby regex.
79
+ -f --server-filter=regex Filter to select a subset of the servers via
80
+ host names.
72
81
  -g --group-filter=regex Filter to select a subset of the servers via
73
- group membership. Should be valid ruby regex.
82
+ group membership.
83
+ -r --filter=regex Filter to select a subset of the servers via
84
+ host names or group membership.
85
+ Combines --server-filter and --group-filter.
74
86
  -c --command-file=file File containing the list of commands to be
75
87
  executed on remote server[s].
76
88
  -v --verbose Report how many servers were affected by the send
@@ -18,7 +18,8 @@ Usage:
18
18
  tcon delete (<session-name> | --all)
19
19
  tcon list
20
20
  tcon send <session-name> (<command> | --command-file=<file>)
21
- [--server-filter=<regex>] [--group-filter=<regex>] [--verbose]
21
+ [--server-filter=<regex>] [--group-filter=<regex>]
22
+ [--filter=<regex>] [--verbose]
22
23
  tcon --help
23
24
  tcon --version
24
25
 
@@ -27,14 +28,18 @@ Options:
27
28
  describes how new session is started. YAML format.
28
29
  <session-name> Name that identifies the session. Must be unique.
29
30
  <command> Command to be executed on remote server[s].
31
+ <regex> String that represents valid Ruby regex.
30
32
  -s --ssh-config=file Path to ssh config file [default: ~/.ssh/config].
31
33
  -n --session-name=name Name of the session to be used in the tcon command.
32
34
  -p --purpose=description Description of session's purpose.
33
35
  --all Delete all existing sessions.
34
- -f --server-filter=regex Filter to select a subset of the servers.
35
- Should be valid ruby regex.
36
+ -f --server-filter=regex Filter to select a subset of the servers via
37
+ host names.
36
38
  -g --group-filter=regex Filter to select a subset of the servers via
37
- group membership. Should be valid ruby regex.
39
+ group membership.
40
+ -r --filter=regex Filter to select a subset of the servers via
41
+ host names or group membership.
42
+ Combines --server-filter and --group-filter.
38
43
  -c --command-file=file File containing the list of commands to be
39
44
  executed on remote server[s].
40
45
  -v --verbose Report how many servers were affected by the send
@@ -7,10 +7,14 @@ module TmuxConnector
7
7
  end
8
8
 
9
9
  def run()
10
- sessions_data = TmuxConnector.list_sessions
11
- puts "sessions:"
12
- puts sessions_data.to_yaml
13
- puts "-" * 20
10
+ sessions_data = TmuxConnector.list_sessions suppress_error: true
11
+ if sessions_data.empty?
12
+ puts "No sessions found."
13
+ else
14
+ puts "sessions:"
15
+ puts sessions_data.to_yaml
16
+ puts "-" * 20
17
+ end
14
18
  end
15
19
  end
16
20
  end
@@ -20,6 +20,9 @@ module TmuxConnector
20
20
  @server_filter = Regexp.new(args['--server-filter']) rescue nil
21
21
  @group_filter = Regexp.new(args['--group-filter']) rescue nil
22
22
 
23
+ @server_filter ||= Regexp.new(args['--filter']) rescue nil
24
+ @group_filter ||= Regexp.new(args['--filter']) rescue nil
25
+
23
26
  @session = Session.load_by_name args['<session-name>']
24
27
  end
25
28
 
@@ -65,11 +65,12 @@ module TmuxConnector
65
65
  data.delete session_name
66
66
  open(MAIN_FILE, 'w') { |f| f.write data.to_yaml }
67
67
  File.delete(file) rescue nil
68
-
69
68
  end
70
69
 
71
- def self.list_sessions()
72
- raise "session file (#{ MAIN_FILE }) not found" unless File.exist? MAIN_FILE
70
+ def self.list_sessions(options={})
71
+ unless options[:suppress_error]
72
+ raise "session file (#{ MAIN_FILE }) not found" unless File.exist? MAIN_FILE
73
+ end
73
74
  return ( YAML.load_file(MAIN_FILE) rescue {} ) || {}
74
75
  end
75
76
 
@@ -1,10 +1,11 @@
1
1
  module TmuxConnector
2
2
  def self.delete_tmux_session(name)
3
+ system "tmux detach -s #{ name } &> /dev/null"
3
4
  system "tmux kill-session -t #{ name } &> /dev/null"
4
5
  end
5
6
 
6
7
  def self.delete_all_tmux_sessions()
7
- sessions_list = %x( tmux list-sessions &> /dev/null )
8
+ sessions_list = %x( tmux list-sessions 2> /dev/null)
8
9
  sessions = sessions_list.scan(/^([^:]+): /).map(&:first)
9
10
  sessions.each { |e| delete_tmux_session e }
10
11
  end
@@ -38,9 +39,11 @@ module TmuxConnector
38
39
  def send_commands(send_commands, server_regex, group_regex, verbose)
39
40
  count = 0
40
41
  each_pane do |window_index, pane_index, host|
41
- if( (server_regex.nil? || host.ssh_name.match(server_regex)) &&
42
- (group_regex.nil? || host.group_id.match(group_regex) ||
43
- session.merge_rules[host.group_id].match(group_regex)) )
42
+ matches = server_regex.nil? && group_regex.nil?
43
+ matches ||= !server_regex.nil? && host.ssh_name.match(server_regex)
44
+ matches ||= !group_regex.nil? && session.merge_rules[host.group_id].match(group_regex)
45
+
46
+ if matches
44
47
  system("tmux send-keys -t #{ name }:#{ window_index }.#{ pane_index } '#{ send_commands }' C-m")
45
48
  count += 1
46
49
  end
@@ -1,3 +1,3 @@
1
1
  module TmuxConnector
2
- VERSION = "0.0.2"
2
+ VERSION = "0.0.3"
3
3
  end
@@ -7,10 +7,10 @@ Gem::Specification.new do |gem|
7
7
  gem.name = "tmux-connector"
8
8
  gem.version = TmuxConnector::VERSION
9
9
  gem.authors = ["Ivan Kusalic"]
10
- gem.email = ["ikusalic@gmail.com"] # TODO
10
+ gem.email = ["ivan@ikusalic.com"]
11
11
  gem.summary = %q{Manage multiple servers using SSH and tmux.}
12
12
  gem.description = %q{tcon enables establishing connections (ssh) to multiple servers and executing commands on those servers. The sessions can be persisted (actually recreated) even after computer restarts. Complex sessions with different layouts for different kinds of servers can be easily created.}
13
- gem.homepage = "http://github.com/ikusalic" # TODO
13
+ gem.homepage = "http://www.ikusalic.com"
14
14
 
15
15
  gem.add_dependency('docopt')
16
16
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tmux-connector
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-05-14 00:00:00.000000000 Z
12
+ date: 2013-05-29 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: docopt
@@ -32,7 +32,7 @@ description: tcon enables establishing connections (ssh) to multiple servers and
32
32
  after computer restarts. Complex sessions with different layouts for different kinds
33
33
  of servers can be easily created.
34
34
  email:
35
- - ikusalic@gmail.com
35
+ - ivan@ikusalic.com
36
36
  executables:
37
37
  - tcon
38
38
  extensions: []
@@ -61,7 +61,7 @@ files:
61
61
  - lib/tmux-connector/tmux_handler.rb
62
62
  - lib/tmux-connector/version.rb
63
63
  - tmux-connector.gemspec
64
- homepage: http://github.com/ikusalic
64
+ homepage: http://www.ikusalic.com
65
65
  licenses: []
66
66
  post_install_message:
67
67
  rdoc_options: []