def install_biolinux(target=None, flavor=None): """Main entry point for installing BioLinux on a remote server. `flavor` allows customization of CloudBioLinux behavior. It can either be a flavor name that maps to a corresponding directory in contrib/flavor or the path to a custom directory. This can contain: - alternative package lists (main.yaml, packages.yaml, custom.yaml) - custom python code (nameflavor.py) that hooks into the build machinery `target` allows running only particular parts of the build process. Valid choices are: - packages Install distro packages - custom Install custom packages - chef_recipes Provision chef recipes - libraries Install programming language libraries - post_install Setup CloudMan, FreeNX and other system services - cleanup Remove downloaded files and prepare images for AMI builds """ _setup_logging(env) time_start = _print_time_stats("Config", "start") _check_fabric_version() if env.ssh_config_path and os.path.isfile(os.path.expanduser(env.ssh_config_path)): env.use_ssh_config = True _configure_fabric_environment(env, flavor, ignore_distcheck=(target is not None and target in ["libraries", "custom"])) env.logger.debug("Target is '%s'" % target) env.logger.debug("Flavor is '%s'" % flavor) _perform_install(target, flavor) _print_time_stats("Config", "end", time_start) if hasattr(env, "keep_isolated") and env.keep_isolated: _print_shell_exports(env)
def _setup_cloudbiolinux(options): def fabricrc_loader(env): _setup_cloudbiolinux_fabric_properties(env, options) flavor = get_main_options_string(options, "cloudbiolinux_flavor", None) _setup_logging(env) _configure_fabric_environment(env, flavor, fabricrc_loader=fabricrc_loader)
def install_biolinux(target=None, flavor=None): """Main entry point for installing BioLinux on a remote server. `flavor` allows customization of CloudBioLinux behavior. It can either be a flavor name that maps to a corresponding directory in contrib/flavor or the path to a custom directory. This can contain: - alternative package lists (main.yaml, packages.yaml, custom.yaml) - custom python code (nameflavor.py) that hooks into the build machinery `target` allows running only particular parts of the build process. Valid choices are: - packages Install distro packages - custom Install custom packages - libraries Install programming language libraries - post_install Setup CloudMan, FreeNX and other system services - cleanup Remove downloaded files and prepare images for AMI builds """ _setup_logging(env) time_start = _print_time_stats("Config", "start") _check_fabric_version() _configure_fabric_environment(env, flavor) env.logger.debug("Target is '%s'" % target) _perform_install(target, flavor) _print_time_stats("Config", "end", time_start)
def install_libraries(language): """High level target to install libraries for a specific language. """ _setup_logging(env) _check_fabric_version() _configure_fabric_environment(env, ignore_distcheck=True) _do_library_installs(["%s-libs" % language])
def install_libraries(language): """High level target to install libraries for a specific language. """ _setup_logging(env) _check_fabric_version() _configure_fabric_environment(env, ignore_distcheck=True) _do_library_installs(["%s-libs" % language])
def install_biolinux(target=None, flavor=None): """Main entry point for installing BioLinux on a remote server. `flavor` allows customization of CloudBioLinux behavior. It can either be a flavor name that maps to a corresponding directory in contrib/flavor or the path to a custom directory. This can contain: - alternative package lists (main.yaml, packages.yaml, custom.yaml) - custom python code (nameflavor.py) that hooks into the build machinery `target` allows running only particular parts of the build process. Valid choices are: - packages Install distro packages - custom Install custom packages - chef_recipes Provision chef recipes - libraries Install programming language libraries - post_install Setup CloudMan, FreeNX and other system services - cleanup Remove downloaded files and prepare images for AMI builds """ _setup_logging(env) time_start = _print_time_stats("Config", "start") _check_fabric_version() _configure_fabric_environment( env, flavor, ignore_distcheck=(target is not None and target in ["libraries", "custom"])) env.logger.debug("Target is '%s'" % target) _perform_install(target, flavor) _print_time_stats("Config", "end", time_start)
def _setup_cloudbiolinux(options): def fabricrc_loader(env): _setup_cloudbiolinux_fabric_properties(env, options) flavor = get_main_options_string(options, "flavor", DEFAULT_CLOUDBIOLINUX_FLAVOR) _configure_fabric_environment(env, flavor, fabricrc_loader=fabricrc_loader) _setup_image_user_data(env, options)
def _setup_cloudbiolinux(options): def fabricrc_loader(env): _setup_cloudbiolinux_fabric_properties(env, options) flavor = get_main_options_string(options, "flavor", DEFAULT_CLOUDBIOLINUX_FLAVOR) _configure_fabric_environment(env, flavor, fabricrc_loader=fabricrc_loader) _setup_image_user_data(env, options)
def install_conda(p=None, flavor=None, automated=False): if not automated: _setup_logging(env) _configure_fabric_environment(env, flavor, ignore_distcheck=True) if p is not None: conda.install_packages(env, packages=[p]) else: pkg_install = _read_main_config()[0] conda.install_packages(env, to_install=pkg_install)
def install_conda(p=None, flavor=None, automated=False): if not automated: _setup_logging(env) _configure_fabric_environment(env, flavor, ignore_distcheck=True) if p is not None: conda.install_packages(env, packages=[p]) else: pkg_install = _read_main_config()[0] conda.install_packages(env, to_install=pkg_install)
def _setup_cloudbiolinux(options): def fabricrc_loader(env): _setup_cloudbiolinux_fabric_properties(env, options) flavor = get_main_options_string(options, "flavor", DEFAULT_CLOUDBIOLINUX_FLAVOR) need_distcheck = options.get("fabricrc_overrides", {}).get("use_sudo") _configure_fabric_environment(env, flavor, fabricrc_loader=fabricrc_loader, ignore_distcheck=not need_distcheck) _setup_image_user_data(env, options)
def install_brew(p=None, flavor=None): """Top level access to homebrew/linuxbrew packages. p is a package name to install, or all configured packages if not specified. """ _setup_logging(env) _configure_fabric_environment(env, flavor, ignore_distcheck=True) system.install_homebrew(env) if p is not None: brew.install_packages(env, packages=[p]) else: pkg_install = _read_main_config()[0] brew.install_packages(env, to_install=pkg_install)
def install_custom(p, automated=False, pkg_to_group=None, flavor=None): """ Install a single custom program or package by name. This method fetches program name from ``config/custom.yaml`` and delegates to a method in ``custom/*name*.py`` to proceed with the installation. Alternatively, if a program install method is defined in the appropriate package, it will be called directly (see param ``p``). Usage: fab [-i key] [-u user] -H host install_custom:program_name :type p: string :param p: A name of the custom program to install. This has to be either a name that is listed in ``custom.yaml`` as a subordinate to a group name or a program name whose install method is defined in either ``cloudbio`` or ``custom`` packages (e.g., ``cloudbio/custom/cloudman.py -> install_cloudman``). :type automated: bool :param automated: If set to True, the environment is not loaded and reading of the ``custom.yaml`` is skipped. """ _setup_logging(env) p = p.lower() # All packages listed in custom.yaml are in lower case time_start = _print_time_stats("Custom install for '{0}'".format(p), "start") if not automated: _configure_fabric_environment(env, flavor, ignore_distcheck=True) pkg_config = get_config_file(env, "custom.yaml").base packages, pkg_to_group = _yaml_to_packages(pkg_config, None) try: env.logger.debug("Import %s" % p) # Allow direct calling of a program install method, even if the program # is not listed in the custom list (ie, not contained as a key value in # pkg_to_group). For an example, see 'install_cloudman' or use p=cloudman. mod_name = pkg_to_group[p] if p in pkg_to_group else p mod = __import__("cloudbio.custom.%s" % mod_name, fromlist=["cloudbio", "custom"]) except ImportError: raise ImportError("Need to write a %s module in custom." % pkg_to_group[p]) replace_chars = ["-"] try: for to_replace in replace_chars: p = p.replace(to_replace, "_") fn = getattr(mod, "install_%s" % p) except AttributeError: raise ImportError("Need to write a install_%s function in custom.%s" % (p, pkg_to_group[p])) fn(env) _print_time_stats("Custom install for '%s'" % p, "end", time_start)
def install_custom(p, automated=False, pkg_to_group=None, flavor=None): """ Install a single custom program or package by name. This method fetches program name from ``config/custom.yaml`` and delegates to a method in ``custom/*name*.py`` to proceed with the installation. Alternatively, if a program install method is defined in the appropriate package, it will be called directly (see param ``p``). Usage: fab [-i key] [-u user] -H host install_custom:program_name :type p: string :param p: A name of the custom program to install. This has to be either a name that is listed in ``custom.yaml`` as a subordinate to a group name or a program name whose install method is defined in either ``cloudbio`` or ``custom`` packages (e.g., ``cloudbio/custom/cloudman.py -> install_cloudman``). :type automated: bool :param automated: If set to True, the environment is not loaded and reading of the ``custom.yaml`` is skipped. """ _setup_logging(env) p = p.lower() # All packages listed in custom.yaml are in lower case time_start = _print_time_stats("Custom install for '{0}'".format(p), "start") if not automated: _configure_fabric_environment(env, flavor) pkg_config = get_config_file(env, "custom.yaml").base packages, pkg_to_group = _yaml_to_packages(pkg_config, None) try: env.logger.debug("Import %s" % p) # Allow direct calling of a program install method, even if the program # is not listed in the custom list (ie, not contained as a key value in # pkg_to_group). For an example, see 'install_cloudman' or use p=cloudman. mod_name = pkg_to_group[p] if p in pkg_to_group else p mod = __import__("cloudbio.custom.%s" % mod_name, fromlist=["cloudbio", "custom"]) except ImportError: raise ImportError("Need to write a %s module in custom." % pkg_to_group[p]) replace_chars = ["-"] try: for to_replace in replace_chars: p = p.replace(to_replace, "_") fn = getattr(mod, "install_%s" % p) except AttributeError: raise ImportError("Need to write a install_%s function in custom.%s" % (p, pkg_to_group[p])) fn(env) _print_time_stats("Custom install for '%s'" % p, "end", time_start)
def install_brew(p=None, version=None, flavor=None, automated=False): """Top level access to homebrew/linuxbrew packages. p is a package name to install, or all configured packages if not specified. """ if not automated: _setup_logging(env) _configure_fabric_environment(env, flavor, ignore_distcheck=True) if p is not None: if version: p = "%s==%s" % (p, version) brew.install_packages(env, packages=[p]) else: pkg_install = _read_main_config()[0] brew.install_packages(env, to_install=pkg_install)
def install_brew(p=None, version=None, flavor=None, automated=False): """Top level access to homebrew/linuxbrew packages. p is a package name to install, or all configured packages if not specified. """ if not automated: _setup_logging(env) _configure_fabric_environment(env, flavor, ignore_distcheck=True) if p is not None: if version: p = "%s==%s" % (p, version) brew.install_packages(env, packages=[p]) else: pkg_install = _read_main_config()[0] brew.install_packages(env, to_install=pkg_install)
def install_puppet_class(classes, automated=False, flavor=None): """Install one or more puppet classes by name. Usage: fab [-i key] [-u user] -H host install_puppet_class:class :type classes: string or list :param classes: TODO :type automated: bool :param automated: If set to True, the environment is not loaded. """ _setup_logging(env) if not automated: _configure_fabric_environment(env, flavor) time_start = _print_time_stats("Puppet provision for class(es) '{0}'".format(classes), "start") classes = classes if isinstance(classes, list) else [classes] _puppet_provision(env, classes) _print_time_stats("Puppet provision for classes(s) '%s'" % classes, "end", time_start)
def install_biolinux(target=None, flavor=None): """Main entry point for installing BioLinux on a remote server. `flavor` allows customization of CloudBioLinux behavior. It can either be a flavor name that maps to a corresponding directory in contrib/flavor or the path to a custom directory. This can contain: - alternative package lists (main.yaml, packages.yaml, custom.yaml) - custom python code (nameflavor.py) that hooks into the build machinery `target` allows running only particular parts of the build process. Valid choices are: - packages Install distro packages - custom Install custom packages - libraries Install programming language libraries - post_install Setup CloudMan, FreeNX and other system services - cleanup Remove downloaded files and prepare images for AMI builds """ _setup_logging(env) time_start = _print_time_stats("Config", "start") _check_fabric_version() _configure_fabric_environment(env, flavor) env.logger.debug("Target is '%s'" % target) pkg_install, lib_install, custom_ignore = _read_main_config() if target is None or target == "packages": _configure_and_install_native_packages(env, pkg_install) if env.nixpkgs: # ./doc/nixpkgs.md _setup_nix_sources() _nix_packages(pkg_install) _update_biolinux_log(env, target, flavor) if target is None or target == "custom": _custom_installs(pkg_install, custom_ignore) if target is None or target == "libraries": _do_library_installs(lib_install) if target is None or target == "post_install": env.edition.post_install(pkg_install=pkg_install) env.flavor.post_install() if target is None or target == "cleanup": _cleanup_space(env) if env.has_key("is_ec2_image") and env.is_ec2_image.upper() in ["TRUE", "YES"]: _cleanup_ec2(env) _print_time_stats("Config", "end", time_start)
def install_puppet_class(classes, automated=False, flavor=None): """Install one or more puppet classes by name. Usage: fab [-i key] [-u user] -H host install_puppet_class:class :type classes: string or list :param classes: TODO :type automated: bool :param automated: If set to True, the environment is not loaded. """ _setup_logging(env) if not automated: _configure_fabric_environment(env, flavor) time_start = _print_time_stats("Puppet provision for class(es) '{0}'".format(classes), "start") classes = classes if isinstance(classes, list) else [classes] _puppet_provision(env, classes) _print_time_stats("Puppet provision for classes(s) '%s'" % classes, "end", time_start)
def install_chef_recipe(recipe, automated=False, flavor=None): """Install one or more chef recipes by name. Usage: fab [-i key] [-u user] -H host install_chef_recipe:recipe :type recipe: string or list :param recipe: TODO :type automated: bool :param automated: If set to True, the environment is not loaded. """ _setup_logging(env) if not automated: _configure_fabric_environment(env, flavor) time_start = _print_time_stats("Chef provision for recipe(s) '{0}'".format(recipe), "start") _configure_chef(env, chef) recipes = recipe if isinstance(recipe, list) else [recipe] for recipe_to_add in recipes: chef.add_recipe(recipe_to_add) _chef_provision(env, recipes) _print_time_stats("Chef provision for recipe(s) '%s'" % recipe, "end", time_start)
def install_custom(p, automated=False, pkg_to_group=None, flavor=None): """ Install a single custom program or package by name. This method fetches program name from ``config/custom.yaml`` and delegates to a method in ``custom/*name*.py`` to proceed with the installation. Alternatively, if a program install method is defined in the appropriate package, it will be called directly (see param ``p``). Usage: fab [-i key] [-u user] -H host install_custom:program_name :type p: string :param p: A name of the custom program to install. This has to be either a name that is listed in ``custom.yaml`` as a subordinate to a group name or a program name whose install method is defined in either ``cloudbio`` or ``custom`` packages (e.g., ``cloudbio/custom/cloudman.py -> install_cloudman``). :type automated: bool :param automated: If set to True, the environment is not loaded and reading of the ``custom.yaml`` is skipped. """ p = p.lower() # All packages listed in custom.yaml are in lower case if not automated: _setup_logging(env) _configure_fabric_environment(env, flavor, ignore_distcheck=True) pkg_config = get_config_file(env, "custom.yaml").base packages, pkg_to_group = _yaml_to_packages(pkg_config, None) time_start = _print_time_stats("Custom install for '{0}'".format(p), "start") fn = _custom_install_function(env, p, pkg_to_group) fn(env) ## TODO: Replace the previous 4 lines with the following one, barring ## objections. Slightly different behavior because pkg_to_group will be ## loaded regardless of automated if it is None, but IMO this shouldn't ## matter because the following steps look like they would fail if ## automated is True and pkg_to_group is None. # _install_custom(p, pkg_to_group) _print_time_stats("Custom install for '%s'" % p, "end", time_start)
def install_chef_recipe(recipe, automated=False, flavor=None): """Install one or more chef recipes by name. Usage: fab [-i key] [-u user] -H host install_chef_recipe:recipe :type recipe: string or list :param recipe: TODO :type automated: bool :param automated: If set to True, the environment is not loaded. """ _setup_logging(env) if not automated: _configure_fabric_environment(env, flavor) time_start = _print_time_stats("Chef provision for recipe(s) '{0}'".format(recipe), "start") _configure_chef(env, chef) recipes = recipe if isinstance(recipe, list) else [recipe] for recipe_to_add in recipes: chef.add_recipe(recipe_to_add) _chef_provision(env, recipes) _print_time_stats("Chef provision for recipe(s) '%s'" % recipe, "end", time_start)
def install_custom(p, automated=False, pkg_to_group=None, flavor=None): """ Install a single custom program or package by name. This method fetches program name from ``config/custom.yaml`` and delegates to a method in ``custom/*name*.py`` to proceed with the installation. Alternatively, if a program install method is defined in the appropriate package, it will be called directly (see param ``p``). Usage: fab [-i key] [-u user] -H host install_custom:program_name :type p: string :param p: A name of the custom program to install. This has to be either a name that is listed in ``custom.yaml`` as a subordinate to a group name or a program name whose install method is defined in either ``cloudbio`` or ``custom`` packages (e.g., ``cloudbio/custom/cloudman.py -> install_cloudman``). :type automated: bool :param automated: If set to True, the environment is not loaded and reading of the ``custom.yaml`` is skipped. """ p = p.lower() # All packages listed in custom.yaml are in lower case if not automated: _setup_logging(env) _configure_fabric_environment(env, flavor, ignore_distcheck=True) pkg_config = get_config_file(env, "custom.yaml").base packages, pkg_to_group = _yaml_to_packages(pkg_config, None) time_start = _print_time_stats("Custom install for '{0}'".format(p), "start") fn = _custom_install_function(env, p, pkg_to_group) fn(env) ## TODO: Replace the previous 4 lines with the following one, barring ## objections. Slightly different behavior because pkg_to_group will be ## loaded regardless of automated if it is None, but IMO this shouldn't ## matter because the following steps look like they would fail if ## automated is True and pkg_to_group is None. # _install_custom(p, pkg_to_group) _print_time_stats("Custom install for '%s'" % p, "end", time_start)
def setup_environment(): """Setup environment with required data file locations. """ _setup_logging(env) _add_defaults() _configure_fabric_environment(env, ignore_distcheck=True)
def setup_environment(): """Setup environment with required data file locations. """ _setup_logging(env) _add_defaults() _configure_fabric_environment(env, ignore_distcheck=True)