stax-helm 0.0.7 → 0.0.11

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: ce6add2c9a7276df7ed801b49c7f3a7151ba4d98c34b3690a4fdaca6678fdeb5
4
- data.tar.gz: c04af79c0c1fe2a14d7493e175980aeef5864f074f2f405bc67bd7fef35696c8
3
+ metadata.gz: e468498945819346be38bcecf9196c53f1710899e8d2818ba24e6e8d39e99f73
4
+ data.tar.gz: d63fcefed8ded8b86229794205e06fe9b7d3b83d61e0f29223e993219171e32d
5
5
  SHA512:
6
- metadata.gz: fb825149e84265f3f50ea1d17554f4514d2db401d771251063f9f1ce81fb90cfe221053b4a7f9c168797777493679a11f56d850af34fbb3c548cff32237174c3
7
- data.tar.gz: 29ff4a39a0ac91b12ea218cff57fd6afa81658ff9fc4ec26d8a90019bab133e8ef3fe5cf7adf3ae895a89a0c3b79f946a8b819e801093ffdf13e8d89418f668f
6
+ metadata.gz: ca3ffab05c1866c546deaf0a8fac5361ecdadecdd6a2bebc5bb9b46321b6a36824680c36a9294288b5007dd5903b86d89ea435ea5d42c45ee88f3f195c58f1d1
7
+ data.tar.gz: f0f59bceb82dee3cd0f9b8ef236e49b7c4f7b6737218ba76d6c79c107f38aa15dc099847467bcbfa234fbd8a3a74686cc49d45d03aa6243e7349e41df5fe5538
@@ -8,7 +8,7 @@ module Stax
8
8
 
9
9
  ## make string safe to use in naming helm stuff
10
10
  def helm_safe(string)
11
- string.slice(0, 53).gsub(/[\W_]/, '-').downcase
11
+ string.slice(0, 53).gsub(/[\W_]/, '-').sub(/-+$/, '').downcase
12
12
  end
13
13
  end
14
14
 
@@ -0,0 +1,13 @@
1
+ ## tasks to get cronjob details
2
+ module Stax
3
+ module Helm
4
+ class Cmd < Base
5
+
6
+ desc 'cronjobs', 'list cronjobs'
7
+ def cronjobs
8
+ kubectl_run(:get, :cronjobs, '-l', helm_selector)
9
+ end
10
+
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,13 @@
1
+ ## tasks to get job details
2
+ module Stax
3
+ module Helm
4
+ class Cmd < Base
5
+
6
+ desc 'jobs', 'list jobs'
7
+ def jobs
8
+ kubectl_run(:get, :jobs, '-l', helm_selector)
9
+ end
10
+
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,109 @@
1
+ require 'securerandom'
2
+
3
+ module Stax
4
+ module Helm
5
+ class Cmd
6
+
7
+ no_commands do
8
+ ## construct a Job template
9
+ def helm_run_template(name)
10
+ {
11
+ apiVersion: 'batch/v1',
12
+ kind: :Job,
13
+ metadata: {
14
+ name: name,
15
+ labels: {
16
+ 'app.kubernetes.io/managed-by' => :stax
17
+ }
18
+ },
19
+ spec: {
20
+ template: {
21
+ spec: {
22
+ restartPolicy: :Never
23
+ }
24
+ }
25
+ }
26
+ }
27
+ end
28
+
29
+ ## Deployment to clone for container
30
+ def helm_run_deployment
31
+ "#{helm_release_name}-web"
32
+ end
33
+
34
+ ## name of container to clone from Deployment
35
+ def helm_run_container
36
+ 'web'
37
+ end
38
+
39
+ ## name for Job to create based on container
40
+ def helm_run_job
41
+ "#{helm_release_name}-run-#{SecureRandom.hex(4)}"
42
+ end
43
+
44
+ ## default command to run
45
+ def helm_run_cmd
46
+ 'bash'
47
+ end
48
+ end
49
+
50
+ ## task creates a dedicated unique kubernetes Job, with
51
+ ## container spec based on the helm release deployment
52
+ ## requested, then does an interactive exec to the pod and
53
+ ## container created, and deletes the Job on exit
54
+ desc 'runcmd [CMD]', 'run dedicated interactive container'
55
+ method_option :sleep, type: :string, default: '1h', description: 'kill container after time'
56
+ method_option :keep, type: :boolean, default: false, description: 'do not delete job'
57
+ def runcmd(*cmd)
58
+ ## use default if not set
59
+ cmd = Array(helm_run_cmd) if cmd.empty?
60
+
61
+ ## name of k8s Job to create, and basic template
62
+ job = helm_run_job
63
+ template = helm_run_template(job)
64
+
65
+ ## get deployment and extract container spec
66
+ deployment = kubectl_json(:get, :deployment, helm_run_deployment)
67
+ spec = deployment.dig('spec', 'template', 'spec', 'containers').find do |c|
68
+ c['name'] == helm_run_container
69
+ end
70
+
71
+ ## cleanup the container spec so we can use it in a Job
72
+ spec.delete('livenessProbe')
73
+ spec.delete('readinessProbe')
74
+ spec.delete('startupProbe')
75
+ spec.delete('volumeMounts')
76
+ spec['name'] = 'run'
77
+ spec['args'] = ['sleep', options[:sleep]]
78
+
79
+ ## add container to Job template
80
+ template[:spec][:template][:spec][:containers] = [ spec ]
81
+
82
+ ## get service account and add to template
83
+ service_account = deployment.dig('spec', 'template', 'spec', 'serviceAccountName')
84
+ template[:spec][:template][:spec][:serviceAccountName] = service_account if service_account
85
+
86
+ ## create new unique Job based on the container spec
87
+ debug("Creating job #{job}")
88
+ Open3.popen2('kubectl create -f -') { |stdin, stdout, _|
89
+ stdin.print(template.to_json)
90
+ stdin.close
91
+ puts stdout.gets
92
+ }
93
+
94
+ ## get name of the Pod created by the Job
95
+ pod = kubectl_json(:get, :pod, '-l', "job-name=#{job}")['items'].first['metadata']['name']
96
+
97
+ ## exec into the pod and run interactive command
98
+ debug("Connecting to pod #{pod}")
99
+ kubectl_run(:wait, '--for=condition=Ready', '--timeout=5m', :pod, pod)
100
+ kubectl_run(:exec, '-it', pod, '--', *cmd)
101
+ rescue JSON::ParserError
102
+ fail_task('cannot get kubernetes resource')
103
+ ensure
104
+ ## delete Job
105
+ kubectl_run(:delete, :job, job) unless options[:keep]
106
+ end
107
+ end
108
+ end
109
+ end
@@ -1,5 +1,5 @@
1
1
  module Stax
2
2
  module Helm
3
- VERSION = '0.0.7'
3
+ VERSION = '0.0.11'
4
4
  end
5
5
  end
data/lib/stax/helm.rb CHANGED
@@ -4,5 +4,8 @@ require 'stax/helm/kubectl'
4
4
  require 'stax/helm/ingress'
5
5
  require 'stax/helm/pod'
6
6
  require 'stax/helm/deployment'
7
+ require 'stax/helm/jobs'
8
+ require 'stax/helm/cronjobs'
7
9
  require 'stax/helm/stern'
10
+ require 'stax/helm/runcmd'
8
11
  Stax.add_command(:helm, Stax::Helm::Cmd)
data/stax-helm.gemspec CHANGED
@@ -21,7 +21,7 @@ Gem::Specification.new do |spec|
21
21
  spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
22
22
  spec.require_paths = ['lib']
23
23
 
24
- spec.add_development_dependency 'bundler', '~> 1.14'
24
+ spec.add_development_dependency 'bundler', '~> 2'
25
25
  spec.add_development_dependency 'rake', '>= 12.3.3'
26
26
 
27
27
  spec.add_dependency('stax')
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: stax-helm
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.7
4
+ version: 0.0.11
5
5
  platform: ruby
6
6
  authors:
7
7
  - Richard Lister
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-09-26 00:00:00.000000000 Z
11
+ date: 2021-09-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '1.14'
19
+ version: '2'
20
20
  type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '1.14'
26
+ version: '2'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rake
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -69,10 +69,13 @@ files:
69
69
  - lib/stax/helm.rb
70
70
  - lib/stax/helm/base.rb
71
71
  - lib/stax/helm/cmd.rb
72
+ - lib/stax/helm/cronjobs.rb
72
73
  - lib/stax/helm/deployment.rb
73
74
  - lib/stax/helm/ingress.rb
75
+ - lib/stax/helm/jobs.rb
74
76
  - lib/stax/helm/kubectl.rb
75
77
  - lib/stax/helm/pod.rb
78
+ - lib/stax/helm/runcmd.rb
76
79
  - lib/stax/helm/stern.rb
77
80
  - lib/stax/helm/version.rb
78
81
  - stax-helm.gemspec
@@ -95,7 +98,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
95
98
  - !ruby/object:Gem::Version
96
99
  version: '0'
97
100
  requirements: []
98
- rubygems_version: 3.0.3
101
+ rubygems_version: 3.1.4
99
102
  signing_key:
100
103
  specification_version: 4
101
104
  summary: Control helm charts with stax.