Revision d0c8c01d lib/backend.py
b/lib/backend.py | ||
---|---|---|
421 | 421 |
result.cmd, result.exit_code, result.output) |
422 | 422 |
|
423 | 423 |
# Raise a custom exception (handled in ganeti-noded) |
424 |
raise errors.QuitGanetiException(True, 'Shutdown scheduled')
|
|
424 |
raise errors.QuitGanetiException(True, "Shutdown scheduled")
|
|
425 | 425 |
|
426 | 426 |
|
427 | 427 |
def GetNodeInfo(vgname, hypervisor_type): |
... | ... | |
449 | 449 |
if vginfo: |
450 | 450 |
vg_free = int(round(vginfo[0][0], 0)) |
451 | 451 |
vg_size = int(round(vginfo[0][1], 0)) |
452 |
outputarray['vg_size'] = vg_size
|
|
453 |
outputarray['vg_free'] = vg_free
|
|
452 |
outputarray["vg_size"] = vg_size
|
|
453 |
outputarray["vg_free"] = vg_free
|
|
454 | 454 |
|
455 | 455 |
if hypervisor_type is not None: |
456 | 456 |
hyper = hypervisor.GetHypervisor(hypervisor_type) |
... | ... | |
707 | 707 |
|
708 | 708 |
""" |
709 | 709 |
lvs = {} |
710 |
sep = '|'
|
|
710 |
sep = "|"
|
|
711 | 711 |
if not vg_names: |
712 | 712 |
vg_names = [] |
713 | 713 |
result = utils.RunCmd(["lvs", "--noheadings", "--units=m", "--nosuffix", |
... | ... | |
723 | 723 |
logging.error("Invalid line returned from lvs output: '%s'", line) |
724 | 724 |
continue |
725 | 725 |
vg_name, name, size, attr = match.groups() |
726 |
inactive = attr[4] == '-'
|
|
727 |
online = attr[5] == 'o'
|
|
728 |
virtual = attr[0] == 'v'
|
|
726 |
inactive = attr[4] == "-"
|
|
727 |
online = attr[5] == "o"
|
|
728 |
virtual = attr[0] == "v"
|
|
729 | 729 |
if virtual: |
730 | 730 |
# we don't want to report such volumes as existing, since they |
731 | 731 |
# don't really hold data |
... | ... | |
773 | 773 |
result.output) |
774 | 774 |
|
775 | 775 |
def parse_dev(dev): |
776 |
return dev.split('(')[0]
|
|
776 |
return dev.split("(")[0]
|
|
777 | 777 |
|
778 | 778 |
def handle_dev(dev): |
779 | 779 |
return [parse_dev(x) for x in dev.split(",")] |
780 | 780 |
|
781 | 781 |
def map_line(line): |
782 | 782 |
line = [v.strip() for v in line] |
783 |
return [{'name': line[0], 'size': line[1],
|
|
784 |
'dev': dev, 'vg': line[3]} for dev in handle_dev(line[2])]
|
|
783 |
return [{"name": line[0], "size": line[1],
|
|
784 |
"dev": dev, "vg": line[3]} for dev in handle_dev(line[2])]
|
|
785 | 785 |
|
786 | 786 |
all_devs = [] |
787 | 787 |
for line in result.stdout.splitlines(): |
788 |
if line.count('|') >= 3:
|
|
789 |
all_devs.extend(map_line(line.split('|')))
|
|
788 |
if line.count("|") >= 3:
|
|
789 |
all_devs.extend(map_line(line.split("|")))
|
|
790 | 790 |
else: |
791 | 791 |
logging.warning("Strange line in the output from lvs: '%s'", line) |
792 | 792 |
return all_devs |
... | ... | |
851 | 851 |
|
852 | 852 |
iinfo = hypervisor.GetHypervisor(hname).GetInstanceInfo(instance) |
853 | 853 |
if iinfo is not None: |
854 |
output['memory'] = iinfo[2]
|
|
855 |
output['state'] = iinfo[4]
|
|
856 |
output['time'] = iinfo[5]
|
|
854 |
output["memory"] = iinfo[2]
|
|
855 |
output["state"] = iinfo[4]
|
|
856 |
output["time"] = iinfo[5]
|
|
857 | 857 |
|
858 | 858 |
return output |
859 | 859 |
|
... | ... | |
907 | 907 |
if iinfo: |
908 | 908 |
for name, _, memory, vcpus, state, times in iinfo: |
909 | 909 |
value = { |
910 |
'memory': memory,
|
|
911 |
'vcpus': vcpus,
|
|
912 |
'state': state,
|
|
913 |
'time': times,
|
|
910 |
"memory": memory,
|
|
911 |
"vcpus": vcpus,
|
|
912 |
"state": state,
|
|
913 |
"time": times,
|
|
914 | 914 |
} |
915 | 915 |
if name in output: |
916 | 916 |
# we only check static parameters, like memory and vcpus, |
917 | 917 |
# and not state and time which can change between the |
918 | 918 |
# invocations of the different hypervisors |
919 |
for key in 'memory', 'vcpus':
|
|
919 |
for key in "memory", "vcpus":
|
|
920 | 920 |
if value[key] != output[name][key]: |
921 | 921 |
_Fail("Instance %s is running twice" |
922 | 922 |
" with different parameters", name) |
... | ... | |
961 | 961 |
|
962 | 962 |
create_env = OSEnvironment(instance, inst_os, debug) |
963 | 963 |
if reinstall: |
964 |
create_env['INSTANCE_REINSTALL'] = "1"
|
|
964 |
create_env["INSTANCE_REINSTALL"] = "1"
|
|
965 | 965 |
|
966 | 966 |
logfile = _InstanceLogName("add", instance.os, instance.name) |
967 | 967 |
|
... | ... | |
993 | 993 |
inst_os = OSFromDisk(instance.os) |
994 | 994 |
|
995 | 995 |
rename_env = OSEnvironment(instance, inst_os, debug) |
996 |
rename_env['OLD_INSTANCE_NAME'] = old_name
|
|
996 |
rename_env["OLD_INSTANCE_NAME"] = old_name
|
|
997 | 997 |
|
998 | 998 |
logfile = _InstanceLogName("rename", instance.os, |
999 | 999 |
"%s-%s" % (old_name, instance.name)) |
... | ... | |
1331 | 1331 |
it's not required to return anything. |
1332 | 1332 |
|
1333 | 1333 |
""" |
1334 |
# TODO: remove the obsolete 'size' argument
|
|
1334 |
# TODO: remove the obsolete "size" argument
|
|
1335 | 1335 |
# pylint: disable-msg=W0613 |
1336 | 1336 |
clist = [] |
1337 | 1337 |
if disk.children: |
... | ... | |
1831 | 1831 |
destcmd) |
1832 | 1832 |
|
1833 | 1833 |
# all commands have been checked, so we're safe to combine them |
1834 |
command = '|'.join([expcmd, utils.ShellQuoteArgs(remotecmd)])
|
|
1834 |
command = "|".join([expcmd, utils.ShellQuoteArgs(remotecmd)])
|
|
1835 | 1835 |
|
1836 | 1836 |
result = utils.RunCmd(["bash", "-c", command]) |
1837 | 1837 |
|
... | ... | |
1925 | 1925 |
@param err: the exception to format |
1926 | 1926 |
|
1927 | 1927 |
""" |
1928 |
if hasattr(err, 'errno'):
|
|
1928 |
if hasattr(err, "errno"):
|
|
1929 | 1929 |
detail = errno.errorcode[err.errno] |
1930 | 1930 |
else: |
1931 | 1931 |
detail = str(err) |
... | ... | |
2055 | 2055 |
os_files = dict.fromkeys(constants.OS_SCRIPTS) |
2056 | 2056 |
|
2057 | 2057 |
if max(api_versions) >= constants.OS_API_V15: |
2058 |
os_files[constants.OS_VARIANTS_FILE] = ''
|
|
2058 |
os_files[constants.OS_VARIANTS_FILE] = ""
|
|
2059 | 2059 |
|
2060 | 2060 |
if max(api_versions) >= constants.OS_API_V20: |
2061 |
os_files[constants.OS_PARAMETERS_FILE] = ''
|
|
2061 |
os_files[constants.OS_PARAMETERS_FILE] = ""
|
|
2062 | 2062 |
else: |
2063 | 2063 |
del os_files[constants.OS_SCRIPT_VERIFY] |
2064 | 2064 |
|
... | ... | |
2161 | 2161 |
result = {} |
2162 | 2162 |
api_version = \ |
2163 | 2163 |
max(constants.OS_API_VERSIONS.intersection(inst_os.api_versions)) |
2164 |
result['OS_API_VERSION'] = '%d' % api_version
|
|
2165 |
result['OS_NAME'] = inst_os.name
|
|
2166 |
result['DEBUG_LEVEL'] = '%d' % debug
|
|
2164 |
result["OS_API_VERSION"] = "%d" % api_version
|
|
2165 |
result["OS_NAME"] = inst_os.name
|
|
2166 |
result["DEBUG_LEVEL"] = "%d" % debug
|
|
2167 | 2167 |
|
2168 | 2168 |
# OS variants |
2169 | 2169 |
if api_version >= constants.OS_API_V15: |
2170 | 2170 |
variant = objects.OS.GetVariant(os_name) |
2171 | 2171 |
if not variant: |
2172 | 2172 |
variant = inst_os.supported_variants[0] |
2173 |
result['OS_VARIANT'] = variant
|
|
2173 |
result["OS_VARIANT"] = variant
|
|
2174 | 2174 |
|
2175 | 2175 |
# OS params |
2176 | 2176 |
for pname, pvalue in os_params.items(): |
2177 |
result['OSP_%s' % pname.upper()] = pvalue
|
|
2177 |
result["OSP_%s" % pname.upper()] = pvalue
|
|
2178 | 2178 |
|
2179 | 2179 |
return result |
2180 | 2180 |
|
... | ... | |
2199 | 2199 |
for attr in ["name", "os", "uuid", "ctime", "mtime", "primary_node"]: |
2200 | 2200 |
result["INSTANCE_%s" % attr.upper()] = str(getattr(instance, attr)) |
2201 | 2201 |
|
2202 |
result['HYPERVISOR'] = instance.hypervisor
|
|
2203 |
result['DISK_COUNT'] = '%d' % len(instance.disks)
|
|
2204 |
result['NIC_COUNT'] = '%d' % len(instance.nics)
|
|
2205 |
result['INSTANCE_SECONDARY_NODES'] = \
|
|
2206 |
('%s' % " ".join(instance.secondary_nodes))
|
|
2202 |
result["HYPERVISOR"] = instance.hypervisor
|
|
2203 |
result["DISK_COUNT"] = "%d" % len(instance.disks)
|
|
2204 |
result["NIC_COUNT"] = "%d" % len(instance.nics)
|
|
2205 |
result["INSTANCE_SECONDARY_NODES"] = \
|
|
2206 |
("%s" % " ".join(instance.secondary_nodes))
|
|
2207 | 2207 |
|
2208 | 2208 |
# Disks |
2209 | 2209 |
for idx, disk in enumerate(instance.disks): |
2210 | 2210 |
real_disk = _OpenRealBD(disk) |
2211 |
result['DISK_%d_PATH' % idx] = real_disk.dev_path
|
|
2212 |
result['DISK_%d_ACCESS' % idx] = disk.mode
|
|
2211 |
result["DISK_%d_PATH" % idx] = real_disk.dev_path
|
|
2212 |
result["DISK_%d_ACCESS" % idx] = disk.mode
|
|
2213 | 2213 |
if constants.HV_DISK_TYPE in instance.hvparams: |
2214 |
result['DISK_%d_FRONTEND_TYPE' % idx] = \
|
|
2214 |
result["DISK_%d_FRONTEND_TYPE" % idx] = \
|
|
2215 | 2215 |
instance.hvparams[constants.HV_DISK_TYPE] |
2216 | 2216 |
if disk.dev_type in constants.LDS_BLOCK: |
2217 |
result['DISK_%d_BACKEND_TYPE' % idx] = 'block'
|
|
2217 |
result["DISK_%d_BACKEND_TYPE" % idx] = "block"
|
|
2218 | 2218 |
elif disk.dev_type == constants.LD_FILE: |
2219 |
result['DISK_%d_BACKEND_TYPE' % idx] = \
|
|
2220 |
'file:%s' % disk.physical_id[0]
|
|
2219 |
result["DISK_%d_BACKEND_TYPE" % idx] = \
|
|
2220 |
"file:%s" % disk.physical_id[0]
|
|
2221 | 2221 |
|
2222 | 2222 |
# NICs |
2223 | 2223 |
for idx, nic in enumerate(instance.nics): |
2224 |
result['NIC_%d_MAC' % idx] = nic.mac
|
|
2224 |
result["NIC_%d_MAC" % idx] = nic.mac
|
|
2225 | 2225 |
if nic.ip: |
2226 |
result['NIC_%d_IP' % idx] = nic.ip
|
|
2227 |
result['NIC_%d_MODE' % idx] = nic.nicparams[constants.NIC_MODE]
|
|
2226 |
result["NIC_%d_IP" % idx] = nic.ip
|
|
2227 |
result["NIC_%d_MODE" % idx] = nic.nicparams[constants.NIC_MODE]
|
|
2228 | 2228 |
if nic.nicparams[constants.NIC_MODE] == constants.NIC_MODE_BRIDGED: |
2229 |
result['NIC_%d_BRIDGE' % idx] = nic.nicparams[constants.NIC_LINK]
|
|
2229 |
result["NIC_%d_BRIDGE" % idx] = nic.nicparams[constants.NIC_LINK]
|
|
2230 | 2230 |
if nic.nicparams[constants.NIC_LINK]: |
2231 |
result['NIC_%d_LINK' % idx] = nic.nicparams[constants.NIC_LINK]
|
|
2231 |
result["NIC_%d_LINK" % idx] = nic.nicparams[constants.NIC_LINK]
|
|
2232 | 2232 |
if constants.HV_NIC_TYPE in instance.hvparams: |
2233 |
result['NIC_%d_FRONTEND_TYPE' % idx] = \
|
|
2233 |
result["NIC_%d_FRONTEND_TYPE" % idx] = \
|
|
2234 | 2234 |
instance.hvparams[constants.HV_NIC_TYPE] |
2235 | 2235 |
|
2236 | 2236 |
# HV/BE params |
... | ... | |
2318 | 2318 |
config = objects.SerializableConfigParser() |
2319 | 2319 |
|
2320 | 2320 |
config.add_section(constants.INISECT_EXP) |
2321 |
config.set(constants.INISECT_EXP, 'version', '0')
|
|
2322 |
config.set(constants.INISECT_EXP, 'timestamp', '%d' % int(time.time()))
|
|
2323 |
config.set(constants.INISECT_EXP, 'source', instance.primary_node)
|
|
2324 |
config.set(constants.INISECT_EXP, 'os', instance.os)
|
|
2321 |
config.set(constants.INISECT_EXP, "version", "0")
|
|
2322 |
config.set(constants.INISECT_EXP, "timestamp", "%d" % int(time.time()))
|
|
2323 |
config.set(constants.INISECT_EXP, "source", instance.primary_node)
|
|
2324 |
config.set(constants.INISECT_EXP, "os", instance.os)
|
|
2325 | 2325 |
config.set(constants.INISECT_EXP, "compression", "none") |
2326 | 2326 |
|
2327 | 2327 |
config.add_section(constants.INISECT_INS) |
2328 |
config.set(constants.INISECT_INS, 'name', instance.name)
|
|
2329 |
config.set(constants.INISECT_INS, 'memory', '%d' %
|
|
2328 |
config.set(constants.INISECT_INS, "name", instance.name)
|
|
2329 |
config.set(constants.INISECT_INS, "memory", "%d" %
|
|
2330 | 2330 |
instance.beparams[constants.BE_MEMORY]) |
2331 |
config.set(constants.INISECT_INS, 'vcpus', '%d' %
|
|
2331 |
config.set(constants.INISECT_INS, "vcpus", "%d" %
|
|
2332 | 2332 |
instance.beparams[constants.BE_VCPUS]) |
2333 |
config.set(constants.INISECT_INS, 'disk_template', instance.disk_template)
|
|
2334 |
config.set(constants.INISECT_INS, 'hypervisor', instance.hypervisor)
|
|
2333 |
config.set(constants.INISECT_INS, "disk_template", instance.disk_template)
|
|
2334 |
config.set(constants.INISECT_INS, "hypervisor", instance.hypervisor)
|
|
2335 | 2335 |
config.set(constants.INISECT_INS, "tags", " ".join(instance.GetTags())) |
2336 | 2336 |
|
2337 | 2337 |
nic_total = 0 |
2338 | 2338 |
for nic_count, nic in enumerate(instance.nics): |
2339 | 2339 |
nic_total += 1 |
2340 |
config.set(constants.INISECT_INS, 'nic%d_mac' %
|
|
2341 |
nic_count, '%s' % nic.mac)
|
|
2342 |
config.set(constants.INISECT_INS, 'nic%d_ip' % nic_count, '%s' % nic.ip)
|
|
2340 |
config.set(constants.INISECT_INS, "nic%d_mac" %
|
|
2341 |
nic_count, "%s" % nic.mac)
|
|
2342 |
config.set(constants.INISECT_INS, "nic%d_ip" % nic_count, "%s" % nic.ip)
|
|
2343 | 2343 |
for param in constants.NICS_PARAMETER_TYPES: |
2344 |
config.set(constants.INISECT_INS, 'nic%d_%s' % (nic_count, param),
|
|
2345 |
'%s' % nic.nicparams.get(param, None))
|
|
2344 |
config.set(constants.INISECT_INS, "nic%d_%s" % (nic_count, param),
|
|
2345 |
"%s" % nic.nicparams.get(param, None))
|
|
2346 | 2346 |
# TODO: redundant: on load can read nics until it doesn't exist |
2347 |
config.set(constants.INISECT_INS, 'nic_count' , '%d' % nic_total)
|
|
2347 |
config.set(constants.INISECT_INS, "nic_count" , "%d" % nic_total)
|
|
2348 | 2348 |
|
2349 | 2349 |
disk_total = 0 |
2350 | 2350 |
for disk_count, disk in enumerate(snap_disks): |
2351 | 2351 |
if disk: |
2352 | 2352 |
disk_total += 1 |
2353 |
config.set(constants.INISECT_INS, 'disk%d_ivname' % disk_count,
|
|
2354 |
('%s' % disk.iv_name))
|
|
2355 |
config.set(constants.INISECT_INS, 'disk%d_dump' % disk_count,
|
|
2356 |
('%s' % disk.physical_id[1]))
|
|
2357 |
config.set(constants.INISECT_INS, 'disk%d_size' % disk_count,
|
|
2358 |
('%d' % disk.size))
|
|
2359 |
|
|
2360 |
config.set(constants.INISECT_INS, 'disk_count' , '%d' % disk_total)
|
|
2353 |
config.set(constants.INISECT_INS, "disk%d_ivname" % disk_count,
|
|
2354 |
("%s" % disk.iv_name))
|
|
2355 |
config.set(constants.INISECT_INS, "disk%d_dump" % disk_count,
|
|
2356 |
("%s" % disk.physical_id[1]))
|
|
2357 |
config.set(constants.INISECT_INS, "disk%d_size" % disk_count,
|
|
2358 |
("%d" % disk.size))
|
|
2359 |
|
|
2360 |
config.set(constants.INISECT_INS, "disk_count" , "%d" % disk_total)
|
|
2361 | 2361 |
|
2362 | 2362 |
# New-style hypervisor/backend parameters |
2363 | 2363 |
|
Also available in: Unified diff