kubeclient_exec 0.1.2 → 0.1.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: 5649bee867b5a1b4bee74f728bd9d4e20237f8147d1f2b322d1a5c837dc525dc
4
- data.tar.gz: 2ccc8823b1f3184b975729385652003ac826e8cc3e4fa2b03c4d49cfb7cb16d7
3
+ metadata.gz: 17b3e2d61714b926cddbdd6735e6f6e068a32831313753597a2d05fcf4de6eb0
4
+ data.tar.gz: 03b121f120609632f793217d42e7f1cab6b95c8655086fa68a7ed28e9b9e15e4
5
5
  SHA512:
6
- metadata.gz: 5016b2107c6efb54d6ad996e7b9fe24d5f3a4ec2a11b7f103c792ec0bd6e1170d89aebfad05537d557cb0ee247a5ca6a69f4cef4069d06c91136d16d8b0f1609
7
- data.tar.gz: d8e74ca1a7bfd763c851393d89f548d012177a854ed16878969eb7db4f7a8a03c31fa9583d83e63130ec2f53a0ce03d93fef23babf324e898186da436338b98d
6
+ metadata.gz: 33986e59d05b7c4cf4a0e1c98bc97b7c227689da60cb6932176ac2dea8ce35fe26b1dfe1802cb1435fcb7ec10fb203abaacaa3747a666b932659c03ab017c116
7
+ data.tar.gz: d37fcd4f1e3cf30449a8b8a73c0084c6f202d6a12b0599d394ecca3d5f9bbb14207077b3413522282d3ae3286834114cf99b293f8fac03d4df782b246930d438
@@ -42,13 +42,22 @@ module KubeclientExec
42
42
 
43
43
  if copy_file
44
44
  exec_pod("tar xf - -C #{remote_path.split('/')[0...-1].join('/')}", name, namespace, options: { tty: false }.merge!(options)) do |executor|
45
- executor.write(tar_file.string)
45
+ chunks = split_string_into_chunks(tar_file.string, 1024 * 1024) # 1MB
46
+ chunks.each do |chunk|
47
+ executor.write(chunk)
48
+ end
46
49
 
47
50
  # Feels like there should be a better way for this
51
+ stopping = false
48
52
  EM.add_periodic_timer(0.1) do
49
- if executor.done?
53
+ if executor.done? && !stopping
54
+ stopping = true
50
55
  executor.stop
51
56
  end
57
+
58
+ if executor.ready_state == 3
59
+ EM.stop_event_loop
60
+ end
52
61
  end
53
62
  end
54
63
  else
@@ -56,10 +65,16 @@ module KubeclientExec
56
65
  executor.write(tar_file.string)
57
66
 
58
67
  # Feels like there should be a better way for this
68
+ stopping = false
59
69
  EM.add_periodic_timer(0.1) do
60
- if executor.done?
70
+ if executor.done? && !stopping
71
+ stopping = true
61
72
  executor.stop
62
73
  end
74
+
75
+ if executor.ready_state == 3
76
+ EM.stop_event_loop
77
+ end
63
78
  end
64
79
  end
65
80
  end
@@ -70,22 +85,40 @@ module KubeclientExec
70
85
 
71
86
  exec_pod("tar cf - #{remote_path}", name, namespace, options: { tty: false }.merge!(options)) do |executor|
72
87
  count = 0
88
+ content = ''
73
89
 
74
90
  executor.on_stdout do |data|
75
- if count == 1
76
- if local_path.is_a? String
77
- untar(StringIO.new(data), local_path)
78
- elsif local_path == :single_result
79
- result = single_untar(StringIO.new(data))
80
- end
81
- executor.stop
91
+ if count >= 1
92
+ content += data
82
93
  end
83
94
 
84
95
  count += 1
85
96
  end
97
+
98
+ executor.on_close do
99
+ if local_path.is_a? String
100
+ untar(StringIO.new(content), local_path)
101
+ elsif local_path == :single_result
102
+ result = single_untar(StringIO.new(content))
103
+ end
104
+ end
86
105
  end
87
106
 
88
107
  result
89
108
  end
109
+
110
+ private
111
+ def split_string_into_chunks(string, chunk_size)
112
+ chunks = []
113
+ start_index = 0
114
+
115
+ while start_index < string.length
116
+ chunk = string[start_index, chunk_size]
117
+ chunks << chunk
118
+ start_index += chunk_size
119
+ end
120
+
121
+ chunks
122
+ end
90
123
  end
91
124
  end
@@ -55,8 +55,12 @@ module KubeclientExec
55
55
  end
56
56
 
57
57
  def stop
58
- @ws.close if @ws
58
+ @ws.instance_variable_get(:@stream).close_connection_after_writing
59
59
  @on_close.call if @on_close
60
+ end
61
+
62
+ def stop!
63
+ stop
60
64
  EM.stop_event_loop
61
65
  end
62
66
 
@@ -64,6 +68,10 @@ module KubeclientExec
64
68
  @ws.instance_variable_get(:@driver).instance_variable_get(:@queue).empty?
65
69
  end
66
70
 
71
+ def ready_state
72
+ @ws.ready_state
73
+ end
74
+
67
75
  private
68
76
  def setup
69
77
  @ws = Faye::WebSocket::Client.new(@url, nil, {
@@ -73,12 +81,13 @@ module KubeclientExec
73
81
  cert_chain_file: @kubeclient_options[:tls][:cert_chain_file],
74
82
  private_key_file: @kubeclient_options[:tls][:private_key_file],
75
83
  verify_peer: @kubeclient_options[:tls][:verify_peer],
76
- }
84
+ },
85
+ max_length: 2**32,
77
86
  })
78
87
 
79
88
  @ws.on(:message) do |msg|
80
89
  if msg.type == :close
81
- stop
90
+ stop!
82
91
  return
83
92
  end
84
93
 
@@ -91,7 +100,7 @@ module KubeclientExec
91
100
  if @options[:mode] == :adhoc
92
101
  @last_stdout = 1 if type == EXEC_STDOUT
93
102
  @last_stderr = 1 if type == EXEC_STDERR || EXEC_DCKERR
94
- stop
103
+ stop!
95
104
  end
96
105
  end
97
106
 
@@ -112,7 +121,7 @@ module KubeclientExec
112
121
  end
113
122
 
114
123
  @ws.on(:close) do
115
- stop
124
+ stop!
116
125
  end
117
126
 
118
127
  @ws.on(:open) do
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: kubeclient_exec
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.1.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Wout Ceulemans
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-02-22 00:00:00.000000000 Z
11
+ date: 2024-04-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: kubeclient