Path: blob/master/src/applications/drydock/management/DrydockManagementCommandWorkflow.php
12256 views
<?php12final class DrydockManagementCommandWorkflow3extends DrydockManagementWorkflow {45protected function didConstruct() {6$this7->setName('command')8->setSynopsis(pht('Run a command on a leased resource.'))9->setArguments(10array(11array(12'name' => 'lease',13'param' => 'id',14'help' => pht('Lease ID.'),15),16array(17'name' => 'argv',18'wildcard' => true,19'help' => pht('Command to execute.'),20),21));22}2324public function execute(PhutilArgumentParser $args) {25$lease_id = $args->getArg('lease');26if (!$lease_id) {27throw new PhutilArgumentUsageException(28pht(29'Use "--lease" to specify a lease.'));30}3132$argv = $args->getArg('argv');33if (!$argv) {34throw new PhutilArgumentUsageException(35pht(36'Specify a command to run.'));37}3839$lease = id(new DrydockLeaseQuery())40->setViewer($this->getViewer())41->withIDs(array($lease_id))42->executeOne();43if (!$lease) {44throw new Exception(45pht(46'Unable to load lease with ID "%s"!',47$lease_id));48}4950// TODO: Check lease state, etc.5152$interface = $lease->getInterface(DrydockCommandInterface::INTERFACE_TYPE);5354list($stdout, $stderr) = call_user_func_array(55array($interface, 'execx'),56array('%Ls', $argv));5758fwrite(STDOUT, $stdout);59fwrite(STDERR, $stderr);6061return 0;62}6364}656667