storagepool.rng 13.7 KB
Newer Older
1
<?xml version="1.0"?>
A
Aron Griffis 已提交
2
<!-- A Relax NG schema for the libvirt storage pool XML format -->
3 4
<grammar xmlns="http://relaxng.org/ns/structure/1.0"
    datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
E
Eric Blake 已提交
5
  <include href='basictypes.rng'/>
6 7 8 9 10 11 12 13
  <start>
    <ref name='pool'/>
  </start>


  <define name='pool'>
    <element name='pool'>
      <choice>
14 15 16 17 18 19 20 21
        <ref name='pooldir'/>
        <ref name='poolfs'/>
        <ref name='poolnetfs'/>
        <ref name='poollogical'/>
        <ref name='pooldisk'/>
        <ref name='pooliscsi'/>
        <ref name='poolscsi'/>
        <ref name='poolmpath'/>
22
        <ref name='poolrbd'/>
23
        <ref name='poolsheepdog'/>
E
Eric Blake 已提交
24
        <ref name='poolgluster'/>
25 26 27 28 29 30 31 32
      </choice>
    </element>
  </define>

  <define name='pooldir'>
    <attribute name='type'>
      <value>dir</value>
    </attribute>
E
Eric Blake 已提交
33 34 35 36 37 38
    <interleave>
      <ref name='commonmetadata'/>
      <ref name='sizing'/>
      <ref name='sourcedir'/>
      <ref name='target'/>
    </interleave>
39 40 41 42 43 44
  </define>

  <define name='poolfs'>
    <attribute name='type'>
      <value>fs</value>
    </attribute>
E
Eric Blake 已提交
45 46 47 48 49 50
    <interleave>
      <ref name='commonmetadata'/>
      <ref name='sizing'/>
      <ref name='sourcefs'/>
      <ref name='target'/>
    </interleave>
51 52 53 54 55 56
  </define>

  <define name='poolnetfs'>
    <attribute name='type'>
      <value>netfs</value>
    </attribute>
E
Eric Blake 已提交
57 58 59 60 61 62
    <interleave>
      <ref name='commonmetadata'/>
      <ref name='sizing'/>
      <ref name='sourcenetfs'/>
      <ref name='target'/>
    </interleave>
63 64 65 66 67 68
  </define>

  <define name='poollogical'>
    <attribute name='type'>
      <value>logical</value>
    </attribute>
E
Eric Blake 已提交
69 70 71 72 73 74
    <interleave>
      <ref name='commonmetadata'/>
      <ref name='sizing'/>
      <ref name='sourcelogical'/>
      <ref name='targetlogical'/>
    </interleave>
75 76 77 78 79 80
  </define>

  <define name='pooldisk'>
    <attribute name='type'>
      <value>disk</value>
    </attribute>
E
Eric Blake 已提交
81 82 83 84 85 86
    <interleave>
      <ref name='commonmetadata'/>
      <ref name='sizing'/>
      <ref name='sourcedisk'/>
      <ref name='target'/>
    </interleave>
87 88 89 90 91 92
  </define>

  <define name='pooliscsi'>
    <attribute name='type'>
      <value>iscsi</value>
    </attribute>
E
Eric Blake 已提交
93 94 95 96 97 98
    <interleave>
      <ref name='commonmetadata'/>
      <ref name='sizing'/>
      <ref name='sourceiscsi'/>
      <ref name='target'/>
    </interleave>
99 100 101 102 103 104
  </define>

  <define name='poolscsi'>
    <attribute name='type'>
      <value>scsi</value>
    </attribute>
E
Eric Blake 已提交
105 106 107 108 109 110
    <interleave>
      <ref name='commonmetadata'/>
      <ref name='sizing'/>
      <ref name='sourcescsi'/>
      <ref name='target'/>
    </interleave>
111 112
  </define>

113 114 115 116
  <define name='poolmpath'>
    <attribute name='type'>
      <value>mpath</value>
    </attribute>
E
Eric Blake 已提交
117 118 119 120 121 122 123 124
    <interleave>
      <ref name='commonmetadata'/>
      <ref name='sizing'/>
      <optional>
        <ref name='sourcempath'/>
      </optional>
      <ref name='target'/>
    </interleave>
125 126
  </define>

127 128 129 130
  <define name='poolrbd'>
    <attribute name='type'>
      <value>rbd</value>
    </attribute>
E
Eric Blake 已提交
131 132 133 134 135
    <interleave>
      <ref name='commonmetadata'/>
      <ref name='sizing'/>
      <ref name='sourcerbd'/>
    </interleave>
136 137
  </define>

138 139 140 141
  <define name='poolsheepdog'>
    <attribute name='type'>
      <value>sheepdog</value>
    </attribute>
E
Eric Blake 已提交
142 143 144 145 146
    <interleave>
      <ref name='commonmetadata'/>
      <ref name='sizing'/>
      <ref name='sourcesheepdog'/>
    </interleave>
147 148
  </define>

E
Eric Blake 已提交
149 150 151 152 153 154 155 156 157 158 159
  <define name='poolgluster'>
    <attribute name='type'>
      <value>gluster</value>
    </attribute>
    <interleave>
      <ref name='commonmetadata'/>
      <ref name='sizing'/>
      <ref name='sourcegluster'/>
    </interleave>
  </define>

160
  <define name='sourceinfovendor'>
E
Eric Blake 已提交
161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176
    <interleave>
      <optional>
        <element name='vendor'>
          <attribute name='name'>
            <text/>
          </attribute>
        </element>
      </optional>
      <optional>
        <element name='product'>
          <attribute name='name'>
            <text/>
          </attribute>
        </element>
      </optional>
    </interleave>
177 178
  </define>

179
  <define name='commonmetadata'>
E
Eric Blake 已提交
180 181 182
    <interleave>
      <element name='name'>
        <ref name='genericName'/>
183
      </element>
E
Eric Blake 已提交
184 185 186 187 188 189
      <optional>
        <element name='uuid'>
          <ref name='UUID'/>
        </element>
      </optional>
    </interleave>
190 191 192
  </define>

  <define name='sizing'>
E
Eric Blake 已提交
193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209
    <interleave>
      <optional>
        <element name='capacity'>
          <ref name='scaledInteger'/>
        </element>
      </optional>
      <optional>
        <element name='allocation'>
          <ref name='scaledInteger'/>
        </element>
      </optional>
      <optional>
        <element name='available'>
          <ref name='scaledInteger'/>
        </element>
      </optional>
    </interleave>
210 211 212 213 214
  </define>

  <define name='permissions'>
    <optional>
      <element name='permissions'>
E
Eric Blake 已提交
215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236
        <interleave>
          <element name='mode'>
            <ref name='octalMode'/>
          </element>
          <element name='owner'>
            <choice>
              <ref name='unsignedInt'/>
              <value>-1</value>
            </choice>
          </element>
          <element name='group'>
            <choice>
              <ref name='unsignedInt'/>
              <value>-1</value>
            </choice>
          </element>
          <optional>
            <element name='label'>
              <text/>
            </element>
          </optional>
        </interleave>
237 238 239 240 241 242
      </element>
    </optional>
  </define>

  <define name='target'>
    <element name='target'>
E
Eric Blake 已提交
243 244 245 246 247 248
      <interleave>
        <element name='path'>
          <ref name='absFilePath'/>
        </element>
        <ref name='permissions'/>
      </interleave>
249 250 251
    </element>
  </define>

252 253
  <define name='targetlogical'>
    <element name='target'>
E
Eric Blake 已提交
254 255 256 257 258 259 260 261
      <interleave>
        <optional>
          <element name='path'>
            <ref name='absFilePath'/>
          </element>
        </optional>
        <ref name='permissions'/>
      </interleave>
262 263 264
    </element>
  </define>

265
  <define name='sourceinfohost'>
266 267 268 269
    <oneOrMore>
      <element name='host'>
        <attribute name='name'>
          <text/>
270
        </attribute>
271 272 273 274 275 276 277 278
        <optional>
          <attribute name='port'>
            <ref name="PortNumber"/>
          </attribute>
        </optional>
        <empty/>
      </element>
    </oneOrMore>
279 280 281 282 283
  </define>

  <define name='sourceinfodev'>
    <element name='device'>
      <attribute name='path'>
284
        <choice>
E
Eric Blake 已提交
285
          <ref name='absFilePath'/>
286
          <ref name='genericName'/>
287
          <ref name='IscsiQualifiedName'/>
288
        </choice>
289 290
      </attribute>
      <choice>
291 292
        <empty/>
        <ref name='devextents'/>
293 294 295 296
      </choice>
    </element>
  </define>

D
David Allan 已提交
297 298 299 300 301 302 303 304
  <define name='initiatorinfo'>
    <element name='initiator'>
      <element name='iqn'>
        <attribute name='name'>
          <text/>
        </attribute>
        <empty/>
      </element>
D
David Allan 已提交
305 306 307
    </element>
  </define>

308 309 310
  <define name='devextents'>
    <oneOrMore>
      <element name='freeExtent'>
311
        <attribute name='start'>
E
Eric Blake 已提交
312
          <ref name='unsignedLong'/>
313 314
        </attribute>
        <attribute name='end'>
E
Eric Blake 已提交
315
          <ref name='unsignedLong'/>
316
        </attribute>
317 318 319 320 321 322 323
      </element>
    </oneOrMore>
  </define>

  <define name='sourceinfodir'>
    <element name='dir'>
      <attribute name='path'>
E
Eric Blake 已提交
324
        <ref name='absDirPath'/>
325 326 327 328 329
      </attribute>
      <empty/>
    </element>
  </define>

330 331 332 333 334 335 336 337 338
  <define name='sourceinfonetfsgluster'>
    <element name='dir'>
      <attribute name='path'>
        <ref name='dirPath'/>
      </attribute>
      <empty/>
    </element>
  </define>

339 340 341 342 343 344
  <define name='sourceinfoname'>
    <element name='name'>
      <text/>
    </element>
  </define>

345 346 347 348 349
  <define name='sourceinfoauth'>
    <element name='auth'>
      <attribute name='type'>
        <choice>
          <value>chap</value>
350
          <value>ceph</value>
351 352
        </choice>
      </attribute>
353 354 355 356
      <attribute name='username'>
        <text/>
      </attribute>
      <ref name='sourceinfoauthsecret'/>
357 358 359 360 361 362 363 364 365 366 367 368 369
    </element>
  </define>

  <define name='sourceinfoauthsecret'>
    <element name='secret'>
      <choice>
        <attribute name='uuid'>
          <text/>
        </attribute>
        <attribute name='usage'>
          <text/>
        </attribute>
      </choice>
370 371 372
    </element>
  </define>

373 374 375
  <define name='sourcefmtfs'>
    <optional>
      <element name='format'>
376 377 378 379 380
        <attribute name='type'>
          <choice>
            <value>auto</value>
            <value>ext2</value>
            <value>ext3</value>
381
            <value>ext4</value>
382 383 384
            <value>ufs</value>
            <value>iso9660</value>
            <value>udf</value>
385
            <value>gfs</value>
386 387 388 389 390 391 392
            <value>gfs2</value>
            <value>vfat</value>
            <value>hfs+</value>
            <value>xfs</value>
            <value>ocfs2</value>
          </choice>
        </attribute>
393 394 395 396 397 398 399 400
      </element>
    </optional>
  </define>


  <define name='sourcefmtnetfs'>
    <optional>
      <element name='format'>
401 402 403 404
        <attribute name='type'>
          <choice>
            <value>auto</value>
            <value>nfs</value>
405
            <value>cifs</value>
406 407
          </choice>
        </attribute>
408 409 410 411 412 413 414 415
      </element>
    </optional>
  </define>


  <define name='sourcefmtdisk'>
    <optional>
      <element name='format'>
416 417 418 419 420 421 422 423 424 425 426 427 428
        <attribute name='type'>
          <choice>
            <value>none</value>
            <value>dos</value>
            <value>dvh</value>
            <value>gpt</value>
            <value>mac</value>
            <value>bsd</value>
            <value>pc98</value>
            <value>sun</value>
            <value>lvm2</value>
          </choice>
        </attribute>
429 430 431
        <optional>
          <ref name='sourceinfovendor'/>
        </optional>
432 433 434 435 436 437 438 439
      </element>
    </optional>
  </define>


  <define name='sourcefmtlogical'>
    <optional>
      <element name='format'>
440 441 442 443 444 445
        <attribute name='type'>
          <choice>
            <value>auto</value>
            <value>lvm2</value>
          </choice>
        </attribute>
446 447 448
        <optional>
          <ref name='sourceinfovendor'/>
        </optional>
449 450 451 452 453 454 455 456
      </element>
    </optional>
  </define>


  <define name='sourcedir'>
    <optional>
      <element name='source'>
457
        <empty/>
458 459 460
        <optional>
          <ref name='sourceinfovendor'/>
        </optional>
461 462 463
      </element>
    </optional>
  </define>
464

465 466
  <define name='sourcefs'>
    <element name='source'>
E
Eric Blake 已提交
467 468 469 470 471 472 473
      <interleave>
        <ref name='sourceinfodev'/>
        <ref name='sourcefmtfs'/>
        <optional>
          <ref name='sourceinfovendor'/>
        </optional>
      </interleave>
474 475 476 477 478
    </element>
  </define>

  <define name='sourcenetfs'>
    <element name='source'>
479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504
      <choice>
        <group>
          <interleave>
            <ref name='sourceinfohost'/>
            <ref name='sourceinfodir'/>
            <ref name='sourcefmtnetfs'/>
            <optional>
                <ref name='sourceinfovendor'/>
            </optional>
          </interleave>
        </group>
        <group>
          <interleave>
            <ref name='sourceinfohost'/>
            <ref name='sourceinfonetfsgluster'/>
            <element name='format'>
              <attribute name='type'>
                <value>glusterfs</value>
              </attribute>
            </element>
            <optional>
                <ref name='sourceinfovendor'/>
            </optional>
          </interleave>
        </group>
      </choice>
505 506 507 508 509
    </element>
  </define>

  <define name='sourcelogical'>
    <element name='source'>
E
Eric Blake 已提交
510 511 512 513 514 515 516 517 518 519
      <interleave>
        <oneOrMore>
          <optional>
            <ref name='sourceinfoname'/>
          </optional>
          <optional>
            <ref name='sourceinfodev'/>
          </optional>
        </oneOrMore>
        <ref name='sourcefmtlogical'/>
520
        <optional>
E
Eric Blake 已提交
521
          <ref name='sourceinfovendor'/>
522
        </optional>
E
Eric Blake 已提交
523
      </interleave>
524 525 526 527 528
    </element>
  </define>

  <define name='sourcedisk'>
    <element name='source'>
E
Eric Blake 已提交
529 530 531 532 533 534 535
      <interleave>
        <ref name='sourceinfodev'/>
        <ref name='sourcefmtdisk'/>
        <optional>
          <ref name='sourceinfovendor'/>
        </optional>
      </interleave>
536 537 538 539 540
    </element>
  </define>

  <define name='sourceiscsi'>
    <element name='source'>
E
Eric Blake 已提交
541 542 543 544 545 546 547 548 549 550 551 552 553
      <interleave>
        <ref name='sourceinfohost'/>
        <ref name='sourceinfodev'/>
        <optional>
          <ref name='initiatorinfo'/>
        </optional>
        <optional>
          <ref name='sourceinfoauth'/>
        </optional>
        <optional>
          <ref name='sourceinfovendor'/>
        </optional>
      </interleave>
554 555 556 557 558
    </element>
  </define>

  <define name='sourcescsi'>
    <element name='source'>
E
Eric Blake 已提交
559 560 561 562 563 564
      <interleave>
        <ref name='sourceinfoadapter'/>
        <optional>
          <ref name='sourceinfovendor'/>
        </optional>
      </interleave>
565 566 567
    </element>
  </define>

568 569 570 571 572
  <define name='sourcempath'>
    <element name='source'>
      <empty/>
    </element>
  </define>
573

574 575
  <define name='sourcerbd'>
    <element name='source'>
E
Eric Blake 已提交
576 577 578 579 580 581 582
      <interleave>
        <ref name='sourceinfoname'/>
        <ref name='sourceinfohost'/>
        <optional>
          <ref name='sourceinfoauth'/>
        </optional>
      </interleave>
583 584 585
    </element>
  </define>

586 587
  <define name='sourcesheepdog'>
    <element name='source'>
E
Eric Blake 已提交
588 589 590 591
      <interleave>
        <ref name='sourceinfohost'/>
        <ref name='sourceinfoname'/>
      </interleave>
592 593 594
    </element>
  </define>

E
Eric Blake 已提交
595 596 597 598 599 600 601 602 603 604 605 606
  <define name='sourcegluster'>
    <element name='source'>
      <interleave>
        <ref name='sourceinfohost'/>
        <ref name='sourceinfoname'/>
        <optional>
          <ref name='sourceinfodir'/>
        </optional>
      </interleave>
    </element>
  </define>

607 608 609 610 611 612
  <define name='IscsiQualifiedName'>
    <data type='string'>
      <param name="pattern">iqn\.[0-9]{4}-(0[1-9]|1[0-2])\.[a-zA-Z0-9\.\-]+(:.+)?</param>
    </data>
  </define>

613
</grammar>