rhea 0.0.1 → 0.1.0

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 (69) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +165 -2
  3. data/app/assets/javascripts/rhea/application.js +2 -0
  4. data/app/assets/javascripts/rhea/main.js +3 -0
  5. data/app/assets/javascripts/vendor/jquery-1.11.3.js +10351 -0
  6. data/app/assets/stylesheets/rhea/application.css.sass +1 -0
  7. data/app/assets/stylesheets/rhea/layout.css.sass +31 -0
  8. data/app/controllers/rhea/base_controller.rb +26 -0
  9. data/app/controllers/rhea/commands_controller.rb +168 -0
  10. data/app/controllers/rhea/events_controller.rb +8 -0
  11. data/app/controllers/rhea/nodes_controller.rb +7 -0
  12. data/app/controllers/rhea/system_services_controller.rb +7 -0
  13. data/app/helpers/rhea/helper.rb +42 -0
  14. data/app/views/rhea/command_types/_list.html.haml +5 -0
  15. data/app/views/rhea/commands/_form.html.haml +22 -0
  16. data/app/views/rhea/commands/_table.html.haml +51 -0
  17. data/app/views/rhea/commands/index.html.haml +51 -0
  18. data/app/views/rhea/errors/index.html.haml +2 -0
  19. data/app/views/rhea/events/index.html.haml +24 -0
  20. data/app/views/rhea/layouts/application.html.haml +35 -0
  21. data/app/views/rhea/nodes/index.html.haml +29 -0
  22. data/app/views/rhea/system_services/index.html.haml +2 -0
  23. data/config/routes.rb +21 -0
  24. data/docs/commands.gif +0 -0
  25. data/docs/commands.mov +0 -0
  26. data/docs/events.png +0 -0
  27. data/docs/logo.png +0 -0
  28. data/docs/nodes.png +0 -0
  29. data/fixtures/vcr_cassettes/Rhea_Kubernetes_Commands_All/_perform/an_existing_rc/returns_the_rc.yml +197 -0
  30. data/fixtures/vcr_cassettes/Rhea_Kubernetes_Commands_Delete/_perform/an_existing_rc/deletes_the_rc.yml +163 -0
  31. data/fixtures/vcr_cassettes/Rhea_Kubernetes_Commands_Export/_perform/an_existing_rc/returns_the_data.yml +197 -0
  32. data/fixtures/vcr_cassettes/Rhea_Kubernetes_Commands_Get/_perform/an_existing_rc/gets_the_rc.yml +196 -0
  33. data/fixtures/vcr_cassettes/Rhea_Kubernetes_Commands_Import/_perform/no_existing_rcs/creates_the_rcs.yml +197 -0
  34. data/fixtures/vcr_cassettes/Rhea_Kubernetes_Commands_Redeploy/_perform/an_existing_rc/redeploys_the_rc.yml +424 -0
  35. data/fixtures/vcr_cassettes/Rhea_Kubernetes_Commands_Reschedule/_perform/an_existing_rc/reschedules_the_rc.yml +421 -0
  36. data/fixtures/vcr_cassettes/Rhea_Kubernetes_Commands_Scale/_perform/no_existing_rc/creates_an_rc.yml +165 -0
  37. data/lib/rhea.rb +15 -1
  38. data/lib/rhea/command.rb +35 -0
  39. data/lib/rhea/command_type.rb +35 -0
  40. data/lib/rhea/engine.rb +16 -0
  41. data/lib/rhea/kubernetes.rb +5 -0
  42. data/lib/rhea/kubernetes/api.rb +15 -0
  43. data/lib/rhea/kubernetes/commands/all.rb +16 -0
  44. data/lib/rhea/kubernetes/commands/base.rb +28 -0
  45. data/lib/rhea/kubernetes/commands/delete.rb +18 -0
  46. data/lib/rhea/kubernetes/commands/export.rb +23 -0
  47. data/lib/rhea/kubernetes/commands/get.rb +18 -0
  48. data/lib/rhea/kubernetes/commands/import.rb +20 -0
  49. data/lib/rhea/kubernetes/commands/redeploy.rb +22 -0
  50. data/lib/rhea/kubernetes/commands/reschedule.rb +21 -0
  51. data/lib/rhea/kubernetes/commands/scale.rb +108 -0
  52. data/lib/rhea/kubernetes/configuration.rb +30 -0
  53. data/lib/rhea/kubernetes/events/recent.rb +23 -0
  54. data/lib/rhea/kubernetes/nodes/all.rb +45 -0
  55. data/lib/rhea/kubernetes/system_services.rb +22 -0
  56. data/lib/rhea/version.rb +1 -1
  57. data/rhea.gemspec +11 -3
  58. data/spec/lib/rhea/kubernetes/commands/all_spec.rb +29 -0
  59. data/spec/lib/rhea/kubernetes/commands/delete_spec.rb +22 -0
  60. data/spec/lib/rhea/kubernetes/commands/export_spec.rb +31 -0
  61. data/spec/lib/rhea/kubernetes/commands/get_spec.rb +28 -0
  62. data/spec/lib/rhea/kubernetes/commands/import_spec.rb +39 -0
  63. data/spec/lib/rhea/kubernetes/commands/redeploy_spec.rb +35 -0
  64. data/spec/lib/rhea/kubernetes/commands/reschedule_spec.rb +32 -0
  65. data/spec/lib/rhea/kubernetes/commands/scale_spec.rb +31 -0
  66. data/spec/spec_helper.rb +2 -0
  67. data/spec/support/kubernetes_spec_helper.rb +43 -0
  68. data/spec/support/vcr.rb +9 -0
  69. metadata +170 -11
@@ -0,0 +1,32 @@
1
+ require 'spec_helper'
2
+
3
+ describe Rhea::Kubernetes::Commands::Reschedule, :vcr do
4
+ include KubernetesSpecHelper
5
+
6
+ before(:each) { delete_replication_controllers }
7
+ after(:each) { delete_replication_controllers }
8
+
9
+ describe '#perform' do
10
+ context 'an existing rc' do
11
+ let(:process_count) { 2 }
12
+
13
+ before :each do
14
+ Rhea::Kubernetes::Commands::Scale.new(expression: command_expression, process_count: process_count).perform
15
+ end
16
+
17
+ it 'reschedules the rc' do
18
+ described_class.new(expression: command_expression).perform
19
+ replication_controller = Rhea::Kubernetes::Commands::Get.new(expression: command_expression).perform
20
+ expected_attributes = {
21
+ expression: command_expression,
22
+ image: kube_image,
23
+ process_count: process_count
24
+ }
25
+ expect(replication_controller.attributes).to include(expected_attributes)
26
+
27
+ expect(WebMock).to have_requested(:post, "#{kube_authed_api_url}replicationcontrollers")
28
+ expect(WebMock).to have_requested(:put, "#{kube_authed_api_url}replicationcontrollers/#{kube_replication_controller_name}").twice
29
+ end
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,31 @@
1
+ require 'spec_helper'
2
+
3
+ describe Rhea::Kubernetes::Commands::Scale, :vcr do
4
+ include KubernetesSpecHelper
5
+
6
+ before(:each) { delete_replication_controllers }
7
+ after(:each) { delete_replication_controllers }
8
+
9
+ let(:process_count) { 2 }
10
+
11
+ describe '#perform' do
12
+ context 'no existing rc' do
13
+ it 'creates an rc' do
14
+ described_class.new(expression: command_expression, process_count: process_count).perform
15
+ matches = -> (request) do
16
+ data = ActiveSupport::JSON.decode(request.body)
17
+ container = data['spec']['template']['spec']['containers'][0]
18
+ expected_container = {
19
+ 'command' => command_expression.split(' '),
20
+ 'image' => kube_image,
21
+ 'name' => kube_replication_controller_name,
22
+ 'env' => kube_env_vars.map { |name, value| { 'name' => name, 'value' => value } }
23
+ }
24
+ hash_includes_hash?(container, expected_container)
25
+ end
26
+ url = "#{kube_authed_api_url}replicationcontrollers"
27
+ expect(WebMock).to have_requested(:post, url).with { |request| matches.call(request) }
28
+ end
29
+ end
30
+ end
31
+ end
@@ -1,5 +1,7 @@
1
1
  require 'rhea'
2
2
 
3
+ Dir["#{File.expand_path('../support', __FILE__)}/**/*.rb"].each { |f| require f }
4
+
3
5
  RSpec.configure do |config|
4
6
  # ## Mock Framework
5
7
  #
@@ -0,0 +1,43 @@
1
+ module KubernetesSpecHelper
2
+ extend RSpec::SharedContext
3
+
4
+ let(:kube_user) { 'vagrant' }
5
+ let(:kube_password) { 'vagrant' }
6
+ let(:kube_api_host) { 'kube.local' }
7
+ let(:kube_namespace) { 'default' }
8
+ let(:kube_authed_api_url) { "https://#{kube_user}:#{kube_password}@#{kube_api_host}/api/v1/namespaces/#{kube_namespace}/" }
9
+ let(:kube_env_vars) { { 'MY_ENV_VAR_NAME' => 'my_env_var_value' } }
10
+ let(:kube_image) { 'docker.local/myimage:latest' }
11
+ let(:kube_replication_controller_name) { 'rhea-7370-foo-bar' }
12
+
13
+ let(:command_expression) { 'foo -bar' }
14
+
15
+ before :each do
16
+ Rhea.configure do |config|
17
+ config.default_command_type_key = 'sidekiq'
18
+ config.env_vars = kube_env_vars
19
+ config.kube_api = {
20
+ options: {
21
+ auth_options: { user: kube_user, password: kube_password },
22
+ ssl_options: { verify_ssl: OpenSSL::SSL::VERIFY_NONE }
23
+ },
24
+ url: "https://#{kube_api_host}/api/"
25
+ }
26
+ config.default_image = kube_image
27
+ end
28
+ end
29
+
30
+ def delete_replication_controllers
31
+ @api ||= Rhea::Kubernetes::Api.new
32
+ controllers = @api.get_replication_controllers
33
+ controllers.each do |controller|
34
+ name = controller.metadata.name
35
+ next unless name.start_with?('rhea-')
36
+ @api.delete_replication_controller(controller.metadata.name, kube_namespace)
37
+ end
38
+ end
39
+
40
+ def hash_includes_hash?(parent_hash, child_hash)
41
+ parent_hash.merge(child_hash) == parent_hash
42
+ end
43
+ end
@@ -0,0 +1,9 @@
1
+ require 'vcr'
2
+ require 'webmock/rspec'
3
+
4
+ VCR.configure do |c|
5
+ c.cassette_library_dir = 'fixtures/vcr_cassettes'
6
+ c.default_cassette_options = { record: :new_episodes }
7
+ c.configure_rspec_metadata!
8
+ c.hook_into :webmock
9
+ end
metadata CHANGED
@@ -1,30 +1,128 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rhea
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tom Benner
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-09-02 00:00:00.000000000 Z
11
+ date: 2016-05-09 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: kubeclient
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: 0.3.0
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: 0.3.0
27
+ - !ruby/object:Gem::Dependency
28
+ name: haml
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '4.0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '4.0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: kaminari
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '0.16'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '0.16'
55
+ - !ruby/object:Gem::Dependency
56
+ name: sass-rails
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '5.0'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '5.0'
13
69
  - !ruby/object:Gem::Dependency
14
70
  name: rspec
15
71
  requirement: !ruby/object:Gem::Requirement
16
72
  requirements:
17
- - - ">="
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '3.0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '3.0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: rspec-rails
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '3.0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: '3.0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: vcr
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - "~>"
102
+ - !ruby/object:Gem::Version
103
+ version: '2.9'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - "~>"
109
+ - !ruby/object:Gem::Version
110
+ version: '2.9'
111
+ - !ruby/object:Gem::Dependency
112
+ name: webmock
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - "~>"
18
116
  - !ruby/object:Gem::Version
19
- version: '0'
117
+ version: '1.8'
20
118
  type: :development
21
119
  prerelease: false
22
120
  version_requirements: !ruby/object:Gem::Requirement
23
121
  requirements:
24
- - - ">="
122
+ - - "~>"
25
123
  - !ruby/object:Gem::Version
26
- version: '0'
27
- description: ''
124
+ version: '1.8'
125
+ description: A web UI for managing a Kubernetes cluster
28
126
  email:
29
127
  - tombenner@gmail.com
30
128
  executables: []
@@ -36,11 +134,73 @@ files:
36
134
  - MIT-LICENSE
37
135
  - README.md
38
136
  - Rakefile
137
+ - app/assets/javascripts/rhea/application.js
138
+ - app/assets/javascripts/rhea/main.js
139
+ - app/assets/javascripts/vendor/jquery-1.11.3.js
140
+ - app/assets/stylesheets/rhea/application.css.sass
141
+ - app/assets/stylesheets/rhea/layout.css.sass
142
+ - app/controllers/rhea/base_controller.rb
143
+ - app/controllers/rhea/commands_controller.rb
144
+ - app/controllers/rhea/events_controller.rb
145
+ - app/controllers/rhea/nodes_controller.rb
146
+ - app/controllers/rhea/system_services_controller.rb
147
+ - app/helpers/rhea/helper.rb
148
+ - app/views/rhea/command_types/_list.html.haml
149
+ - app/views/rhea/commands/_form.html.haml
150
+ - app/views/rhea/commands/_table.html.haml
151
+ - app/views/rhea/commands/index.html.haml
152
+ - app/views/rhea/errors/index.html.haml
153
+ - app/views/rhea/events/index.html.haml
154
+ - app/views/rhea/layouts/application.html.haml
155
+ - app/views/rhea/nodes/index.html.haml
156
+ - app/views/rhea/system_services/index.html.haml
157
+ - config/routes.rb
158
+ - docs/commands.gif
159
+ - docs/commands.mov
160
+ - docs/events.png
161
+ - docs/logo.png
162
+ - docs/nodes.png
163
+ - fixtures/vcr_cassettes/Rhea_Kubernetes_Commands_All/_perform/an_existing_rc/returns_the_rc.yml
164
+ - fixtures/vcr_cassettes/Rhea_Kubernetes_Commands_Delete/_perform/an_existing_rc/deletes_the_rc.yml
165
+ - fixtures/vcr_cassettes/Rhea_Kubernetes_Commands_Export/_perform/an_existing_rc/returns_the_data.yml
166
+ - fixtures/vcr_cassettes/Rhea_Kubernetes_Commands_Get/_perform/an_existing_rc/gets_the_rc.yml
167
+ - fixtures/vcr_cassettes/Rhea_Kubernetes_Commands_Import/_perform/no_existing_rcs/creates_the_rcs.yml
168
+ - fixtures/vcr_cassettes/Rhea_Kubernetes_Commands_Redeploy/_perform/an_existing_rc/redeploys_the_rc.yml
169
+ - fixtures/vcr_cassettes/Rhea_Kubernetes_Commands_Reschedule/_perform/an_existing_rc/reschedules_the_rc.yml
170
+ - fixtures/vcr_cassettes/Rhea_Kubernetes_Commands_Scale/_perform/no_existing_rc/creates_an_rc.yml
39
171
  - lib/rhea.rb
172
+ - lib/rhea/command.rb
173
+ - lib/rhea/command_type.rb
174
+ - lib/rhea/engine.rb
175
+ - lib/rhea/kubernetes.rb
176
+ - lib/rhea/kubernetes/api.rb
177
+ - lib/rhea/kubernetes/commands/all.rb
178
+ - lib/rhea/kubernetes/commands/base.rb
179
+ - lib/rhea/kubernetes/commands/delete.rb
180
+ - lib/rhea/kubernetes/commands/export.rb
181
+ - lib/rhea/kubernetes/commands/get.rb
182
+ - lib/rhea/kubernetes/commands/import.rb
183
+ - lib/rhea/kubernetes/commands/redeploy.rb
184
+ - lib/rhea/kubernetes/commands/reschedule.rb
185
+ - lib/rhea/kubernetes/commands/scale.rb
186
+ - lib/rhea/kubernetes/configuration.rb
187
+ - lib/rhea/kubernetes/events/recent.rb
188
+ - lib/rhea/kubernetes/nodes/all.rb
189
+ - lib/rhea/kubernetes/system_services.rb
40
190
  - lib/rhea/version.rb
41
191
  - rhea.gemspec
192
+ - spec/lib/rhea/kubernetes/commands/all_spec.rb
193
+ - spec/lib/rhea/kubernetes/commands/delete_spec.rb
194
+ - spec/lib/rhea/kubernetes/commands/export_spec.rb
195
+ - spec/lib/rhea/kubernetes/commands/get_spec.rb
196
+ - spec/lib/rhea/kubernetes/commands/import_spec.rb
197
+ - spec/lib/rhea/kubernetes/commands/redeploy_spec.rb
198
+ - spec/lib/rhea/kubernetes/commands/reschedule_spec.rb
199
+ - spec/lib/rhea/kubernetes/commands/scale_spec.rb
42
200
  - spec/spec_helper.rb
43
- homepage: https://github.com/tombenner/rhea
201
+ - spec/support/kubernetes_spec_helper.rb
202
+ - spec/support/vcr.rb
203
+ homepage: https://github.com/entelo/rhea
44
204
  licenses:
45
205
  - MIT
46
206
  metadata: {}
@@ -60,9 +220,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
60
220
  version: '0'
61
221
  requirements: []
62
222
  rubyforge_project:
63
- rubygems_version: 2.4.5
223
+ rubygems_version: 2.4.8
64
224
  signing_key:
65
225
  specification_version: 4
66
- summary: ''
226
+ summary: A web UI for managing a Kubernetes cluster
67
227
  test_files: []
68
- has_rdoc: