remove ceph code
[stor4nfv.git] / src / ceph / src / test / cli-integration / rbd / formatted-output.t
diff --git a/src/ceph/src/test/cli-integration/rbd/formatted-output.t b/src/ceph/src/test/cli-integration/rbd/formatted-output.t
deleted file mode 100644 (file)
index 54c6373..0000000
+++ /dev/null
@@ -1,968 +0,0 @@
-ls on empty pool never containing images
-========================================
-  $ ceph osd pool create rbd_other 8
-  pool 'rbd_other' created
-  $ rbd pool init rbd_other
-  $ rados -p rbd rm rbd_directory >/dev/null 2>&1 || true
-  $ rbd ls
-  $ rbd ls --format json
-  []
-  $ rbd ls --format xml
-  <images></images>
-
-create
-=======
-  $ rbd create -s 1024 --image-format 1 foo
-  rbd: image format 1 is deprecated
-  $ rbd create -s 512 --image-format 2 bar
-  $ rbd create -s 2048 --image-format 2 --image-feature layering baz
-  $ rbd create -s 1 --image-format 1 quux
-  rbd: image format 1 is deprecated
-  $ rbd create -s 1G --image-format 2 quuy
-
-snapshot
-========
-  $ rbd snap create bar@snap
-  $ rbd resize -s 1024 --no-progress bar
-  $ rbd resize -s 2G --no-progress quuy
-  $ rbd snap create bar@snap2
-  $ rbd snap create foo@snap
-
-clone
-=====
-  $ rbd snap protect bar@snap
-  $ rbd clone --image-feature layering,exclusive-lock,object-map,fast-diff bar@snap rbd_other/child
-  $ rbd snap create rbd_other/child@snap
-  $ rbd flatten rbd_other/child 2> /dev/null
-  $ rbd bench rbd_other/child --io-type write --io-pattern seq --io-total 1B > /dev/null 2>&1
-  $ rbd clone bar@snap rbd_other/deep-flatten-child
-  $ rbd snap create rbd_other/deep-flatten-child@snap
-  $ rbd flatten rbd_other/deep-flatten-child 2> /dev/null
-
-lock
-====
-  $ rbd lock add quux id
-  $ rbd lock add baz id1 --shared tag
-  $ rbd lock add baz id2 --shared tag
-  $ rbd lock add baz id3 --shared tag
-
-test formatting
-===============
-  $ rbd children foo@snap
-  $ rbd children bar@snap
-  rbd_other/child
-  $ rbd children bar@snap2
-TODO: figure out why .* does not match the block_name_prefix line in rbd info.
-For now, use a more inclusive regex.
-  $ rbd info foo
-  rbd image 'foo':
-  \tsize 1024 MB in 256 objects (esc)
-  \torder 22 (4096 kB objects) (esc)
-  [^^]+ (re)
-  \tformat: 1 (esc)
-  $ rbd info foo --format json | python -mjson.tool | sed 's/,$/, /'
-  {
-      "block_name_prefix": "rb.0.*",  (glob)
-      "format": 1, 
-      "name": "foo", 
-      "object_size": 4194304, 
-      "objects": 256, 
-      "order": 22, 
-      "size": 1073741824
-  }
-The version of xml_pp included in ubuntu precise always prints a 'warning'
-whenever it is run. grep -v to ignore it, but still work on other distros.
-  $ rbd info foo --format xml | xml_pp 2>&1 | grep -v '^new version at /usr/bin/xml_pp'
-  <image>
-    <name>foo</name>
-    <size>1073741824</size>
-    <objects>256</objects>
-    <order>22</order>
-    <object_size>4194304</object_size>
-    <block_name_prefix>rb.0.*</block_name_prefix> (glob)
-    <format>1</format>
-  </image>
-  $ rbd info foo@snap
-  rbd image 'foo':
-  \tsize 1024 MB in 256 objects (esc)
-  \torder 22 (4096 kB objects) (esc)
-  [^^]+ (re)
-  \tformat: 1 (esc)
-  \tprotected: False (esc)
-  $ rbd info foo@snap --format json | python -mjson.tool | sed 's/,$/, /'
-  {
-      "block_name_prefix": "rb.0.*",  (glob)
-      "format": 1, 
-      "name": "foo", 
-      "object_size": 4194304, 
-      "objects": 256, 
-      "order": 22, 
-      "protected": "false", 
-      "size": 1073741824
-  }
-  $ rbd info foo@snap --format xml | xml_pp 2>&1 | grep -v '^new version at /usr/bin/xml_pp'
-  <image>
-    <name>foo</name>
-    <size>1073741824</size>
-    <objects>256</objects>
-    <order>22</order>
-    <object_size>4194304</object_size>
-    <block_name_prefix>rb.0*</block_name_prefix> (glob)
-    <format>1</format>
-    <protected>false</protected>
-  </image>
-  $ rbd info bar
-  rbd image 'bar':
-  \tsize 1024 MB in 256 objects (esc)
-  \torder 22 (4096 kB objects) (esc)
-  [^^]+ (re)
-  \tformat: 2 (esc)
-  \tfeatures: layering, exclusive-lock, object-map, fast-diff, deep-flatten (esc)
-  \tflags:  (esc)
-  \tcreate_timestamp:* (glob)
-  $ rbd info bar --format json | python -mjson.tool | sed 's/,$/, /'
-  {
-      "block_name_prefix": "rbd_data.*",  (glob)
-      "create_timestamp": "*",  (glob)
-      "features": [
-          "layering", 
-          "exclusive-lock", 
-          "object-map", 
-          "fast-diff", 
-          "deep-flatten"
-      ], 
-      "flags": [], 
-      "format": 2, 
-      "name": "bar", 
-      "object_size": 4194304, 
-      "objects": 256, 
-      "order": 22, 
-      "size": 1073741824
-  }
-  $ rbd info bar --format xml | xml_pp 2>&1 | grep -v '^new version at /usr/bin/xml_pp'
-  <image>
-    <name>bar</name>
-    <size>1073741824</size>
-    <objects>256</objects>
-    <order>22</order>
-    <object_size>4194304</object_size>
-    <block_name_prefix>rbd_data.*</block_name_prefix> (glob)
-    <format>2</format>
-    <features>
-      <feature>layering</feature>
-      <feature>exclusive-lock</feature>
-      <feature>object-map</feature>
-      <feature>fast-diff</feature>
-      <feature>deep-flatten</feature>
-    </features>
-    <flags></flags>
-    <create_timestamp>*</create_timestamp> (glob)
-  </image>
-  $ rbd info bar@snap
-  rbd image 'bar':
-  \tsize 512 MB in 128 objects (esc)
-  \torder 22 (4096 kB objects) (esc)
-  [^^]+ (re)
-  \tformat: 2 (esc)
-  \tfeatures: layering, exclusive-lock, object-map, fast-diff, deep-flatten (esc)
-  \tflags:  (esc)
-  \tcreate_timestamp:* (glob)
-  \tprotected: True (esc)
-  $ rbd info bar@snap --format json | python -mjson.tool | sed 's/,$/, /'
-  {
-      "block_name_prefix": "rbd_data.*",  (glob)
-      "create_timestamp": "*",  (glob)
-      "features": [
-          "layering", 
-          "exclusive-lock", 
-          "object-map", 
-          "fast-diff", 
-          "deep-flatten"
-      ], 
-      "flags": [], 
-      "format": 2, 
-      "name": "bar", 
-      "object_size": 4194304, 
-      "objects": 128, 
-      "order": 22, 
-      "protected": "true", 
-      "size": 536870912
-  }
-  $ rbd info bar@snap --format xml | xml_pp 2>&1 | grep -v '^new version at /usr/bin/xml_pp'
-  <image>
-    <name>bar</name>
-    <size>536870912</size>
-    <objects>128</objects>
-    <order>22</order>
-    <object_size>4194304</object_size>
-    <block_name_prefix>rbd_data.*</block_name_prefix> (glob)
-    <format>2</format>
-    <features>
-      <feature>layering</feature>
-      <feature>exclusive-lock</feature>
-      <feature>object-map</feature>
-      <feature>fast-diff</feature>
-      <feature>deep-flatten</feature>
-    </features>
-    <flags></flags>
-    <create_timestamp>*</create_timestamp> (glob)
-    <protected>true</protected>
-  </image>
-  $ rbd info bar@snap2
-  rbd image 'bar':
-  \tsize 1024 MB in 256 objects (esc)
-  \torder 22 (4096 kB objects) (esc)
-  [^^]+ (re)
-  \tformat: 2 (esc)
-  \tfeatures: layering, exclusive-lock, object-map, fast-diff, deep-flatten (esc)
-  \tflags:  (esc)
-  \tcreate_timestamp:* (glob)
-  \tprotected: False (esc)
-  $ rbd info bar@snap2 --format json | python -mjson.tool | sed 's/,$/, /'
-  {
-      "block_name_prefix": "rbd_data.*",  (glob)
-      "create_timestamp": "*",  (glob)
-      "features": [
-          "layering", 
-          "exclusive-lock", 
-          "object-map", 
-          "fast-diff", 
-          "deep-flatten"
-      ], 
-      "flags": [], 
-      "format": 2, 
-      "name": "bar", 
-      "object_size": 4194304, 
-      "objects": 256, 
-      "order": 22, 
-      "protected": "false", 
-      "size": 1073741824
-  }
-  $ rbd info bar@snap2 --format xml | xml_pp 2>&1 | grep -v '^new version at /usr/bin/xml_pp'
-  <image>
-    <name>bar</name>
-    <size>1073741824</size>
-    <objects>256</objects>
-    <order>22</order>
-    <object_size>4194304</object_size>
-    <block_name_prefix>rbd_data.*</block_name_prefix> (glob)
-    <format>2</format>
-    <features>
-      <feature>layering</feature>
-      <feature>exclusive-lock</feature>
-      <feature>object-map</feature>
-      <feature>fast-diff</feature>
-      <feature>deep-flatten</feature>
-    </features>
-    <flags></flags>
-    <create_timestamp>*</create_timestamp> (glob)
-    <protected>false</protected>
-  </image>
-  $ rbd info baz
-  rbd image 'baz':
-  \tsize 2048 MB in 512 objects (esc)
-  \torder 22 (4096 kB objects) (esc)
-  [^^]+ (re)
-  \tformat: 2 (esc)
-  \tfeatures: layering (esc)
-  \tflags:  (esc)
-  \tcreate_timestamp:* (glob)
-  $ rbd info baz --format json | python -mjson.tool | sed 's/,$/, /'
-  {
-      "block_name_prefix": "rbd_data.*",  (glob)
-      "create_timestamp": "*",  (glob)
-      "features": [
-          "layering"
-      ], 
-      "flags": [], 
-      "format": 2, 
-      "name": "baz", 
-      "object_size": 4194304, 
-      "objects": 512, 
-      "order": 22, 
-      "size": 2147483648
-  }
-  $ rbd info baz --format xml | xml_pp 2>&1 | grep -v '^new version at /usr/bin/xml_pp'
-  <image>
-    <name>baz</name>
-    <size>2147483648</size>
-    <objects>512</objects>
-    <order>22</order>
-    <object_size>4194304</object_size>
-    <block_name_prefix>rbd_data.*</block_name_prefix> (glob)
-    <format>2</format>
-    <features>
-      <feature>layering</feature>
-    </features>
-    <flags></flags>
-    <create_timestamp>*</create_timestamp> (glob)
-  </image>
-  $ rbd info quux
-  rbd image 'quux':
-  \tsize 1024 kB in 1 objects (esc)
-  \torder 22 (4096 kB objects) (esc)
-  [^^]+ (re)
-  \tformat: 1 (esc)
-  $ rbd info quux --format json | python -mjson.tool | sed 's/,$/, /'
-  {
-      "block_name_prefix": "rb.0.*",  (glob)
-      "format": 1, 
-      "name": "quux", 
-      "object_size": 4194304, 
-      "objects": 1, 
-      "order": 22, 
-      "size": 1048576
-  }
-  $ rbd info quux --format xml | xml_pp 2>&1 | grep -v '^new version at /usr/bin/xml_pp'
-  <image>
-    <name>quux</name>
-    <size>1048576</size>
-    <objects>1</objects>
-    <order>22</order>
-    <object_size>4194304</object_size>
-    <block_name_prefix>rb.0.*</block_name_prefix> (glob)
-    <format>1</format>
-  </image>
-  $ rbd info rbd_other/child
-  rbd image 'child':
-  \tsize 512 MB in 128 objects (esc)
-  \torder 22 (4096 kB objects) (esc)
-  [^^]+ (re)
-  \tformat: 2 (esc)
-  \tfeatures: layering, exclusive-lock, object-map, fast-diff (esc)
-  \tflags:  (esc)
-  \tcreate_timestamp:* (glob)
-  $ rbd info rbd_other/child --format json | python -mjson.tool | sed 's/,$/, /'
-  {
-      "block_name_prefix": "rbd_data.*",  (glob)
-      "create_timestamp": "*",  (glob)
-      "features": [
-          "layering", 
-          "exclusive-lock", 
-          "object-map", 
-          "fast-diff"
-      ], 
-      "flags": [], 
-      "format": 2, 
-      "name": "child", 
-      "object_size": 4194304, 
-      "objects": 128, 
-      "order": 22, 
-      "size": 536870912
-  }
-  $ rbd info rbd_other/child --format xml | xml_pp 2>&1 | grep -v '^new version at /usr/bin/xml_pp'
-  <image>
-    <name>child</name>
-    <size>536870912</size>
-    <objects>128</objects>
-    <order>22</order>
-    <object_size>4194304</object_size>
-    <block_name_prefix>rbd_data.*</block_name_prefix> (glob)
-    <format>2</format>
-    <features>
-      <feature>layering</feature>
-      <feature>exclusive-lock</feature>
-      <feature>object-map</feature>
-      <feature>fast-diff</feature>
-    </features>
-    <flags></flags>
-    <create_timestamp>*</create_timestamp> (glob)
-  </image>
-  $ rbd info rbd_other/child@snap
-  rbd image 'child':
-  \tsize 512 MB in 128 objects (esc)
-  \torder 22 (4096 kB objects) (esc)
-  [^^]+ (re)
-  \tformat: 2 (esc)
-  \tfeatures: layering, exclusive-lock, object-map, fast-diff (esc)
-  \tflags:  (esc)
-  \tcreate_timestamp:* (glob)
-  \tprotected: False (esc)
-  \tparent: rbd/bar@snap (esc)
-  \toverlap: 512 MB (esc)
-  $ rbd info rbd_other/child@snap --format json | python -mjson.tool | sed 's/,$/, /'
-  {
-      "block_name_prefix": "rbd_data.*",  (glob)
-      "create_timestamp": "*",  (glob)
-      "features": [
-          "layering", 
-          "exclusive-lock", 
-          "object-map", 
-          "fast-diff"
-      ], 
-      "flags": [], 
-      "format": 2, 
-      "name": "child", 
-      "object_size": 4194304, 
-      "objects": 128, 
-      "order": 22, 
-      "parent": {
-          "image": "bar", 
-          "overlap": 536870912, 
-          "pool": "rbd", 
-          "snapshot": "snap"
-      }, 
-      "protected": "false", 
-      "size": 536870912
-  }
-  $ rbd info rbd_other/child@snap --format xml | xml_pp 2>&1 | grep -v '^new version at /usr/bin/xml_pp'
-  <image>
-    <name>child</name>
-    <size>536870912</size>
-    <objects>128</objects>
-    <order>22</order>
-    <object_size>4194304</object_size>
-    <block_name_prefix>rbd_data.*</block_name_prefix> (glob)
-    <format>2</format>
-    <features>
-      <feature>layering</feature>
-      <feature>exclusive-lock</feature>
-      <feature>object-map</feature>
-      <feature>fast-diff</feature>
-    </features>
-    <flags></flags>
-    <create_timestamp>*</create_timestamp> (glob)
-    <protected>false</protected>
-    <parent>
-      <pool>rbd</pool>
-      <image>bar</image>
-      <snapshot>snap</snapshot>
-      <overlap>536870912</overlap>
-    </parent>
-  </image>
-  $ rbd info rbd_other/deep-flatten-child
-  rbd image 'deep-flatten-child':
-  \tsize 512 MB in 128 objects (esc)
-  \torder 22 (4096 kB objects) (esc)
-  [^^]+ (re)
-  \tformat: 2 (esc)
-  \tfeatures: layering, exclusive-lock, object-map, fast-diff, deep-flatten (esc)
-  \tflags:  (esc)
-  \tcreate_timestamp:* (glob)
-  $ rbd info rbd_other/deep-flatten-child --format json | python -mjson.tool | sed 's/,$/, /'
-  {
-      "block_name_prefix": "rbd_data.*",  (glob)
-      "create_timestamp": "*",  (glob)
-      "features": [
-          "layering", 
-          "exclusive-lock", 
-          "object-map", 
-          "fast-diff", 
-          "deep-flatten"
-      ], 
-      "flags": [], 
-      "format": 2, 
-      "name": "deep-flatten-child", 
-      "object_size": 4194304, 
-      "objects": 128, 
-      "order": 22, 
-      "size": 536870912
-  }
-  $ rbd info rbd_other/deep-flatten-child --format xml | xml_pp 2>&1 | grep -v '^new version at /usr/bin/xml_pp'
-  <image>
-    <name>deep-flatten-child</name>
-    <size>536870912</size>
-    <objects>128</objects>
-    <order>22</order>
-    <object_size>4194304</object_size>
-    <block_name_prefix>rbd_data.*</block_name_prefix> (glob)
-    <format>2</format>
-    <features>
-      <feature>layering</feature>
-      <feature>exclusive-lock</feature>
-      <feature>object-map</feature>
-      <feature>fast-diff</feature>
-      <feature>deep-flatten</feature>
-    </features>
-    <flags></flags>
-    <create_timestamp>*</create_timestamp> (glob)
-  </image>
-  $ rbd info rbd_other/deep-flatten-child@snap
-  rbd image 'deep-flatten-child':
-  \tsize 512 MB in 128 objects (esc)
-  \torder 22 (4096 kB objects) (esc)
-  [^^]+ (re)
-  \tformat: 2 (esc)
-  \tfeatures: layering, exclusive-lock, object-map, fast-diff, deep-flatten (esc)
-  \tflags:  (esc)
-  \tcreate_timestamp:* (glob)
-  \tprotected: False (esc)
-  $ rbd info rbd_other/deep-flatten-child@snap --format json | python -mjson.tool | sed 's/,$/, /'
-  {
-      "block_name_prefix": "rbd_data.*",  (glob)
-      "create_timestamp": "*",  (glob)
-      "features": [
-          "layering", 
-          "exclusive-lock", 
-          "object-map", 
-          "fast-diff", 
-          "deep-flatten"
-      ], 
-      "flags": [], 
-      "format": 2, 
-      "name": "deep-flatten-child", 
-      "object_size": 4194304, 
-      "objects": 128, 
-      "order": 22, 
-      "protected": "false", 
-      "size": 536870912
-  }
-  $ rbd info rbd_other/deep-flatten-child@snap --format xml | xml_pp 2>&1 | grep -v '^new version at /usr/bin/xml_pp'
-  <image>
-    <name>deep-flatten-child</name>
-    <size>536870912</size>
-    <objects>128</objects>
-    <order>22</order>
-    <object_size>4194304</object_size>
-    <block_name_prefix>rbd_data.*</block_name_prefix> (glob)
-    <format>2</format>
-    <features>
-      <feature>layering</feature>
-      <feature>exclusive-lock</feature>
-      <feature>object-map</feature>
-      <feature>fast-diff</feature>
-      <feature>deep-flatten</feature>
-    </features>
-    <flags></flags>
-    <create_timestamp>*</create_timestamp> (glob)
-    <protected>false</protected>
-  </image>
-  $ rbd list
-  foo
-  quux
-  bar
-  baz
-  quuy
-  $ rbd list --format json | python -mjson.tool | sed 's/,$/, /'
-  [
-      "foo", 
-      "quux", 
-      "bar", 
-      "baz", 
-      "quuy"
-  ]
-  $ rbd list --format xml | xml_pp 2>&1 | grep -v '^new version at /usr/bin/xml_pp'
-  <images>
-    <name>foo</name>
-    <name>quux</name>
-    <name>bar</name>
-    <name>baz</name>
-    <name>quuy</name>
-  </images>
-  $ rbd list -l
-  NAME       SIZE PARENT FMT PROT LOCK 
-  foo       1024M          1           
-  foo@snap  1024M          1           
-  quux      1024k          1      excl 
-  bar       1024M          2           
-  bar@snap   512M          2 yes       
-  bar@snap2 1024M          2           
-  baz       2048M          2      shr  
-  quuy      2048M          2           
-  $ rbd list -l --format json | python -mjson.tool | sed 's/,$/, /'
-  [
-      {
-          "format": 1, 
-          "image": "foo", 
-          "size": 1073741824
-      }, 
-      {
-          "format": 1, 
-          "image": "foo", 
-          "protected": "false", 
-          "size": 1073741824, 
-          "snapshot": "snap"
-      }, 
-      {
-          "format": 1, 
-          "image": "quux", 
-          "lock_type": "exclusive", 
-          "size": 1048576
-      }, 
-      {
-          "format": 2, 
-          "image": "bar", 
-          "size": 1073741824
-      }, 
-      {
-          "format": 2, 
-          "image": "bar", 
-          "protected": "true", 
-          "size": 536870912, 
-          "snapshot": "snap"
-      }, 
-      {
-          "format": 2, 
-          "image": "bar", 
-          "protected": "false", 
-          "size": 1073741824, 
-          "snapshot": "snap2"
-      }, 
-      {
-          "format": 2, 
-          "image": "baz", 
-          "lock_type": "shared", 
-          "size": 2147483648
-      }, 
-      {
-          "format": 2, 
-          "image": "quuy", 
-          "size": 2147483648
-      }
-  ]
-  $ rbd list -l --format xml | xml_pp 2>&1 | grep -v '^new version at /usr/bin/xml_pp'
-  <images>
-    <image>
-      <image>foo</image>
-      <size>1073741824</size>
-      <format>1</format>
-    </image>
-    <snapshot>
-      <image>foo</image>
-      <snapshot>snap</snapshot>
-      <size>1073741824</size>
-      <format>1</format>
-      <protected>false</protected>
-    </snapshot>
-    <image>
-      <image>quux</image>
-      <size>1048576</size>
-      <format>1</format>
-      <lock_type>exclusive</lock_type>
-    </image>
-    <image>
-      <image>bar</image>
-      <size>1073741824</size>
-      <format>2</format>
-    </image>
-    <snapshot>
-      <image>bar</image>
-      <snapshot>snap</snapshot>
-      <size>536870912</size>
-      <format>2</format>
-      <protected>true</protected>
-    </snapshot>
-    <snapshot>
-      <image>bar</image>
-      <snapshot>snap2</snapshot>
-      <size>1073741824</size>
-      <format>2</format>
-      <protected>false</protected>
-    </snapshot>
-    <image>
-      <image>baz</image>
-      <size>2147483648</size>
-      <format>2</format>
-      <lock_type>shared</lock_type>
-    </image>
-    <image>
-      <image>quuy</image>
-      <size>2147483648</size>
-      <format>2</format>
-    </image>
-  </images>
-  $ rbd list rbd_other
-  child
-  deep-flatten-child
-  $ rbd list rbd_other --format json | python -mjson.tool | sed 's/,$/, /'
-  [
-      "child", 
-      "deep-flatten-child"
-  ]
-  $ rbd list rbd_other --format xml | xml_pp 2>&1 | grep -v '^new version at /usr/bin/xml_pp'
-  <images>
-    <name>child</name>
-    <name>deep-flatten-child</name>
-  </images>
-  $ rbd list rbd_other -l
-  NAME                    SIZE PARENT       FMT PROT LOCK 
-  child                   512M                2           
-  child@snap              512M rbd/bar@snap   2           
-  deep-flatten-child      512M                2           
-  deep-flatten-child@snap 512M                2           
-  $ rbd list rbd_other -l --format json | python -mjson.tool | sed 's/,$/, /'
-  [
-      {
-          "format": 2, 
-          "image": "child", 
-          "size": 536870912
-      }, 
-      {
-          "format": 2, 
-          "image": "child", 
-          "parent": {
-              "image": "bar", 
-              "pool": "rbd", 
-              "snapshot": "snap"
-          }, 
-          "protected": "false", 
-          "size": 536870912, 
-          "snapshot": "snap"
-      }, 
-      {
-          "format": 2, 
-          "image": "deep-flatten-child", 
-          "size": 536870912
-      }, 
-      {
-          "format": 2, 
-          "image": "deep-flatten-child", 
-          "protected": "false", 
-          "size": 536870912, 
-          "snapshot": "snap"
-      }
-  ]
-  $ rbd list rbd_other -l --format xml | xml_pp 2>&1 | grep -v '^new version at /usr/bin/xml_pp'
-  <images>
-    <image>
-      <image>child</image>
-      <size>536870912</size>
-      <format>2</format>
-    </image>
-    <snapshot>
-      <image>child</image>
-      <snapshot>snap</snapshot>
-      <size>536870912</size>
-      <parent>
-        <pool>rbd</pool>
-        <image>bar</image>
-        <snapshot>snap</snapshot>
-      </parent>
-      <format>2</format>
-      <protected>false</protected>
-    </snapshot>
-    <image>
-      <image>deep-flatten-child</image>
-      <size>536870912</size>
-      <format>2</format>
-    </image>
-    <snapshot>
-      <image>deep-flatten-child</image>
-      <snapshot>snap</snapshot>
-      <size>536870912</size>
-      <format>2</format>
-      <protected>false</protected>
-    </snapshot>
-  </images>
-  $ rbd lock list foo
-  $ rbd lock list foo --format json | python -mjson.tool | sed 's/,$/, /'
-  {}
-  $ rbd lock list foo --format xml | xml_pp 2>&1 | grep -v '^new version at /usr/bin/xml_pp'
-  <locks></locks>
-  $ rbd lock list quux
-  There is 1 exclusive lock on this image.
-  Locker*ID*Address* (glob)
-  client.* id * (glob)
-  $ rbd lock list quux --format json | python -mjson.tool | sed 's/,$/, /'
-  {
-      "id": {
-          "address": "*",  (glob)
-          "locker": "client.*" (glob)
-      }
-  }
-  $ rbd lock list quux --format xml | xml_pp 2>&1 | grep -v '^new version at /usr/bin/xml_pp'
-  <locks>
-    <id>
-      <locker>client.*</locker> (glob)
-      <address>*</address> (glob)
-    </id>
-  </locks>
-  $ rbd lock list baz
-  There are 3 shared locks on this image.
-  Lock tag: tag
-  Locker*ID*Address* (glob)
-  client.*id[123].* (re)
-  client.*id[123].* (re)
-  client.*id[123].* (re)
-  $ rbd lock list baz --format json | python -mjson.tool | sed 's/,$/, /'
-  {
-      "id1": {
-          "address": "*",  (glob)
-          "locker": "client.*" (glob)
-      }, 
-      "id2": {
-          "address": "*",  (glob)
-          "locker": "client.*" (glob)
-      }, 
-      "id3": {
-          "address": "*",  (glob)
-          "locker": "client.*" (glob)
-      }
-  }
-  $ rbd lock list baz --format xml | xml_pp 2>&1 | grep -v '^new version at /usr/bin/xml_pp'
-  <locks>
-    <id*> (glob)
-      <locker>client.*</locker> (glob)
-      <address>*</address> (glob)
-    </id*> (glob)
-    <id*> (glob)
-      <locker>client.*</locker> (glob)
-      <address>*</address> (glob)
-    </id*> (glob)
-    <id*> (glob)
-      <locker>client.*</locker> (glob)
-      <address>*</address> (glob)
-    </id*> (glob)
-  </locks>
-  $ rbd snap list foo
-  SNAPID NAME    SIZE TIMESTAMP 
-      *snap*1024*MB* (glob)
-  $ rbd snap list foo --format json | python -mjson.tool | sed 's/,$/, /'
-  [
-      {
-          "id": *,  (glob)
-          "name": "snap", 
-          "size": 1073741824, 
-          "timestamp": ""
-      }
-  ]
-  $ rbd snap list foo --format xml | xml_pp 2>&1 | grep -v '^new version at /usr/bin/xml_pp'
-  <snapshots>
-    <snapshot>
-      <id>*</id> (glob)
-      <name>snap</name>
-      <size>1073741824</size>
-      <timestamp></timestamp>
-    </snapshot>
-  </snapshots>
-  $ rbd snap list bar
-  SNAPID NAME     SIZE TIMESTAMP                
-      *snap*512*MB* (glob)
-      *snap2*1024*MB* (glob)
-  $ rbd snap list bar --format json | python -mjson.tool | sed 's/,$/, /'
-  [
-      {
-          "id": *,  (glob)
-          "name": "snap", 
-          "size": 536870912, 
-          "timestamp": * (glob)
-      }, 
-      {
-          "id": *,  (glob)
-          "name": "snap2", 
-          "size": 1073741824, 
-          "timestamp": * (glob)
-      }
-  ]
-  $ rbd snap list bar --format xml | xml_pp 2>&1 | grep -v '^new version at /usr/bin/xml_pp'
-  <snapshots>
-    <snapshot>
-      <id>*</id> (glob)
-      <name>snap</name>
-      <size>536870912</size>
-      <timestamp>*</timestamp> (glob)
-    </snapshot>
-    <snapshot>
-      <id>*</id> (glob)
-      <name>snap2</name>
-      <size>1073741824</size>
-      <timestamp>*</timestamp> (glob)
-    </snapshot>
-  </snapshots>
-  $ rbd snap list baz
-  $ rbd snap list baz --format json | python -mjson.tool | sed 's/,$/, /'
-  []
-  $ rbd snap list baz --format xml | xml_pp 2>&1 | grep -v '^new version at /usr/bin/xml_pp'
-  <snapshots></snapshots>
-  $ rbd snap list rbd_other/child
-  SNAPID NAME   SIZE TIMESTAMP                
-      *snap*512*MB* (glob)
-  $ rbd snap list rbd_other/child --format json | python -mjson.tool | sed 's/,$/, /'
-  [
-      {
-          "id": *,  (glob)
-          "name": "snap", 
-          "size": 536870912, 
-          "timestamp": * (glob)
-      }
-  ]
-  $ rbd snap list rbd_other/child --format xml | xml_pp 2>&1 | grep -v '^new version at /usr/bin/xml_pp'
-  <snapshots>
-    <snapshot>
-      <id>*</id> (glob)
-      <name>snap</name>
-      <size>536870912</size>
-      <timestamp>*</timestamp> (glob)
-    </snapshot>
-  </snapshots>
-  $ rbd disk-usage --pool rbd_other 2>/dev/null
-  NAME                    PROVISIONED  USED 
-  child@snap                     512M     0 
-  child                          512M 4096k 
-  deep-flatten-child@snap        512M     0 
-  deep-flatten-child             512M     0 
-  <TOTAL>                       1024M 4096k 
-  $ rbd disk-usage --pool rbd_other --format json | python -mjson.tool | sed 's/,$/, /'
-  {
-      "images": [
-          {
-              "name": "child", 
-              "provisioned_size": 536870912, 
-              "snapshot": "snap", 
-              "used_size": 0
-          }, 
-          {
-              "name": "child", 
-              "provisioned_size": 536870912, 
-              "used_size": 4194304
-          }, 
-          {
-              "name": "deep-flatten-child", 
-              "provisioned_size": 536870912, 
-              "snapshot": "snap", 
-              "used_size": 0
-          }, 
-          {
-              "name": "deep-flatten-child", 
-              "provisioned_size": 536870912, 
-              "used_size": 0
-          }
-      ], 
-      "total_provisioned_size": 1073741824, 
-      "total_used_size": 4194304
-  }
-  $ rbd disk-usage --pool rbd_other --format xml | xml_pp 2>&1 | grep -v '^new version at /usr/bin/xml_pp'
-  <stats>
-    <images>
-      <image>
-        <name>child</name>
-        <snapshot>snap</snapshot>
-        <provisioned_size>536870912</provisioned_size>
-        <used_size>0</used_size>
-      </image>
-      <image>
-        <name>child</name>
-        <provisioned_size>536870912</provisioned_size>
-        <used_size>4194304</used_size>
-      </image>
-      <image>
-        <name>deep-flatten-child</name>
-        <snapshot>snap</snapshot>
-        <provisioned_size>536870912</provisioned_size>
-        <used_size>0</used_size>
-      </image>
-      <image>
-        <name>deep-flatten-child</name>
-        <provisioned_size>536870912</provisioned_size>
-        <used_size>0</used_size>
-      </image>
-    </images>
-    <total_provisioned_size>1073741824</total_provisioned_size>
-    <total_used_size>4194304</total_used_size>
-  </stats>
-
-# cleanup
-  $ rbd snap remove --no-progress rbd_other/deep-flatten-child@snap
-  $ rbd snap remove --no-progress rbd_other/child@snap
-  $ rbd snap unprotect bar@snap
-  $ rbd snap purge bar 2> /dev/null
-  $ rbd snap purge foo 2> /dev/null
-  $ rbd rm rbd_other/deep-flatten-child 2> /dev/null
-  $ rbd rm rbd_other/child 2> /dev/null
-  $ rbd rm foo 2> /dev/null
-  $ rbd rm bar 2> /dev/null
-  $ rbd rm quux 2> /dev/null
-  $ rbd rm quuy 2> /dev/null
-  $ rbd rm baz 2> /dev/null
-  $ ceph osd pool delete rbd_other rbd_other --yes-i-really-really-mean-it
-  pool 'rbd_other' removed