diff --git a/src/pyinfra/facts/rpm.py b/src/pyinfra/facts/rpm.py index 224a62399..4aedf2eda 100644 --- a/src/pyinfra/facts/rpm.py +++ b/src/pyinfra/facts/rpm.py @@ -87,13 +87,13 @@ class RpmPackageProvides(FactBase): @override def requires_command(self, *args, **kwargs) -> str: - return "repoquery" + return "dnf" @override def command(self, package): # Accept failure here (|| true) for invalid/unknown packages return make_formatted_string_command( - "repoquery --queryformat {0} --whatprovides {1} || true", + "dnf repoquery --quiet --queryformat {0} --whatprovides {1} || true", QuoteString(rpm_query_format), QuoteString(package), ) diff --git a/src/pyinfra/operations/util/packaging.py b/src/pyinfra/operations/util/packaging.py index c04425977..bb6f602a1 100644 --- a/src/pyinfra/operations/util/packaging.py +++ b/src/pyinfra/operations/util/packaging.py @@ -146,6 +146,7 @@ def ensure_packages( upgrade_command: str | StringCommand | None = None, version_join: str | None = None, expand_package_fact: Callable[[str], list[str | list[str]]] | None = None, + expand_match_any: bool = False, ): """ Handles this common scenario: @@ -196,7 +197,7 @@ def ensure_packages( if present is True: for package in packages: has_package, expanded_packages = _has_package( - package.lkup_name, current_packages, expand_package_fact + package.lkup_name, current_packages, expand_package_fact, match_any=expand_match_any ) if not has_package: diff --git a/tests/facts/rpm.RpmPackageProvides/package.json b/tests/facts/rpm.RpmPackageProvides/package.json index 2b8328efe..35e30f072 100644 --- a/tests/facts/rpm.RpmPackageProvides/package.json +++ b/tests/facts/rpm.RpmPackageProvides/package.json @@ -1,7 +1,7 @@ { "arg": "vim", - "command": "repoquery --queryformat '%{NAME} %{VERSION}-%{RELEASE}\\n' --whatprovides vim || true", - "requires_command": "repoquery", + "command": "dnf repoquery --quiet --queryformat '%{NAME} %{VERSION}-%{RELEASE}\\n' --whatprovides vim || true", + "requires_command": "dnf", "output": [ "vim-enhanced 8.0.1763-15.el8" ], diff --git a/tests/facts/rpm.RpmPackageProvides/package_needs_quotes.json b/tests/facts/rpm.RpmPackageProvides/package_needs_quotes.json index 6a446dbb5..4da004016 100644 --- a/tests/facts/rpm.RpmPackageProvides/package_needs_quotes.json +++ b/tests/facts/rpm.RpmPackageProvides/package_needs_quotes.json @@ -1,7 +1,7 @@ { "arg": "my;package", - "command": "repoquery --queryformat '%{NAME} %{VERSION}-%{RELEASE}\\n' --whatprovides 'my;package' || true", - "requires_command": "repoquery", + "command": "dnf repoquery --quiet --queryformat '%{NAME} %{VERSION}-%{RELEASE}\\n' --whatprovides 'my;package' || true", + "requires_command": "dnf", "output": [ "my-package 1.0.0-1.el8" ], diff --git a/tests/operations/dnf.packages/noop_add_package_multiple_providers.json b/tests/operations/dnf.packages/noop_add_package_multiple_providers.json new file mode 100644 index 000000000..3bc021b09 --- /dev/null +++ b/tests/operations/dnf.packages/noop_add_package_multiple_providers.json @@ -0,0 +1,13 @@ +{ + "args": [["wget"]], + "facts": { + "rpm.RpmPackages": { + "wget2-wget": ["2.2.1-1.fc43"] + }, + "rpm.RpmPackageProvides": { + "package=wget": [["wget1-wget", "1.25.0-2.fc43"], ["wget2-wget", "2.2.1-1.fc43"]] + } + }, + "commands": [], + "noop_description": "package wget is installed" +}