ranch-hand 0.4.0 → 0.7.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 28e355a00dd066ac8d0b0270f59a2a97c25bd28e69066a289aec029db9661fa9
4
- data.tar.gz: 56a686da7e0be9a823b75fd7d349d75b7d7cd8c497106d153fe3018f6921ce87
3
+ metadata.gz: 739b914a9a3aaa61cbd1ea414310158a5de894f02f93028c6c6927d3dcf4d567
4
+ data.tar.gz: 0166cfe7b29ad795d8f8ee3e0bef4a91bb3fce4e55e2a662ab24e7cf06474596
5
5
  SHA512:
6
- metadata.gz: d7639b1029f2cfb0a415794dd22ca8af87f38a20be8efdb757373a0218ae2fbdbf50f13365985afdd55a0e44fdcce72e6cf40c260d33823f1dd8dafe0ece392b
7
- data.tar.gz: be9d54eed465ab6b3bb9b09f845ddb1d514f701076cf9d1f4b601b07fadfad36e2672c74d3b816380ab311ec4d619825ef4b966ebd657d7f4293f92900bd24f8
6
+ metadata.gz: d0608be5112035aa5f4ca5e9e7ce1fc570763f485d688541de6c9095bcd3345cf0ce69378c820f60b782f0051b88322e4f7c052960f75db9c18ddffd3be44dc8
7
+ data.tar.gz: 957785da2e00ac1fb0834a9cb9cec97a6ed7628d1c0ad02e458ab1da3fdf76625801b733c1d4439a58ab8d1437d7ab6b3ce80ad09978a4d79417e1e39ff86f72
data/.gitignore CHANGED
@@ -9,3 +9,6 @@
9
9
 
10
10
  # rspec failure tracking
11
11
  .rspec_status
12
+
13
+ # https://yehudakatz.com/2010/12/16/clarifying-the-roles-of-the-gemspec-and-gemfile/
14
+ Gemfile.lock
data/Changelog.md ADDED
@@ -0,0 +1,4 @@
1
+ ### 0.6.0
2
+
3
+ Updates for Ruby 3.0 compat
4
+ - https://rubyreferences.github.io/rubychanges/3.0.html#keyword-arguments-are-now-fully-separated-from-positional-arguments
data/README.md CHANGED
@@ -1,8 +1,12 @@
1
1
  # RanchHand
2
2
 
3
- Provides an interface between the Rancher CLI and the Kubectl commands to make running commands in pods easier.
3
+ [![Gem Version](https://badge.fury.io/rb/ranch-hand.svg)](https://badge.fury.io/rb/ranch-hand)
4
+
5
+ Provides a simple interface on top the Rancher CLI and the Kubectl commands to make running commands in pods easier.
4
6
  This is particularily useful when using Kubernetes in a development environment.
5
7
 
8
+ ![ranch-hand demo](https://github.com/peregrinator/ranch-hand/raw/main/doc/ranch-hand-demo.gif "Ranch-hand Demo")
9
+
6
10
  ## Installation
7
11
 
8
12
  Add this line to your application's Gemfile:
@@ -19,6 +23,17 @@ Or install it yourself as:
19
23
 
20
24
  $ gem install ranch-hand
21
25
 
26
+ ## Setup
27
+
28
+ Once ranch-hand is installed, run `ranch-hand setup` from the command line. This will create the necessary files in `~/.ranch-hand`.
29
+
30
+ #### Project setup
31
+
32
+ Project setup is optional. You can create a set of default values for certain flags by running `ranch-hand init` in any directory. When ranch-hand is run from a directory it will use the values in the `.ranch-hand` file if it is present.
33
+
34
+ Normally you might run the following command: `ranch-hand -n my-namespace -g -p my-project -c /bin/bash`
35
+ Using `ranch-hand init` you can set the namespace, grouping flag and pod name as defaults, and instead just run: `ranch-hand -c /bin/bash`.
36
+
22
37
  ## Usage
23
38
 
24
39
  RanchHand makes use of the [GLI](https://github.com/davetron5000/gli) (Git Like Interface) gem to create a CLI with features similar to the Git CLI. Run `ranch-hand help` or `ranch-hand command help` for usage information.
data/bin/ranch-hand CHANGED
@@ -14,7 +14,7 @@ module RanchHandCLI
14
14
  version RanchHand::VERSION
15
15
 
16
16
  subcommand_option_handling :normal
17
- arguments :strict
17
+ arguments :loose
18
18
 
19
19
  desc 'Sets up ranch hand'
20
20
  command :setup do |c|
@@ -23,19 +23,28 @@ module RanchHandCLI
23
23
  end
24
24
  end
25
25
 
26
+ desc 'Initializes ranch hand for project'
27
+ command :init do |c|
28
+ c.action do |global_options, command_options, args|
29
+ RanchHand::Base.init
30
+ end
31
+ end
32
+
26
33
  desc 'Execs into a running container'
27
34
  command :exec do |c|
28
- c.switch [:g, :group], negatable: false, desc: "Group pods returned so that there is only one from each deployment."
35
+ config = RanchHand::Config.load
36
+
37
+ c.switch [:g, :group], negatable: true, default_value: config[:group] || false, desc: "Group pods returned so that there is only one from each deployment, --no-group can be used to override project config as needed."
29
38
  c.switch [:rm, :remove], negatable: false, desc: "Used to indicated that you want to remove a previously saved command."
30
39
  c.switch [:r, :repeat], negatable: false, desc: "Repeat the last command ran (against the same pod)."
31
40
 
32
41
  c.flag [:c, :command], desc: "Command to run once (not permanently stored)"
33
42
  c.flag [:f, :filter], desc: "Filter pods returned to those that contain the string provided (negative matches supported). Examples: '-f nginx', '-f -apache'"
34
- c.flag [:n, :namespace], required: true, desc: "Namespace against which to retreive pods and run command"
35
- c.flag [:p, :pod], desc: "Run command in a specific pod. If used with -g only the pod name can be specified and the command will be run against the first in the group"
43
+ c.flag [:n, :namespace], required: true, default_value: config[:namespace], desc: "Namespace against which to retreive pods and run command"
44
+ c.flag [:p, :pod], default_value: config[:pod], desc: "Run command in a specific pod. If used with -g only the pod name can be specified and the command will be run against the first in the group"
36
45
 
37
46
  c.action do |global_options, command_options, args|
38
- RanchHand::KubeCtl.new.exec(command_options)
47
+ RanchHand::KubeCtl.new.exec(args: args, cmd_options: command_options)
39
48
  end
40
49
  end
41
50
 
Binary file
data/lib/ranch_hand.rb CHANGED
@@ -10,6 +10,7 @@ require 'tty-prompt'
10
10
  # our files
11
11
  require 'ranch_hand/base.rb'
12
12
  require 'ranch_hand/commands.rb'
13
+ require 'ranch_hand/config.rb'
13
14
  require 'ranch_hand/constants.rb'
14
15
  require 'ranch_hand/kube_ctl.rb'
15
16
  require 'ranch_hand/logger.rb'
@@ -6,5 +6,11 @@ module RanchHand
6
6
  File.new(RanchHand::STORE_FILE, 'w+', 0640)
7
7
  RanchHand::Logger.info("complete")
8
8
  end
9
+
10
+ def self.init
11
+ RanchHand::Logger.info("initializing ranch-hand for project")
12
+ RanchHand::Config.create
13
+ RanchHand::Logger.info("initialization complete")
14
+ end
9
15
  end
10
16
  end
@@ -3,7 +3,7 @@ module RanchHand
3
3
  private
4
4
 
5
5
  def command(opts={})
6
- TTY::Command.new(opts)
6
+ TTY::Command.new(**opts)
7
7
  end
8
8
 
9
9
  def prompt
@@ -0,0 +1,45 @@
1
+ module RanchHand
2
+ class Config
3
+ extend RanchHand::Commands
4
+
5
+ def self.create
6
+ save(generate_config)
7
+ RanchHand::Logger.info("Config file saved to #{project_config_path}")
8
+ end
9
+
10
+ def self.load
11
+ begin
12
+ YAML.load_file(project_config_path)
13
+ rescue Errno::ENOENT
14
+ {}
15
+ end
16
+ end
17
+
18
+ private
19
+
20
+ def self.generate_config
21
+ namespace = prompt.ask('Namespace:')
22
+ group = prompt.ask('Use group command by default? (Y/n):')
23
+ group = %w(n N).include?(group) ? false : true
24
+ pod = prompt.ask('Pod name:')
25
+
26
+ {
27
+ group: group,
28
+ namespace: namespace,
29
+ pod: pod
30
+ }
31
+ end
32
+
33
+ def self.save(config)
34
+ # File.new(project_config_path, 'w+', 0640)
35
+
36
+ File.open(project_config_path, 'w', 0640) do |f|
37
+ f.write(config.to_yaml)
38
+ end
39
+ end
40
+
41
+ def self.project_config_path
42
+ File.join(Dir.pwd, ".ranch-hand")
43
+ end
44
+ end
45
+ end
@@ -2,23 +2,25 @@ module RanchHand
2
2
  class KubeCtl
3
3
  include RanchHand::Commands
4
4
 
5
- def exec(options={})
6
- namespace = options.delete(:namespace)
5
+ def exec(args: [], cmd_options: {})
6
+ args = Array(args)
7
+
8
+ namespace = cmd_options.delete(:namespace)
7
9
 
8
- if options[:remove]
10
+ if cmd_options[:remove]
9
11
  remove_command(namespace)
10
- elsif options[:repeat]
12
+ elsif cmd_options[:repeat]
11
13
  repeat_command(namespace)
12
- elsif options[:command]
13
- pod = select_pod(namespace, options)
14
- run_command(namespace, pod, options[:command])
14
+ elsif cmd_options[:command]
15
+ pod = select_pod(namespace, cmd_options)
16
+ run_command(namespace, pod, cmd_options[:command], args)
15
17
  else
16
- choose_command(namespace, options)
18
+ choose_command(namespace, cmd_options)
17
19
  end
18
20
  end
19
21
 
20
- def run_command(namespace, pod, cmd)
21
- system("rancher kubectl -n #{namespace} exec -it #{pod} -- #{cmd}")
22
+ def run_command(namespace, pod, cmd, args=[])
23
+ system("rancher kubectl -n #{namespace} exec -it #{pod} -- #{cmd} #{args.join(' ')}".strip)
22
24
  end
23
25
 
24
26
  def choose_command(namespace, options={})
@@ -173,11 +175,18 @@ module RanchHand
173
175
 
174
176
  def pods(namespace)
175
177
  pods_cmd = "rancher kubectl -n #{namespace} get po"
176
- command(printer: :null).run(pods_cmd).out.split("\n")[1..-1].map{|l| l.split(/\s+/)[0]}
178
+ pods = command(printer: :null).run(pods_cmd).out.split("\n")[1..-1]&.map{|l| l.split(/\s+/)[0]}
179
+
180
+ pods || []
177
181
  end
178
182
 
179
183
  def storage
180
184
  @storage ||= RanchHand::Storage.new
181
185
  end
186
+
187
+ # def project_config
188
+ # project_config_file = File.join(Dir.pwd, ".ranch-hand")
189
+ # YAML.load_file(project_config_file) || {}
190
+ # end
182
191
  end
183
192
  end
@@ -1,3 +1,3 @@
1
1
  module RanchHand
2
- VERSION = "0.4.0"
2
+ VERSION = "0.7.0"
3
3
  end
data/ranch-hand.gemspec CHANGED
@@ -20,15 +20,17 @@ Gem::Specification.new do |spec|
20
20
  `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }.reject { |f| f.match(%r{.gem$}) }
21
21
  end
22
22
  spec.bindir = "bin"
23
- spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
23
+ spec.executables = spec.files.grep(%r{^bin/ranch-hand}) { |f| File.basename(f) }
24
24
  spec.require_paths = ["lib"]
25
25
 
26
+ spec.required_ruby_version = '~> 3.0'
27
+
26
28
  spec.add_development_dependency "bundler", "~> 2.0"
27
29
  spec.add_development_dependency "rake", "~> 10.0"
28
30
  spec.add_development_dependency "rspec", "~> 3.0"
29
31
 
30
- spec.add_runtime_dependency "gli", "~> 2.18"
31
- spec.add_runtime_dependency "pry", "~> 0.12.2"
32
- spec.add_runtime_dependency "tty-command", "~> 0.8.2"
33
- spec.add_runtime_dependency "tty-prompt", "~> 0.18.1"
32
+ spec.add_runtime_dependency "gli", "~> 2.20"
33
+ spec.add_runtime_dependency "pry", "~> 0.14"
34
+ spec.add_runtime_dependency "tty-command", "~> 0.10"
35
+ spec.add_runtime_dependency "tty-prompt", "~> 0.23"
34
36
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ranch-hand
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0
4
+ version: 0.7.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Peregrinator
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-05-03 00:00:00.000000000 Z
11
+ date: 2021-07-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -58,63 +58,61 @@ dependencies:
58
58
  requirements:
59
59
  - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: '2.18'
61
+ version: '2.20'
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: '2.18'
68
+ version: '2.20'
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: pry
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
73
  - - "~>"
74
74
  - !ruby/object:Gem::Version
75
- version: 0.12.2
75
+ version: '0.14'
76
76
  type: :runtime
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
80
  - - "~>"
81
81
  - !ruby/object:Gem::Version
82
- version: 0.12.2
82
+ version: '0.14'
83
83
  - !ruby/object:Gem::Dependency
84
84
  name: tty-command
85
85
  requirement: !ruby/object:Gem::Requirement
86
86
  requirements:
87
87
  - - "~>"
88
88
  - !ruby/object:Gem::Version
89
- version: 0.8.2
89
+ version: '0.10'
90
90
  type: :runtime
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
94
  - - "~>"
95
95
  - !ruby/object:Gem::Version
96
- version: 0.8.2
96
+ version: '0.10'
97
97
  - !ruby/object:Gem::Dependency
98
98
  name: tty-prompt
99
99
  requirement: !ruby/object:Gem::Requirement
100
100
  requirements:
101
101
  - - "~>"
102
102
  - !ruby/object:Gem::Version
103
- version: 0.18.1
103
+ version: '0.23'
104
104
  type: :runtime
105
105
  prerelease: false
106
106
  version_requirements: !ruby/object:Gem::Requirement
107
107
  requirements:
108
108
  - - "~>"
109
109
  - !ruby/object:Gem::Version
110
- version: 0.18.1
110
+ version: '0.23'
111
111
  description: ''
112
112
  email:
113
113
  - bob.burbach@gmail.com
114
114
  executables:
115
- - console
116
115
  - ranch-hand
117
- - setup
118
116
  extensions: []
119
117
  extra_rdoc_files: []
120
118
  files:
@@ -122,17 +120,19 @@ files:
122
120
  - ".rspec"
123
121
  - ".travis.yml"
124
122
  - CODE_OF_CONDUCT.md
123
+ - Changelog.md
125
124
  - Gemfile
126
- - Gemfile.lock
127
125
  - LICENSE.txt
128
126
  - README.md
129
127
  - Rakefile
130
128
  - bin/console
131
129
  - bin/ranch-hand
132
130
  - bin/setup
131
+ - doc/ranch-hand-demo.gif
133
132
  - lib/ranch_hand.rb
134
133
  - lib/ranch_hand/base.rb
135
134
  - lib/ranch_hand/commands.rb
135
+ - lib/ranch_hand/config.rb
136
136
  - lib/ranch_hand/constants.rb
137
137
  - lib/ranch_hand/kube_ctl.rb
138
138
  - lib/ranch_hand/logger.rb
@@ -149,17 +149,16 @@ require_paths:
149
149
  - lib
150
150
  required_ruby_version: !ruby/object:Gem::Requirement
151
151
  requirements:
152
- - - ">="
152
+ - - "~>"
153
153
  - !ruby/object:Gem::Version
154
- version: '0'
154
+ version: '3.0'
155
155
  required_rubygems_version: !ruby/object:Gem::Requirement
156
156
  requirements:
157
157
  - - ">="
158
158
  - !ruby/object:Gem::Version
159
159
  version: '0'
160
160
  requirements: []
161
- rubyforge_project:
162
- rubygems_version: 2.7.6.2
161
+ rubygems_version: 3.2.3
163
162
  signing_key:
164
163
  specification_version: 4
165
164
  summary: Provides an interface between the Rancher CLI and the Kubectl commands
data/Gemfile.lock DELETED
@@ -1,67 +0,0 @@
1
- PATH
2
- remote: .
3
- specs:
4
- ranch-hand (0.3.0)
5
- gli (~> 2.18)
6
- pry (~> 0.12.2)
7
- tty-command (~> 0.8.2)
8
- tty-prompt (~> 0.18.1)
9
-
10
- GEM
11
- remote: https://rubygems.org/
12
- specs:
13
- coderay (1.1.2)
14
- diff-lcs (1.3)
15
- equatable (0.5.0)
16
- gli (2.18.0)
17
- method_source (0.9.2)
18
- necromancer (0.4.0)
19
- pastel (0.7.2)
20
- equatable (~> 0.5.0)
21
- tty-color (~> 0.4.0)
22
- pry (0.12.2)
23
- coderay (~> 1.1.0)
24
- method_source (~> 0.9.0)
25
- rake (10.5.0)
26
- rspec (3.8.0)
27
- rspec-core (~> 3.8.0)
28
- rspec-expectations (~> 3.8.0)
29
- rspec-mocks (~> 3.8.0)
30
- rspec-core (3.8.0)
31
- rspec-support (~> 3.8.0)
32
- rspec-expectations (3.8.2)
33
- diff-lcs (>= 1.2.0, < 2.0)
34
- rspec-support (~> 3.8.0)
35
- rspec-mocks (3.8.0)
36
- diff-lcs (>= 1.2.0, < 2.0)
37
- rspec-support (~> 3.8.0)
38
- rspec-support (3.8.0)
39
- timers (4.3.0)
40
- tty-color (0.4.3)
41
- tty-command (0.8.2)
42
- pastel (~> 0.7.0)
43
- tty-cursor (0.6.1)
44
- tty-prompt (0.18.1)
45
- necromancer (~> 0.4.0)
46
- pastel (~> 0.7.0)
47
- timers (~> 4.0)
48
- tty-cursor (~> 0.6.0)
49
- tty-reader (~> 0.5.0)
50
- tty-reader (0.5.0)
51
- tty-cursor (~> 0.6.0)
52
- tty-screen (~> 0.6.4)
53
- wisper (~> 2.0.0)
54
- tty-screen (0.6.5)
55
- wisper (2.0.0)
56
-
57
- PLATFORMS
58
- ruby
59
-
60
- DEPENDENCIES
61
- bundler (~> 2.0)
62
- rake (~> 10.0)
63
- ranch-hand!
64
- rspec (~> 3.0)
65
-
66
- BUNDLED WITH
67
- 2.0.1