def build_package(version):
    """
    Build package out of a puppet module.
    """
    args, extra_args = parse_version_extra_args(version.extra_args)

    install_dir = tempfile.mkdtemp()
    pwd = getcwd()

    try:
        # install the module
        cmd = [
            'puppet', 'module', 'install', args.modulename,
            '--target-dir=%s' % install_dir,
            '--version=%s' % version
        ]
        subprocess.check_call(cmd)

        # build the package
        modulename = version.userdata['name']
        moduledir = join(install_dir, modulename)
        chdir(moduledir)

        create_package("puppet-%s" % modulename, modulename, str(version),
                       extra_args)

        for deb in glob.glob("*.deb"):
            shutil.move(join(moduledir, deb), "%s/" % pwd)
    finally:
        chdir(pwd)
        shutil.rmtree(install_dir)
def build_package(version):
    """
    Build package out of a puppet module.
    """
    args, extra_args = parse_version_extra_args(version.extra_args)
    
    install_dir = tempfile.mkdtemp()
    pwd = getcwd()

    try:
        # install the module
        cmd = ['puppet', 'module', 'install', args.modulename,
                '--target-dir=%s' % install_dir,
                '--version=%s' % version]
        subprocess.check_call(cmd)
        
        # build the package
        modulename = version.userdata['name']
        moduledir = join(install_dir, modulename)
        chdir(moduledir)

        create_package("puppet-%s" % modulename, modulename, str(version), extra_args)

        for deb in glob.glob("*.deb"):
            shutil.move(join(moduledir, deb), "%s/" % pwd)
    finally:
        chdir(pwd)
        shutil.rmtree(install_dir)
def get_version(version_args):
    args, _ = parse_version_extra_args(version_args)
    cmd = ['puppet', 'module', 'search', args.modulename, '--render-as=yaml']
    
    log.debug("Running command: %s" % " ".join(cmd))
    
    output = subprocess.check_output(cmd).split('\n')

    if 'otice: Searching' in output[0]:
        output = "\n".join(output[1:])
    else:
        output = "\n".join(output)

    version = None

    rubyyaml = RubyYaml(yaml)
    results = rubyyaml.load(output)
    log.debug(output)

    if results.get('result') != 'success':
        raise VersionError("No puppet module found with name %s, reason: %s" % (args.modulename, output.get('result')))

    try:
        result = (item for item in results.get('answers') if item.get('full_name') == args.modulename).next()
        if args.version is not None:
            versions = map(operator.itemgetter('version'), result['releases'])
            log.debug("Available version: %s" % versions)

            if args.version not in versions:
                raise VersionNotFound("Version %s not found in %s. Available versions: %s" % (args.version, result['full_name'], versions))
            else:
                version = Version(args.version, extra_args=version_args, userdata=result)

        else:
            version = Version(result['version'], extra_args=version_args, userdata=result)

        log.debug("Version is: %(version)s" % result)
    except StopIteration:
        raise VersionError("No puppet module found with name %s" % args.modulename)

    assert(version)
    return version