56 lines
2.3 KiB
Django/Jinja
56 lines
2.3 KiB
Django/Jinja
# 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 %}
|