Coverage for curator/defaults/filter_elements.py: 98%

1"""Filter element schema definitions"""

2 from six import string_types

3 from voluptuous import All, Any, Boolean, Coerce, Optional, Range, Required

4 from curator.defaults import settings

5

6# pylint: disable=missing-docstring

7

8### Schema information ###

9

10 def aliases(**kwargs):

11 # This setting is used by the alias filtertype and is required

12 return {Required('aliases'): Any(list, *string_types)}

13

14 def allocation_type(**kwargs):

15 return {Optional('allocation_type', default='require'): All(

16 Any(*string_types), Any('require', 'include', 'exclude'))}

17

18 def count(**kwargs):

19 # This setting is only used with the count filtertype and is required

20 return {Required('count'): All(Coerce(int), Range(min=1))}

21

22 def date_from(**kwargs):

23 # This setting is only used with the period filtertype.

24 return {Optional('date_from'): Any(*string_types)}

25

26 def date_from_format(**kwargs):

27 # This setting is only used with the period filtertype.

28 return {Optional('date_from_format'): Any(*string_types)}

29

30 def date_to(**kwargs):

31 # This setting is only used with the period filtertype.

32 return {Optional('date_to'): Any(*string_types)}

33

34 def date_to_format(**kwargs):

35 # This setting is only used with the period filtertype.

36 return {Optional('date_to_format'): Any(*string_types)}

37

38 def direction(**kwargs):

39 # This setting is only used with the age filtertype.

40 return {Required('direction'): Any('older', 'younger')}

41

42 def disk_space(**kwargs):

43 # This setting is only used with the space filtertype and is required

44 return {Required('disk_space'): Any(Coerce(float))}

45

46 def epoch(**kwargs):

47 # This setting is only used with the age filtertype.

48 return {Optional('epoch', default=None): Any(Coerce(int), None)}

49

50 def exclude(**kwargs):

51 # pylint: disable=E1120

52 # This setting is available in all filter types.

53 if 'exclude' in kwargs and kwargs['exclude']:

54 val = True

55 else: # False by default

56 val = False

57 return {Optional('exclude', default=val): Any(bool, All(Any(*string_types), Boolean()))}

58

59 def field(**kwargs):

60 # This setting is only used with the age filtertype.

61 if 'required' in kwargs and kwargs['required']:

62 return {Required('field'): Any(*string_types)}

63 else:

64 return {Optional('field'): Any(*string_types)}

65

66 def intersect(**kwargs):

67 # pylint: disable=E1120

68 # This setting is only used with the period filtertype when using field_stats

69 # i.e. indices only.

70 return {Optional('intersect', default=False): Any(bool, All(Any(*string_types), Boolean()))}

71

72 def key(**kwargs):

73 # This setting is only used with the allocated filtertype.

74 return {Required('key'): Any(*string_types)}

75

76 def kind(**kwargs):

77 # This setting is only used with the pattern filtertype and is required

78 return {

79 Required('kind'): Any('prefix', 'suffix', 'timestring', 'regex')

80 }

81

82 def max_num_segments(**kwargs):

83 return {

84 Required('max_num_segments'): All(Coerce(int), Range(min=1))

85 }

86

87 def number_of_shards(**kwargs):

88 return {

89 Required('number_of_shards'): All(Coerce(int), Range(min=1))

90 }

91

92 def pattern(**kwargs):

93 return {

94 Optional('pattern'): Any(*string_types)

95 }

96

97 def period_type(**kwargs):

98 # This setting is only used with the period filtertype.

99 return {Optional('period_type', default='relative'): Any('relative', 'absolute')}

100

101 def range_from(**kwargs):

102 return {Optional('range_from'): Coerce(int)}

103

104 def range_to(**kwargs):

105 return {Optional('range_to'): Coerce(int)}

106

107 def reverse(**kwargs):

108 # pylint: disable=E1120

109 # Only used with space filtertype

110 # Should be ignored if `use_age` is True

111 return {Optional('reverse', default=True): Any(bool, All(Any(*string_types), Boolean()))}

112

113 def shard_filter_behavior(**kwargs):

114 # This setting is only used with the shards filtertype and defaults to 'greater_than'.

115 return {

116 Optional('shard_filter_behavior', default='greater_than'):

117 Any('greater_than', 'less_than', 'greater_than_or_equal', 'less_than_or_equal', 'equal')

118 }

119

120 def source(**kwargs):

121 # This setting is only used with the age filtertype, or with the space

122 # filtertype when use_age is set to True.

123 if 'action' in kwargs and kwargs['action'] in settings.snapshot_actions():

124 valuelist = Any('name', 'creation_date')

125 else:

126 valuelist = Any('name', 'creation_date', 'field_stats')

127

128 if 'required' in kwargs and kwargs['required']:

129 return {Required('source'): valuelist}

130 else:

131 return {Optional('source'): valuelist}

132

133 def state(**kwargs):

134 # This setting is only used with the state filtertype.

135 return {Optional('state', default='SUCCESS'): Any(

136 'SUCCESS', 'PARTIAL', 'FAILED', 'IN_PROGRESS')}

137

138 def stats_result(**kwargs):

139 # This setting is only used with the age filtertype.

140 return {

141 Optional('stats_result', default='min_value'): Any(

142 'min_value', 'max_value')

143 }

144

145 def timestring(**kwargs):

146 # This setting is only used with the age filtertype, or with the space

147 # filtertype if use_age is set to True.

148 if 'required' in kwargs and kwargs['required']:

149 return {Required('timestring'): Any(*string_types)}

150 else:

151 return {Optional('timestring', default=None): Any(None, *string_types)}

152

153 def threshold_behavior(**kwargs):

154 # This setting is only used with the space and size filtertype and defaults to 'greater_than'.

155 return {

156 Optional('threshold_behavior', default='greater_than'): Any('greater_than', 'less_than')

157 }

158

159 def unit(**kwargs):

160 # This setting is only used with the age filtertype, or with the space

161 # filtertype if use_age is set to True.

162 return {

163 Required('unit'): Any(

164 'seconds', 'minutes', 'hours', 'days', 'weeks', 'months', 'years'

165 )

166 }

167

168 def unit_count(**kwargs):

169 # This setting is only used with the age filtertype, or with the space

170 # filtertype if use_age is set to True.

171 return {Required('unit_count'): Coerce(int)}

172

173 def unit_count_pattern(**kwargs):

174 # This setting is used with the age filtertype to define, whether

175 # the unit_count value is taken from the configuration or read from

176 # the index name via a regular expression

177 return {Optional('unit_count_pattern'): Any(*string_types)}

178

179 def use_age(**kwargs):

180 # pylint: disable=E1120

181 # Use of this setting requires the additional setting, source.

182 return {Optional('use_age', default=False): Any(bool, All(Any(*string_types), Boolean()))}

183

184 def value(**kwargs):

185 # This setting is only used with the pattern filtertype and is a required

186 # setting. There is a separate value option associated with the allocation

187 # action, and the allocated filtertype.

188 return {Required('value'): Any(*string_types)}

189

190 def week_starts_on(**kwargs):

191 return {

192 Optional('week_starts_on', default='sunday'): Any(

193 'Sunday', 'sunday', 'SUNDAY', 'Monday', 'monday', 'MONDAY', None

194 )

195 }

196

197 def size_threshold(**kwargs):

198 # This setting is only used with the size filtertype and is required

199 return { Required('size_threshold'): Any(Coerce(float)) }

200

201 def size_behavior(**kwargs):

202 # This setting is only used with the size filtertype and defaults to 'primary'.

203 return {

204 Optional('size_behavior', default='primary'): Any('primary', 'total')

205 }