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
« 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
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
10"""
11todo, needs detail_spec
12"""
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
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"
35 @staticmethod
36 def get(client, resource_info):
37 return client.execute_command(
38 'get', {'topic': resource_info['topic_id']})
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',)
49@PubSubTopic.action_registry.register('delete')
50class DeletePubSubTopic(MethodAction):
52 schema = type_schema('delete')
53 method_spec = {'op': 'delete'}
55 def get_resource_params(self, m, r):
56 return {'topic': r['name']}
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"
73 @staticmethod
74 def get(client, resource_info):
75 return client.execute_command(
76 'get', {'subscription': resource_info['subscription_id']})
79@PubSubSubscription.action_registry.register('delete')
80class DeletePubSubSubscription(MethodAction):
82 schema = type_schema('delete')
83 method_spec = {'op': 'delete'}
85 def get_resource_params(self, m, r):
86 return {'subscription': r['name']}
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"
102@PubSubSnapshot.action_registry.register('delete')
103class DeletePubSubSnapshot(MethodAction):
105 schema = type_schema('delete')
106 method_spec = {'op': 'delete'}
108 def get_resource_params(self, m, r):
109 return {'snapshot': r['name']}