provisioning-catalog/providers/hetzner/templates/hetzner_volumes.j2

57 lines
2.3 KiB
Text
Raw Permalink Normal View History

# Load previous state
if [ -f "$STATE_DIR/.env" ]; then
source "$STATE_DIR/.env"
fi
{% if volumes and volumes|length > 0 %}
echo ""
echo "=== Processing Volumes ==="
{% for volume in volumes %}
echo ""
echo "Processing volume: {{ volume.name }} (state={{ volume.volume_state | default(value='new') }})"
{# ── Step 1: Create if new ────────────<E29480><E29480>───────────────────────────────── #}
{% if volume.volume_state is not defined or volume.volume_state == "new" %}
if hcloud volume describe "{{ volume.name }}" &>/dev/null; then
echo " Volume '{{ volume.name }}' already exists, skipping creation"
else
hcloud volume create \
--name "{{ volume.name }}" \
--size "{{ volume.size }}" \
--location "{{ volume.location | default(value='nbg1') }}" \
--format "{{ volume.format | default(value='ext4') }}"
echo " ✓ Volume '{{ volume.name }}' created ({{ volume.size }}GB)"
fi
{% else %}
echo " Volume '{{ volume.name }}' pre-existing — skipping creation (no format)"
{% endif %}
{# ── Step 2: Attach ───────────<E29480><E29480>───────────────────────────────────────── #}
{% if server is defined and server.hostname is defined %}
_vol_server=$(HJSON="$(hcloud volume describe "{{ volume.name }}" -o json 2>/dev/null)" \
nu -c '$env.HJSON | from json | get -o server.name | default ""' 2>/dev/null || echo "")
if [ "$_vol_server" = "{{ server.hostname }}" ]; then
echo " Volume '{{ volume.name }}' already attached to '{{ server.hostname }}'"
elif [ -n "$_vol_server" ]; then
echo " ⚠ Volume '{{ volume.name }}' attached to a different server: $_vol_server — skipping"
else
hcloud volume attach "{{ volume.name }}" --server "{{ server.hostname }}"
echo " ✓ Volume '{{ volume.name }}' attached to '{{ server.hostname }}'"
fi
{% else %}
echo " No server specified — volume created/exists but not attached"
{% endif %}
{# Format and mount are handled by the vol-prepare taskserv on the remote server #}
{% endfor %}
echo ""
echo "=== Volume Deployment Complete ==="
echo "VOLUME_IDS={{ volumes | map(attribute='name') | join(d=',') }}" >> "$STATE_DIR/.env"
{% else %}
echo "No volumes defined for this configuration."
{% endif %}