commit 0de2fa53a1e3d66c0456dd83b6927e1bb39db491
Merge: df376ff 7bb2282
Author: Hrvoje Ribicic <[email protected]>
Date: Thu Mar 27 17:09:50 2014 +0000
Merge branch 'stable-2.10' into stable-2.11
* stable-2.9
Fix failing gnt-node list-drbd command
* stable-2.8
Add reason parameter to RAPI client functions
Signed-off-by: Hrvoje Ribicic <[email protected]>
Conflicts:
lib/rapi/client.py: Add both params
lib/rapi/rlib2.py: Remove reference to missing LU, add aliases
src/Ganeti/Query/Query.hs: Take more imports
diff --cc lib/rapi/client.py
index 174f171,4b4969d..250f4f7
--- a/lib/rapi/client.py
+++ b/lib/rapi/client.py
@@@ -1179,9 -1276,8 +1276,8 @@@ class GanetiRapiClient(object): # pylin
(GANETI_RAPI_VERSION, instance)), query,
None)
def ExportInstance(self, instance, mode, destination, shutdown=None,
-- remove_instance=None,
- x509_key_name=None, destination_x509_ca=None,
- compress=None):
- x509_key_name=None, destination_x509_ca=None,
reason=None):
++ remove_instance=None, x509_key_name=None,
++ destination_x509_ca=None, compress=None,
reason=None):
"""Exports an instance.
@type instance: string
@@@ -1203,14 -1301,16 +1301,17 @@@
_SetItemIf(body, x509_key_name is not None, "x509_key_name",
x509_key_name)
_SetItemIf(body, destination_x509_ca is not None,
"destination_x509_ca", destination_x509_ca)
+ _SetItemIf(body, compress is not None, "compress", compress)
+ query = []
+ _AppendReason(query, reason)
+
return self._SendRequest(HTTP_PUT,
("/%s/instances/%s/export" %
- (GANETI_RAPI_VERSION, instance)), None,
body)
+ (GANETI_RAPI_VERSION, instance)), query,
body)
def MigrateInstance(self, instance, mode=None, cleanup=None,
- target_node=None):
+ target_node=None, reason=None):
"""Migrates an instance.
@type instance: string
diff --cc lib/rapi/rlib2.py
index b9828fb,2e92c05..df90620
--- a/lib/rapi/rlib2.py
+++ b/lib/rapi/rlib2.py
@@@ -413,6 -418,10 +417,9 @@@ class R_2_nodes_name(baserlib.OpcodeRes
"""/2/nodes/[node_name] resource.
"""
- GET_OPCODE = opcodes.OpNodeQuery
+ GET_ALIASES = {
+ "sip": "secondary_ip",
+ }
def GET(self):
"""Send information about a node.
diff --cc qa/qa_node.py
index 58c281c,42d13d6..3d02548
--- a/qa/qa_node.py
+++ b/qa/qa_node.py
@@@ -32,10 -32,10 +32,10 @@@ import qa_confi
import qa_error
import qa_utils
- from qa_utils import AssertCommand, AssertEqual
+ from qa_utils import AssertCommand, AssertEqual, AssertIn,
GetCommandOutput
-def _NodeAdd(node, readd=False):
+def NodeAdd(node, readd=False, group=None):
if not readd and node.added:
raise qa_error.Error("Node %s already in cluster" % node.primary)
elif readd and not node.added:
diff --cc qa/qa_rapi.py
index 5e6904c,7ce41c1..cfbf3ff
--- a/qa/qa_rapi.py
+++ b/qa/qa_rapi.py
@@@ -23,24 -23,24 +23,25 @@@
"""
- import tempfile
+ import functools
+ import itertools
import random
import re
- import itertools
- import functools
+ import tempfile
- from ganeti import utils
+ from ganeti import cli
+ from ganeti import compat
from ganeti import constants
from ganeti import errors
- from ganeti import cli
- from ganeti import rapi
+ from ganeti import pathutils
from ganeti import objects
+ from ganeti import opcodes
from ganeti import query
- from ganeti import compat
from ganeti import qlang
- from ganeti import pathutils
+ from ganeti import rapi
+ from ganeti import utils
+from ganeti.http.auth import ParsePasswordFile
import ganeti.rapi.client # pylint: disable=W0611
import ganeti.rapi.client_utils
diff --cc test/py/ganeti.rapi.rlib2_unittest.py
index 1b760c8,ba0ac62..eee87e4
--- a/test/py/ganeti.rapi.rlib2_unittest.py
+++ b/test/py/ganeti.rapi.rlib2_unittest.py
@@@ -1584,10 -1620,44 +1620,44 @@@ class TestGroupModify(unittest.TestCase
self.assertTrue(isinstance(op, opcodes.OpGroupSetParams))
self.assertEqual(op.group_name, name)
- self.assertFalse(hasattr(op, "alloc_policy"))
- self.assertFalse(hasattr(op, "dry_run"))
+ self.assertTrue(op.alloc_policy is None)
+ self.assertFalse(op.dry_run)
self.assertRaises(IndexError, cl.GetNextSubmittedJob)
+ def testCustomParamRename(self):
+ clfactory = _FakeClientFactory(_FakeClient)
+
+ name = "groupie"
+ data = {
+ "custom_diskparams": {},
+ "custom_ipolicy": {},
+ "custom_ndparams": {},
+ }
+
+ handler = _CreateHandler(rlib2.R_2_groups_name_modify, [name], {},
data,
+ clfactory)
+ job_id = handler.PUT()
+
+ cl = clfactory.GetNextClient()
+ self.assertRaises(IndexError, clfactory.GetNextClient)
+
+ (exp_job_id, (op, )) = cl.GetNextSubmittedJob()
+ self.assertEqual(job_id, exp_job_id)
+
+ self.assertTrue(isinstance(op, opcodes.OpGroupSetParams))
+ self.assertEqual(op.diskparams, {})
+ self.assertEqual(op.ipolicy, {})
+ self.assertEqual(op.ndparams, {})
+
+ self.assertRaises(IndexError, cl.GetNextSubmittedJob)
+
+ # Define both
+ data["diskparams"] = {}
+ assert "diskparams" in data and "custom_diskparams" in data
+ handler = _CreateHandler(rlib2.R_2_groups_name_modify, [name], {},
data,
+ clfactory)
+ self.assertRaises(http.HttpBadRequest, handler.PUT)
+
class TestGroupAdd(unittest.TestCase):
def test(self):