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

114 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 

3 

4import re 

5 

6from c7n_gcp.provider import resources 

7from c7n_gcp.query import QueryResourceManager, TypeInfo, ChildResourceManager, ChildTypeInfo 

8from c7n.utils import local_session 

9 

10 

11@resources.register('app-engine') 

12class AppEngineApp(QueryResourceManager): 

13 """GCP resource: https://cloud.google.com/appengine/docs/admin-api/reference/rest/v1/apps 

14 """ 

15 class resource_type(TypeInfo): 

16 service = 'appengine' 

17 version = 'v1' 

18 component = 'apps' 

19 enum_spec = ('get', '[@]', None) 

20 scope = None 

21 id = 'id' 

22 name = 'name' 

23 default_report_fields = [ 

24 'id', 'locationId', 'servingStatus', 'authDomain', 'defaultHostname'] 

25 asset_type = "appengine.googleapis.com/Application" 

26 permissions = ('appengine.applications.get',) 

27 metric_key = 'resource.labels.module_id' 

28 urn_component = "app" 

29 urn_region_key = "locationId" 

30 

31 @staticmethod 

32 def get(client, resource_info): 

33 return client.execute_query( 

34 'get', {'appsId': re.match('apps/(.*)', 

35 resource_info['resourceName']).group(1)}) 

36 

37 def get_resource_query(self): 

38 return {'appsId': local_session(self.session_factory).get_default_project()} 

39 

40 

41class AppEngineChildTypeInfo(ChildTypeInfo): 

42 service = 'appengine' 

43 version = 'v1' 

44 scope = None 

45 parent_spec = { 

46 'resource': 'app-engine', 

47 'child_enum_params': { 

48 ('id', 'appsId') 

49 } 

50 } 

51 permissions = ('appengine.applications.get',) 

52 

53 @classmethod 

54 def _get_location(cls, resource): 

55 "Get the region from the parent." 

56 return cls.get_parent(resource)["locationId"] 

57 

58 

59@resources.register('app-engine-certificate') 

60class AppEngineCertificate(ChildResourceManager): 

61 """GCP resource: 

62 https://cloud.google.com/appengine/docs/admin-api/reference/rest/v1/apps.authorizedCertificates 

63 """ 

64 def _get_parent_resource_info(self, child_instance): 

65 return {'resourceName': re.match( 

66 '(apps/.*?)/authorizedCertificates/.*', child_instance['name']).group(1)} 

67 

68 class resource_type(AppEngineChildTypeInfo): 

69 component = 'apps.authorizedCertificates' 

70 enum_spec = ('list', 'certificates[]', None) 

71 name = 'displayName' 

72 id = 'id' 

73 default_report_fields = ['displayName', 'expireTime'] 

74 urn_component = "certificate" 

75 

76 @staticmethod 

77 def get(client, resource_info): 

78 apps_id, cert_id = re.match('apps/(.*?)/authorizedCertificates/(.*)', 

79 resource_info['resourceName']).groups() 

80 return client.execute_query('get', {'appsId': apps_id, 

81 'authorizedCertificatesId': cert_id}) 

82 

83 

84@resources.register('app-engine-domain') 

85class AppEngineDomain(ChildResourceManager): 

86 """GCP resource: 

87 https://cloud.google.com/appengine/docs/admin-api/reference/rest/v1/apps.authorizedDomains/list#AuthorizedDomain 

88 """ 

89 class resource_type(AppEngineChildTypeInfo): 

90 component = 'apps.authorizedDomains' 

91 enum_spec = ('list', 'domains[]', None) 

92 id = 'id' 

93 name = "name" 

94 default_report_fields = [id, name] 

95 urn_component = "domain" 

96 

97 

98@resources.register('app-engine-domain-mapping') 

99class AppEngineDomainMapping(ChildResourceManager): 

100 """GCP resource: 

101 https://cloud.google.com/appengine/docs/admin-api/reference/rest/v1/apps.domainMappings 

102 """ 

103 def _get_parent_resource_info(self, child_instance): 

104 return {'resourceName': re.match( 

105 '(apps/.*?)/domainMappings/.*', child_instance['name']).group(1)} 

106 

107 class resource_type(AppEngineChildTypeInfo): 

108 component = 'apps.domainMappings' 

109 enum_spec = ('list', 'domainMappings[]', None) 

110 name = "name" 

111 id = 'id' 

112 default_report_fields = [id, name] 

113 urn_component = "domain-mapping" 

114 

115 @staticmethod 

116 def get(client, resource_info): 

117 apps_id, mapping_id = re.match('apps/(.*?)/domainMappings/(.*)', 

118 resource_info['resourceName']).groups() 

119 return client.execute_query('get', {'appsId': apps_id, 

120 'domainMappingsId': mapping_id}) 

121 

122 

123@resources.register('app-engine-firewall-ingress-rule') 

124class AppEngineFirewallIngressRule(ChildResourceManager): 

125 """GCP resource: 

126 https://cloud.google.com/appengine/docs/admin-api/reference/rest/v1/apps.firewall.ingressRules 

127 """ 

128 def _get_parent_resource_info(self, child_instance): 

129 return {'resourceName': 'apps/%s' % 

130 local_session(self.session_factory).get_default_project()} 

131 

132 class resource_type(AppEngineChildTypeInfo): 

133 component = 'apps.firewall.ingressRules' 

134 enum_spec = ('list', 'ingressRules[]', None) 

135 name = id = 'priority' 

136 default_report_fields = ['priority', 'action', 'sourceRange', 'description'] 

137 urn_component = "firewall-ingress-rule" 

138 

139 @staticmethod 

140 def get(client, resource_info): 

141 apps_id, ingress_rules_id = re.match('apps/(.*?)/firewall/ingressRules/(.*)', 

142 resource_info['resourceName']).groups() 

143 return client.execute_query( 

144 'get', {'appsId': apps_id, 

145 'ingressRulesId': ingress_rules_id}) 

146 

147 

148 

149@resources.register('app-engine-service') 

150class AppEngineService(ChildResourceManager): 

151 """GCP resource: 

152 https://cloud.google.com/appengine/docs/admin-api/reference/rest/v1/apps.services 

153 """ 

154 def _get_parent_resource_info(self, child_instance): 

155 return {'resourceName': re.match( 

156 '(apps/.*?)/services/.*', child_instance['name']).group(1)} 

157 

158 class resource_type(AppEngineChildTypeInfo): 

159 component = 'apps.services' 

160 enum_spec = ('list', 'services[]', None) 

161 name = 'name' 

162 id = 'id' 

163 default_report_fields = ['name', 'networkSettings'] 

164 urn_component = "service" 

165 asset_type = "appengine.googleapis.com/Service" 

166 

167 @staticmethod 

168 def get(client, resource_info): 

169 apps_id, service_id = re.match('apps/(.*?)/services/(.*)', 

170 resource_info['resourceName']).groups() 

171 return client.execute_query('get', {'appsId': apps_id, 

172 'servicesId': service_id}) 

173 

174 

175@resources.register('app-engine-service-version') 

176class AppEngineServiceVersion(ChildResourceManager): 

177 """GCP Resource 

178 https://cloud.google.com/appengine/docs/admin-api/reference/rest/v1/apps.services.versions 

179 """ 

180 

181 class resource_type(AppEngineChildTypeInfo): 

182 component = 'apps.services.versions' 

183 name = 'name' 

184 id = 'id' 

185 enum_spec = ('list', 'versions[]', None) 

186 default_report_fields = ['name', 'instanceClass', 'runtime', 'runtimeChannel', 'vm'] 

187 urn_component = "versions" 

188 asset_type = "appengine.googleapis.com/Version" 

189 parent_spec = { 

190 'resource': 'app-engine-service', 

191 'child_enum_params': [ 

192 ('id', 'servicesId'), 

193 ('name', 'appsId', 'regex', r'/(.*?)/') 

194 ] 

195 }