-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathnode-orphan-vm-file-finder.bash
executable file
·62 lines (62 loc) · 2.19 KB
/
node-orphan-vm-file-finder.bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
#!/bin/bash
set -e
ANK_IN_USE=()
ORPHANED_FILES=()
ERRORED_FILES=()
VM_LIB=$(anka config vm_lib_dir)
[[ ! "${VM_LIB}" =~ /$ ]] && VM_LIB="${VM_LIB}/"
IMG_LIB=$(anka config img_lib_dir)
[[ ! "${IMG_LIB}" =~ /$ ]] && IMG_LIB="${IMG_LIB}/"
STATE_LIB=$(anka config state_lib_dir)
[[ ! "${STATE_LIB}" =~ /$ ]] && STATE_LIB="${STATE_LIB}/"
echo "VM_LIB: ${VM_LIB}"
echo "IMG_LIB: ${IMG_LIB}"
echo "STATE_LIB: ${STATE_LIB}"
echo "========================"
ANKA_IMAGE_BINARY="/Library/Application Support/Veertu/Anka/bin/anka_image"
function recurse_ank_layers() {
local ANK_DIR=$1
local ANK_FILE=$2
#echo "Adding: $ANK_FILE"
ANK_IN_USE+=( "$ANK_FILE" )
if "$ANKA_IMAGE_BINARY" info "${ANK_DIR}$ANK_FILE" 1>/dev/null; then
while true; do
FOUNDATION_ANK_FILE=$("$ANKA_IMAGE_BINARY" info "${ANK_DIR}$ANK_FILE" | grep 'Base Image:' | awk -F: '{ print $NF }' | xargs)
if [ "$FOUNDATION_ANK_FILE" == "" ]; then
break
fi
recurse_ank_layers "$ANK_DIR" "$FOUNDATION_ANK_FILE"
break
done
else
ERRORED_FILES+=( "${ANK_DIR}$ANK_FILE" )
fi
}
IFS=$'\n'
for YAML_FILE in $(find "$(echo ${VM_LIB} | rev | cut -d/ -f2-99 | rev)" -name '*.yaml'); do
echo "Searching $YAML_FILE..."
# FOUND_PATH="$(echo "$YAML_FILE" | rev | cut -d/ -f2-99 | rev)"
IMG_ANK=$(grep -E "^ +file:.*.ank" "$YAML_FILE" | grep '.ank' | awk '{ print $NF }' || true)
STATE_ANK=$(grep -E "state_file:.*.ank" "$YAML_FILE" | grep '.ank' | awk '{ print $NF }' || true)
if [ "$IMG_ANK" != "" ]; then
recurse_ank_layers "$IMG_LIB" "$IMG_ANK"
fi
if [ "$STATE_ANK" != "" ]; then
recurse_ank_layers "$STATE_LIB" "$STATE_ANK"
fi
done
echo "=========================================="
FILE_ARRAY=($(find "$(echo ${IMG_LIB} | rev | cut -d/ -f2-99 | rev)" \( -name '*.ank' -o -name '*.ank.*' \) -type f))
FILE_ARRAY+=($(find "$(echo ${STATE_LIB} | rev | cut -d/ -f2-99 | rev)" \( -name '*.ank' -o -name '*.ank.*' \) -type f))
for ANK_FILE in "${FILE_ARRAY[@]}"; do
if [[ ! "${ANK_IN_USE[@]}" =~ $(basename "$ANK_FILE") ]]; then
echo "$ANK_FILE - ORPHANED"
# else
# echo "$ANK_FILE - REFERENCED"
fi
done
echo "=========================================="
for ANK_FILE in "${ERRORED_FILES[@]}"; do
echo "$ANK_FILE - ERRORED"
done
IFS=