Summary
Cloud provider roles share significant duplication across both prompt files and main task files. This issue tracks consolidating common patterns into roles/cloud-common/.
Part 1: Prompt Patterns
Cloud provider prompt files (roles/cloud-*/tasks/prompts.yml) total ~704 lines with significant duplication:
| Pattern |
Files |
Lines (approx) |
| API error handling (401/403/429/5xx) |
10 |
200+ |
| Credential collection (token/key prompts) |
10 |
150+ |
| Region selection |
8 |
200+ |
Proposed Files
roles/cloud-common/tasks/api_error_handler.yml - common error message template
roles/cloud-common/tasks/prompt_credentials.yml - credential collection pattern
roles/cloud-common/tasks/prompt_region.yml - region selection pattern
Part 2: Main Task Patterns
All 11 cloud provider roles share nearly identical patterns in tasks/main.yml:
Output Facts (duplicated in all 11 roles)
- set_fact:
cloud_instance_ip: "{{ instance_ip }}"
ansible_ssh_user: "{{ ssh_user }}"
ansible_ssh_port: "{{ ssh_port }}"
cloudinit: "{{ cloudinit_status }}"
Cloud-Init Template Loading (inconsistent encoding)
cloud-ec2: lookup('template', ...) | b64encode
cloud-azure: lookup('template', ...) | string
cloud-gce: lookup('template', ...) | b64encode
cloud-digitalocean: lookup('template', ...)
Proposed Files
roles/cloud-common/tasks/set_output_facts.yml - shared output facts
- Standardized
cloud_init_user_data variable with consistent encoding
Benefits
- Reduces code duplication across 11 roles (~700+ lines → ~250 lines for prompts alone)
- Adding a new cloud provider becomes copying a small config instead of 100+ lines of boilerplate
- Bug fixes apply to all providers at once
- Ensures consistent behavior and UX across providers
Files Affected
Prompt files:
roles/cloud-digitalocean/tasks/prompts.yml (106 lines)
roles/cloud-ec2/tasks/prompts.yml (138 lines)
roles/cloud-gce/tasks/prompts.yml (85 lines)
roles/cloud-azure/tasks/prompts.yml (25 lines)
roles/cloud-hetzner/tasks/prompts.yml
roles/cloud-linode/tasks/prompts.yml
roles/cloud-vultr/tasks/prompts.yml
roles/cloud-scaleway/tasks/prompts.yml
roles/cloud-lightsail/tasks/prompts.yml
roles/cloud-cloudstack/tasks/prompts.yml
Main task files:
- All
roles/cloud-*/tasks/main.yml files
Summary
Cloud provider roles share significant duplication across both prompt files and main task files. This issue tracks consolidating common patterns into
roles/cloud-common/.Part 1: Prompt Patterns
Cloud provider prompt files (
roles/cloud-*/tasks/prompts.yml) total ~704 lines with significant duplication:Proposed Files
roles/cloud-common/tasks/api_error_handler.yml- common error message templateroles/cloud-common/tasks/prompt_credentials.yml- credential collection patternroles/cloud-common/tasks/prompt_region.yml- region selection patternPart 2: Main Task Patterns
All 11 cloud provider roles share nearly identical patterns in
tasks/main.yml:Output Facts (duplicated in all 11 roles)
Cloud-Init Template Loading (inconsistent encoding)
Proposed Files
roles/cloud-common/tasks/set_output_facts.yml- shared output factscloud_init_user_datavariable with consistent encodingBenefits
Files Affected
Prompt files:
roles/cloud-digitalocean/tasks/prompts.yml(106 lines)roles/cloud-ec2/tasks/prompts.yml(138 lines)roles/cloud-gce/tasks/prompts.yml(85 lines)roles/cloud-azure/tasks/prompts.yml(25 lines)roles/cloud-hetzner/tasks/prompts.ymlroles/cloud-linode/tasks/prompts.ymlroles/cloud-vultr/tasks/prompts.ymlroles/cloud-scaleway/tasks/prompts.ymlroles/cloud-lightsail/tasks/prompts.ymlroles/cloud-cloudstack/tasks/prompts.ymlMain task files:
roles/cloud-*/tasks/main.ymlfiles