## roles/someservice/defaults/main.yml
# Defaults
someservice_deft_db_host: db1
someservice_deft_db_name: service
someservice_deft_db_user: some_user
someservice_deft_db_pass: some_pass
# v1-specific; mostly inherits defaults
someservice_v1_enabled: true
# v2-specific; different server and db name
someservice_v2_enabled: false
someservice_v2_db_host: db2
someservice_v2_db_name: servicev2 ## group_vars/dev.yml
# Dev servers run both versions, with a different database for v2
someservice_v2_enabled: true
someservice_v2_db_host: db2-dev
## Nothing special in group_vars/prod.yml, meaning prod servers
## inherit defaults and only deploy v1 with standard config (for now).
## main_playbook.yml
- roles:
# Version 1
- role: someservice
db_name: "{{ someservice_v1_db_name| default(someservice_deft_db_name) }}"
db_host: "{{ someservice_v1_db_host| default(someservice_deft_db_host) }}" db_user: "{{ someservice_v1_db_user| default(someservice_deft_db_user) }}" db_pass: "{{ someservice_v1_db_pass| default(someservice_deft_db_pass) }}" when: someservice_v1_enabled
# Version 2
- role: someservice
db_name: "{{ someservice_v2_db_name| default(someservice_deft_db_name) }}" db_host: "{{ someservice_v2_db_host| default(someservice_deft_db_host) }}" db_user: "{{ someservice_v2_db_user| default(someservice_deft_db_user) }}" db_pass: "{{ someservice_v2_db_pass| default(someservice_deft_db_pass) }}" when: someservice_v2_enabled
# Copy/paste + search/replace as needed for future versions...
## roles/someservice/tasks/main.yml
- mysql_db: >
name: {{ db_name }}
login_host: {{ db_host }}
login_user: {{ db_user }}
login_password: {{ db_pass }}
# ... and so on