예제 #1
0
def get_modulefile_path(package_name):
    """Generate the modulefile path from module name"""

    s = Shelf()

    if package_name not in s.installed_packages:
        raise Exception('Package {} not installed'.format(package_name))

    package = s.find_package(package_name)

    name = package.name
    version = package.version

    return os.path.join(settings.module_dir, name, version)
예제 #2
0
def install_package(package_name):
    """Given a package name, determine package dependencies, install if
    necessary and then install the package."""

    print 'Installing {0}'.format(package_name)

    # Generate build environment

    build_env = BuildEnvironment()

    current_shelf = Shelf()

    setup_own_gcc(current_shelf, build_env)

    package_blueprint = load_blueprint_by_name(package_name)
    dependencies = package_blueprint.direct_dependencies
    missing_dependencies = set(dependencies) - set(
        current_shelf.installed_packages)

    for dependency in missing_dependencies:
        install_package(dependency)

    for dependency in dependencies:
        package = current_shelf.find_package(dependency)
        package.update_env_manager(build_env)

    yaml_builder = builder_by_name_yaml(package_name, load_dependencies=False)

    try:
        extra_CPPFLAGS = yaml_builder.env_manager.extra_CPPFLAGS
    except AttributeError:
        extra_CPPFLAGS = ''

    build_env.extra_CPPFLAGS = extra_CPPFLAGS

    yaml_builder.env_manager = build_env
    yaml_builder.env_manager.update_CPPFLAGS()
    yaml_builder.env_manager.update_LDFLAGS()

    yaml_builder.process_all_stages()

    yaml_builder.yaml_rep['environment_flags'] = build_env.my_env

    yaml_rep = yaml.dump(yaml_builder.yaml_rep, default_flow_style=False)

    receipt_path = os.path.join(yaml_builder.shelf_dir, settings.receipt_file)

    with open(receipt_path, 'w') as f:
        f.write(yaml_rep)
예제 #3
0
def generate_modulefile_text(package_name):
    """Given an installed package, generate the modulefile text necessary to
    activate that package."""

    s = Shelf()

    if package_name not in s.installed_packages:
        raise Exception('Package {} not installed'.format(package_name))

    tloader = FileSystemLoader(settings.template_dir)
    tenv = Environment(loader=tloader)

    t = tenv.get_template(settings.module_template)

    package = s.find_package(package_name)

    return t.render(package=package)
예제 #4
0
파일: template.py 프로젝트: mrmh2/clustack
def load_templated_yaml_rep(name, all_packages=None):

    name = name.lower()

    tloader = FileSystemLoader(settings.yaml_dir)
    tenv = Environment(loader=tloader)

    blueprint_name = name + settings.yaml_ext

    t = tenv.get_template(blueprint_name)

    s = Shelf()
    if all_packages is None:
        all_packages = s.installed_packages

    loaded_packages = {name: s.find_package(name) for name in all_packages}
    t_rendered = t.render(packages=loaded_packages)

    return yaml.load(t_rendered)
예제 #5
0
파일: stack.py 프로젝트: mrmh2/clustack
class Stack(object):
    def __init__(self, shelf=None):
        self.env_manager = EnvManager()
        self.included_components = {}

        if shelf == None:
            self.shelf = Shelf()

    def add_by_name(self, name, add_dependencies=False):
        """Add a component from a (string) name."""

        if name in self.included_components:
            return

        package = self.shelf.find_package(name)
        self.included_components[name] = package
        package.update_stack(self)

        if add_dependencies:
            for dependency in package.direct_dependencies:
                self.add_by_name(dependency)

    def add_component(self, component):

        if component.name in self.included_components:
            return

        self.included_components[component.name] = component

        component.update_stack(self)

        for dependency in component.direct_dependencies:
            c_dep = load_component_by_name(dependency)
            self.add_component(c_dep)

    def shell(self):
        self.env_manager.shell()

    def __repr__(self):
        return "<Stack: {}>".format(','.join(self.included_components))