summaryrefslogtreecommitdiff
path: root/contractor
diff options
context:
space:
mode:
authorLars Wirzenius <liw@liw.fi>2020-04-09 09:33:35 +0300
committerLars Wirzenius <liw@liw.fi>2020-04-09 09:33:35 +0300
commitd5ab6165cdf0d9347adffb7d37b958cf79487e37 (patch)
treec6ad0a8bf4b800d57e7381d50cc8d43d0b8d8300 /contractor
parent86b6c3eda54a7b697772db5bd568bd7cb038a596 (diff)
downloadick-contractor-d5ab6165cdf0d9347adffb7d37b958cf79487e37.tar.gz
Change: stop worker
Diffstat (limited to 'contractor')
-rwxr-xr-xcontractor116
1 files changed, 68 insertions, 48 deletions
diff --git a/contractor b/contractor
index d393ce9..145c7f4 100755
--- a/contractor
+++ b/contractor
@@ -15,10 +15,13 @@ import yaml
-def ssh(target, argv):
+def ssh(target, argv, quiet=False):
argv = ['ssh', '--', target] + [shlex.quote(arg) for arg in argv]
logging.info('SSH: {!r}'.format(argv))
- return subprocess.call(argv)
+ stdout = None
+ if quiet:
+ stdout = PIPE
+ return subprocess.call(argv, stderr=STDOUT, stdout=stdout)
class ContractorApplication(cliapp.Application):
@@ -47,62 +50,69 @@ class ContractorApplication(cliapp.Application):
def cmd_build(self, args):
self.verbose('Building using spec at {}'.format(args[0]))
bs = self.load_build_spec(args[0])
-
- self.cmd_worker_stop([])
-
- image = os.path.expanduser(build['worker-image'])
- self.cmd_worker_image([image])
- self.cmd_worker_start([])
-
- pkgs = build.get('install', [])
- if pkgs:
- self.verbose('Installing packages: {}'.format(', '.join(pkgs)))
- self.cmd_setup(
- ['env', 'DEBIAN_INTERFACE=noninteractive',
- 'apt-get', 'install', '-y'] + pkgs)
-
- workspace = os.path.expanduser(build['workspace'])
- if workspace and os.path.isdir(workspace):
- self.verbose('Uploading saved workspace from {}'.format(workspace))
- self.cmd_put_workspace([workspace])
-
- source = os.path.expanduser(build['source'])
- self.verbose('Uploading source code from {}'.format(source))
- self.on_worker('worker', ['find', '/workspace/src', '-delete'])
- self.cmd_sources([source])
-
- self.verbose('Running build commands')
- o = self.on_worker(
- 'worker', ['sh', '-euxc', build['build']],
- stdout=None, stderr=None,
- remote_cwd='/workspace/src')
- if o is None:
- self.error('Could not build on worker')
- sys.exit(1)
- self.output.write(o.decode('utf-8'))
+ m = self.manager()
- if workspace:
- self.verbose('Saving workspace to {}'.format(workspace))
- if os.path.exists(workspace):
- shutil.rmtree(workspace)
- os.makedirs(workspace)
- self.cmd_get_workspace([workspace])
-
- self.verbose('Build finished OK')
+ self.verbose('stopping worker')
+ m.stop_worker()
+
+ # self.cmd_worker_stop([])
+
+ # image = os.path.expanduser(build['worker-image'])
+ # self.cmd_worker_image([image])
+ # self.cmd_worker_start([])
+
+ # pkgs = build.get('install', [])
+ # if pkgs:
+ # self.verbose('Installing packages: {}'.format(', '.join(pkgs)))
+ # self.cmd_setup(
+ # ['env', 'DEBIAN_INTERFACE=noninteractive',
+ # 'apt-get', 'install', '-y'] + pkgs)
+
+ # workspace = os.path.expanduser(build['workspace'])
+ # if workspace and os.path.isdir(workspace):
+ # self.verbose('Uploading saved workspace from {}'.format(workspace))
+ # self.cmd_put_workspace([workspace])
+
+ # source = os.path.expanduser(build['source'])
+ # self.verbose('Uploading source code from {}'.format(source))
+ # self.on_worker('worker', ['find', '/workspace/src', '-delete'])
+ # self.cmd_sources([source])
+
+ # self.verbose('Running build commands')
+ # o = self.on_worker(
+ # 'worker', ['sh', '-euxc', build['build']],
+ # stdout=None, stderr=None,
+ # remote_cwd='/workspace/src')
+ # if o is None:
+ # self.error('Could not build on worker')
+ # sys.exit(1)
+ # self.output.write(o.decode('utf-8'))
+
+ # if workspace:
+ # self.verbose('Saving workspace to {}'.format(workspace))
+ # if os.path.exists(workspace):
+ # shutil.rmtree(workspace)
+ # os.makedirs(workspace)
+ # self.cmd_get_workspace([workspace])
+
+ # self.verbose('Build finished OK')
def load_build_spec(self, filename):
with open(filename) as f:
return BuildSpec(f.read())
def cmd_manager_status(self, args):
- user = self.settings['manager-user']
- addr = self.settings['manager-address']
- m = Manager(user, addr)
+ m = self.manager()
if m.ssh(['true']) != 0:
self.error('Manager VM is NOT available')
sys.exit(1)
self.verbose('Manager VM is available')
+ def manager(self):
+ user = self.settings['manager-user']
+ addr = self.settings['manager-address']
+ return Manager(user, addr)
+
############################
def cmd_on_manager(self, args):
@@ -343,8 +353,18 @@ class Manager:
def __init__(self, user, addr):
self._target = '{}@{}'.format(user, addr)
- def ssh(self, argv):
- return ssh(self._target, argv)
+ def ssh(self, argv, quiet=False):
+ return ssh(self._target, argv, quiet=quiet)
+
+ def virsh(self, argv):
+ return ssh(
+ self._target,
+ ['virsh', '-c', 'qemu:///system'] + argv,
+ quiet=True)
+
+ def stop_worker(self):
+ self.virsh(['destroy', 'worker'])
+ self.virsh(['undefine', 'worker'])
ContractorApplication().run()