ecl 1.2.1 → 3.0.0.pre.alpha1

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.
Files changed (42) hide show
  1. checksums.yaml +5 -5
  2. data/.gitignore +0 -1
  3. data/Gemfile +1 -0
  4. data/Gemfile.lock +48 -0
  5. data/README.md +112 -89
  6. data/Rakefile +1 -0
  7. data/eclair.gemspec +7 -4
  8. data/exe/ecl +62 -4
  9. data/lib/eclair.rb +21 -18
  10. data/lib/eclair/color.rb +3 -0
  11. data/lib/eclair/config.rb +68 -21
  12. data/lib/eclair/grid.rb +242 -274
  13. data/lib/eclair/group_item.rb +33 -0
  14. data/lib/eclair/item.rb +42 -0
  15. data/lib/eclair/less_viewer.rb +2 -1
  16. data/lib/eclair/provider.rb +15 -0
  17. data/lib/eclair/providers/ec2.rb +2 -0
  18. data/lib/eclair/providers/ec2/ec2_group_item.rb +16 -0
  19. data/lib/eclair/providers/ec2/ec2_item.rb +136 -0
  20. data/lib/eclair/providers/ec2/ec2_provider.rb +118 -0
  21. data/lib/eclair/providers/gce.rb +2 -0
  22. data/lib/eclair/providers/gce/gce_group_item.rb +15 -0
  23. data/lib/eclair/providers/gce/gce_item.rb +117 -0
  24. data/lib/eclair/providers/gce/gce_provider.rb +34 -0
  25. data/lib/eclair/providers/k8s.rb +2 -0
  26. data/lib/eclair/providers/k8s/k8s_group_item.rb +15 -0
  27. data/lib/eclair/providers/k8s/k8s_item.rb +92 -0
  28. data/lib/eclair/providers/k8s/k8s_provider.rb +34 -0
  29. data/lib/eclair/version.rb +2 -1
  30. data/out.gif +0 -0
  31. data/templates/eclrc.template +81 -35
  32. metadata +60 -27
  33. data/bin/console +0 -10
  34. data/lib/eclair/cell.rb +0 -101
  35. data/lib/eclair/column.rb +0 -52
  36. data/lib/eclair/console.rb +0 -56
  37. data/lib/eclair/group.rb +0 -55
  38. data/lib/eclair/helpers/aws_helper.rb +0 -157
  39. data/lib/eclair/helpers/benchmark_helper.rb +0 -19
  40. data/lib/eclair/helpers/common_helper.rb +0 -24
  41. data/lib/eclair/instance.rb +0 -165
  42. data/lib/eclair/matcher.rb +0 -19
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: c8c4127b7ce838a2a736346aab64dcaf82357641
4
- data.tar.gz: b90734a950059c756fc3c84fe16a16e4c6c05bb6
2
+ SHA256:
3
+ metadata.gz: 26b729fe35fb071861abc7905ad29bb47b7ef3cbf0c41154f88dcb79bfdb7206
4
+ data.tar.gz: 00416e67138a83c0ab4775da8d64ca9ddfb361d9a1ef5ad38783799985ff1d45
5
5
  SHA512:
6
- metadata.gz: 43e1dcf11d56c776bd9b5b9da208eb1b35fd7253ef2b5b00e9467e53be2d320ee44b5304d49f69333746efbdbbd0b5089baf40b2b93e83776f8f4ce1b7066198
7
- data.tar.gz: 364e71b80c302d94b79965e84771483be25081dce64c5621df9e95e32a8478f5a09e7f628828b61d4406663a474a33d913f6dd6c315d6afa9afc19bdbf2996b5
6
+ metadata.gz: 303f74e1a7d1b664c7e60fab94c1632fb22ab392e2efd3b6feed74b63b85707ee79c51916742cbee7637a451c981edb44f8e17de6866672a5a827ea6deb33fe1
7
+ data.tar.gz: 1712067f06e506d7f89a927bdef263a9c65a7035916d239c0e834e9d2de0fc081e44989eca1cdd1a9c2404c7cce3d62262ed594fe33475ca98f1b8683582e4ce
data/.gitignore CHANGED
@@ -1,6 +1,5 @@
1
1
  /.bundle/
2
2
  /.yardoc
3
- /Gemfile.lock
4
3
  /_yardoc/
5
4
  /coverage/
6
5
  /doc/
data/Gemfile CHANGED
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  source 'https://rubygems.org'
2
3
 
3
4
  # Specify your gem's dependencies in eclair.gemspec
data/Gemfile.lock ADDED
@@ -0,0 +1,48 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ ecl (3.0.0.pre.alpha1)
5
+ aws-sdk-ec2 (~> 1.18)
6
+ curses (~> 1.0)
7
+ json (~> 2.1)
8
+ oj (~> 3.3)
9
+ pry (~> 0.10)
10
+ ruby-string-match-scorer (~> 0.1)
11
+
12
+ GEM
13
+ remote: https://rubygems.org/
14
+ specs:
15
+ aws-eventstream (1.0.3)
16
+ aws-partitions (1.167.0)
17
+ aws-sdk-core (3.53.1)
18
+ aws-eventstream (~> 1.0, >= 1.0.2)
19
+ aws-partitions (~> 1.0)
20
+ aws-sigv4 (~> 1.1)
21
+ jmespath (~> 1.0)
22
+ aws-sdk-ec2 (1.87.0)
23
+ aws-sdk-core (~> 3, >= 3.53.0)
24
+ aws-sigv4 (~> 1.1)
25
+ aws-sigv4 (1.1.0)
26
+ aws-eventstream (~> 1.0, >= 1.0.2)
27
+ coderay (1.1.2)
28
+ curses (1.3.1)
29
+ jmespath (1.4.0)
30
+ json (2.2.0)
31
+ method_source (0.9.2)
32
+ oj (3.7.12)
33
+ pry (0.12.2)
34
+ coderay (~> 1.1.0)
35
+ method_source (~> 0.9.0)
36
+ rake (12.3.2)
37
+ ruby-string-match-scorer (0.1.0)
38
+
39
+ PLATFORMS
40
+ ruby
41
+
42
+ DEPENDENCIES
43
+ bundler (~> 2.0)
44
+ ecl!
45
+ rake (~> 12.3)
46
+
47
+ BUNDLED WITH
48
+ 2.0.1
data/README.md CHANGED
@@ -1,114 +1,137 @@
1
- # Eclair
1
+ eclair [![RubyGems total downloads]][RubyGems]
2
+ ========
3
+ ![A video showing how Eclair works]
2
4
 
3
5
  Simple ssh helper for Amazon EC2
4
6
 
5
- ## Requirements
6
-
7
- tmux
8
- ~/.aws/credentials (created by AWS CLI)
7
+ Requirements
8
+ --------
9
+ - tmux > 2.0
10
+ - Properly configured `~/.aws/credentials`
9
11
 
10
- ## Installation
12
+ Installation
13
+ --------
14
+ ```console
15
+ $ gem install ecl
16
+ ```
11
17
 
12
- $ gem install ecl
18
+ ### Install from Source
19
+ If you want to use the latest functionalities, install Eclair from the source.
20
+ ```bash
21
+ # Headers of ncursesw is required to build Eclair in GNU/Linux
22
+ sudo apt-get install libncursesw5-dev # Debian, Ubuntu, etc
23
+ sudo yum install libncursesw5-devel # CentOS, etc
13
24
 
14
- ## Usage
15
-
16
- $ ecl
25
+ # Build latest eclair gem
26
+ gem build eclair.gemspec
17
27
 
18
- First execution will create ~/.eclrc file. Edit this file and run again.
28
+ # Install eclair into your system
29
+ gem install ecl-3.0.0.pre.alpha1.gem
30
+ ```
19
31
 
20
- ## Configurations
32
+ ## Usage
33
+ ```console
34
+ $ ecl
35
+ ```
36
+ First execution will create `~/.ecl/config.rb` file. Edit this file and run again.
21
37
 
38
+ Configurations
39
+ --------
22
40
  ### aws_region
23
-
24
41
  AWS region to connect.
25
-
26
- config.aws_region = "ap-northeast-1"
42
+ ```ruby
43
+ config.aws_region = "ap-northeast-1"
44
+ ```
27
45
 
28
46
  ### columns
29
-
30
47
  Max number of columns displayed in eclair.
31
-
32
- $ config.columns = 4
33
-
34
- ### ssh_username
35
-
36
- Function to find username from image.
37
- Returns username of given image.
38
- Uses image data from [EC2::Client#describe_images](https://docs.aws.amazon.com/AWSRubySDK/latest/AWS/EC2/Client.html#describe_images-instance_method) API call
39
-
40
- config.ssh_username = lambda do |image|
41
- case image.name
42
- when /ubuntu/
43
- "ubuntu"
44
- else
45
- "ec2-user"
46
- end
47
- end
48
+ ```ruby
49
+ config.columns = 4
50
+ ```
51
+
52
+ ### ssh_username
53
+ Function to find username from image. Returns username of given image. Uses
54
+ image data from [EC2::Client#describe_images] API call.
55
+
56
+ ```ruby
57
+ config.ssh_username = lambda do |image|
58
+ case image.name
59
+ when /ubuntu/
60
+ "ubuntu"
61
+ else
62
+ "ec2-user"
63
+ end
64
+ end
65
+ ```
48
66
 
49
67
  ### group_by
50
-
51
- Function to find group name from instance.
52
- Returns group name from instance data.
53
- Uses instance data from [EC2::Client#describe_instances](https://docs.aws.amazon.com/AWSRubySDK/latest/AWS/EC2/Client.html#describe_instances-instance_method) API call.
54
-
55
- Example)
56
- Group by security groups.
57
-
58
- config.group_by = lambda do |instance|
59
- if instance.security_groups.first
60
- instance.security_groups.first.group_name
61
- else
62
- "no_group"
63
- end
64
- end
65
-
66
- Group by instance name.
67
-
68
- config.group_by = lambda do |instance|
69
- nametag = instance.tags.find{|t| t.key == "Name"}
70
- return "Noname" unless nametag
71
- case nametag.value
72
- when /^production/
73
- "production servers"
74
- when /^test/
75
- "test servers"
76
- end
77
- end
78
-
79
- Do not group instances.
80
-
81
- config.group_by = nil
82
-
68
+ Function to find group name from instance. Returns group name from instance
69
+ data. Uses instance data from [EC2::Client#describe_instances] API call.
70
+
71
+ You can group instances by security groups with this config:
72
+ ```ruby
73
+ config.group_by = lambda do |instance|
74
+ if instance.security_groups.first
75
+ instance.security_groups.first.group_name
76
+ else
77
+ "no_group"
78
+ end
79
+ end
80
+ ```
81
+
82
+ Grouping by instance name is also possible:
83
+ ```ruby
84
+ config.group_by = lambda do |instance|
85
+ case instance.name
86
+ when /^production/
87
+ "production servers"
88
+ when /^test/
89
+ "test servers"
90
+ end
91
+ end
92
+ ```
93
+
94
+ You can disable grouping by assigning nil:
95
+ ```ruby
96
+ config.group_by = nil
97
+ ```
83
98
 
84
99
  ### ssh_ports
85
- Port numbers to try ssh.
86
-
87
- config.ssh_ports = [1234, 22]
88
-
100
+ Port numbers to try ssh.
101
+ ```ruby
102
+ config.ssh_ports = [1234, 22]
103
+ ```
89
104
 
90
105
  ### ssh_options
91
106
  Extra options passed to ssh.
92
-
93
- config.ssh_options = "-o ConnectTimeout=1 -o StrictHostKeyChecking=no"
107
+ ```ruby
108
+ config.ssh_options = "-o ConnectTimeout=1 -o StrictHostKeyChecking=no"
109
+ ```
94
110
 
95
111
  ### ssh_hostname
96
- Hostname to use in ssh.
97
- Choose from :public_dns_name, :public_ip_address, :private_dns_name, :private_ip_address
98
-
99
- config.ssh_hostname = :public_ip_address
100
-
112
+ Hostname to use in ssh. Choose from `:public_dns_name`, `:public_ip_address`,
113
+ `:private_dns_name`, `:private_ip_address`
114
+ ```ruby
115
+ config.ssh_hostname = :public_ip_address
116
+ ```
101
117
 
102
118
  ### ssh_keys
103
- Hash of EC2 keypair name => key_path in local.
104
- If your key has been already registered in ssh-agent, you don't have to configure this.
105
-
106
- config.ssh_keys = {
107
- "keypair1" => "/path/to/key1",
108
- "keypair2" => "/path/to/key2",
109
- }
110
-
111
- ## License
112
-
113
- The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).
114
-
119
+ Hash of EC2 keypair name => key_path in local. If your key has been already
120
+ registered in ssh-agent, you don't have to configure this.
121
+ ```ruby
122
+ config.ssh_keys = {
123
+ "keypair1" => "/path/to/key1",
124
+ "keypair2" => "/path/to/key2",
125
+ }
126
+ ```
127
+
128
+ License
129
+ --------
130
+ The gem is available as open source under the terms of the [MIT License].
131
+
132
+ [RubyGems]: https://rubygems.org/gems/ecl
133
+ [RubyGems total downloads]: https://badgen.net/rubygems/dt/ecl
134
+ [A video showing how Eclair works]: out.gif
135
+ [EC2::Client#describe_images]: https://docs.aws.amazon.com/AWSRubySDK/latest/AWS/EC2/Client.html#describe_images-instance_method
136
+ [EC2::Client#describe_instances]: https://docs.aws.amazon.com/AWSRubySDK/latest/AWS/EC2/Client.html#describe_instances-instance_method
137
+ [MIT License]: http://opensource.org/licenses/MIT
data/Rakefile CHANGED
@@ -1 +1,2 @@
1
+ # frozen_string_literal: true
1
2
  require "bundler/gem_tasks"
data/eclair.gemspec CHANGED
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  # coding: utf-8
2
3
  lib = File.expand_path('../lib', __FILE__)
3
4
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
@@ -19,11 +20,13 @@ Gem::Specification.new do |spec|
19
20
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
20
21
  spec.require_paths = ["lib"]
21
22
 
22
- spec.add_development_dependency "bundler", "~> 1.10"
23
- spec.add_development_dependency "rake", "~> 10.0"
23
+ spec.add_development_dependency "bundler", "~> 2.0"
24
+ spec.add_development_dependency "rake", "~> 12.3"
24
25
 
25
- spec.add_runtime_dependency "aws-sdk", "~> 2"
26
+ spec.add_runtime_dependency "aws-sdk-ec2", "~> 1.18"
26
27
  spec.add_runtime_dependency "curses", "~> 1.0"
27
- spec.add_runtime_dependency "pry", "~> 0.10"
28
28
  spec.add_runtime_dependency "ruby-string-match-scorer", "~> 0.1"
29
+ spec.add_runtime_dependency "pry", "~> 0.10"
30
+ spec.add_runtime_dependency "json", "~> 2.1"
31
+ spec.add_runtime_dependency "oj", "~> 3.3"
29
32
  end
data/exe/ecl CHANGED
@@ -1,6 +1,64 @@
1
1
  #!/usr/bin/env ruby
2
- require 'eclair'
2
+ # frozen_string_literal: true
3
3
 
4
- Eclair::Console.init
5
- # Eclair::Grid.assign
6
- # Eclair::Prompt.run!
4
+ require "eclair"
5
+ require "eclair/grid"
6
+
7
+ Eclair.init_config
8
+ Curses.init_screen
9
+ Curses.stdscr.timeout = 100
10
+ Curses.stdscr.keypad = true
11
+ Curses.start_color
12
+ Curses.use_default_colors
13
+ Curses.crmode
14
+ Curses.noecho
15
+ Curses.ESCDELAY = 25
16
+ trap("INT") { exit }
17
+
18
+ if ARGV.empty?
19
+ grid = Eclair::Grid.new
20
+ else
21
+ grid = Eclair::Grid.new(ARGV[0])
22
+ end
23
+
24
+ loop do
25
+ case grid.mode
26
+ when :nav, :sel
27
+ Curses.curs_set(0)
28
+ case k = Curses.stdscr.getch
29
+ when Curses::KEY_RESIZE
30
+ grid.resize
31
+ when Curses::KEY_LEFT, Curses::KEY_RIGHT, Curses::KEY_UP, Curses::KEY_DOWN, ?h, ?j, ?k, ?l
32
+ grid.move(k)
33
+ when " "
34
+ grid.space
35
+ when 10 # enter
36
+ grid.action
37
+ when "/"
38
+ grid.start_search
39
+ grid.clear_search
40
+ when "!"
41
+ Curses.close_screen
42
+ require 'pry'
43
+ binding.pry
44
+ exit
45
+ when ?q
46
+ exit
47
+ when 27 # escape
48
+ grid.clear_search
49
+ end
50
+ when :search
51
+ Curses.curs_set(1)
52
+ case k = Curses.stdscr.getch
53
+ when Curses::KEY_RESIZE
54
+ grid.resize
55
+ when 10 # enter
56
+ grid.end_search
57
+ when 27 # escape
58
+ grid.clear_search
59
+ grid.end_search
60
+ else
61
+ grid.append_search(k)
62
+ end
63
+ end
64
+ end
data/lib/eclair.rb CHANGED
@@ -1,22 +1,25 @@
1
+ # frozen_string_literal: true
1
2
  module Eclair
2
3
  end
3
4
 
4
- require "curses"
5
- require "aws-sdk"
6
- require "string_scorer"
7
- require "pry"
8
-
9
- require "eclair/helpers/benchmark_helper"
10
- require "eclair/helpers/common_helper"
11
- require "eclair/helpers/aws_helper"
12
- require "eclair/config"
13
- require "eclair/version"
14
- require "eclair/less_viewer"
15
- require "eclair/grid"
16
- require "eclair/column"
17
- require "eclair/cell"
18
- require "eclair/group"
19
- require "eclair/instance"
20
- require "eclair/console"
21
- require "eclair/color"
5
+ require "eclair/providers/ec2"
22
6
 
7
+ # require "curses"
8
+ # require "zlib"
9
+ # require "aws-sdk"
10
+ # require "string_scorer"
11
+ # require "pry"
12
+ # require "eclair/item"
13
+ # require "eclair/helpers/benchmark_helper"
14
+ # require "eclair/helpers/common_helper"
15
+ # require "eclair/helpers/aws_helper"
16
+ # require "eclair/config"
17
+ # require "eclair/version"
18
+ # require "eclair/less_viewer"
19
+ # require "eclair/grid"
20
+ # require "eclair/column"
21
+ # require "eclair/cell"
22
+ # require "eclair/group"
23
+ # require "eclair/instance"
24
+ # require "eclair/console"
25
+ # require "eclair/color"
data/lib/eclair/color.rb CHANGED
@@ -1,3 +1,6 @@
1
+ # frozen_string_literal: true
2
+ require 'curses'
3
+
1
4
  module Eclair
2
5
  module Color
3
6
  extend self