Coverage for ocp_resources/event.py: 80%

15 statements  

« prev     ^ index     » next       coverage.py v7.6.10, created at 2025-01-30 10:51 +0200

1from simple_logger.logger import get_logger 

2 

3LOGGER = get_logger(name=__name__) 

4 

5 

6class Event: 

7 """ 

8 Allow read and remove K8s events. 

9 """ 

10 

11 api_version = "v1" 

12 

13 @classmethod 

14 def get( 

15 cls, 

16 dyn_client, 

17 namespace=None, 

18 name=None, 

19 label_selector=None, 

20 field_selector=None, 

21 resource_version=None, 

22 timeout=None, 

23 ): 

24 """ 

25 get - retrieves K8s events. 

26 

27 Args: 

28 dyn_client (DynamicClient): K8s client 

29 namespace (str): event namespace 

30 name (str): event name 

31 label_selector (str): filter events by labels; comma separated string of key=value 

32 field_selector (str): filter events by fields; comma separated string of key=valueevent fields; 

33 comma separated string of key=value 

34 resource_version (str): filter events by their resource's version 

35 timeout (int): timeout in seconds 

36 

37 Returns 

38 list: event objects 

39 

40 example: reading all CSV Warning events in namespace "my-namespace", with reason of "AnEventReason" 

41 for event in Event.get( 

42 default_client, 

43 namespace="my-namespace", 

44 field_selector="involvedObject.kind==ClusterServiceVersion,type==Warning,reason=AnEventReason", 

45 timeout=10, 

46 ): 

47 print(event.object) 

48 """ 

49 

50 LOGGER.info("Reading events") 

51 LOGGER.debug( 

52 f"get events parameters: namespace={namespace}, name={name}," 

53 f" label_selector={label_selector}, field_selector='{field_selector}'," 

54 f" resource_version={resource_version}, timeout={timeout}" 

55 ) 

56 

57 event_listener = dyn_client.resources.get(api_version=cls.api_version, kind=cls.__name__) 

58 yield from event_listener.watch( 

59 namespace=namespace, 

60 name=name, 

61 label_selector=label_selector, 

62 field_selector=field_selector, 

63 resource_version=resource_version, 

64 timeout=timeout, 

65 ) 

66 

67 @classmethod 

68 def delete_events( 

69 cls, 

70 dyn_client, 

71 namespace=None, 

72 name=None, 

73 label_selector=None, 

74 field_selector=None, 

75 resource_version=None, 

76 timeout=None, 

77 ): 

78 """ 

79 delete_events - delete K8s events. For example, to cleanup events before test, in order to not get old 

80 events in the test, in order to prevent false positive test. 

81 

82 Args: 

83 dyn_client (DynamicClient): K8s client 

84 namespace (str): event namespace 

85 name (str): event name 

86 label_selector (str): filter events by labels; comma separated string of key=value 

87 field_selector (str): filter events by fields; comma separated string of key=valueevent fields; 

88 comma separated string of key=value 

89 resource_version (str): filter events by their resource's version 

90 timeout (int): timeout in seconds 

91 

92 Returns 

93 list: event objects 

94 

95 example: deleting all the event with a reason of "AnEventReason", from "my-namespace" namespace 

96 

97 def delete_events_before_test(default_client): 

98 Event.delete_events(default_client, namespace=my-namespace, field_selector="reason=AnEventReason") 

99 """ 

100 LOGGER.info("Deleting events") 

101 LOGGER.debug( 

102 f"delete_events parameters: namespace={namespace}, name={name}," 

103 f" label_selector={label_selector}, field_selector='{field_selector}'," 

104 f" resource_version={resource_version}, timeout={timeout}" 

105 ) 

106 dyn_client.resources.get(api_version=cls.api_version, kind=cls.__name__).delete( 

107 namespace=namespace, 

108 name=name, 

109 label_selector=label_selector, 

110 field_selector=field_selector, 

111 resource_version=resource_version, 

112 timeout=timeout, 

113 )