Use ansible.builtin.package when the same package task must run across Linux distributions, and switch to ansible.builtin.apt or ansible.builtin.dnf when you need manager-specific controls. Add become: true for system changes, declare a desired state such as present or absent, and use ansible.builtin.package_facts to inspect what is installed.
Antihost offers Linux VPS plans with full root access, unlimited traffic on a 1 Gbps port and a 14-day free trial.
Choose the module that matches the job
Ansible package management has three distinct roles. The generic ansible.builtin.package module gives you a portable interface and delegates to the package manager discovered from gathered facts. The distribution-specific ansible.builtin.apt and ansible.builtin.dnf modules expose controls that the generic interface cannot. The read-only ansible.builtin.package_facts module reports installed packages as facts so later tasks can make decisions without parsing command output.
As an Amazon Associate I earn from qualifying purchases.
| Need | Use | Why |
|---|---|---|
| Install or remove a package on several Linux families | ansible.builtin.package |
Automatically uses the package manager discovered on each host. |
Refresh an APT cache, purge, autoremove, install a local .deb, or select APT-specific behavior |
ansible.builtin.apt |
Provides Debian/Ubuntu controls that the generic module does not model. |
| Choose DNF repositories or groups, set lock timeouts, or constrain versions | ansible.builtin.dnf |
Exposes DNF-specific options. |
| Check whether a package is installed and read its version | ansible.builtin.package_facts |
Returns structured data under ansible_facts.packages. |
Use fully qualified collection names (FQCNs) in every playbook. Names such as ansible.builtin.package make the intended module unambiguous and prevent collisions with modules supplied by another collection.
Prerequisites on managed hosts
Privilege escalation
Installing, upgrading, or removing system packages changes the package database and normally requires root privileges. Put become: true at play or task scope and configure the connection user and escalation method appropriate to your environment.
#1 Best Overall
- BLUE LIGHT BLOCKING GLASSES: Our blue light glasses for women boast UV400 protection, blocking harmful blue rays from computer screens. With these bluelight glasses women, you can enjoy gaming, reading, or watching TV with no worries of eye strain.
- EYE RELIEF: Our blue light glasses are engineered to reduce blurry vision or strain caused by prolonged screen time. These womens blue light glasses aid in better sleep by preventing blue light from disrupting your natural sleep cycle, helping you fall asleep faster and enjoy a more restful night's sleep, making them the perfect christmas present.
- COMFORTABLE: Crafted from durable material, our trendy blue light glasses for woman or blue light glasses men ensure long-lasting comfort. The high-transmittance lenses accessories, gamer gifts for men, help keep your eyes relaxed. Perfect stocking stuffers, gifts for gamers men, christmas gifts for men, halloween costumes.
- LIGHTWEIGHT: These clear blue light glasses feature a lightweight frame, meaning they’ll stay comfy for long-term wear. Perfect as blue blockers glasses for women or mens blue light glasses, these non-prescription fake glasses for men can be worn throughout the day. The blue light blocking glasses women feature polycarbonate HD lenses, which are anti-reflective and restore true color.
- WORRY-FREE PURCHASE: If you experience any issues, our support team is ready to assist you quickly. These are the perfect costume glasses for cosplay dressing up.
- name: Manage baseline packages
hosts: all
become: true
tasks:
- name: Install curl
ansible.builtin.package:
name: curl
state: present
Python and manager bindings
Package modules run on the managed host. The host needs a usable Python interpreter plus the binding required by its package manager. The APT module requires python3-apt; the DNF module requires python3-dnf. Package facts likewise needs the appropriate manager support, such as Python APT or RPM support. A minimal image can therefore fail before Ansible reaches the package operation if either Python or the binding is absent.
There is no single bootstrap sequence that works for every image. Build these dependencies into the image, use a distribution-specific provisioning stage, or run an environment-specific first task that installs them through whatever access the image already provides. Keep that bootstrap separate from the normal package role so its assumptions are visible.
Recommended Free Tools
Facts and manager discovery
The generic package module selects a manager from gathered facts. If fact gathering is disabled, unavailable, or inaccurate for an unusual host, automatic selection may not work. The module’s use option can force a manager such as dnf when auto-detection is inappropriate.
Install packages portably with ansible.builtin.package
Declare the target state instead of issuing an imperative shell command. state: present installs a package when needed and leaves an already-installed package unchanged. state: absent removes it. state: latest asks the underlying manager to upgrade to the newest available version, but it is available only when that manager supports it.
Install one or several packages
- name: Install common packages
hosts: all
become: true
tasks:
- name: Ensure monitoring tools are installed
ansible.builtin.package:
name:
- curl
- vim
state: present
The name parameter accepts either a single package name or a list. Keeping a list in one task makes the desired baseline easy to review and lets the backend optimize the transaction.
Remove packages safely
- name: Remove an obsolete utility
hosts: all
become: true
tasks:
- name: Ensure telnet client is absent
ansible.builtin.package:
name: telnet
state: absent
Removal is idempotent: a second run sees the package is already absent and reports no change. Whether configuration files or dependencies are removed as well depends on the distribution-specific manager; use a manager-specific module when purge or autoremove semantics matter.
What’s actually slowing this PC down?
Pick the symptom - the matching free tool is one click away.
Rank #2
- WINDEX GAMING WIPES: effortlessly clean all your gaming gear and gaming electronics in one easy step with our new Windex Gaming Wipes
- AMMONIA FREE: our ammonia-free formula is safe to use on all of your favorite gaming equipment like consoles, headsets, controllers, screens, keyboards, and more
- PRE-MOISTENED WIPES: each wipe instantly removes dust, dirt, and stubborn smudges and fingerprints leaving a streak-free shine
- ANTI-STATIC: great for cleaning and wiping down your gaming gear and electronics leaving behind no visible residue
- COMPACT RESEALABLE PACKAGE: store your pack of Windex Gaming Wipes anywhere in your home for whenever a quick and easy wipedown is needed
Request the newest available version
- name: Keep a tool current where the backend supports upgrades
hosts: all
become: true
tasks:
- name: Install the latest available curl
ansible.builtin.package:
name: curl
state: latest
“Latest” is repository state, not a guarantee of a particular upstream release. If you need a reproducible version, specify a version with the native module and repository model for that operating system.
Force a backend only when necessary
- name: Use DNF explicitly on a host with unusual fact data
hosts: rpm_hosts
become: true
tasks:
- name: Install a package through DNF
ansible.builtin.package:
name: nginx
state: present
use: dnf
Do not set use casually. Forcing a backend that is not installed or does not own the host’s package database creates confusing failures and reduces portability.
Account for distribution-specific package names
A package’s name is not guaranteed to be identical across distributions. Define names by operating-system family, using gathered facts to select the correct variable. This also keeps one role usable on Debian-family and DNF-family hosts without pretending that their repositories provide identical labels.
- name: Select package names for this operating system family
ansible.builtin.set_fact:
web_packages:
- nginx
when: ansible_facts.os_family == 'Debian'
- name: Select package names for RPM-family systems
ansible.builtin.set_fact:
web_packages:
- nginx
when: ansible_facts.os_family == 'RedHat'
- name: Install the selected package set
become: true
ansible.builtin.package:
name: "{{ web_packages }}"
state: present
In a production role, put these mappings in vars/ or group variables and validate that every supported family has a value. If a service uses different names, map them explicitly rather than hiding a distribution assumption in a shell command.
PC Slower Than It Used to Be?
A free scan shows the junk files, broken settings and background clutter dragging Windows down - then fixes them in one click.Free scan · Windows 10 & 11Outdated Drivers Are Slowing You Down
One free scan finds every outdated or missing driver and matches the right update for your exact hardware.Free scan · exact hardware matchUse APT for Debian and Ubuntu hosts
ansible.builtin.apt manages APT packages on Debian and Ubuntu. The managed host must have python3-apt. Use it when cache behavior, package versions, local or remote .deb files, upgrades, autoremove, autoclean, or purge operations are part of the requirement.
Install with a bounded cache refresh
- name: Install nginx on Debian-family hosts
hosts: debian_hosts
become: true
tasks:
- name: Ensure nginx is installed
ansible.builtin.apt:
name: nginx
state: present
update_cache: true
cache_valid_time: 3600
update_cache: true refreshes repository metadata before the transaction. cache_valid_time: 3600 permits a refresh when the cache is older than 3,600 seconds, avoiding an unnecessary network operation on every play run. Choose the interval to match how quickly your repository metadata changes.
Rank #3
- Ergonomic & Adjustable Design: Fight "text neck" and improve your posture. Designed for comfort, it offers an adjustable height (7.1in-8.5in) (1.4in adjustable range) and angle (5°-85°) Please note: cell phone stand is only 9 inches tall—the length of a standard pencil
- Without blocking subtitles Perfect for office desk Tiktok Face Time Zoom video—this is the ultimate kitchen desk essential for phones! Perfect viewing experience while reducing neck back strain, A must-have for gamers streamers desk, and anyone who values both style and support!
- Sleek & Stable Design fits Otterbox Case: Say goodbye to bent cables, tangles, and tip-overs! LISEN’s stylish adjustable desk phone holder features a built-in charging hole and smart cable management, keeping your phone secure and your workspace clutter-free cool gadgets for men
- ANTI-SLIP DESIGN free hands: The under 10.00 items easy gadgets back and the bottom of this kitchen essentials for women are fully covered by anti-skid silicone, which LISEN stand up desk decor can provide maximum protection device from any scratches and slides
- Your Perfect Viewing Companion:If your product arrives damaged or breaks within 365 days, reach out to LISEN for a quick and hassle-free solution. Struggling with assembly, like tightening the screw? We’ve got your back! Your experience matters to us. (Product including: phone Holder stand*1, screw*1, hexagon screwdriver*1, specification*1)
Pin or upgrade a package
- name: Install a specific repository version
hosts: debian_hosts
become: true
tasks:
- name: Install the approved nginx version
ansible.builtin.apt:
name: "nginx=1.24.0-2~bookworm"
state: present
- name: Upgrade nginx when a newer repository version is approved
ansible.builtin.apt:
name: nginx
state: latest
Version strings are repository- and distribution-specific. A version that exists on one Debian or Ubuntu release may not exist on another, so test the exact string against the repositories configured on each host.
Use removal features deliberately
The APT module supports ordinary removal, purge-related operations, autoremove, and autoclean. Select those behaviors explicitly when you need them; ordinary state: absent should not be assumed to purge every configuration file or clean every now-unused dependency.
Do not use APT’s force as a workaround
The APT documentation warns that force disables signature and certificate checks and can damage a system. It should almost never be used. Fix repository keys, certificates, package metadata, or connectivity instead of bypassing verification.
Use DNF for RPM-family systems
ansible.builtin.dnf installs, upgrades, removes, and lists packages and groups. It requires python3-dnf. Current Ansible documentation describes yum as an alias or redirect to the DNF implementation and notes that the old YUM backend was removed from ansible-core 2.17, so new playbooks should use the FQCN ansible.builtin.dnf.
Install a package
- name: Install nginx on DNF-family hosts
hosts: rpm_hosts
become: true
tasks:
- name: Ensure nginx is installed
ansible.builtin.dnf:
name: nginx
state: present
Use DNF-specific controls when required
- name: Install a package from a selected repository
hosts: rpm_hosts
become: true
tasks:
- name: Install nginx from the approved repository
ansible.builtin.dnf:
name: nginx
state: present
enablerepo: appstream
- name: Install a development group
ansible.builtin.dnf:
name: '@Development Tools'
state: present
Use DNF options for repository selection, package groups, version constraints, lock timeouts, and cache behavior. Keep the desired state explicit so repeated runs converge on the same result rather than performing an uncontrolled transaction.
Check installed packages with ansible.builtin.package_facts
Use package facts for inspection instead of running a non-idempotent listing command and parsing its text. The module returns package data under ansible_facts.packages. A package can have multiple installed versions, so the value is a list of records rather than a single version string.
Quick wins for a faster PC:
Fix the driver behind crashes, sound loss and screen glitchesFind Drivers →Repair Windows errors before they cause bigger problemsFix Now →Rank #4
- Easy Installation: Our gaming lights have been designed to enhance your entertainment experience. Simply position the led light bar next to your TV or game console to create a game room environment with ease. They come with USB power and a 60 inch cord for direct mounting and mobility
- Audio Syncing & Extensive Mode: The built-in high-sensitivity music sensor allows you to sync the TV led lights to your favorite music. Lights react and move to the beat of music, film and game audio, creating an incredible immersive sound and light experience – and all without the need for an additional hub. You can choose from 64+ patterns, including strobe, illusion, jump, energy, gradient, running, chasing, fluttering mode etc. Each mode can be applied to different scenes
- 64+ Chasing IC+RGB & W Effect: The independent control design of IC+RGB and white all-in-one multifunctional rgbw led bar lights monitor backlight allows you to easily switch the led lights for desk between IC+RGB and white to enjoy a variety of lighting effects, you can choose white lighting mode with high brightness for better illumination when working, etc. Choose IC+RGB lighting mode when you need to create an entertaining atmosphere for the light show, 16 million colours of Color changing rgb light bar let you dance to the beat and create a dynamic party atmosphere
- Dynamic and Dimmable Lights: 1%-full brightness free brightness adjustment gives you the flexibility to adjust dimmable led light bar for room decorations or a variety of occasions
- USB Powered: USB light bars for room can be powered by powernank, usb charger, TV, Monitor, laptop PC mainframe, making behind TV led lighting bar easy to install in any location.TV led lights are powered by the TV usb interface / PC mainframe, can be turned on/off synchronously with TV / PC
- name: Gather installed package facts
hosts: all
become: true
tasks:
- name: Read installed packages from the detected manager
ansible.builtin.package_facts:
manager: auto
- name: Report the installed curl version
ansible.builtin.debug:
var: ansible_facts.packages.curl
when: "'curl' in ansible_facts.packages"
Select a manager and strategy
The manager option supports automatic detection and manager-specific choices including apt, rpm/dnf, apk, pacman, pkg, pkg_info, and portage, along with related aliases. Its strategy can return facts from the first available manager or from all available managers. Use a specific manager when a host has more than one package database and you know which one your check concerns.
Gate configuration on a package’s presence
- name: Gather package facts before conditional configuration
become: true
ansible.builtin.package_facts:
manager: auto
- name: Configure a service only when its package is installed
ansible.builtin.template:
src: service.conf.j2
dest: /etc/example/service.conf
mode: '0644'
when: "'example-server' in ansible_facts.packages"
This pattern separates observation from change: facts tell you what exists, while package modules enforce what should exist.
Build idempotent package workflows
Keep the desired inventory in variables
common_packages:
- curl
- vim
- ca-certificates
- name: Install the approved baseline
become: true
ansible.builtin.package:
name: "{{ common_packages }}"
state: present
Variables make code review meaningful: reviewers can see the fleet’s intended package inventory without searching through shell commands.
Separate refresh, installation, and verification
Refresh repositories only where it is needed, install with a declared state, and verify with package facts when a later task depends on the result. This avoids downloading metadata on every unrelated play and avoids treating command output as state.
Design for repeated runs
- Use
present,absent, or a supported version rather thanapt-get,dnf, or another shell command. - Keep package lists and operating-system mappings in variables.
- Use
latestonly when continuous repository-driven upgrades are intended. - Run package changes with privilege escalation and test the role twice; the second run should report no unnecessary changes.
Troubleshoot common failures
“No module named apt” or missing DNF support
Install the manager binding required by the target (python3-apt for APT or python3-dnf for DNF), or build it into the image. Confirm that Ansible is using the interpreter where that binding is installed.
Permission denied or lock errors
Check that become: true is applied to the package task and that the escalation account is allowed to become root. A package-manager lock can also mean another update process is running; use the native module’s lock-timeout controls where available and avoid launching competing package jobs.
Best Value
- Compatible with Wide Screens - To ensure compatibility with the dual monitor mount, your each monitor must meet three conditions at the same time: First, computer screens size range: 13 to 32 inches. Second, screen weight range: 4.4 to 19.8 lbs. Third, the back of the monitor screen must have VESA mounting holes with a pitch of 75x75mm or 100x100mm.
- Regarding the compatibility with desks - Your desk must meet three conditions at the same time: First, desk material: Only wooden desks are recommended, plastic or glass desks cannot be used. Second, desk thickness range: 0.59" - 3.54". Third, the bottom of the desk should not have any cross beams or panels, as this will interfere with installation. We recommend carefully checking that your desk and monitors meets all above conditions before purchasing.
- Dual C-Clamp Hold - Worried your dual monitors might wobble or slip? Our upgraded base uses a larger platform plus a dual C-clamp structure to lock the dual monitor arm firmly to your desk. Each arm safely keeps your screens steady while you type, click and game—no shaking, no sliding, just a clean and secure setup you can trust every day. It also provides Grommet Mounting installation choice, both options ensure stable and secure fixation for your 0.59" - 3.54" desk.
- Full-Motion Adjustment For Comfortable View - Pull the screen closer when you’re deep in a spreadsheet, push it back to watch videos, or rotate to portrait for coding — moving everything smoothly with just one hand. The monitor stand offers +85°/-50° tilt, ±90° swivel and 360° rotation. Raise your monitor up to 15.75″ to support a healthy sitting posture. Whether you’re working from home, gaming through the night, or switching between video calls and documents, getting the screens to your natural line of sight helps relieve neck, shoulder and back strain so you can stay focused longer with less fatigue.
- Keep Your Desk Organized: By lifting both screens off the desktop, this dual monitor stand opens up valuable space for your keyboard, notebook, docking station or a simple, clutter-free work area. Built-in cable management guides wires along the arms, keeping cords out of sight and out of the way. Enjoy a tidy, modern workstation that looks as good as it feels to use.
Package cannot be found
Verify the repository configuration and the distribution-specific name. If a Debian name is being used on an RPM-family host, or vice versa, select a name from an OS-family variable. For APT, refresh metadata when its cache is stale; for DNF, verify enabled repositories.
Automatic manager selection is wrong
Check gathered facts and use ansible.builtin.package‘s use option to select the correct backend only when the host’s layout justifies it. On a play that targets one known family, using ansible.builtin.apt or ansible.builtin.dnf can be clearer.
The Tool Desk
Outbyte Driver Updater FREEFix the driver behind crashes, sound loss and screen glitchesFind Drivers →Outbyte PC Repair FREERepair Windows errors before they cause bigger problemsFix Now →A version works on one host but not another
Repository versions depend on the operating-system release, enabled repositories, architecture, and metadata date. Use a version constraint only with repositories that publish that exact value, and maintain separate variables when supported releases differ.
A practical decision checklist
- Need one task that spans Debian, Ubuntu, and RPM-family hosts? Start with
ansible.builtin.package. - Need cache age, purge, autoremove, local
.debhandling, or APT upgrades? Useansible.builtin.apt. - Need DNF groups, repository selection, lock timeouts, or DNF version controls? Use
ansible.builtin.dnf. - Need to know what is installed rather than change it? Use
ansible.builtin.package_facts. - Will the task modify the system database? Add
become: true. - Could names differ by distribution? Select names from OS-family variables.
- Does the image provide Python and the manager binding? Verify before running the role.
- Is a repository refresh actually needed? Use APT cache controls or the DNF equivalent instead of refreshing indiscriminately.
Complete cross-platform example
- name: Install and verify a cross-platform baseline
hosts: all
become: true
vars:
packages_by_family:
Debian:
- curl
- vim
RedHat:
- curl
- vim
tasks:
- name: Ensure the operating system family is supported
ansible.builtin.assert:
that:
- ansible_facts.os_family in packages_by_family
fail_msg: "Unsupported operating system family: {{ ansible_facts.os_family }}"
- name: Install baseline packages
ansible.builtin.package:
name: "{{ packages_by_family[ansible_facts.os_family] }}"
state: present
- name: Gather installed package facts
ansible.builtin.package_facts:
manager: auto
- name: Show the installed curl record
ansible.builtin.debug:
var: ansible_facts.packages.curl
when: "'curl' in ansible_facts.packages"
This play keeps installation portable, makes unsupported families fail early, and uses structured facts for verification. Replace the sample mapping with the names and versions appropriate to the distributions you actually support.
Frequently Asked Questions
Should I use package, apt, or dnf?
Use ansible.builtin.package for a portable install or removal task. Choose ansible.builtin.apt or ansible.builtin.dnf when you need controls specific to that manager.
How do I check whether a package is installed?
Run ansible.builtin.package_facts and test membership in ansible_facts.packages, for example "'curl' in ansible_facts.packages".
Do these 3 things before closing this tab:
1Repair Windows errors before they cause bigger problems2Scan for outdated or missing drivers - takes under a minute3Clear out junk files and repair common Windows errorsIs state: latest always supported?
No. It is available only when the underlying package manager supports it, and it follows the newest version exposed by the configured repositories.
Quick Recap
Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.




