Revision 0ea11dcb

b/htools/Ganeti/Objects.hs
426 426
$(buildParam "ND" "ndp"
427 427
  [ simpleField "oob_program"   [t| String |]
428 428
  , simpleField "spindle_count" [t| Int    |]
429
  , simpleField "exclusive_storage" [t| Bool |]
429 430
  ])
430 431

  
431 432
$(buildObject "Node" "node" $
b/lib/constants.py
942 942
# Node parameter names
943 943
ND_OOB_PROGRAM = "oob_program"
944 944
ND_SPINDLE_COUNT = "spindle_count"
945
ND_EXCLUSIVE_STORAGE = "exclusive_storage"
945 946

  
946 947
NDS_PARAMETER_TYPES = {
947 948
  ND_OOB_PROGRAM: VTYPE_STRING,
948 949
  ND_SPINDLE_COUNT: VTYPE_INT,
950
  ND_EXCLUSIVE_STORAGE: VTYPE_BOOL,
949 951
  }
950 952

  
951 953
NDS_PARAMETERS = frozenset(NDS_PARAMETER_TYPES.keys())
......
953 955
NDS_PARAMETER_TITLES = {
954 956
  ND_OOB_PROGRAM: "OutOfBandProgram",
955 957
  ND_SPINDLE_COUNT: "SpindleCount",
958
  ND_EXCLUSIVE_STORAGE: "ExclusiveStorage",
956 959
  }
957 960

  
958 961
# Logical Disks parameters
......
1842 1845
NDC_DEFAULTS = {
1843 1846
  ND_OOB_PROGRAM: "",
1844 1847
  ND_SPINDLE_COUNT: 1,
1848
  ND_EXCLUSIVE_STORAGE: False,
1845 1849
  }
1846 1850

  
1847 1851
DISK_LD_DEFAULTS = {
b/man/ganeti.rst
116 116
    hard-drives, its meaning is site-local and just the relative values
117 117
    matter.
118 118

  
119
exclusive_storage
120
    When this Boolean flag is enabled, physical disks on the node are
121
    assigned to instance disks in an exclusive manner, so as to lower I/O
122
    interference between instances. See the `Partitioned Ganeti
123
    <design-partitioned.rst>`_ design document for more details.
124

  
119 125

  
120 126
Hypervisor State Parameters
121 127
~~~~~~~~~~~~~~~~~~~~~~~~~~~
b/test/ganeti.config_unittest.py
201 201
    my_ndparams = {
202 202
        constants.ND_OOB_PROGRAM: "/bin/node-oob",
203 203
        constants.ND_SPINDLE_COUNT: 1,
204
        constants.ND_EXCLUSIVE_STORAGE: False,
204 205
        }
205 206

  
206 207
    cfg = self._get_object()
......
209 210
    cfg.Update(node, None)
210 211
    self.assertEqual(cfg.GetNdParams(node), my_ndparams)
211 212

  
213
  def testGetNdParamsInheritance(self):
214
    node_ndparams = {
215
      constants.ND_OOB_PROGRAM: "/bin/node-oob",
216
      }
217
    group_ndparams = {
218
      constants.ND_SPINDLE_COUNT: 10,
219
      }
220
    expected_ndparams = {
221
      constants.ND_OOB_PROGRAM: "/bin/node-oob",
222
      constants.ND_SPINDLE_COUNT: 10,
223
      constants.ND_EXCLUSIVE_STORAGE:
224
        constants.NDC_DEFAULTS[constants.ND_EXCLUSIVE_STORAGE],
225
      }
226
    cfg = self._get_object()
227
    node = cfg.GetNodeInfo(cfg.GetNodeList()[0])
228
    node.ndparams = node_ndparams
229
    cfg.Update(node, None)
230
    group = cfg.GetNodeGroup(node.group)
231
    group.ndparams = group_ndparams
232
    cfg.Update(group, None)
233
    self.assertEqual(cfg.GetNdParams(node), expected_ndparams)
234

  
212 235
  def testAddGroupFillsFieldsIfMissing(self):
213 236
    cfg = self._get_object()
214 237
    group = objects.NodeGroup(name="test", members=[])
b/test/ganeti.objects_unittest.py
79 79
      }
80 80
    ndparams = {
81 81
        constants.ND_OOB_PROGRAM: "/bin/cluster-oob",
82
        constants.ND_SPINDLE_COUNT: 1
82
        constants.ND_SPINDLE_COUNT: 1,
83
        constants.ND_EXCLUSIVE_STORAGE: False,
83 84
        }
84 85

  
85 86
    self.fake_cl = objects.Cluster(hvparams=hvparams, os_hvp=os_hvp,
......
164 165
    group_ndparams = {
165 166
        constants.ND_OOB_PROGRAM: "/bin/group-oob",
166 167
        constants.ND_SPINDLE_COUNT: 10,
168
        constants.ND_EXCLUSIVE_STORAGE: True,
167 169
        }
168 170
    fake_group = objects.NodeGroup(name="testgroup",
169 171
                                   ndparams=group_ndparams)
......
174 176
    node_ndparams = {
175 177
        constants.ND_OOB_PROGRAM: "/bin/node-oob",
176 178
        constants.ND_SPINDLE_COUNT: 2,
179
        constants.ND_EXCLUSIVE_STORAGE: True,
177 180
        }
178 181
    fake_node = objects.Node(name="test",
179 182
                             ndparams=node_ndparams,
......
187 190
    node_ndparams = {
188 191
        constants.ND_OOB_PROGRAM: "/bin/node-oob",
189 192
        constants.ND_SPINDLE_COUNT: 5,
193
        constants.ND_EXCLUSIVE_STORAGE: True,
190 194
        }
191 195
    fake_node = objects.Node(name="test",
192 196
                             ndparams=node_ndparams,

Also available in: Unified diff