Coverage for curator/actions/close.py: 100%
35 statements
« prev ^ index » next coverage.py v7.2.7, created at 2023-07-20 21:00 -0600
« prev ^ index » next coverage.py v7.2.7, created at 2023-07-20 21:00 -0600
1"""Close index action class"""
2import logging
3from curator.helpers.testers import verify_index_list
4from curator.helpers.utils import chunk_index_list, report_failure, show_dry_run, to_csv
6class Close:
7 """Close Action Class"""
8 def __init__(self, ilo, delete_aliases=False, skip_flush=False):
9 """
10 :param ilo: An IndexList Object
11 :param delete_aliases: Delete any associated aliases before closing indices.
12 :param skip_flush: Do not flush indices before closing.
14 :type ilo: :py:class:`~.curator.indexlist.IndexList`
15 :type delete_aliases: bool
16 :type skip_flush: bool
17 """
18 verify_index_list(ilo)
19 #: The :py:class:`~.curator.indexlist.IndexList` object passed from param ``ilo``
20 self.index_list = ilo
21 #: The value passed as ``delete_aliases``
22 self.delete_aliases = delete_aliases
23 #: The value passed as ``skip_flush``
24 self.skip_flush = skip_flush
25 #: The :py:class:`~.elasticsearch.Elasticsearch` client object derived from
26 #: :py:attr:`index_list`
27 self.client = ilo.client
28 self.loggit = logging.getLogger('curator.actions.close')
30 def do_dry_run(self):
31 """Log what the output would be, but take no action."""
32 show_dry_run(self.index_list, 'close', **{'delete_aliases':self.delete_aliases})
34 def do_action(self):
35 """
36 :py:meth:`~.elasticsearch.client.IndicesClient.close` open indices in :py:attr:`index_list`
37 """
38 self.index_list.filter_closed()
39 self.index_list.empty_list_check()
40 self.loggit.info(
41 'Closing %s selected indices: %s',
42 len(self.index_list.indices), self.index_list.indices
43 )
44 try:
45 index_lists = chunk_index_list(self.index_list.indices)
46 for lst in index_lists:
47 lst_as_csv = to_csv(lst)
48 self.loggit.debug('CSV list of indices to close: %s', lst_as_csv)
49 if self.delete_aliases:
50 self.loggit.info('Deleting aliases from indices before closing.')
51 self.loggit.debug('Deleting aliases from: %s', lst)
52 try:
53 self.client.indices.delete_alias(index=lst_as_csv, name='_all')
54 self.loggit.debug('Deleted aliases from: %s', lst)
55 # pylint: disable=broad-except
56 except Exception as err:
57 self.loggit.warning(
58 'Some indices may not have had aliases. Exception: %s', err)
59 if not self.skip_flush:
60 self.client.indices.flush(index=lst_as_csv, ignore_unavailable=True, force=True)
61 self.client.indices.close(index=lst_as_csv, ignore_unavailable=True)
62 # pylint: disable=broad-except
63 except Exception as err:
64 report_failure(err)