Add live migrate max downtime selector meta field
Adds a new flag to VM metadata to allow setting the VM live migration max downtime. This will enable very busy VMs that hang live migration to have this value changed.
This commit is contained in:
@ -779,7 +779,8 @@ def format_list_template_system(template_data):
|
||||
template_node_limit_length = 6
|
||||
template_node_selector_length = 9
|
||||
template_node_autostart_length = 10
|
||||
template_migration_method_length = 10
|
||||
template_migration_method_length = 12
|
||||
template_migration_max_downtime_length = 13
|
||||
|
||||
for template in template_data:
|
||||
# template_name column
|
||||
@ -826,6 +827,17 @@ def format_list_template_system(template_data):
|
||||
_template_migration_method_length = len(str(template["migration_method"])) + 1
|
||||
if _template_migration_method_length > template_migration_method_length:
|
||||
template_migration_method_length = _template_migration_method_length
|
||||
# template_migration_max_downtime column
|
||||
_template_migration_max_downtime_length = (
|
||||
len(str(template["migration_max_downtime"])) + 1
|
||||
)
|
||||
if (
|
||||
_template_migration_max_downtime_length
|
||||
> template_migration_max_downtime_length
|
||||
):
|
||||
template_migration_max_downtime_length = (
|
||||
_template_migration_max_downtime_length
|
||||
)
|
||||
|
||||
# Format the string (header)
|
||||
template_list_output.append(
|
||||
@ -842,7 +854,8 @@ def format_list_template_system(template_data):
|
||||
+ template_node_selector_length
|
||||
+ template_node_autostart_length
|
||||
+ template_migration_method_length
|
||||
+ 3,
|
||||
+ template_migration_max_downtime_length
|
||||
+ 4,
|
||||
template_header="System Templates "
|
||||
+ "".join(
|
||||
["-" for _ in range(17, template_name_length + template_id_length)]
|
||||
@ -874,7 +887,8 @@ def format_list_template_system(template_data):
|
||||
+ template_node_selector_length
|
||||
+ template_node_autostart_length
|
||||
+ template_migration_method_length
|
||||
+ 2,
|
||||
+ template_migration_max_downtime_length
|
||||
+ 3,
|
||||
)
|
||||
]
|
||||
),
|
||||
@ -891,7 +905,8 @@ def format_list_template_system(template_data):
|
||||
{template_node_limit: <{template_node_limit_length}} \
|
||||
{template_node_selector: <{template_node_selector_length}} \
|
||||
{template_node_autostart: <{template_node_autostart_length}} \
|
||||
{template_migration_method: <{template_migration_method_length}}{end_bold}".format(
|
||||
{template_migration_method: <{template_migration_method_length}} \
|
||||
{template_migration_max_downtime: <{template_migration_max_downtime_length}}{end_bold}".format(
|
||||
bold=ansiprint.bold(),
|
||||
end_bold=ansiprint.end(),
|
||||
template_name_length=template_name_length,
|
||||
@ -905,6 +920,7 @@ def format_list_template_system(template_data):
|
||||
template_node_selector_length=template_node_selector_length,
|
||||
template_node_autostart_length=template_node_autostart_length,
|
||||
template_migration_method_length=template_migration_method_length,
|
||||
template_migration_max_downtime_length=template_migration_max_downtime_length,
|
||||
template_name="Name",
|
||||
template_id="ID",
|
||||
template_vcpu="vCPUs",
|
||||
@ -915,7 +931,8 @@ def format_list_template_system(template_data):
|
||||
template_node_limit="Limit",
|
||||
template_node_selector="Selector",
|
||||
template_node_autostart="Autostart",
|
||||
template_migration_method="Migration",
|
||||
template_migration_method="Mig. Method",
|
||||
template_migration_max_downtime="Max Downtime",
|
||||
)
|
||||
)
|
||||
|
||||
@ -931,7 +948,8 @@ def format_list_template_system(template_data):
|
||||
{template_node_limit: <{template_node_limit_length}} \
|
||||
{template_node_selector: <{template_node_selector_length}} \
|
||||
{template_node_autostart: <{template_node_autostart_length}} \
|
||||
{template_migration_method: <{template_migration_method_length}}{end_bold}".format(
|
||||
{template_migration_method: <{template_migration_method_length}} \
|
||||
{template_migration_max_downtime: <{template_migration_max_downtime_length}}{end_bold}".format(
|
||||
template_name_length=template_name_length,
|
||||
template_id_length=template_id_length,
|
||||
template_vcpu_length=template_vcpu_length,
|
||||
@ -943,6 +961,7 @@ def format_list_template_system(template_data):
|
||||
template_node_selector_length=template_node_selector_length,
|
||||
template_node_autostart_length=template_node_autostart_length,
|
||||
template_migration_method_length=template_migration_method_length,
|
||||
template_migration_max_downtime_length=template_migration_max_downtime_length,
|
||||
bold="",
|
||||
end_bold="",
|
||||
template_name=str(template["name"]),
|
||||
@ -956,6 +975,7 @@ def format_list_template_system(template_data):
|
||||
template_node_selector=str(template["node_selector"]),
|
||||
template_node_autostart=str(template["node_autostart"]),
|
||||
template_migration_method=str(template["migration_method"]),
|
||||
template_migration_max_downtime=f"{str(template['migration_max_downtime'])} ms",
|
||||
)
|
||||
)
|
||||
|
||||
|
@ -205,6 +205,7 @@ def vm_metadata(
|
||||
node_selector,
|
||||
node_autostart,
|
||||
migration_method,
|
||||
migration_max_downtime,
|
||||
provisioner_profile,
|
||||
):
|
||||
"""
|
||||
@ -229,6 +230,9 @@ def vm_metadata(
|
||||
if migration_method is not None:
|
||||
params["migration_method"] = migration_method
|
||||
|
||||
if migration_max_downtime is not None:
|
||||
params["migration_max_downtime"] = migration_max_downtime
|
||||
|
||||
if provisioner_profile is not None:
|
||||
params["profile"] = provisioner_profile
|
||||
|
||||
@ -1637,14 +1641,14 @@ def format_info(config, domain_information, long_output):
|
||||
)
|
||||
)
|
||||
ainformation.append(
|
||||
"{}Current Node:{} {}".format(
|
||||
"{}Current node:{} {}".format(
|
||||
ansiprint.purple(), ansiprint.end(), domain_information["node"]
|
||||
)
|
||||
)
|
||||
if not domain_information["last_node"]:
|
||||
domain_information["last_node"] = "N/A"
|
||||
ainformation.append(
|
||||
"{}Previous Node:{} {}".format(
|
||||
"{}Previous node:{} {}".format(
|
||||
ansiprint.purple(), ansiprint.end(), domain_information["last_node"]
|
||||
)
|
||||
)
|
||||
@ -1676,15 +1680,12 @@ def format_info(config, domain_information, long_output):
|
||||
formatted_node_autostart = "True"
|
||||
|
||||
if not domain_information.get("migration_method"):
|
||||
formatted_migration_method = "Any"
|
||||
formatted_migration_method = "Live, Shutdown"
|
||||
else:
|
||||
formatted_migration_method = str(domain_information["migration_method"]).title()
|
||||
|
||||
ainformation.append(
|
||||
"{}Migration selector:{} {}".format(
|
||||
ansiprint.purple(), ansiprint.end(), formatted_node_selector
|
||||
formatted_migration_method = (
|
||||
f"{str(domain_information['migration_method']).title()} only"
|
||||
)
|
||||
)
|
||||
|
||||
ainformation.append(
|
||||
"{}Node limit:{} {}".format(
|
||||
ansiprint.purple(), ansiprint.end(), formatted_node_limit
|
||||
@ -1700,10 +1701,22 @@ def format_info(config, domain_information, long_output):
|
||||
)
|
||||
)
|
||||
ainformation.append(
|
||||
"{}Migration Method:{} {}".format(
|
||||
"{}Migration method:{} {}".format(
|
||||
ansiprint.purple(), ansiprint.end(), formatted_migration_method
|
||||
)
|
||||
)
|
||||
ainformation.append(
|
||||
"{}Migration selector:{} {}".format(
|
||||
ansiprint.purple(), ansiprint.end(), formatted_node_selector
|
||||
)
|
||||
)
|
||||
ainformation.append(
|
||||
"{}Max live downtime:{} {}".format(
|
||||
ansiprint.purple(),
|
||||
ansiprint.end(),
|
||||
f"{domain_information['migration_max_downtime']} ms",
|
||||
)
|
||||
)
|
||||
|
||||
# Tag list
|
||||
tags_name_length = 5
|
||||
|
Reference in New Issue
Block a user