mirror of
https://we.phorge.it/source/phorge.git
synced 2024-12-30 01:10:58 +01:00
Validate resource attributes for preallocated hosts before executing leases
Summary: This prevents issues when the user hasn't provided the appropriate attributes for a preallocated host. Test Plan: Attempted to lease against a resource with omitted attributes, got an exception thrown before any SSH commands occurred. Reviewers: epriestley, #blessed_reviewers Reviewed By: epriestley CC: Korvin, epriestley, aran Maniphest Tasks: T1049 Differential Revision: https://secure.phabricator.com/D7695
This commit is contained in:
parent
1965bf9e52
commit
1f53017f1f
2 changed files with 22 additions and 3 deletions
|
@ -37,6 +37,21 @@ final class DrydockPreallocatedHostBlueprintImplementation
|
|||
DrydockResource $resource,
|
||||
DrydockLease $lease) {
|
||||
|
||||
// Because preallocated resources are manually created, we should verify
|
||||
// we have all the information we need.
|
||||
PhutilTypeSpec::checkMap(
|
||||
$resource->getAttributesForTypeSpec(
|
||||
array('platform', 'host', 'port', 'user', 'path')),
|
||||
array(
|
||||
'platform' => 'string',
|
||||
'host' => 'string',
|
||||
'port' => 'string', // Value is a string from the command line
|
||||
'user' => 'string',
|
||||
'path' => 'string',
|
||||
));
|
||||
$v_platform = $resource->getAttribute('platform');
|
||||
$v_path = $resource->getAttribute('path');
|
||||
|
||||
// Similar to DrydockLocalHostBlueprint, we create a folder
|
||||
// on the remote host that the lease can use.
|
||||
|
||||
|
@ -46,18 +61,18 @@ final class DrydockPreallocatedHostBlueprintImplementation
|
|||
// the platform we're currently running on, not the platform we are
|
||||
// remoting to.
|
||||
$separator = '/';
|
||||
if ($lease->getAttribute('platform') === 'windows') {
|
||||
if ($v_platform === 'windows') {
|
||||
$separator = '\\';
|
||||
}
|
||||
|
||||
// Clean up the directory path a little.
|
||||
$base_path = rtrim($resource->getAttribute('path'), '/');
|
||||
$base_path = rtrim($v_path, '/');
|
||||
$base_path = rtrim($base_path, '\\');
|
||||
$full_path = $base_path.$separator.$lease_id;
|
||||
|
||||
$cmd = $lease->getInterface('command');
|
||||
|
||||
if ($lease->getAttribute('platform') !== 'windows') {
|
||||
if ($v_platform !== 'windows') {
|
||||
$cmd->execx('mkdir %s', $full_path);
|
||||
} else {
|
||||
// Windows is terrible. The mkdir command doesn't even support putting
|
||||
|
|
|
@ -35,6 +35,10 @@ final class DrydockResource extends DrydockDAO
|
|||
return idx($this->attributes, $key, $default);
|
||||
}
|
||||
|
||||
public function getAttributesForTypeSpec(array $attribute_names) {
|
||||
return array_select_keys($this->attributes, $attribute_names);
|
||||
}
|
||||
|
||||
public function setAttribute($key, $value) {
|
||||
$this->attributes[$key] = $value;
|
||||
return $this;
|
||||
|
|
Loading…
Reference in a new issue