arvados-cli 0.1.20140616132754 → 0.1.20140616152753

Sign up to get free protection for your applications and to get access to all the features.
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