def load_manifest(filename=None): """Load the project manifest, merge in the default manifest, and return the result.""" if filename is None: filename = manifest_name() if not manifest_exists(filename): error.raise_error('Project manifest ({0}) not found.', filename) with file(filename) as fin: try: manifest = yaml.load(fin) except yaml.error.YAMLError as e: if env.verbose: error.raise_error('Illegal YAML in manifest.\n' 'Message from parser: {!s}', e) else: error.raise_error('Illegal YAML in manifest.\n' 'Try --verbose for more information.') manifest['_filename'] = filename directory, _ = os.path.split(os.path.abspath(filename)) _, project = os.path.split(directory) manifest['_directory'] = directory packagedir = testmill.packagedir() filename = os.path.join(packagedir, 'defaults.yml') with file(filename) as fin: defaults = yaml.load(fin) merge(defaults, manifest) env.manifest = manifest return manifest
def create_script(taskname, commands): """Create the script to execute ``commands``.""" packagedir = testmill.packagedir() fname = os.path.join(packagedir, 'runtask.sh') with file(fname) as fin: script = fin.read() lines = [] tmpl = '{0}={1}; export {0}' for key,value in env.shell_env.items(): escaped = util.shell_escape(str(value)) lines.append(tmpl.format(key, escaped)) shell_vars = '\n'.join(lines) if env.args.continue_: tmpl = '{0}\n' else: tmpl = '{0}\ntest "$?" -ne "0" && exit 1\n' shell_commands = '\n'.join([tmpl.format(cmd) for cmd in commands]) script = script.format(shell_vars=shell_vars, shell_commands=shell_commands) return script
def preinit(): """Prepare the VM before any tasks are run.""" packagedir = testmill.packagedir() fname = os.path.join(packagedir, 'preinit.sh') with file(fname) as fin: script = fin.read() shutdown_urls = [] url_template = '{0}/deployment/app/{1}/vm/{2}/stop' app = env.application myself_last = sorted(app['vms'], key=lambda vm: vm['id'] != env.vm['id']) for vm in myself_last: url = url_template.format(env.api.url, app['id'], vm['id']) shutdown_urls.append(url) shutdown_urls = ' '.join(map(util.shell_escape, shutdown_urls)) keepalive = env.appdef.get('keepalive', 50) script = script.format(test_id=env.test_id, keepalive=keepalive, api_cookie=env.api._cookie, shutdown_urls=shutdown_urls) script_name = '{0}.preinit'.format(env.test_id) fab.put(io.StringIO(script), script_name) command = 'exec $SHELL {0}'.format(script_name) fab.run(command, shell=False, pty=True, quiet=not env.debug)