rapi.rst 14.2 KB
Newer Older
1 2 3
Ganeti remote API
=================

Iustin Pop's avatar
Iustin Pop committed
4
Documents Ganeti version |version|
5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27

.. contents::

Introduction
------------

Ganeti supports a remote API for enable external tools to easily
retrieve information about a cluster's state. The remote API daemon,
*ganeti-rapi*, is automatically started on the master node. By default
it runs on TCP port 5080, but this can be changed either in
``.../constants.py`` or via the command line parameter *-p*. SSL mode,
which is used by default, can also be disabled by passing command line
parameters.

Protocol
--------

The protocol used is JSON_ over HTTP designed after the REST_
principle.

.. _JSON: http://www.json.org/
.. _REST: http://en.wikipedia.org/wiki/Representational_State_Transfer

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
Generic parameters
------------------

A few parameter mean the same thing across all resources which implement it.

``bulk``
++++++++

Bulk-mode means that for the resources which usually return just a
list of child resources (e.g. ``/2/instances`` which returns just
instance names), the output will instead contain detailed data for all
these subresources. This is more efficient than query-ing the
sub-resources themselves.

``dry-run``
+++++++++++

The optional *dry-run* argument, if provided and set to a positive
integer value (e.g. ``?dry-run=1``), signals to Ganeti that the job
should not be executed, only the pre-execution checks will be done.

This is useful in trying to determine (without guarantees though, as
in the meantime the cluster state could have changed) if the operation
is likely to succeed or at least start executing.

53 54 55 56 57 58
``force``
+++++++++++

Force operation to continue even if it will cause the cluster to become
inconsistent (e.g. because there are not enough master candidates).

59 60 61 62 63 64 65 66 67
Usage examples
--------------

You can access the API using your favorite programming language as
long as it supports network connections.

Shell
+++++

Iustin Pop's avatar
Iustin Pop committed
68 69
.. highlight:: sh

70 71
Using wget::

Iustin Pop's avatar
Iustin Pop committed
72
   wget -q -O - https://CLUSTERNAME:5080/2/info
73 74 75 76 77 78 79 80 81

or curl::

  curl https://CLUSTERNAME:5080/2/info


Python
++++++

Iustin Pop's avatar
Iustin Pop committed
82
.. highlight: python
83 84

  import urllib2
Tim Boring's avatar
Tim Boring committed
85
  f = urllib2.urlopen('https://CLUSTERNAME:5080/2/info')
86 87 88 89 90 91
  print f.read()


JavaScript
++++++++++

92 93 94 95
.. warning:: While it's possible to use JavaScript, it poses several
  potential problems, including browser blocking request due to
  non-standard ports or different domain names. Fetching the data on
  the webserver is easier.
96

Iustin Pop's avatar
Iustin Pop committed
97 98
.. highlight:: javascript

99 100
::

Tim Boring's avatar
Tim Boring committed
101
  var url = 'https://CLUSTERNAME:5080/2/info';
102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119
  var info;
  var xmlreq = new XMLHttpRequest();
  xmlreq.onreadystatechange = function () {
    if (xmlreq.readyState != 4) return;
    if (xmlreq.status == 200) {
      info = eval("(" + xmlreq.responseText + ")");
      alert(info);
    } else {
      alert('Error fetching cluster info');
    }
    xmlreq = null;
  };
  xmlreq.open('GET', url, true);
  xmlreq.send(null);

Resources
---------

Iustin Pop's avatar
Iustin Pop committed
120
.. highlight:: javascript
121

Iustin Pop's avatar
Iustin Pop committed
122 123
``/``
+++++
124

Iustin Pop's avatar
Iustin Pop committed
125
The root resource.
126

Iustin Pop's avatar
Iustin Pop committed
127
It supports the following commands: ``GET``.
128

Iustin Pop's avatar
Iustin Pop committed
129 130
``GET``
~~~~~~~
131

Iustin Pop's avatar
Iustin Pop committed
132
Shows the list of mapped resources.
133

Iustin Pop's avatar
Iustin Pop committed
134
Returns: a dictionary with 'name' and 'uri' keys for each of them.
135

Iustin Pop's avatar
Iustin Pop committed
136 137
``/2``
++++++
138

Iustin Pop's avatar
Iustin Pop committed
139
The ``/2`` resource, the root of the version 2 API.
140

Iustin Pop's avatar
Iustin Pop committed
141
It supports the following commands: ``GET``.
142

Iustin Pop's avatar
Iustin Pop committed
143 144
``GET``
~~~~~~~
145

Iustin Pop's avatar
Iustin Pop committed
146
Show the list of mapped resources.
147

Iustin Pop's avatar
Iustin Pop committed
148
Returns: a dictionary with ``name`` and ``uri`` keys for each of them.
149

Iustin Pop's avatar
Iustin Pop committed
150 151
``/2/info``
+++++++++++
152

Iustin Pop's avatar
Iustin Pop committed
153
Cluster information resource.
154

Iustin Pop's avatar
Iustin Pop committed
155
It supports the following commands: ``GET``.
156

Iustin Pop's avatar
Iustin Pop committed
157 158
``GET``
~~~~~~~
159

Iustin Pop's avatar
Iustin Pop committed
160
Returns cluster information.
161

Iustin Pop's avatar
Iustin Pop committed
162
Example::
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

  {
    "config_version": 2000000,
    "name": "cluster",
    "software_version": "2.0.0~beta2",
    "os_api_version": 10,
    "export_version": 0,
    "candidate_pool_size": 10,
    "enabled_hypervisors": [
      "fake"
    ],
    "hvparams": {
      "fake": {}
     },
    "default_hypervisor": "fake",
    "master": "node1.example.com",
    "architecture": [
      "64bit",
      "x86_64"
    ],
    "protocol_version": 20,
    "beparams": {
      "default": {
        "auto_balance": true,
        "vcpus": 1,
        "memory": 128
       }
      }
    }

193 194 195 196 197 198 199 200 201 202 203 204 205 206

``/2/redistribute-config``
++++++++++++++++++++++++++

Redistribute configuration to all nodes.

It supports the following commands: ``PUT``.

``PUT``
~~~~~~~

Redistribute configuration to all nodes. The result will be a job id.


Iustin Pop's avatar
Iustin Pop committed
207 208
``/2/instances``
++++++++++++++++
209

Iustin Pop's avatar
Iustin Pop committed
210
The instances resource.
211

Iustin Pop's avatar
Iustin Pop committed
212
It supports the following commands: ``GET``, ``POST``.
213

Iustin Pop's avatar
Iustin Pop committed
214 215
``GET``
~~~~~~~
216

Iustin Pop's avatar
Iustin Pop committed
217
Returns a list of all available instances.
218

Iustin Pop's avatar
Iustin Pop committed
219
Example::
220 221 222 223 224 225 226 227 228 229 230 231

    [
      {
        "name": "web.example.com",
        "uri": "\/instances\/web.example.com"
      },
      {
        "name": "mail.example.com",
        "uri": "\/instances\/mail.example.com"
      }
    ]

Iustin Pop's avatar
Iustin Pop committed
232 233 234
If the optional *bulk* argument is provided and set to a true value
(i.e ``?bulk=1``), the output contains detailed information about
instances as a list.
235

Iustin Pop's avatar
Iustin Pop committed
236
Example::
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

    [
      {
         "status": "running",
         "disk_usage": 20480,
         "nic.bridges": [
           "xen-br0"
          ],
         "name": "web.example.com",
         "tags": ["tag1", "tag2"],
         "beparams": {
           "vcpus": 2,
           "memory": 512
         },
         "disk.sizes": [
             20480
         ],
         "pnode": "node1.example.com",
         "nic.macs": ["01:23:45:67:89:01"],
         "snodes": ["node2.example.com"],
         "disk_template": "drbd",
         "admin_state": true,
         "os": "debian-etch",
         "oper_state": true
      },
      ...
    ]


Iustin Pop's avatar
Iustin Pop committed
266 267
``POST``
~~~~~~~~
268

Iustin Pop's avatar
Iustin Pop committed
269
Creates an instance.
270

271 272 273 274 275 276
If the optional *dry-run* argument is provided and set to a positive
integer valu (e.g. ``?dry-run=1``), the job will not be actually
executed, only the pre-execution checks will be done. Query-ing the
job result will return, in both dry-run and normal case, the list of
nodes selected for the instance.

Iustin Pop's avatar
Iustin Pop committed
277
Returns: a job ID that can be used later for polling.
278

Iustin Pop's avatar
Iustin Pop committed
279 280
``/2/instances/[instance_name]``
++++++++++++++++++++++++++++++++
281

Iustin Pop's avatar
Iustin Pop committed
282
Instance-specific resource.
283

Iustin Pop's avatar
Iustin Pop committed
284
It supports the following commands: ``GET``, ``DELETE``.
285

Iustin Pop's avatar
Iustin Pop committed
286 287
``GET``
~~~~~~~
288

Iustin Pop's avatar
Iustin Pop committed
289 290
Returns information about an instance, similar to the bulk output from
the instance list.
291

Iustin Pop's avatar
Iustin Pop committed
292 293
``DELETE``
~~~~~~~~~~
294

Iustin Pop's avatar
Iustin Pop committed
295
Deletes an instance.
296

297 298
It supports the ``dry-run`` argument.

299

300 301 302 303 304 305 306 307 308 309 310 311 312 313
``/2/instances/[instance_name]/info``
+++++++++++++++++++++++++++++++++++++++

It supports the following commands: ``GET``.

``GET``
~~~~~~~

Requests detailed information about the instance. An optional parameter,
``static`` (bool), can be set to return only static information from the
configuration without querying the instance's nodes. The result will be a job
id.


Iustin Pop's avatar
Iustin Pop committed
314 315
``/2/instances/[instance_name]/reboot``
+++++++++++++++++++++++++++++++++++++++
316

Iustin Pop's avatar
Iustin Pop committed
317
Reboots URI for an instance.
318

Iustin Pop's avatar
Iustin Pop committed
319
It supports the following commands: ``POST``.
320

Iustin Pop's avatar
Iustin Pop committed
321 322
``POST``
~~~~~~~~
323

Iustin Pop's avatar
Iustin Pop committed
324
Reboots the instance.
325

Iustin Pop's avatar
Iustin Pop committed
326 327
The URI takes optional ``type=hard|soft|full`` and
``ignore_secondaries=False|True`` parameters.
328

329 330 331
It supports the ``dry-run`` argument.


Iustin Pop's avatar
Iustin Pop committed
332 333
``/2/instances/[instance_name]/shutdown``
+++++++++++++++++++++++++++++++++++++++++
334

Iustin Pop's avatar
Iustin Pop committed
335
Instance shutdown URI.
336

Iustin Pop's avatar
Iustin Pop committed
337
It supports the following commands: ``PUT``.
338

Iustin Pop's avatar
Iustin Pop committed
339 340
``PUT``
~~~~~~~
341

Iustin Pop's avatar
Iustin Pop committed
342
Shutdowns an instance.
343

344 345
It supports the ``dry-run`` argument.

346

Iustin Pop's avatar
Iustin Pop committed
347 348
``/2/instances/[instance_name]/startup``
++++++++++++++++++++++++++++++++++++++++
349

Iustin Pop's avatar
Iustin Pop committed
350
Instance startup URI.
351

Iustin Pop's avatar
Iustin Pop committed
352
It supports the following commands: ``PUT``.
353

Iustin Pop's avatar
Iustin Pop committed
354 355
``PUT``
~~~~~~~
356

Iustin Pop's avatar
Iustin Pop committed
357
Startup an instance.
358

Iustin Pop's avatar
Iustin Pop committed
359 360
The URI takes an optional ``force=False|True`` parameter to start the
instance if even if secondary disks are failing.
361

362 363
It supports the ``dry-run`` argument.

364 365 366 367 368 369 370 371 372 373 374 375
``/2/instances/[instance_name]/reinstall``
++++++++++++++++++++++++++++++++++++++++++++++

Installs the operating system again.

It supports the following commands: ``POST``.

``POST``
~~~~~~~~

Takes the parameters ``os`` (OS template name) and ``nostartup`` (bool).

376

377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392
``/2/instances/[instance_name]/replace-disks``
++++++++++++++++++++++++++++++++++++++++++++++

Replaces disks on an instance.

It supports the following commands: ``POST``.

``POST``
~~~~~~~~

Takes the parameters ``mode`` (one of ``replace_on_primary``,
``replace_on_secondary``, ``replace_new_secondary`` or ``replace_auto``),
``disks`` (comma separated list of disk indexes), ``remote_node`` and
``iallocator``.


Iustin Pop's avatar
Iustin Pop committed
393 394
``/2/instances/[instance_name]/tags``
+++++++++++++++++++++++++++++++++++++
395

Iustin Pop's avatar
Iustin Pop committed
396
Manages per-instance tags.
397

Iustin Pop's avatar
Iustin Pop committed
398
It supports the following commands: ``GET``, ``PUT``, ``DELETE``.
399

Iustin Pop's avatar
Iustin Pop committed
400 401
``GET``
~~~~~~~
402

Iustin Pop's avatar
Iustin Pop committed
403
Returns a list of tags.
404

Iustin Pop's avatar
Iustin Pop committed
405
Example::
406

Iustin Pop's avatar
Iustin Pop committed
407
    ["tag1", "tag2", "tag3"]
408

Iustin Pop's avatar
Iustin Pop committed
409 410
``PUT``
~~~~~~~
411

Iustin Pop's avatar
Iustin Pop committed
412
Add a set of tags.
413

Iustin Pop's avatar
Iustin Pop committed
414
The request as a list of strings should be ``PUT`` to this URI. The
415
result will be a job id.
416

417 418 419
It supports the ``dry-run`` argument.


Iustin Pop's avatar
Iustin Pop committed
420 421
``DELETE``
~~~~~~~~~~
422

Iustin Pop's avatar
Iustin Pop committed
423
Delete a tag.
424

Iustin Pop's avatar
Iustin Pop committed
425 426
In order to delete a set of tags, the DELETE request should be
addressed to URI like::
427

Iustin Pop's avatar
Iustin Pop committed
428
    /tags?tag=[tag]&tag=[tag]
429

430 431 432
It supports the ``dry-run`` argument.


Iustin Pop's avatar
Iustin Pop committed
433 434
``/2/jobs``
+++++++++++
435

Iustin Pop's avatar
Iustin Pop committed
436
The ``/2/jobs`` resource.
437

Iustin Pop's avatar
Iustin Pop committed
438
It supports the following commands: ``GET``.
439

Iustin Pop's avatar
Iustin Pop committed
440 441
``GET``
~~~~~~~
442

Iustin Pop's avatar
Iustin Pop committed
443
Returns a dictionary of jobs.
444

Iustin Pop's avatar
Iustin Pop committed
445
Returns: a dictionary with jobs id and uri.
446

Iustin Pop's avatar
Iustin Pop committed
447 448
``/2/jobs/[job_id]``
++++++++++++++++++++
449 450


Iustin Pop's avatar
Iustin Pop committed
451
Individual job URI.
452

Iustin Pop's avatar
Iustin Pop committed
453
It supports the following commands: ``GET``, ``DELETE``.
454

Iustin Pop's avatar
Iustin Pop committed
455 456
``GET``
~~~~~~~
457

Iustin Pop's avatar
Iustin Pop committed
458
Returns a job status.
459

Iustin Pop's avatar
Iustin Pop committed
460
Returns: a dictionary with job parameters.
461

Iustin Pop's avatar
Iustin Pop committed
462
The result includes:
463

Iustin Pop's avatar
Iustin Pop committed
464 465 466 467 468 469
- id: job ID as a number
- status: current job status as a string
- ops: involved OpCodes as a list of dictionaries for each
  opcodes in the job
- opstatus: OpCodes status as a list
- opresult: OpCodes results as a list of lists
470

Iustin Pop's avatar
Iustin Pop committed
471 472
``DELETE``
~~~~~~~~~~
473

Iustin Pop's avatar
Iustin Pop committed
474
Cancel a not-yet-started job.
475

Iustin Pop's avatar
Iustin Pop committed
476 477
``/2/nodes``
++++++++++++
478

Iustin Pop's avatar
Iustin Pop committed
479
Nodes resource.
480

Iustin Pop's avatar
Iustin Pop committed
481
It supports the following commands: ``GET``.
482

Iustin Pop's avatar
Iustin Pop committed
483 484
``GET``
~~~~~~~
485

Iustin Pop's avatar
Iustin Pop committed
486
Returns a list of all nodes.
487

Iustin Pop's avatar
Iustin Pop committed
488
Example::
489 490 491 492 493 494 495 496 497 498 499 500

    [
      {
        "id": "node1.example.com",
        "uri": "\/instances\/node1.example.com"
      },
      {
        "id": "node2.example.com",
        "uri": "\/instances\/node2.example.com"
      }
    ]

Iustin Pop's avatar
Iustin Pop committed
501 502 503
If the optional 'bulk' argument is provided and set to 'true' value
(i.e '?bulk=1'), the output contains detailed information about nodes
as a list.
504

Iustin Pop's avatar
Iustin Pop committed
505
Example::
506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522

    [
      {
        "pinst_cnt": 1,
        "mfree": 31280,
        "mtotal": 32763,
        "name": "www.example.com",
        "tags": [],
        "mnode": 512,
        "dtotal": 5246208,
        "sinst_cnt": 2,
        "dfree": 5171712,
        "offline": false
      },
      ...
    ]

523 524 525 526 527 528 529
``/2/nodes/[node_name]``
+++++++++++++++++++++++++++++++++

Returns information about a node.

It supports the following commands: ``GET``.

530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545
``/2/nodes/[node_name]/evacuate``
+++++++++++++++++++++++++++++++++

Evacuates all secondary instances off a node.

It supports the following commands: ``POST``.

``POST``
~~~~~~~~

To evacuate a node, either one of the ``iallocator`` or ``remote_node``
parameters must be passed:

    evacuate?iallocator=[iallocator]
    evacuate?remote_node=[nodeX.example.com]

546 547 548 549 550 551 552 553 554 555 556 557 558 559
``/2/nodes/[node_name]/migrate``
+++++++++++++++++++++++++++++++++

Migrates all primary instances from a node.

It supports the following commands: ``POST``.

``POST``
~~~~~~~~

No parameters are required, but ``live`` can be set to a boolean value.

    migrate?live=[0|1]

560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593
``/2/nodes/[node_name]/role``
+++++++++++++++++++++++++++++

Manages node role.

It supports the following commands: ``GET``, ``PUT``.

The role is always one of the following:

  - drained
  - master
  - master-candidate
  - offline
  - regular

``GET``
~~~~~~~

Returns the current node role.

Example::

    "master-candidate"

``PUT``
~~~~~~~

Change the node role.

The request is a string which should be PUT to this URI. The result will be a
job id.

It supports the ``force`` argument.

594 595 596 597 598 599 600 601 602 603 604 605 606
``/2/nodes/[node_name]/storage``
++++++++++++++++++++++++++++++++

Manages storage units on the node.

``GET``
~~~~~~~

Requests a list of storage units on a node. Requires the parameters
``storage_type`` (one of ``file``, ``lvm-pv`` or ``lvm-vg``) and
``output_fields``. The result will be a job id, using which the result can be
retrieved.

607 608 609 610 611 612 613 614 615 616 617 618 619
``/2/nodes/[node_name]/storage/modify``
+++++++++++++++++++++++++++++++++++++++

Modifies storage units on the node.

``PUT``
~~~~~~~

Modifies parameters of storage units on the node. Requires the parameters
``storage_type`` (one of ``file``, ``lvm-pv`` or ``lvm-vg``) and ``name`` (name
of the storage unit).  Parameters can be passed additionally. Currently only
``allocatable`` (bool) is supported. The result will be a job id.

620 621 622 623 624 625 626 627 628 629 630 631
``/2/nodes/[node_name]/storage/repair``
+++++++++++++++++++++++++++++++++++++++

Repairs a storage unit on the node.

``PUT``
~~~~~~~

Repairs a storage unit on the node. Requires the parameters ``storage_type``
(currently only ``lvm-vg`` can be repaired) and ``name`` (name of the storage
unit). The result will be a job id.

Iustin Pop's avatar
Iustin Pop committed
632 633
``/2/nodes/[node_name]/tags``
+++++++++++++++++++++++++++++
634

Iustin Pop's avatar
Iustin Pop committed
635
Manages per-node tags.
636

Iustin Pop's avatar
Iustin Pop committed
637
It supports the following commands: ``GET``, ``PUT``, ``DELETE``.
638

Iustin Pop's avatar
Iustin Pop committed
639 640
``GET``
~~~~~~~
641

Iustin Pop's avatar
Iustin Pop committed
642
Returns a list of tags.
643

Iustin Pop's avatar
Iustin Pop committed
644
Example::
645

Iustin Pop's avatar
Iustin Pop committed
646
    ["tag1", "tag2", "tag3"]
647

Iustin Pop's avatar
Iustin Pop committed
648 649
``PUT``
~~~~~~~
650

Iustin Pop's avatar
Iustin Pop committed
651
Add a set of tags.
652

Iustin Pop's avatar
Iustin Pop committed
653 654
The request as a list of strings should be PUT to this URI. The result
will be a job id.
655

656 657
It supports the ``dry-run`` argument.

Iustin Pop's avatar
Iustin Pop committed
658 659
``DELETE``
~~~~~~~~~~
660

Iustin Pop's avatar
Iustin Pop committed
661
Deletes tags.
662

Iustin Pop's avatar
Iustin Pop committed
663 664
In order to delete a set of tags, the DELETE request should be
addressed to URI like::
665

Iustin Pop's avatar
Iustin Pop committed
666
    /tags?tag=[tag]&tag=[tag]
667

668 669 670
It supports the ``dry-run`` argument.


Iustin Pop's avatar
Iustin Pop committed
671 672
``/2/os``
+++++++++
673

Iustin Pop's avatar
Iustin Pop committed
674
OS resource.
675

Iustin Pop's avatar
Iustin Pop committed
676
It supports the following commands: ``GET``.
677

Iustin Pop's avatar
Iustin Pop committed
678 679
``GET``
~~~~~~~
680

Iustin Pop's avatar
Iustin Pop committed
681
Return a list of all OSes.
682

Iustin Pop's avatar
Iustin Pop committed
683 684 685
Can return error 500 in case of a problem. Since this is a costly
operation for Ganeti 2.0, it is not recommended to execute it too
often.
686

Iustin Pop's avatar
Iustin Pop committed
687
Example::
688

Iustin Pop's avatar
Iustin Pop committed
689
    ["debian-etch"]
690

Iustin Pop's avatar
Iustin Pop committed
691 692
``/2/tags``
+++++++++++
693

Iustin Pop's avatar
Iustin Pop committed
694
Manages cluster tags.
695

Iustin Pop's avatar
Iustin Pop committed
696
It supports the following commands: ``GET``, ``PUT``, ``DELETE``.
697

Iustin Pop's avatar
Iustin Pop committed
698 699
``GET``
~~~~~~~
700

Iustin Pop's avatar
Iustin Pop committed
701
Returns the cluster tags.
702

Iustin Pop's avatar
Iustin Pop committed
703
Example::
704

Iustin Pop's avatar
Iustin Pop committed
705
    ["tag1", "tag2", "tag3"]
706

Iustin Pop's avatar
Iustin Pop committed
707 708
``PUT``
~~~~~~~
709

Iustin Pop's avatar
Iustin Pop committed
710
Adds a set of tags.
711

Iustin Pop's avatar
Iustin Pop committed
712 713
The request as a list of strings should be PUT to this URI. The result
will be a job id.
714

715 716 717
It supports the ``dry-run`` argument.


Iustin Pop's avatar
Iustin Pop committed
718 719
``DELETE``
~~~~~~~~~~
720

Iustin Pop's avatar
Iustin Pop committed
721
Deletes tags.
722

Iustin Pop's avatar
Iustin Pop committed
723 724
In order to delete a set of tags, the DELETE request should be
addressed to URI like::
725

Iustin Pop's avatar
Iustin Pop committed
726
    /tags?tag=[tag]&tag=[tag]
727

728 729 730
It supports the ``dry-run`` argument.


Iustin Pop's avatar
Iustin Pop committed
731 732
``/version``
++++++++++++
733

Iustin Pop's avatar
Iustin Pop committed
734
The version resource.
735

Iustin Pop's avatar
Iustin Pop committed
736 737
This resource should be used to determine the remote API version and
to adapt clients accordingly.
738

Iustin Pop's avatar
Iustin Pop committed
739
It supports the following commands: ``GET``.
740

Iustin Pop's avatar
Iustin Pop committed
741 742
``GET``
~~~~~~~
743

Iustin Pop's avatar
Iustin Pop committed
744 745
Returns the remote API version. Ganeti 1.2 returned ``1`` and Ganeti
2.0 returns ``2``.