Revision 7eac4a4d

b/doc/rapi.rst
280 280
Redistribute configuration to all nodes. The result will be a job id.
281 281

  
282 282

  
283
``/2/features``
284
+++++++++++++++
285

  
286
``GET``
287
~~~~~~~
288

  
289
Returns a list of features supported by the RAPI server. Available
290
features:
291

  
292
``instance-create-reqv1``
293
  Instance creation request data version 1 supported.
294

  
295

  
283 296
``/2/instances``
284 297
++++++++++++++++
285 298

  
b/lib/rapi/client.py
39 39
HTTP_PUT = "PUT"
40 40
HTTP_POST = "POST"
41 41
HTTP_OK = 200
42
HTTP_NOT_FOUND = 404
42 43
HTTP_APP_JSON = "application/json"
43 44

  
44 45
REPLACE_DISK_PRI = "replace_on_primary"
......
433 434
    """
434 435
    return self._SendRequest(HTTP_GET, "/version", None, None)
435 436

  
437
  def GetFeatures(self):
438
    """Gets the list of optional features supported by RAPI server.
439

  
440
    @rtype: list
441
    @return: List of optional features
442

  
443
    """
444
    try:
445
      return self._SendRequest(HTTP_GET, "/%s/features" % GANETI_RAPI_VERSION,
446
                               None, None)
447
    except GanetiApiError, err:
448
      # Older RAPI servers don't support this resource
449
      if err.code == HTTP_NOT_FOUND:
450
        return []
451

  
452
      raise
453

  
436 454
  def GetOperatingSystems(self):
437 455
    """Gets the Operating Systems running in the Ganeti cluster.
438 456

  
b/lib/rapi/connector.py
216 216
    "/2/info": rlib2.R_2_info,
217 217
    "/2/os": rlib2.R_2_os,
218 218
    "/2/redistribute-config": rlib2.R_2_redist_config,
219
    "/2/features": rlib2.R_2_features,
219 220
    }
220 221

  
221 222

  
b/lib/rapi/rlib2.py
118 118
    return client.QueryClusterInfo()
119 119

  
120 120

  
121
class R_2_features(baserlib.R_Generic):
122
  """/2/features resource.
123

  
124
  """
125
  @staticmethod
126
  def GET():
127
    """Returns list of optional RAPI features implemented.
128

  
129
    """
130
    return []
131

  
132

  
121 133
class R_2_os(baserlib.R_Generic):
122 134
  """/2/os resource.
123 135

  
b/test/ganeti.rapi.client_unittest.py
190 190
    self.assertEqual(2, self.client.GetVersion())
191 191
    self.assertHandler(rlib2.R_version)
192 192

  
193
  def testGetFeatures(self):
194
    for features in [[], ["foo", "bar", "baz"]]:
195
      self.rapi.AddResponse(serializer.DumpJson(features))
196
      self.assertEqual(features, self.client.GetFeatures())
197
      self.assertHandler(rlib2.R_2_features)
198

  
193 199
  def testGetOperatingSystems(self):
194 200
    self.rapi.AddResponse("[\"beos\"]")
195 201
    self.assertEqual(["beos"], self.client.GetOperatingSystems())

Also available in: Unified diff