]> git.proxmox.com Git - ceph.git/blob - ceph/src/test/cli-integration/rbd/formatted-output.t
aefdbf91e344a7016c8c03d1df4a00fc39fa1051
[ceph.git] / ceph / src / test / cli-integration / rbd / formatted-output.t
1 ls on empty pool never containing images
2 ========================================
3 $ ceph osd pool create rbd_other 8
4 pool 'rbd_other' created
5 $ rados -p rbd rm rbd_directory >/dev/null 2>&1 || true
6 $ rbd ls
7 $ rbd ls --format json
8 [] (no-eol)
9 $ rbd ls --format xml
10 <images></images> (no-eol)
11
12 create
13 =======
14 $ rbd create -s 1024 --image-format 1 foo
15 rbd: image format 1 is deprecated
16 $ rbd create -s 512 --image-format 2 bar
17 $ rbd create -s 2048 --image-format 2 --image-feature layering baz
18 $ rbd create -s 1 --image-format 1 quux
19 rbd: image format 1 is deprecated
20 $ rbd create -s 1G --image-format 2 quuy
21
22 snapshot
23 ========
24 $ rbd snap create bar@snap
25 $ rbd resize -s 1024 --no-progress bar
26 $ rbd resize -s 2G --no-progress quuy
27 $ rbd snap create bar@snap2
28 $ rbd snap create foo@snap
29
30 clone
31 =====
32 $ rbd snap protect bar@snap
33 $ rbd clone --image-feature layering,exclusive-lock,object-map,fast-diff bar@snap rbd_other/child
34 $ rbd snap create rbd_other/child@snap
35 $ rbd flatten rbd_other/child 2> /dev/null
36 $ rbd bench rbd_other/child --io-type write --io-pattern seq --io-total 1B > /dev/null 2>&1
37 $ rbd clone bar@snap rbd_other/deep-flatten-child
38 $ rbd snap create rbd_other/deep-flatten-child@snap
39 $ rbd flatten rbd_other/deep-flatten-child 2> /dev/null
40
41 lock
42 ====
43 $ rbd lock add quux id
44 $ rbd lock add baz id1 --shared tag
45 $ rbd lock add baz id2 --shared tag
46 $ rbd lock add baz id3 --shared tag
47
48 test formatting
49 ===============
50 $ rbd children foo@snap
51 $ rbd children bar@snap
52 rbd_other/child
53 $ rbd children bar@snap2
54 TODO: figure out why .* does not match the block_name_prefix line in rbd info.
55 For now, use a more inclusive regex.
56 $ rbd info foo
57 rbd image 'foo':
58 \tsize 1024 MB in 256 objects (esc)
59 \torder 22 (4096 kB objects) (esc)
60 [^^]+ (re)
61 \tformat: 1 (esc)
62 $ rbd info foo --format json | python -mjson.tool | sed 's/,$/, /'
63 {
64 "block_name_prefix": "rb.0.*", (glob)
65 "format": 1,
66 "name": "foo",
67 "object_size": 4194304,
68 "objects": 256,
69 "order": 22,
70 "size": 1073741824
71 }
72 The version of xml_pp included in ubuntu precise always prints a 'warning'
73 whenever it is run. grep -v to ignore it, but still work on other distros.
74 $ rbd info foo --format xml | xml_pp 2>&1 | grep -v '^new version at /usr/bin/xml_pp'
75 <image>
76 <name>foo</name>
77 <size>1073741824</size>
78 <objects>256</objects>
79 <order>22</order>
80 <object_size>4194304</object_size>
81 <block_name_prefix>rb.0.*</block_name_prefix> (glob)
82 <format>1</format>
83 </image>
84 $ rbd info foo@snap
85 rbd image 'foo':
86 \tsize 1024 MB in 256 objects (esc)
87 \torder 22 (4096 kB objects) (esc)
88 [^^]+ (re)
89 \tformat: 1 (esc)
90 \tprotected: False (esc)
91 $ rbd info foo@snap --format json | python -mjson.tool | sed 's/,$/, /'
92 {
93 "block_name_prefix": "rb.0.*", (glob)
94 "format": 1,
95 "name": "foo",
96 "object_size": 4194304,
97 "objects": 256,
98 "order": 22,
99 "protected": "false",
100 "size": 1073741824
101 }
102 $ rbd info foo@snap --format xml | xml_pp 2>&1 | grep -v '^new version at /usr/bin/xml_pp'
103 <image>
104 <name>foo</name>
105 <size>1073741824</size>
106 <objects>256</objects>
107 <order>22</order>
108 <object_size>4194304</object_size>
109 <block_name_prefix>rb.0*</block_name_prefix> (glob)
110 <format>1</format>
111 <protected>false</protected>
112 </image>
113 $ rbd info bar
114 rbd image 'bar':
115 \tsize 1024 MB in 256 objects (esc)
116 \torder 22 (4096 kB objects) (esc)
117 [^^]+ (re)
118 \tformat: 2 (esc)
119 \tfeatures: layering, exclusive-lock, object-map, fast-diff, deep-flatten (esc)
120 \tflags: (esc)
121 \tcreate_timestamp:* (glob)
122 $ rbd info bar --format json | python -mjson.tool | sed 's/,$/, /'
123 {
124 "block_name_prefix": "rbd_data.*", (glob)
125 "create_timestamp": "*", (glob)
126 "features": [
127 "layering",
128 "exclusive-lock",
129 "object-map",
130 "fast-diff",
131 "deep-flatten"
132 ],
133 "flags": [],
134 "format": 2,
135 "name": "bar",
136 "object_size": 4194304,
137 "objects": 256,
138 "order": 22,
139 "size": 1073741824
140 }
141 $ rbd info bar --format xml | xml_pp 2>&1 | grep -v '^new version at /usr/bin/xml_pp'
142 <image>
143 <name>bar</name>
144 <size>1073741824</size>
145 <objects>256</objects>
146 <order>22</order>
147 <object_size>4194304</object_size>
148 <block_name_prefix>rbd_data.*</block_name_prefix> (glob)
149 <format>2</format>
150 <features>
151 <feature>layering</feature>
152 <feature>exclusive-lock</feature>
153 <feature>object-map</feature>
154 <feature>fast-diff</feature>
155 <feature>deep-flatten</feature>
156 </features>
157 <flags></flags>
158 <create_timestamp>*</create_timestamp> (glob)
159 </image>
160 $ rbd info bar@snap
161 rbd image 'bar':
162 \tsize 512 MB in 128 objects (esc)
163 \torder 22 (4096 kB objects) (esc)
164 [^^]+ (re)
165 \tformat: 2 (esc)
166 \tfeatures: layering, exclusive-lock, object-map, fast-diff, deep-flatten (esc)
167 \tflags: (esc)
168 \tcreate_timestamp:* (glob)
169 \tprotected: True (esc)
170 $ rbd info bar@snap --format json | python -mjson.tool | sed 's/,$/, /'
171 {
172 "block_name_prefix": "rbd_data.*", (glob)
173 "create_timestamp": "*", (glob)
174 "features": [
175 "layering",
176 "exclusive-lock",
177 "object-map",
178 "fast-diff",
179 "deep-flatten"
180 ],
181 "flags": [],
182 "format": 2,
183 "name": "bar",
184 "object_size": 4194304,
185 "objects": 128,
186 "order": 22,
187 "protected": "true",
188 "size": 536870912
189 }
190 $ rbd info bar@snap --format xml | xml_pp 2>&1 | grep -v '^new version at /usr/bin/xml_pp'
191 <image>
192 <name>bar</name>
193 <size>536870912</size>
194 <objects>128</objects>
195 <order>22</order>
196 <object_size>4194304</object_size>
197 <block_name_prefix>rbd_data.*</block_name_prefix> (glob)
198 <format>2</format>
199 <features>
200 <feature>layering</feature>
201 <feature>exclusive-lock</feature>
202 <feature>object-map</feature>
203 <feature>fast-diff</feature>
204 <feature>deep-flatten</feature>
205 </features>
206 <flags></flags>
207 <create_timestamp>*</create_timestamp> (glob)
208 <protected>true</protected>
209 </image>
210 $ rbd info bar@snap2
211 rbd image 'bar':
212 \tsize 1024 MB in 256 objects (esc)
213 \torder 22 (4096 kB objects) (esc)
214 [^^]+ (re)
215 \tformat: 2 (esc)
216 \tfeatures: layering, exclusive-lock, object-map, fast-diff, deep-flatten (esc)
217 \tflags: (esc)
218 \tcreate_timestamp:* (glob)
219 \tprotected: False (esc)
220 $ rbd info bar@snap2 --format json | python -mjson.tool | sed 's/,$/, /'
221 {
222 "block_name_prefix": "rbd_data.*", (glob)
223 "create_timestamp": "*", (glob)
224 "features": [
225 "layering",
226 "exclusive-lock",
227 "object-map",
228 "fast-diff",
229 "deep-flatten"
230 ],
231 "flags": [],
232 "format": 2,
233 "name": "bar",
234 "object_size": 4194304,
235 "objects": 256,
236 "order": 22,
237 "protected": "false",
238 "size": 1073741824
239 }
240 $ rbd info bar@snap2 --format xml | xml_pp 2>&1 | grep -v '^new version at /usr/bin/xml_pp'
241 <image>
242 <name>bar</name>
243 <size>1073741824</size>
244 <objects>256</objects>
245 <order>22</order>
246 <object_size>4194304</object_size>
247 <block_name_prefix>rbd_data.*</block_name_prefix> (glob)
248 <format>2</format>
249 <features>
250 <feature>layering</feature>
251 <feature>exclusive-lock</feature>
252 <feature>object-map</feature>
253 <feature>fast-diff</feature>
254 <feature>deep-flatten</feature>
255 </features>
256 <flags></flags>
257 <create_timestamp>*</create_timestamp> (glob)
258 <protected>false</protected>
259 </image>
260 $ rbd info baz
261 rbd image 'baz':
262 \tsize 2048 MB in 512 objects (esc)
263 \torder 22 (4096 kB objects) (esc)
264 [^^]+ (re)
265 \tformat: 2 (esc)
266 \tfeatures: layering (esc)
267 \tflags: (esc)
268 \tcreate_timestamp:* (glob)
269 $ rbd info baz --format json | python -mjson.tool | sed 's/,$/, /'
270 {
271 "block_name_prefix": "rbd_data.*", (glob)
272 "create_timestamp": "*", (glob)
273 "features": [
274 "layering"
275 ],
276 "flags": [],
277 "format": 2,
278 "name": "baz",
279 "object_size": 4194304,
280 "objects": 512,
281 "order": 22,
282 "size": 2147483648
283 }
284 $ rbd info baz --format xml | xml_pp 2>&1 | grep -v '^new version at /usr/bin/xml_pp'
285 <image>
286 <name>baz</name>
287 <size>2147483648</size>
288 <objects>512</objects>
289 <order>22</order>
290 <object_size>4194304</object_size>
291 <block_name_prefix>rbd_data.*</block_name_prefix> (glob)
292 <format>2</format>
293 <features>
294 <feature>layering</feature>
295 </features>
296 <flags></flags>
297 <create_timestamp>*</create_timestamp> (glob)
298 </image>
299 $ rbd info quux
300 rbd image 'quux':
301 \tsize 1024 kB in 1 objects (esc)
302 \torder 22 (4096 kB objects) (esc)
303 [^^]+ (re)
304 \tformat: 1 (esc)
305 $ rbd info quux --format json | python -mjson.tool | sed 's/,$/, /'
306 {
307 "block_name_prefix": "rb.0.*", (glob)
308 "format": 1,
309 "name": "quux",
310 "object_size": 4194304,
311 "objects": 1,
312 "order": 22,
313 "size": 1048576
314 }
315 $ rbd info quux --format xml | xml_pp 2>&1 | grep -v '^new version at /usr/bin/xml_pp'
316 <image>
317 <name>quux</name>
318 <size>1048576</size>
319 <objects>1</objects>
320 <order>22</order>
321 <object_size>4194304</object_size>
322 <block_name_prefix>rb.0.*</block_name_prefix> (glob)
323 <format>1</format>
324 </image>
325 $ rbd info rbd_other/child
326 rbd image 'child':
327 \tsize 512 MB in 128 objects (esc)
328 \torder 22 (4096 kB objects) (esc)
329 [^^]+ (re)
330 \tformat: 2 (esc)
331 \tfeatures: layering, exclusive-lock, object-map, fast-diff (esc)
332 \tflags: (esc)
333 \tcreate_timestamp:* (glob)
334 $ rbd info rbd_other/child --format json | python -mjson.tool | sed 's/,$/, /'
335 {
336 "block_name_prefix": "rbd_data.*", (glob)
337 "create_timestamp": "*", (glob)
338 "features": [
339 "layering",
340 "exclusive-lock",
341 "object-map",
342 "fast-diff"
343 ],
344 "flags": [],
345 "format": 2,
346 "name": "child",
347 "object_size": 4194304,
348 "objects": 128,
349 "order": 22,
350 "size": 536870912
351 }
352 $ rbd info rbd_other/child --format xml | xml_pp 2>&1 | grep -v '^new version at /usr/bin/xml_pp'
353 <image>
354 <name>child</name>
355 <size>536870912</size>
356 <objects>128</objects>
357 <order>22</order>
358 <object_size>4194304</object_size>
359 <block_name_prefix>rbd_data.*</block_name_prefix> (glob)
360 <format>2</format>
361 <features>
362 <feature>layering</feature>
363 <feature>exclusive-lock</feature>
364 <feature>object-map</feature>
365 <feature>fast-diff</feature>
366 </features>
367 <flags></flags>
368 <create_timestamp>*</create_timestamp> (glob)
369 </image>
370 $ rbd info rbd_other/child@snap
371 rbd image 'child':
372 \tsize 512 MB in 128 objects (esc)
373 \torder 22 (4096 kB objects) (esc)
374 [^^]+ (re)
375 \tformat: 2 (esc)
376 \tfeatures: layering, exclusive-lock, object-map, fast-diff (esc)
377 \tflags: (esc)
378 \tcreate_timestamp:* (glob)
379 \tprotected: False (esc)
380 \tparent: rbd/bar@snap (esc)
381 \toverlap: 512 MB (esc)
382 $ rbd info rbd_other/child@snap --format json | python -mjson.tool | sed 's/,$/, /'
383 {
384 "block_name_prefix": "rbd_data.*", (glob)
385 "create_timestamp": "*", (glob)
386 "features": [
387 "layering",
388 "exclusive-lock",
389 "object-map",
390 "fast-diff"
391 ],
392 "flags": [],
393 "format": 2,
394 "name": "child",
395 "object_size": 4194304,
396 "objects": 128,
397 "order": 22,
398 "parent": {
399 "image": "bar",
400 "overlap": 536870912,
401 "pool": "rbd",
402 "snapshot": "snap"
403 },
404 "protected": "false",
405 "size": 536870912
406 }
407 $ rbd info rbd_other/child@snap --format xml | xml_pp 2>&1 | grep -v '^new version at /usr/bin/xml_pp'
408 <image>
409 <name>child</name>
410 <size>536870912</size>
411 <objects>128</objects>
412 <order>22</order>
413 <object_size>4194304</object_size>
414 <block_name_prefix>rbd_data.*</block_name_prefix> (glob)
415 <format>2</format>
416 <features>
417 <feature>layering</feature>
418 <feature>exclusive-lock</feature>
419 <feature>object-map</feature>
420 <feature>fast-diff</feature>
421 </features>
422 <flags></flags>
423 <create_timestamp>*</create_timestamp> (glob)
424 <protected>false</protected>
425 <parent>
426 <pool>rbd</pool>
427 <image>bar</image>
428 <snapshot>snap</snapshot>
429 <overlap>536870912</overlap>
430 </parent>
431 </image>
432 $ rbd info rbd_other/deep-flatten-child
433 rbd image 'deep-flatten-child':
434 \tsize 512 MB in 128 objects (esc)
435 \torder 22 (4096 kB objects) (esc)
436 [^^]+ (re)
437 \tformat: 2 (esc)
438 \tfeatures: layering, exclusive-lock, object-map, fast-diff, deep-flatten (esc)
439 \tflags: (esc)
440 \tcreate_timestamp:* (glob)
441 $ rbd info rbd_other/deep-flatten-child --format json | python -mjson.tool | sed 's/,$/, /'
442 {
443 "block_name_prefix": "rbd_data.*", (glob)
444 "create_timestamp": "*", (glob)
445 "features": [
446 "layering",
447 "exclusive-lock",
448 "object-map",
449 "fast-diff",
450 "deep-flatten"
451 ],
452 "flags": [],
453 "format": 2,
454 "name": "deep-flatten-child",
455 "object_size": 4194304,
456 "objects": 128,
457 "order": 22,
458 "size": 536870912
459 }
460 $ rbd info rbd_other/deep-flatten-child --format xml | xml_pp 2>&1 | grep -v '^new version at /usr/bin/xml_pp'
461 <image>
462 <name>deep-flatten-child</name>
463 <size>536870912</size>
464 <objects>128</objects>
465 <order>22</order>
466 <object_size>4194304</object_size>
467 <block_name_prefix>rbd_data.*</block_name_prefix> (glob)
468 <format>2</format>
469 <features>
470 <feature>layering</feature>
471 <feature>exclusive-lock</feature>
472 <feature>object-map</feature>
473 <feature>fast-diff</feature>
474 <feature>deep-flatten</feature>
475 </features>
476 <flags></flags>
477 <create_timestamp>*</create_timestamp> (glob)
478 </image>
479 $ rbd info rbd_other/deep-flatten-child@snap
480 rbd image 'deep-flatten-child':
481 \tsize 512 MB in 128 objects (esc)
482 \torder 22 (4096 kB objects) (esc)
483 [^^]+ (re)
484 \tformat: 2 (esc)
485 \tfeatures: layering, exclusive-lock, object-map, fast-diff, deep-flatten (esc)
486 \tflags: (esc)
487 \tcreate_timestamp:* (glob)
488 \tprotected: False (esc)
489 $ rbd info rbd_other/deep-flatten-child@snap --format json | python -mjson.tool | sed 's/,$/, /'
490 {
491 "block_name_prefix": "rbd_data.*", (glob)
492 "create_timestamp": "*", (glob)
493 "features": [
494 "layering",
495 "exclusive-lock",
496 "object-map",
497 "fast-diff",
498 "deep-flatten"
499 ],
500 "flags": [],
501 "format": 2,
502 "name": "deep-flatten-child",
503 "object_size": 4194304,
504 "objects": 128,
505 "order": 22,
506 "protected": "false",
507 "size": 536870912
508 }
509 $ rbd info rbd_other/deep-flatten-child@snap --format xml | xml_pp 2>&1 | grep -v '^new version at /usr/bin/xml_pp'
510 <image>
511 <name>deep-flatten-child</name>
512 <size>536870912</size>
513 <objects>128</objects>
514 <order>22</order>
515 <object_size>4194304</object_size>
516 <block_name_prefix>rbd_data.*</block_name_prefix> (glob)
517 <format>2</format>
518 <features>
519 <feature>layering</feature>
520 <feature>exclusive-lock</feature>
521 <feature>object-map</feature>
522 <feature>fast-diff</feature>
523 <feature>deep-flatten</feature>
524 </features>
525 <flags></flags>
526 <create_timestamp>*</create_timestamp> (glob)
527 <protected>false</protected>
528 </image>
529 $ rbd list
530 foo
531 quux
532 bar
533 baz
534 quuy
535 $ rbd list --format json | python -mjson.tool | sed 's/,$/, /'
536 [
537 "foo",
538 "quux",
539 "bar",
540 "baz",
541 "quuy"
542 ]
543 $ rbd list --format xml | xml_pp 2>&1 | grep -v '^new version at /usr/bin/xml_pp'
544 <images>
545 <name>foo</name>
546 <name>quux</name>
547 <name>bar</name>
548 <name>baz</name>
549 <name>quuy</name>
550 </images>
551 $ rbd list -l
552 NAME SIZE PARENT FMT PROT LOCK
553 foo 1024M 1
554 foo@snap 1024M 1
555 quux 1024k 1 excl
556 bar 1024M 2
557 bar@snap 512M 2 yes
558 bar@snap2 1024M 2
559 baz 2048M 2 shr
560 quuy 2048M 2
561 $ rbd list -l --format json | python -mjson.tool | sed 's/,$/, /'
562 [
563 {
564 "format": 1,
565 "image": "foo",
566 "size": 1073741824
567 },
568 {
569 "format": 1,
570 "image": "foo",
571 "protected": "false",
572 "size": 1073741824,
573 "snapshot": "snap"
574 },
575 {
576 "format": 1,
577 "image": "quux",
578 "lock_type": "exclusive",
579 "size": 1048576
580 },
581 {
582 "format": 2,
583 "image": "bar",
584 "size": 1073741824
585 },
586 {
587 "format": 2,
588 "image": "bar",
589 "protected": "true",
590 "size": 536870912,
591 "snapshot": "snap"
592 },
593 {
594 "format": 2,
595 "image": "bar",
596 "protected": "false",
597 "size": 1073741824,
598 "snapshot": "snap2"
599 },
600 {
601 "format": 2,
602 "image": "baz",
603 "lock_type": "shared",
604 "size": 2147483648
605 },
606 {
607 "format": 2,
608 "image": "quuy",
609 "size": 2147483648
610 }
611 ]
612 $ rbd list -l --format xml | xml_pp 2>&1 | grep -v '^new version at /usr/bin/xml_pp'
613 <images>
614 <image>
615 <image>foo</image>
616 <size>1073741824</size>
617 <format>1</format>
618 </image>
619 <snapshot>
620 <image>foo</image>
621 <snapshot>snap</snapshot>
622 <size>1073741824</size>
623 <format>1</format>
624 <protected>false</protected>
625 </snapshot>
626 <image>
627 <image>quux</image>
628 <size>1048576</size>
629 <format>1</format>
630 <lock_type>exclusive</lock_type>
631 </image>
632 <image>
633 <image>bar</image>
634 <size>1073741824</size>
635 <format>2</format>
636 </image>
637 <snapshot>
638 <image>bar</image>
639 <snapshot>snap</snapshot>
640 <size>536870912</size>
641 <format>2</format>
642 <protected>true</protected>
643 </snapshot>
644 <snapshot>
645 <image>bar</image>
646 <snapshot>snap2</snapshot>
647 <size>1073741824</size>
648 <format>2</format>
649 <protected>false</protected>
650 </snapshot>
651 <image>
652 <image>baz</image>
653 <size>2147483648</size>
654 <format>2</format>
655 <lock_type>shared</lock_type>
656 </image>
657 <image>
658 <image>quuy</image>
659 <size>2147483648</size>
660 <format>2</format>
661 </image>
662 </images>
663 $ rbd list rbd_other
664 child
665 deep-flatten-child
666 $ rbd list rbd_other --format json | python -mjson.tool | sed 's/,$/, /'
667 [
668 "child",
669 "deep-flatten-child"
670 ]
671 $ rbd list rbd_other --format xml | xml_pp 2>&1 | grep -v '^new version at /usr/bin/xml_pp'
672 <images>
673 <name>child</name>
674 <name>deep-flatten-child</name>
675 </images>
676 $ rbd list rbd_other -l
677 NAME SIZE PARENT FMT PROT LOCK
678 child 512M 2
679 child@snap 512M rbd/bar@snap 2
680 deep-flatten-child 512M 2
681 deep-flatten-child@snap 512M 2
682 $ rbd list rbd_other -l --format json | python -mjson.tool | sed 's/,$/, /'
683 [
684 {
685 "format": 2,
686 "image": "child",
687 "size": 536870912
688 },
689 {
690 "format": 2,
691 "image": "child",
692 "parent": {
693 "image": "bar",
694 "pool": "rbd",
695 "snapshot": "snap"
696 },
697 "protected": "false",
698 "size": 536870912,
699 "snapshot": "snap"
700 },
701 {
702 "format": 2,
703 "image": "deep-flatten-child",
704 "size": 536870912
705 },
706 {
707 "format": 2,
708 "image": "deep-flatten-child",
709 "protected": "false",
710 "size": 536870912,
711 "snapshot": "snap"
712 }
713 ]
714 $ rbd list rbd_other -l --format xml | xml_pp 2>&1 | grep -v '^new version at /usr/bin/xml_pp'
715 <images>
716 <image>
717 <image>child</image>
718 <size>536870912</size>
719 <format>2</format>
720 </image>
721 <snapshot>
722 <image>child</image>
723 <snapshot>snap</snapshot>
724 <size>536870912</size>
725 <parent>
726 <pool>rbd</pool>
727 <image>bar</image>
728 <snapshot>snap</snapshot>
729 </parent>
730 <format>2</format>
731 <protected>false</protected>
732 </snapshot>
733 <image>
734 <image>deep-flatten-child</image>
735 <size>536870912</size>
736 <format>2</format>
737 </image>
738 <snapshot>
739 <image>deep-flatten-child</image>
740 <snapshot>snap</snapshot>
741 <size>536870912</size>
742 <format>2</format>
743 <protected>false</protected>
744 </snapshot>
745 </images>
746 $ rbd lock list foo
747 $ rbd lock list foo --format json | python -mjson.tool | sed 's/,$/, /'
748 {}
749 $ rbd lock list foo --format xml | xml_pp 2>&1 | grep -v '^new version at /usr/bin/xml_pp'
750 <locks></locks>
751 $ rbd lock list quux
752 There is 1 exclusive lock on this image.
753 Locker*ID*Address* (glob)
754 client.* id * (glob)
755 $ rbd lock list quux --format json | python -mjson.tool | sed 's/,$/, /'
756 {
757 "id": {
758 "address": "*", (glob)
759 "locker": "client.*" (glob)
760 }
761 }
762 $ rbd lock list quux --format xml | xml_pp 2>&1 | grep -v '^new version at /usr/bin/xml_pp'
763 <locks>
764 <id>
765 <locker>client.*</locker> (glob)
766 <address>*</address> (glob)
767 </id>
768 </locks>
769 $ rbd lock list baz
770 There are 3 shared locks on this image.
771 Lock tag: tag
772 Locker*ID*Address* (glob)
773 client.*id[123].* (re)
774 client.*id[123].* (re)
775 client.*id[123].* (re)
776 $ rbd lock list baz --format json | python -mjson.tool | sed 's/,$/, /'
777 {
778 "id1": {
779 "address": "*", (glob)
780 "locker": "client.*" (glob)
781 },
782 "id2": {
783 "address": "*", (glob)
784 "locker": "client.*" (glob)
785 },
786 "id3": {
787 "address": "*", (glob)
788 "locker": "client.*" (glob)
789 }
790 }
791 $ rbd lock list baz --format xml | xml_pp 2>&1 | grep -v '^new version at /usr/bin/xml_pp'
792 <locks>
793 <id*> (glob)
794 <locker>client.*</locker> (glob)
795 <address>*</address> (glob)
796 </id*> (glob)
797 <id*> (glob)
798 <locker>client.*</locker> (glob)
799 <address>*</address> (glob)
800 </id*> (glob)
801 <id*> (glob)
802 <locker>client.*</locker> (glob)
803 <address>*</address> (glob)
804 </id*> (glob)
805 </locks>
806 $ rbd snap list foo
807 SNAPID NAME SIZE TIMESTAMP
808 *snap*1024*MB* (glob)
809 $ rbd snap list foo --format json | python -mjson.tool | sed 's/,$/, /'
810 [
811 {
812 "id": *, (glob)
813 "name": "snap",
814 "size": 1073741824,
815 "timestamp": ""
816 }
817 ]
818 $ rbd snap list foo --format xml | xml_pp 2>&1 | grep -v '^new version at /usr/bin/xml_pp'
819 <snapshots>
820 <snapshot>
821 <id>*</id> (glob)
822 <name>snap</name>
823 <size>1073741824</size>
824 <timestamp></timestamp>
825 </snapshot>
826 </snapshots>
827 $ rbd snap list bar
828 SNAPID NAME SIZE TIMESTAMP
829 *snap*512*MB* (glob)
830 *snap2*1024*MB* (glob)
831 $ rbd snap list bar --format json | python -mjson.tool | sed 's/,$/, /'
832 [
833 {
834 "id": *, (glob)
835 "name": "snap",
836 "size": 536870912,
837 "timestamp": * (glob)
838 },
839 {
840 "id": *, (glob)
841 "name": "snap2",
842 "size": 1073741824,
843 "timestamp": * (glob)
844 }
845 ]
846 $ rbd snap list bar --format xml | xml_pp 2>&1 | grep -v '^new version at /usr/bin/xml_pp'
847 <snapshots>
848 <snapshot>
849 <id>*</id> (glob)
850 <name>snap</name>
851 <size>536870912</size>
852 <timestamp>*</timestamp> (glob)
853 </snapshot>
854 <snapshot>
855 <id>*</id> (glob)
856 <name>snap2</name>
857 <size>1073741824</size>
858 <timestamp>*</timestamp> (glob)
859 </snapshot>
860 </snapshots>
861 $ rbd snap list baz
862 $ rbd snap list baz --format json | python -mjson.tool | sed 's/,$/, /'
863 []
864 $ rbd snap list baz --format xml | xml_pp 2>&1 | grep -v '^new version at /usr/bin/xml_pp'
865 <snapshots></snapshots>
866 $ rbd snap list rbd_other/child
867 SNAPID NAME SIZE TIMESTAMP
868 *snap*512*MB* (glob)
869 $ rbd snap list rbd_other/child --format json | python -mjson.tool | sed 's/,$/, /'
870 [
871 {
872 "id": *, (glob)
873 "name": "snap",
874 "size": 536870912,
875 "timestamp": * (glob)
876 }
877 ]
878 $ rbd snap list rbd_other/child --format xml | xml_pp 2>&1 | grep -v '^new version at /usr/bin/xml_pp'
879 <snapshots>
880 <snapshot>
881 <id>*</id> (glob)
882 <name>snap</name>
883 <size>536870912</size>
884 <timestamp>*</timestamp> (glob)
885 </snapshot>
886 </snapshots>
887 $ rbd disk-usage --pool rbd_other 2>/dev/null
888 NAME PROVISIONED USED
889 child@snap 512M 0
890 child 512M 4096k
891 deep-flatten-child@snap 512M 0
892 deep-flatten-child 512M 0
893 <TOTAL> 1024M 4096k
894 $ rbd disk-usage --pool rbd_other --format json | python -mjson.tool | sed 's/,$/, /'
895 {
896 "images": [
897 {
898 "name": "child",
899 "provisioned_size": 536870912,
900 "snapshot": "snap",
901 "used_size": 0
902 },
903 {
904 "name": "child",
905 "provisioned_size": 536870912,
906 "used_size": 4194304
907 },
908 {
909 "name": "deep-flatten-child",
910 "provisioned_size": 536870912,
911 "snapshot": "snap",
912 "used_size": 0
913 },
914 {
915 "name": "deep-flatten-child",
916 "provisioned_size": 536870912,
917 "used_size": 0
918 }
919 ],
920 "total_provisioned_size": 1073741824,
921 "total_used_size": 4194304
922 }
923 $ rbd disk-usage --pool rbd_other --format xml | xml_pp 2>&1 | grep -v '^new version at /usr/bin/xml_pp'
924 <stats>
925 <images>
926 <image>
927 <name>child</name>
928 <snapshot>snap</snapshot>
929 <provisioned_size>536870912</provisioned_size>
930 <used_size>0</used_size>
931 </image>
932 <image>
933 <name>child</name>
934 <provisioned_size>536870912</provisioned_size>
935 <used_size>4194304</used_size>
936 </image>
937 <image>
938 <name>deep-flatten-child</name>
939 <snapshot>snap</snapshot>
940 <provisioned_size>536870912</provisioned_size>
941 <used_size>0</used_size>
942 </image>
943 <image>
944 <name>deep-flatten-child</name>
945 <provisioned_size>536870912</provisioned_size>
946 <used_size>0</used_size>
947 </image>
948 </images>
949 <total_provisioned_size>1073741824</total_provisioned_size>
950 <total_used_size>4194304</total_used_size>
951 </stats>
952
953 # cleanup
954 $ rbd snap remove --no-progress rbd_other/deep-flatten-child@snap
955 $ rbd snap remove --no-progress rbd_other/child@snap
956 $ rbd snap unprotect bar@snap
957 $ rbd snap purge bar 2> /dev/null
958 $ rbd snap purge foo 2> /dev/null
959 $ rbd rm rbd_other/deep-flatten-child 2> /dev/null
960 $ rbd rm rbd_other/child 2> /dev/null
961 $ rbd rm foo 2> /dev/null
962 $ rbd rm bar 2> /dev/null
963 $ rbd rm quux 2> /dev/null
964 $ rbd rm quuy 2> /dev/null
965 $ rbd rm baz 2> /dev/null
966 $ ceph osd pool delete rbd_other rbd_other --yes-i-really-really-mean-it
967 pool 'rbd_other' removed