1# -*- coding: utf-8 -*- #
2# Copyright 2015 Google LLC. All Rights Reserved.
3#
4# Licensed under the Apache License, Version 2.0 (the "License");
5# you may not use this file except in compliance with the License.
6# You may obtain a copy of the License at
7#
8#    http://www.apache.org/licenses/LICENSE-2.0
9#
10# Unless required by applicable law or agreed to in writing, software
11# distributed under the License is distributed on an "AS IS" BASIS,
12# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13# See the License for the specific language governing permissions and
14# limitations under the License.
15"""Resource definitions for cloud platform apis."""
16
17import enum
18
19
20BASE_URL = 'https://compute.googleapis.com/compute/v1/'
21DOCS_URL = 'https://developers.google.com/compute/docs/reference/latest/'
22
23
24class Collections(enum.Enum):
25  """Collections for all supported apis."""
26
27  ACCELERATORTYPES = (
28      'acceleratorTypes',
29      'projects/{project}/zones/{zone}/acceleratorTypes/{acceleratorType}',
30      {},
31      ['project', 'zone', 'acceleratorType'],
32      True
33  )
34  ADDRESSES = (
35      'addresses',
36      'projects/{project}/regions/{region}/addresses/{address}',
37      {},
38      ['project', 'region', 'address'],
39      True
40  )
41  AUTOSCALERS = (
42      'autoscalers',
43      'projects/{project}/zones/{zone}/autoscalers/{autoscaler}',
44      {},
45      ['project', 'zone', 'autoscaler'],
46      True
47  )
48  BACKENDBUCKETS = (
49      'backendBuckets',
50      'projects/{project}/global/backendBuckets/{backendBucket}',
51      {},
52      ['project', 'backendBucket'],
53      True
54  )
55  BACKENDSERVICES = (
56      'backendServices',
57      'projects/{project}/global/backendServices/{backendService}',
58      {},
59      ['project', 'backendService'],
60      True
61  )
62  DISKTYPES = (
63      'diskTypes',
64      'projects/{project}/zones/{zone}/diskTypes/{diskType}',
65      {},
66      ['project', 'zone', 'diskType'],
67      True
68  )
69  DISKS = (
70      'disks',
71      'projects/{project}/zones/{zone}/disks/{disk}',
72      {},
73      ['project', 'zone', 'disk'],
74      True
75  )
76  EXTERNALVPNGATEWAYS = (
77      'externalVpnGateways',
78      'projects/{project}/global/externalVpnGateways/{externalVpnGateway}',
79      {},
80      ['project', 'externalVpnGateway'],
81      True
82  )
83  FIREWALLPOLICIES = (
84      'firewallPolicies',
85      'locations/global/firewallPolicies/{firewallPolicy}',
86      {},
87      ['firewallPolicy'],
88      True
89  )
90  FIREWALLS = (
91      'firewalls',
92      'projects/{project}/global/firewalls/{firewall}',
93      {},
94      ['project', 'firewall'],
95      True
96  )
97  FORWARDINGRULES = (
98      'forwardingRules',
99      'projects/{project}/regions/{region}/forwardingRules/{forwardingRule}',
100      {},
101      ['project', 'region', 'forwardingRule'],
102      True
103  )
104  GLOBALADDRESSES = (
105      'globalAddresses',
106      'projects/{project}/global/addresses/{address}',
107      {},
108      ['project', 'address'],
109      True
110  )
111  GLOBALFORWARDINGRULES = (
112      'globalForwardingRules',
113      'projects/{project}/global/forwardingRules/{forwardingRule}',
114      {},
115      ['project', 'forwardingRule'],
116      True
117  )
118  GLOBALNETWORKENDPOINTGROUPS = (
119      'globalNetworkEndpointGroups',
120      'projects/{project}/global/networkEndpointGroups/{networkEndpointGroup}',
121      {},
122      ['project', 'networkEndpointGroup'],
123      True
124  )
125  GLOBALOPERATIONS = (
126      'globalOperations',
127      'projects/{project}/global/operations/{operation}',
128      {},
129      ['project', 'operation'],
130      True
131  )
132  GLOBALORGANIZATIONOPERATIONS = (
133      'globalOrganizationOperations',
134      'locations/global/operations/{operation}',
135      {},
136      ['operation'],
137      True
138  )
139  GLOBALPUBLICDELEGATEDPREFIXES = (
140      'globalPublicDelegatedPrefixes',
141      'projects/{project}/global/publicDelegatedPrefixes/'
142      '{publicDelegatedPrefix}',
143      {},
144      ['project', 'publicDelegatedPrefix'],
145      True
146  )
147  HEALTHCHECKS = (
148      'healthChecks',
149      'projects/{project}/global/healthChecks/{healthCheck}',
150      {},
151      ['project', 'healthCheck'],
152      True
153  )
154  HTTPHEALTHCHECKS = (
155      'httpHealthChecks',
156      'projects/{project}/global/httpHealthChecks/{httpHealthCheck}',
157      {},
158      ['project', 'httpHealthCheck'],
159      True
160  )
161  HTTPSHEALTHCHECKS = (
162      'httpsHealthChecks',
163      'projects/{project}/global/httpsHealthChecks/{httpsHealthCheck}',
164      {},
165      ['project', 'httpsHealthCheck'],
166      True
167  )
168  IMAGES = (
169      'images',
170      'projects/{project}/global/images/{image}',
171      {},
172      ['project', 'image'],
173      True
174  )
175  INSTANCEGROUPMANAGERS = (
176      'instanceGroupManagers',
177      'projects/{project}/zones/{zone}/instanceGroupManagers/'
178      '{instanceGroupManager}',
179      {},
180      ['project', 'zone', 'instanceGroupManager'],
181      True
182  )
183  INSTANCEGROUPS = (
184      'instanceGroups',
185      'projects/{project}/zones/{zone}/instanceGroups/{instanceGroup}',
186      {},
187      ['project', 'zone', 'instanceGroup'],
188      True
189  )
190  INSTANCETEMPLATES = (
191      'instanceTemplates',
192      'projects/{project}/global/instanceTemplates/{instanceTemplate}',
193      {},
194      ['project', 'instanceTemplate'],
195      True
196  )
197  INSTANCES = (
198      'instances',
199      'projects/{project}/zones/{zone}/instances/{instance}',
200      {},
201      ['project', 'zone', 'instance'],
202      True
203  )
204  INTERCONNECTATTACHMENTS = (
205      'interconnectAttachments',
206      'projects/{project}/regions/{region}/interconnectAttachments/'
207      '{interconnectAttachment}',
208      {},
209      ['project', 'region', 'interconnectAttachment'],
210      True
211  )
212  INTERCONNECTLOCATIONS = (
213      'interconnectLocations',
214      'projects/{project}/global/interconnectLocations/{interconnectLocation}',
215      {},
216      ['project', 'interconnectLocation'],
217      True
218  )
219  INTERCONNECTS = (
220      'interconnects',
221      'projects/{project}/global/interconnects/{interconnect}',
222      {},
223      ['project', 'interconnect'],
224      True
225  )
226  LICENSECODES = (
227      'licenseCodes',
228      'projects/{project}/global/licenseCodes/{licenseCode}',
229      {},
230      ['project', 'licenseCode'],
231      True
232  )
233  LICENSES = (
234      'licenses',
235      'projects/{project}/global/licenses/{license}',
236      {},
237      ['project', 'license'],
238      True
239  )
240  MACHINETYPES = (
241      'machineTypes',
242      'projects/{project}/zones/{zone}/machineTypes/{machineType}',
243      {},
244      ['project', 'zone', 'machineType'],
245      True
246  )
247  NETWORKENDPOINTGROUPS = (
248      'networkEndpointGroups',
249      'projects/{project}/zones/{zone}/networkEndpointGroups/'
250      '{networkEndpointGroup}',
251      {},
252      ['project', 'zone', 'networkEndpointGroup'],
253      True
254  )
255  NETWORKS = (
256      'networks',
257      'projects/{project}/global/networks/{network}',
258      {},
259      ['project', 'network'],
260      True
261  )
262  NEXTHOPGATEWAYS = (
263      'nextHopGateways',
264      'projects/{project}/global/gateways/{nextHopGateway}',
265      {},
266      ['project', 'nextHopGateway'],
267      True
268  )
269  NODEGROUPS = (
270      'nodeGroups',
271      'projects/{project}/zones/{zone}/nodeGroups/{nodeGroup}',
272      {},
273      ['project', 'zone', 'nodeGroup'],
274      True
275  )
276  NODETEMPLATES = (
277      'nodeTemplates',
278      'projects/{project}/regions/{region}/nodeTemplates/{nodeTemplate}',
279      {},
280      ['project', 'region', 'nodeTemplate'],
281      True
282  )
283  NODETYPES = (
284      'nodeTypes',
285      'projects/{project}/zones/{zone}/nodeTypes/{nodeType}',
286      {},
287      ['project', 'zone', 'nodeType'],
288      True
289  )
290  PACKETMIRRORINGS = (
291      'packetMirrorings',
292      'projects/{project}/regions/{region}/packetMirrorings/{packetMirroring}',
293      {},
294      ['project', 'region', 'packetMirroring'],
295      True
296  )
297  PROJECTS = (
298      'projects',
299      'projects/{project}',
300      {},
301      ['project'],
302      True
303  )
304  PUBLICADVERTISEDPREFIXES = (
305      'publicAdvertisedPrefixes',
306      'projects/{project}/global/publicAdvertisedPrefixes/'
307      '{publicAdvertisedPrefix}',
308      {},
309      ['project', 'publicAdvertisedPrefix'],
310      True
311  )
312  PUBLICDELEGATEDPREFIXES = (
313      'publicDelegatedPrefixes',
314      'projects/{project}/regions/{region}/publicDelegatedPrefixes/'
315      '{publicDelegatedPrefix}',
316      {},
317      ['project', 'region', 'publicDelegatedPrefix'],
318      True
319  )
320  REGIONAUTOSCALERS = (
321      'regionAutoscalers',
322      'projects/{project}/regions/{region}/autoscalers/{autoscaler}',
323      {},
324      ['project', 'region', 'autoscaler'],
325      True
326  )
327  REGIONBACKENDSERVICES = (
328      'regionBackendServices',
329      'projects/{project}/regions/{region}/backendServices/{backendService}',
330      {},
331      ['project', 'region', 'backendService'],
332      True
333  )
334  REGIONCOMMITMENTS = (
335      'regionCommitments',
336      'projects/{project}/regions/{region}/commitments/{commitment}',
337      {},
338      ['project', 'region', 'commitment'],
339      True
340  )
341  REGIONDISKTYPES = (
342      'regionDiskTypes',
343      'projects/{project}/regions/{region}/diskTypes/{diskType}',
344      {},
345      ['project', 'region', 'diskType'],
346      True
347  )
348  REGIONDISKS = (
349      'regionDisks',
350      'projects/{project}/regions/{region}/disks/{disk}',
351      {},
352      ['project', 'region', 'disk'],
353      True
354  )
355  REGIONHEALTHCHECKSERVICES = (
356      'regionHealthCheckServices',
357      'projects/{project}/regions/{region}/healthCheckServices/'
358      '{healthCheckService}',
359      {},
360      ['project', 'region', 'healthCheckService'],
361      True
362  )
363  REGIONHEALTHCHECKS = (
364      'regionHealthChecks',
365      'projects/{project}/regions/{region}/healthChecks/{healthCheck}',
366      {},
367      ['project', 'region', 'healthCheck'],
368      True
369  )
370  REGIONINSTANCEGROUPMANAGERS = (
371      'regionInstanceGroupManagers',
372      'projects/{project}/regions/{region}/instanceGroupManagers/'
373      '{instanceGroupManager}',
374      {},
375      ['project', 'region', 'instanceGroupManager'],
376      True
377  )
378  REGIONINSTANCEGROUPS = (
379      'regionInstanceGroups',
380      'projects/{project}/regions/{region}/instanceGroups/{instanceGroup}',
381      {},
382      ['project', 'region', 'instanceGroup'],
383      True
384  )
385  REGIONNETWORKENDPOINTGROUPS = (
386      'regionNetworkEndpointGroups',
387      'projects/{project}/regions/{region}/networkEndpointGroups/'
388      '{networkEndpointGroup}',
389      {},
390      ['project', 'region', 'networkEndpointGroup'],
391      True
392  )
393  REGIONNOTIFICATIONENDPOINTS = (
394      'regionNotificationEndpoints',
395      'projects/{project}/regions/{region}/notificationEndpoints/'
396      '{notificationEndpoint}',
397      {},
398      ['project', 'region', 'notificationEndpoint'],
399      True
400  )
401  REGIONOPERATIONS = (
402      'regionOperations',
403      'projects/{project}/regions/{region}/operations/{operation}',
404      {},
405      ['project', 'region', 'operation'],
406      True
407  )
408  REGIONSSLCERTIFICATES = (
409      'regionSslCertificates',
410      'projects/{project}/regions/{region}/sslCertificates/{sslCertificate}',
411      {},
412      ['project', 'region', 'sslCertificate'],
413      True
414  )
415  REGIONTARGETHTTPPROXIES = (
416      'regionTargetHttpProxies',
417      'projects/{project}/regions/{region}/targetHttpProxies/'
418      '{targetHttpProxy}',
419      {},
420      ['project', 'region', 'targetHttpProxy'],
421      True
422  )
423  REGIONTARGETHTTPSPROXIES = (
424      'regionTargetHttpsProxies',
425      'projects/{project}/regions/{region}/targetHttpsProxies/'
426      '{targetHttpsProxy}',
427      {},
428      ['project', 'region', 'targetHttpsProxy'],
429      True
430  )
431  REGIONURLMAPS = (
432      'regionUrlMaps',
433      'projects/{project}/regions/{region}/urlMaps/{urlMap}',
434      {},
435      ['project', 'region', 'urlMap'],
436      True
437  )
438  REGIONS = (
439      'regions',
440      'projects/{project}/regions/{region}',
441      {},
442      ['project', 'region'],
443      True
444  )
445  RESERVATIONS = (
446      'reservations',
447      'projects/{project}/zones/{zone}/reservations/{reservation}',
448      {},
449      ['project', 'zone', 'reservation'],
450      True
451  )
452  RESOURCEPOLICIES = (
453      'resourcePolicies',
454      'projects/{project}/regions/{region}/resourcePolicies/{resourcePolicy}',
455      {},
456      ['project', 'region', 'resourcePolicy'],
457      True
458  )
459  ROUTERS = (
460      'routers',
461      'projects/{project}/regions/{region}/routers/{router}',
462      {},
463      ['project', 'region', 'router'],
464      True
465  )
466  ROUTES = (
467      'routes',
468      'projects/{project}/global/routes/{route}',
469      {},
470      ['project', 'route'],
471      True
472  )
473  SECURITYPOLICIES = (
474      'securityPolicies',
475      'projects/{project}/global/securityPolicies/{securityPolicy}',
476      {},
477      ['project', 'securityPolicy'],
478      True
479  )
480  SECURITYPOLICYRULES = (
481      'securityPolicyRules',
482      'projects/{project}/global/securityPolicies/{securityPolicy}/'
483      'securityPolicyRules/{securityPolicyRule}',
484      {},
485      ['project', 'securityPolicy', 'securityPolicyRule'],
486      True
487  )
488  SERVICEATTACHMENTS = (
489      'serviceAttachments',
490      'projects/{project}/regions/{region}/serviceAttachments/'
491      '{serviceAttachment}',
492      {},
493      ['project', 'region', 'serviceAttachment'],
494      True
495  )
496  SNAPSHOTS = (
497      'snapshots',
498      'projects/{project}/global/snapshots/{snapshot}',
499      {},
500      ['project', 'snapshot'],
501      True
502  )
503  SSLCERTIFICATES = (
504      'sslCertificates',
505      'projects/{project}/global/sslCertificates/{sslCertificate}',
506      {},
507      ['project', 'sslCertificate'],
508      True
509  )
510  SSLPOLICIES = (
511      'sslPolicies',
512      'projects/{project}/global/sslPolicies/{sslPolicy}',
513      {},
514      ['project', 'sslPolicy'],
515      True
516  )
517  SUBNETWORKS = (
518      'subnetworks',
519      'projects/{project}/regions/{region}/subnetworks/{subnetwork}',
520      {},
521      ['project', 'region', 'subnetwork'],
522      True
523  )
524  TARGETGRPCPROXIES = (
525      'targetGrpcProxies',
526      'projects/{project}/global/targetGrpcProxies/{targetGrpcProxy}',
527      {},
528      ['project', 'targetGrpcProxy'],
529      True
530  )
531  TARGETHTTPPROXIES = (
532      'targetHttpProxies',
533      'projects/{project}/global/targetHttpProxies/{targetHttpProxy}',
534      {},
535      ['project', 'targetHttpProxy'],
536      True
537  )
538  TARGETHTTPSPROXIES = (
539      'targetHttpsProxies',
540      'projects/{project}/global/targetHttpsProxies/{targetHttpsProxy}',
541      {},
542      ['project', 'targetHttpsProxy'],
543      True
544  )
545  TARGETINSTANCES = (
546      'targetInstances',
547      'projects/{project}/zones/{zone}/targetInstances/{targetInstance}',
548      {},
549      ['project', 'zone', 'targetInstance'],
550      True
551  )
552  TARGETPOOLS = (
553      'targetPools',
554      'projects/{project}/regions/{region}/targetPools/{targetPool}',
555      {},
556      ['project', 'region', 'targetPool'],
557      True
558  )
559  TARGETSSLPROXIES = (
560      'targetSslProxies',
561      'projects/{project}/global/targetSslProxies/{targetSslProxy}',
562      {},
563      ['project', 'targetSslProxy'],
564      True
565  )
566  TARGETTCPPROXIES = (
567      'targetTcpProxies',
568      'projects/{project}/global/targetTcpProxies/{targetTcpProxy}',
569      {},
570      ['project', 'targetTcpProxy'],
571      True
572  )
573  TARGETVPNGATEWAYS = (
574      'targetVpnGateways',
575      'projects/{project}/regions/{region}/targetVpnGateways/'
576      '{targetVpnGateway}',
577      {},
578      ['project', 'region', 'targetVpnGateway'],
579      True
580  )
581  URLMAPS = (
582      'urlMaps',
583      'projects/{project}/global/urlMaps/{urlMap}',
584      {},
585      ['project', 'urlMap'],
586      True
587  )
588  VPNGATEWAYS = (
589      'vpnGateways',
590      'projects/{project}/regions/{region}/vpnGateways/{vpnGateway}',
591      {},
592      ['project', 'region', 'vpnGateway'],
593      True
594  )
595  VPNTUNNELS = (
596      'vpnTunnels',
597      'projects/{project}/regions/{region}/vpnTunnels/{vpnTunnel}',
598      {},
599      ['project', 'region', 'vpnTunnel'],
600      True
601  )
602  ZONEOPERATIONS = (
603      'zoneOperations',
604      'projects/{project}/zones/{zone}/operations/{operation}',
605      {},
606      ['project', 'zone', 'operation'],
607      True
608  )
609  ZONES = (
610      'zones',
611      'projects/{project}/zones/{zone}',
612      {},
613      ['project', 'zone'],
614      True
615  )
616
617  def __init__(self, collection_name, path, flat_paths, params,
618               enable_uri_parsing):
619    self.collection_name = collection_name
620    self.path = path
621    self.flat_paths = flat_paths
622    self.params = params
623    self.enable_uri_parsing = enable_uri_parsing
624