mirror of
https://we.phorge.it/source/phorge.git
synced 2025-03-31 14:38:15 +02:00
Add "--all" flags to "release-lease" and "release-resource" workflows in "bin/drydock"
Summary: Ref T13677. These flags increase the convenience of testing in a development environment. Test Plan: Used new "--all" flags to release all resources and leases. Subscribers: PHID-OPKG-gm6ozazyms6q6i22gyam Maniphest Tasks: T13677 Differential Revision: https://secure.phabricator.com/D21805
This commit is contained in:
parent
6417e950f6
commit
1b6727ac3d
4 changed files with 136 additions and 34 deletions
|
@ -15,40 +15,71 @@ final class DrydockManagementReleaseLeaseWorkflow
|
||||||
'repeat' => true,
|
'repeat' => true,
|
||||||
'help' => pht('Lease ID to release.'),
|
'help' => pht('Lease ID to release.'),
|
||||||
),
|
),
|
||||||
|
array(
|
||||||
|
'name' => 'all',
|
||||||
|
'help' => pht('Release all leases. Dangerous!'),
|
||||||
|
),
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
public function execute(PhutilArgumentParser $args) {
|
public function execute(PhutilArgumentParser $args) {
|
||||||
|
$is_all = $args->getArg('all');
|
||||||
$ids = $args->getArg('id');
|
$ids = $args->getArg('id');
|
||||||
if (!$ids) {
|
|
||||||
|
if (!$ids && !$is_all) {
|
||||||
throw new PhutilArgumentUsageException(
|
throw new PhutilArgumentUsageException(
|
||||||
pht(
|
pht(
|
||||||
'Specify one or more lease IDs to release with "%s".',
|
'Select which leases you want to release. See "--help" for '.
|
||||||
'--id'));
|
'guidance.'));
|
||||||
}
|
}
|
||||||
|
|
||||||
$viewer = $this->getViewer();
|
$viewer = $this->getViewer();
|
||||||
$drydock_phid = id(new PhabricatorDrydockApplication())->getPHID();
|
|
||||||
|
|
||||||
$leases = id(new DrydockLeaseQuery())
|
$statuses = $this->getReleaseableLeaseStatuses();
|
||||||
|
|
||||||
|
$query = id(new DrydockLeaseQuery())
|
||||||
->setViewer($viewer)
|
->setViewer($viewer)
|
||||||
->withIDs($ids)
|
->withStatuses(mpull($statuses, 'getKey'));
|
||||||
->execute();
|
|
||||||
|
|
||||||
PhabricatorWorker::setRunAllTasksInProcess(true);
|
if ($ids) {
|
||||||
foreach ($ids as $id) {
|
$query->withIDs($ids);
|
||||||
$lease = idx($leases, $id);
|
}
|
||||||
if (!$lease) {
|
|
||||||
echo tsprintf(
|
$leases = $query->execute();
|
||||||
"%s\n",
|
|
||||||
pht('Lease "%s" does not exist.', $id));
|
if ($ids) {
|
||||||
continue;
|
$id_map = mpull($leases, null, 'getID');
|
||||||
|
|
||||||
|
foreach ($ids as $id) {
|
||||||
|
$lease = idx($id_map, $id);
|
||||||
|
if (!$lease) {
|
||||||
|
throw new PhutilArgumentUsageException(
|
||||||
|
pht('Lease "%s" does not exist.', $id));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$leases = array_select_keys($id_map, $ids);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!$leases) {
|
||||||
|
echo tsprintf(
|
||||||
|
"%s\n",
|
||||||
|
pht('No leases selected for release.'));
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
$drydock_phid = id(new PhabricatorDrydockApplication())->getPHID();
|
||||||
|
|
||||||
|
PhabricatorWorker::setRunAllTasksInProcess(true);
|
||||||
|
|
||||||
|
foreach ($leases as $lease) {
|
||||||
if (!$lease->canRelease()) {
|
if (!$lease->canRelease()) {
|
||||||
echo tsprintf(
|
echo tsprintf(
|
||||||
"%s\n",
|
"%s\n",
|
||||||
pht('Lease "%s" is not releasable.', $id));
|
pht(
|
||||||
|
'Lease "%s" is not releasable.',
|
||||||
|
$lease->getDisplayName()));
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -62,9 +93,26 @@ final class DrydockManagementReleaseLeaseWorkflow
|
||||||
|
|
||||||
echo tsprintf(
|
echo tsprintf(
|
||||||
"%s\n",
|
"%s\n",
|
||||||
pht('Scheduled release of lease "%s".', $id));
|
pht(
|
||||||
|
'Scheduled release of lease "%s".',
|
||||||
|
$lease->getDisplayName()));
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private function getReleaseableLeaseStatuses() {
|
||||||
|
$statuses = DrydockLeaseStatus::getAllStatuses();
|
||||||
|
foreach ($statuses as $key => $status) {
|
||||||
|
$statuses[$key] = DrydockLeaseStatus::newStatusObject($status);
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach ($statuses as $key => $status) {
|
||||||
|
if (!$status->canRelease()) {
|
||||||
|
unset($statuses[$key]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return $statuses;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -15,41 +15,70 @@ final class DrydockManagementReleaseResourceWorkflow
|
||||||
'repeat' => true,
|
'repeat' => true,
|
||||||
'help' => pht('Resource ID to release.'),
|
'help' => pht('Resource ID to release.'),
|
||||||
),
|
),
|
||||||
|
array(
|
||||||
|
'name' => 'all',
|
||||||
|
'help' => pht('Release all resources. Dangerous!'),
|
||||||
|
),
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
public function execute(PhutilArgumentParser $args) {
|
public function execute(PhutilArgumentParser $args) {
|
||||||
|
$is_all = $args->getArg('all');
|
||||||
$ids = $args->getArg('id');
|
$ids = $args->getArg('id');
|
||||||
if (!$ids) {
|
if (!$ids && !$is_all) {
|
||||||
throw new PhutilArgumentUsageException(
|
throw new PhutilArgumentUsageException(
|
||||||
pht(
|
pht(
|
||||||
'Specify one or more resource IDs to release with "%s".',
|
'Specify which resources you want to release. See "--help" for '.
|
||||||
'--id'));
|
'guidance.'));
|
||||||
}
|
}
|
||||||
|
|
||||||
$viewer = $this->getViewer();
|
$viewer = $this->getViewer();
|
||||||
$drydock_phid = id(new PhabricatorDrydockApplication())->getPHID();
|
$statuses = $this->getReleaseableResourceStatuses();
|
||||||
|
|
||||||
$resources = id(new DrydockResourceQuery())
|
$query = id(new DrydockResourceQuery())
|
||||||
->setViewer($viewer)
|
->setViewer($viewer)
|
||||||
->withIDs($ids)
|
->withStatuses(mpull($statuses, 'getKey'));
|
||||||
->execute();
|
|
||||||
|
|
||||||
PhabricatorWorker::setRunAllTasksInProcess(true);
|
if ($ids) {
|
||||||
foreach ($ids as $id) {
|
$query->withIDs($ids);
|
||||||
$resource = idx($resources, $id);
|
}
|
||||||
|
|
||||||
if (!$resource) {
|
$resources = $query->execute();
|
||||||
echo tsprintf(
|
|
||||||
"%s\n",
|
if ($ids) {
|
||||||
pht('Resource "%s" does not exist.', $id));
|
$id_map = mpull($resources, null, 'getID');
|
||||||
continue;
|
|
||||||
|
foreach ($ids as $id) {
|
||||||
|
$resource = idx($resources, $id);
|
||||||
|
|
||||||
|
if (!$resource) {
|
||||||
|
throw new PhutilArgumentUsageException(
|
||||||
|
pht('Resource "%s" does not exist.', $id));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$resources = array_select_keys($id_map, $ids);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!$resources) {
|
||||||
|
echo tsprintf(
|
||||||
|
"%s\n",
|
||||||
|
pht('No resources selected for release.'));
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
$drydock_phid = id(new PhabricatorDrydockApplication())->getPHID();
|
||||||
|
|
||||||
|
PhabricatorWorker::setRunAllTasksInProcess(true);
|
||||||
|
|
||||||
|
foreach ($resources as $resource) {
|
||||||
if (!$resource->canRelease()) {
|
if (!$resource->canRelease()) {
|
||||||
echo tsprintf(
|
echo tsprintf(
|
||||||
"%s\n",
|
"%s\n",
|
||||||
pht('Resource "%s" is not releasable.', $id));
|
pht(
|
||||||
|
'Resource "%s" is not releasable.',
|
||||||
|
$resource->getDisplayName()));
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -63,9 +92,26 @@ final class DrydockManagementReleaseResourceWorkflow
|
||||||
|
|
||||||
echo tsprintf(
|
echo tsprintf(
|
||||||
"%s\n",
|
"%s\n",
|
||||||
pht('Scheduled release of resource "%s".', $id));
|
pht(
|
||||||
|
'Scheduled release of resource "%s".',
|
||||||
|
$resource->getDisplayName()));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private function getReleaseableResourceStatuses() {
|
||||||
|
$statuses = DrydockResourceStatus::getAllStatuses();
|
||||||
|
foreach ($statuses as $key => $status) {
|
||||||
|
$statuses[$key] = DrydockResourceStatus::newStatusObject($status);
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach ($statuses as $key => $status) {
|
||||||
|
if (!$status->canRelease()) {
|
||||||
|
unset($statuses[$key]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return $statuses;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -471,6 +471,10 @@ final class DrydockLease extends DrydockDAO
|
||||||
return "/drydock/lease/{$id}/";
|
return "/drydock/lease/{$id}/";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function getDisplayName() {
|
||||||
|
return pht('Drydock Lease %d', $this->getID());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/* -( Status )------------------------------------------------------------- */
|
/* -( Status )------------------------------------------------------------- */
|
||||||
|
|
||||||
|
|
|
@ -286,6 +286,10 @@ final class DrydockResource extends DrydockDAO
|
||||||
return $log->save();
|
return $log->save();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function getDisplayName() {
|
||||||
|
return pht('Drydock Resource %d', $this->getID());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/* -( Status )------------------------------------------------------------- */
|
/* -( Status )------------------------------------------------------------- */
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue