Skip to content

Commit 8522925

Browse files
committed
Reuse dev-scripts pools to avoid conflicts
Dev-scripts creates pools with varying names (oooq_pool, eci-XXXX-1). Our script now finds and reuses whatever pool points to our cluster path instead of trying to create a new one, avoiding conflicts. Also fixes cleanup to remove pools by path, not just by name.
1 parent 0ad92e2 commit 8522925

2 files changed

Lines changed: 74 additions & 26 deletions

File tree

scripts/cleanup.sh

Lines changed: 55 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -253,11 +253,44 @@ if [ -n "${WORKING_DIR:-}" ]; then
253253
fi
254254

255255
# Clean up cluster-specific libvirt storage pools
256-
# - ${CLUSTER_NAME}: dev-scripts pool (shared by masters and Landing Zone with flat structure)
257-
# - ${CLUSTER_NAME}-lz: Legacy separate Landing Zone pool (backwards compatibility)
258-
# - ${CLUSTER_NAME}_pool: Legacy separate Landing Zone pool (backwards compatibility)
259-
# Note: New deployments only create ${CLUSTER_NAME} pool, but we check all for cleanup
256+
# Find all pools that point to our cluster directory, regardless of name
257+
# Dev-scripts may create pools with various names (oooq_pool, ${CLUSTER_NAME}, etc.)
258+
CLUSTER_POOL_PATH=""
259+
if [ -n "${WORKING_DIR:-}" ]; then
260+
if [[ "${WORKING_DIR}" == *"/clusters/${CLUSTER_NAME}" ]]; then
261+
CLUSTER_POOL_PATH="${WORKING_DIR}/pool"
262+
elif [ -n "${BASE_WORKING_DIR:-}" ]; then
263+
CLUSTER_POOL_PATH="${BASE_WORKING_DIR}/clusters/${CLUSTER_NAME}/pool"
264+
fi
265+
fi
266+
267+
# Build list of pools to clean up
268+
POOLS_TO_CLEAN=()
269+
270+
# Add standard pool names we might have created
260271
for POOL_NAME in "${CLUSTER_NAME}" "${CLUSTER_NAME}-lz" "${CLUSTER_NAME}_pool"; do
272+
if sudo virsh pool-uuid "$POOL_NAME" > /dev/null 2>&1; then
273+
POOLS_TO_CLEAN+=("$POOL_NAME")
274+
fi
275+
done
276+
277+
# Also find any pool pointing to our cluster-specific path (handles oooq_pool, etc.)
278+
if [ -n "$CLUSTER_POOL_PATH" ]; then
279+
while IFS= read -r pool; do
280+
if [ -n "$pool" ]; then
281+
POOL_PATH_CHECK=$(sudo virsh pool-dumpxml "$pool" 2>/dev/null | grep -oP '(?<=<path>).*(?=</path>)' || echo "")
282+
if [ "$POOL_PATH_CHECK" = "$CLUSTER_POOL_PATH" ]; then
283+
# Check if not already in the list
284+
if [[ ! " ${POOLS_TO_CLEAN[@]} " =~ " ${pool} " ]]; then
285+
info "Found pool '$pool' pointing to cluster path, will clean it up"
286+
POOLS_TO_CLEAN+=("$pool")
287+
fi
288+
fi
289+
fi
290+
done < <(sudo virsh pool-list --all --name)
291+
fi
292+
293+
for POOL_NAME in "${POOLS_TO_CLEAN[@]}"; do
261294
if sudo virsh pool-uuid "$POOL_NAME" > /dev/null 2>&1; then
262295
info "Removing libvirt storage pool: $POOL_NAME"
263296

@@ -378,14 +411,31 @@ if [ -n "${WORKING_DIR:-}" ]; then
378411
fi
379412
fi
380413

381-
# Check for leftover pool definitions (dev-scripts pool and legacy Landing Zone pools)
414+
# Check for leftover pool definitions (by name or by path)
382415
LEFTOVER_POOLS=""
416+
417+
# Check standard pool names
383418
for POOL_NAME in "${CLUSTER_NAME}" "${CLUSTER_NAME}-lz" "${CLUSTER_NAME}_pool"; do
384419
if sudo virsh pool-uuid "$POOL_NAME" > /dev/null 2>&1; then
385420
LEFTOVER_POOLS="${LEFTOVER_POOLS}${POOL_NAME} "
386421
fi
387422
done
388423

424+
# Check for any pool pointing to cluster path (handles oooq_pool, etc.)
425+
if [ -n "$CLUSTER_POOL_PATH" ]; then
426+
while IFS= read -r pool; do
427+
if [ -n "$pool" ]; then
428+
POOL_PATH_CHECK=$(sudo virsh pool-dumpxml "$pool" 2>/dev/null | grep -oP '(?<=<path>).*(?=</path>)' || echo "")
429+
if [ "$POOL_PATH_CHECK" = "$CLUSTER_POOL_PATH" ]; then
430+
# Add if not already in list
431+
if [[ ! "$LEFTOVER_POOLS" =~ $pool ]]; then
432+
LEFTOVER_POOLS="${LEFTOVER_POOLS}${pool} "
433+
fi
434+
fi
435+
fi
436+
done < <(sudo virsh pool-list --all --name)
437+
fi
438+
389439
if [ -n "$LEFTOVER_POOLS" ]; then
390440
warning "Found leftover pool definition(s): $LEFTOVER_POOLS"
391441
else

scripts/provision_landing_zone.sh

Lines changed: 19 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -170,12 +170,13 @@ if sudo virsh list --all | grep -q "$LZ_VM_NAME"; then
170170
info "✓ Existing VM removed"
171171
fi
172172

173-
# Create cluster-specific storage pool if it doesn't exist
174-
# dev-scripts creates the pool directory but doesn't always register it with libvirt
173+
# Find or create storage pool for cluster-specific path
174+
# dev-scripts may create a pool (possibly named oooq_pool) pointing to our cluster path
175+
# We'll use whatever pool exists for our path, or create one if needed
175176
if ! sudo virsh pool-uuid "$POOL_NAME" > /dev/null 2>&1; then
176-
info "Cluster-specific pool '$POOL_NAME' not found, creating it..."
177+
info "Pool '$POOL_NAME' not found, checking if any pool uses path $POOL_PATH..."
177178

178-
# Check if any pool already uses this path (would cause conflict)
179+
# Check if any pool already points to our cluster-specific path
179180
EXISTING_POOL=$(sudo virsh pool-list --all --name | while read pool; do
180181
if [ -n "$pool" ]; then
181182
POOL_PATH_CHECK=$(sudo virsh pool-dumpxml "$pool" 2>/dev/null | grep -oP '(?<=<path>).*(?=</path>)' || echo "")
@@ -187,22 +188,18 @@ if ! sudo virsh pool-uuid "$POOL_NAME" > /dev/null 2>&1; then
187188
done)
188189
189190
if [ -n "$EXISTING_POOL" ]; then
190-
error "Storage pool path conflict detected!"
191-
error " Path: $POOL_PATH"
192-
error " Already used by pool: $EXISTING_POOL"
193-
error " Trying to create pool: $POOL_NAME"
194-
error ""
195-
error "This usually means another cluster is using the same directory."
196-
error "Check running clusters: sudo virsh pool-list --all"
197-
error "Or cleanup orphaned pools: make clean-orphaned"
198-
exit 1
199-
fi
191+
# A pool exists for our path - use it regardless of name
192+
info "Found existing pool '$EXISTING_POOL' using path $POOL_PATH, will use it"
193+
POOL_NAME="$EXISTING_POOL"
194+
else
195+
# No pool exists for our path - create one
196+
info "No pool found for path $POOL_PATH, creating pool '$POOL_NAME'..."
200197
201-
# Create the pool directory if it doesn't exist
202-
sudo mkdir -p "$POOL_PATH"
198+
# Create the pool directory if it doesn't exist
199+
sudo mkdir -p "$POOL_PATH"
203200
204-
# Define and start the pool
205-
sudo virsh pool-define /dev/stdin <<EOF
201+
# Define and start the pool
202+
sudo virsh pool-define /dev/stdin <<EOF
206203
<pool type='dir'>
207204
<name>$POOL_NAME</name>
208205
<target>
@@ -216,9 +213,10 @@ if ! sudo virsh pool-uuid "$POOL_NAME" > /dev/null 2>&1; then
216213
</pool>
217214
EOF
218215
219-
sudo virsh pool-start "$POOL_NAME"
220-
sudo virsh pool-autostart "$POOL_NAME"
221-
info "✓ Storage pool '$POOL_NAME' created and started"
216+
sudo virsh pool-start "$POOL_NAME"
217+
sudo virsh pool-autostart "$POOL_NAME"
218+
info "✓ Storage pool '$POOL_NAME' created and started"
219+
fi
222220
else
223221
info "Using existing storage pool: $POOL_NAME"
224222
fi

0 commit comments

Comments
 (0)