cnvrg 0.0.1520000 → 0.0.1530000

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: 8350e6b16c815de7c51ea0020bec8e8ee3f760f4
4
- data.tar.gz: 45a2c3cec4e0fa3450b6674a8f554c210db57af7
3
+ metadata.gz: dfd7e3915a7ca0c235ac844cbb19de4ecd985ff8
4
+ data.tar.gz: e5435e7a078993757e7e0bcc937632cd73d16ffd
5
5
  SHA512:
6
- metadata.gz: cb635cb17695ed08f6ee86a175ff18ed5e43fcad39a21f0b3037566605e212c3ff7ec32f535e128e58ba51d9ac446c69d90a9c57450bdede057ebfb48b02aff3
7
- data.tar.gz: 20e44b71140893d5aeca636e9f985b92f66471596d9d83a44196f263ffbed2caae9532ffa645aeb5f20158140cadc771bf659201dc91fa9766aa06f7f5eddd3d
6
+ metadata.gz: 05388102f35ca1434e624cdab9bdad58c52e28594fcc9b5a18edb9ff7a2953341fbcf9e141a1bd751fcfb9136763afba99a0f3adfe841600c84375d674dd7580
7
+ data.tar.gz: 9350e72abedd72550692d0b4fa65f9f6c95ad5f56d9f343480ce3c360a02b8ee369ba9fc9dac37dda8837f1c581893c3d2755bc37a46c3ddbf0dae23e4cad349
@@ -2,6 +2,7 @@ require 'fileutils'
2
2
  require 'cnvrg/files'
3
3
  require 'docker'
4
4
  require 'net/ssh'
5
+ require 'mimemagic'
5
6
 
6
7
 
7
8
  module Cnvrg
@@ -95,18 +96,46 @@ module Cnvrg
95
96
 
96
97
 
97
98
  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})
99
+ def self.create_new_custom_image(type,owner,image_name,is_public,is_base,image_extend,python3,tar_path)
100
+ response = Cnvrg::API.request("users/#{owner}/images/custom", 'POST', {instance_type:type,image_name:image_name,is_public:is_public,
101
+ is_base:is_base,image_extend:image_extend,
102
+ python3:python3})
103
+
102
104
  return response
103
105
  end
106
+ def self.create_new_custom_image_with_docker(type,owner,image_name,is_public,is_base,image_extend,python3,tar_path,files)
107
+ file_name = File.basename tar_path
108
+ file_size = File.size(tar_path).to_f
109
+ mime_type = MimeMagic.by_path(tar_path)
110
+ content_type = !(mime_type.nil? or mime_type.text?) ? mime_type.type : "text/plain"
111
+
112
+ upload_resp = Cnvrg::API.request("/users/#{owner}/images/upload_docker", 'POST_FILE', {absolute_path: tar_path, relative_path: tar_path,
113
+ file_name: file_name, file_size: file_size,
114
+ file_content_type: content_type,
115
+ image_name:image_name,is_public:is_public,
116
+ is_base:is_base,image_extend:image_extend,
117
+ python3:python3 })
118
+
119
+ if Cnvrg::CLI.is_response_success(upload_resp, false)
120
+ path = upload_resp["result"]["path"]
121
+
122
+ s3_res = files.upload_small_files_s3(path, tar_path, content_type)
123
+ if s3_res
124
+ image_slug = upload_resp["result"]["id"]
125
+ response = Cnvrg::API.request("users/#{owner}/images/#{image_slug}/build", 'POST', {instance_type:type,image_extend:image_extend})
126
+ end
127
+ end
128
+
129
+ end
130
+
131
+
132
+
104
133
  def self.revoke_custom_new_image(owner,slug)
105
134
  response = Cnvrg::API.request("users/#{owner}/images/#{slug}/revoke_image", 'GET')
106
135
  return response
107
136
  end
108
- def self.commit_custom_image(owner,slug)
109
- response = Cnvrg::API.request("users/#{owner}/images/#{slug}/commit_custom_image", 'GET')
137
+ def self.commit_custom_image(owner,slug,logs)
138
+ response = Cnvrg::API.request("users/#{owner}/images/#{slug}/commit_custom_image", 'POST', {image_logs:logs})
110
139
  return response
111
140
  end
112
141
  def self.ssh_to_machine(resp)
@@ -783,7 +783,6 @@ module Cnvrg
783
783
  working_dir = "#{Dir.pwd}/#{dataset_name}"
784
784
  @dataset = Dataset.new(working_dir)
785
785
  @dataset.generate_idx()
786
- say "Downloading data", Thor::Shell::Color::BLUE
787
786
 
788
787
 
789
788
  download_data(false, false, path = working_dir, in_dir=false)
@@ -899,6 +898,8 @@ module Cnvrg
899
898
  log_end(0)
900
899
  return true
901
900
  end
901
+ say "Downloading data", Thor::Shell::Color::BLUE
902
+
902
903
  result = @dataset.downlowd_updated_data(@dataset.last_local_commit)
903
904
 
904
905
  delete = result["result"]["delete"]
@@ -1711,10 +1712,12 @@ module Cnvrg
1711
1712
  update_count += 1
1712
1713
  successful_updates<< relative_path
1713
1714
  else
1715
+ say "Failed to upload: #{ File.basename(absolute_path) }", Thor::Shell::Color::RED
1716
+
1714
1717
  @files.rollback_commit(commit_sha1)
1715
- log_end(1, "can't upload, Rolling Back all changes")
1718
+ log_end(1, "Failed to upload: #{ File.basename(absolute_path) }, rolling back")
1716
1719
  say "Couldn't upload, Rolling Back all changes.", Thor::Shell::Color::RED
1717
- exit(0)
1720
+ exit(1)
1718
1721
  end
1719
1722
  end
1720
1723
  end
@@ -1807,7 +1810,7 @@ module Cnvrg
1807
1810
  @files.rollback_commit(commit_sha1)
1808
1811
  end
1809
1812
  rescue => e
1810
- log_end(-1)
1813
+ log_end(-1,e.message)
1811
1814
 
1812
1815
  say "Error occurd, \nAborting", Thor::Shell::Color::RED
1813
1816
  @files.rollback_commit(commit_sha1)
@@ -2978,7 +2981,6 @@ module Cnvrg
2978
2981
  def remote_notebook()
2979
2982
  verify_logged_in(true)
2980
2983
  log_start(__method__, args, options)
2981
- verify_software_installed("docker")
2982
2984
 
2983
2985
  working_dir = is_cnvrg_dir()
2984
2986
  notebook_dir = options["notebook_dir"]
@@ -3077,7 +3079,6 @@ module Cnvrg
3077
3079
  begin
3078
3080
  verify_logged_in(true)
3079
3081
  log_start(__method__, args, options)
3080
- verify_software_installed("docker")
3081
3082
  project_dir = is_cnvrg_dir()
3082
3083
 
3083
3084
  image = is_project_with_docker(project_dir)
@@ -3141,7 +3142,6 @@ module Cnvrg
3141
3142
  begin
3142
3143
  verify_logged_in(true)
3143
3144
  log_start(__method__, args, options)
3144
- verify_software_installed("docker")
3145
3145
  system = options["system"] || false
3146
3146
 
3147
3147
 
@@ -3206,7 +3206,6 @@ module Cnvrg
3206
3206
  begin
3207
3207
  verify_logged_in(true)
3208
3208
  log_start(__method__, args, options)
3209
- verify_software_installed("docker")
3210
3209
 
3211
3210
  project_dir = is_cnvrg_dir()
3212
3211
 
@@ -3377,7 +3376,6 @@ module Cnvrg
3377
3376
  begin
3378
3377
  verify_logged_in(true)
3379
3378
  log_start(__method__, args, options)
3380
- verify_software_installed("docker")
3381
3379
  remote = options["remote"] || false
3382
3380
  project_dir = is_cnvrg_dir()
3383
3381
 
@@ -3449,7 +3447,6 @@ module Cnvrg
3449
3447
  begin
3450
3448
  verify_logged_in(false)
3451
3449
  log_start(__method__, args, options)
3452
- verify_software_installed("docker")
3453
3450
  image = is_project_with_docker(Dir.pwd)
3454
3451
  if image and image.is_docker
3455
3452
  container = image.get_container
@@ -3501,7 +3498,6 @@ module Cnvrg
3501
3498
  begin
3502
3499
  verify_logged_in(false)
3503
3500
  log_start(__method__, args, options)
3504
- verify_software_installed("docker")
3505
3501
  image = is_project_with_docker(Dir.pwd)
3506
3502
  if image and image.is_docker
3507
3503
  container = image.get_container
@@ -3566,10 +3562,12 @@ module Cnvrg
3566
3562
  method_option :public, :type => :boolean, :aliases => ["-p","--public"], :default => false
3567
3563
  method_option :base, :type => :boolean, :aliases => ["-b","--base"], :default => false
3568
3564
  method_option :python3, :type => :boolean, :aliases => ["--python3"], :default => false
3565
+ method_option :docker_path, :type => :string, :aliases => ["--docker_path"], :default => ""
3566
+
3569
3567
 
3570
3568
  desc 'create_custom_image', 'run commands inside containers', :hide=>true
3571
3569
 
3572
- def create_custom_image(image_name)
3570
+ def build_image(image_name)
3573
3571
  begin
3574
3572
  verify_logged_in(false)
3575
3573
  log_start(__method__, args, options)
@@ -3580,12 +3578,30 @@ module Cnvrg
3580
3578
  public = options["public"]
3581
3579
  base = options["base"]
3582
3580
  python3 = options["python3"]
3581
+ docker_path = options["docker_path"]
3583
3582
  owner = CLI.get_owner
3584
3583
  checks = Helpers.checkmark()
3584
+ tar_path = nil
3585
+ if !docker_path.nil? and !docker_path.empty?
3586
+ docker_path = File.absolute_path(docker_path)
3587
+ #create tar of the docker path: it could be a docker file, and it could be a docker folder
3588
+ tar_path = File.expand_path('~')+"/.cnvrg/tmp/docker_#{File.basename docker_path}.tar.gz"
3589
+ resp = create_docker_tar(docker_path,tar_path)
3590
+ if !resp
3591
+ say "Couldn't create tar from docker path", Thor::Shell::Color::RED
3592
+ FileUtils.rm_rf tar_path
3593
+ exit(1)
3594
+ end
3595
+ files = Cnvrg::Files.new(owner, "")
3596
+ resp = Images.create_new_custom_image_with_docker(instance_type,owner,image_name,public,base,image_extend,python3,tar_path,files)
3597
+ if resp
3598
+ end
3599
+ else
3600
+ say "Creating machine for your custom image, this may take a few moments...", Thor::Shell::Color::BLUE
3601
+ resp = Images.create_new_custom_image(instance_type,owner,image_name,public,base,image_extend,python3,nil)
3585
3602
 
3586
- say "Creating machine for custom image, this may take a few moments...", Thor::Shell::Color::BLUE
3603
+ end
3587
3604
 
3588
- resp = Images.create_new_custom_image(instance_type,owner,image_name,public,base,image_extend,python3)
3589
3605
  if Cnvrg::CLI.is_response_success(resp,false)
3590
3606
  image_slug = resp["result"]["slug"]
3591
3607
  container = resp["result"]["machine_c"]
@@ -3597,21 +3613,52 @@ module Cnvrg
3597
3613
  Images.revoke_custom_new_image(owner, image_slug)
3598
3614
  log_end(-1,"Couldn't connect to machine,aborting")
3599
3615
  end
3600
- say "run command until ctrl + c initiates", Thor::Shell::Color::BLUE
3616
+ say "run command until ctrl + c or quit is initiated", Thor::Shell::Color::BLUE
3601
3617
  begin
3618
+ logs = []
3602
3619
 
3603
3620
  while true
3604
3621
  command = ask("$>")
3605
- puts ssh.exec_command(command)
3622
+ logs << { time: Time.now,
3623
+ message: command,
3624
+ type: "stdout"
3625
+ }
3626
+ if command.eql? "quit"
3627
+ say "Commiting Image..", Thor::Shell::Color::BLUE
3628
+ break
3629
+ end
3630
+ res = ssh.exec_command(command)
3631
+ begin
3632
+ res_parsed = JSON.parse(res)
3633
+ res = res_parsed.join(",")
3634
+ end
3635
+
3636
+ puts res
3637
+ logs << { time: Time.now,
3638
+ message: res,
3639
+ type: "stdout"
3640
+ }
3641
+ logs.flatten!
3642
+
3606
3643
  end
3607
3644
 
3608
3645
  rescue SignalException
3609
3646
  say "Commiting Image..", Thor::Shell::Color::BLUE
3610
3647
 
3611
3648
  end
3612
- resp = Images.commit_custom_image(owner,image_slug)
3649
+ resp = Images.commit_custom_image(owner,image_slug,logs)
3613
3650
  if Cnvrg::CLI.is_response_success(resp,false)
3614
3651
  say "#{checks} Image commited successfuly, email will be sent when image is ready", Thor::Shell::Color::GREEN
3652
+ else
3653
+ if image_slug
3654
+ Images.revoke_custom_new_image(owner, image_slug)
3655
+ end
3656
+ if ssh
3657
+ ssh.close_ssh()
3658
+ end
3659
+ say "Image couldn't be commited, rolling back changes", Thor::Shell::Color::RED
3660
+
3661
+ exit(1)
3615
3662
  end
3616
3663
  if ssh
3617
3664
  ssh.close_ssh()
@@ -3655,7 +3702,6 @@ module Cnvrg
3655
3702
  begin
3656
3703
  verify_logged_in(false)
3657
3704
  log_start(__method__, args, options)
3658
- verify_software_installed("docker")
3659
3705
  working_dir = is_cnvrg_dir
3660
3706
  install_file = options["install"] || nil
3661
3707
  if !install_file.nil?
@@ -3730,7 +3776,6 @@ module Cnvrg
3730
3776
  def commit_image
3731
3777
  verify_logged_in(true)
3732
3778
  log_start(__method__, args, options)
3733
- verify_software_installed("docker")
3734
3779
 
3735
3780
  begin
3736
3781
  image = is_project_with_docker(Dir.pwd)
@@ -3776,7 +3821,6 @@ module Cnvrg
3776
3821
  def sync_image(docker=false)
3777
3822
  verify_logged_in(true)
3778
3823
  log_start(__method__, args, options)
3779
- verify_software_installed("docker")
3780
3824
  is_public = options["is_public"] || false
3781
3825
  is_base = options["is_base"] || false
3782
3826
  message = options["message"] || ""
@@ -3848,7 +3892,6 @@ module Cnvrg
3848
3892
  def upload_image(image_id, is_public, is_base, *message)
3849
3893
  verify_logged_in(true)
3850
3894
  log_start(__method__, args, options)
3851
- verify_software_installed("docker")
3852
3895
  image = Docker::Image.get(image_id)
3853
3896
  project_home = get_project_home
3854
3897
  @project = Project.new(project_home)
@@ -4197,7 +4240,6 @@ module Cnvrg
4197
4240
  def upload_cnvrg_image(image_name)
4198
4241
  verify_logged_in(false)
4199
4242
  log_start(__method__, args, options)
4200
- verify_software_installed("docker")
4201
4243
  owner = Cnvrg::CLI.get_owner()
4202
4244
 
4203
4245
  path = File.expand_path('~')+"/.cnvrg/tmp/#{image_name}.zip"
@@ -4648,8 +4690,11 @@ module Cnvrg
4648
4690
  if response.nil?
4649
4691
  if !Cnvrg::Helpers.internet_connection?
4650
4692
  say("<%= color('Error:You seems to be offline', RED) %>")
4693
+ end
4694
+ if should_exit
4695
+ exit(1)
4651
4696
  else
4652
- say("<%= color('Error', RED) %>")
4697
+ return false
4653
4698
  end
4654
4699
  elsif response["status"]!= 200
4655
4700
  error = response['message']
@@ -4746,10 +4791,11 @@ module Cnvrg
4746
4791
  logfile_old = File.expand_path('~') +"/.cnvrg/log_#{date}.log"
4747
4792
  count+=1
4748
4793
  end
4749
- @files = Cnvrg::Files.new(Cnvrg::CLI.get_owner, "")
4750
- @files.upload_log_file(logfile_old, "log_#{date}.log", yesterday)
4751
- FileUtils.remove logfile_old
4752
-
4794
+ if File.exist? logfile_old
4795
+ @files = Cnvrg::Files.new(Cnvrg::CLI.get_owner, "")
4796
+ @files.upload_log_file(logfile_old, "log_#{date}.log", yesterday)
4797
+ FileUtils.remove logfile_old
4798
+ end
4753
4799
 
4754
4800
  end
4755
4801
  $LOG = LogStashLogger.new(type: :file, path: logfile, sync: true)
@@ -5063,6 +5109,21 @@ module Cnvrg
5063
5109
  return relative
5064
5110
  end
5065
5111
  end
5112
+ def create_docker_tar(docker_path,tar_path)
5113
+ begin
5114
+
5115
+ if File.directory? (docker_path)
5116
+ `cd #{docker_path} && tar -czf #{tar_path} . `
5117
+ else
5118
+ dir_name = File.dirname docker_path
5119
+ `cd #{dir_name} && tar -czf #{tar_path} #{File.basename(docker_path)}`
5120
+ end
5121
+ rescue => e
5122
+ puts "Exception while compressing docker path: #{e.message}"
5123
+ end
5124
+
5125
+ return $?.success?
5126
+ end
5066
5127
 
5067
5128
  def create_tar(path_in, path_out, tar_files,no_compression=false)
5068
5129
  #The cd is meant for cases when running cnvrg data uplaod not in the main folder
@@ -64,13 +64,14 @@ module Cnvrg
64
64
 
65
65
  upload_resp = Cnvrg::API.request(@base_resource + "upload_tar_file", 'POST_FILE', {absolute_path: absolute_path, relative_path: relative_path,
66
66
  commit_sha1: commit_sha1, file_name: file_name,
67
- file_size: file_size, file_content_type: content_type, sha1: sha1})
67
+ file_size: file_size, file_content_type: content_type, sha1: sha1,
68
+ new_version:true})
68
69
  if Cnvrg::CLI.is_response_success(upload_resp, false)
69
70
  path = upload_resp["result"]["path"]
70
71
  s3_res = upload_large_files_s3(upload_resp, absolute_path)
71
72
  if s3_res
72
- Cnvrg::API.request(@base_resource + "update_s3", 'POST', {path: path, commit_id: upload_resp["result"]["commit_id"],
73
- blob_id: upload_resp["result"]["id"]})
73
+ # Cnvrg::API.request(@base_resource + "update_s3", 'POST', {path: path, commit_id: upload_resp["result"]["commit_id"],
74
+ # blob_id: upload_resp["result"]["id"]})
74
75
  return true
75
76
  end
76
77
  else
@@ -283,16 +284,29 @@ module Cnvrg
283
284
  home_dir = File.expand_path('~')
284
285
  log_file = "#{home_dir}/.cnvrg/tmp/upload_#{File.basename(file_path)}.log"
285
286
 
286
- URLcrypt::key = [body].pack('H*')
287
- client = Aws::S3::Client.new(:access_key_id => URLcrypt.decrypt(upload_resp["result"]["new_a"]),
288
- :secret_access_key => URLcrypt.decrypt(upload_resp["result"]["new_s"]),
289
- :region => URLcrypt.decrypt(upload_resp["result"]["region"]),
287
+
288
+ split = body.split("\n")
289
+ key = split[0]
290
+ iv = split[1]
291
+
292
+ access = Cnvrg::Helpers.decrypt(key, iv, upload_resp["result"]["new_a"])
293
+
294
+ secret = Cnvrg::Helpers.decrypt(key,iv, upload_resp["result"]["new_s"])
295
+
296
+ region = Cnvrg::Helpers.decrypt(key,iv, upload_resp["result"]["region"])
297
+
298
+ bucket = Cnvrg::Helpers.decrypt(key,iv, upload_resp["result"]["bucket"])
299
+
300
+
301
+ client = Aws::S3::Client.new(:access_key_id => access,
302
+ :secret_access_key =>secret,
303
+ :region => region,
290
304
  :logger => Logger.new(log_file),
291
305
  :http_open_timeout => 60, :retry_limit => 20,
292
306
  :http_wire_trace => true)
293
307
  s3 = Aws::S3::Resource.new(client: client)
294
308
 
295
- resp = s3.bucket(URLcrypt.decrypt(upload_resp["result"]["bucket"])).
309
+ resp = s3.bucket(bucket).
296
310
  object(upload_resp["result"]["path"]+"/"+File.basename(file_path)).
297
311
  upload_file(file_path, {:use_accelerate_endpoint => true})
298
312
  # s4cmd_path = upload_resp["result"]["path_s4cmd"]
@@ -407,15 +421,33 @@ module Cnvrg
407
421
  response = http.request request
408
422
  body = response.read_body
409
423
  end
410
- URLcrypt::key = [body].pack('H*')
411
- s3 = Aws::S3::Client.new(
412
- :access_key_id => URLcrypt.decrypt(download_resp["result"]["sts_a"]),
413
- :secret_access_key => URLcrypt.decrypt(download_resp["result"]["sts_s"]),
414
- :session_token => URLcrypt.decrypt(download_resp["result"]["sts_st"]),
415
- :region => URLcrypt.decrypt(download_resp["result"]["region"]))
424
+ split = body.split("\n")
425
+ key = split[0]
426
+ iv = split[1]
427
+
428
+ access = Cnvrg::Helpers.decrypt(key, iv, download_resp["result"]["sts_a"])
429
+
430
+ secret = Cnvrg::Helpers.decrypt(key,iv, download_resp["result"]["sts_s"])
431
+
432
+ session = Cnvrg::Helpers.decrypt(key,iv, download_resp["result"]["sts_st"])
433
+ region = Cnvrg::Helpers.decrypt(key,iv, download_resp["result"]["region"])
434
+
435
+ bucket = Cnvrg::Helpers.decrypt(key,iv, download_resp["result"]["bucket"])
436
+ key = Cnvrg::Helpers.decrypt(key,iv, download_resp["result"]["key"])
437
+
438
+
439
+
440
+ client = Aws::S3::Client.new(
441
+ :access_key_id =>access,
442
+ :secret_access_key => secret,
443
+ :session_token => session,
444
+ :region => region,
445
+ :http_open_timeout => 60, :retry_limit => 20
446
+ )
447
+
416
448
  File.open(project_home+"/"+absolute_path, 'wb') do |file|
417
- resp = s3.get_object({bucket: URLcrypt.decrypt(download_resp["result"]["bucket"]),
418
- key: URLcrypt.decrypt(download_resp["result"]["key"])}, target: file)
449
+ resp = client.get_object({bucket:bucket,
450
+ key:key}, target: file)
419
451
  end
420
452
  return true
421
453
  end
@@ -428,7 +460,7 @@ module Cnvrg
428
460
 
429
461
  def download_data_file(commit_sha1, dataset_home)
430
462
  begin
431
- res = Cnvrg::API.request(@base_resource + "download_data_file", 'POST', {commit_sha1: commit_sha1})
463
+ res = Cnvrg::API.request(@base_resource + "download_data_file", 'POST', {commit_sha1: commit_sha1,new_version:true})
432
464
  Cnvrg::CLI.is_response_success(res, false)
433
465
  if res["result"]
434
466
  download_resp = res
@@ -445,16 +477,34 @@ module Cnvrg
445
477
  response = http.request request
446
478
  body = response.read_body
447
479
  end
448
- URLcrypt::key = [body].pack('H*')
449
- s3 = Aws::S3::Client.new(
450
- :access_key_id => URLcrypt.decrypt(download_resp["result"]["sts_a"]),
451
- :secret_access_key => URLcrypt.decrypt(download_resp["result"]["sts_s"]),
452
- :session_token => URLcrypt.decrypt(download_resp["result"]["sts_st"]),
453
- :region => URLcrypt.decrypt(download_resp["result"]["region"]))
480
+ split = body.split("\n")
481
+ key = split[0]
482
+ iv = split[1]
483
+
484
+ access = Cnvrg::Helpers.decrypt(key, iv, download_resp["result"]["sts_a"])
485
+
486
+ secret = Cnvrg::Helpers.decrypt(key,iv, download_resp["result"]["sts_s"])
487
+
488
+ session = Cnvrg::Helpers.decrypt(key,iv, download_resp["result"]["sts_st"])
489
+ region = Cnvrg::Helpers.decrypt(key,iv, download_resp["result"]["region"])
490
+
491
+ bucket = Cnvrg::Helpers.decrypt(key,iv, download_resp["result"]["bucket"])
492
+ key = Cnvrg::Helpers.decrypt(key,iv, download_resp["result"]["key"])
493
+
494
+
495
+
496
+ client = Aws::S3::Client.new(
497
+ :access_key_id =>access,
498
+ :secret_access_key => secret,
499
+ :session_token => session,
500
+ :region => region,
501
+ :http_open_timeout => 60, :retry_limit => 20
502
+ )
503
+
454
504
 
455
505
  File.open(dataset_home+"/"+filename, 'wb') do |file|
456
- resp = s3.get_object({bucket: URLcrypt.decrypt(download_resp["result"]["bucket"]),
457
- key: URLcrypt.decrypt(download_resp["result"]["key"])}, target: file)
506
+ resp = client.get_object({bucket: bucket,
507
+ key: key }, target: file)
458
508
  end
459
509
  return filename
460
510
  end
@@ -26,7 +26,8 @@ module Cnvrg
26
26
 
27
27
  upload_resp = Cnvrg::API.request(@base_resource + "upload_file", 'POST_FILE', {absolute_path: absolute_path, relative_path: relative_path,
28
28
  commit_sha1: commit_sha1, file_name: file_name,
29
- file_size: file_size, file_content_type: content_type, sha1: sha1})
29
+ file_size: file_size, file_content_type: content_type, sha1: sha1,
30
+ new_version:true})
30
31
  if Cnvrg::CLI.is_response_success(upload_resp, false)
31
32
  path = upload_resp["result"]["path"]
32
33
  if file_size.to_f>= Cnvrg::Files::LARGE_FILE.to_f
@@ -241,7 +242,6 @@ module Cnvrg
241
242
 
242
243
 
243
244
  sts_path = upload_resp["result"]["path_sts"]
244
- s4cmd_path = upload_resp["result"]["path_s4cmd"]
245
245
 
246
246
  uri = URI.parse(sts_path)
247
247
  http_object = Net::HTTP.new(uri.host, uri.port)
@@ -253,77 +253,45 @@ module Cnvrg
253
253
  response = http.request request
254
254
  body = response.read_body
255
255
  end
256
+ split = body.split("\n")
257
+ key = split[0]
258
+ iv = split[1]
256
259
 
257
- URLcrypt::key = [body].pack('H*')
258
- is_python = false
259
- s4cmd_suc = false
260
- s4cmd_install_suc = false
261
- # python_version=`python --version > /dev/null 2>&1`; is_python=$?.success?
262
- # if is_python
263
- #
264
- # s4cmd=`pip freeze 2>/dev/null |grep -e s4cmd -e boto3 > /dev/null 2>&1`; s4cmd_suc=$?.success?
265
- # if !s4cmd_suc
266
- # `pip install s4cmd > /dev/null 2>&1`; s4cmd_install_suc=$?.success?
267
- # end
268
- #
269
- # end
270
- if !s4cmd_suc and !s4cmd_install_suc
271
- s3 = Aws::S3::Resource.new(
272
- :access_key_id => URLcrypt.decrypt(upload_resp["result"]["sts_a"]),
273
- :secret_access_key => URLcrypt.decrypt(upload_resp["result"]["sts_s"]),
274
- :session_token => URLcrypt.decrypt(upload_resp["result"]["sts_st"]),
275
- :region => URLcrypt.decrypt(upload_resp["result"]["region"]))
276
- resp = s3.bucket(URLcrypt.decrypt(upload_resp["result"]["bucket"])).
277
- object(upload_resp["result"]["path"]+"/"+File.basename(file_path)).
278
- upload_file(file_path, {:use_accelerate_endpoint => true})
279
- else
280
- s4cmd_uri = URI.parse(s4cmd_path)
281
- s4cmd_http_object = Net::HTTP.new(s4cmd_uri.host, s4cmd_uri.port)
282
- s4cmd_http_object.use_ssl = true if s4cmd_uri.scheme == 'https'
283
- s4cmd_request = Net::HTTP::Get.new(s4cmd_path)
284
-
285
- s4cmd_body = ""
286
- s4cmd_http_object.start do |http|
287
- response = http.request s4cmd_request
288
- s4cmd_body = response.read_body
289
- end
290
- s4cmd_new_body = s4cmd_body.gsub(" self.client = self.boto3.client('s3',
291
- aws_access_key_id=aws_access_key_id,
292
- aws_secret_access_key=aws_secret_access_key)", " self.client = self.boto3.client('s3',
293
- aws_access_key_id='#{ URLcrypt.decrypt(upload_resp["result"]["sts_a"])}',
294
- aws_secret_access_key='#{URLcrypt.decrypt(upload_resp["result"]["sts_s"])}',
295
- aws_session_token='#{URLcrypt.decrypt(upload_resp["result"]["sts_st"])}')")
296
-
297
-
298
- tmp = Tempfile.new('s4cmd.py')
299
- tmp << s4cmd_new_body
300
- tmp.flush
301
- tmp.close
302
- #
303
- is_success = false
304
- count = 0
305
- while !is_success and count <3
306
- 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 `
307
- is_success =$?.success?
308
- count +=1
260
+ access = Cnvrg::Helpers.decrypt(key, iv, upload_resp["result"]["sts_a"])
309
261
 
310
- end
311
- resp= is_success
262
+ secret = Cnvrg::Helpers.decrypt(key,iv, upload_resp["result"]["sts_s"])
263
+
264
+ session = Cnvrg::Helpers.decrypt(key,iv, upload_resp["result"]["sts_st"])
265
+ region = Cnvrg::Helpers.decrypt(key,iv, upload_resp["result"]["region"])
266
+
267
+ bucket = Cnvrg::Helpers.decrypt(key,iv, upload_resp["result"]["bucket"])
312
268
 
313
- end
269
+
270
+
271
+ client = Aws::S3::Client.new(
272
+ :access_key_id =>access,
273
+ :secret_access_key => secret,
274
+ :session_token => session,
275
+ :region => region,
276
+ :http_open_timeout => 60, :retry_limit => 20
277
+ )
278
+ s3 = Aws::S3::Resource.new(client: client)
279
+ resp = s3.bucket(bucket).
280
+ object(upload_resp["result"]["path"]+"/"+File.basename(file_path)).
281
+ upload_file(file_path, {:use_accelerate_endpoint => true})
314
282
 
315
283
  return resp
316
284
 
317
- rescue => e
318
- if File.exist? tmp
319
- FileUtils.rm_rf [tmp]
320
- end
321
- return false
285
+ rescue => e
286
+ puts e
287
+ puts e.backtrace
288
+ return false
322
289
 
323
290
  end
324
291
  return true
325
292
 
326
- end
293
+ end
294
+
327
295
 
328
296
  def upload_small_files_s3(url_path, file_path, content_type)
329
297
  url = URI.parse(url_path)
@@ -370,7 +338,8 @@ module Cnvrg
370
338
 
371
339
  def download_file_s3(absolute_path, relative_path, project_home, commit_sha1=nil, conflict=false)
372
340
  begin
373
- res = Cnvrg::API.request(@base_resource + "download_file", 'POST', {absolute_path: absolute_path, relative_path: relative_path, commit_sha1: commit_sha1})
341
+ res = Cnvrg::API.request(@base_resource + "download_file", 'POST', {absolute_path: absolute_path, relative_path: relative_path,
342
+ commit_sha1: commit_sha1,new_version:true})
374
343
  Cnvrg::CLI.is_response_success(res, false)
375
344
  if res["result"]
376
345
  download_resp = res
@@ -388,20 +357,39 @@ module Cnvrg
388
357
  response = http.request request
389
358
  body = response.read_body
390
359
  end
391
- URLcrypt::key = [body].pack('H*')
392
- s3 = Aws::S3::Client.new(
393
- :access_key_id => URLcrypt.decrypt(download_resp["result"]["sts_a"]),
394
- :secret_access_key => URLcrypt.decrypt(download_resp["result"]["sts_s"]),
395
- :session_token => URLcrypt.decrypt(download_resp["result"]["sts_st"]),
396
- :region => URLcrypt.decrypt(download_resp["result"]["region"]))
360
+ split = body.split("\n")
361
+ key = split[0]
362
+ iv = split[1]
363
+
364
+ access = Cnvrg::Helpers.decrypt(key, iv, download_resp["result"]["sts_a"])
365
+
366
+ secret = Cnvrg::Helpers.decrypt(key,iv, download_resp["result"]["sts_s"])
367
+
368
+ session = Cnvrg::Helpers.decrypt(key,iv, download_resp["result"]["sts_st"])
369
+ region = Cnvrg::Helpers.decrypt(key,iv, download_resp["result"]["region"])
370
+
371
+ bucket = Cnvrg::Helpers.decrypt(key,iv, download_resp["result"]["bucket"])
372
+ key = Cnvrg::Helpers.decrypt(key,iv, download_resp["result"]["key"])
373
+
374
+
375
+
376
+ client = Aws::S3::Client.new(
377
+ :access_key_id =>access,
378
+ :secret_access_key => secret,
379
+ :session_token => session,
380
+ :region => region,
381
+ :http_open_timeout => 60, :retry_limit => 20
382
+ )
383
+
397
384
  File.open(project_home+"/"+absolute_path, 'wb') do |file|
398
- resp = s3.get_object({bucket: URLcrypt.decrypt(download_resp["result"]["bucket"]),
399
- key: URLcrypt.decrypt(download_resp["result"]["key"])}, target: file)
385
+ resp = client.get_object({bucket:bucket,
386
+ key:key}, target: file)
400
387
  end
401
388
  return true
402
389
  end
403
390
 
404
391
  rescue => e
392
+ puts e
405
393
  return false
406
394
 
407
395
  end
@@ -171,6 +171,19 @@ parameters:
171
171
  Process.clock_gettime(Process::CLOCK_MONOTONIC, :microsecond)
172
172
  end
173
173
 
174
+ def decrypt(key,iv,str)
175
+ cipher = OpenSSL::Cipher.new("aes-256-cbc").decrypt
176
+ cipher.key = key
177
+ cipher.iv = Base64.decode64 iv.encode('ascii-8bit')
178
+
179
+ result = Base64.decode64 (str.encode('ascii-8bit'))
180
+ result = cipher.update(result)
181
+ result << cipher.final
182
+
183
+ return result
184
+
185
+ end
186
+
174
187
  # memory
175
188
  #
176
189
  def get_mem(pid)
@@ -1,5 +1,5 @@
1
1
  module Cnvrg
2
- VERSION = '0.0.1520000'
2
+ VERSION = '0.0.1530000'
3
3
 
4
4
 
5
5
  end
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.1520000
4
+ version: 0.0.1530000
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-23 00:00:00.000000000 Z
12
+ date: 2017-07-30 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bundler