I do not enjoy having subdirectories involved for storing files in libvert. The virt-manager interface is just way too brutal about how you manually add storage pools. After much ranting, I wrote a bash script to add these directories for my VM disk images.
1 #!/bin/bash
2
3 set -e
4 #set -x
5 existing_pools=()
6 export existing_pools
7
8 function add_this_dir() {
9 local -n xisting_pools="$1"
10 if [ ! -d "$2" ]; then
11 echo "add_this_dir: $2 is not a directory"
12 return
13 fi
14 local shortname=`basename $2`
15 if [[ " ${xisting_pools[@]} " =~ " $2 " ]]; then
16 echo "$2 already exists"
17 sudo virsh pool-start "$shortname" &>/dev/null ||:
18 sudo virsh pool-autostart "$shortname" &>/dev/null ||:
19 return
20 fi
21 if [[ " ${xisting_pools[@]} " =~ " $shortname " ]]; then
22 echo "$shortname already exists"
23 sudo virsh pool-start "$shortname" &>/dev/null ||:
24 sudo virsh pool-autostart "$shortname" &>/dev/null ||:
25 return
26 fi
27 sudo virsh pool-define-as --name $shortname --type dir --target "$2" --source-path "$2"
28 sleep 1
29 sudo virsh pool-start "$shortname" &>/dev/null ||:
30 sudo virsh pool-autostart "$shortname" &>/dev/null ||:
31 sleep 1
32 }
33
34 while read L; do
35 if [[ x$L = x ]]; then continue; fi
36 hunks=($L)
37 existing_pools+=("${hunks[0]}")
38 done < <(sudo virsh pool-list --all | grep -v -e Autostart -e '----' )
39
40 echo "You have these existing pools defined: "
41 echo "%%${existing_pools[@]}%%"
42
43 while read D; do
44 add_this_dir existing_pools "/tank/VMs/$D"
45 done < <(ls /tank/VMs)
46 while read D; do
47 add_this_dir existing_pools "/tank/softlib/iso/$D"
48 done < <(ls /tank/softlib/iso)
