helm_upgrade_logs 0.2.3 → 0.2.4
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 +4 -4
- data/.github/workflows/test.yml +17 -4
- data/.rubocop.yml +1 -1
- data/CHANGELOG.md +5 -0
- data/README.md +0 -3
- data/Rakefile +1 -1
- data/exe/helm_test_logs +6 -5
- data/exe/helm_upgrade_logs +24 -17
- data/lib/helm_upgrade_logs/version.rb +1 -1
- data/lib/helm_upgrade_logs.rb +34 -16
- metadata +1 -2
- data/get_pods.rb +0 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b2dc5816493e1b7e6382d703dcc55063f5a6dd59557e233aeb8ad8f355a542c1
|
4
|
+
data.tar.gz: 2d5d74dc6af95bf6ff06ee3d3c5ad7c6d76baade4d405e141c274041c8ac5914
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c7ac65c07401d1a198e3e29ae710cf843b1601e0d7b4f24ae3401aa72b36e1b1bdd182e101df25bcafb01078fb8dae1af296b383b5ae77d3136ba84348d5dfc2
|
7
|
+
data.tar.gz: d4a00643a7461d16198e7a9f9dec6a93f782cb8790a53efc40344a3303a2c37dcbd939b88ab5d9ff95e482593a16c53283ef0acb4cf24161593aba14b9c3812a
|
data/.github/workflows/test.yml
CHANGED
@@ -30,8 +30,6 @@ jobs:
|
|
30
30
|
ruby-version: ${{ matrix.ruby-version }}
|
31
31
|
- name: Start KIND cluster
|
32
32
|
run: bash -f bin/start_kind.sh
|
33
|
-
- name: Waiting for KIND cluster to get ready
|
34
|
-
run: sleep 70
|
35
33
|
- name: Install gem
|
36
34
|
run: gem install helm_upgrade_logs
|
37
35
|
- name: Add bitnami repo
|
@@ -39,6 +37,21 @@ jobs:
|
|
39
37
|
- name: Helm install debugging logs
|
40
38
|
run: helm_upgrade_logs --install nginx bitnami/nginx --wait --debug --set service.type=ClusterIP
|
41
39
|
|
40
|
+
unit_test:
|
41
|
+
runs-on: ubuntu-latest
|
42
|
+
strategy:
|
43
|
+
matrix:
|
44
|
+
ruby-version: ['3.0']
|
45
|
+
steps:
|
46
|
+
- uses: actions/checkout@v3
|
47
|
+
- name: Set up Ruby
|
48
|
+
uses: ruby/setup-ruby@v1
|
49
|
+
with:
|
50
|
+
ruby-version: ${{ matrix.ruby-version }}
|
51
|
+
bundler-cache: true
|
52
|
+
- name: Run tests
|
53
|
+
run: bundle exec rake
|
54
|
+
|
42
55
|
test_exe:
|
43
56
|
runs-on: ubuntu-latest
|
44
57
|
strategy:
|
@@ -49,11 +62,11 @@ jobs:
|
|
49
62
|
- uses: actions/checkout@v3
|
50
63
|
- name: Start KIND cluster
|
51
64
|
run: bash -f bin/start_kind.sh
|
52
|
-
# - name: Waiting for KIND cluster to get ready
|
53
|
-
# run: sleep 70
|
54
65
|
- name: Add bitnami repo
|
55
66
|
run: helm repo add bitnami https://charts.bitnami.com/bitnami
|
56
67
|
- name: Install bitnami
|
57
68
|
run: ./exe/helm_upgrade_logs --install nginx bitnami/nginx --wait --debug --set service.type=ClusterIP --set replicaCount=2
|
69
|
+
- name: Test bitnami
|
70
|
+
run: ./exe/helm_test_logs nginx
|
58
71
|
- name: Install Redis
|
59
72
|
run: ./exe/helm_upgrade_logs --install redis bitnami/redis --set auth.enabled=false --version 14.0.2 --wait
|
data/.rubocop.yml
CHANGED
data/CHANGELOG.md
CHANGED
data/README.md
CHANGED
@@ -51,9 +51,6 @@ However if you do want to try it, to install `nginx` from the chart `bitnami/ngi
|
|
51
51
|
curl -s https://raw.githubusercontent.com/SamuelGarrattIqa/helm_upgrade_logs/main/bin/helm_upgrade_logs.sh | bash -s -- --install nginx bitnami/nginx
|
52
52
|
```
|
53
53
|
|
54
|
-
## TODO
|
55
|
-
* Make library handle `n`, `--namespace` from helm command
|
56
|
-
|
57
54
|
## Development
|
58
55
|
|
59
56
|
After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
|
data/Rakefile
CHANGED
data/exe/helm_test_logs
CHANGED
@@ -2,13 +2,14 @@
|
|
2
2
|
# frozen_string_literal: true
|
3
3
|
|
4
4
|
$LOAD_PATH.unshift File.join(File.dirname(__FILE__), "..", "lib")
|
5
|
-
require
|
5
|
+
require "helm_upgrade_logs"
|
6
6
|
|
7
|
-
|
7
|
+
@release_name = ARGV.find { |arg| !arg.start_with?("-") }
|
8
|
+
@namespace = namespace_from_args(ARGV)
|
8
9
|
|
9
|
-
helm_pid = Process.spawn "helm test #{ARGV.join(
|
10
|
+
helm_pid = Process.spawn "helm test #{ARGV.join(" ")}"
|
10
11
|
|
11
|
-
log_pid = Process.spawn
|
12
|
+
log_pid = Process.spawn(add_ns("kubectl logs -lapp.kubernetes.io/instance=#{@release_name} -f --all-containers --prefix --ignore-errors=true --max-log-requests=20 --timestamps=true --since=1s"))
|
12
13
|
|
13
14
|
Process.wait helm_pid
|
14
|
-
|
15
|
+
`kill #{log_pid}`
|
data/exe/helm_upgrade_logs
CHANGED
@@ -1,42 +1,49 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
# frozen_string_literal: true
|
3
3
|
|
4
|
-
require
|
4
|
+
require "open3"
|
5
5
|
$LOAD_PATH.unshift File.join(File.dirname(__FILE__), "..", "lib")
|
6
|
-
require
|
6
|
+
require "helm_upgrade_logs"
|
7
7
|
|
8
|
-
|
8
|
+
@release_name = ARGV.find { |arg| !arg.start_with?("-") }
|
9
|
+
@namespace = namespace_from_args(ARGV)
|
9
10
|
|
10
|
-
helm_pid = Process.spawn "helm upgrade #{ARGV.join(
|
11
|
+
@helm_pid = Process.spawn "helm upgrade #{ARGV.join(" ")}"
|
11
12
|
|
12
|
-
event_pid = Process.spawn
|
13
|
-
service_pid = Process.spawn
|
13
|
+
event_pid = Process.spawn(add_ns("kubectl get events --watch-only=true"))
|
14
|
+
service_pid = Process.spawn(add_ns("kubectl get services --watch-only=true"))
|
14
15
|
|
15
16
|
wait_for_pod_to_log
|
16
17
|
|
17
18
|
@pods = []
|
18
19
|
@pod_pids = {}
|
19
20
|
|
20
|
-
|
21
|
-
|
21
|
+
begin
|
22
|
+
Process.waitpid(@helm_pid, Process::WNOHANG)
|
23
|
+
rescue Errno::ECHILD
|
24
|
+
`kill #{event_pid}`
|
25
|
+
`kill #{service_pid}`
|
26
|
+
raise HelmUpgradeLogs::Error, "Failed to find logs before helm finished"
|
27
|
+
end
|
28
|
+
|
29
|
+
while Process.waitpid(@helm_pid, Process::WNOHANG).nil?
|
30
|
+
pods = read_pods
|
22
31
|
if pods != @pods
|
23
32
|
@pods = pods
|
24
|
-
puts "[INFO] Pods: #{pods.join(
|
33
|
+
puts "[INFO] Pods: #{pods.join(",")}"
|
25
34
|
# Could change this each to Parallel.each
|
26
35
|
@pods.each do |pod|
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
36
|
+
next unless @pod_pids[pod].nil?
|
37
|
+
|
38
|
+
wait_for_specific_pod_to_log pod
|
39
|
+
log_pid = Process.spawn(add_ns("kubectl logs #{pod} -f --all-containers --prefix --ignore-errors=true --timestamps=true"))
|
40
|
+
@pod_pids[pod] = log_pid
|
32
41
|
end
|
33
42
|
end
|
34
43
|
sleep 1
|
35
44
|
end
|
36
45
|
`kill #{event_pid}`
|
37
46
|
`kill #{service_pid}`
|
38
|
-
@pod_pids.each do |
|
47
|
+
@pod_pids.each do |_pod, pid|
|
39
48
|
`kill #{pid}`
|
40
49
|
end
|
41
|
-
|
42
|
-
|
data/lib/helm_upgrade_logs.rb
CHANGED
@@ -1,10 +1,10 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require
|
3
|
+
require "open3"
|
4
4
|
require_relative "helm_upgrade_logs/version"
|
5
5
|
|
6
|
-
ENV[
|
7
|
-
ENV[
|
6
|
+
ENV["helm_upgrade_logs_log_start"] ||= "90"
|
7
|
+
ENV["helm_upgrade_logs_pod_start"] ||= "35"
|
8
8
|
|
9
9
|
# Approach not ideal as it will for all containers to be ready and want to stream logs before that
|
10
10
|
def wait_for_container_ready
|
@@ -12,43 +12,61 @@ def wait_for_container_ready
|
|
12
12
|
Process.wait wait_pid
|
13
13
|
end
|
14
14
|
|
15
|
-
# Wait for pods with logs to be present
|
15
|
+
# Wait for very first pods with logs to be present
|
16
16
|
# Not ideal due to https://github.com/kubernetes/kubernetes/issues/28746
|
17
17
|
def wait_for_pod_to_log
|
18
|
-
ENV[
|
18
|
+
ENV["helm_upgrade_logs_log_start"].to_i.times do |i|
|
19
|
+
break unless Process.waitpid(@helm_pid, Process::WNOHANG).nil?
|
20
|
+
|
19
21
|
sleep 1
|
20
|
-
stdout, stderr,
|
22
|
+
stdout, stderr, = Open3.capture3(add_ns("kubectl logs -lapp.kubernetes.io/instance=#{@release_name}"))
|
21
23
|
if stderr.empty? && !stdout.strip.empty?
|
22
|
-
puts
|
24
|
+
puts "[INFO] Pods with logs found"
|
23
25
|
break
|
24
|
-
|
25
|
-
puts "[INFO] Waiting for pod logs: #{stderr}"
|
26
|
+
elsif (i % 3).zero?
|
27
|
+
puts "[INFO] Waiting for pod logs: #{stderr}"
|
26
28
|
end
|
27
29
|
end
|
28
30
|
end
|
29
31
|
|
32
|
+
# Wait for logs from a specific pod
|
30
33
|
def wait_for_specific_pod_to_log(pod_name)
|
31
|
-
ENV[
|
34
|
+
ENV["helm_upgrade_logs_pod_start"].to_i.times do |i|
|
32
35
|
sleep 1
|
33
|
-
stdout, stderr,
|
36
|
+
stdout, stderr, = Open3.capture3(add_ns("kubectl logs #{pod_name}"))
|
34
37
|
if stderr.empty? && !stdout.strip.empty?
|
35
38
|
puts "[INFO] Pod #{pod_name} with logs found"
|
36
39
|
break
|
37
|
-
|
38
|
-
puts "[INFO] Waiting for pod #{pod_name} logs: #{stderr}"
|
40
|
+
elsif i.even?
|
41
|
+
puts "[INFO] Waiting for pod #{pod_name} logs: #{stderr}"
|
39
42
|
end
|
40
43
|
end
|
41
44
|
end
|
42
45
|
|
43
|
-
|
44
|
-
|
46
|
+
# Get pods
|
47
|
+
def read_pods
|
48
|
+
stdout, stderr, = Open3.capture3(add_ns("kubectl get pods -lapp.kubernetes.io/instance=#{@release_name} -o name"))
|
45
49
|
if stderr.empty?
|
46
|
-
stdout.lines.collect
|
50
|
+
stdout.lines.collect(&:strip)
|
47
51
|
else
|
48
52
|
[]
|
49
53
|
end
|
50
54
|
end
|
51
55
|
|
56
|
+
# @param [Array] args
|
57
|
+
def namespace_from_args(args)
|
58
|
+
match_index = args.find_index { |arg| %w[-n --namespace].include?(arg) }
|
59
|
+
return nil unless match_index
|
60
|
+
|
61
|
+
args[match_index + 1]
|
62
|
+
end
|
63
|
+
|
64
|
+
# Add namespace to kube query
|
65
|
+
def add_ns(kube_query)
|
66
|
+
kube_query += " -n #{@namespace}" if @namespace
|
67
|
+
kube_query
|
68
|
+
end
|
69
|
+
|
52
70
|
module HelmUpgradeLogs
|
53
71
|
class Error < StandardError; end
|
54
72
|
# Your code goes here...
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: helm_upgrade_logs
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Samuel Garratt
|
@@ -41,7 +41,6 @@ files:
|
|
41
41
|
- bin/start_kind.sh
|
42
42
|
- exe/helm_test_logs
|
43
43
|
- exe/helm_upgrade_logs
|
44
|
-
- get_pods.rb
|
45
44
|
- helm_upgrade_logs.gemspec
|
46
45
|
- lib/helm_upgrade_logs.rb
|
47
46
|
- lib/helm_upgrade_logs/version.rb
|