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 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280
|
#!/usr/bin/env bash
# Copyright (C) 2015 Red Hat, Inc. All rights reserved.
#
# This copyrighted material is made available to anyone wishing to use,
# modify, copy, or redistribute it subject to the terms and conditions
# of the GNU General Public License v.2.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
SKIP_WITH_LVMPOLLD=1
. lib/inittest
aux prepare_pvs 4 12
vgcreate $SHARED -s 4m $vg1 "$dev1" "$dev2"
vgcreate $SHARED -s 4m $vg2 "$dev3" "$dev4"
# vg1/lv1 mapped onto dev1
lvcreate -l1 -n "lv1" $vg1 "$dev1"
# vg1/lv2 mapped onto dev1 and dev2 (2 segments)
lvcreate -l3 -n "lv2" $vg1 "$dev1" "$dev2"
# vg2/lv3 mapped onto dev3
lvcreate -l1 -n "lv3" $vg2 "$dev3"
# vg2/lv4 mapped onto dev3
lvcreate -l1 -n "lv4" $vg2 "$dev3" "$dev4"
# vg2/lv1 mapped onto "$dev4" (same LV name as vg1/lv1)
lvcreate -l1 -n "lv1" $vg2 "$dev4"
###########################################
# exercise process_each_vg with selection #
###########################################
# select contains VGS field
# direct vg name match
vgchange --addtag 101 -S "vg_name=$vg1"
check vg_field $vg1 vg_tags 101
not check vg_field $vg2 vg_tags 101
vgchange --deltag 101
# select contains LVS field
vgchange --addtag 102 -S "lv_name=lv2"
check vg_field $vg1 vg_tags 102
not check vg_field $vg2 vg_tags 102
vgchange --deltag 102
vgchange --addtag 103 -S "lv_name=lv1"
check vg_field $vg1 vg_tags 103
check vg_field $vg2 vg_tags 103
vgchange --deltag 103
# select contains SEGS field
vgchange --addtag 104 -S 'seg_start=8m'
check vg_field $vg1 vg_tags 104
not check vg_field $vg2 vg_tags 104
vgchange --deltag 104
vgchange --addtag 105 -S "seg_start=0m"
check vg_field $vg1 vg_tags 105
check vg_field $vg2 vg_tags 105
vgchange --deltag 105
# select contains PVS field
vgchange --addtag 106 -S pv_name="$dev1"
check vg_field $vg1 vg_tags 106
not check vg_field $vg2 vg_tags 106
vgchange --deltag 106
vgchange --addtag 107 -S "pv_size>0m"
check vg_field $vg1 vg_tags 107
check vg_field $vg2 vg_tags 107
vgchange --deltag 107
# select contains PVSEGS field
vgchange --addtag 108 -S "pvseg_size=2"
check vg_field $vg1 vg_tags 108
not check vg_field $vg2 vg_tags 108
vgchange --deltag 108
vgchange --addtag 109 -S "pvseg_size=1"
check vg_field $vg1 vg_tags 109
check vg_field $vg2 vg_tags 109
vgchange --deltag 109
# if VG name or tag is supplied together with the
# selection, the result is an intersection of both
vgchange --addtag 110 -S "vg_name=$vg1" $vg2
not check vg_field $vg1 vg_tags 110
not check vg_field $vg2 vg_tags 110
vgchange --deltag 110
vgchange --addtag 111 -S "vg_name=$vg1" $vg1
check vg_field $vg1 vg_tags 111
not check vg_field $vg2 vg_tags 111
vgchange --deltag 111
vgchange --addtag "tag" $vg1
vgchange --addtag 112 -S "vg_name=$vg2" @tag
not check vg_field $vg1 vg_tags "tag,112"
not check vg_field $vg2 vg_tags "tag,112"
vgchange --deltag 112
vgchange --addtag 113 -S "vg_name=$vg1" @tag
check vg_field $vg1 vg_tags "113,tag"
not check vg_field $vg2 vg_tags "113,tag"
vgchange --deltag 113 --deltag tag
###########################################
# exercise process_each_lv with selection #
###########################################
# select contains VGS field
lvchange --addtag 201 -S "vg_name=$vg1"
check lv_field $vg1/lv1 lv_tags 201
check lv_field $vg1/lv2 lv_tags 201
not check lv_field $vg2/lv3 lv_tags 201
not check lv_field $vg2/lv4 lv_tags 201
not check lv_field $vg2/lv1 lv_tags 201
lvchange --deltag 201 $vg1 $vg2
# select contains LVS field
lvchange --addtag 202 -S "lv_name=lv2"
not check lv_field $vg1/lv1 lv_tags 202
check lv_field $vg1/lv2 lv_tags 202
not check lv_field $vg2/lv3 lv_tags 202
not check lv_field $vg2/lv4 lv_tags 202
not check lv_field $vg2/lv1 lv_tags 202
lvchange --deltag 202 $vg1 $vg2
lvchange --addtag 203 -S "lv_name=lv1"
check lv_field $vg1/lv1 lv_tags 203
not check lv_field $vg1/lv2 lv_tags 203
not check lv_field $vg2/lv3 lv_tags 203
not check lv_field $vg2/lv4 lv_tags 203
check lv_field $vg2/lv1 lv_tags 203
lvchange --deltag 203 $vg1 $vg2
# select contains SEGS field
lvchange --addtag 204 -S "seg_start=8m"
not check lv_field $vg1/lv1 lv_tags 204
check lv_field $vg1/lv2 lv_tags 204
not check lv_field $vg2/lv3 lv_tags 204
not check lv_field $vg2/lv4 lv_tags 204
not check lv_field $vg2/lv1 lv_tags 204
lvchange --deltag 204 $vg1 $vg2
# select contains PVS field - COMBINATION NOT ALLOWED!
lvchange --addtag 205 -S pv_name="$dev1" 2>err
grep "Can't report LV and PV fields at the same time" err
grep "Selection failed for LV" err
not check lv_field $vg1/lv1 lv_tags 205
not check lv_field $vg1/lv2 lv_tags 205
not check lv_field $vg2/lv3 lv_tags 205
not check lv_field $vg2/lv4 lv_tags 205
not check lv_field $vg2/lv1 lv_tags 205
# select contains PVSEGS field - COMBINATION NOT ALLOWED!
lvchange --addtag 206 -S "pvseg_start>=0" 2>err
grep "Can't report LV and PV fields at the same time" err
grep "Selection failed for LV" err
not check lv_field $vg1/lv1 lv_tags 206
not check lv_field $vg1/lv2 lv_tags 206
not check lv_field $vg2/lv3 lv_tags 206
not check lv_field $vg2/lv4 lv_tags 206
not check lv_field $vg2/lv1 lv_tags 206
# if LV name or tag is supplied together with the
# selection, the result is an intersection of both
lvchange --addtag 207 -S "lv_name=lv2" $vg1/lv1
not check lv_field $vg1/lv1 lv_tags 207
not check lv_field $vg1/lv2 lv_tags 207
not check lv_field $vg2/lv3 lv_tags 207
not check lv_field $vg2/lv4 lv_tags 207
not check lv_field $vg2/lv1 lv_tags 207
lvchange --deltag 207 $vg1 $vg2
lvchange --addtag 208 -S "lv_name=lv2" $vg1/lv2
not check lv_field $vg1/lv1 lv_tags 208
check lv_field $vg1/lv2 lv_tags 208
not check lv_field $vg2/lv3 lv_tags 208
not check lv_field $vg2/lv4 lv_tags 208
not check lv_field $vg2/lv1 lv_tags 208
lvchange --deltag 208 $vg1 $vg2
lvchange --addtag "tag" $vg1/lv2
lvchange --addtag 209 -S "lv_name=lv3" @tag
not check lv_field $vg1/lv1 lv_tags "209,tag"
not check lv_field $vg1/lv2 lv_tags "209,tag"
not check lv_field $vg2/lv3 lv_tags "209,tag"
not check lv_field $vg2/lv4 lv_tags "209,tag"
not check lv_field $vg2/lv1 lv_tags "209,tag"
lvchange --deltag 209 $vg1 $vg2
lvchange --addtag 210 -S "lv_name=lv2" @tag
not check lv_field $vg1/lv1 lv_tags "210,tag"
check lv_field $vg1/lv2 lv_tags "210,tag"
not check lv_field $vg2/lv3 lv_tags "210,tag"
not check lv_field $vg2/lv4 lv_tags "210,tag"
not check lv_field $vg2/lv1 lv_tags "210,tag"
lvchange --deltag 210 --deltag tag $vg1 $vg2
###########################################
# exercise process_each_pv with selection #
###########################################
# select contains VGS field
pvchange --addtag 301 -S "vg_name=$vg1"
check pv_field "$dev1" pv_tags 301
check pv_field "$dev2" pv_tags 301
not check pv_field "$dev3" pv_tags 301
not check pv_field "$dev4" pv_tags 301
pvchange -a --deltag 301
# select contains LVS field
pvchange --addtag 302 -S "lv_name=lv2"
check pv_field "$dev1" pv_tags 302
check pv_field "$dev2" pv_tags 302
not check pv_field "$dev3" pv_tags 302
not check pv_field "$dev4" pv_tags 302
pvchange -a --deltag 302
# select contains SEGS field
pvchange --addtag 303 -S "seg_start=8m"
check pv_field "$dev1" pv_tags 303
not check pv_field "$dev2" pv_tags 303
not check pv_field "$dev3" pv_tags 303
not check pv_field "$dev4" pv_tags 303
pvchange -a --deltag 303
# select contains PVS field
pvchange --addtag 304 -S pv_name="$dev1"
check pv_field "$dev1" pv_tags 304
not check pv_field "$dev2" pv_tags 304
not check pv_field "$dev3" pv_tags 304
not check pv_field "$dev4" pv_tags 304
pvchange -a --deltag 304
# select contains PVSEGS field
pvchange --addtag 305 -S "pvseg_size=2"
not check pv_field "$dev1" pv_tags 305
check pv_field "$dev2" pv_tags 305
not check pv_field "$dev3" pv_tags 305
not check pv_field "$dev4" pv_tags 305
pvchange -a --deltag 305
# if PV name or tag is supplied together with the
# selection, the result is an intersection of both
pvchange --addtag 306 -S pv_name="$dev1" "$dev2"
not check pv_field "$dev1" pv_tags 306
not check pv_field "$dev2" pv_tags 306
not check pv_field "$dev3" pv_tags 306
not check pv_field "$dev4" pv_tags 306
pvchange -a --deltag 306
pvchange --addtag 307 -S pv_name="$dev1" "$dev1"
check pv_field "$dev1" pv_tags 307
not check pv_field "$dev2" pv_tags 307
not check pv_field "$dev3" pv_tags 307
not check pv_field "$dev4" pv_tags 307
pvchange -a --deltag 307
pvchange --addtag "tag" "$dev1"
pvchange --addtag 308 -S pv_name="$dev2" @tag
not check pv_field "$dev1" pv_tags "308,tag"
not check pv_field "$dev2" pv_tags "308,tag"
not check pv_field "$dev3" pv_tags "308,tag"
not check pv_field "$dev4" pv_tags "308,tag"
pvchange --deltag 308 "$dev1"
pvchange --addtag 309 -S pv_name="$dev1" @tag
check pv_field "$dev1" pv_tags "309,tag"
not check pv_field "$dev2" pv_tags "309,tag"
not check pv_field "$dev3" pv_tags "309,tag"
not check pv_field "$dev4" pv_tags "309,tag"
pvchange -a --deltag 309 --deltag tag
#########################
# special cases to test #
#########################
# if calling vgremove, make sure we're doing selection per-VG, not per-LV
# (vgremove calls process_each_vg with vgremove_single which itself
# iterates over LVs with process_each_lv_in_vg - so internally it actually
# operates per-LV, but we still need the selection to be done per-VG)
vgremove --yes -S 'lv_name=lv2' # should remove whole vg1, not just the lv2
vgremove --yes $vg2
|