Dnf Operations¶
Manage dnf packages and repositories. Note that dnf package names are case-sensitive.
Facts used in these operations: rpm.RpmPackageProvides, rpm.RpmPackages.
dnf.key
¶
Stateless operation
This operation will always execute commands and is not idempotent.
Add dnf gpg keys with rpm
.
dnf.key(src: str, **kwargs)
key**: filename or URL
: always returns one command, not idempotent
ample:**
ode:: python
linux_id = host.get_fact(LinuxDistribution)[“release_meta”].get(“ID”) dnf.key(
name=”Add the Docker CentOS gpg key”, src=f”https://download.docker.com/linux/{linux_id}/gpg”,
) Note:
This operation also inherits all global arguments.
dnf.packages
¶
Install/remove/update dnf packages & updates.
dnf.packages(
packages: str | list[str] | None=None, present=True, latest=False, update=False,
clean=False, nobest=False, extra_install_args: str | None=None,
extra_uninstall_args: str | None=None, **kwargs,
)
packages**: packages to ensure
present**: whether the packages should be installed
latest**: whether to upgrade packages without a specified version
update**: run dnf update
before installing packages
clean**: run dnf clean
before installing packages
nobest**: add the no best option to install
extra_install_args**: additional arguments to the dnf install command
extra_uninstall_args**: additional arguments to the dnf uninstall command
ions:
Package versions can be pinned as follows: <pkg>=<version>
amples:**
ode:: python
# Update package list and install packages dnf.packages(
name=’Install Vim and Vim enhanced’, packages=[“vim-enhanced”, “vim”], update=True,
)
# Install the latest versions of packages (always check) dnf.packages(
name=”Install latest Vim”, packages=[“vim”], latest=True,
) Note:
This operation also inherits all global arguments.
dnf.repo
¶
Add/remove/update dnf repositories.
dnf.repo(
src: str, present=True, baseurl: str | None=None, description: str | None=None,
enabled=True, gpgcheck=True, gpgkey: str | None=None, **kwargs,
)
src**: URL or name for the .repo
file
present**: whether the .repo
file should be present
baseurl**: the baseurl of the repo (if name
is not a URL)
description**: optional verbose description
enabled**: whether this repo is enabled
gpgcheck**: whether set gpgcheck=1
gpgkey**: the URL to the gpg key for this repo
seurl``/description
/gpgcheck
/gpgkey
:
These are only valid when name
is a filename (ie not a URL). This is
for manual construction of repository files. Use a URL to download and
install remote repository files.
amples:**
ode:: python
# Download a repository file dnf.rpm(
name=”Install Docker-CE repo via URL”, src=”https://download.docker.com/linux/centos/docker-ce.repo”,
)
# Create the repository file from baseurl/etc dnf.repo(
name=”Add the Docker CentOS repo”, src=”DockerCE”, baseurl=”https://download.docker.com/linux/centos/7/$basearch/stable”,
) Note:
This operation also inherits all global arguments.
dnf.rpm
¶
Add/remove .rpm
file packages.
dnf.rpm(src: str, present=True, **kwargs)
src**: filename or URL of the .rpm
package
present**: whether ore not the package should exist on the system
sources with present=False
:
If the .rpm
file isn’t downloaded, pyinfra can’t remove any existing
package as the file won’t exist until mid-deploy.
ample:**
ode:: python
major_centos_version = host.get_fact(LinuxDistribution)[“major”] dnf.rpm(
name=”Install EPEL rpm to enable EPEL repo”, src=f”https://dl.fedoraproject.org/pub/epel/epel-release-latest-{major_centos_version}.noarch.rpm”,
) Note:
This operation also inherits all global arguments.
dnf.update
¶
Stateless operation
This operation will always execute commands and is not idempotent.
Updates all dnf packages.
dnf.update(**kwargs)
- Note:
This operation also inherits all global arguments.