Fix flake8 errors in pmanager.py script

Change-Id: I09ba90728c106a0ee4fe7b71e2a3aa9d9f7d79bc
This commit is contained in:
Sebastian Kalinowski 2015-02-20 14:28:33 +01:00 committed by Sebastian Kalinowski
parent 00df3e31b0
commit 2221ebc88d

View File

@ -1,10 +1,10 @@
#!/usr/bin/env python
# flake8: noqa
import json
import math
import re
class PManager(object):
def __init__(self, pm_data):
if isinstance(pm_data, (str, unicode)):
@ -125,18 +125,20 @@ class PManager(object):
return "primary"
def _getsize(self, vol):
"""Anaconda has hard coded limitation in 16TB
"""Get volume size.
Anaconda has hard coded limitation in 16TB
for ext3/4 and xfs filesystems (the only filesystems
we are supposed to use). Besides there is no stable
64-bit ext4 implementation at the moment, so the
limitation in 16TB for ext4 is not only
anaconda limitation."""
"""Root partition can not be located on xfs file system
anaconda limitation.
Root partition can not be located on xfs file system
therefore we check if root filesystem is larger
than 16TB and set it size into 16TB if it is larger.
It is necessary to note that to format 16TB
volume on ext4 it is needed about 1G memory."""
volume on ext4 it is needed about 1G memory.
"""
if vol["size"] > 16777216 and vol["mount"] == "/":
return 16777216
return vol["size"]
@ -164,23 +166,21 @@ class PManager(object):
self.pre("parted -s {0} mklabel gpt".format(self._disk_dev(disk)))
def bootable(self, disk):
"""Create and mark Bios Boot partition to which grub will
embed its code later, useable for legacy boot.
"""Create and mark Bios Boot partition
Grub will embed its code later, useable for legacy boot.
May be way smaller, but be aware that the parted may
shrink 1M partition to zero at some disks and versions."""
shrink 1M partition to zero at some disks and versions.
"""
self.pre("parted -a optimal -s {0} "
"unit {3} mkpart primary {1} {2}".format(
self._disk_dev(disk),
self.psize(disk["id"]),
self.psize(disk["id"], 24 * self.factor),
self.unit
)
)
self.unit))
self.pre("parted -s {0} set {1} bios_grub on".format(
self._disk_dev(disk),
self.pcount(disk["id"], 1)
)
)
self._disk_dev(disk),
self.pcount(disk["id"], 1)))
"""Create partition for the EFI boot, minimum
size is 100M, recommended is 200M, with fat32 and
@ -192,14 +192,10 @@ class PManager(object):
self._disk_dev(disk),
self.psize(disk["id"]),
self.psize(disk["id"], 200 * self.factor),
self.unit
)
)
self.unit))
self.pre("parted -s {0} set {1} boot on".format(
self._disk_dev(disk),
self.pcount(disk["id"], 1)
)
)
self._disk_dev(disk),
self.pcount(disk["id"], 1)))
def boot(self):
self.plains(volume_filter=lambda x: x["mount"] == "/boot")
@ -211,7 +207,7 @@ class PManager(object):
def plains(self, volume_filter=None):
if not volume_filter:
volume_filter = lambda x: True
volume_filter = default_volume_filter
ceph_osds = self.num_ceph_osds()
journals_left = ceph_osds
@ -225,10 +221,12 @@ class PManager(object):
if part.get('name') == 'cephjournal':
# We need to allocate a journal partition for each ceph OSD
# Determine the number of journal partitions we need on each device
# Determine the number of journal partitions we need on
# each device
ratio = math.ceil(float(ceph_osds) / ceph_journals)
# No more than 10GB will be allocated to a single journal partition
# No more than 10GB will be allocated to a single
# journal partition
size = part["size"] / ratio
if size > 10240:
size = 10240
@ -251,12 +249,14 @@ class PManager(object):
disk["id"],
self._parttype(pcount),
self.psize(disk["id"]),
self.psize(disk["id"], size * self.factor),
self.psize(disk["id"],
size * self.factor),
self.unit))
self.post("chroot /mnt/sysimage sgdisk "
"--typecode={0}:{1} /dev/{2}".format(
pcount, part["partition_guid"],disk["id"]))
pcount, part["partition_guid"],
disk["id"]))
continue
pcount = self.pcount(disk["id"], 1)
@ -265,10 +265,10 @@ class PManager(object):
self._disk_dev(disk),
self._parttype(pcount),
self.psize(disk["id"]),
self.psize(disk["id"], part["size"] * self.factor),
self.psize(disk["id"],
part["size"] * self.factor),
self.unit))
fstype = self._getfstype(part)
size = self._getsize(part)
tabmount = part["mount"] if part["mount"] != "swap" else "none"
tabfstype = self._gettabfstype(part)
@ -283,9 +283,9 @@ class PManager(object):
self.kick("partition {0} "
"--onpart={2}"
"{3}{4}".format(part["mount"], size,
self._disk_dev(disk),
self._pseparator(disk["id"]),
pcount))
self._disk_dev(disk),
self._pseparator(disk["id"]),
pcount))
else:
if part["mount"] != "swap" and tabfstype != "none":
@ -312,7 +312,7 @@ class PManager(object):
def raids(self, volume_filter=None):
if not volume_filter:
volume_filter = lambda x: True
volume_filter = default_volume_filter
raids = {}
raid_info = {}
phys = {}
@ -325,9 +325,10 @@ class PManager(object):
pcount = self.pcount(disk["id"], 1)
if not phys.get(raid["mount"]):
phys[raid["mount"]] = []
phys[raid["mount"]].append("{0}{1}{2}".
format(self._disk_dev(disk),
self._pseparator(disk["id"]), pcount))
phys[raid["mount"]].append(
"{0}{1}{2}".format(
self._disk_dev(disk),
self._pseparator(disk["id"]), pcount))
rname = "raid.{0:03d}".format(self.rcount(1))
begin_size = self.psize(disk["id"])
end_size = self.psize(disk["id"], raid["size"] * self.factor)
@ -355,24 +356,26 @@ class PManager(object):
if len(rnames) == 1:
phys[mount].append('missing')
self.post("mdadm --create /dev/md{0} --run --level=1 "
"--raid-devices={1} {2}".format(self.raid_count,
len(phys[mount]), ' '.join(phys[mount])))
"--raid-devices={1} {2}".format(
self.raid_count, len(phys[mount]),
' '.join(phys[mount])))
self.post("mkfs.{0} {1} {2} /dev/md{3}".format(
fstype, fsoptions,
self._getlabel(label), self.raid_count))
self.post("mdadm --detail --scan | grep '\/dev\/md{0}'"
">> /mnt/sysimage/etc/mdadm.conf".format(
self.raid_count))
self.raid_count))
self.post("mkdir -p /mnt/sysimage{0}".format(mount))
self.post("echo \\\"UUID=\$(blkid -s UUID -o value "
"/dev/md{0}) "
"{1} {2} defaults 0 0\\\""
" >> /mnt/sysimage/etc/fstab".format(
self.raid_count, mount, fstype))
self.raid_count, mount, fstype))
else:
self.kick("raid {0} --device md{1} --fstype {3} "
"--level=RAID1 {2}".format(mount, self.raid_count,
" ".join(rnames), fstype))
"--level=RAID1 {2}".format(
mount, self.raid_count,
" ".join(rnames), fstype))
self.raid_count += 1
def pvs(self):
@ -401,7 +404,6 @@ class PManager(object):
for vg, pvnames in pvs.iteritems():
self.kick("volgroup {0} {1}".format(vg, " ".join(pvnames)))
def lvs(self):
for vg in [g for g in self.data if g["type"] == "vg"]:
for lv in vg["volumes"]:
@ -449,8 +451,8 @@ class PManager(object):
if devs:
self.kick("bootloader --location=mbr --driveorder={0} "
"--append=' {1} '".format(
",".join(devs),
self.kernel_params))
",".join(devs),
self.kernel_params))
for dev in devs:
self.post("echo -n > /tmp/grub.script")
@ -473,8 +475,7 @@ class PManager(object):
def expose(self,
kickfile="/tmp/partition.ks",
postfile="/tmp/post_partition.ks"
):
postfile="/tmp/post_partition.ks"):
result = ""
for pre in self.pre():
result += "{0}\n".format(pre)
@ -604,24 +605,26 @@ class PreseedPManager(object):
self.late("umount /target/proc")
self.late("umount /target/boot")
self.late("umount /target")
self.late("umount {0}{1}3".format(self.os_disk,
self._pseparator(self.os_disk)))
self.late("swapoff {0}{1}4".format(self.os_disk,
self._pseparator(self.os_disk)))
self.late("umount {0}{1}3".format(
self.os_disk, self._pseparator(self.os_disk)))
self.late("swapoff {0}{1}4".format(
self.os_disk, self._pseparator(self.os_disk)))
def _mount_target(self):
self.late("mount {0}{1}3 /target".format(self.os_disk,
self._pseparator(self.os_disk)))
self.late("mount {0}{1}2 /target/boot".format(self.os_disk,
self._pseparator(self.os_disk)))
self.late("mount {0}{1}3 /target".format(
self.os_disk, self._pseparator(self.os_disk)))
self.late("mount {0}{1}2 /target/boot".format(
self.os_disk, self._pseparator(self.os_disk)))
self.late("mount -t proc none /target/proc")
self.late("mount -o bind /dev /target/dev")
self.late("mount -o bind /sys /target/sys")
self.late("swapon {0}{1}4".format(self.os_disk,
self._pseparator(self.os_disk)))
self.late("swapon {0}{1}4".format(
self.os_disk, self._pseparator(self.os_disk)))
def _long_logger(self):
"""This method puts script which splits
"""Create script for logging long lines.
This method puts script which splits
long line and sends them to logger
#!/bin/sh
chunk=80
@ -634,16 +637,21 @@ class PreseedPManager(object):
i=$(( i + 1 )); done; done;
"""
return (
"""echo '#!/bin/sh' > /tmp/long_logger.sh;""",
"""echo 'chunk=80;' >> /tmp/long_logger.sh;""",
"""echo 'while read string; do' >> /tmp/long_logger.sh;""",
"""echo 'iterations=`expr ${#string} / $chunk + 1`; i=0;' >> /tmp/long_logger.sh;""",
"""echo 'while [ $i -le $(( iterations - 1)) ]; do' >> /tmp/long_logger.sh;""",
"""echo 'start_sym=$(( $i * ${chunk} + 1 ))' >> /tmp/long_logger.sh;""",
"""echo 'end_sym=$(( $(( $i + 1 )) * ${chunk}))' >> /tmp/long_logger.sh;""",
"""echo 'echo $string | cut -c ${start_sym}-${end_sym} | logger' >> /tmp/long_logger.sh;""",
"""echo 'i=$(( i + 1 )); done; done;' >> /tmp/long_logger.sh;""",
"""chmod +x /tmp/long_logger.sh;"""
"echo '#!/bin/sh' > /tmp/long_logger.sh;",
"echo 'chunk=80;' >> /tmp/long_logger.sh;",
"echo 'while read string; do' >> /tmp/long_logger.sh;",
("echo 'iterations=`expr ${#string} / $chunk + 1`; i=0;' "
">> /tmp/long_logger.sh;"),
("echo 'while [ $i -le $(( iterations - 1)) ]; do' "
">> /tmp/long_logger.sh;"),
("echo 'start_sym=$(( $i * ${chunk} + 1 ))' "
">> /tmp/long_logger.sh;"),
("echo 'end_sym=$(( $(( $i + 1 )) * ${chunk}))' "
">> /tmp/long_logger.sh;"),
("echo 'echo $string | cut -c ${start_sym}-${end_sym} | logger' "
">> /tmp/long_logger.sh;"),
"echo 'i=$(( i + 1 )); done; done;' >> /tmp/long_logger.sh;",
"chmod +x /tmp/long_logger.sh;"
)
def non_boot_partitions(self, volumes):
@ -712,15 +720,16 @@ class PreseedPManager(object):
self.pcount(self.os_disk, 1)
self.late("parted -s $(readlink -f {0}) set {1} bios_grub on".format(
self.os_disk,
self.pcount(self.os_disk)
self.os_disk,
self.pcount(self.os_disk)
)
)
self.recipe("200 200 200 ext3 $primary{ } "
"$gptonly{ } "
"$bootable{ } method{ format } format{ } use_filesystem{ } "
"filesystem{ ext3 } mountpoint{ /boot } .")
self.recipe(
"200 200 200 ext3 $primary{ } "
"$gptonly{ } "
"$bootable{ } method{ format } format{ } use_filesystem{ } "
"filesystem{ ext3 } mountpoint{ /boot } .")
self.pcount(self.os_disk, 1)
self.psize(self.os_disk, 200 * self.factor)
@ -772,32 +781,31 @@ class PreseedPManager(object):
for part in self.non_boot_partitions(disk["volumes"]):
if self.pcount(self._disk_dev(disk)) == 0:
self.late("parted -s {0} mklabel gpt"
"".format(self._disk_dev(disk)), udev_settle=True)
self.late("parted -s {0} mklabel gpt".format(
self._disk_dev(disk)), udev_settle=True)
self.late("parted -a optimal -s {0} "
"unit {3} mkpart primary {1} {2}".format(
self._disk_dev(disk),
self.psize(self._disk_dev(disk)),
self.psize(self._disk_dev(disk),
24 * self.factor),
self.unit
),
udev_settle=True
)
"unit {3} mkpart primary {1} {2}".format(
self._disk_dev(disk),
self.psize(self._disk_dev(disk)),
self.psize(self._disk_dev(disk),
24 * self.factor),
self.unit),
udev_settle=True)
self.late("parted -s {0} set {1} "
"bios_grub on".format(
self._disk_dev(disk),
self.pcount(self._disk_dev(disk), 1)
),
udev_settle=True
)
self.late("parted -s {0} print free".format(self._disk_dev(disk)))
self.pcount(self._disk_dev(disk), 1)),
udev_settle=True)
self.late("parted -s {0} print free".format(
self._disk_dev(disk)))
if part.get('name') == 'cephjournal':
# We need to allocate a journal partition for each ceph OSD
# Determine the number of journal partitions we need on each device
# Determine the number of journal partitions we need on
# each device
ratio = math.ceil(float(ceph_osds) / ceph_journals)
# No more than 10GB will be allocated to a single journal partition
# No more than 10GB will be allocated to a single
# journal partition
size = part["size"] / ratio
if size > 10240:
size = 10240
@ -826,10 +834,11 @@ class PreseedPManager(object):
self.unit),
udev_settle=True
)
# We don't want to append late command right here because
# we need sgdisk to be run in-target so the target must be mounted.
# Instead of additional mounting and unmounting we just
# collect all those commands and them run them all at once.
# We don't want to append late command right here
# because we need sgdisk to be run in-target so
# the target must be mounted. Instead of additional
# mounting and unmounting we just collect all those
# commands and them run them all at once.
cephjournal_guid_commands.append(
"sgdisk --typecode={0}:{1} {2}".format(
pcount,
@ -837,7 +846,8 @@ class PreseedPManager(object):
self._disk_dev(disk)
)
)
self.late("parted -s {0} print free".format(self._disk_dev(disk)))
self.late("parted -s {0} print free".format(
self._disk_dev(disk)))
continue
pcount = self.pcount(self._disk_dev(disk), 1)
@ -845,18 +855,20 @@ class PreseedPManager(object):
tabmount = part["mount"] if part["mount"] != "swap" else "none"
self.late("parted -a optimal -s {0} "
"unit {4} mkpart {1} {2} {3}".format(
self._disk_dev(disk),
self._parttype(pcount),
self.psize(self._disk_dev(disk)),
self.psize(self._disk_dev(disk),
part["size"] * self.factor),
self.unit),
self._disk_dev(disk),
self._parttype(pcount),
self.psize(self._disk_dev(disk)),
self.psize(self._disk_dev(disk),
part["size"] * self.factor),
self.unit),
udev_settle=True)
self.late("sleep 10")
self.late("hdparm -z {0}"
"".format(self._disk_dev(disk)))
self.late("parted -s {0} print free".format(self._disk_dev(disk)))
self.late("find /dev \( -type l -o -type b \) -exec ls -l {} \;")
self.late("parted -s {0} print free".format(
self._disk_dev(disk)))
self.late(
"find /dev \( -type l -o -type b \) -exec ls -l {} \;")
self.late("mount")
self.late("cat /proc/swaps")
self.late("cat /proc/mdstat")
@ -868,21 +880,24 @@ class PreseedPManager(object):
self._pseparator(disk["id"]),
pcount))
if part.get("file_system", "xfs") not in ("swap", None, "none"):
fs = part.get("file_system", "xfs")
if fs not in ("swap", None, "none"):
disk_label = self._getlabel(part.get("disk_label"))
self.late("mkfs.{0} {1} {2}{3}{4} {5}"
"".format(part.get("file_system", "xfs"),
self._fsoptions(part.get("file_system", "xfs")),
self._disk_dev(disk),
self._pseparator(disk["id"]),
pcount, disk_label))
self.late("mkfs.{0} {1} {2}{3}{4} {5}".format(
part.get("file_system", "xfs"),
self._fsoptions(part.get("file_system", "xfs")),
self._disk_dev(disk),
self._pseparator(disk["id"]),
pcount, disk_label))
self._mount_target()
# Partition guids must be set in-target, which requires target to be mounted.
# But for cephjournal we have a separate collection of late commands.
# Partition guids must be set in-target, which requires target to be
# mounted. But for cephjournal we have a separate collection of
# late commands.
for disk in self.iterdisks():
for part in self.non_boot_partitions(disk["volumes"]):
if part.get("partition_guid") and part.get("name") != "cephjournal":
if (part.get("partition_guid") and
part.get("name") != "cephjournal"):
self.late("sgdisk --typecode={0}:{1} {2}"
"".format(part["pcount"], part["partition_guid"],
self._disk_dev(disk)), True)
@ -910,7 +925,7 @@ class PreseedPManager(object):
part["pcount"], tabmount,
part.get("file_system", "xfs"),
("defaults" if part["mount"] != "swap"
else "sw" )))
else "sw")))
def lv(self):
self.log_lvm("before creating lvm", False)
@ -927,24 +942,23 @@ class PreseedPManager(object):
continue
if self.pcount(self._disk_dev(disk)) == 0:
# this gonna wait until udev event queue is handled
self.late("parted -s {0} mklabel gpt"
"".format(self._disk_dev(disk)), udev_settle=True)
self.late("parted -s {0} mklabel gpt".format(
self._disk_dev(disk)), udev_settle=True)
self.late("parted -a optimal -s {0} "
"unit {3} mkpart primary {1} {2}".format(
self._disk_dev(disk),
self.psize(self._disk_dev(disk)),
self.psize(self._disk_dev(disk),
24 * self.factor),
self.unit
),
udev_settle=True
)
"unit {3} mkpart primary {1} {2}".format(
self._disk_dev(disk),
self.psize(self._disk_dev(disk)),
self.psize(self._disk_dev(disk),
24 * self.factor),
self.unit),
udev_settle=True)
self.late("parted -s {0} set {1} "
"bios_grub on".format(
self._disk_dev(disk),
self.pcount(self._disk_dev(disk), 1)),
udev_settle=True)
self.late("parted -s {0} print free".format(self._disk_dev(disk)))
self.late("parted -s {0} print free".format(
self._disk_dev(disk)))
pcount = self.pcount(self._disk_dev(disk), 1)
begin_size = self.psize(self._disk_dev(disk))
@ -953,19 +967,22 @@ class PreseedPManager(object):
self.late("parted -a optimal -s {0} "
"unit {4} mkpart {1} {2} {3}".format(
self._disk_dev(disk),
self._parttype(pcount),
begin_size,
end_size,
self.unit), udev_settle=True)
self._disk_dev(disk),
self._parttype(pcount),
begin_size,
end_size,
self.unit),
udev_settle=True)
self.late("sleep 10")
self.log_lvm("after creating partition", False)
self.erase_lvm_metadata(False)
self.late("hdparm -z {0}"
"".format(self._disk_dev(disk)))
self.late("parted -s {0} print free".format(self._disk_dev(disk)))
self.late("find /dev \( -type l -o -type b \) -exec ls -l {} \;")
self.late("parted -s {0} print free".format(
self._disk_dev(disk)))
self.late(
"find /dev \( -type l -o -type b \) -exec ls -l {} \;")
self.late("mount")
self.late("cat /proc/swaps")
self.late("cat /proc/mdstat")
@ -1009,8 +1026,12 @@ class PreseedPManager(object):
self.late("lvscan")
tabmount = lv["mount"] if lv["mount"] != "swap" else "none"
if ((not lv.get("file_system", "xfs") in ("swap", None, "none"))
and (not lv["mount"] in ("swap", "/"))):
if (
(lv.get("file_system", "xfs") not in
("swap", None, "none"))
and
(lv["mount"] not in ("swap", "/"))
):
self.late("mkfs.{0} {1} /dev/mapper/{2}-{3}".format(
lv.get("file_system", "xfs"),
self._fsoptions(lv.get("file_system", "xfs")),
@ -1027,7 +1048,7 @@ class PreseedPManager(object):
tabmount,
lv.get("file_system", "xfs"),
("defaults" if lv["mount"] != "swap"
else "sw" )))
else "sw")))
def eval(self):
self.log_lvm("before early lvm cleaning")
@ -1040,16 +1061,19 @@ class PreseedPManager(object):
self.erase_lvm_metadata()
self.lv()
self.late("apt-get install -y grub-pc", True)
self.late("sed -i "
"-e '$a\ ' "
"-e '$a\#Disable the waiting for user input if the last boot failed' "
"-e '$a\GRUB_RECORDFAIL_TIMEOUT=$GRUB_TIMEOUT' /etc/default/grub", True)
self.late(
"sed -i "
"-e '$a\ ' "
"-e '$a\#Disable the waiting "
"for user input if the last boot failed' "
"-e '$a\GRUB_RECORDFAIL_TIMEOUT=$GRUB_TIMEOUT' /etc/default/grub",
True)
self.late("sed -i "
"-e 's/.*GRUB_TERMINAL.*/GRUB_TERMINAL=console/g' "
"-e 's/.*GRUB_GFXMODE.*/#GRUB_GFXMODE=640x480/g' "
"-e 's/.*GRUB_CMDLINE_LINUX.*/"
"GRUB_CMDLINE_LINUX=\" {0} \"/g' /etc/default/grub".format(
self.kernel_params),
self.kernel_params),
True)
self._umount_target()
self._mount_target()
@ -1204,3 +1228,8 @@ example = """
# pmanager = PreseedPManager(example)
# pmanager.eval()
# print pmanager.expose_late()
def default_volume_filter(volume):
"""Default volume filter. Always return True."""
return True