helm_upgrade_logs 0.2.0 → 0.2.3

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: 198e9553eb5958f78a59b2da3c8636b42da196a6629b9be4b4280da05d148555
4
- data.tar.gz: 5f2ad592198f5500a259fa90081a5ba20ea68193036432ce86f5437143e2cbb6
3
+ metadata.gz: e5195e2b08d8a4c6838d8cbf16fa070551bed1953008f46873d6f41ac07c829d
4
+ data.tar.gz: 338bab0411ebc7e0a059b66392a30342187a6a9fb1ba623a3796baee331a5119
5
5
  SHA512:
6
- metadata.gz: 11c316ff2bc6332d6be91f722a7143687d7b3dd8375cd6e58429f59384feff2bd0d30b71f49ebc8aaebf71ba6c979657624b6ae3690668c2a2f3b2c71ef069ca
7
- data.tar.gz: c851df7d22c2a59d546129d0592cf5bb19d0881db7c07f75b03b64d9bc64e746b33c26fa6d8ea502d55e446c1600e5659ee441dcee1c4d05fbbf9fb86cbbded0
6
+ metadata.gz: 5d7b9c585181eef228e5bdaebacbc3d5d1764e6d0bbcb6aeb62db8389482f2011bba423d4d836dae44c8c16d0e2c94cab8352ef60b5376cb884b46ed2e858c75
7
+ data.tar.gz: 1417cbbe9bcbcc02501d62c30eac1b6d13b9ee8bbe060f577e2342d188539e215ea73c32d25a072bb3f401a29fd3436a5a8de524ebdd73fce829d820eed459a3
data/CHANGELOG.md CHANGED
@@ -1,3 +1,11 @@
1
+ ## [0.2.3] - 2022-04-20
2
+
3
+ - Configuration on initial wait for pods logs and subsequent wait limits
4
+
5
+ ## [0.2.2] - 2022-04-20
6
+
7
+ - Wait for logs on each pod having a process for logging each pod
8
+
1
9
  ## [0.2.0] - 2022-04-20
2
10
 
3
11
  - Monitoring pods don't filter managed by helm as some pods don't have that with selectorLabels
data/README.md CHANGED
@@ -20,7 +20,9 @@ Or install it yourself as:
20
20
 
21
21
  ## Usage
22
22
 
23
- This gem is purely about an `exe` to wrap around `helm` commands and to log helpful commands.
23
+ This gem is purely about an `exe` to wrap around `helm` commands and to log events and pod logs that happen as
24
+ part of that release while it is being released.
25
+
24
26
  Once installed, install/upgrade a helm chart with
25
27
 
26
28
  ```bash
@@ -29,17 +31,29 @@ helm_upgrade_logs --install redis bitnami/redis --set auth.enabled=false --versi
29
31
 
30
32
  After the `helm_upgrade_logs` command put any options that would normally add after `helm upgrade`.
31
33
 
34
+ This library waits for logs to start in pods for 90 seconds or controlled by environment variable `helm_upgrade_logs_log_start`.
35
+ After that it waits 35 seconds for logs to start in pods after the first one.
36
+ This is controlled by environment variable `helm_upgrade_logs_pod_start`
37
+
32
38
  To test a chart showing it logs, in a similar way run
33
39
  ```bash
34
40
  helm_test_logs redis
35
41
  ```
36
42
 
37
- This also has a bash script which can be used directly. E.g., to install `nginx` from the chart `bitnami/nginx`.
43
+ ### Aside bash script
44
+
45
+ This also has a bash script which can be used directly although it will probably not work on CI
46
+ and also does not close background processes so not ideal.
47
+
48
+ However if you do want to try it, to install `nginx` from the chart `bitnami/nginx` run
38
49
 
39
50
  ```
40
51
  curl -s https://raw.githubusercontent.com/SamuelGarrattIqa/helm_upgrade_logs/main/bin/helm_upgrade_logs.sh | bash -s -- --install nginx bitnami/nginx
41
52
  ```
42
53
 
54
+ ## TODO
55
+ * Make library handle `n`, `--namespace` from helm command
56
+
43
57
  ## Development
44
58
 
45
59
  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.
@@ -15,17 +15,28 @@ service_pid = Process.spawn 'kubectl get services --watch-only=true'
15
15
  wait_for_pod_to_log
16
16
 
17
17
  @pods = []
18
+ @pod_pids = {}
18
19
 
19
20
  while Process.waitpid(helm_pid, Process::WNOHANG) == nil do
20
21
  pods = get_pods
21
22
  if pods != @pods
22
23
  @pods = pods
23
24
  puts "[INFO] Pods: #{pods.join(',')}"
24
- puts `kill #{@log_pid}` if @log_pid
25
- @log_pid = Process.spawn "kubectl logs -lapp.kubernetes.io/managed-by=Helm,app.kubernetes.io/instance=#{$release_name} -f --all-containers --prefix --ignore-errors=true --max-log-requests=20 --timestamps=true --since=0s"
25
+ # Could change this each to Parallel.each
26
+ @pods.each do |pod|
27
+ if @pod_pids[pod].nil?
28
+ wait_for_specific_pod_to_log pod
29
+ log_pid = Process.spawn "kubectl logs #{pod} -f --all-containers --prefix --ignore-errors=true --timestamps=true"
30
+ @pod_pids[pod] = log_pid
31
+ end
32
+ end
26
33
  end
27
- sleep 2.5
34
+ sleep 1
28
35
  end
29
- puts `kill #{@log_pid}`
30
- puts `kill #{event_pid}`
31
- puts `kill #{service_pid}`
36
+ `kill #{event_pid}`
37
+ `kill #{service_pid}`
38
+ @pod_pids.each do |pod, pid|
39
+ `kill #{pid}`
40
+ end
41
+
42
+
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module HelmUpgradeLogs
4
- VERSION = "0.2.0"
4
+ VERSION = "0.2.3"
5
5
  end
@@ -3,6 +3,9 @@
3
3
  require 'open3'
4
4
  require_relative "helm_upgrade_logs/version"
5
5
 
6
+ ENV['helm_upgrade_logs_log_start'] ||= '90'
7
+ ENV['helm_upgrade_logs_pod_start'] ||= '35'
8
+
6
9
  # Approach not ideal as it will for all containers to be ready and want to stream logs before that
7
10
  def wait_for_container_ready
8
11
  wait_pid = Process.spawn 'kubectl wait --for=condition=ContainersReady pod --selector "app.kubernetes.io/managed-by=Helm" --timeout=30s'
@@ -12,16 +15,29 @@ end
12
15
  # Wait for pods with logs to be present
13
16
  # Not ideal due to https://github.com/kubernetes/kubernetes/issues/28746
14
17
  def wait_for_pod_to_log
15
- 90.times {
18
+ ENV['helm_upgrade_logs_log_start'].to_i.times do |i|
19
+ sleep 1
20
+ stdout, stderr, _ = Open3.capture3 "kubectl logs -lapp.kubernetes.io/instance=#{$release_name}"
21
+ if stderr.empty? && !stdout.strip.empty?
22
+ puts '[INFO] Pods with logs found'
23
+ break
24
+ else
25
+ puts "[INFO] Waiting for pod logs: #{stderr}" if i % 3 == 0
26
+ end
27
+ end
28
+ end
29
+
30
+ def wait_for_specific_pod_to_log(pod_name)
31
+ ENV['helm_upgrade_logs_pod_start'].to_i.times do |i|
16
32
  sleep 1
17
- stdout, stderr, _ = Open3.capture3 "kubectl logs -lapp.kubernetes.io/managed-by=Helm,app.kubernetes.io/instance=#{$release_name}"
33
+ stdout, stderr, _ = Open3.capture3 "kubectl logs #{pod_name}"
18
34
  if stderr.empty? && !stdout.strip.empty?
19
- puts 'Pods with logs found'
35
+ puts "[INFO] Pod #{pod_name} with logs found"
20
36
  break
21
37
  else
22
- puts "Waiting for pod logs: #{stderr}"
38
+ puts "[INFO] Waiting for pod #{pod_name} logs: #{stderr}" if i % 2 == 0
23
39
  end
24
- }
40
+ end
25
41
  end
26
42
 
27
43
  def get_pods
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.0
4
+ version: 0.2.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Samuel Garratt