Coverage for /Users/buh/.pyenv/versions/3.12.9/envs/es-testbed/lib/python3.12/site-packages/es_testbed/mgrs/ilm.py: 81%
36 statements
« prev ^ index » next coverage.py v7.6.12, created at 2025-04-17 22:23 -0600
« prev ^ index » next coverage.py v7.6.12, created at 2025-04-17 22:23 -0600
1"""ILM Policy Entity Manager Class"""
3import typing as t
4import logging
5from ..debug import debug, begin_end
6from ..es_api import exists, put_ilm
7from ..exceptions import ResultNotExpected
8from ..utils import build_ilm_policy
9from .entity import EntityMgr
11if t.TYPE_CHECKING:
12 from elasticsearch8 import Elasticsearch
13 from dotmap import DotMap
15logger = logging.getLogger(__name__)
18class IlmMgr(EntityMgr):
19 """Index Lifecycle Policy Entity Manager"""
21 kind = 'ilm'
22 listname = 'ilm_policies'
24 def __init__(
25 self,
26 client: t.Union['Elasticsearch', None] = None,
27 plan: t.Union['DotMap', None] = None,
28 ):
29 """Initialize the ILM policy manager"""
30 debug.lv2('Initializing IlmMgr object...')
31 super().__init__(client=client, plan=plan)
32 debug.lv3('IlmMgr object initialized')
34 @begin_end()
35 def get_policy(self) -> t.Dict:
36 """Return the configured ILM policy"""
37 d = self.plan.ilm
38 kwargs = {
39 'phases': d.phases,
40 'forcemerge': d.forcemerge,
41 'max_num_segments': d.max_num_segments,
42 'readonly': d.readonly,
43 'repository': self.plan.repository,
44 }
45 retval = build_ilm_policy(**kwargs)
46 debug.lv5(f'Return value = {retval}')
47 return retval
49 @begin_end()
50 def setup(self) -> None:
51 """Setup the entity manager"""
52 if self.plan.ilm.enabled:
53 if not self.plan.ilm.policy: # If you've put a full policy there...
54 self.plan.ilm.policy = self.get_policy()
55 put_ilm(self.client, self.name, policy=self.plan.ilm.policy)
56 # Verify existence
57 if not exists(self.client, 'ilm', self.name):
58 raise ResultNotExpected(
59 f'Unable to verify creation of ilm policy {self.name}'
60 )
61 # This goes first because the length of entity_list determines the suffix
62 self.appender(self.name)
63 logger.info(f'Successfully created ILM policy: {self.last}')
64 debug.lv5(self.client.ilm.get_lifecycle(name=self.last))
65 else:
66 self.appender(None) # This covers self.plan.ilm_policies[-1]
67 logger.info('No ILM policy created.')