kuby-sidekiq 0.3.0 → 0.4.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: 16ba8d64983f10c83431ce728402e36c40664b0ba89ff55f5c3677fc2291bcfe
4
- data.tar.gz: 158df48cc2d19408fe295fb745f561a8a93858cfec765fac3fdb6a06fe2cee8e
3
+ metadata.gz: a3d59d851bea4b84f5e198288cb2392b374a1a5bbd750cc669e771598bd0c828
4
+ data.tar.gz: 8360b03ccdb9e024cb92c3b2511d08349e4ffedabd4ef128cbfb947e61b091a4
5
5
  SHA512:
6
- metadata.gz: 26e27f3fc64531c064e70596d384e2d6279c63141ea0f7f1c481dbccbd144a8749927878bd1b11e64a19644e2144d02c974e2fd133981ac282b2a5bc9672f7ac
7
- data.tar.gz: 6b9f8ab50e6d994d7bbd2d8874ce1c84e7d21d41491e98017eac61d6f38b40cfef34331423b62b7bcc9027da82318aa09255c847c9cbcb286276ac64a463bfe7
6
+ metadata.gz: 00d1ba24c781023e82453e345bc8fdb68a28cb138b9e7181ba80b5692b1964b8dd138e01b46d7d67e1b414f741380e78c7a9417f9da93e5a6352a8077112c91e
7
+ data.tar.gz: c001858e4d4b8a82c631482a990da8c3b3aa5eb8fdf89766f4e1e067406ae641512919be2f8f893519b0a9d49ed41e64f52e67d4b03b8c1bf334e3e18c56310c
data/CHANGELOG.md CHANGED
@@ -1,3 +1,6 @@
1
+ ## 0.4.0
2
+ * Use kuby-redis v0.2, which uses the Spotahome Redis operator instead of KubeDB.
3
+
1
4
  ## 0.3.0
2
5
  * Conform to new plugin architecture.
3
6
  * Accept `environment` instead of `definition` instances.
data/Gemfile CHANGED
@@ -6,6 +6,7 @@ gem 'kuby-core', path: '../kuby-core'
6
6
  gem 'sidekiq', '>= 6'
7
7
 
8
8
  group :development, :test do
9
+ gem 'sorbet-runtime'
9
10
  gem 'pry-byebug'
10
11
  gem 'rake'
11
12
  end
data/README.md ADDED
@@ -0,0 +1,75 @@
1
+ **NOTE**: The documentation below refers to an unreleased version of kuby-sidekiq.
2
+
3
+ ## kuby-sidekiq
4
+
5
+ Sidekiq plugin for [Kuby](https://github.com/getkuby/kuby-core).
6
+
7
+ ## Intro
8
+
9
+ The Sidekiq plugin makes it easy to run a deployment of Sidekiq workers for your Rails app. Behind the scenes it uses [kuby-redis](https://github.com/getkuby/kuby-redis) to stand up an instance of Redis and Kubernetes deployments to start the desired number of workers.
10
+
11
+ ## Configuration
12
+
13
+ Add the kuby-sidekiq and [sidekiq](https://github.com/mperham/sidekiq) gems to your Gemfile and run `bundle install`.
14
+
15
+ Require the plugin in your kuby.rb file and configure it, eg:
16
+
17
+ ```ruby
18
+ require 'kuby/sidekiq'
19
+
20
+ Kuby.define(:production) do
21
+ kubernetes do
22
+
23
+ add_plugin(:sidekiq) do
24
+ replicas 2 # run two workers
25
+ end
26
+
27
+ end
28
+ end
29
+ ```
30
+
31
+ Next, run the setup command, eg:
32
+
33
+ ```bash
34
+ bundle exec kuby -e production setup
35
+ ```
36
+
37
+ ## Connecting to Redis
38
+
39
+ Add a Sidekiq initializer to your Rails app and tell Sidekiq how to connect to Redis:
40
+
41
+ ```ruby
42
+ # config/initializers/sidekiq.rb
43
+
44
+ if Rails.env.production?
45
+ require 'kuby'
46
+
47
+ Kuby.load!
48
+
49
+ Sidekiq.configure_server do |config|
50
+ config.redis = Kuby.environment.kubernetes.plugin(:sidekiq).connection_params
51
+ end
52
+
53
+ Sidekiq.configure_client do |config|
54
+ config.redis = Kuby.environment.kubernetes.plugin(:sidekiq).connection_params
55
+ end
56
+ end
57
+ ```
58
+
59
+ ### Build and Deploy
60
+
61
+ Now that Sidekiq has been installed and configured, build, push, and deploy your app the usual way, eg:
62
+
63
+ ```bash
64
+ bundle exec kuby -e production build
65
+ bundle exec kuby -e production push
66
+ bundle exec kuby -e production deploy
67
+ ```
68
+
69
+ ## License
70
+
71
+ Licensed under the MIT license. See LICENSE for details.
72
+
73
+ ## Authors
74
+
75
+ * Cameron C. Dutro: http://github.com/camertron
data/Rakefile CHANGED
@@ -2,6 +2,7 @@ require 'bundler'
2
2
  require 'rspec/core/rake_task'
3
3
  require 'rubygems/package_task'
4
4
 
5
+ require 'sorbet-runtime'
5
6
  require 'kuby/sidekiq'
6
7
 
7
8
  Bundler::GemHelper.install_tasks
data/kuby-sidekiq.gemspec CHANGED
@@ -12,8 +12,9 @@ Gem::Specification.new do |s|
12
12
 
13
13
  s.platform = Gem::Platform::RUBY
14
14
 
15
- s.add_dependency 'kuby-kube-db', '~> 0.4'
16
- s.add_dependency 'kube-dsl', '~> 0.3'
15
+ s.add_dependency 'kuby-core', '>= 0.16.0', '< 1.0'
16
+ s.add_dependency 'kube-dsl', '~> 0.7'
17
+ s.add_dependency 'kuby-redis', '~> 0.2'
17
18
 
18
19
  s.require_path = 'lib'
19
20
  s.files = Dir['{lib,spec}/**/*', 'Gemfile', 'LICENSE', 'CHANGELOG.md', 'README.md', 'Rakefile', 'kuby-sidekiq.gemspec']
@@ -1,4 +1,5 @@
1
1
  require 'securerandom'
2
+ require 'kuby/redis'
2
3
 
3
4
  module Kuby
4
5
  module Sidekiq
@@ -7,26 +8,36 @@ module Kuby
7
8
 
8
9
  ROLE = 'worker'.freeze
9
10
 
10
- value_fields :replicas
11
+ value_field :replicas, default: 1
11
12
 
12
- def url
13
- @url ||= "redis://#{redis.metadata.name}:6379/0"
13
+ def connection_params
14
+ redis_instance.connection_params
14
15
  end
15
16
 
16
- def after_initialize
17
- @replicas = 1
17
+ def configure(&block)
18
+ instance_eval(&block) if block
18
19
  end
19
20
 
20
21
  def after_configuration
22
+ environment.kubernetes.add_plugin(:redis) do
23
+ instance :sidekiq do
24
+ custom_config (custom_config || []).concat(['maxmemory-policy noeviction'])
25
+ end
26
+ end
27
+
21
28
  return unless rails_app
22
29
 
23
30
  deployment.spec.template.spec.container(:worker).merge!(
24
31
  rails_app.deployment.spec.template.spec.container(:web), fields: [:env_from]
25
32
  )
33
+
34
+ if rails_app.manage_database? && database = Kuby::Plugins::RailsApp::Database.get(rails_app)
35
+ database.plugin.configure_pod_spec(deployment.spec.template.spec)
36
+ end
26
37
  end
27
38
 
28
39
  def before_deploy(manifest)
29
- image_with_tag = "#{docker.metadata.image_url}:#{kubernetes.tag}"
40
+ image_with_tag = "#{docker.image.image_url}:#{kubernetes.tag || Kuby::Docker::LATEST_TAG}"
30
41
 
31
42
  deployment do
32
43
  spec do
@@ -44,8 +55,7 @@ module Kuby
44
55
  def resources
45
56
  @resources ||= [
46
57
  service_account,
47
- deployment,
48
- redis
58
+ deployment
49
59
  ]
50
60
  end
51
61
 
@@ -131,40 +141,8 @@ module Kuby
131
141
  @deployment
132
142
  end
133
143
 
134
- def redis(&block)
135
- context = self
136
-
137
- @redis ||= Kuby::KubeDB.redis do
138
- api_version 'kubedb.com/v1alpha1'
139
-
140
- metadata do
141
- name "#{context.selector_app}-sidekiq-redis"
142
- namespace context.kubernetes.namespace.metadata.name
143
- end
144
-
145
- spec do
146
- version '5.0.3-v1'
147
- storage_type 'Durable'
148
-
149
- storage do
150
- storage_class_name context.storage_class_name
151
- access_modes ['ReadWriteOnce']
152
-
153
- resources do
154
- requests do
155
- add :storage, '1Gi'
156
- end
157
- end
158
- end
159
- end
160
- end
161
-
162
- @redis.instance_eval(&block) if block
163
- @redis
164
- end
165
-
166
- def storage_class_name
167
- kubernetes.provider.storage_class_name
144
+ def redis_instance
145
+ kubernetes.plugin(:redis).instance(:sidekiq)
168
146
  end
169
147
 
170
148
  def kubernetes
@@ -1,5 +1,5 @@
1
1
  module Kuby
2
2
  module Sidekiq
3
- VERSION = '0.3.0'
3
+ VERSION = '0.4.0'
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,43 +1,63 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: kuby-sidekiq
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Cameron Dutro
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-08-30 00:00:00.000000000 Z
11
+ date: 2022-05-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: kuby-kube-db
14
+ name: kuby-core
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: 0.16.0
20
+ - - "<"
21
+ - !ruby/object:Gem::Version
22
+ version: '1.0'
23
+ type: :runtime
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ requirements:
27
+ - - ">="
28
+ - !ruby/object:Gem::Version
29
+ version: 0.16.0
30
+ - - "<"
31
+ - !ruby/object:Gem::Version
32
+ version: '1.0'
33
+ - !ruby/object:Gem::Dependency
34
+ name: kube-dsl
15
35
  requirement: !ruby/object:Gem::Requirement
16
36
  requirements:
17
37
  - - "~>"
18
38
  - !ruby/object:Gem::Version
19
- version: '0.4'
39
+ version: '0.7'
20
40
  type: :runtime
21
41
  prerelease: false
22
42
  version_requirements: !ruby/object:Gem::Requirement
23
43
  requirements:
24
44
  - - "~>"
25
45
  - !ruby/object:Gem::Version
26
- version: '0.4'
46
+ version: '0.7'
27
47
  - !ruby/object:Gem::Dependency
28
- name: kube-dsl
48
+ name: kuby-redis
29
49
  requirement: !ruby/object:Gem::Requirement
30
50
  requirements:
31
51
  - - "~>"
32
52
  - !ruby/object:Gem::Version
33
- version: '0.3'
53
+ version: '0.2'
34
54
  type: :runtime
35
55
  prerelease: false
36
56
  version_requirements: !ruby/object:Gem::Requirement
37
57
  requirements:
38
58
  - - "~>"
39
59
  - !ruby/object:Gem::Version
40
- version: '0.3'
60
+ version: '0.2'
41
61
  description: Sidekiq plugin for Kuby.
42
62
  email:
43
63
  - camertron@gmail.com
@@ -48,6 +68,7 @@ files:
48
68
  - CHANGELOG.md
49
69
  - Gemfile
50
70
  - LICENSE
71
+ - README.md
51
72
  - Rakefile
52
73
  - kuby-sidekiq.gemspec
53
74
  - lib/kuby/sidekiq.rb
@@ -71,7 +92,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
71
92
  - !ruby/object:Gem::Version
72
93
  version: '0'
73
94
  requirements: []
74
- rubygems_version: 3.1.4
95
+ rubygems_version: 3.2.22
75
96
  signing_key:
76
97
  specification_version: 4
77
98
  summary: Sidekiq plugin for Kuby.