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

61 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_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@resources.register("cloud-run-service") 

10class CloudRunService(QueryResourceManager): 

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

12 

13 class resource_type(TypeInfo): 

14 service = "run" 

15 version = "v1" 

16 component = "projects.locations.services" 

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

18 scope = "project" 

19 scope_key = "parent" 

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

21 name = "metadata.name" 

22 id = "metadata.selfLink" 

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

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

25 

26 

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

28class CloudRunServiceIamPolicyFilter(IamPolicyFilter): 

29 """ 

30 Overrides the base implementation to process cloudrun resources correctly. 

31 """ 

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

33 

34 def _verb_arguments(self, resource): 

35 session = local_session(self.manager.session_factory) 

36 project = session.get_default_project() 

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

38 verb_arguments = { 

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

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

41 } 

42 return verb_arguments 

43 

44 def process_resources(self, resources): 

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

46 value_filter._verb_arguments = self._verb_arguments 

47 return value_filter.process(resources) 

48 

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

50class CloudRunJob(QueryResourceManager): 

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

52 

53 class resource_type(TypeInfo): 

54 service = "run" 

55 version = "v1" 

56 component = "namespaces.jobs" 

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

58 scope = "project" 

59 scope_key = "parent" 

60 scope_template = "namespaces/{}" 

61 name = "metadata.name" 

62 id = "metadata.selfLink" 

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

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

65 

66 

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

68class CloudRunRevision(QueryResourceManager): 

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

70 

71 class resource_type(TypeInfo): 

72 service = "run" 

73 version = "v1" 

74 component = "namespaces.revisions" 

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

76 scope_key = "parent" 

77 scope_template = "namespaces/{}" 

78 name = "metadata.name" 

79 id = "metadata.selfLink" 

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

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

82 urn_component = "revision" 

83 urn_id_segments = (-1,)