2300 |
2300 |
return True
|
2301 |
2301 |
|
2302 |
2302 |
|
2303 |
|
def _GenerateMDDRBDBranch(cfg, vgname, primary, secondary, size, base):
|
|
2303 |
def _GenerateUniqueNames(cfg, exts):
|
|
2304 |
"""Generate a suitable LV name.
|
|
2305 |
|
|
2306 |
This will generate a logical volume name for the given instance.
|
|
2307 |
|
|
2308 |
"""
|
|
2309 |
results = []
|
|
2310 |
for val in exts:
|
|
2311 |
new_id = cfg.GenerateUniqueID()
|
|
2312 |
results.append("%s%s" % (new_id, val))
|
|
2313 |
return results
|
|
2314 |
|
|
2315 |
|
|
2316 |
def _GenerateMDDRBDBranch(cfg, primary, secondary, size, names):
|
2304 |
2317 |
"""Generate a drbd device complete with its children.
|
2305 |
2318 |
|
2306 |
2319 |
"""
|
2307 |
2320 |
port = cfg.AllocatePort()
|
2308 |
|
base = "%s_%s" % (base, port)
|
|
2321 |
vgname = cfg.GetVGName()
|
2309 |
2322 |
dev_data = objects.Disk(dev_type="lvm", size=size,
|
2310 |
|
logical_id=(vgname, "%s.data" % base))
|
|
2323 |
logical_id=(vgname, names[0]))
|
2311 |
2324 |
dev_meta = objects.Disk(dev_type="lvm", size=128,
|
2312 |
|
logical_id=(vgname, "%s.meta" % base))
|
|
2325 |
logical_id=(vgname, names[1]))
|
2313 |
2326 |
drbd_dev = objects.Disk(dev_type="drbd", size=size,
|
2314 |
2327 |
logical_id = (primary, secondary, port),
|
2315 |
2328 |
children = [dev_data, dev_meta])
|
2316 |
2329 |
return drbd_dev
|
2317 |
2330 |
|
2318 |
2331 |
|
2319 |
|
def _GenerateDiskTemplate(cfg, vgname, template_name,
|
|
2332 |
def _GenerateDiskTemplate(cfg, template_name,
|
2320 |
2333 |
instance_name, primary_node,
|
2321 |
2334 |
secondary_nodes, disk_sz, swap_sz):
|
2322 |
2335 |
"""Generate the entire disk layout for a given template type.
|
... | ... | |
2324 |
2337 |
"""
|
2325 |
2338 |
#TODO: compute space requirements
|
2326 |
2339 |
|
|
2340 |
vgname = cfg.GetVGName()
|
2327 |
2341 |
if template_name == "diskless":
|
2328 |
2342 |
disks = []
|
2329 |
2343 |
elif template_name == "plain":
|
2330 |
2344 |
if len(secondary_nodes) != 0:
|
2331 |
2345 |
raise errors.ProgrammerError("Wrong template configuration")
|
|
2346 |
|
|
2347 |
names = _GenerateUniqueNames(cfg, [".sda", ".sdb"])
|
2332 |
2348 |
sda_dev = objects.Disk(dev_type="lvm", size=disk_sz,
|
2333 |
|
logical_id=(vgname, "%s.os" % instance_name),
|
|
2349 |
logical_id=(vgname, names[0]),
|
2334 |
2350 |
iv_name = "sda")
|
2335 |
2351 |
sdb_dev = objects.Disk(dev_type="lvm", size=swap_sz,
|
2336 |
|
logical_id=(vgname, "%s.swap" % instance_name),
|
|
2352 |
logical_id=(vgname, names[1]),
|
2337 |
2353 |
iv_name = "sdb")
|
2338 |
2354 |
disks = [sda_dev, sdb_dev]
|
2339 |
2355 |
elif template_name == "local_raid1":
|
2340 |
2356 |
if len(secondary_nodes) != 0:
|
2341 |
2357 |
raise errors.ProgrammerError("Wrong template configuration")
|
|
2358 |
|
|
2359 |
|
|
2360 |
names = _GenerateUniqueNames(cfg, [".sda_m1", ".sda_m2",
|
|
2361 |
".sdb_m1", ".sdb_m2"])
|
2342 |
2362 |
sda_dev_m1 = objects.Disk(dev_type="lvm", size=disk_sz,
|
2343 |
|
logical_id=(vgname, "%s.os_m1" % instance_name))
|
|
2363 |
logical_id=(vgname, names[0]))
|
2344 |
2364 |
sda_dev_m2 = objects.Disk(dev_type="lvm", size=disk_sz,
|
2345 |
|
logical_id=(vgname, "%s.os_m2" % instance_name))
|
|
2365 |
logical_id=(vgname, names[1]))
|
2346 |
2366 |
md_sda_dev = objects.Disk(dev_type="md_raid1", iv_name = "sda",
|
2347 |
2367 |
size=disk_sz,
|
2348 |
2368 |
children = [sda_dev_m1, sda_dev_m2])
|
2349 |
2369 |
sdb_dev_m1 = objects.Disk(dev_type="lvm", size=swap_sz,
|
2350 |
|
logical_id=(vgname, "%s.swap_m1" %
|
2351 |
|
instance_name))
|
|
2370 |
logical_id=(vgname, names[2]))
|
2352 |
2371 |
sdb_dev_m2 = objects.Disk(dev_type="lvm", size=swap_sz,
|
2353 |
|
logical_id=(vgname, "%s.swap_m2" %
|
2354 |
|
instance_name))
|
|
2372 |
logical_id=(vgname, names[3]))
|
2355 |
2373 |
md_sdb_dev = objects.Disk(dev_type="md_raid1", iv_name = "sdb",
|
2356 |
2374 |
size=swap_sz,
|
2357 |
2375 |
children = [sdb_dev_m1, sdb_dev_m2])
|
... | ... | |
2360 |
2378 |
if len(secondary_nodes) != 1:
|
2361 |
2379 |
raise errors.ProgrammerError("Wrong template configuration")
|
2362 |
2380 |
remote_node = secondary_nodes[0]
|
2363 |
|
drbd_sda_dev = _GenerateMDDRBDBranch(cfg, vgname,
|
2364 |
|
primary_node, remote_node, disk_sz,
|
2365 |
|
"%s-sda" % instance_name)
|
|
2381 |
names = _GenerateUniqueNames(cfg, [".sda_data", ".sda_meta",
|
|
2382 |
".sdb_data", ".sdb_meta"])
|
|
2383 |
drbd_sda_dev = _GenerateMDDRBDBranch(cfg, primary_node, remote_node,
|
|
2384 |
disk_sz, names[0:2])
|
2366 |
2385 |
md_sda_dev = objects.Disk(dev_type="md_raid1", iv_name="sda",
|
2367 |
2386 |
children = [drbd_sda_dev], size=disk_sz)
|
2368 |
|
drbd_sdb_dev = _GenerateMDDRBDBranch(cfg, vgname,
|
2369 |
|
primary_node, remote_node, swap_sz,
|
2370 |
|
"%s-sdb" % instance_name)
|
|
2387 |
drbd_sdb_dev = _GenerateMDDRBDBranch(cfg, primary_node, remote_node,
|
|
2388 |
swap_sz, names[2:4])
|
2371 |
2389 |
md_sdb_dev = objects.Disk(dev_type="md_raid1", iv_name="sdb",
|
2372 |
2390 |
children = [drbd_sdb_dev], size=swap_sz)
|
2373 |
2391 |
disks = [md_sda_dev, md_sdb_dev]
|
... | ... | |
2644 |
2662 |
if self.inst_ip is not None:
|
2645 |
2663 |
nic.ip = self.inst_ip
|
2646 |
2664 |
|
2647 |
|
disks = _GenerateDiskTemplate(self.cfg, self.cfg.GetVGName(),
|
|
2665 |
disks = _GenerateDiskTemplate(self.cfg,
|
2648 |
2666 |
self.op.disk_template,
|
2649 |
2667 |
instance, pnode_name,
|
2650 |
2668 |
self.secondaries, self.op.disk_size,
|
... | ... | |
2829 |
2847 |
instance = self.instance
|
2830 |
2848 |
|
2831 |
2849 |
remote_node = self.remote_node
|
2832 |
|
new_drbd = _GenerateMDDRBDBranch(self.cfg, self.cfg.GetVGName(),
|
2833 |
|
instance.primary_node, remote_node,
|
2834 |
|
disk.size, "%s-%s" %
|
2835 |
|
(instance.name, self.op.disk_name))
|
|
2850 |
lv_names = [".%s_%s" % (disk.iv_name, suf) for suf in ["data", "meta"]]
|
|
2851 |
names = _GenerateUniqueNames(self.cfg, lv_names)
|
|
2852 |
new_drbd = _GenerateMDDRBDBranch(self.cfg, instance.primary_node,
|
|
2853 |
remote_node, disk.size, names)
|
2836 |
2854 |
|
2837 |
2855 |
logger.Info("adding new mirror component on secondary")
|
2838 |
2856 |
#HARDCODE
|
... | ... | |
3027 |
3045 |
vgname = cfg.GetVGName()
|
3028 |
3046 |
for dev in instance.disks:
|
3029 |
3047 |
size = dev.size
|
3030 |
|
new_drbd = _GenerateMDDRBDBranch(cfg, vgname, instance.primary_node,
|
3031 |
|
remote_node, size,
|
3032 |
|
"%s-%s" % (instance.name, dev.iv_name))
|
|
3048 |
lv_names = [".%s_%s" % (dev.iv_name, suf) for suf in ["data", "meta"]]
|
|
3049 |
names = _GenerateUniqueNames(cfg, lv_names)
|
|
3050 |
new_drbd = _GenerateMDDRBDBranch(cfg, instance.primary_node,
|
|
3051 |
remote_node, size, names)
|
3033 |
3052 |
iv_names[dev.iv_name] = (dev, dev.children[0], new_drbd)
|
3034 |
3053 |
logger.Info("adding new mirror component on secondary for %s" %
|
3035 |
3054 |
dev.iv_name)
|