cnvrg 0.0.15000 → 0.0.142561

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
  SHA1:
3
- metadata.gz: 209fd646618556d6e2a6ed54778d95ba9d9fb5ae
4
- data.tar.gz: 8c7df0eea5f08eaec0a8d50326f20d3fbcfbb47d
3
+ metadata.gz: d2a92149e9b565661704f3f91438b28c89976475
4
+ data.tar.gz: 9f5c2dc4a71823c9b5657fd941361e33305d06f6
5
5
  SHA512:
6
- metadata.gz: 77dd8ba073bcc0ec65d6dc4a70845ae32a3a779f8b1b340dcbaeee4336676db5d1a928b38a23eb619df396c413a613c69378f9deb114e7567e8ebab58607c79d
7
- data.tar.gz: c876d3596e5287e6d28d6f972f777188b1f2b92c8001aaa178da2db31a3fb254edf8827addb128b4e4ab4dd5c5eeafed481362e2c02af3e0081e7f4278553b09
6
+ metadata.gz: 0aace663fb6460ade819c6676fb96b11cbbb286340e0b2599b6be6bb6d1ae5f3e6098270b9f37976cae7ec743b6381f46dd1e1054cb4f56e71d249cbb875f43b
7
+ data.tar.gz: 47dd9900f83b208196690862ceba2511643fbf84fc2d1daa6a23b66c51c63279aa9766bcaee9811b72af9b4f44e605e7fa34e5b0e450bcbe67f4e62a7480c173
data/cnvrg.gemspec CHANGED
@@ -40,8 +40,6 @@ Gem::Specification.new do |spec|
40
40
  spec.add_runtime_dependency 'rubyzip', '~> 1.2'
41
41
  spec.add_runtime_dependency 'activesupport', '~> 5.0'
42
42
  spec.add_runtime_dependency 'ruby-progressbar'
43
- spec.add_runtime_dependency 'net-ssh'
44
-
45
43
 
46
44
 
47
45
 
data/lib/cnvrg.rb CHANGED
@@ -3,5 +3,6 @@ require 'cnvrg/version'
3
3
  require 'cnvrg/cli'
4
4
  require 'thor'
5
5
 
6
+
6
7
  module Cnvrg
7
8
  end
data/lib/cnvrg/Images.rb CHANGED
@@ -1,8 +1,6 @@
1
1
  require 'fileutils'
2
2
  require 'cnvrg/files'
3
3
  require 'docker'
4
- require 'net/ssh'
5
-
6
4
 
7
5
  module Cnvrg
8
6
  class Images
@@ -95,73 +93,6 @@ module Cnvrg
95
93
 
96
94
 
97
95
  end
98
- def self.create_new_custom_image(type,owner,image_name,is_public,is_base,image_extend,python3)
99
- response = Cnvrg::API.request("users/#{owner}/images/custom", 'POST', {instance_type:type,image_name:image_name,is_public:is_public,
100
- is_base:is_base,image_extend:image_extend,
101
- python3:python3})
102
- return response
103
- end
104
- def self.revoke_custom_new_image(owner,slug)
105
- response = Cnvrg::API.request("users/#{owner}/images/#{slug}/revoke_image", 'GET')
106
- return response
107
- end
108
- def self.commit_custom_image(owner,slug)
109
- response = Cnvrg::API.request("users/#{owner}/images/#{slug}/commit_custom_image", 'GET')
110
- return response
111
- end
112
- def self.ssh_to_machine(resp)
113
-
114
- sts_path = resp["result"]["sts_path"]
115
-
116
- uri = URI.parse(sts_path)
117
-
118
- http_object = Net::HTTP.new(uri.host, uri.port)
119
- http_object.use_ssl = true if uri.scheme == 'https'
120
- request = Net::HTTP::Get.new(sts_path)
121
-
122
- body = ""
123
- http_object.start do |http|
124
- response = http.request request
125
- body = response.read_body
126
- end
127
-
128
- URLcrypt::key = [body].pack('H*')
129
-
130
- ip = URLcrypt.decrypt(resp["result"]["machine_i"])
131
-
132
- user = URLcrypt.decrypt(resp["result"]["machine_u"])
133
- key = URLcrypt.decrypt(resp["result"]["machine_k"])
134
- tempssh = Tempfile.new "sshkey"
135
- tempssh.write open(key).read
136
- tempssh.rewind
137
- key_path = tempssh.path
138
- count = 0
139
- while count < 5
140
-
141
- begin
142
- ssh = Net::SSH.start(ip, user=user, :keys => key_path, :timeout => 10)
143
- if !ssh.nil?
144
- return ssh
145
- else
146
- count+=1
147
- sleep(2)
148
-
149
- end
150
- rescue
151
- count+=1
152
- sleep(2)
153
-
154
-
155
- end
156
- end
157
- if tempssh
158
- tempssh.close
159
- tempssh.unlink
160
- end
161
- return false
162
- end
163
-
164
-
165
96
 
166
97
  def create_custom_image(new_image_name,working_dir,stored_commands)
167
98
 
data/lib/cnvrg/api.rb CHANGED
@@ -57,10 +57,7 @@ module Cnvrg
57
57
  else
58
58
  response
59
59
  end
60
- when 'POST'
61
- conn.options.timeout = 420
62
- conn.options.open_timeout =420
63
-
60
+ when 'POST'
64
61
  response = conn.post "#{endpoint_uri}/#{resource}", data
65
62
 
66
63
  if parse_request == true
@@ -73,12 +70,12 @@ module Cnvrg
73
70
  fr.headers['Auth-Token'] = @pass
74
71
  fr.headers['User-Agent'] = "#{Cnvrg::API::USER_AGENT}"
75
72
  fr.headers["Content-Type"] = "multipart/form-data"
76
-
73
+
77
74
  fr.request :multipart
78
75
  fr.request :url_encoded
79
76
  fr.adapter :net_http
80
77
  end
81
-
78
+
82
79
 
83
80
  # what if windows?
84
81
  # data[:file] = Faraday::UploadIO.new(data[:absolute_path], content_type)
@@ -107,7 +104,6 @@ module Cnvrg
107
104
  else
108
105
  end
109
106
  rescue => e
110
- puts e
111
107
  return nil
112
108
  end
113
109
 
data/lib/cnvrg/cli.rb CHANGED
@@ -21,7 +21,6 @@ require 'cnvrg/Images'
21
21
  require 'cnvrg/dataset'
22
22
  require 'cnvrg/datafiles'
23
23
  require 'cnvrg/data'
24
- require 'cnvrg/ssh'
25
24
  require 'etc'
26
25
  require 'logstash-logger'
27
26
  require 'cnvrg/job'
@@ -1155,9 +1154,8 @@ module Cnvrg
1155
1154
  method_option :ignore, :type => :array, :aliases => ["-i", "--i"], :desc => "ignore following files"
1156
1155
  method_option :verbose, :type => :boolean, :aliases => ["-v"], :default => false
1157
1156
  method_option :sync, :type => :boolean, :aliases => ["-s"], :default => false
1158
- method_option :no_compression, :type => :boolean, :aliases => ["-nc", "--no_compression"], :default => false
1159
1157
 
1160
- def upload_data_tar(ignore, verbose, sync,no_compression)
1158
+ def upload_data_tar(ignore, verbose, sync)
1161
1159
 
1162
1160
  begin
1163
1161
  verify_logged_in(true)
@@ -1227,7 +1225,7 @@ module Cnvrg
1227
1225
  tar_files_path = "#{home_dir}/.cnvrg/tmp/#{@dataset.slug}_#{commit_sha1}.txt"
1228
1226
  tar_files = (result["added"] + result["updated_on_local"]).join("\n")
1229
1227
  File.open(tar_files_path, 'w') { |f| f.write tar_files }
1230
- is_tar = create_tar(dataset_dir, tar_path, tar_files_path,no_compression)
1228
+ is_tar = create_tar(dataset_dir, tar_path, tar_files_path)
1231
1229
  if !is_tar
1232
1230
  say "ERROR: Couldn't compress data", Thor::Shell::Color::RED
1233
1231
  FileUtils.rm_rf([tar_path]) if File.exist? tar_path
@@ -3543,6 +3541,7 @@ module Cnvrg
3543
3541
  container.stop()
3544
3542
  end
3545
3543
  rescue SignalException
3544
+ log_End(-1)
3546
3545
  if container
3547
3546
  container.stop()
3548
3547
  end
@@ -3552,98 +3551,6 @@ module Cnvrg
3552
3551
 
3553
3552
  end
3554
3553
 
3555
- method_option :small, :type => :boolean, :aliases => ["-sm", "--small"], :default => false
3556
- method_option :medium, :type => :boolean, :aliases => ["-md", "--medium"], :default => false
3557
- method_option :large, :type => :boolean, :aliases => ["-lg", "--large"], :default => false
3558
- method_option :gpu, :type => :boolean, :aliases => ["--gpu"], :default => false
3559
- method_option :gpuxl, :type => :boolean, :aliases => ["--gpuxl"], :default => false
3560
- method_option :gpuxxl, :type => :boolean, :aliases => ["--gpuxxl"], :default => false
3561
- method_option :image, :type => :string, :aliases => ["-i","--image"], :default => ""
3562
- method_option :public, :type => :boolean, :aliases => ["-p","--public"], :default => false
3563
- method_option :base, :type => :boolean, :aliases => ["-b","--base"], :default => false
3564
- method_option :python3, :type => :boolean, :aliases => ["--python3"], :default => false
3565
-
3566
- desc 'create_custom_image', 'run commands inside containers', :hide=>true
3567
-
3568
- def create_custom_image(image_name)
3569
- begin
3570
- verify_logged_in(false)
3571
- log_start(__method__, args, options)
3572
- instances = {"small" => options["small"], "medium" => options["medium"], "large" => options["large"],
3573
- "gpu" => options["gpu"], "gpuxl" => options["gpuxl"], "gpuxxl" => options["gpuxxl"]}
3574
- instance_type = get_instance_type(instances)
3575
- image_extend = options["image"]
3576
- public = options["public"]
3577
- base = options["base"]
3578
- python3 = options["python3"]
3579
- owner = CLI.get_owner
3580
- checks = Helpers.checkmark()
3581
-
3582
- say "Creating machine for custom image, this may take a few moments...", Thor::Shell::Color::BLUE
3583
-
3584
- resp = Images.create_new_custom_image(instance_type,owner,image_name,public,base,image_extend,python3)
3585
- if Cnvrg::CLI.is_response_success(resp,false)
3586
- image_slug = resp["result"]["slug"]
3587
- container = resp["result"]["machine_c"]
3588
- say "#{checks} Created image and machine successfully", Thor::Shell::Color::GREEN
3589
- say "Connecting to machine", Thor::Shell::Color::BLUE
3590
- ssh = Ssh.new(resp)
3591
- if !ssh.is_ssh
3592
- say "Couldn't connect to machine,aborting", Thor::Shell::Color::RED
3593
- Images.revoke_custom_new_image(owner, image_slug)
3594
- log_end(-1,"Couldn't connect to machine,aborting")
3595
- end
3596
- say "run command until ctrl + c initiates", Thor::Shell::Color::BLUE
3597
- begin
3598
-
3599
- while true
3600
- command = ask("$>")
3601
- puts ssh.exec_command(command)
3602
- end
3603
-
3604
- rescue SignalException
3605
- say "Commiting Image..", Thor::Shell::Color::BLUE
3606
-
3607
- end
3608
- resp = Images.commit_custom_image(owner,image_slug)
3609
- if Cnvrg::CLI.is_response_success(resp,false)
3610
- say "#{checks} Image commited successfuly, email will be sent when image is ready", Thor::Shell::Color::GREEN
3611
- end
3612
- if ssh
3613
- ssh.close_ssh()
3614
- end
3615
-
3616
-
3617
-
3618
-
3619
-
3620
-
3621
-
3622
- end
3623
- rescue =>e
3624
- puts e
3625
- if image_slug
3626
- Images.revoke_custom_new_image(owner, image_slug)
3627
- end
3628
- if ssh
3629
- ssh.close_ssh()
3630
- end
3631
-
3632
-
3633
- rescue SignalException
3634
- if image_slug
3635
- Images.revoke_custom_new_image(owner, image_slug)
3636
- end
3637
- if ssh
3638
- ssh.close_ssh
3639
- end
3640
- say "\nAborting"
3641
- exit(1)
3642
- end
3643
-
3644
- end
3645
-
3646
-
3647
3554
  desc 'build', 'run commands inside containers'
3648
3555
  method_option :install, :type => :string, :aliases => ["--i"], :default => nil, :desc => "Install from the given instructions file"
3649
3556
 
@@ -5045,14 +4952,10 @@ module Cnvrg
5045
4952
  end
5046
4953
  end
5047
4954
 
5048
- def create_tar(path_in, path_out, tar_files,no_compression=false)
4955
+ def create_tar(path_in, path_out, tar_files)
5049
4956
  #The cd is meant for cases when running cnvrg data uplaod not in the main folder
5050
4957
  begin
5051
- if no_compression
5052
- `cd #{path_in} && tar -cf #{path_out} -T #{tar_files}`
5053
- else
5054
- `cd #{path_in} && tar -czf #{path_out} -T #{tar_files}`
5055
- end
4958
+ `cd #{path_in} && tar -czf #{path_out} -T #{tar_files}`
5056
4959
  rescue => e
5057
4960
  puts "Exception while compressing data: #{e.message}"
5058
4961
  end
data/lib/cnvrg/data.rb CHANGED
@@ -11,9 +11,7 @@ class SubCommandBase < Thor
11
11
  end
12
12
 
13
13
  module Cnvrg
14
-
15
14
  class Data < SubCommandBase
16
- class_option :no_compression, :type => :boolean, :aliases => ["-nc", "--no_compression"], :default => false
17
15
  desc "data init", "init data folder"
18
16
  method_option :public, :type => :boolean, :aliases => ["-p", "--public"], :default => false
19
17
  def init
@@ -25,15 +23,13 @@ module Cnvrg
25
23
  method_option :ignore, :type => :array, :aliases => ["-i", "--i"], :desc => "ignore following files"
26
24
  method_option :verbose, :type => :boolean, :aliases => ["-v"], :default => false
27
25
  method_option :sync, :type => :boolean, :aliases => ["-s"], :default => false
28
- method_option :no_compression, :type => :boolean, :aliases => ["-nc", "--no_compression"], :default => false
29
-
30
26
  def upload
31
27
  cli = Cnvrg::CLI.new()
32
28
  ignore = options["ignore"]
33
29
  verbose = options["verbose"]
34
30
  sync = options["sync"]
35
- no_compression = options["no_compression"]
36
- cli.upload_data_tar(ignore, verbose,sync,no_compression)
31
+
32
+ cli.upload_data_tar(ignore, verbose,sync)
37
33
  end
38
34
  desc 'data download', 'pull data'
39
35
  method_option :verbose, :type => :boolean, :aliases => ["-v"], :default => false
@@ -234,7 +234,7 @@ module Cnvrg
234
234
  def upload_large_files_s3(upload_resp, file_path)
235
235
  begin
236
236
  sts_path = upload_resp["result"]["path_sts"]
237
- # s4cmd_path = upload_resp["result"]["path_s4cmd"]
237
+ s4cmd_path = upload_resp["result"]["path_s4cmd"]
238
238
 
239
239
  uri = URI.parse(sts_path)
240
240
  http_object = Net::HTTP.new(uri.host, uri.port)
@@ -261,51 +261,51 @@ module Cnvrg
261
261
  # end
262
262
  #
263
263
  # end
264
- resp = false
265
264
 
266
265
  if !s4cmd_suc and !s4cmd_install_suc
267
266
  s3 = Aws::S3::Resource.new(
268
- :access_key_id => URLcrypt.decrypt(upload_resp["result"]["new_a"]),
269
- :secret_access_key => URLcrypt.decrypt(upload_resp["result"]["new_s"]),
267
+ :access_key_id => URLcrypt.decrypt(upload_resp["result"]["sts_a"]),
268
+ :secret_access_key => URLcrypt.decrypt(upload_resp["result"]["sts_s"]),
269
+ :session_token => URLcrypt.decrypt(upload_resp["result"]["sts_st"]),
270
270
  :region => URLcrypt.decrypt(upload_resp["result"]["region"]))
271
271
  resp = s3.bucket(URLcrypt.decrypt(upload_resp["result"]["bucket"])).
272
272
  object(upload_resp["result"]["path"]+"/"+File.basename(file_path)).
273
273
  upload_file(file_path,{:use_accelerate_endpoint=>true})
274
274
 
275
- # else
276
-
277
- # s4cmd_uri = URI.parse(s4cmd_path)
278
- # s4cmd_http_object = Net::HTTP.new(s4cmd_uri.host, s4cmd_uri.port)
279
- # s4cmd_http_object.use_ssl = true if s4cmd_uri.scheme == 'https'
280
- # s4cmd_request = Net::HTTP::Get.new(s4cmd_path)
281
- #
282
- # s4cmd_body = ""
283
- # s4cmd_http_object.start do |http|
284
- # response = http.request s4cmd_request
285
- # s4cmd_body = response.read_body
286
- # end
287
- #
288
- # s4cmd_new_body = s4cmd_body.gsub(" self.client = self.boto3.client('s3',
289
- # aws_access_key_id=aws_access_key_id,
290
- # aws_secret_access_key=aws_secret_access_key)"," self.client = self.boto3.client('s3',
291
- # aws_access_key_id='#{ URLcrypt.decrypt(upload_resp["result"]["sts_a"])}',
292
- # aws_secret_access_key='#{URLcrypt.decrypt(upload_resp["result"]["sts_s"])}',
293
- # aws_session_token='#{URLcrypt.decrypt(upload_resp["result"]["sts_st"])}')")
294
- #
295
- # tmp = Tempfile.new('s4cmd.py')
296
- # tmp << s4cmd_new_body
297
- # tmp.flush
298
- # tmp.close
299
- #
300
- # is_success = false
301
- # count = 0
302
- # while !is_success and count <3
303
- # resp = `python #{tmp.path} --num-threads=8 --max-singlepart-upload-size=#{MULTIPART_SPLIT} put -f #{file_path} s3://#{URLcrypt.decrypt(upload_resp["result"]["bucket"])}/#{upload_resp["result"]["path"]+"/"+File.basename(file_path)} > /dev/null 2>&1`
304
- # is_success =$?.success?
305
- # count +=1
306
- #
307
- # end
308
- # resp= is_success
275
+ else
276
+
277
+ s4cmd_uri = URI.parse(s4cmd_path)
278
+ s4cmd_http_object = Net::HTTP.new(s4cmd_uri.host, s4cmd_uri.port)
279
+ s4cmd_http_object.use_ssl = true if s4cmd_uri.scheme == 'https'
280
+ s4cmd_request = Net::HTTP::Get.new(s4cmd_path)
281
+
282
+ s4cmd_body = ""
283
+ s4cmd_http_object.start do |http|
284
+ response = http.request s4cmd_request
285
+ s4cmd_body = response.read_body
286
+ end
287
+
288
+ s4cmd_new_body = s4cmd_body.gsub(" self.client = self.boto3.client('s3',
289
+ aws_access_key_id=aws_access_key_id,
290
+ aws_secret_access_key=aws_secret_access_key)"," self.client = self.boto3.client('s3',
291
+ aws_access_key_id='#{ URLcrypt.decrypt(upload_resp["result"]["sts_a"])}',
292
+ aws_secret_access_key='#{URLcrypt.decrypt(upload_resp["result"]["sts_s"])}',
293
+ aws_session_token='#{URLcrypt.decrypt(upload_resp["result"]["sts_st"])}')")
294
+
295
+ tmp = Tempfile.new('s4cmd.py')
296
+ tmp << s4cmd_new_body
297
+ tmp.flush
298
+ tmp.close
299
+
300
+ is_success = false
301
+ count = 0
302
+ while !is_success and count <3
303
+ resp = `python #{tmp.path} --num-threads=8 --max-singlepart-upload-size=#{MULTIPART_SPLIT} put -f #{file_path} s3://#{URLcrypt.decrypt(upload_resp["result"]["bucket"])}/#{upload_resp["result"]["path"]+"/"+File.basename(file_path)} > /dev/null 2>&1`
304
+ is_success =$?.success?
305
+ count +=1
306
+
307
+ end
308
+ resp= is_success
309
309
 
310
310
  end
311
311
 
@@ -313,9 +313,9 @@ module Cnvrg
313
313
 
314
314
  rescue => e
315
315
  puts e.message
316
- # if File.exist? tmp
317
- # FileUtils.rm_rf [tmp]
318
- # end
316
+ if File.exist? tmp
317
+ FileUtils.rm_rf [tmp]
318
+ end
319
319
  return false
320
320
 
321
321
  end
data/lib/cnvrg/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  module Cnvrg
2
- VERSION = '0.0.15000'
2
+ VERSION = '0.0.142561'
3
3
 
4
4
  end
5
5
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cnvrg
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.15000
4
+ version: 0.0.142561
5
5
  platform: ruby
6
6
  authors:
7
7
  - Yochay Ettun
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2017-07-16 00:00:00.000000000 Z
12
+ date: 2017-07-09 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bundler
@@ -329,20 +329,6 @@ dependencies:
329
329
  - - ">="
330
330
  - !ruby/object:Gem::Version
331
331
  version: '0'
332
- - !ruby/object:Gem::Dependency
333
- name: net-ssh
334
- requirement: !ruby/object:Gem::Requirement
335
- requirements:
336
- - - ">="
337
- - !ruby/object:Gem::Version
338
- version: '0'
339
- type: :runtime
340
- prerelease: false
341
- version_requirements: !ruby/object:Gem::Requirement
342
- requirements:
343
- - - ">="
344
- - !ruby/object:Gem::Version
345
- version: '0'
346
332
  description: A CLI tool for interacting with cnvrg.io.
347
333
  email:
348
334
  - info@cnvrg.io
@@ -367,7 +353,6 @@ files:
367
353
  - lib/cnvrg/job.rb
368
354
  - lib/cnvrg/project.rb
369
355
  - lib/cnvrg/runner.rb
370
- - lib/cnvrg/ssh.rb
371
356
  - lib/cnvrg/version.rb
372
357
  homepage: https://cnvrg.io
373
358
  licenses: []
@@ -388,9 +373,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
388
373
  version: '0'
389
374
  requirements: []
390
375
  rubyforge_project:
391
- rubygems_version: 2.5.1
376
+ rubygems_version: 2.6.12
392
377
  signing_key:
393
378
  specification_version: 4
394
379
  summary: A CLI tool for interacting with cnvrg.io.
395
380
  test_files: []
396
- has_rdoc:
data/lib/cnvrg/ssh.rb DELETED
@@ -1,95 +0,0 @@
1
- require 'fileutils'
2
- require 'cnvrg/files'
3
- require 'docker'
4
- require 'net/ssh'
5
-
6
-
7
- module Cnvrg
8
- class Ssh
9
- attr_reader :is_ssh
10
-
11
-
12
- def initialize(resp)
13
- begin
14
- @is_ssh = false
15
- sts_path = resp["result"]["sts_path"]
16
-
17
- uri = URI.parse(sts_path)
18
-
19
- http_object = Net::HTTP.new(uri.host, uri.port)
20
- http_object.use_ssl = true if uri.scheme == 'https'
21
- request = Net::HTTP::Get.new(sts_path)
22
-
23
- body = ""
24
- http_object.start do |http|
25
- response = http.request request
26
- body = response.read_body
27
- end
28
-
29
- URLcrypt::key = [body].pack('H*')
30
- ip = URLcrypt.decrypt(resp["result"]["machine_i"])
31
-
32
- @user = URLcrypt.decrypt(resp["result"]["machine_u"])
33
- key = URLcrypt.decrypt(resp["result"]["machine_k"])
34
- @container = URLcrypt.decrypt(resp["result"]["machine_c"])
35
-
36
- tempssh = Tempfile.new "sshkey"
37
- tempssh.write open(key).read
38
- tempssh.rewind
39
- key_path = tempssh.path
40
- count = 0
41
- while count < 5
42
-
43
- begin
44
- @ssh = Net::SSH.start(ip, user=@user, :keys => key_path, :timeout => 10)
45
- if !@ssh.nil?
46
- @is_ssh = true
47
- return
48
- else
49
- count+=1
50
- sleep(2)
51
-
52
- end
53
- rescue
54
- count+=1
55
- sleep(2)
56
-
57
-
58
- end
59
- end
60
- if tempssh
61
- tempssh.close
62
- tempssh.unlink
63
- end
64
- return false
65
- rescue => e
66
-
67
- puts e
68
- end
69
- end
70
-
71
-
72
-
73
- def exec_command(command)
74
- exec_command = "sudo -i -u #{@user} cnvrg exec_container #{@container} \"#{command}\" "
75
- return @ssh.exec!(exec_command)
76
- end
77
-
78
-
79
- def close_ssh()
80
-
81
-
82
- begin
83
-
84
- @ssh.close
85
- rescue => e
86
-
87
- end
88
-
89
-
90
- end
91
- end
92
-
93
-
94
-
95
- end