ev_job_gen 0.1.1 → 0.5.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: f81e0ba7d2e6d4f0d67275f9141ef6ccaebadd6c4eb9948172166041ff3ffda1
4
- data.tar.gz: a4d81e07a49bed567582cd51045225f79348e88e90dc2f6c5f4ece29b1dfe194
3
+ metadata.gz: 7d76575d155e4b7b154b3a6c99935b9d95e6dcbc4808850300c66970060c7ac0
4
+ data.tar.gz: 8052e28d5ed38ca4dc74cf947743c5e0b50cb9a19235d68f97352291b3c0ba91
5
5
  SHA512:
6
- metadata.gz: ef4cd14d6f5444a9cac80825cb04e9aa26092464f806eba24754cda4194b52d42a3fd9e4d65762f15740b5923065927474a2f6d2e33c36c1a03a4406478efcb3
7
- data.tar.gz: 6aad2d6e3e648987cec933daf0ba1ed1a45cb1932c90601b2b9acdfcb7d8ba2cddffae273a12f0f6edc2c1b2466b9dba09202fc2f38f71d12f1b277a902807e1
6
+ metadata.gz: fcdb61bac8e410866278924228bffee720bfbbb1aad4d6cad6f1417f28f662cf232122deed5ddd3d48034a20dfd4129cf05a78ae1a2e2ace7edf0e8d9b91df15
7
+ data.tar.gz: b631dadb3640383d4e0c574200d1a7c11e2a333e7458fa5b2de3ab55bfdd803b86f53b2346e7fd75cf51ff4be534321bb5898da9f0ba101c62dcc7b206986583
@@ -3,3 +3,4 @@ language: ruby
3
3
  rvm:
4
4
  - 2.5.1
5
5
  before_install: gem install bundler -v 1.16.2
6
+ script: bundle exec rspec
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- ev_job_gen (0.1.1)
4
+ ev_job_gen (0.5.0)
5
5
  dotenv (~> 2.5.0)
6
6
 
7
7
  GEM
@@ -17,7 +17,7 @@ GEM
17
17
  pry-doc (0.13.4)
18
18
  pry (~> 0.11)
19
19
  yard (~> 0.9.11)
20
- rake (10.5.0)
20
+ rake (13.0.1)
21
21
  rspec (3.7.0)
22
22
  rspec-core (~> 3.7.0)
23
23
  rspec-expectations (~> 3.7.0)
@@ -31,7 +31,7 @@ GEM
31
31
  diff-lcs (>= 1.2.0, < 2.0)
32
32
  rspec-support (~> 3.7.0)
33
33
  rspec-support (3.7.1)
34
- yard (0.9.15)
34
+ yard (0.9.20)
35
35
 
36
36
  PLATFORMS
37
37
  ruby
@@ -41,8 +41,8 @@ DEPENDENCIES
41
41
  ev_job_gen!
42
42
  pry
43
43
  pry-doc
44
- rake (~> 10.0)
44
+ rake (~> 13.0)
45
45
  rspec (~> 3.7)
46
46
 
47
47
  BUNDLED WITH
48
- 1.16.2
48
+ 1.17.2
data/README.md CHANGED
@@ -25,11 +25,12 @@ Place a yml file in jobs directory
25
25
  # Ex. ml-project-1.yml
26
26
  namespace: ml-project-1
27
27
  image: some-docker-registory/ml-project-1:latest
28
- command: >
29
- script/evaluate | tee /tmp/out.txt;
28
+ command:
29
+ - script/evaluate | tee /tmp/out.txt
30
30
  out: /tmp/out.txt
31
31
  metrics: /tmp/metrics.json
32
32
  commithash: ${COMMITHASH}
33
+ setup_wget: apt install -y wget
33
34
  ```
34
35
 
35
36
  Then execute `ev-job-gen` command.
@@ -74,30 +75,29 @@ spec:
74
75
  app: ev-job
75
76
  role: job
76
77
  spec:
78
+
77
79
  restartPolicy: Never
78
80
  containers:
79
81
  - name: ev-job
80
- image: some-docker-registory/wantedly/ml-project-1:latest
82
+ image: some-docker-registory/ml-project-1:latest
81
83
  imagePullPolicy: Always
82
84
  command:
83
85
  - "/bin/bash"
84
86
  - "-c"
85
87
  - >
86
- script/evaluate | tee /tmp/out.txt;
87
-
88
- export AWS_ACCESS_KEY_ID=xxx;
89
- export AWS_SECRET_ACCESS_KEY=xxx;
90
- export AWS_REGION=xxx;
91
-
92
- wget https://github.com/wantedly/ev-cli/releases/download/v1.2.3/ev-v1.2.3-linux-amd64.tar.gz;
93
- tar xvzf ev-v1.2.3-linux-amd64.tar.gz;
94
- cp linux-amd64/ev ev;
95
-
88
+ script/evaluate | tee /tmp/out.txt &&
89
+ export AWS_ACCESS_KEY_ID=xxx &&
90
+ export AWS_SECRET_ACCESS_KEY=xxx &&
91
+ export AWS_REGION=xxx &&
92
+ apt install -y wget &&
93
+ wget https://github.com/wantedly/ev-cli/releases/download/v1.2.3/ev-v1.2.3-linux-amd64.tar.gz &&
94
+ tar xvzf ev-v1.2.3-linux-amd64.tar.gz &&
95
+ cp linux-amd64/ev ev &&
96
96
  ./ev upload --branch master \
97
97
  --commit ${COMMITHASH} \
98
98
  --out /tmp/out.txt \
99
99
  --metrics /tmp/metrics.json \
100
- --namespace ml-project-1;
100
+ --namespace ml-project-1
101
101
  ```
102
102
 
103
103
  ## Development
@@ -25,7 +25,7 @@ Gem::Specification.new do |spec|
25
25
 
26
26
  spec.add_dependency "dotenv", "~> 2.5.0"
27
27
  spec.add_development_dependency "bundler", "~> 1.16"
28
- spec.add_development_dependency "rake", "~> 10.0"
28
+ spec.add_development_dependency "rake", "~> 13.0"
29
29
  spec.add_development_dependency "rspec", "~> 3.7"
30
30
  spec.add_development_dependency "pry"
31
31
  spec.add_development_dependency "pry-doc"
@@ -14,6 +14,7 @@ spec:
14
14
  suspend: false
15
15
  successfulJobsHistoryLimit: 10
16
16
  failedJobsHistoryLimit: 3
17
+ startingDeadlineSeconds: 300
17
18
  jobTemplate:
18
19
  metadata:
19
20
  name: ev-job
@@ -30,4 +31,6 @@ spec:
30
31
  name: ev-job
31
32
  app: ev-job
32
33
  role: job
34
+ annotations:
35
+ cluster-autoscaler.kubernetes.io/safe-to-evict: "false"
33
36
  spec: <%= spec %>
@@ -9,6 +9,7 @@ metadata:
9
9
  app: ev-job
10
10
  role: job
11
11
  spec:
12
+ backoffLimit: 0
12
13
  template:
13
14
  metadata:
14
15
  name: ev-job-<%= job.suffix %>
@@ -8,19 +8,17 @@ containers:
8
8
  - "/bin/bash"
9
9
  - "-c"
10
10
  - >
11
- <%= job.command.strip %>
12
-
13
- export AWS_ACCESS_KEY_ID=<%= ENV['AWS_ACCESS_KEY_ID'] %>;
14
- export AWS_SECRET_ACCESS_KEY=<%= ENV['AWS_SECRET_ACCESS_KEY'] %>;
15
- export AWS_REGION=<%= ENV['AWS_REGION'] %>;
16
-
17
- wget https://github.com/wantedly/ev-cli/releases/download/v1.2.3/ev-v1.2.3-linux-amd64.tar.gz;
18
- tar xvzf ev-v1.2.3-linux-amd64.tar.gz;
19
- cp linux-amd64/ev ev;
20
-
11
+ <%= job.command.join(" && ") %> &&
12
+ export AWS_ACCESS_KEY_ID=<%= ENV['AWS_ACCESS_KEY_ID'] %> &&
13
+ export AWS_SECRET_ACCESS_KEY=<%= ENV['AWS_SECRET_ACCESS_KEY'] %> &&
14
+ export AWS_REGION=<%= ENV['AWS_REGION'] %> &&
15
+ <%= job.setup_wget %> &&
16
+ wget https://github.com/wantedly/ev-cli/releases/download/v1.2.3/ev-v1.2.3-linux-amd64.tar.gz &&
17
+ tar xvzf ev-v1.2.3-linux-amd64.tar.gz &&
18
+ cp linux-amd64/ev ev &&
21
19
  ./ev upload --branch master \
22
20
  --commit <%= job.commithash %> \
23
21
  --out <%= job.out %> \
24
22
  --metrics <%= job.metrics %> \
25
- --namespace <%= job.namespace %>;
23
+ --namespace <%= job.namespace %>
26
24
  <%= config.containers_envFrom(offset: 2) %>
@@ -3,8 +3,8 @@ require 'dotenv/load'
3
3
  require 'ev_job_gen/cli'
4
4
  require 'ev_job_gen/config'
5
5
  require 'ev_job_gen/job'
6
- require 'ev_job_gen/yml_renderer'
7
6
  require 'ev_job_gen/manifest_gen'
7
+ require 'ev_job_gen/renderer'
8
8
 
9
9
  module EvJobGen
10
10
  class << self
@@ -13,12 +13,22 @@ module EvJobGen
13
13
  @out = h["out"]
14
14
  @metrics = h["metrics"]
15
15
  @commithash = h["commithash"]
16
+ @setup_wget = h["setup_wget"] # NOTE: this is optional
16
17
 
17
18
  # NOTE: suffix is used only for oneshot job
18
19
  @suffix = 5.times.map { CHARS.sample }.join
19
20
  end
20
21
 
21
- attr_reader :namespace, :image, :command, :out, :metrics, :commithash, :suffix
22
+ attr_reader(
23
+ :namespace,
24
+ :image,
25
+ :command,
26
+ :out,
27
+ :metrics,
28
+ :commithash,
29
+ :setup_wget,
30
+ :suffix,
31
+ )
22
32
 
23
33
  private
24
34
 
@@ -20,7 +20,7 @@ module EvJobGen
20
20
  else
21
21
  raise "invalid target: #{target}"
22
22
  end
23
- @renderer = YmlRenderer.new(
23
+ @renderer = Renderer.new(
24
24
  template: template,
25
25
  specoffset: specoffset,
26
26
  jobfile: jobfile,
@@ -0,0 +1,38 @@
1
+ require 'ev_job_gen/renderer/manifest_renderer'
2
+ require 'ev_job_gen/renderer/spec_renderer'
3
+
4
+ module EvJobGen
5
+ class Renderer
6
+ def initialize(template:, specoffset:, jobfile:, configfile:)
7
+ @template = template
8
+ @specoffset = specoffset
9
+ @job = EvJobGen::Job.new(jobfile)
10
+ @config = EvJobGen::Config.new(configfile)
11
+ end
12
+
13
+ def render
14
+ spec = SpecRenderer.new(
15
+ job: @job,
16
+ config: @config,
17
+ ).render
18
+
19
+ r = ManifestRenderer.new(
20
+ template: @template,
21
+ job: @job,
22
+ spec: offset(spec, off: @specoffset + 2)
23
+ ).render
24
+
25
+ normalize(r)
26
+ end
27
+
28
+ private
29
+
30
+ def normalize(text)
31
+ text.split("\n").map { |l| l.rstrip }.map { |l| "#{l}\n" }.join
32
+ end
33
+
34
+ def offset(text, off:)
35
+ "\n" + text.split("\n").map { |l| "#{' ' * off}#{l}\n" }.join
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,18 @@
1
+ require 'erb'
2
+
3
+ module EvJobGen
4
+ class Renderer
5
+ class ManifestRenderer
6
+ def initialize(template:, job:, spec:)
7
+ @renderer = ERB.new(File.read(template))
8
+ @job = job
9
+ @spec = spec
10
+ end
11
+ attr_reader :job, :spec
12
+
13
+ def render
14
+ @renderer.result(binding) # Only use `job` and `spec`
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,27 @@
1
+ require 'erb'
2
+
3
+ module EvJobGen
4
+ class Renderer
5
+ class SpecRenderer
6
+ class << self
7
+ def spec_template_path
8
+ File.expand_path(
9
+ File.join('kubernetes', 'tmpl', 'spec_template.yml.erb'),
10
+ EvJobGen.root,
11
+ )
12
+ end
13
+ end
14
+
15
+ def initialize(job:, config:)
16
+ @job = job
17
+ @config = config
18
+ @renderer = ERB.new(File.read(SpecRenderer.spec_template_path))
19
+ end
20
+ attr_reader :job, :config
21
+
22
+ def render
23
+ @renderer.result(binding) # Only use `job` and `config`
24
+ end
25
+ end
26
+ end
27
+ end
@@ -1,3 +1,3 @@
1
1
  module EvJobGen
2
- VERSION = "0.1.1"
2
+ VERSION = "0.5.0"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ev_job_gen
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nao Minami
8
- autorequire:
8
+ autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-08-06 00:00:00.000000000 Z
11
+ date: 2020-11-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: dotenv
@@ -44,14 +44,14 @@ dependencies:
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: '10.0'
47
+ version: '13.0'
48
48
  type: :development
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: '10.0'
54
+ version: '13.0'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: rspec
57
57
  requirement: !ruby/object:Gem::Requirement
@@ -125,13 +125,15 @@ files:
125
125
  - lib/ev_job_gen/config.rb
126
126
  - lib/ev_job_gen/job.rb
127
127
  - lib/ev_job_gen/manifest_gen.rb
128
+ - lib/ev_job_gen/renderer.rb
129
+ - lib/ev_job_gen/renderer/manifest_renderer.rb
130
+ - lib/ev_job_gen/renderer/spec_renderer.rb
128
131
  - lib/ev_job_gen/version.rb
129
- - lib/ev_job_gen/yml_renderer.rb
130
132
  homepage: https://github.com/wantedly/ev-job-gen
131
133
  licenses:
132
134
  - MIT
133
135
  metadata: {}
134
- post_install_message:
136
+ post_install_message:
135
137
  rdoc_options: []
136
138
  require_paths:
137
139
  - lib
@@ -146,9 +148,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
146
148
  - !ruby/object:Gem::Version
147
149
  version: '0'
148
150
  requirements: []
149
- rubyforge_project:
150
- rubygems_version: 2.7.6
151
- signing_key:
151
+ rubygems_version: 3.0.3
152
+ signing_key:
152
153
  specification_version: 4
153
154
  summary: Generator of kubernetes manifest file for evaluation job.
154
155
  test_files: []
@@ -1,38 +0,0 @@
1
- require 'erb'
2
- require 'fileutils'
3
-
4
- module EvJobGen
5
- class YmlRenderer
6
- class << self
7
- def spec_template_path
8
- File.expand_path(
9
- File.join('kubernetes', 'tmpl', 'spec_template.yml.erb'),
10
- EvJobGen.root,
11
- )
12
- end
13
- end
14
-
15
- def initialize(template:, specoffset:, jobfile:, configfile:)
16
- @spec_renderer = ERB.new(File.read(YmlRenderer.spec_template_path))
17
- @specoffset = specoffset
18
- @renderer = ERB.new(File.read(template))
19
- @job = EvJobGen::Job.new(jobfile)
20
- @config = EvJobGen::Config.new(configfile)
21
- end
22
-
23
- attr_reader :job, :config
24
-
25
- def render
26
- spec = render_spec
27
- @renderer.result(binding)
28
- end
29
-
30
- private
31
-
32
- def render_spec
33
- r = @spec_renderer.result(binding)
34
- offset = @specoffset + 2
35
- "\n" + r.split("\n").map { |l| "#{' ' * offset}#{l}\n" }.join
36
- end
37
- end
38
- end