rancher-shell 0.2.2 → 0.3.0.pre.alpha3

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: c371eb0ab8cc29cafd830e21d319c0847e1ca720
4
- data.tar.gz: 070beb3507b2539f67bd9464e8d97a485fe79ad8
3
+ metadata.gz: dbda750261215c71859616b4119877507a5a1262
4
+ data.tar.gz: be31cf59794281f7d00fb864800697f734514a62
5
5
  SHA512:
6
- metadata.gz: 6de526b73b46fda939e5ef296edfd5ae9effa9482f7ef3c4aad2be947123736a69c1edca42e77ace68a105ceb72389324480214d7668228edc5f49358725b231
7
- data.tar.gz: c667dd9c4082e38662def6f7ec3386a3e4909c808a929bdf3e3d9bfc6d99c6106ed1edb71e3125edd62694fc2d71f8eb13af736abdd7d052742091e0c8ae14bd
6
+ metadata.gz: 689e599c4460ea827c7c7eb4f6ef498b5e72331e9d790b82669ce1382e556ccfde8566d5b16b50e65453b6ac152318fc62e4b741311791e8947ed301a880f032
7
+ data.tar.gz: aaac2e652a5adc97c17e588ca42d9e06a2dc5b97a02e67f52e38801de1199e886e1fc66d5588f0e2de77738fd2880897d1734191208466fe9a45637182a8395a
data/.gitignore CHANGED
@@ -2,3 +2,5 @@
2
2
  .env
3
3
  *.gem
4
4
  .rancher-shell.yml
5
+ coverage
6
+ .ruby-version
data/.simplecov ADDED
@@ -0,0 +1,6 @@
1
+ require "codeclimate-test-reporter"
2
+
3
+ SimpleCov.start do
4
+ add_filter "spec"
5
+ add_group "Commands", "lib/rancher/shell/commands"
6
+ end
data/Gemfile.lock CHANGED
@@ -1,53 +1,64 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- rancher-shell (0.2.1)
5
- activesupport (~> 5.0.0)
6
- event_emitter (~> 0.2.5)
7
- thor (~> 0.19.1)
8
- websocket (~> 1.2.3)
4
+ rancher-shell (0.3.0.pre.alpha2)
5
+ activesupport (~> 5.1.5)
6
+ event_emitter (~> 0.2.6)
7
+ thor (~> 0.20.0)
8
+ websocket (~> 1.2.5)
9
9
 
10
10
  GEM
11
11
  remote: https://rubygems.org/
12
12
  specs:
13
- activesupport (5.0.0)
13
+ activesupport (5.1.5)
14
14
  concurrent-ruby (~> 1.0, >= 1.0.2)
15
15
  i18n (~> 0.7)
16
16
  minitest (~> 5.1)
17
17
  tzinfo (~> 1.1)
18
- concurrent-ruby (1.0.2)
19
- diff-lcs (1.2.5)
20
- event_emitter (0.2.5)
21
- i18n (0.7.0)
22
- minitest (5.9.0)
23
- rake (11.2.2)
24
- rspec (3.5.0)
25
- rspec-core (~> 3.5.0)
26
- rspec-expectations (~> 3.5.0)
27
- rspec-mocks (~> 3.5.0)
28
- rspec-core (3.5.1)
29
- rspec-support (~> 3.5.0)
30
- rspec-expectations (3.5.0)
18
+ codeclimate-test-reporter (1.0.8)
19
+ simplecov (<= 0.13)
20
+ concurrent-ruby (1.0.5)
21
+ diff-lcs (1.3)
22
+ docile (1.1.5)
23
+ event_emitter (0.2.6)
24
+ i18n (0.9.5)
25
+ concurrent-ruby (~> 1.0)
26
+ json (2.1.0)
27
+ minitest (5.11.3)
28
+ rake (12.3.0)
29
+ rspec (3.7.0)
30
+ rspec-core (~> 3.7.0)
31
+ rspec-expectations (~> 3.7.0)
32
+ rspec-mocks (~> 3.7.0)
33
+ rspec-core (3.7.1)
34
+ rspec-support (~> 3.7.0)
35
+ rspec-expectations (3.7.0)
31
36
  diff-lcs (>= 1.2.0, < 2.0)
32
- rspec-support (~> 3.5.0)
33
- rspec-mocks (3.5.0)
37
+ rspec-support (~> 3.7.0)
38
+ rspec-mocks (3.7.0)
34
39
  diff-lcs (>= 1.2.0, < 2.0)
35
- rspec-support (~> 3.5.0)
36
- rspec-support (3.5.0)
37
- thor (0.19.1)
38
- thread_safe (0.3.5)
39
- tzinfo (1.2.2)
40
+ rspec-support (~> 3.7.0)
41
+ rspec-support (3.7.1)
42
+ simplecov (0.13.0)
43
+ docile (~> 1.1.0)
44
+ json (>= 1.8, < 3)
45
+ simplecov-html (~> 0.10.0)
46
+ simplecov-html (0.10.2)
47
+ thor (0.20.0)
48
+ thread_safe (0.3.6)
49
+ tzinfo (1.2.5)
40
50
  thread_safe (~> 0.1)
41
- websocket (1.2.3)
51
+ websocket (1.2.5)
42
52
 
43
53
  PLATFORMS
44
54
  ruby
45
55
 
46
56
  DEPENDENCIES
47
- bundler (~> 1.12.5)
48
- rake (~> 11.2.2)
57
+ bundler (>= 1.15.4)
58
+ codeclimate-test-reporter (~> 1.0.8)
59
+ rake (~> 12.3.0)
49
60
  rancher-shell!
50
- rspec (~> 3.5.0)
61
+ rspec (~> 3.7.0)
51
62
 
52
63
  BUNDLED WITH
53
- 1.12.5
64
+ 1.16.1
data/README.md CHANGED
@@ -1,7 +1,10 @@
1
1
  # RancherShell
2
2
 
3
3
  [![Gem Version](https://badge.fury.io/rb/rancher-shell.svg)](https://badge.fury.io/rb/rancher-shell)
4
- [![Build Status](https://travis-ci.org/marcqualie/rancher-shell.svg?branch=master)](https://travis-ci.org/marcqualie/rancher-shell)
4
+ [![CircleCI](https://circleci.com/gh/marcqualie/rancher-shell.svg?style=shield)](https://circleci.com/gh/marcqualie/rancher-shell)
5
+ [![Code Climate](https://codeclimate.com/github/marcqualie/rancher-shell/badges/gpa.svg)](https://codeclimate.com/github/marcqualie/rancher-shell)
6
+ [![Test Coverage](https://codeclimate.com/github/marcqualie/rancher-shell/badges/coverage.svg)](https://codeclimate.com/github/marcqualie/rancher-shell/coverage)
7
+ [![Issue Count](https://codeclimate.com/github/marcqualie/rancher-shell/badges/issue_count.svg)](https://codeclimate.com/github/marcqualie/rancher-shell)
5
8
 
6
9
  A console utility for shelling into [Rancher](http://rancher.com) containers
7
10
 
data/circle.yml ADDED
@@ -0,0 +1,15 @@
1
+ machine:
2
+ ruby:
3
+ version: 2.4.2
4
+
5
+ dependencies:
6
+ cache_directories:
7
+ - "vendor/bundle"
8
+ override:
9
+ - gem install bundler
10
+ - bundle install -j4 --path vendor/bundle
11
+
12
+ test:
13
+ override:
14
+ - bundle exec rspec --format documentation
15
+ - bundle exec codeclimate-test-reporter
@@ -0,0 +1,11 @@
1
+ require "rancher/shell"
2
+ require "rancher/shell/api_response"
3
+ require "rancher/shell/api"
4
+ require "rancher/shell/cli"
5
+ require "rancher/shell/config"
6
+ require "rancher/shell/logger_helper"
7
+ require "rancher/shell/logger"
8
+ require "rancher/shell/version"
9
+ require "rancher/shell/websocket_client"
10
+
11
+ require "rancher/shell/commands/exec"
@@ -9,10 +9,12 @@ module Rancher
9
9
  user: nil,
10
10
  pass: nil,
11
11
  host: 'rancher.example.com',
12
+ environment: nil,
12
13
  }
13
14
 
14
15
  def initialize options = {}
15
16
  @options = DEFAULT_OPTIONS.merge options
17
+ raise "Environment is required for Rancher version 1.3+" unless @options[:environment].is_a?(String)
16
18
  end
17
19
 
18
20
  def get resource, data = nil, headers = {}
@@ -24,7 +26,7 @@ module Rancher
24
26
  end
25
27
 
26
28
  def request method_name, resource, data, headers
27
- uri = URI "https://#{@options[:host]}/v1/#{resource}"
29
+ uri = URI "https://#{@options[:host]}/v1/projects/#{@options[:environment]}/#{resource}"
28
30
  Net::HTTP.start uri.host, uri.port, use_ssl: true do |http|
29
31
  method_class_name = "Net::HTTP::#{method_name.to_s.split('_').map(&:capitalize).join}"
30
32
  method_class = Object.const_get method_class_name
@@ -6,6 +6,8 @@ require 'thor'
6
6
  module Rancher
7
7
  module Shell
8
8
  class CLI < Thor
9
+ include LoggerHelper
10
+
9
11
  map %w[-v --version] => :version
10
12
  desc 'version', 'display gem version'
11
13
  def version
@@ -21,6 +23,7 @@ module Rancher
21
23
  'project' => options[:project],
22
24
  'container' => options[:container],
23
25
  'stack' => options[:stack],
26
+ 'environment' => options[:environment],
24
27
  'command' => command,
25
28
  )
26
29
  instance = Rancher::Shell::Commands::Exec.new
@@ -65,6 +68,32 @@ module Rancher
65
68
  print "\n"
66
69
  end
67
70
  end
71
+
72
+ desc "logs", "Display logs"
73
+ option :tail, aliases: '-t'
74
+ option :lines, aliases: '-n'
75
+ def logs
76
+ filename = logger.instance_variable_get(:'@logdev').filename
77
+ tail_command = "tail#{options[:tail] ? " -f -n#{options[:lines] || 0}" : " -n#{options[:lines] || 10}"} #{filename}"
78
+ puts "==> displaying logs from #{filename} <=="
79
+ puts " #{tail_command}"
80
+ begin
81
+ if options[:tail]
82
+ f = IO.popen(tail_command.split(' '))
83
+ loop do
84
+ Kernel.select([f])
85
+ while line = f.gets do
86
+ puts line
87
+ end
88
+ end
89
+ else
90
+ puts `#{tail_command}`
91
+ end
92
+ rescue Exception => e
93
+ puts " #{e.message}"
94
+ puts "==> end of log output <=="
95
+ end
96
+ end
68
97
  end
69
98
  end
70
99
  end
@@ -23,10 +23,10 @@ module Rancher
23
23
 
24
24
  def listen!
25
25
  begin
26
- logger.info "listening"
26
+ logger.info "listening for keyboaard input"
27
27
  system("stty raw")
28
28
  while input = STDIN.getc
29
- @websocket.send Base64.encode64 input
29
+ @websocket.send(Base64.encode64 input)
30
30
  end
31
31
  ensure
32
32
  system("stty -raw echo")
@@ -34,16 +34,18 @@ module Rancher
34
34
  end
35
35
 
36
36
  def setup_api!
37
+ logger.info "authorizing with #{@config['project']['api']['host']}"
37
38
  @api = Rancher::Shell::Api.new(
38
39
  host: @config['project']['api']['host'],
39
40
  user: @config['project']['api']['key'],
40
41
  pass: @config['project']['api']['secret'],
42
+ environment: @config['project']['api']['environment'],
41
43
  )
42
44
  end
43
45
 
44
46
  def retrieve_containers!
45
47
  @response = @api.get(
46
- "containers",
48
+ "containers?limit=1000",
47
49
  )
48
50
  @containers = @response.json['data'].map do |container|
49
51
  {
@@ -51,8 +53,13 @@ module Rancher
51
53
  'name' => container['name'],
52
54
  'state' => container['state'],
53
55
  'ports' => container['ports'],
56
+ 'stack' => container['labels'] && container['labels']['io.rancher.stack.name'],
54
57
  }
55
58
  end
59
+ logger.debug " containers #{@containers.count}"
60
+ @containers.sort_by { |container| "#{container['stack']}/#{container['name']}" }.each do |container|
61
+ logger.debug " #{container['stack']} / #{container['name']} #{container['state']}"
62
+ end
56
63
  @container = @containers.find { |container| container['name'] === @config['options']['container'] }
57
64
  exit_with_error "could not find container: #{@config['options']['container']}" unless @container
58
65
  end
@@ -61,38 +68,41 @@ module Rancher
61
68
  logger.info "container = #{@container['id']}"
62
69
  # default_bash_command = "TERM=xterm-256color; export TERM; [ -x /bin/bash ] && ([ -x /usr/bin/script ] && /usr/bin/script -q -c \"/bin/bash\" /dev/null || exec /bin/bash) || exec /bin/sh"
63
70
  # @config['options']['command'] = default_bash_command if @config['options']['command'] === 'bash'
64
- logger.debug "running command: #{@config['options']['command']}"
71
+ bash_command = @config['options']['command']
72
+ logger.debug "running command: #{bash_command}"
65
73
  @response = @api.post(
66
74
  "containers/#{@container['id']}?action=execute",
67
75
  "command" => [
68
76
  "/bin/sh",
69
77
  "-c",
70
- @config['options']['command'],
78
+ bash_command,
71
79
  ],
72
80
  "attachStdin" => true,
73
81
  "attachStdout" => true,
74
82
  "tty" => true,
75
83
  )
76
84
  websocket_url = "#{@response.json['url']}?token=#{@response.json['token']}"
77
- logger.info "connecting to #{@response.json['url']} ..."
85
+ logger.info "connecting to #{@response.json['url']}"
78
86
  @websocket = Rancher::Shell::WebsocketClient.new websocket_url, headers: { 'Authorization' => "Bearer #{@response.json['token']}"}
79
87
  @websocket.on :open do |event|
80
- logger.info " connected!"
81
- end
82
- @websocket.on :chunk do |encoded_chunk|
83
- chunk = Base64.decode64 encoded_chunk
84
- emit :message, chunk
88
+ logger.info "connected to websocket"
85
89
  end
86
- @websocket.on :message do |data|
87
- $stdout.print data
90
+ @websocket.on :chunk do |chunk_encoded|
91
+ chunk_decoded = Base64.decode64(chunk_encoded)
92
+ chunk_codes = chunk_decoded.split('').map { |char| char.ord.to_s }
93
+ logger.debug("output: (#{chunk_decoded.length} bytes)")
94
+ logger.debug(" #{chunk_encoded}")
95
+ logger.debug(" #{chunk_codes.join(' ')}")
96
+ logger.debug(" #{chunk_decoded}")
97
+ $stdout.print(chunk_decoded)
88
98
  end
89
99
  @websocket.on :error do |event|
90
- logger.error "socket error: #{event}"
91
- Kernel.exit true
100
+ logger.error("socket error: #{event}")
101
+ Kernel.exit(true)
92
102
  end
93
103
  @websocket.on :close do
94
- logger.error "closed connection"
95
- Kernel.exit true
104
+ logger.info("server closed connection")
105
+ Kernel.exit(true)
96
106
  end
97
107
  end
98
108
  end
@@ -1,24 +1,43 @@
1
+ require "logger"
2
+
1
3
  module Rancher
2
4
  module Shell
3
- class Logger
4
- def debug message
5
- $stdout.puts "[#{DateTime.now.strftime '%Y-%m-%d %H:%M:%S'}] DEBUG -- : #{message}"
5
+ class Logger < ::Logger
6
+ def initialize(*args)
7
+ super
8
+ @formatter = Formatter.new
9
+ # TODO: Use whitelist here for better security
10
+ @level = ::Logger.const_get(ENV['LOG_LEVEL'].upcase) rescue ::Logger::INFO
6
11
  end
7
12
 
8
- def info message
9
- $stdout.puts "[#{DateTime.now.strftime '%Y-%m-%d %H:%M:%S'}] INFO -- : #{message}"
10
- end
13
+ class Formatter < ::Logger::Formatter
14
+ # Default: "%s, [%s#%d] %5s -- %s: %s\n"
15
+ Format = "%s, [%s#%d] %5s -- %s: [RANCHER::SHELL] %s\n"
11
16
 
12
- def error message
13
- $stderr.puts "[#{DateTime.now.strftime '%Y-%m-%d %H:%M:%S'}] ERROR -- : #{message}"
14
- end
15
-
16
- def warn message
17
- $stderr.puts "[#{DateTime.now.strftime '%Y-%m-%d %H:%M:%S'}] WARN -- : #{message}"
18
- end
17
+ def call(severity, time, progname, msg)
18
+ msg = sanitize_escape_sequences(msg)
19
+ Format % [severity[0..0], format_datetime(time), $$, severity, progname, msg2str(msg)]
20
+ end
19
21
 
20
- def out message
21
- $stdout.puts "[#{DateTime.now.strftime '%Y-%m-%d %H:%M:%S'}] -- : #{message}"
22
+ # Some escape charatcers cause weirdness within logs and STDOUT
23
+ # http://www.asciitable.com/
24
+ # https://en.wikipedia.org/wiki/ANSI_escape_code
25
+ def sanitize_escape_sequences(msg)
26
+ msg = msg.gsub("\r", "[CR]")
27
+ msg = msg.gsub("\n", "[LF]")
28
+ msg = msg.gsub(/\e\[A/, '[CUU]')
29
+ msg = msg.gsub(/\e\[B/, '[CUD]')
30
+ msg = msg.gsub(/\e\[2K/, '[CLEAR]')
31
+ msg = msg.gsub(/#{3.chr}/, '[ETX]')
32
+ msg = msg.gsub(/#{4.chr}/, '[EOT]')
33
+ msg = msg.gsub(/#{7.chr}/, '[BELL]')
34
+ msg = msg.gsub(/#{8.chr}/, '[BS]')
35
+ msg = msg.gsub(/#{9.chr}/, '[TAB]')
36
+ msg = msg.gsub(/#{24.chr}/, '[CAN]')
37
+ msg = msg.gsub(/#{27.chr}/, '[ESC]')
38
+ msg = msg.gsub(/#{127.chr}/, '[DEL]')
39
+ msg
40
+ end
22
41
  end
23
42
  end
24
43
  end
@@ -3,13 +3,16 @@ require 'rancher/shell/logger'
3
3
  module Rancher
4
4
  module Shell
5
5
  module LoggerHelper
6
+ DEFAULT_LOG_FILE = "/tmp/rancher-shell.log"
7
+
6
8
  def logger
7
- @logger ||= Logger.new
9
+ @log_file = ENV['RANCHER_SHELL_LOG_FILE'] && File.exist?(ENV['RANCHER_SHELL_LOG_FILE']) ? ENV['RANCHER_SHELL_LOG_FILE'] : DEFAULT_LOG_FILE
10
+ @logger ||= Logger.new(@log_file)
8
11
  end
9
12
 
10
- def exit_with_error message
11
- logger.error message
12
- Kernel.exit false
13
+ def exit_with_error(message)
14
+ logger.error(message)
15
+ Kernel.exit(false)
13
16
  end
14
17
  end
15
18
  end
@@ -1,5 +1,5 @@
1
1
  module Rancher
2
2
  module Shell
3
- VERSION = "0.2.2"
3
+ VERSION = "0.3.0-alpha3"
4
4
  end
5
5
  end
@@ -29,22 +29,19 @@ module Rancher
29
29
  @pipe_broken = false
30
30
  frame = ::WebSocket::Frame::Incoming::Client.new
31
31
  @closed = false
32
- once :__close do |err|
33
- close
34
- emit :close, err
35
- end
36
32
 
37
33
  @thread = Thread.new do
38
34
  while !@closed do
39
35
  begin
40
36
  unless recv_data = @socket.getc
41
- sleep 1
37
+ sleep 0.25
42
38
  next
43
39
  end
44
40
  unless @handshaked
45
41
  @handshake << recv_data
46
42
  if @handshake.finished?
47
43
  @handshaked = true
44
+ logger.debug("handshake complete")
48
45
  emit :open
49
46
  end
50
47
  else
@@ -54,47 +51,54 @@ module Rancher
54
51
  end
55
52
  end
56
53
  rescue => e
57
- puts "EMIT ERROR: #{e.to_yaml}"
54
+ puts "broken pipe error thing"
55
+ logger.error("EMIT ERROR: #{e.to_yaml}")
58
56
  emit :error, e
59
57
  end
60
58
  end
61
- puts "THREAD IS DEAD"
59
+ logger.error("THREAD IS DEAD")
62
60
  end
63
61
 
64
62
  @socket.write @handshake.to_s
65
63
  end
66
64
 
67
- def send(data, opt={:type => :text})
65
+ def send(data_encoded, opt={:type => :text})
66
+ data_decoded = Base64.decode64(data_encoded)
68
67
  if !@handshaked or @closed
69
- puts "closed socket.."
68
+ logger.warn("cannot send data because socket is closed")
70
69
  return
71
70
  end
72
71
  type = opt[:type]
73
- frame = ::WebSocket::Frame::Outgoing::Client.new(:data => data, :type => type, :version => @handshake.version)
72
+ data_codes = data_decoded.split('').map { |char| char.ord.to_s }
73
+ logger.debug("input: (#{data_encoded.length} bytes)")
74
+ logger.debug(" #{data_encoded}")
75
+ logger.debug(" #{data_codes.join(' ')}")
76
+ logger.debug(" #{data_decoded}")
77
+ frame = ::WebSocket::Frame::Outgoing::Client.new(:data => data_encoded, :type => type, :version => @handshake.version)
74
78
  begin
75
- @socket.write frame.to_s
79
+ @socket.write(frame.to_s)
76
80
  rescue Errno::EPIPE => e
81
+ puts "nroken pp"
77
82
  @pipe_broken = true
78
- emit :__close, e
83
+ emit :close, e
79
84
  end
80
85
  end
81
86
 
82
87
  def close
83
88
  return if @closed
89
+ logger.debug("client closed connection")
84
90
  if !@pipe_broken
85
91
  send nil, :type => :close
86
92
  end
87
93
  @closed = true
88
94
  @socket.close if @socket
89
95
  @socket = nil
90
- emit :__close
91
- Thread.kill @thread if @thread
96
+ Thread.kill(@thread) if @thread
92
97
  end
93
98
 
94
99
  def open?
95
100
  @handshake.finished? and !@closed
96
101
  end
97
-
98
102
  end
99
103
  end
100
104
  end
@@ -18,12 +18,13 @@ Gem::Specification.new do |spec|
18
18
  spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
19
19
  spec.require_paths = ["lib"]
20
20
 
21
- spec.add_dependency "websocket", "~> 1.2.3"
22
- spec.add_dependency "event_emitter", "~> 0.2.5"
23
- spec.add_dependency "thor", "~> 0.19.1"
24
- spec.add_dependency "activesupport", "~> 5.0.0"
21
+ spec.add_dependency "websocket", "~> 1.2.5"
22
+ spec.add_dependency "event_emitter", "~> 0.2.6"
23
+ spec.add_dependency "thor", "~> 0.20.0"
24
+ spec.add_dependency "activesupport", "~> 5.1.5"
25
25
 
26
- spec.add_development_dependency "bundler", "~> 1.12.5"
27
- spec.add_development_dependency "rake", "~> 11.2.2"
28
- spec.add_development_dependency "rspec", "~> 3.5.0"
26
+ spec.add_development_dependency "bundler", ">= 1.15.4"
27
+ spec.add_development_dependency "codeclimate-test-reporter", "~> 1.0.8"
28
+ spec.add_development_dependency "rake", "~> 12.3.0"
29
+ spec.add_development_dependency "rspec", "~> 3.7.0"
29
30
  end
data/script/console ADDED
@@ -0,0 +1,9 @@
1
+ #!/usr/bin/env ruby
2
+ require "bundler"
3
+ Bundler.setup
4
+
5
+ require "#{__dir__}/../lib/rancher/shell/all"
6
+
7
+ require "irb"
8
+ require "irb/completion"
9
+ IRB.start
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rancher-shell
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.2
4
+ version: 0.3.0.pre.alpha3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Marc Qualie
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-07-21 00:00:00.000000000 Z
11
+ date: 2018-03-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: websocket
@@ -16,98 +16,112 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: 1.2.3
19
+ version: 1.2.5
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: 1.2.3
26
+ version: 1.2.5
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: event_emitter
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: 0.2.5
33
+ version: 0.2.6
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: 0.2.5
40
+ version: 0.2.6
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: thor
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: 0.19.1
47
+ version: 0.20.0
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: 0.19.1
54
+ version: 0.20.0
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: activesupport
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
59
  - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: 5.0.0
61
+ version: 5.1.5
62
62
  type: :runtime
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
66
  - - "~>"
67
67
  - !ruby/object:Gem::Version
68
- version: 5.0.0
68
+ version: 5.1.5
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: bundler
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: 1.15.4
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: 1.15.4
83
+ - !ruby/object:Gem::Dependency
84
+ name: codeclimate-test-reporter
71
85
  requirement: !ruby/object:Gem::Requirement
72
86
  requirements:
73
87
  - - "~>"
74
88
  - !ruby/object:Gem::Version
75
- version: 1.12.5
89
+ version: 1.0.8
76
90
  type: :development
77
91
  prerelease: false
78
92
  version_requirements: !ruby/object:Gem::Requirement
79
93
  requirements:
80
94
  - - "~>"
81
95
  - !ruby/object:Gem::Version
82
- version: 1.12.5
96
+ version: 1.0.8
83
97
  - !ruby/object:Gem::Dependency
84
98
  name: rake
85
99
  requirement: !ruby/object:Gem::Requirement
86
100
  requirements:
87
101
  - - "~>"
88
102
  - !ruby/object:Gem::Version
89
- version: 11.2.2
103
+ version: 12.3.0
90
104
  type: :development
91
105
  prerelease: false
92
106
  version_requirements: !ruby/object:Gem::Requirement
93
107
  requirements:
94
108
  - - "~>"
95
109
  - !ruby/object:Gem::Version
96
- version: 11.2.2
110
+ version: 12.3.0
97
111
  - !ruby/object:Gem::Dependency
98
112
  name: rspec
99
113
  requirement: !ruby/object:Gem::Requirement
100
114
  requirements:
101
115
  - - "~>"
102
116
  - !ruby/object:Gem::Version
103
- version: 3.5.0
117
+ version: 3.7.0
104
118
  type: :development
105
119
  prerelease: false
106
120
  version_requirements: !ruby/object:Gem::Requirement
107
121
  requirements:
108
122
  - - "~>"
109
123
  - !ruby/object:Gem::Version
110
- version: 3.5.0
124
+ version: 3.7.0
111
125
  description:
112
126
  email:
113
127
  - marc@marcqualie.com
@@ -118,7 +132,7 @@ extra_rdoc_files: []
118
132
  files:
119
133
  - ".gitignore"
120
134
  - ".rspec"
121
- - ".travis.yml"
135
+ - ".simplecov"
122
136
  - CHANGELOG.md
123
137
  - CODE_OF_CONDUCT.md
124
138
  - Gemfile
@@ -127,7 +141,9 @@ files:
127
141
  - README.md
128
142
  - Rakefile
129
143
  - bin/rancher-shell
144
+ - circle.yml
130
145
  - lib/rancher/shell.rb
146
+ - lib/rancher/shell/all.rb
131
147
  - lib/rancher/shell/api.rb
132
148
  - lib/rancher/shell/api_response.rb
133
149
  - lib/rancher/shell/cli.rb
@@ -138,6 +154,7 @@ files:
138
154
  - lib/rancher/shell/version.rb
139
155
  - lib/rancher/shell/websocket_client.rb
140
156
  - rancher-shell.gemspec
157
+ - script/console
141
158
  homepage: https://github.com/marcqualie/rancher-shell
142
159
  licenses:
143
160
  - MIT
@@ -153,12 +170,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
153
170
  version: '0'
154
171
  required_rubygems_version: !ruby/object:Gem::Requirement
155
172
  requirements:
156
- - - ">="
173
+ - - ">"
157
174
  - !ruby/object:Gem::Version
158
- version: '0'
175
+ version: 1.3.1
159
176
  requirements: []
160
177
  rubyforge_project:
161
- rubygems_version: 2.6.6
178
+ rubygems_version: 2.6.13
162
179
  signing_key:
163
180
  specification_version: 4
164
181
  summary: A console utility for shelling into Rancher containers
data/.travis.yml DELETED
@@ -1,4 +0,0 @@
1
- language: ruby
2
- rvm:
3
- - 2.3.0
4
- before_install: gem install bundler -v 1.11.2