ecl 1.2.1 → 3.0.0.pre.alpha1

Sign up to get free protection for your applications and to get access to all the features.
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