Page MenuHomePhabricator

D10469.id33748.diff
No OneTemporary

D10469.id33748.diff

diff --git a/src/__phutil_library_map__.php b/src/__phutil_library_map__.php
--- a/src/__phutil_library_map__.php
+++ b/src/__phutil_library_map__.php
@@ -841,6 +841,7 @@
'DrydockManagementCreateResourceWorkflow' => 'applications/drydock/management/DrydockManagementCreateResourceWorkflow.php',
'DrydockManagementLeaseWorkflow' => 'applications/drydock/management/DrydockManagementLeaseWorkflow.php',
'DrydockManagementReleaseWorkflow' => 'applications/drydock/management/DrydockManagementReleaseWorkflow.php',
+ 'DrydockManagementRunCommandWorkflow' => 'applications/drydock/management/DrydockManagementRunCommandWorkflow.php',
'DrydockManagementWorkflow' => 'applications/drydock/management/DrydockManagementWorkflow.php',
'DrydockPreallocatedHostBlueprintImplementation' => 'applications/drydock/blueprint/DrydockPreallocatedHostBlueprintImplementation.php',
'DrydockQuery' => 'applications/drydock/query/DrydockQuery.php',
@@ -4528,6 +4529,7 @@
'DrydockManagementCreateResourceWorkflow' => 'DrydockManagementWorkflow',
'DrydockManagementLeaseWorkflow' => 'DrydockManagementWorkflow',
'DrydockManagementReleaseWorkflow' => 'DrydockManagementWorkflow',
+ 'DrydockManagementRunCommandWorkflow' => 'DrydockManagementWorkflow',
'DrydockManagementWorkflow' => 'PhabricatorManagementWorkflow',
'DrydockPreallocatedHostBlueprintImplementation' => 'DrydockBlueprintImplementation',
'DrydockQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
diff --git a/src/applications/drydock/management/DrydockManagementRunCommandWorkflow.php b/src/applications/drydock/management/DrydockManagementRunCommandWorkflow.php
new file mode 100644
--- /dev/null
+++ b/src/applications/drydock/management/DrydockManagementRunCommandWorkflow.php
@@ -0,0 +1,55 @@
+<?php
+
+final class DrydockManagementRunCommandWorkflow
+ extends DrydockManagementWorkflow {
+
+ protected function didConstruct() {
+ $this
+ ->setName('run-command')
+ ->setSynopsis(pht('Run a command on a remote host.'))
+ ->setArguments(
+ array(
+ array(
+ 'name' => 'id',
+ 'param' => 'lease',
+ 'help' => 'The Drydock lease ID.',
+ ),
+ array(
+ 'name' => 'command',
+ 'param' => 'command',
+ 'help' => 'The command to run on the remote host.',
+ ),
+ ));
+ }
+
+ public function execute(PhutilArgumentParser $args) {
+ $console = PhutilConsole::getConsole();
+
+ $id = $args->getArg('id');
+ if (!$id) {
+ throw new PhutilArgumentUsageException(pht(
+ 'Specify a lease ID to run the command on.'));
+ }
+
+ $viewer = $this->getViewer();
+
+ $lease = id(new DrydockLeaseQuery())
+ ->setViewer($viewer)
+ ->withIDs(array($id))
+ ->executeOne();
+ if (!$lease) {
+ $console->writeErr("Lease %d does not exist!\n", $id);
+ return 1;
+ } else {
+ $interface = $lease->getInterface('command');
+ $future = $interface->getExecFuture('%C', $args->getArg('command'));
+
+ list($err, $stdout, $stderr) = $future->resolve();
+ $console->writeOut('%s', $stdout);
+ $console->writeErr('%s', $stderr);
+ return $err;
+ }
+
+ }
+
+}

File Metadata

Mime Type
text/plain
Expires
Fri, Mar 14, 3:12 PM (2 w, 1 d ago)
Storage Engine
blob
Storage Format
Encrypted (AES-256-CBC)
Storage Handle
7589280
Default Alt Text
D10469.id33748.diff (3 KB)

Event Timeline