summaryrefslogtreecommitdiff
path: root/morphlib/plugins/distbuild_plugin.py
diff options
context:
space:
mode:
authorSam Thursfield <sam.thursfield@codethink.co.uk>2015-04-21 20:54:07 +0100
committerSam Thursfield <sam.thursfield@codethink.co.uk>2015-04-21 20:54:07 +0100
commit7477ddf869711df158e5828c300bfe93a427b0f6 (patch)
treebb7b43d2601d9c8166724f5832f8c15757a0fba8 /morphlib/plugins/distbuild_plugin.py
parent9fd7ef6fe83282139f7f636a955bcf069e8fb79c (diff)
parent208d1a46887b76daada82c4b9d79086b1ad871a4 (diff)
downloadmorph-7477ddf869711df158e5828c300bfe93a427b0f6.tar.gz
Merge branch 'review/lauren_perry/lauren/distbuild-status' into sam/distbuild-megamixsam/distbuild-megamix
Change-Id: I321bfd8422acbddfee2ab5a506294c2f531d4adb
Diffstat (limited to 'morphlib/plugins/distbuild_plugin.py')
-rw-r--r--morphlib/plugins/distbuild_plugin.py89
1 files changed, 89 insertions, 0 deletions
diff --git a/morphlib/plugins/distbuild_plugin.py b/morphlib/plugins/distbuild_plugin.py
index 09669988..69e815e9 100644
--- a/morphlib/plugins/distbuild_plugin.py
+++ b/morphlib/plugins/distbuild_plugin.py
@@ -40,6 +40,95 @@ class DistbuildOptionsPlugin(cliapp.Plugin):
pass
+class DistbuildCancel(cliapp.Plugin):
+
+ RECONNECT_INTERVAL = 30 # seconds
+ MAX_RETRIES = 1
+
+ def enable(self):
+ self.app.add_subcommand('distbuild-cancel', self.distbuild_cancel,
+ arg_synopsis='ID')
+
+ def disable(self):
+ pass
+
+ def distbuild_cancel(self, args):
+ '''Cancels a currently-running distbuild
+
+ Command line arguments:
+
+ `ID` of the running process that you wish to cancel
+ (this can be found via distbuild-list-jobs)
+
+ Example:
+
+ * morph distbuild-cancel InitiatorConnection-1
+
+ '''
+
+ if len(args) == 0:
+ raise cliapp.AppException(
+ 'This command requires a build-request ID to run.')
+
+ addr = self.app.settings['controller-initiator-address']
+ port = self.app.settings['controller-initiator-port']
+ icm = distbuild.InitiatorConnectionMachine(self.app, addr, port,
+ distbuild.InitiatorCancel,
+ [self.app] + args,
+ self.RECONNECT_INTERVAL,
+ self.MAX_RETRIES)
+ loop = distbuild.MainLoop()
+ loop.add_state_machine(icm)
+ loop.run()
+
+
+class DistbuildStatusPlugin(cliapp.Plugin):
+
+ RECONNECT_INTERVAL = 30 # seconds
+ MAX_RETRIES = 1
+
+ def enable(self):
+ self.app.add_subcommand('distbuild-get-status', self.distbuild_status,
+ arg_synopsis='ID')
+
+ def disable(self):
+ pass
+
+ def distbuild_status(self, args):
+ '''Displays build status of recent distbuild requests.
+
+ Lists last known build status for all distbuilds (e.g. Building,
+ Failed, Finished, Cancelled) on a given distbuild server as set in
+ /etc/morph.conf
+
+ Example:
+
+ morph distbuild-get-status InitiatorConnection-1
+
+ Example output:
+
+ Build request ID: InitiatorConnection-1
+ System build: systems/devel-system-x86_64-generic.morph
+ Build status: Building stage1-binutils-misc
+
+ '''
+
+ if len(args) == 0:
+ raise cliapp.AppException(
+ 'This command requires a build-request ID to run.')
+
+ addr = self.app.settings['controller-initiator-address']
+ port = self.app.settings['controller-initiator-port']
+ icm = distbuild.InitiatorConnectionMachine(self.app, addr, port,
+ distbuild.InitiatorStatus,
+ [self.app] + args,
+ self.RECONNECT_INTERVAL,
+ self.MAX_RETRIES)
+ loop = distbuild.MainLoop()
+ loop.add_state_machine(icm)
+ loop.run()
+
+
class DistbuildListJobsPlugin(cliapp.Plugin):
RECONNECT_INTERVAL = 30 # seconds