Пример #1
0
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
Пример #2
0
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
Пример #3
0
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)