diff options
author | Lars Wirzenius <liw@liw.fi> | 2020-04-09 09:33:35 +0300 |
---|---|---|
committer | Lars Wirzenius <liw@liw.fi> | 2020-04-09 09:33:35 +0300 |
commit | d5ab6165cdf0d9347adffb7d37b958cf79487e37 (patch) | |
tree | c6ad0a8bf4b800d57e7381d50cc8d43d0b8d8300 /contractor | |
parent | 86b6c3eda54a7b697772db5bd568bd7cb038a596 (diff) | |
download | ick-contractor-d5ab6165cdf0d9347adffb7d37b958cf79487e37.tar.gz |
Change: stop worker
Diffstat (limited to 'contractor')
-rwxr-xr-x | contractor | 116 |
1 files changed, 68 insertions, 48 deletions
@@ -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() |