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

Shortcuts on this page

r m x   toggle line displays

j k   next/prev highlighted chunk

0   (zero) top of page

1   (one) first highlighted chunk

61 statements  

1# Copyright The Cloud Custodian Authors. 

2# SPDX-License-Identifier: Apache-2.0 

3from c7n_gcp.provider import resources 

4from c7n_gcp.query import QueryResourceManager, TypeInfo 

5from c7n_gcp.filters import IamPolicyFilter 

6from c7n_gcp.filters.iampolicy import IamPolicyValueFilter 

7from c7n.utils import local_session 

8 

9 

10@resources.register("cloud-run-service") 

11class CloudRunService(QueryResourceManager): 

12 """GCP resource: https://cloud.google.com/run/docs/reference/rest/v1/namespaces.services""" 

13 

14 class resource_type(TypeInfo): 

15 service = "run" 

16 version = "v1" 

17 component = "projects.locations.services" 

18 enum_spec = ("list", "items[]", None) 

19 scope = "project" 

20 scope_key = "parent" 

21 scope_template = "projects/{}/locations/-" 

22 name = "metadata.name" 

23 id = "metadata.selfLink" 

24 default_report_fields = ["metadata.name", "metadata.creationTimestamp"] 

25 asset_type = "run.googleapis.com/Service" 

26 

27 

28@CloudRunService.filter_registry.register("iam-policy") 

29class CloudRunServiceIamPolicyFilter(IamPolicyFilter): 

30 """ 

31 Overrides the base implementation to process cloudrun resources correctly. 

32 """ 

33 permissions = ("run.services.getIamPolicy",) 

34 

35 def _verb_arguments(self, resource): 

36 session = local_session(self.manager.session_factory) 

37 project = session.get_default_project() 

38 location = resource["metadata"]["labels"]["cloud.googleapis.com/location"] 

39 verb_arguments = { 

40 "resource": f'projects/{project}/locations/{location}/services/' + 

41 f'{resource["metadata"]["name"]}' 

42 } 

43 return verb_arguments 

44 

45 def process_resources(self, resources): 

46 value_filter = IamPolicyValueFilter(self.data["doc"], self.manager) 

47 value_filter._verb_arguments = self._verb_arguments 

48 return value_filter.process(resources) 

49 

50 

51@resources.register("cloud-run-job") 

52class CloudRunJob(QueryResourceManager): 

53 """GCP resource: https://cloud.google.com/run/docs/reference/rest/v2/projects.locations.jobs""" 

54 

55 class resource_type(TypeInfo): 

56 service = "run" 

57 version = "v1" 

58 component = "namespaces.jobs" 

59 enum_spec = ("list", "items[]", None) 

60 scope = "project" 

61 scope_key = "parent" 

62 scope_template = "namespaces/{}" 

63 name = "metadata.name" 

64 id = "metadata.selfLink" 

65 default_report_fields = ["metadata.name", "metadata.creationTimestamp"] 

66 asset_type = "run.googleapis.com/Job" 

67 

68 

69@resources.register("cloud-run-revision") 

70class CloudRunRevision(QueryResourceManager): 

71 """GCP resource: https://cloud.google.com/run/docs/reference/rest/v2/projects.locations.services.revisions""" 

72 

73 class resource_type(TypeInfo): 

74 service = "run" 

75 version = "v1" 

76 component = "namespaces.revisions" 

77 enum_spec = ("list", "items[]", None) 

78 scope_key = "parent" 

79 scope_template = "namespaces/{}" 

80 name = "metadata.name" 

81 id = "metadata.selfLink" 

82 default_report_fields = ["metadata.name", "metadata.creationTimestamp"] 

83 asset_type = "run.googleapis.com/Revision" 

84 urn_component = "revision" 

85 urn_id_segments = (-1,)