272 lines
10 KiB
Python
272 lines
10 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 ``powervm`` namespaced extra specs.
|
|
|
|
These were all taken from the IBM documentation.
|
|
|
|
https://www.ibm.com/support/knowledgecenter/SSXK2N_1.4.4/com.ibm.powervc.standard.help.doc/powervc_pg_flavorsextraspecs_hmc.html
|
|
"""
|
|
|
|
from nova.api.validation.extra_specs import base
|
|
|
|
|
|
# TODO(stephenfin): A lot of these seem to overlap with existing 'hw:' extra
|
|
# specs and could be deprecated in favour of those.
|
|
EXTRA_SPEC_VALIDATORS = [
|
|
base.ExtraSpecValidator(
|
|
name='powervm:min_mem',
|
|
description=(
|
|
'Minimum memory (MB). If you do not specify the value, the value '
|
|
'is defaulted to the value for ``memory_mb``.'
|
|
),
|
|
value={
|
|
'type': int,
|
|
'min': 256,
|
|
'description': 'Integer >=256 divisible by LMB size of the target',
|
|
},
|
|
),
|
|
base.ExtraSpecValidator(
|
|
name='powervm:max_mem',
|
|
description=(
|
|
'Maximum memory (MB). If you do not specify the value, the value '
|
|
'is defaulted to the value for ``memory_mb``.'
|
|
),
|
|
value={
|
|
'type': int,
|
|
'min': 256,
|
|
'description': 'Integer >=256 divisible by LMB size of the target',
|
|
},
|
|
),
|
|
base.ExtraSpecValidator(
|
|
name='powervm:min_vcpu',
|
|
description=(
|
|
'Minimum virtual processors. Minimum resource that is required '
|
|
'for LPAR to boot is 1. The maximum value can be equal to the '
|
|
'value, which is set to vCPUs. If you specify the value of the '
|
|
'attribute, you must also specify value of powervm:max_vcpu. '
|
|
'Defaults to value set for vCPUs.'
|
|
),
|
|
value={
|
|
'type': int,
|
|
'min': 1,
|
|
},
|
|
),
|
|
base.ExtraSpecValidator(
|
|
name='powervm:max_vcpu',
|
|
description=(
|
|
'Minimum virtual processors. Minimum resource that is required '
|
|
'for LPAR to boot is 1. The maximum value can be equal to the '
|
|
'value, which is set to vCPUs. If you specify the value of the '
|
|
'attribute, you must also specify value of powervm:max_vcpu. '
|
|
'Defaults to value set for vCPUs.'
|
|
),
|
|
value={
|
|
'type': int,
|
|
'min': 1,
|
|
},
|
|
),
|
|
base.ExtraSpecValidator(
|
|
name='powervm:proc_units',
|
|
description=(
|
|
'The wanted ``proc_units``. The value for the attribute cannot be '
|
|
'less than 1/10 of the value that is specified for Virtual '
|
|
'CPUs (vCPUs) for hosts with firmware level 7.5 or earlier and '
|
|
'1/20 of the value that is specified for vCPUs for hosts with '
|
|
'firmware level 7.6 or later. If the value is not specified '
|
|
'during deployment, it is defaulted to vCPUs * 0.5.'
|
|
),
|
|
value={
|
|
'type': str,
|
|
'pattern': r'\d+\.\d+',
|
|
'description': (
|
|
'Float (divisible by 0.1 for hosts with firmware level 7.5 or '
|
|
'earlier and 0.05 for hosts with firmware level 7.6 or later)'
|
|
),
|
|
},
|
|
),
|
|
base.ExtraSpecValidator(
|
|
name='powervm:min_proc_units',
|
|
description=(
|
|
'Minimum ``proc_units``. The minimum value for the attribute is '
|
|
'0.1 for hosts with firmware level 7.5 or earlier and 0.05 for '
|
|
'hosts with firmware level 7.6 or later. The maximum value must '
|
|
'be equal to the maximum value of ``powervm:proc_units``. If you '
|
|
'specify the attribute, you must also specify '
|
|
'``powervm:proc_units``, ``powervm:max_proc_units``, '
|
|
'``powervm:min_vcpu``, `powervm:max_vcpu``, and '
|
|
'``powervm:dedicated_proc``. Set the ``powervm:dedicated_proc`` '
|
|
'to false.'
|
|
'\n'
|
|
'The value for the attribute cannot be less than 1/10 of the '
|
|
'value that is specified for powervm:min_vcpu for hosts with '
|
|
'firmware level 7.5 or earlier and 1/20 of the value that is '
|
|
'specified for ``powervm:min_vcpu`` for hosts with firmware '
|
|
'level 7.6 or later. If you do not specify the value of the '
|
|
'attribute during deployment, it is defaulted to equal the value '
|
|
'of ``powervm:proc_units``.'
|
|
),
|
|
value={
|
|
'type': str,
|
|
'pattern': r'\d+\.\d+',
|
|
'description': (
|
|
'Float (divisible by 0.1 for hosts with firmware level 7.5 or '
|
|
'earlier and 0.05 for hosts with firmware level 7.6 or later)'
|
|
),
|
|
},
|
|
),
|
|
base.ExtraSpecValidator(
|
|
name='powervm:max_proc_units',
|
|
description=(
|
|
'Maximum ``proc_units``. The minimum value can be equal to `` '
|
|
'``powervm:proc_units``. The maximum value for the attribute '
|
|
'cannot be more than the value of the host for maximum allowed '
|
|
'processors per partition. If you specify this attribute, you '
|
|
'must also specify ``powervm:proc_units``, '
|
|
'``powervm:min_proc_units``, ``powervm:min_vcpu``, '
|
|
'``powervm:max_vcpu``, and ``powervm:dedicated_proc``. Set the '
|
|
'``powervm:dedicated_proc`` to false.'
|
|
'\n'
|
|
'The value for the attribute cannot be less than 1/10 of the '
|
|
'value that is specified for powervm:max_vcpu for hosts with '
|
|
'firmware level 7.5 or earlier and 1/20 of the value that is '
|
|
'specified for ``powervm:max_vcpu`` for hosts with firmware '
|
|
'level 7.6 or later. If you do not specify the value of the '
|
|
'attribute during deployment, the value is defaulted to equal the '
|
|
'value of ``powervm:proc_units``.'
|
|
),
|
|
value={
|
|
'type': str,
|
|
'pattern': r'\d+\.\d+',
|
|
'description': (
|
|
'Float (divisible by 0.1 for hosts with firmware level 7.5 or '
|
|
'earlier and 0.05 for hosts with firmware level 7.6 or later)'
|
|
),
|
|
},
|
|
),
|
|
base.ExtraSpecValidator(
|
|
name='powervm:dedicated_proc',
|
|
description=(
|
|
'Use dedicated processors. The attribute defaults to false.'
|
|
),
|
|
value={
|
|
'type': bool,
|
|
},
|
|
),
|
|
base.ExtraSpecValidator(
|
|
name='powervm:shared_weight',
|
|
description=(
|
|
'Shared processor weight. When ``powervm:dedicated_proc`` is set '
|
|
'to true and ``powervm:uncapped`` is also set to true, the value '
|
|
'of the attribute defaults to 128.'
|
|
),
|
|
value={
|
|
'type': int,
|
|
'min': 0,
|
|
'max': 255,
|
|
},
|
|
),
|
|
base.ExtraSpecValidator(
|
|
name='powervm:availability_priority',
|
|
description=(
|
|
'Availability priority. The attribute priority of the server if '
|
|
'there is a processor failure and there are not enough resources '
|
|
'for all servers. VIOS and i5 need to remain high priority '
|
|
'default of 191. The value of the attribute defaults to 128.'
|
|
),
|
|
value={
|
|
'type': int,
|
|
'min': 0,
|
|
'max': 255,
|
|
},
|
|
),
|
|
base.ExtraSpecValidator(
|
|
name='powervm:uncapped',
|
|
description=(
|
|
'LPAR can use unused processor cycles that are beyond or exceed '
|
|
'the wanted setting of the attribute. This attribute is '
|
|
'supported only when ``powervm:dedicated_proc`` is set to false. '
|
|
'When ``powervm:dedicated_proc`` is set to false, '
|
|
'``powervm:uncapped`` defaults to true.'
|
|
),
|
|
value={
|
|
'type': bool,
|
|
},
|
|
),
|
|
base.ExtraSpecValidator(
|
|
name='powervm:dedicated_sharing_mode',
|
|
description=(
|
|
'Sharing mode for dedicated processors. The attribute is '
|
|
'supported only when ``powervm:dedicated_proc`` is set to true.'
|
|
),
|
|
value={
|
|
'type': str,
|
|
'enum': (
|
|
'share_idle_procs',
|
|
'keep_idle_procs',
|
|
'share_idle_procs_active',
|
|
'share_idle_procs_always',
|
|
)
|
|
},
|
|
),
|
|
base.ExtraSpecValidator(
|
|
name='powervm:processor_compatibility',
|
|
description=(
|
|
'A processor compatibility mode is a value that is assigned to a '
|
|
'logical partition by the hypervisor that specifies the processor '
|
|
'environment in which the logical partition can successfully '
|
|
'operate.'
|
|
),
|
|
value={
|
|
'type': str,
|
|
'enum': (
|
|
'default',
|
|
'POWER6',
|
|
'POWER6+',
|
|
'POWER6_Enhanced',
|
|
'POWER6+_Enhanced',
|
|
'POWER7',
|
|
'POWER8'
|
|
),
|
|
},
|
|
),
|
|
base.ExtraSpecValidator(
|
|
name='powervm:shared_proc_pool_name',
|
|
description=(
|
|
'Specifies the shared processor pool to be targeted during '
|
|
'deployment of a virtual machine.'
|
|
),
|
|
value={
|
|
'type': str,
|
|
'description': 'String with upper limit of 14 characters',
|
|
},
|
|
),
|
|
base.ExtraSpecValidator(
|
|
name='powervm:srr_capability',
|
|
description=(
|
|
'If the value of simplified remote restart capability is set to '
|
|
'true for the LPAR, you can remote restart the LPAR to supported '
|
|
'CEC or host when the source CEC or host is down. The attribute '
|
|
'defaults to false.'
|
|
),
|
|
value={
|
|
'type': bool,
|
|
},
|
|
),
|
|
]
|
|
|
|
|
|
def register():
|
|
return EXTRA_SPEC_VALIDATORS
|