Coverage for /pythoncovmergedfiles/medio/medio/usr/local/lib/python3.8/site-packages/c7n_gcp/resources/pubsub.py: 92%

64 statements  

« prev     ^ index     » next       coverage.py v7.3.2, created at 2023-12-08 06:51 +0000

1# Copyright The Cloud Custodian Authors. 

2# SPDX-License-Identifier: Apache-2.0 

3from c7n.utils import type_schema 

4 

5from c7n_gcp.actions import MethodAction 

6from c7n_gcp.filters import IamPolicyFilter 

7from c7n_gcp.provider import resources 

8from c7n_gcp.query import QueryResourceManager, TypeInfo 

9 

10""" 

11todo, needs detail_spec 

12""" 

13 

14 

15class PubSubTypeInfo(TypeInfo): 

16 service = 'pubsub' 

17 version = 'v1' 

18 scope_template = 'projects/{}' 

19 name = id = "name" 

20 urn_id_segments = (-1,) # Just use the last segment of the id in the URN 

21 

22 

23@resources.register('pubsub-topic') 

24class PubSubTopic(QueryResourceManager): 

25 """GCP resource: https://cloud.google.com/pubsub/docs/reference/rest/v1/projects.topics 

26 """ 

27 class resource_type(PubSubTypeInfo): 

28 component = 'projects.topics' 

29 enum_spec = ('list', 'topics[]', None) 

30 default_report_fields = ["name", "kmsKeyName"] 

31 asset_type = "pubsub.googleapis.com/Topic" 

32 metric_key = "resource.labels.topic_id" 

33 urn_component = "topic" 

34 

35 @staticmethod 

36 def get(client, resource_info): 

37 return client.execute_command( 

38 'get', {'topic': resource_info['topic_id']}) 

39 

40 

41@PubSubTopic.filter_registry.register('iam-policy') 

42class PubSubTopicIamPolicyFilter(IamPolicyFilter): 

43 """ 

44 Overrides the base implementation to process pubsub topic resources correctly. 

45 """ 

46 permissions = ('pubsub.topics.getIamPolicy',) 

47 

48 

49@PubSubTopic.action_registry.register('delete') 

50class DeletePubSubTopic(MethodAction): 

51 

52 schema = type_schema('delete') 

53 method_spec = {'op': 'delete'} 

54 

55 def get_resource_params(self, m, r): 

56 return {'topic': r['name']} 

57 

58 

59@resources.register('pubsub-subscription') 

60class PubSubSubscription(QueryResourceManager): 

61 """GCP resource: https://cloud.google.com/pubsub/docs/reference/rest/v1/projects.subscriptions 

62 """ 

63 class resource_type(PubSubTypeInfo): 

64 component = 'projects.subscriptions' 

65 enum_spec = ('list', 'subscriptions[]', None) 

66 default_report_fields = [ 

67 "name", "topic", "ackDeadlineSeconds", 

68 "retainAckedMessages", "messageRetentionDuration"] 

69 asset_type = "pubsub.googleapis.com/Subscription" 

70 metric_key = 'resource.labels.subscription_id' 

71 urn_component = "subscription" 

72 

73 @staticmethod 

74 def get(client, resource_info): 

75 return client.execute_command( 

76 'get', {'subscription': resource_info['subscription_id']}) 

77 

78 

79@PubSubSubscription.action_registry.register('delete') 

80class DeletePubSubSubscription(MethodAction): 

81 

82 schema = type_schema('delete') 

83 method_spec = {'op': 'delete'} 

84 

85 def get_resource_params(self, m, r): 

86 return {'subscription': r['name']} 

87 

88 

89@resources.register('pubsub-snapshot') 

90class PubSubSnapshot(QueryResourceManager): 

91 """GCP resource: https://cloud.google.com/pubsub/docs/reference/rest/v1/projects.snapshots 

92 """ 

93 class resource_type(PubSubTypeInfo): 

94 component = 'projects.snapshots' 

95 enum_spec = ('list', 'snapshots[]', None) 

96 default_report_fields = [ 

97 "name", "topic", "expireTime"] 

98 urn_component = "snapshot" 

99 asset_type = "pubsub.googleapis.com/Snapshot" 

100 

101 

102@PubSubSnapshot.action_registry.register('delete') 

103class DeletePubSubSnapshot(MethodAction): 

104 

105 schema = type_schema('delete') 

106 method_spec = {'op': 'delete'} 

107 

108 def get_resource_params(self, m, r): 

109 return {'snapshot': r['name']}