# Ansible Documentation

## About Ansible

Ansible is an IT automation tool. It can configure systems, deploy software, and orchestrate more advanced IT tasks such as continuous deployments or zero downtime rolling updates.

Ansible’s main goals are simplicity and ease-of-use. It also has a strong focus on security and reliability, featuring a minimum of moving parts, usage of OpenSSH for transport (with other transports and pull modes as alternatives), and a language that is designed around auditability by humans–even those not familiar with the program.

We believe simplicity is relevant to all sizes of environments, so we design for busy users of all types: developers, sysadmins, release engineers, IT managers, and everyone in between. Ansible is appropriate for managing all environments, from small setups with a handful of instances to enterprise environments with many thousands of instances.

Ansible manages machines in an agent-less manner. There is never a question of how to upgrade remote daemons or the problem of not being able to manage systems because daemons are uninstalled. Because OpenSSH is one of the most peer-reviewed open source components, security exposure is greatly reduced. Ansible is decentralized–it relies on your existing OS credentials to control access to remote machines. If needed, Ansible can easily connect with Kerberos, LDAP, and other centralized authentication management systems.

This documentation covers the version of Ansible noted in the upper left corner of this page. We maintain multiple versions of Ansible and of the documentation, so please be sure you are using the version of the documentation that covers the version of Ansible you’re using. For recent features, we note the version of Ansible where the feature was added.

Ansible releases a new major release of Ansible approximately three to four times per year. The core application evolves somewhat conservatively, valuing simplicity in language design and setup. However, the community around new modules and plugins being developed and contributed moves very quickly, adding many new modules in each release.

Installation, Upgrade & Configuration

- Installation Guide
  - Basics / What Will Be Installed
  - What Version To Pick?
  - Control Machine Requirements
  - Managed Node Requirements
  - Installing the Control Machine
  - Ansible on GitHub
- Configuring Ansible
  - Configuration file
  - Environmental configuration
  - Command line options
- Ansible Porting Guides
  - Ansible 2.0 Porting Guide
  - Ansible 2.3 Porting Guide
  - Ansible 2.4 Porting Guide
  - Ansible 2.5 Porting Guide
  - Ansible 2.6 Porting Guide
  - Ansible 2.7 Porting Guide

Using Ansible

- User Guide
  - Ansible Quickstart
  - Getting Started
  - Working with Command Line Tools
  - Introduction To Ad-Hoc Commands
  - Working with Inventory
  - Working With Dynamic Inventory
  - Working With Playbooks
  - Understanding Privilege Escalation
  - Ansible Vault
  - Working with Patterns
  - Working With Modules
  - Working With Plugins
  - BSD Support
  - Windows Guides

Contributing to Ansible

- Ansible Community Guide
  - Community Code of Conduct
  - How can I help?
  - Reporting Bugs And Requesting Features
  - Contributing to the Ansible Documentation
  - Communicating
  - The Ansible Development Process
  - Contributors License Agreement
  - Triage Process
  - Other Tools And Programs
  - Ansible Style Guide
  - Committers Guidelines
  - Module Maintainer Guidelines
  - Release manager guidelines
  - GitHub Admins

Extending Ansible

- Developer Guide
  - Adding modules and plugins locally
  - Should you develop a module?
  - Ansible module development: getting started
  - Contributing your module to Ansible
  - Conventions, tips, and pitfalls
  - Ansible and Python 3
  - Debugging modules
  - Module format and documentation
  - Windows module development walkthrough
  - Developing Cisco ACI modules
  - Information for submitting a group of modules
  - Testing Ansible
  - The lifecycle of an Ansible module
  - Developing plugins
  - Developing dynamic inventory
  - Developing the Ansible Core Engine
  - Ansible module architecture
  - Python API
  - Rebasing a pull request
  - Appendix: Module Utilities
  - Ansible Architecture

Scenario Guides

- Cisco ACI Guide
  - What is Cisco ACI ?
  - Using the ACI modules
  - ACI authentication
  - Using ACI REST with Ansible
  - Operational examples
  - APIC error messages
  - Known issues
  - ACI Ansible community
- Amazon Web Services Guide
  - Introduction
  - Authentication
  - Provisioning
  - Host Inventory
  - Tags And Groups And Variables
  - Autoscaling with Ansible Pull
  - Autoscaling with Ansible Tower
  - Ansible With (And Versus) CloudFormation
  - AWS Image Building With Ansible
  - Next Steps: Explore Modules
- Microsoft Azure Guide
  - Requirements
  - Authenticating with Azure
  - Other Cloud Environments
  - Creating Virtual Machines
  - Dynamic Inventory Script
- CloudStack Cloud Guide
  - Introduction
  - Prerequisites
  - Limitations and Known Issues
  - Credentials File
  - Regions
  - Environment Variables
  - Use Cases
- Getting Started with Docker
  - Requirements
  - Connecting to the Docker API
  - Dynamic Inventory Script
- Google Cloud Platform Guide
  - Introduction
  - Introduction
  - Credentials
  - GCE Dynamic Inventory
- Infoblox Guide
  - Prerequisites
  - Credentials and authenticating
  - NIOS lookup plugins
  - Use cases with modules
  - Dynamic inventory script
- Getting Started with Kubernetes and OpenShift
  - Requirements
  - Installation and use
  - Authenticating with the API
- Cisco Meraki Guide
  - What is Cisco Meraki?
  - Using the Meraki modules
  - Common Parameters
  - Meraki Authentication
  - Returned Data Structures
  - Handling Returned Data
  - Error Handling
- Using Ansible with the Packet host
  - Introduction
  - Requirements
  - Device Creation
  - Updating Devices
  - More Complex Playbooks
  - Dynamic Inventory Script
- Rackspace Cloud Guide
  - Introduction
  - Credentials File
  - Provisioning
  - Host Inventory
  - Use Cases
  - Advanced Usage
- Continuous Delivery and Rolling Upgrades
  - Introduction
  - Site Deployment
  - Reusable Content: Roles
  - Configuration: Group Variables
  - The Rolling Upgrade
  - Managing Other Load Balancers
  - Continuous Delivery End-To-End
- Using Vagrant and Ansible
  - Introduction
  - Vagrant Setup
  - Running Ansible Manually
  - Advanced Usages
- Vultr Guide
  - Requirements
  - Configuration
  - Authentication
  - Usage
  - Dynamic Inventory

Ansible for VMWare

- Ansible for VMware
  - Introduction to Ansible for VMware
  - Ansible for VMware Concepts
  - VMware Prerequisites
  - Getting Started with Ansible for VMware
  - Using VMware dynamic inventory plugin
  - Ansible for VMware Scenarios
  - Ansible VMware Module Guide
  - Troubleshooting Ansible for VMware
  - List of useful links to VMware
  - Ansible VMware FAQ

Ansible for Network Automation

- Ansible for Network Automation
  - Getting Started with Ansible for Network Automation
  - Advanced Topics with Ansible for Network Automation

Reference & Appendices

- Ansible Galaxy
- Return Values
- YAML Syntax
- Python 3 Support
- Release and maintenance
- Testing Strategies
- Frequently Asked Questions
- Glossary
- Ansible Reference: Module Utilities
- Special Variables
- Ansible Tower

Roadmaps

- Ansible Roadmap
  - Ansible 2.1
  - Ansible 2.2
  - Ansible 2.3
  - Ansible 2.4
  - Ansible 2.5
  - Ansible 2.6
  - Ansible 2.7