From 483be60dfc27bbef7d86dfcde319d72ec61454ee Mon Sep 17 00:00:00 2001
From: Adeodato Simo <dato@google.com>
Date: Wed, 8 Dec 2010 19:49:24 +0000
Subject: [PATCH] Introduce OpAddGroup.ndparams and expose in CLI

Signed-off-by: Adeodato Simo <dato@google.com>
Reviewed-by: Guido Trotter <ultrotter@google.com>
---
 lib/client/gnt_group.py | 4 ++--
 lib/cmdlib.py           | 7 ++++++-
 lib/opcodes.py          | 5 ++++-
 man/gnt-group.rst       | 8 +++++++-
 4 files changed, 19 insertions(+), 5 deletions(-)

diff --git a/lib/client/gnt_group.py b/lib/client/gnt_group.py
index 9ddd499a2..545f0d2c1 100644
--- a/lib/client/gnt_group.py
+++ b/lib/client/gnt_group.py
@@ -54,7 +54,7 @@ def AddGroup(opts, args):
 
   """
   (group_name,) = args
-  op = opcodes.OpAddGroup(group_name=group_name)
+  op = opcodes.OpAddGroup(group_name=group_name, ndparams=opts.ndparams)
   SubmitOpCode(op, opts=opts)
 
 
@@ -137,7 +137,7 @@ def RenameGroup(opts, args):
 
 commands = {
   "add": (
-    AddGroup, ARGS_ONE_GROUP, [DRY_RUN_OPT],
+    AddGroup, ARGS_ONE_GROUP, [DRY_RUN_OPT, NODE_PARAMS_OPT],
     "<group_name>", "Add a new node group to the cluster"),
   "list": (
     ListGroups, ARGS_MANY_GROUPS,
diff --git a/lib/cmdlib.py b/lib/cmdlib.py
index ec64c2930..95ae88c31 100644
--- a/lib/cmdlib.py
+++ b/lib/cmdlib.py
@@ -10178,6 +10178,7 @@ class LUAddGroup(LogicalUnit):
 
   _OP_PARAMS = [
     _PGroupName,
+    ("ndparams", None, ht.TOr(ht.TDict, ht.TNone)),
     ]
 
   REQ_BGL = False
@@ -10207,6 +10208,9 @@ class LUAddGroup(LogicalUnit):
                                  (self.op.group_name, existing_uuid),
                                  errors.ECODE_EXISTS)
 
+    if self.op.ndparams:
+      utils.ForceDictType(self.op.ndparams, constants.NDS_PARAMETER_TYPES)
+
   def BuildHooksEnv(self):
     """Build hooks env.
 
@@ -10222,7 +10226,8 @@ class LUAddGroup(LogicalUnit):
 
     """
     group_obj = objects.NodeGroup(name=self.op.group_name, members=[],
-                                  uuid=self.group_uuid)
+                                  uuid=self.group_uuid,
+                                  ndparams=self.op.ndparams)
 
     self.cfg.AddNodeGroup(group_obj, self.proc.GetECId(), check_uuid=False)
     del self.remove_locks[locking.LEVEL_NODEGROUP]
diff --git a/lib/opcodes.py b/lib/opcodes.py
index 6bf14d5b6..172e451ab 100644
--- a/lib/opcodes.py
+++ b/lib/opcodes.py
@@ -725,7 +725,10 @@ class OpAddGroup(OpCode):
   """Add a node group to the cluster."""
   OP_ID = "OP_GROUP_ADD"
   OP_DSC_FIELD = "group_name"
-  __slots__ = ["group_name"]
+  __slots__ = [
+    "group_name",
+    "ndparams",
+    ]
 
 
 class OpQueryGroups(OpCode):
diff --git a/man/gnt-group.rst b/man/gnt-group.rst
index e43a8b9d7..777b0d2c0 100644
--- a/man/gnt-group.rst
+++ b/man/gnt-group.rst
@@ -23,11 +23,17 @@ COMMANDS
 ADD
 ~~~
 
-| **add** {*group*}
+| **add**
+| [--node-parameters=*NDPARAMS*]
+| {*group*}
 
 Creates a new group with the given name. The node group will be
 initially empty.
 
+The ``--node-parameters`` option allows you to set default node
+parameters for nodes in the group. Please see **ganeti**(7) for more
+information about supported key=value pairs.
+
 REMOVE
 ~~~~~~
 
-- 
GitLab