Coverage for curator/cli_singletons/restore.py: 100%

27 statements  

« prev     ^ index     » next       coverage.py v7.3.0, created at 2023-08-16 15:27 -0600

1"""Snapshot Restore Singleton""" 

2import click 

3from curator.cli_singletons.object_class import cli_action 

4from curator.cli_singletons.utils import get_width, json_to_dict, validate_filter_json 

5 

6@click.command(context_settings=get_width()) 

7@click.option('--repository', type=str, required=True, help='Snapshot repository') 

8@click.option('--name', type=str, help='Snapshot name', required=False, default=None) 

9@click.option( 

10 '--index', 

11 multiple=True, 

12 help='Index name to restore. (Can invoke repeatedly for multiple indices)' 

13) 

14@click.option( 

15 '--rename_pattern', 

16 type=str, 

17 help='Rename pattern', 

18 required=False, 

19 default=None 

20) 

21@click.option( 

22 '--rename_replacement', 

23 type=str, 

24 help='Rename replacement', 

25 required=False, 

26 default=None 

27) 

28@click.option( 

29 '--extra_settings', 

30 type=str, 

31 help='JSON version of extra_settings (see documentation)', 

32 callback=json_to_dict 

33) 

34@click.option( 

35 '--include_aliases', 

36 is_flag=True, 

37 show_default=True, 

38 help='Include aliases with restored indices.' 

39) 

40@click.option( 

41 '--ignore_unavailable', 

42 is_flag=True, 

43 show_default=True, 

44 help='Ignore unavailable shards/indices.' 

45) 

46@click.option( 

47 '--include_global_state', 

48 is_flag=True, 

49 show_default=True, 

50 help='Restore cluster global state with snapshot.' 

51) 

52@click.option( 

53 '--partial', 

54 is_flag=True, 

55 show_default=True, 

56 help='Restore partial data (from snapshot taken with --partial).' 

57) 

58@click.option( 

59 '--wait_for_completion/--no-wait_for_completion', 

60 default=True, 

61 show_default=True, 

62 help='Wait for the snapshot to complete' 

63) 

64@click.option( 

65 '--wait_interval', 

66 default=9, 

67 type=int, 

68 help='Seconds to wait between completion checks.' 

69) 

70@click.option( 

71 '--max_wait', 

72 default=-1, 

73 type=int, 

74 help='Maximum number of seconds to wait_for_completion' 

75) 

76@click.option( 

77 '--skip_repo_fs_check', 

78 is_flag=True, 

79 show_default=True, 

80 help='Skip repository filesystem access validation.' 

81) 

82@click.option( 

83 '--ignore_empty_list', 

84 is_flag=True, 

85 help='Do not raise exception if there are no actionable indices' 

86) 

87@click.option( 

88 '--allow_ilm_indices/--no-allow_ilm_indices', 

89 help='Allow Curator to operate on Index Lifecycle Management monitored indices.', 

90 default=False, 

91 show_default=True 

92) 

93@click.option( 

94 '--filter_list', 

95 callback=validate_filter_json, 

96 help='JSON array of filters selecting snapshots to act on.', 

97 required=True 

98) 

99@click.pass_context 

100def restore( 

101 ctx, repository, name, index, rename_pattern, rename_replacement, extra_settings, 

102 include_aliases, ignore_unavailable, include_global_state, partial, wait_for_completion, 

103 wait_interval, max_wait, skip_repo_fs_check, ignore_empty_list, allow_ilm_indices, 

104 filter_list 

105 ): 

106 """ 

107 Restore Indices 

108 """ 

109 indices = list(index) 

110 manual_options = { 

111 'name': name, 

112 'indices': indices, 

113 'rename_pattern': rename_pattern, 

114 'rename_replacement': rename_replacement, 

115 'ignore_unavailable': ignore_unavailable, 

116 'include_aliases': include_aliases, 

117 'include_global_state': include_global_state, 

118 'partial': partial, 

119 'skip_repo_fs_check': skip_repo_fs_check, 

120 'wait_for_completion': wait_for_completion, 

121 'max_wait': max_wait, 

122 'wait_interval': wait_interval, 

123 'allow_ilm_indices': allow_ilm_indices, 

124 } 

125 # ctx.info_name is the name of the function or name specified in @click.command decorator 

126 action = cli_action( 

127 ctx.info_name, 

128 ctx.obj['config']['client'], 

129 manual_options, 

130 filter_list, 

131 ignore_empty_list, 

132 repository=repository 

133 ) 

134 action.do_singleton_action(dry_run=ctx.obj['dry_run'])