コード例 #1
0
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()
コード例 #2
0
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()
コード例 #3
0
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)
コード例 #4
0
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
コード例 #5
0
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")
コード例 #6
0
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"]
コード例 #7
0
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
    }
コード例 #8
0
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)
コード例 #9
0
def test_read_package_info_not_existing():
    assert packaging.read_package_info("aaa") is None
コード例 #10
0
def test_read_package_info():
    _create_simple_test_package("aaa")
    assert packaging.read_package_info("aaa")["version"] == "1.0"
コード例 #11
0
ファイル: test_packaging.py プロジェクト: Yogibaer75/checkmk
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