active_job_kubernetes 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 20cb5ea1a776e1bdc7a93510580960fafea94e8dbb8fa739c849b27b772491cb
4
+ data.tar.gz: 392ea4a6686dce2dc6811e4bf42a0216d1273daad44ed33cd164b1c2fb63f102
5
+ SHA512:
6
+ metadata.gz: 8c546c75198de4773100c310bf24dfebc7f9904813380545de75b02a0b64fdd0d95b19c33e3251f5bcbc3de201bba677c5005f61bfebdbb1a8d28288d06de123
7
+ data.tar.gz: 601c2c186a5316b08207f01edfe4f55716678790d9c779e278fd27078a04e759465368b94029f1fdb144f1097065f235ec415a272f63a075faa89f8fd97c7055
data/.gitignore ADDED
@@ -0,0 +1,161 @@
1
+ ### Linux ###
2
+ *~
3
+
4
+ # temporary files which can be created if a process still has a handle open of a deleted file
5
+ .fuse_hidden*
6
+
7
+ # KDE directory preferences
8
+ .directory
9
+
10
+ # Linux trash folder which might appear on any partition or disk
11
+ .Trash-*
12
+
13
+ # .nfs files are created when an open file is removed but is still being accessed
14
+ .nfs*
15
+
16
+ ### macOS ###
17
+ # General
18
+ .DS_Store
19
+ .AppleDouble
20
+ .LSOverride
21
+
22
+ # Icon must end with two \r
23
+ Icon
24
+
25
+
26
+ # Thumbnails
27
+ ._*
28
+
29
+ # Files that might appear in the root of a volume
30
+ .DocumentRevisions-V100
31
+ .fseventsd
32
+ .Spotlight-V100
33
+ .TemporaryItems
34
+ .Trashes
35
+ .VolumeIcon.icns
36
+ .com.apple.timemachine.donotpresent
37
+
38
+ # Directories potentially created on remote AFP share
39
+ .AppleDB
40
+ .AppleDesktop
41
+ Network Trash Folder
42
+ Temporary Items
43
+ .apdisk
44
+
45
+ ### Ruby ###
46
+ *.gem
47
+ *.rbc
48
+ /.config
49
+ /coverage/
50
+ /InstalledFiles
51
+ /pkg/
52
+ /spec/reports/
53
+ /spec/examples.txt
54
+ /test/tmp/
55
+ /test/version_tmp/
56
+ /tmp/
57
+
58
+ # Used by dotenv library to load environment variables.
59
+ # .env
60
+
61
+ # Ignore Byebug command history file.
62
+ .byebug_history
63
+
64
+ ## Specific to RubyMotion:
65
+ .dat*
66
+ .repl_history
67
+ build/
68
+ *.bridgesupport
69
+ build-iPhoneOS/
70
+ build-iPhoneSimulator/
71
+
72
+ ## Specific to RubyMotion (use of CocoaPods):
73
+ #
74
+ # We recommend against adding the Pods directory to your .gitignore. However
75
+ # you should judge for yourself, the pros and cons are mentioned at:
76
+ # https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control
77
+ # vendor/Pods/
78
+
79
+ ## Documentation cache and generated files:
80
+ /.yardoc/
81
+ /_yardoc/
82
+ /doc/
83
+ /rdoc/
84
+
85
+ ## Environment normalization:
86
+ /.bundle/
87
+ /vendor/bundle
88
+ /lib/bundler/man/
89
+
90
+ # for a library or gem, you might want to ignore these files since the code is
91
+ # intended to run in multiple environments; otherwise, check them in:
92
+ Gemfile.lock
93
+ .ruby-version
94
+ .ruby-gemset
95
+
96
+ # unless supporting rvm < 1.11.0 or doing something fancy, ignore this:
97
+ .rvmrc
98
+
99
+ # Used by RuboCop. Remote config files pulled in from inherit_from directive.
100
+ # .rubocop-https?--*
101
+
102
+ ### Vim ###
103
+ # Swap
104
+ [._]*.s[a-v][a-z]
105
+ !*.svg # comment out if you don't need vector files
106
+ [._]*.sw[a-p]
107
+ [._]s[a-rt-v][a-z]
108
+ [._]ss[a-gi-z]
109
+ [._]sw[a-p]
110
+
111
+ # Session
112
+ Session.vim
113
+ Sessionx.vim
114
+
115
+ # Temporary
116
+ .netrwhist
117
+ # Auto-generated tag files
118
+ tags
119
+ # Persistent undo
120
+ [._]*.un~
121
+
122
+ ### VisualStudioCode ###
123
+ .vscode/*
124
+ !.vscode/tasks.json
125
+ !.vscode/launch.json
126
+ !.vscode/extensions.json
127
+ *.code-workspace
128
+
129
+ # Local History for Visual Studio Code
130
+ .history/
131
+
132
+ ### VisualStudioCode Patch ###
133
+ # Ignore all local history of files
134
+ .history
135
+ .ionide
136
+
137
+ ### Windows ###
138
+ # Windows thumbnail cache files
139
+ Thumbs.db
140
+ Thumbs.db:encryptable
141
+ ehthumbs.db
142
+ ehthumbs_vista.db
143
+
144
+ # Dump file
145
+ *.stackdump
146
+
147
+ # Folder config file
148
+ [Dd]esktop.ini
149
+
150
+ # Recycle Bin used on file shares
151
+ $RECYCLE.BIN/
152
+
153
+ # Windows Installer files
154
+ *.cab
155
+ *.msi
156
+ *.msix
157
+ *.msm
158
+ *.msp
159
+
160
+ # Windows shortcuts
161
+ *.lnk
data/CHANGELOG.md ADDED
@@ -0,0 +1,5 @@
1
+ # Changelog
2
+
3
+ ## 0.1.0
4
+
5
+ - Initial release
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source "https://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in active-job-kubernetes.gemspec
4
+ gemspec
data/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2021 Omja Das
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,86 @@
1
+ # active-job-kubernetes
2
+
3
+ Rails Active Job adapter to run background jobs using
4
+ [Kubernetes Jobs](https://kubernetes.io/docs/concepts/workloads/controllers/job/).
5
+
6
+ ## Installation
7
+
8
+ Add this line to your application's Gemfile:
9
+
10
+ ```ruby
11
+ gem 'active_job_kubernetes'
12
+ ```
13
+
14
+ And then execute:
15
+
16
+ ```bash
17
+ bundle install
18
+ ```
19
+
20
+ Or install it yourself as:
21
+
22
+ ```bash
23
+ gem install active-job-kubernetes
24
+ ```
25
+
26
+ ## Usage
27
+
28
+ ```ruby
29
+ class HelloWorldJob < ApplicationJob
30
+ self.queue_adapter = :kubernetes
31
+
32
+ def perform
33
+ puts 'Hello, world'
34
+ end
35
+
36
+ def manifest
37
+ YAML.safe_load(
38
+ <<~MANIFEST
39
+ apiVersion: batch/v1
40
+ kind: Job
41
+ metadata:
42
+ generatedName: hello-world
43
+ spec:
44
+ template:
45
+ metadata:
46
+ name: hello-world
47
+ spec:
48
+ restartPolicy: Never
49
+ containers:
50
+ - name: worker
51
+ image: example:latest
52
+ command: ["rake"]
53
+ args: ["active_job_kubernetes:run_job"]
54
+ MANIFEST
55
+ )
56
+ end
57
+
58
+ def kubeclient(scope)
59
+ endpoint = '' # cluster endpoint
60
+
61
+ Kubeclient::Client.new(endpoint + scope, 'v1')
62
+ end
63
+ end
64
+ ```
65
+
66
+ ## Development
67
+
68
+ After checking out the repo, run `bin/setup` to install dependencies. You can
69
+ also run `bin/console` for an interactive prompt that will allow you to
70
+ experiment.
71
+
72
+ To install this gem onto your local machine, run `bundle exec rake install`. To
73
+ release a new version, update the version number in `version.rb`, and then run
74
+ `bundle exec rake release`, which will create a git tag for the version, push
75
+ git commits and tags, and push the `.gem` file to
76
+ [rubygems.org](https://rubygems.org).
77
+
78
+ ## Contributing
79
+
80
+ Bug reports and pull requests are welcome on GitHub at
81
+ <https://github.com/omjadas/active-job-kubernetes>.
82
+
83
+ ## License
84
+
85
+ The gem is available as open source under the terms of the
86
+ [MIT License](https://opensource.org/licenses/MIT).
data/Rakefile ADDED
@@ -0,0 +1,2 @@
1
+ require "bundler/gem_tasks"
2
+ task :default => :spec
@@ -0,0 +1,32 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'lib/active_job_kubernetes/version'
4
+
5
+ Gem::Specification.new do |spec|
6
+ spec.name = 'active_job_kubernetes'
7
+ spec.version = ActiveJobKubernetes::VERSION
8
+ spec.authors = ['omjadas']
9
+ spec.email = ['omja.das@gmail.com']
10
+
11
+ spec.summary = 'Active Job Adapter for Kubernetes'
12
+ spec.description = 'Run Rails Active Jobs as Kubernetes Jobs'
13
+ spec.homepage = 'https://github.com/omjadas/active-job-kubernetes'
14
+ spec.license = 'MIT'
15
+ spec.required_ruby_version = Gem::Requirement.new('>= 2.5.0')
16
+
17
+ spec.metadata['homepage_uri'] = spec.homepage
18
+ spec.metadata['source_code_uri'] = 'https://github.com/omjadas/active-job-kubernetes'
19
+ spec.metadata['changelog_uri'] = 'https://github.com/omjadas/active-job-kubernetes/blob/main/CHANGELOG.md'
20
+
21
+ # Specify which files should be added to the gem when it is released.
22
+ # The `git ls-files -z` loads the files in the RubyGem that have been added into git.
23
+ spec.files = Dir.chdir(File.expand_path('..', __FILE__)) do
24
+ `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
25
+ end
26
+ spec.bindir = 'exe'
27
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
28
+ spec.require_paths = ['lib']
29
+
30
+ spec.add_dependency 'kubeclient', '~> 4.0'
31
+ spec.add_dependency 'rails', '>= 5.0', '<7'
32
+ end
data/bin/console ADDED
@@ -0,0 +1,15 @@
1
+ #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+
4
+ require 'bundler/setup'
5
+ require 'active_job_kubernetes'
6
+
7
+ # You can add fixtures and/or initialization code here to make experimenting
8
+ # with your gem easier. You can also use a different console, if you like.
9
+
10
+ # (If you use this, don't forget to add pry to your Gemfile!)
11
+ # require "pry"
12
+ # Pry.start
13
+
14
+ require 'irb'
15
+ IRB.start(__FILE__)
data/bin/setup ADDED
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+ IFS=$'\n\t'
4
+ set -vx
5
+
6
+ bundle install
7
+
8
+ # Do any other automated setup that you need to do here
@@ -0,0 +1,28 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'kubeclient'
4
+
5
+ module ActiveJob
6
+ module QueueAdapters
7
+ class KubernetesAdapter
8
+ def enqueue(job)
9
+ serialized_job = JSON.dump(job.serialize)
10
+ kube_job = Kubeclient::Resource.new(job.manifest)
11
+
12
+ kube_job.spec.template.spec.containers.map do |container|
13
+ container.env ||= []
14
+ container.env.push({
15
+ 'name' => 'SERIALIZED_JOB',
16
+ 'value' => serialized_job
17
+ })
18
+ end
19
+
20
+ job.kubeclient('/apis/batch').create_job(kube_job)
21
+ end
22
+
23
+ def enqueue_at(_job, _timestamp)
24
+ raise NotImplementedError, 'Enqueueing jobs in the future is not supported.'
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'active_job/queue_adapters/kubernetes_adapter'
4
+ require 'active_job_kubernetes/version'
5
+ require 'active_job_kubernetes/railtie' if defined?(Rails::Railtie)
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ module ActiveJobKubernetes
4
+ class Railtie < Rails::Railtie
5
+ rake_tasks do
6
+ require 'active_job_kubernetes/tasks'
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ namespace :active_job_kubernetes do
4
+ task run_job: :environment do
5
+ ActiveJob::Base.execute(JSON.parse(ENV['SERIALIZED_JOB']))
6
+ end
7
+ end
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ module ActiveJobKubernetes
4
+ VERSION = '0.1.0'
5
+ end
metadata ADDED
@@ -0,0 +1,94 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: active_job_kubernetes
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - omjadas
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2021-08-19 00:00:00.000000000 Z
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: '4.0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '4.0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rails
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '5.0'
34
+ - - "<"
35
+ - !ruby/object:Gem::Version
36
+ version: '7'
37
+ type: :runtime
38
+ prerelease: false
39
+ version_requirements: !ruby/object:Gem::Requirement
40
+ requirements:
41
+ - - ">="
42
+ - !ruby/object:Gem::Version
43
+ version: '5.0'
44
+ - - "<"
45
+ - !ruby/object:Gem::Version
46
+ version: '7'
47
+ description: Run Rails Active Jobs as Kubernetes Jobs
48
+ email:
49
+ - omja.das@gmail.com
50
+ executables: []
51
+ extensions: []
52
+ extra_rdoc_files: []
53
+ files:
54
+ - ".gitignore"
55
+ - CHANGELOG.md
56
+ - Gemfile
57
+ - LICENSE
58
+ - README.md
59
+ - Rakefile
60
+ - active_job_kubernetes.gemspec
61
+ - bin/console
62
+ - bin/setup
63
+ - lib/active_job/queue_adapters/kubernetes_adapter.rb
64
+ - lib/active_job_kubernetes.rb
65
+ - lib/active_job_kubernetes/railtie.rb
66
+ - lib/active_job_kubernetes/tasks.rb
67
+ - lib/active_job_kubernetes/version.rb
68
+ homepage: https://github.com/omjadas/active-job-kubernetes
69
+ licenses:
70
+ - MIT
71
+ metadata:
72
+ homepage_uri: https://github.com/omjadas/active-job-kubernetes
73
+ source_code_uri: https://github.com/omjadas/active-job-kubernetes
74
+ changelog_uri: https://github.com/omjadas/active-job-kubernetes/blob/main/CHANGELOG.md
75
+ post_install_message:
76
+ rdoc_options: []
77
+ require_paths:
78
+ - lib
79
+ required_ruby_version: !ruby/object:Gem::Requirement
80
+ requirements:
81
+ - - ">="
82
+ - !ruby/object:Gem::Version
83
+ version: 2.5.0
84
+ required_rubygems_version: !ruby/object:Gem::Requirement
85
+ requirements:
86
+ - - ">="
87
+ - !ruby/object:Gem::Version
88
+ version: '0'
89
+ requirements: []
90
+ rubygems_version: 3.1.6
91
+ signing_key:
92
+ specification_version: 4
93
+ summary: Active Job Adapter for Kubernetes
94
+ test_files: []