Files
nova/nova/api/validation/extra_specs/quota.py
Ghanshyam Mann 3b4db6408e HyperV: Remove extra specs of HyperV driver
There are a few extra spec which are only applicable for HyperV driver,
therefore those are removed.

Change-Id: I9bd959fdf9938b2752c4927c5ff7daf89b5f0d38
2024-02-13 20:25:22 +00:00

189 lines
6.7 KiB
Python

# Copyright 2020 Red Hat, Inc. All rights reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
"""Validators for ``quota`` namespaced extra specs."""
from nova.api.validation.extra_specs import base
EXTRA_SPEC_VALIDATORS = []
# CPU, memory, disk IO and VIF quotas (VMWare)
for key, name, unit in (
('cpu', 'CPU', 'MHz'),
('memory', 'memory', 'MB'),
('disk_io', 'disk IO', 'I/O per second'),
('vif', 'virtual interface', 'Mbps'),
):
EXTRA_SPEC_VALIDATORS.extend(
[
base.ExtraSpecValidator(
name=f'quota:{key}_limit',
description=(
f'The upper limit for {name} allocation in {unit}. '
f'The utilization of an instance will not exceed this '
f'limit, even if there are available resources. '
f'This is typically used to ensure a consistent '
f'performance of instances independent of available '
f'resources.'
f'The value ``0`` indicates that {name} usage is not '
f'limited.'
f'Only supported by the VMWare virt driver.'
),
value={
'type': int,
'min': 0,
},
),
base.ExtraSpecValidator(
name=f'quota:{key}_reservation',
description=(
f'The guaranteed minimum {name} reservation in {unit}. '
f'This means the specified amount of {name} that will '
f'be guaranteed for the instance. '
f'Only supported by the VMWare virt driver.'
),
value={
'type': int,
},
),
base.ExtraSpecValidator(
name=f'quota:{key}_shares_level',
description=(
f"The allocation level for {name}. If you choose "
f"'custom', set the number of {name} shares using "
f"'quota:{key}_shares_share'. "
f"Only supported by the VMWare virt driver."
),
value={
'type': str,
'enum': ['custom', 'high', 'normal', 'low'],
},
),
base.ExtraSpecValidator(
name=f'quota:{key}_shares_share',
description=(
f"The number of shares of {name} allocated in the "
f"event that 'quota:{key}_shares_level=custom' is "
f"used. "
f"Ignored otherwise. "
f"There is no unit for this value: it is a relative "
f"measure based on the settings for other instances. "
f"Only supported by the VMWare virt driver."
),
value={
'type': int,
'min': 0,
},
),
]
)
# CPU quotas (libvirt)
EXTRA_SPEC_VALIDATORS.extend(
[
base.ExtraSpecValidator(
name='quota:cpu_shares',
description=(
'The proportional weighted share for the domain. '
'If this element is omitted, the service defaults to the OS '
'provided defaults. '
'There is no unit for the value; it is a relative measure '
'based on the setting of other VMs. '
'For example, a VM configured with a value of 2048 gets '
'twice as much CPU time as a VM configured with value 1024. '
'Only supported by the libvirt virt driver.'
),
value={
'type': int,
'min': 0,
},
),
base.ExtraSpecValidator(
name='quota:cpu_period',
description=(
'Specifies the enforcement interval in microseconds. '
'Within a period, each VCPU of the instance is not allowed '
'to consume more than the quota worth of runtime. '
'The value should be in range 1,000 - 1,000,000. '
'A period with a value of 0 means no value. '
'Only supported by the libvirt virt driver.'
),
value={
'type': int,
'min': 0,
},
),
base.ExtraSpecValidator(
name='quota:cpu_quota',
description=(
"The maximum allowed bandwidth in microseconds. "
"Can be combined with 'quota:cpu_period' to limit an instance "
"to a percentage of capacity of a physical CPU. "
"The value should be in range 1,000 - 2^64 or negative. "
"A negative value indicates that the instance has infinite "
"bandwidth. "
"Only supported by the libvirt virt driver."
),
value={
'type': int,
},
),
]
)
# Disk quotas (libvirt)
for stat in ('read', 'write', 'total'):
for metric in ('bytes', 'iops'):
EXTRA_SPEC_VALIDATORS.append(
base.ExtraSpecValidator(
name=f'quota:disk_{stat}_{metric}_sec',
description=(
f'The quota {stat} {metric} for disk. '
f'Only supported by the libvirt virt driver.'
),
value={
'type': int,
'min': 0,
},
)
)
# VIF quotas (libvirt)
# TODO(stephenfin): Determine whether this should be deprecated now that
# nova-network is dead
for stat in ('inbound', 'outbound'):
for metric in ('average', 'peak', 'burst'):
EXTRA_SPEC_VALIDATORS.append(
base.ExtraSpecValidator(
name=f'quota:vif_{stat}_{metric}',
description=(
f'The quota {stat} {metric} for VIF. Only supported '
f'by the libvirt virt driver.'
),
value={
'type': int,
'min': 0,
},
)
)
def register():
return EXTRA_SPEC_VALIDATORS