What’s actually slowing this PC down?
Pick the symptom - the matching free tool is one click away.
Use ansible.builtin.package when the same task must work across Linux distributions, and switch to ansible.builtin.apt or ansible.builtin.dnf when you need manager-specific controls. Declare a desired state such as present, absent, or (where supported) latest; run changes with privilege escalation; and use ansible.builtin.package_facts to inspect installed versions without shell commands.
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 is declarative: a task describes the state you want, and Ansible changes the host only when its current state differs. This makes repeated playbook runs converge instead of reinstalling or removing software unnecessarily. Use fully qualified collection names (FQCNs) in every playbook. The ansible.builtin. prefix prevents a module in another collection from silently taking the same short name.
As an Amazon Associate I earn from qualifying purchases.
Free tools Windows power users keep installed
One-click scans. No signup required.
| Module | Best use | Strength | Boundary |
|---|---|---|---|
ansible.builtin.package |
One task for several Linux families | Delegates to the package manager discovered from gathered facts | Does not expose every apt or DNF option; names still vary by distribution |
ansible.builtin.apt |
Debian and Ubuntu hosts | Cache control, versions, local .deb files, upgrades, autoremove, autoclean and purge operations |
Requires the Python apt bindings on the managed host |
ansible.builtin.dnf |
Fedora, RHEL-compatible and other DNF-family hosts | Repository selection, groups, version constraints, lock timeouts and DNF cache behavior | Requires python3-dnf and DNF-compatible package metadata |
ansible.builtin.package_facts |
Reading installed-package state | Returns structured facts that can drive conditions and reports | It does not install, update or remove anything |
When the generic package module is the right choice
ansible.builtin.package is the portable default. It asks Ansible which package manager is available after fact gathering, then calls that manager. The documented states are present for installation and absent for removal. latest is available only if the detected manager supports it. The name parameter accepts one package or a list, and use can force a manager such as dnf when automatic detection is unsuitable.
When to use apt or dnf directly
Select a distribution-specific module when the playbook must refresh an apt cache for a defined age, install a particular Debian package version, handle a local .deb, select a repository, install a package group, or tune a DNF lock timeout. Those controls are intentionally outside the portable abstraction. Keep the manager-specific task behind an operating-system condition so a Debian host never receives a DNF task or vice versa.
#1 Best Overall
- [Ultra-Lightweight Ear Buds Designed for Small Ears] Each earbud weighs only 3.7g and features a compact, ergonomic in-ear design made especially for small ears. Secure, low-profile, and comfortable for workouts, all-day wear or overnight sleeping.The ultra-slim profile sits flush in your ear with no hard edges poking or rubbing, so you can even sleep on your side without discomfort.
- [Immersive Stereo Sound with TOZO OrigX Technology] TOZO OrigX tuning delivers clear vocals, balanced mids, and natural stereo sound for music, podcasts, and videos.
- [Long Battery Life for Daily Use] Get up to 7 hours of playtime on a single charge, with up to 32 hours total using the charging case—ideal for workdays, commuting, and extended listening sessions.
- [Bluetooth 5.3 & Stable Connection] Bluetooth 5.3 provides fast pairing, stable wireless performance, and reduced dropouts as you move around home or office.
- [Deep Bass with Clear Vocals] High-performance drivers produce punchy bass while keeping vocals clean and detailed for everyday listening.
Prerequisites before the first package task
Python and manager bindings
Package modules execute on the managed host, not on the control machine. The host therefore needs a usable Python interpreter plus the binding required by its package manager. The apt module specifies python3-apt; the DNF module specifies python3-dnf. Package facts likewise needs the appropriate apt, RPM, APK, Pacman, or other manager support. A minimal image may lack both Python and the binding. There is no universal bootstrap sequence: build those dependencies into the image, or use an environment-specific first task that can run with the interpreter and access already available.
Privilege escalation
Installing, removing and updating system packages changes a protected database and normally requires root. Put become: true at play or task scope and ensure the connection user is allowed to escalate. Reading package facts may also require elevation on hardened systems, so using the same setting for inspection avoids inconsistent results.
Facts and interpreter selection
Automatic manager detection and operating-system branching depend on facts. Fact gathering is enabled by default for ordinary plays; if you disabled it, gather facts before a package task. On hosts with several Python installations, set the correct interpreter with inventory or group variables so Ansible loads the manager binding from the intended environment.
Install portable packages with ansible.builtin.package
This play installs two common utilities on every host whose distribution supplies packages under those names:
- name: Install common packages
hosts: all
become: true
tasks:
- name: Ensure monitoring tools are installed
ansible.builtin.package:
name:
- curl
- vim
state: present
state: present is idempotent: an existing package is left alone and a missing package is installed. A list is preferable to a loop for a fixed set because the module can submit the set efficiently and the desired fleet state is visible in one place. Keep larger lists in variables so a code review can see exactly which software each host group receives.
package_baseline:
- curl
- vim
- rsync
- name: Apply the baseline
ansible.builtin.package:
name: "{{ package_baseline }}"
state: present
Use state: absent to converge on removal. Use state: latest only when the underlying manager supports it and when continuously tracking repository updates is intentional; it can produce a change whenever a newer repository version appears.
Crashes, No Sound, or Screen Glitches?
Random freezes, missing sound and display glitches usually trace back to one bad driver. Find and replace yours safely.Free scan · under a minutePC 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 & 11Rank #2
- 【IP68 Waterproof Multifunctinal Smart Watch】Torjalph fitness activity tracker smart watch is IP68 waterproof technology ,you can wear it when swimming,handwashing,it's rain-proof which means that you perform multiple exercise modes outside without worrying about sweat or rain corroding your fitness smart watch,and this watch equipped with a 230 mAh large capacity battery magnetic charging ,and this sports activity tracker watch can be used 5-7 days If fully charged.
- 【Larger 1.83'' Full Screen Watch & Multi-dial Selection】1.83 inch full HD color touch screen smart watch for men / women provides excellent 240*284 resolution image quality ,This Bluetooth smart watch offers a better touch experience and remarkable immersion and ,more than 200 watch faces for you to choose from App"Da Fit ", you can change the dial style according to your mood to wear keeping the world on your wrist
- 【Accurate Activity Tracker Smart Watch 】sports watch activity tracker uses sweat and dust resistant breathable silicone strap, our Fitness Tracker Smart Watch for Android iOS Phones supports 12 sports modes,walking,running,bicycle,swimming,badminton,basketball,football,rope skipping. This bluetooth calls smart watch for men women is lightweight and stylish, bringing more convenient and relaxing sports experience while also providing more protection.
- 【Your 24 Hour Personal Daily Health Monitor】Fitness watch for women men full touch screen IP67 waterproof bluetooth smartwatch for Android iOS Phones with heart rate blood pressure monitor multifunction Andriod smart watch with steps counter sleep monitor sports fitness watch, monitoring blood oxygen saturation allows you to understand your physical condition in real time to track fitness progress ,to know your health status in time.
- 【More Functions Bluetooth Call Smart Watch】This fitness activity smart watch full screen for iPhone and Android phones includes a bunch of new features including:The bluetooth smart watch can hang up the phone, receive and display WhatsAPP /Text /Facebook /Twitter /Messenger reminder.Support sedentary reminder, alarm clock, stopwatch, timer,weather information,music control, remote camera control compatible with Android 5.0 and above or iOS 9.0 and above smartphones.
- name: Remove an obsolete agent
ansible.builtin.package:
name: legacy-agent
state: absent
- name: Keep the security tool current where supported
ansible.builtin.package:
name: security-tool
state: latest
The portable module cannot solve different package names. For example, one distribution may call a web server package nginx while another fleet uses a differently named provider. Select names from facts or variables rather than assuming one spelling works everywhere.
- name: Select package names by operating-system family
ansible.builtin.set_fact:
web_package: >-
{{ 'nginx' if ansible_facts.os_family == 'Debian'
else 'nginx' if ansible_facts.os_family == 'RedHat'
else 'web-server-package' }}
- name: Install the selected web package
ansible.builtin.package:
name: "{{ web_package }}"
state: present
For a real fleet, replace the fallback with a supported-family assertion instead of allowing an unknown host to receive an unverified name. A clearer pattern is an operating-system variable file:
# group_vars/all/packages.yml
package_names:
curl: curl
editor: vim
# group_vars/debian_family/packages.yml
package_names:
curl: curl
editor: vim
# group_vars/redhat_family/packages.yml
package_names:
curl: curl
editor: vim-minimal
The variable approach keeps naming decisions out of task logic and lets reviewers compare the intended packages for each supported family.
Manage Debian and Ubuntu with ansible.builtin.apt
The apt module is for Debian-family systems. Refresh repository metadata only when the task needs it, and bound the refresh frequency with cache_valid_time:
Recommended Free Tools
- name: Install nginx on Debian-family hosts
hosts: debian_family
become: true
tasks:
- name: Install nginx with a bounded cache refresh
ansible.builtin.apt:
name: nginx
state: present
update_cache: true
cache_valid_time: 3600
Here, update_cache: true requests a refresh, while cache_valid_time: 3600 prevents a refresh when apt metadata is less than 3,600 seconds old. Set the interval to match repository-change needs and network limits rather than copying a value blindly.
Versions, upgrades and removal
Use a version-qualified name when a repeatable deployment must stay on a particular apt version, provided that version exists in the configured repositories. Use state: latest for a named package when the host should follow the newest available candidate. The module also supports broader upgrade operations; choose the narrowest operation that matches the maintenance policy so an application deployment does not unexpectedly upgrade unrelated packages.
Rank #3
- [Low Noise High Fidelity] New bee guitar cord with 22AWG oxygen-free-copper center conductors provides enhanced signal transfer, the PVC insulation material and the high-density stranded copper double shield provide noise rejection for quiet operation
- [Ideal for Choice] New bee 1/4 straight and right angle metal connectors, ensures a secure connection in any instrument, pedal, or amp jack. L shape great fro on stage guitar stands
- [Wide Compatible] Suitable for mixer, power amplifier, microphone, effector, decoder, equalizer, electoronic organ, electric guitar, electric bass and other electronic equipments. Widely used in the installation of smart home, karaoke speaker, professional stage audio, etc
- [Easy Disassemble] Making incidental repairs quick and easy! Very nice, flexible cable
- [Dont Hesite to Order] 24 hours customer services and professional technology team are standing by
- name: Install a pinned apt version
become: true
ansible.builtin.apt:
name: nginx=1.24.0-1~bookworm
state: present
- name: Remove a package but retain configuration
become: true
ansible.builtin.apt:
name: old-agent
state: absent
- name: Remove a package and purge its configuration
become: true
ansible.builtin.apt:
name: old-agent
state: absent
purge: true
Check that a pinned version is actually published for the host’s release; otherwise apt reports an unavailable version rather than silently choosing another one. Autoremove and autoclean can reclaim dependencies or cached archives, but run them deliberately because they alter more than the named package.
Local Debian packages and the force warning
Apt can install a local or remote .deb and can perform related package-file operations. Validate the file source and its dependencies before using that path. Avoid the module’s force option: the documentation warns that it disables signature and certificate checks and can damage the system. A normal repository install with verified metadata is safer.
Manage DNF-family systems with ansible.builtin.dnf
The DNF module installs, upgrades, removes and lists packages and groups. A basic task is:
- name: Install nginx on DNF-family hosts
hosts: dnf_family
become: true
tasks:
- name: Ensure nginx is present
ansible.builtin.dnf:
name: nginx
state: present
Use DNF-specific parameters when the task depends on repository selection, package groups, version constraints, lock timeouts or cache behavior. Keep state explicit so a rerun has a defined convergence target.
- name: Install a development group
become: true
ansible.builtin.dnf:
name: '@Development Tools'
state: present
- name: Install from a designated repository
become: true
ansible.builtin.dnf:
name: nginx
state: present
enablerepo: appstream
- name: Remove an obsolete package
become: true
ansible.builtin.dnf:
name: old-agent
state: absent
Current documentation describes yum as an alias or redirect to the DNF implementation. The old YUM backend was removed from ansible-core 2.17, so new playbooks should use ansible.builtin.dnf and test compatibility with the ansible-core version deployed by the control environment.
Remove and update packages idempotently
Idempotence comes from expressing the end state, not from checking a command’s exit code. Prefer present, absent and supported latest states over shell commands such as rpm -q, dpkg -l or dnf install -y. Ansible compares the requested state with the manager’s database and reports changed only when work is required.
Rank #4
- Digital Family Calendar: BSIMB digital calendar wall touch screen puts an end to your chaotic life. Designed for busy families, the digital calendar keeps you organised and in step with your family. Assign different colours and tasks to each family member to make family scheduling easier and more intuitive.
- Easy Setup and Auto-Sync: Plug in, connect to WLAN and auto-syn your electric calendar in minutes. Digital wall calendar compatible with Google calendar, iCloud calendar, Outlook calendar, Cozi calendar and Yahoo calendar. Add events directly on the device or through the ecalendar app. Electronic calendar stays current whether you're at work or traveling—no manual updates needed.
- All-In-One Home Assistant: Smart calendar builds habits and encourage independence with personalised chores. Display daily meal plan to reduce the daily ‘What's for dinner?’ stress. To-do lists keep track of everything you want. Turning chores into valuable achievements with stars and rewards, making life easier and more enjoyable.
- Manage Anytime Anywhere: BSIMB electronic calendar for family stay connected with the powerful ecalendar app. Access and manage your digital wall calendar anytime, anywhere with free features like stars & rewards, photo screensaver, chore charts, meals plans, to-do lists etc. Electronic planner paid features like Magic Import tailor advanced tools for users with special needs.
- Stay in Touch with Loved Ones: Share photos or videos from your phone to electronic wall calendar with app, instantly update your life moment, and keep in touch with your family, especially those who are far away; you can also surprise your smart calendar digital wall by sending him a wish card; it's also great for keeping tech-illiterate elders in touch with the youngsters.
Choose between present and latest
present: guarantees installation but does not force an upgrade when an older version is already installed.latest: asks the manager for its newest available version; support depends on the manager and repository metadata.- Version-qualified name: expresses a specific version where the manager and repository support it; plan a deliberate change when that version is superseded.
absent: guarantees the named package is not installed; use manager-specific purge or cleanup controls when configuration files or orphaned dependencies also need removal.
Separate package changes from service changes
Installing a package and enabling its service are different desired states. Keep them in separate tasks so a package update does not obscure a service-policy change. A handler can restart a service only when a package task reports a change, reducing unnecessary downtime.
- name: Install nginx
become: true
ansible.builtin.package:
name: nginx
state: present
notify: Restart nginx
handlers:
- name: Restart nginx
become: true
ansible.builtin.service:
name: nginx
state: restarted
Check whether a package is installed
Use ansible.builtin.package_facts for inspection. It returns structured data under ansible_facts.packages, making checks portable and usable in later tasks:
- name: Gather installed package facts
become: true
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"
The manager option accepts auto and manager-specific choices including apt, rpm/dnf, apk, pacman, pkg, pkg_info, portage and related aliases. Its strategy can return facts from the first available manager or from all available managers. Use the first strategy when one manager is authoritative; use all when a host legitimately exposes more than one package database and you need a complete inventory.
Gate configuration on an installed package
- name: Gather package facts
become: true
ansible.builtin.package_facts:
manager: auto
- name: Configure the agent only when installed
ansible.builtin.template:
src: agent.conf.j2
dest: /etc/agent/agent.conf
mode: '0644'
when: "'agent' in ansible_facts.packages"
Package fact values are lists because more than one installed version or architecture can be represented. Inspect the returned structure with a temporary debug task when writing a version comparison, then select the appropriate entry rather than assuming a single scalar.
Use operating-system variables without duplicating playbooks
A portable role generally keeps task flow identical and varies only package names and manager-specific options. Gather facts once, map the supported families, and fail early for an unknown family:
- name: Reject unsupported operating systems
ansible.builtin.assert:
that:
- ansible_facts.os_family in ['Debian', 'RedHat']
fail_msg: 'This role supports Debian and RedHat families only.'
- name: Install the role baseline
become: true
ansible.builtin.package:
name: "{{ package_baseline[ansible_facts.os_family] }}"
state: present
vars:
package_baseline:
Debian:
- curl
- vim
RedHat:
- curl
- vim-minimal
When a feature is only available through apt or DNF, branch at the task level instead of forcing the generic module to emulate it:
Best Value
- name: Refresh apt metadata
become: true
ansible.builtin.apt:
update_cache: true
cache_valid_time: 3600
when: ansible_facts.os_family == 'Debian'
- name: Install with DNF repository controls
become: true
ansible.builtin.dnf:
name: nginx
state: present
enablerepo: appstream
when: ansible_facts.os_family == 'RedHat'
Comparison: which approach should you choose?
| Requirement | Recommended approach | Reason |
|---|---|---|
| Install the same conceptual tools on several Linux families | ansible.builtin.package |
One declarative task delegates to the detected manager |
| Refresh Debian metadata with an age limit | ansible.builtin.apt |
Provides update_cache and cache_valid_time |
| Install a local Debian file or purge configuration | ansible.builtin.apt |
Exposes .deb and purge-related operations |
| Select a DNF repository or install a group | ansible.builtin.dnf |
Provides repository and group controls |
| Find installed versions | ansible.builtin.package_facts |
Returns structured facts rather than parsing command output |
| Run a command only when software is present | package_facts plus a when condition |
Keeps inspection separate from modification |
A complete, maintainable playbook pattern
The following example combines a portable baseline, a Debian-only cache refresh, a DNF-only repository choice and a post-install inspection:
- name: Manage the web baseline
hosts: web
become: true
vars:
baseline_by_family:
Debian:
- curl
- nginx
RedHat:
- curl
- nginx
tasks:
- name: Confirm a supported operating-system family
ansible.builtin.assert:
that:
- ansible_facts.os_family in baseline_by_family
fail_msg: 'Unsupported operating-system family for this play.'
- name: Refresh Debian package metadata when stale
ansible.builtin.apt:
update_cache: true
cache_valid_time: 3600
when: ansible_facts.os_family == 'Debian'
- name: Install the portable baseline
ansible.builtin.package:
name: "{{ baseline_by_family[ansible_facts.os_family] }}"
state: present
- name: Install nginx from the selected DNF repository
ansible.builtin.dnf:
name: nginx
state: present
enablerepo: appstream
when: ansible_facts.os_family == 'RedHat'
- name: Read the resulting package state
ansible.builtin.package_facts:
manager: auto
- name: Show nginx package records
ansible.builtin.debug:
var: ansible_facts.packages.nginx
when: "'nginx' in ansible_facts.packages"
The example intentionally keeps the generic install separate from manager-specific controls. On a RedHat-family host, the DNF task repeats the nginx declaration to add repository selection; on a Debian-family host, the apt task handles metadata freshness before the portable install.
The Tool Desk
Outbyte Driver Updater FREEFix the driver behind crashes, sound loss and screen glitchesFind Drivers →Outbyte PC Repair FREEClear out junk files and repair common Windows errorsFree Scan →Troubleshooting common failures
“No module named apt” or a missing DNF binding
The managed host lacks python3-apt or python3-dnf, or Ansible is using a Python interpreter that cannot see the package. Install the binding in the image or bootstrap it with a method available before package modules run, then set the correct interpreter in inventory. Do not assume installing the binding with the same unavailable module can work on a completely bare image.
Package manager not detected
Check that facts are gathered, the host is the expected operating system, and its manager executable and Python support are present. If automatic detection is wrong on a deliberately unusual host, use the generic module’s use option to select the intended manager, or call the specific module under an explicit operating-system condition.
Package name cannot be found
Repository metadata may be stale, the required repository may not be enabled, or the distribution uses a different package name. Refresh apt metadata where appropriate, select the required DNF repository, and maintain a per-family variable map. Avoid “fixing” the error with a shell command that loses idempotence.
Permission or lock errors
Use become: true for protected operations and ensure the escalation method works non-interactively. A package database may also be locked by an unattended update or another administrator. DNF exposes lock-timeout controls; for apt, coordinate automation windows rather than repeatedly retrying destructive commands.
Unexpected upgrades
Replace latest with present when installation without automatic upgrades is the requirement. If a fixed version is essential, specify a manager-supported version and verify that repository retention policies keep it available. Treat broad upgrade and autoremove operations as maintenance activities, not incidental steps in application deployment.
Quick Recap
Operational checklist
- Use FQCNs such as
ansible.builtin.package,ansible.builtin.apt,ansible.builtin.dnfandansible.builtin.package_facts. - Declare
present,absent, or a deliberately chosenlateststate. - Run package changes with
become: true. - Verify Python and the manager binding on every managed host.
- Keep package names in operating-system-specific variables when distributions differ.
- Refresh repository metadata only where needed and bound apt refreshes with
cache_valid_time. - Use apt or DNF directly for options unavailable through the generic module.
- Use
package_factsfor installed-package checks instead of parsing listing commands. - Test a playbook twice: the first run should make the intended changes; the second should report no package changes unless repository state legitimately changed.
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.




