mirror of
https://we.phorge.it/source/phorge.git
synced 2024-11-28 17:52:43 +01:00
5cbc31644b
Summary: This does nothing fancy, just closes the resource and releases/breaks leases. They'll get cleaned up in some to-be-written GC process. Test Plan: Closed resources from web UI and CLI. Reviewers: btrahan Reviewed By: btrahan CC: aran Maniphest Tasks: T2015 Differential Revision: https://secure.phabricator.com/D3998
87 lines
2.3 KiB
PHP
87 lines
2.3 KiB
PHP
<?php
|
|
|
|
final class DrydockResource extends DrydockDAO {
|
|
|
|
protected $id;
|
|
protected $phid;
|
|
protected $blueprintClass;
|
|
protected $status;
|
|
|
|
protected $type;
|
|
protected $name;
|
|
protected $attributes = array();
|
|
protected $capabilities = array();
|
|
protected $ownerPHID;
|
|
|
|
private $blueprint;
|
|
|
|
public function getConfiguration() {
|
|
return array(
|
|
self::CONFIG_AUX_PHID => true,
|
|
self::CONFIG_SERIALIZATION => array(
|
|
'attributes' => self::SERIALIZATION_JSON,
|
|
'capabilities' => self::SERIALIZATION_JSON,
|
|
),
|
|
) + parent::getConfiguration();
|
|
}
|
|
|
|
public function generatePHID() {
|
|
return PhabricatorPHID::generateNewPHID(
|
|
PhabricatorPHIDConstants::PHID_TYPE_DRYR);
|
|
}
|
|
|
|
public function getAttribute($key, $default = null) {
|
|
return idx($this->attributes, $key, $default);
|
|
}
|
|
|
|
public function setAttribute($key, $value) {
|
|
$this->attributes[$key] = $value;
|
|
return $this;
|
|
}
|
|
|
|
public function getCapability($key, $default = null) {
|
|
return idx($this->capbilities, $key, $default);
|
|
}
|
|
|
|
public function getInterface(DrydockLease $lease, $type) {
|
|
return $this->getBlueprint()->getInterface($this, $lease, $type);
|
|
}
|
|
|
|
public function getBlueprint() {
|
|
if (empty($this->blueprint)) {
|
|
$this->blueprint = newv($this->blueprintClass, array());
|
|
}
|
|
return $this->blueprint;
|
|
}
|
|
|
|
public function closeResource() {
|
|
$this->openTransaction();
|
|
$leases = id(new DrydockLease())->loadAllWhere(
|
|
'resourceID = %d AND status IN (%Ld)',
|
|
$this->getID(),
|
|
array(
|
|
DrydockLeaseStatus::STATUS_PENDING,
|
|
DrydockLeaseStatus::STATUS_ACTIVE,
|
|
));
|
|
|
|
foreach ($leases as $lease) {
|
|
switch ($lease->getStatus()) {
|
|
case DrydockLeaseStatus::STATUS_PENDING:
|
|
$message = pht('Breaking pending lease (resource closing).');
|
|
$lease->setStatus(DrydockLeaseStatus::STATUS_BROKEN);
|
|
break;
|
|
case DrydockLeaseStatus::STATUS_ACTIVE:
|
|
$message = pht('Releasing active lease (resource closing).');
|
|
$lease->setStatus(DrydockLeaseStatus::STATUS_RELEASED);
|
|
break;
|
|
}
|
|
DrydockBlueprint::writeLog($this, $lease, $message);
|
|
$lease->save();
|
|
}
|
|
|
|
$this->setStatus(DrydockResourceStatus::STATUS_CLOSED);
|
|
$this->save();
|
|
$this->saveTransaction();
|
|
}
|
|
|
|
}
|