Coverage for nova/api/validation/extra_specs/traits.py: 100%

8 statements  

« prev     ^ index     » next       coverage.py v7.6.12, created at 2025-04-17 15:08 +0000

1# Copyright 2020 Red Hat, Inc. All rights reserved. 

2# 

3# Licensed under the Apache License, Version 2.0 (the "License"); you may 

4# not use this file except in compliance with the License. You may obtain 

5# a copy of the License at 

6# 

7# http://www.apache.org/licenses/LICENSE-2.0 

8# 

9# Unless required by applicable law or agreed to in writing, software 

10# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 

11# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 

12# License for the specific language governing permissions and limitations 

13# under the License. 

14 

15"""Validators for ``traits`` namespaced extra specs.""" 

16 

17import os_traits 

18 

19from nova.api.validation.extra_specs import base 

20 

21 

22EXTRA_SPEC_VALIDATORS = [] 

23 

24for trait in os_traits.get_traits(): 

25 EXTRA_SPEC_VALIDATORS.append( 

26 base.ExtraSpecValidator( 

27 name=f'trait{ group} :{trait}', 

28 description=f'Require or forbid trait {trait}.', 

29 value={ 

30 'type': str, 

31 'enum': [ 

32 'required', 

33 'forbidden', 

34 ], 

35 }, 

36 parameters=[ 

37 { 

38 'name': 'group', 

39 'pattern': r'([a-zA-Z0-9_-]{1,64})?', 

40 }, 

41 ], 

42 ) 

43 ) 

44 

45EXTRA_SPEC_VALIDATORS.append( 

46 base.ExtraSpecValidator( 

47 name='trait{group}:CUSTOM_{trait}', 

48 description=( 

49 'Require or forbid trait CUSTOM_{trait}.' 

50 ), 

51 value={ 

52 'type': str, 

53 'enum': [ 

54 'required', 

55 'forbidden', 

56 ], 

57 }, 

58 parameters=[ 

59 { 

60 'name': 'group', 

61 'pattern': r'([a-zA-Z0-9_-]{1,64})?', 

62 }, 

63 { 

64 'name': 'trait', 

65 'pattern': r'[A-Z0-9_]+', 

66 }, 

67 ], 

68 ) 

69) 

70 

71 

72def register(): 

73 return EXTRA_SPEC_VALIDATORS