Group-based environments

Organize your Ansible inventory and variables for different environments.

Use group-based approach to organize your Ansible inventory and variables for different environments.


Problem

When managing Ansible projects for different environments such as development, test, staging, and production, it’s important to have a structured approach to organize inventory and variables. Context

Ansible allows you to define groups in inventory, which can be used to organize hosts with similar roles or attributes. Group variables can also be used to define environment-specific variables that are applied to hosts in those groups.

Solution

Use a group-based approach to organize your Ansible inventory and variables for different environments. Follow these guidelines:

  1. Define groups in your inventory file based on environments, e.g., “dev”, “test”, “staging”, and “prod”.
  2. Assign hosts to appropriate groups based on their roles or attributes, e.g., development hosts to “dev” group, production hosts to “prod” group.
  3. Define group variables in separate variable files for each environment, e.g., “group_vars/dev.yml”, “group_vars/test.yml”, etc.
  4. Define environment-specific variables in the respective group variable files, such as connection details, application settings, etc.
  5. Use the group variables in your playbooks and roles to configure hosts based on their environment.

This approach has the following benefits:

  1. Provides a clear and organized way to manage inventory and variables for different environments.
  2. Allows you to define environment-specific configurations in group variables, making it easy to customize settings for each environment.
  3. Simplifies playbook and role development, as you can use group variables to abstract environment-specific details from playbooks and roles.

Examples and implementation

Here’s an example of how you can implement the group-based approach:

Define inventory groups in your inventory file, such as “dev”, “test”, “staging”, and “prod”:

[dev]
dev-host-1 ansible_host=192.168.1.10
dev-host-2 ansible_host=192.168.1.11

[test]
test-host-1 ansible_host=192.168.2.10
test-host-2 ansible_host=192.168.2.11

[staging]
staging-host-1 ansible_host=192.168.3.10
staging-host-2 ansible_host=192.168.3.11

[prod]
prod-host-1 ansible_host=192.168.4.10
prod-host-2 ansible_host=192.168.4.11

Define group variables in separate variable files for each environment:

group_vars/
  dev.yml
  test.yml
  staging.yml
  prod.yml

Define environment-specific variables in the respective group variable files, e.g., in “group_vars/dev.yml”:

# group_vars/dev.yml
db_host: dev-db.example.com
app_debug: true