arvados-cli 0.1.20140616132754 → 0.1.20140616152753

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.
Files changed (3) hide show
  1. checksums.yaml +4 -4
  2. data/bin/crunch-job +33 -10
  3. metadata +2 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 2e4f19adbce0bf5fc0ba532f0e132c39da05e06b
4
- data.tar.gz: 2193d4e95bf34cfd7a6820a9b8bfa7f7cdd6e892
3
+ metadata.gz: c2ea85d71466309df46d656ca0a395e638fd1716
4
+ data.tar.gz: 3246cf8fd176c5061e8e1df59458d787065aa845
5
5
  SHA512:
6
- metadata.gz: 06d2abed95b2c83850ba20655d8a30af34e7229b8dc86afd99570a53eab439acab780415a9f4e4fb381b87f22aa8339e971d4a2973f57369fda4bafe33c9dae8
7
- data.tar.gz: 324fae742a66aa974cb80b5c5a952a2390decb30ca5c4b8f66dbbf08dbc40dddaaf4d3fafbb54acdf2dda732f98bbeddb49803b4bb2e351dad392e9dcd7612d7
6
+ metadata.gz: a843a87259742e70da986e24362eff16c2a21a6fe3348f527c0316d6c84288ab8f945831f72f7b7ec60cbf579e58729655be56312f205a334d196a20374c7346
7
+ data.tar.gz: 00d747bcd22b0632aa128d35917c60e2c9bd8d83cee5e568376f6827fc1c19b15e936267cdf59f6d090836f3ec690aa259d65316b59ac99dadadacef5dd05c5e
data/bin/crunch-job CHANGED
@@ -501,13 +501,23 @@ if (!$have_slurm)
501
501
 
502
502
  # If this job requires a Docker image, install that.
503
503
  my $docker_bin = "/usr/bin/docker.io";
504
- my $docker_image = $Job->{runtime_constraints}->{docker_image} || "";
505
- if ($docker_image) {
504
+ my ($docker_locator, $docker_hash);
505
+ if ($docker_locator = $Job->{docker_image_locator}) {
506
+ $docker_hash = find_docker_hash($docker_locator);
507
+ if (!$docker_hash)
508
+ {
509
+ croak("No Docker image hash found from locator $docker_locator");
510
+ }
511
+ my $docker_install_script = qq{
512
+ if ! $docker_bin images -q --no-trunc | grep -qxF \Q$docker_hash\E; then
513
+ arv-get \Q$docker_locator/$docker_hash.tar\E | $docker_bin load
514
+ fi
515
+ };
506
516
  my $docker_pid = fork();
507
517
  if ($docker_pid == 0)
508
518
  {
509
- srun (["srun", "--nodelist=" . join(' ', @node)],
510
- [$docker_bin, 'pull', $docker_image]);
519
+ srun (["srun", "--nodelist=" . join(',', @node)],
520
+ ["/bin/sh", "-ec", $docker_install_script]);
511
521
  exit ($?);
512
522
  }
513
523
  while (1)
@@ -516,11 +526,9 @@ if ($docker_image) {
516
526
  freeze_if_want_freeze ($docker_pid);
517
527
  select (undef, undef, undef, 0.1);
518
528
  }
519
- # If the Docker image was specified as a hash, pull will fail.
520
- # Ignore that error. We'll see what happens when we try to run later.
521
- if (($? != 0) && ($docker_image !~ /^[0-9a-fA-F]{5,64}$/))
529
+ if ($? != 0)
522
530
  {
523
- croak("Installing Docker image $docker_image returned exit code $?");
531
+ croak("Installing Docker image from $docker_locator returned exit code $?");
524
532
  }
525
533
  }
526
534
 
@@ -639,7 +647,7 @@ for (my $todo_ptr = 0; $todo_ptr <= $#jobstep_todo; $todo_ptr ++)
639
647
  "&& perl -";
640
648
  }
641
649
  $command .= "&& exec arv-mount --allow-other $ENV{TASK_KEEPMOUNT} --exec ";
642
- if ($docker_image)
650
+ if ($docker_hash)
643
651
  {
644
652
  $command .= "crunchstat -cgroup-root=/sys/fs/cgroup -cgroup-parent=docker -cgroup-cid=$ENV{TASK_WORK}/docker.cid -poll=10000 ";
645
653
  $command .= "$docker_bin run -i -a stdin -a stdout -a stderr --cidfile=$ENV{TASK_WORK}/docker.cid ";
@@ -659,7 +667,7 @@ for (my $todo_ptr = 0; $todo_ptr <= $#jobstep_todo; $todo_ptr ++)
659
667
  $command .= "-e \Q$env_key=$env_val\E ";
660
668
  }
661
669
  }
662
- $command .= "\Q$docker_image\E ";
670
+ $command .= "\Q$docker_hash\E ";
663
671
  } else {
664
672
  $command .= "crunchstat -cgroup-root=/sys/fs/cgroup -poll=10000 "
665
673
  }
@@ -1437,6 +1445,21 @@ sub must_lock_now
1437
1445
  }
1438
1446
  }
1439
1447
 
1448
+ sub find_docker_hash {
1449
+ # Given a Keep locator, search for a matching link to find the Docker hash
1450
+ # of the stored image.
1451
+ my $locator = shift;
1452
+ my $links_result = $arv->{links}->{list}->execute(
1453
+ filters => [["head_uuid", "=", $locator],
1454
+ ["link_class", "=", "docker_image_hash"]],
1455
+ limit => 1);
1456
+ my $docker_hash;
1457
+ foreach my $link (@{$links_result->{items}}) {
1458
+ $docker_hash = lc($link->{name});
1459
+ }
1460
+ return $docker_hash;
1461
+ }
1462
+
1440
1463
  __DATA__
1441
1464
  #!/usr/bin/perl
1442
1465
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: arvados-cli
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.20140616132754
4
+ version: 0.1.20140616152753
5
5
  platform: ruby
6
6
  authors:
7
7
  - Arvados Authors
@@ -146,7 +146,7 @@ dependencies:
146
146
  - - "~>"
147
147
  - !ruby/object:Gem::Version
148
148
  version: '0.8'
149
- description: This is the Arvados SDK CLI gem, git revision 95811b3a901df3ceab701fe18e9ec1bb614bef90
149
+ description: This is the Arvados SDK CLI gem, git revision 439e1417599cad4e65d506a11b583a6ebabc7604
150
150
  email: gem-dev@curoverse.com
151
151
  executables:
152
152
  - arv