From 50b9ffdef0a83f1d5d0000c9134f7990f8fe035c Mon Sep 17 00:00:00 2001 From: Leigh B Stoller <stoller@flux.utah.edu> Date: Mon, 25 Aug 2014 08:27:41 -0600 Subject: [PATCH] Add option to force ready/released bits to be set on an image. Handy. --- db/Image.pm.in | 11 +++++++++++ utils/imagerelease.in | 25 ++++++++++++++++++------- 2 files changed, 29 insertions(+), 7 deletions(-) diff --git a/db/Image.pm.in b/db/Image.pm.in index ddd9fd5f4f..771c22ab18 100644 --- a/db/Image.pm.in +++ b/db/Image.pm.in @@ -1770,6 +1770,17 @@ sub SetReady($$) } sub MarkReady($) { return SetReady($_[0], 1); } sub ClearReady($) { return SetReady($_[0], 0); } +# Released bit. +sub MarkReleased($) +{ + my ($self) = @_; + + return -1 + if (! $self->Update({'released' => 1})); + + return 0; +} + # Are two images the same. sub SameImage($$) diff --git a/utils/imagerelease.in b/utils/imagerelease.in index 7e6a0940a0..f8baf38fa2 100644 --- a/utils/imagerelease.in +++ b/utils/imagerelease.in @@ -35,15 +35,18 @@ use File::Basename; # sub usage() { - print("Usage: imagerelease [-q] <imageid>\n" . + print("Usage: imagerelease [-q] [-f] [-m] <imageid>\n" . "Options:\n". - " -q Turn on quiet mode\n"); + " -q Turn on quiet mode\n". + " -f Force even if it make no sense.\n". + " -m With force, just mark as ready/released.\n"); exit(-1); } -my $optlist = "dqf"; +my $optlist = "dqfm"; my $debug = 0; my $quiet = 0; my $force = 0; +my $markready = 0; # # Configure variables @@ -91,6 +94,9 @@ if (defined($options{"q"})) { } if (defined($options{"f"})) { $force = 1; + if (defined($options{"m"})) { + $markready = 1; + } } usage() if (@ARGV != 1); @@ -105,10 +111,6 @@ if ($UID) { $user_uid = $user->uid(); } -if ($UID && !$user->IsAdmin()) { - fatal("Only admins can release an image."); -} - my $image = Image->Lookup($imageid); if (!defined($image)) { $image = Image->LookupByName($imageid); @@ -120,9 +122,18 @@ if ($image->released() && !$force) { fatal("Image is already released! ". "Maybe you need to provide imageid:version"); } +if ($force && $markready) { + print "Marking image ready/released, but not doing anything else\n"; + $image->MarkReady(); + $image->MarkReleased(); + exit(0); +} if (!$image->ready()) { fatal("Image is not ready yet!"); } +if ($UID && !$user->IsAdmin()) { + fatal("Only admins can release an image."); +} # # Grab version 0 of the descriptor, which tells us if the image is really -- GitLab