Ansible Module Alternatives
Overview
This guide provides replacement alternatives for deprecated or legacy Ansible modules. Use this reference when ansible-lint reports deprecated module warnings or when updating older playbooks to modern best practices.
Quick Detection
Use the FQCN checker script to automatically detect non-FQCN module usage:
bash scripts/check_fqcn.sh playbook.yml
bash scripts/check_fqcn.sh roles/webserver/
bash scripts/check_fqcn.sh .
The script identifies modules using short names and provides specific FQCN migration recommendations.
Deprecated Modules and Replacements
Package Management
| Deprecated Module | Replacement | Notes |
|---|
apt (short name) | ansible.builtin.apt | Use FQCN for clarity |
yum (short name) | ansible.builtin.yum or ansible.builtin.dnf | dnf preferred for RHEL 8+ |
pip (short name) | ansible.builtin.pip | Use FQCN |
easy_install | ansible.builtin.pip | easy_install is deprecated in Python |
homebrew | community.general.homebrew | Moved to community.general |
zypper | community.general.zypper | Moved to community.general |
apk | community.general.apk | Moved to community.general |
File Operations
| Deprecated Module | Replacement | Notes |
|---|
copy (short name) | ansible.builtin.copy | Use FQCN |
file (short name) | ansible.builtin.file | Use FQCN |
template (short name) | ansible.builtin.template | Use FQCN |
lineinfile (short name) | ansible.builtin.lineinfile | Use FQCN |
blockinfile (short name) | ansible.builtin.blockinfile | Use FQCN |
synchronize | ansible.posix.synchronize | Moved to ansible.posix |
acl | ansible.posix.acl | Moved to ansible.posix |
Service Management
| Deprecated Module | Replacement | Notes |
|---|
service (short name) | ansible.builtin.service or ansible.builtin.systemd | Use systemd for systemd-based systems |
systemd (short name) | ansible.builtin.systemd | Use FQCN |
sysvinit | ansible.builtin.service | service module handles sysvinit |
User and Group Management
| Deprecated Module | Replacement | Notes |
|---|
user (short name) | ansible.builtin.user | Use FQCN |
group (short name) | ansible.builtin.group | Use FQCN |
authorized_key (short name) | ansible.posix.authorized_key | Moved to ansible.posix |
Networking
| Deprecated Module | Replacement | Notes |
|---|
get_url (short name) | ansible.builtin.get_url | Use FQCN |
uri (short name) | ansible.builtin.uri | Use FQCN |
iptables | ansible.builtin.iptables | Use FQCN |
ufw | community.general.ufw | Moved to community.general |
firewalld | ansible.posix.firewalld | Moved to ansible.posix |
Command Execution
| Deprecated Module | Replacement | Notes |
|---|
command (short name) | ansible.builtin.command | Use FQCN; prefer specific modules |
shell (short name) | ansible.builtin.shell | Use FQCN; prefer specific modules |
raw (short name) | ansible.builtin.raw | Use FQCN; use only when necessary |
script (short name) | ansible.builtin.script | Use FQCN |
Cloud Providers
| Deprecated Module | Replacement | Notes |
|---|
ec2 | amazon.aws.ec2_instance | Use amazon.aws collection |
ec2_ami | amazon.aws.ec2_ami | Use amazon.aws collection |
ec2_vpc | amazon.aws.ec2_vpc_net | Use amazon.aws collection |
azure_rm_* | azure.azcollection.* | Use azure.azcollection |
gcp_* | google.cloud.* | Use google.cloud collection |
docker_container | community.docker.docker_container | Use community.docker collection |
docker_image | community.docker.docker_image | Use community.docker collection |
Database
| Deprecated Module | Replacement | Notes |
|---|
mysql_db | community.mysql.mysql_db | Use community.mysql collection |
mysql_user | community.mysql.mysql_user | Use community.mysql collection |
postgresql_db | community.postgresql.postgresql_db | Use community.postgresql collection |
postgresql_user | community.postgresql.postgresql_user | Use community.postgresql collection |
mongodb_* | community.mongodb.* | Use community.mongodb collection |
Monitoring and Logging
| Deprecated Module | Replacement | Notes |
|---|
nagios | community.general.nagios | Use community.general collection |
zabbix_* | community.zabbix.* | Use community.zabbix collection |
FQCN Migration
Why Use Fully Qualified Collection Names (FQCN)?
- Clarity: Explicitly shows which collection provides the module
- Conflict Prevention: Avoids naming conflicts between collections
- Future-Proofing: Prevents breakage when modules move between collections
- Best Practice: Recommended by Ansible for all new playbooks
Migration Examples
- name: Install nginx
apt:
name: nginx
state: present
- name: Install nginx
ansible.builtin.apt:
name: nginx
state: present
- name: Configure firewall
ufw:
rule: allow
port: '443'
- name: Configure firewall
community.general.ufw:
rule: allow
port: '443'
Installing Required Collections
When migrating to FQCN modules, ensure the required collections are installed:
ansible-galaxy collection install ansible.posix
ansible-galaxy collection install community.general
ansible-galaxy collection install community.docker
ansible-galaxy collection install community.mysql
ansible-galaxy collection install community.postgresql
ansible-galaxy collection install amazon.aws
ansible-galaxy collection install azure.azcollection
ansible-galaxy collection install google.cloud
Or create a requirements.yml:
---
collections:
- name: ansible.posix
version: ">=1.5.0"
- name: community.general
version: ">=6.0.0"
- name: community.docker
version: ">=3.0.0"
- name: community.mysql
version: ">=3.0.0"
- name: community.postgresql
version: ">=2.0.0"
Then install with:
ansible-galaxy collection install -r requirements.yml
Checking for Deprecated Modules
Use ansible-lint to identify deprecated modules in your playbooks:
ansible-lint --profile production playbook.yml
ansible-lint -L | grep deprecated
Version Compatibility Notes
- Ansible 2.9: Last version with many modules in ansible.builtin
- Ansible 2.10+: Collections separated from core
- Ansible 2.12+: Many deprecated modules removed from core
- Ansible 2.14+: FQCN strongly recommended for all modules
Resources