Files
algo/roles/cloud-cloudstack/tasks/prompts.yml
f55c09243d Remove Exoscale support due to CloudStack API deprecation (#14841)
* Remove Exoscale support due to CloudStack API deprecation (fixes #14839)

Exoscale deprecated their CloudStack API on May 1, 2024, migrating to a
proprietary API v2 that is incompatible with CloudStack-based tools.

Changes:
- Remove Exoscale as default CloudStack endpoint
- Add detection and clear error message for Exoscale endpoints
- Update documentation to remove Exoscale references
- Add recommendations for alternative providers
- Maintain generic CloudStack support for other providers

Users attempting to use Exoscale will now receive a helpful error message
explaining the situation and suggesting alternative providers with European
presence (Hetzner, DigitalOcean, Vultr, Scaleway).

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

* Remove remaining Exoscale references from input.yml, README, and prompts

- Removed 'Exoscale optimised' label from CloudStack in input.yml
- Removed Exoscale mention from README.md provider list
- Removed Exoscale URL example from CloudStack API endpoint prompt

* Fix typo: 'API ssecret' -> 'API secret' in CloudStack prompt

---------

Co-authored-by: Claude <noreply@anthropic.com>
2025-09-28 13:57:56 -04:00

84 lines
2.9 KiB
YAML

---
- block:
- pause:
prompt: |
Enter the API key (https://trailofbits.github.io/algo/cloud-cloudstack.html):
echo: false
register: _cs_key
when:
- cs_key is undefined
- lookup('env', 'CLOUDSTACK_KEY')|length <= 0
no_log: true
- pause:
prompt: |
Enter the API secret (https://trailofbits.github.io/algo/cloud-cloudstack.html):
echo: false
register: _cs_secret
when:
- cs_secret is undefined
- lookup('env', 'CLOUDSTACK_SECRET')|length <= 0
no_log: true
- pause:
prompt: |
Enter the API endpoint (https://trailofbits.github.io/algo/cloud-cloudstack.html)
register: _cs_url
when:
- cs_url is undefined
- lookup('env', 'CLOUDSTACK_ENDPOINT') | length <= 0
- set_fact:
algo_cs_key: "{{ cs_key | default(_cs_key.user_input | default(None)) | default(lookup('env', 'CLOUDSTACK_KEY'), true) }}"
algo_cs_token: "{{ cs_secret | default(_cs_secret.user_input | default(None)) | default(lookup('env', 'CLOUDSTACK_SECRET'), true) }}"
algo_cs_url: >-
{{ cs_url | default(_cs_url.user_input|default(None)) |
default(lookup('env', 'CLOUDSTACK_ENDPOINT'), true) }}
no_log: true
- name: Check for Exoscale API endpoint
fail:
msg: |
ERROR: Exoscale CloudStack API has been deprecated as of May 1, 2024.
Exoscale has migrated from CloudStack to their proprietary API v2, which is not compatible
with CloudStack-based tools. Algo no longer supports Exoscale deployments.
Please consider these alternative providers:
- Hetzner (provider: hetzner) - German provider with European coverage
- DigitalOcean (provider: digitalocean) - Has Amsterdam and Frankfurt regions
- Vultr (provider: vultr) - Multiple European locations
- Scaleway (provider: scaleway) - French provider
If you're using a different CloudStack provider, please provide the correct API endpoint.
when: "'exoscale.com' in algo_cs_url or 'exoscale.ch' in algo_cs_url"
- name: Get zones on cloud
cs_zone_info:
register: _cs_zones
environment:
CLOUDSTACK_KEY: "{{ algo_cs_key }}"
CLOUDSTACK_SECRET: "{{ algo_cs_token }}"
CLOUDSTACK_ENDPOINT: "{{ algo_cs_url }}"
no_log: true
- name: Extract zones from output
set_fact:
cs_zones: "{{ _cs_zones['zones'] | sort(attribute='name') }}"
- name: Set the default zone
set_fact:
default_zone: "1" # Default to first zone in the list
- pause:
prompt: |
What zone should the server be located in?
{% for z in cs_zones %}
{{ loop.index }}. {{ z['name'] }}
{% endfor %}
Enter the number of your desired zone
[{{ default_zone }}]
register: _algo_region
when: region is undefined