Correct Aphlict websocket URI construction after PHP8 compatibility changes
[phabricator.git] / src / applications / drydock / management / DrydockManagementCommandWorkflow.php
blob104755388320ad28e3ddf9db252ceb61138c56dd
1 <?php
3 final class DrydockManagementCommandWorkflow
4 extends DrydockManagementWorkflow {
6 protected function didConstruct() {
7 $this
8 ->setName('command')
9 ->setSynopsis(pht('Run a command on a leased resource.'))
10 ->setArguments(
11 array(
12 array(
13 'name' => 'lease',
14 'param' => 'id',
15 'help' => pht('Lease ID.'),
17 array(
18 'name' => 'argv',
19 'wildcard' => true,
20 'help' => pht('Command to execute.'),
22 ));
25 public function execute(PhutilArgumentParser $args) {
26 $lease_id = $args->getArg('lease');
27 if (!$lease_id) {
28 throw new PhutilArgumentUsageException(
29 pht(
30 'Use "--lease" to specify a lease.'));
33 $argv = $args->getArg('argv');
34 if (!$argv) {
35 throw new PhutilArgumentUsageException(
36 pht(
37 'Specify a command to run.'));
40 $lease = id(new DrydockLeaseQuery())
41 ->setViewer($this->getViewer())
42 ->withIDs(array($lease_id))
43 ->executeOne();
44 if (!$lease) {
45 throw new Exception(
46 pht(
47 'Unable to load lease with ID "%s"!',
48 $lease_id));
51 // TODO: Check lease state, etc.
53 $interface = $lease->getInterface(DrydockCommandInterface::INTERFACE_TYPE);
55 list($stdout, $stderr) = call_user_func_array(
56 array($interface, 'execx'),
57 array('%Ls', $argv));
59 fwrite(STDOUT, $stdout);
60 fwrite(STDERR, $stderr);
62 return 0;