Coverage for /Users/buh/.pyenv/versions/3.12.9/envs/es-testbed/lib/python3.12/site-packages/es_testbed/defaults.py: 100%

44 statements  

« prev     ^ index     » next       coverage.py v7.6.12, created at 2025-04-16 12:23 -0600

1"""Default values and constants""" 

2 

3import typing as t 

4 

5EPILOG: str = 'Learn more at https://github.com/untergeek/es-testbed' 

6"""Epilog for the Click CLI""" 

7 

8HELP_OPTIONS: dict = {'help_option_names': ['-h', '--help']} 

9"""Default help options for Click commands""" 

10 

11COLD_PREFIX: str = 'restored-' 

12"""Prefix for cold searchable snapshot indices""" 

13 

14FROZEN_PREFIX: str = 'partial-' 

15"""Prefix for frozen searchable snapshot indices""" 

16 

17SS_PREFIX: t.Dict[str, str] = {'cold': COLD_PREFIX, 'frozen': FROZEN_PREFIX} 

18"""Dictionary of prefixes for searchable snapshot indices""" 

19 

20NAMEMAPPER: t.Dict[str, str] = { 

21 'index': 'idx', 

22 'indices': 'idx', # This is to aid testing and other places where kind is indices 

23 'data_stream': 'ds', 

24 'component': 'cmp', 

25 'ilm': 'ilm', 

26 'template': 'tmpl', 

27 'snapshot': 'snp', 

28} 

29"""Mapping of names to abbreviations for use in the CLI""" 

30 

31PAUSE_DEFAULT: str = '1.0' 

32"""Default value for the pause time in seconds""" 

33PAUSE_ENVVAR: str = 'ES_TESTBED_PAUSE' 

34"""Environment variable for the pause time""" 

35 

36PLURALMAP: t.Dict[str, str] = { 

37 'ilm': 'ILM Policies', 

38 'index': 'indices', 

39} 

40"""Mapping of singular to plural names for use in the CLI""" 

41 

42TESTPLAN: dict = { 

43 'type': 'indices', 

44 'prefix': 'es-testbed', 

45 'repository': None, 

46 'rollover_alias': None, 

47 'ilm': { 

48 'enabled': False, 

49 'phases': ['hot', 'delete'], 

50 'readonly': None, 

51 'forcemerge': False, 

52 'max_num_segments': 1, 

53 }, 

54 'entities': [], 

55} 

56"""Default values for the TestPlan settings""" 

57 

58TIER: dict = { 

59 'hot': {'pref': 'data_hot,data_content'}, 

60 'warm': {'pref': 'data_warm,data_hot,data_content'}, 

61 'cold': { 

62 'pref': 'data_cold,data_warm,data_hot,data_content', 

63 'prefix': 'restored', 

64 'storage': 'full_copy', 

65 }, 

66 'frozen': { 

67 'pref': 'data_frozen', 

68 'prefix': 'partial', 

69 'storage': 'shared_cache', 

70 }, 

71} 

72"""Default values for the ILM tiers""" 

73 

74TIMEOUT_DEFAULT: str = '30' 

75"""Default timeout for the testbed in seconds""" 

76TIMEOUT_ENVVAR: str = 'ES_TESTBED_TIMEOUT' 

77"""Environment variable for the testbed timeout""" 

78 

79# Define IlmPhase as a typing alias to be reused multiple times 

80# 

81# In all currently supported Python versions (3.8 -> 3.12), the syntax: 

82# 

83# IlmPhase = t.Dict[ 

84# 

85# is supported. In 3.10 and up, you can use the more explicit syntax: 

86# 

87# IlmPhase: t.TypeAlias = t.Dict[ 

88# 

89# making use of the TypeAlias class. 

90# 

91# To support Python versions 3.8 and 3.9 (still), the older syntax is used. 

92IlmPhase = t.Dict[ 

93 str, t.Union[str, t.Dict[str, str], t.Dict[str, t.Dict[str, t.Dict[str, str]]]] 

94] 

95"""ILM Phase type alias""" 

96 

97 

98def ilmhot() -> IlmPhase: 

99 """Return a default hot ILM phase""" 

100 return {'actions': {'rollover': {'max_primary_shard_size': '1gb', 'max_age': '1d'}}} 

101 

102 

103def ilmwarm() -> IlmPhase: 

104 """Return a default warm ILM phase""" 

105 return {'min_age': '2d', 'actions': {}} 

106 

107 

108def ilmcold() -> IlmPhase: 

109 """Return a default cold ILM phase""" 

110 return {'min_age': '3d', 'actions': {}} 

111 

112 

113def ilmfrozen() -> IlmPhase: 

114 """Return a default frozen ILM phase""" 

115 return {'min_age': '4d', 'actions': {}} 

116 

117 

118def ilmdelete() -> IlmPhase: 

119 """Return a default delete ILM phase""" 

120 return {'min_age': '5d', 'actions': {'delete': {}}} 

121 

122 

123def ilm_phase(value: str) -> IlmPhase: 

124 """Return the default phase step based on 'value'""" 

125 phase_map = { 

126 'hot': ilmhot(), 

127 'warm': ilmwarm(), 

128 'cold': ilmcold(), 

129 'frozen': ilmfrozen(), 

130 'delete': ilmdelete(), 

131 } 

132 return {value: phase_map[value]} 

133 

134 

135def ilm_force_merge(max_num_segments: int = 1) -> t.Dict[str, t.Dict[str, int]]: 

136 """Return an ILM policy force merge action block using max_num_segments""" 

137 return {'forcemerge': {'max_num_segments': max_num_segments}}