Coverage for /Users/buh/.pyenv/versions/3.12.2/envs/es-testbed/lib/python3.12/site-packages/es_testbed/mgrs/ilmmgr.py: 96%

28 statements  

« prev     ^ index     » next       coverage.py v7.4.4, created at 2024-05-02 11:57 -0600

1"""ILM Policy Entity Manager Class""" 

2 

3import typing as t 

4from .entitymgr import EntityMgr 

5from ..exceptions import ResultNotExpected 

6from ..helpers.es_api import exists, put_ilm 

7from ..helpers.utils import build_ilm_policy, getlogger 

8 

9if t.TYPE_CHECKING: 

10 from elasticsearch8 import Elasticsearch 

11 from dotmap import DotMap 

12 

13# pylint: disable=missing-docstring 

14 

15 

16class IlmMgr(EntityMgr): 

17 kind = 'ilm' 

18 listname = 'ilm_policies' 

19 

20 def __init__( 

21 self, 

22 client: t.Union['Elasticsearch', None] = None, 

23 plan: t.Union['DotMap', None] = None, 

24 ): 

25 self.logger = getlogger('es_testbed.IlmMgr') 

26 super().__init__(client=client, plan=plan) 

27 

28 def get_policy(self) -> t.Dict: 

29 """Return the configured ILM policy""" 

30 d = self.plan.ilm 

31 kwargs = { 

32 'tiers': d.tiers, 

33 'forcemerge': d.forcemerge, 

34 'max_num_segments': d.max_num_segments, 

35 'repository': self.plan.repository, 

36 } 

37 return build_ilm_policy(**kwargs) 

38 

39 def setup(self) -> None: 

40 """Setup the entity manager""" 

41 if self.plan.ilm.enabled: 

42 self.plan.ilm.policy = self.get_policy() 

43 put_ilm(self.client, self.name, policy=self.plan.ilm.policy) 

44 # Verify existence 

45 if not exists(self.client, 'ilm', self.name): 

46 raise ResultNotExpected( 

47 f'Unable to verify creation of ilm policy {self.name}' 

48 ) 

49 # This goes first because the length of entity_list determines the suffix 

50 self.appender(self.name) 

51 self.logger.info('Successfully created ILM policy: %s', self.last) 

52 self.logger.debug(self.client.ilm.get_lifecycle(name=self.last)) 

53 else: 

54 self.appender(None) # This covers self.plan.ilm_policies[-1] 

55 self.logger.info('No ILM policy created.') 

56 self.success = True