def test_install_package_by_path(tmp_path): # Create _create_simple_test_package("aaa") package_info = packaging.read_package_info("aaa") # Write MKP file mkp_path = tmp_path.joinpath("aaa.mkp") with mkp_path.open("wb") as mkp: packaging.create_mkp_file(package_info, mkp) # Remove files from local hierarchy packaging.remove_package(package_info) assert packaging._package_exists("aaa") is False # And now install the package from memory packaging.install_package_by_path(mkp_path) # Check result assert packaging._package_exists("aaa") is True package_info = packaging.read_package_info("aaa") assert package_info["version"] == "1.0" assert package_info["files"]["checks"] == ["aaa"] assert cmk.utils.paths.local_checks_dir.joinpath("aaa").exists()
def test_install_package(): # Create _create_simple_test_package("aaa") package_info = packaging.read_package_info("aaa") # Build MKP in memory mkp = BytesIO() packaging.create_mkp_file(package_info, mkp) mkp.seek(0) # Remove files from local hierarchy packaging.remove_package(package_info) assert packaging._package_exists("aaa") is False # And now install the package from memory packaging.install_package(mkp) # Check result assert packaging._package_exists("aaa") is True package_info = packaging.read_package_info("aaa") assert package_info["version"] == "1.0" assert package_info["files"]["checks"] == ["aaa"] assert cmk.utils.paths.local_checks_dir.joinpath("aaa").exists()
def package_list(args): if len(args) > 0: for name in args: show_package_contents(name) else: if logger.isEnabledFor(VERBOSE): table = [] for pacname in all_package_names(): package = read_package_info(pacname) table.append((pacname, package["title"], package["num_files"])) tty.print_table(["Name", "Title", "Files"], [tty.bold, "", ""], table) else: for pacname in all_package_names(): sys.stdout.write("%s\n" % pacname)
def _install_and_disable_package(mkp_file): packaging.install_by_path(mkp_file) assert packaging._package_exists("aaa") is True package_info = packaging.read_package_info("aaa") assert package_info is not None package_file_name = packaging.format_file_name( name="aaa", version=package_info["version"]) packaging.disable("aaa", package_info) assert packaging._package_exists("aaa") is False assert cmk.utils.paths.disabled_packages_dir.joinpath( package_file_name).exists() assert not cmk.utils.paths.local_checks_dir.joinpath("aaa").exists() return package_file_name
def show_package(name, show_info=False): # type: (PackageName, bool) -> None try: if name.endswith(_pac_ext): tar = tarfile.open(name, "r:gz") info = tar.extractfile("info") if info is None: raise PackageException("Failed to extract \"info\"") package = parse_package_info(six.ensure_str(info.read())) else: this_package = read_package_info(name) if not this_package: raise PackageException("No such package %s." % name) package = this_package if show_info: sys.stdout.write("Package file: %s%s\n" % (package_dir(), name)) except PackageException: raise except Exception as e: raise PackageException("Cannot open package %s: %s" % (name, e)) if show_info: sys.stdout.write("Name: %s\n" % package["name"]) sys.stdout.write("Version: %s\n" % package["version"]) sys.stdout.write("Packaged on Checkmk Version: %s\n" % package["version.packaged"]) sys.stdout.write("Required Checkmk Version: %s\n" % package["version.min_required"]) valid_until_text = package["version.usable_until"] or "No version limitation" sys.stdout.write("Valid until Checkmk version: %s\n" % valid_until_text) sys.stdout.write("Title: %s\n" % package["title"]) sys.stdout.write("Author: %s\n" % package["author"]) sys.stdout.write("Download-URL: %s\n" % package["download_url"]) files = " ".join(["%s(%d)" % (part, len(fs)) for part, fs in package["files"].items()]) sys.stdout.write("Files: %s\n" % files) sys.stdout.write("Description:\n %s\n" % package["description"]) else: if logger.isEnabledFor(VERBOSE): sys.stdout.write("Files in package %s:\n" % name) for part in get_package_parts(): files = package["files"].get(part.ident, []) if len(files) > 0: sys.stdout.write(" %s%s%s:\n" % (tty.bold, part.title, tty.normal)) for f in files: sys.stdout.write(" %s\n" % f) else: for part in get_package_parts(): for fn in package["files"].get(part.ident, []): sys.stdout.write(part.path + "/" + fn + "\n")
def test_get_all_package_infos(): # Create some unpackaged file and a package _create_test_file("abc") _create_simple_test_package("p1") # Create a disabled package _create_simple_test_package("disabled") package_info = packaging.read_package_info("disabled") assert package_info is not None packaging.disable("disable", package_info) result = packaging.get_all_package_infos() assert "p1" in result["installed"] assert result["unpackaged"]["checks"] == ["abc"] assert result["optional_packages"] == {} assert "agent_based" in result["parts"]
def test_get_optional_package_infos(monkeypatch, tmp_path): mkp_dir = tmp_path.joinpath("optional_packages") mkp_dir.mkdir(parents=True, exist_ok=True) monkeypatch.setattr(cmk.utils.paths, "optional_packages_dir", mkp_dir) # Create package _create_simple_test_package("optional") package_info = packaging.read_package_info("optional") # Write MKP file mkp_path = mkp_dir.joinpath("optional.mkp") with mkp_path.open("wb") as mkp: packaging.create_mkp_file(package_info, mkp) assert packaging.get_optional_package_infos() == { "optional.mkp": package_info }
def package_list(args): # type: (List[str]) -> None if len(args) > 0: for name in args: show_package_contents(name) else: if logger.isEnabledFor(VERBOSE): table = [] for pacname in all_package_names(): package = read_package_info(pacname) if package is None: table.append([pacname, "package info is missing or broken", "0"]) else: table.append([pacname, package["title"], str(package["num_files"])]) tty.print_table(["Name", "Title", "Files"], [tty.bold, "", ""], table) else: for pacname in all_package_names(): sys.stdout.write("%s\n" % pacname)
def test_read_package_info_not_existing(): assert packaging.read_package_info("aaa") is None
def test_read_package_info(): _create_simple_test_package("aaa") assert packaging.read_package_info("aaa")["version"] == "1.0"
def _read_package_info( pacname: packaging.PackageName) -> packaging.PackageInfo: package_info = packaging.read_package_info(pacname) assert package_info is not None return package_info