-
-
Notifications
You must be signed in to change notification settings - Fork 2.4k
Open
Description
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 templateroles/cloud-common/tasks/prompt_credentials.yml- credential collection patternroles/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_datavariable 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.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.yml
Main task files:
- All
roles/cloud-*/tasks/main.ymlfiles