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/beta/'
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  MACHINEIMAGES = (
241      'machineImages',
242      'projects/{project}/global/machineImages/{machineImage}',
243      {},
244      ['project', 'machineImage'],
245      True
246  )
247  MACHINETYPES = (
248      'machineTypes',
249      'projects/{project}/zones/{zone}/machineTypes/{machineType}',
250      {},
251      ['project', 'zone', 'machineType'],
252      True
253  )
254  NETWORKENDPOINTGROUPS = (
255      'networkEndpointGroups',
256      'projects/{project}/zones/{zone}/networkEndpointGroups/'
257      '{networkEndpointGroup}',
258      {},
259      ['project', 'zone', 'networkEndpointGroup'],
260      True
261  )
262  NETWORKS = (
263      'networks',
264      'projects/{project}/global/networks/{network}',
265      {},
266      ['project', 'network'],
267      True
268  )
269  NEXTHOPGATEWAYS = (
270      'nextHopGateways',
271      'projects/{project}/global/gateways/{nextHopGateway}',
272      {},
273      ['project', 'nextHopGateway'],
274      True
275  )
276  NODEGROUPS = (
277      'nodeGroups',
278      'projects/{project}/zones/{zone}/nodeGroups/{nodeGroup}',
279      {},
280      ['project', 'zone', 'nodeGroup'],
281      True
282  )
283  NODETEMPLATES = (
284      'nodeTemplates',
285      'projects/{project}/regions/{region}/nodeTemplates/{nodeTemplate}',
286      {},
287      ['project', 'region', 'nodeTemplate'],
288      True
289  )
290  NODETYPES = (
291      'nodeTypes',
292      'projects/{project}/zones/{zone}/nodeTypes/{nodeType}',
293      {},
294      ['project', 'zone', 'nodeType'],
295      True
296  )
297  ORGANIZATIONSECURITYPOLICIES = (
298      'organizationSecurityPolicies',
299      'locations/global/securityPolicies/{securityPolicy}',
300      {},
301      ['securityPolicy'],
302      True
303  )
304  PACKETMIRRORINGS = (
305      'packetMirrorings',
306      'projects/{project}/regions/{region}/packetMirrorings/{packetMirroring}',
307      {},
308      ['project', 'region', 'packetMirroring'],
309      True
310  )
311  PROJECTS = (
312      'projects',
313      'projects/{project}',
314      {},
315      ['project'],
316      True
317  )
318  PUBLICADVERTISEDPREFIXES = (
319      'publicAdvertisedPrefixes',
320      'projects/{project}/global/publicAdvertisedPrefixes/'
321      '{publicAdvertisedPrefix}',
322      {},
323      ['project', 'publicAdvertisedPrefix'],
324      True
325  )
326  PUBLICDELEGATEDPREFIXES = (
327      'publicDelegatedPrefixes',
328      'projects/{project}/regions/{region}/publicDelegatedPrefixes/'
329      '{publicDelegatedPrefix}',
330      {},
331      ['project', 'region', 'publicDelegatedPrefix'],
332      True
333  )
334  REGIONACCELERATORTYPES = (
335      'regionAcceleratorTypes',
336      'projects/{project}/regions/{region}/acceleratorTypes/{acceleratorType}',
337      {},
338      ['project', 'region', 'acceleratorType'],
339      True
340  )
341  REGIONAUTOSCALERS = (
342      'regionAutoscalers',
343      'projects/{project}/regions/{region}/autoscalers/{autoscaler}',
344      {},
345      ['project', 'region', 'autoscaler'],
346      True
347  )
348  REGIONBACKENDSERVICES = (
349      'regionBackendServices',
350      'projects/{project}/regions/{region}/backendServices/{backendService}',
351      {},
352      ['project', 'region', 'backendService'],
353      True
354  )
355  REGIONCOMMITMENTS = (
356      'regionCommitments',
357      'projects/{project}/regions/{region}/commitments/{commitment}',
358      {},
359      ['project', 'region', 'commitment'],
360      True
361  )
362  REGIONDISKTYPES = (
363      'regionDiskTypes',
364      'projects/{project}/regions/{region}/diskTypes/{diskType}',
365      {},
366      ['project', 'region', 'diskType'],
367      True
368  )
369  REGIONDISKS = (
370      'regionDisks',
371      'projects/{project}/regions/{region}/disks/{disk}',
372      {},
373      ['project', 'region', 'disk'],
374      True
375  )
376  REGIONHEALTHCHECKSERVICES = (
377      'regionHealthCheckServices',
378      'projects/{project}/regions/{region}/healthCheckServices/'
379      '{healthCheckService}',
380      {},
381      ['project', 'region', 'healthCheckService'],
382      True
383  )
384  REGIONHEALTHCHECKS = (
385      'regionHealthChecks',
386      'projects/{project}/regions/{region}/healthChecks/{healthCheck}',
387      {},
388      ['project', 'region', 'healthCheck'],
389      True
390  )
391  REGIONINSTANCEGROUPMANAGERS = (
392      'regionInstanceGroupManagers',
393      'projects/{project}/regions/{region}/instanceGroupManagers/'
394      '{instanceGroupManager}',
395      {},
396      ['project', 'region', 'instanceGroupManager'],
397      True
398  )
399  REGIONINSTANCEGROUPS = (
400      'regionInstanceGroups',
401      'projects/{project}/regions/{region}/instanceGroups/{instanceGroup}',
402      {},
403      ['project', 'region', 'instanceGroup'],
404      True
405  )
406  REGIONNETWORKENDPOINTGROUPS = (
407      'regionNetworkEndpointGroups',
408      'projects/{project}/regions/{region}/networkEndpointGroups/'
409      '{networkEndpointGroup}',
410      {},
411      ['project', 'region', 'networkEndpointGroup'],
412      True
413  )
414  REGIONNOTIFICATIONENDPOINTS = (
415      'regionNotificationEndpoints',
416      'projects/{project}/regions/{region}/notificationEndpoints/'
417      '{notificationEndpoint}',
418      {},
419      ['project', 'region', 'notificationEndpoint'],
420      True
421  )
422  REGIONOPERATIONS = (
423      'regionOperations',
424      'projects/{project}/regions/{region}/operations/{operation}',
425      {},
426      ['project', 'region', 'operation'],
427      True
428  )
429  REGIONSSLCERTIFICATES = (
430      'regionSslCertificates',
431      'projects/{project}/regions/{region}/sslCertificates/{sslCertificate}',
432      {},
433      ['project', 'region', 'sslCertificate'],
434      True
435  )
436  REGIONTARGETHTTPPROXIES = (
437      'regionTargetHttpProxies',
438      'projects/{project}/regions/{region}/targetHttpProxies/'
439      '{targetHttpProxy}',
440      {},
441      ['project', 'region', 'targetHttpProxy'],
442      True
443  )
444  REGIONTARGETHTTPSPROXIES = (
445      'regionTargetHttpsProxies',
446      'projects/{project}/regions/{region}/targetHttpsProxies/'
447      '{targetHttpsProxy}',
448      {},
449      ['project', 'region', 'targetHttpsProxy'],
450      True
451  )
452  REGIONURLMAPS = (
453      'regionUrlMaps',
454      'projects/{project}/regions/{region}/urlMaps/{urlMap}',
455      {},
456      ['project', 'region', 'urlMap'],
457      True
458  )
459  REGIONS = (
460      'regions',
461      'projects/{project}/regions/{region}',
462      {},
463      ['project', 'region'],
464      True
465  )
466  RESERVATIONS = (
467      'reservations',
468      'projects/{project}/zones/{zone}/reservations/{reservation}',
469      {},
470      ['project', 'zone', 'reservation'],
471      True
472  )
473  RESOURCEPOLICIES = (
474      'resourcePolicies',
475      'projects/{project}/regions/{region}/resourcePolicies/{resourcePolicy}',
476      {},
477      ['project', 'region', 'resourcePolicy'],
478      True
479  )
480  ROUTERS = (
481      'routers',
482      'projects/{project}/regions/{region}/routers/{router}',
483      {},
484      ['project', 'region', 'router'],
485      True
486  )
487  ROUTES = (
488      'routes',
489      'projects/{project}/global/routes/{route}',
490      {},
491      ['project', 'route'],
492      True
493  )
494  SECURITYPOLICIES = (
495      'securityPolicies',
496      'projects/{project}/global/securityPolicies/{securityPolicy}',
497      {},
498      ['project', 'securityPolicy'],
499      True
500  )
501  SECURITYPOLICYRULES = (
502      'securityPolicyRules',
503      'projects/{project}/global/securityPolicies/{securityPolicy}/'
504      'securityPolicyRules/{securityPolicyRule}',
505      {},
506      ['project', 'securityPolicy', 'securityPolicyRule'],
507      True
508  )
509  SERVICEATTACHMENTS = (
510      'serviceAttachments',
511      'projects/{project}/regions/{region}/serviceAttachments/'
512      '{serviceAttachment}',
513      {},
514      ['project', 'region', 'serviceAttachment'],
515      True
516  )
517  SNAPSHOTS = (
518      'snapshots',
519      'projects/{project}/global/snapshots/{snapshot}',
520      {},
521      ['project', 'snapshot'],
522      True
523  )
524  SSLCERTIFICATES = (
525      'sslCertificates',
526      'projects/{project}/global/sslCertificates/{sslCertificate}',
527      {},
528      ['project', 'sslCertificate'],
529      True
530  )
531  SSLPOLICIES = (
532      'sslPolicies',
533      'projects/{project}/global/sslPolicies/{sslPolicy}',
534      {},
535      ['project', 'sslPolicy'],
536      True
537  )
538  SUBNETWORKS = (
539      'subnetworks',
540      'projects/{project}/regions/{region}/subnetworks/{subnetwork}',
541      {},
542      ['project', 'region', 'subnetwork'],
543      True
544  )
545  TARGETGRPCPROXIES = (
546      'targetGrpcProxies',
547      'projects/{project}/global/targetGrpcProxies/{targetGrpcProxy}',
548      {},
549      ['project', 'targetGrpcProxy'],
550      True
551  )
552  TARGETHTTPPROXIES = (
553      'targetHttpProxies',
554      'projects/{project}/global/targetHttpProxies/{targetHttpProxy}',
555      {},
556      ['project', 'targetHttpProxy'],
557      True
558  )
559  TARGETHTTPSPROXIES = (
560      'targetHttpsProxies',
561      'projects/{project}/global/targetHttpsProxies/{targetHttpsProxy}',
562      {},
563      ['project', 'targetHttpsProxy'],
564      True
565  )
566  TARGETINSTANCES = (
567      'targetInstances',
568      'projects/{project}/zones/{zone}/targetInstances/{targetInstance}',
569      {},
570      ['project', 'zone', 'targetInstance'],
571      True
572  )
573  TARGETPOOLS = (
574      'targetPools',
575      'projects/{project}/regions/{region}/targetPools/{targetPool}',
576      {},
577      ['project', 'region', 'targetPool'],
578      True
579  )
580  TARGETSSLPROXIES = (
581      'targetSslProxies',
582      'projects/{project}/global/targetSslProxies/{targetSslProxy}',
583      {},
584      ['project', 'targetSslProxy'],
585      True
586  )
587  TARGETTCPPROXIES = (
588      'targetTcpProxies',
589      'projects/{project}/global/targetTcpProxies/{targetTcpProxy}',
590      {},
591      ['project', 'targetTcpProxy'],
592      True
593  )
594  TARGETVPNGATEWAYS = (
595      'targetVpnGateways',
596      'projects/{project}/regions/{region}/targetVpnGateways/'
597      '{targetVpnGateway}',
598      {},
599      ['project', 'region', 'targetVpnGateway'],
600      True
601  )
602  URLMAPS = (
603      'urlMaps',
604      'projects/{project}/global/urlMaps/{urlMap}',
605      {},
606      ['project', 'urlMap'],
607      True
608  )
609  VPNGATEWAYS = (
610      'vpnGateways',
611      'projects/{project}/regions/{region}/vpnGateways/{vpnGateway}',
612      {},
613      ['project', 'region', 'vpnGateway'],
614      True
615  )
616  VPNTUNNELS = (
617      'vpnTunnels',
618      'projects/{project}/regions/{region}/vpnTunnels/{vpnTunnel}',
619      {},
620      ['project', 'region', 'vpnTunnel'],
621      True
622  )
623  ZONEOPERATIONS = (
624      'zoneOperations',
625      'projects/{project}/zones/{zone}/operations/{operation}',
626      {},
627      ['project', 'zone', 'operation'],
628      True
629  )
630  ZONES = (
631      'zones',
632      'projects/{project}/zones/{zone}',
633      {},
634      ['project', 'zone'],
635      True
636  )
637
638  def __init__(self, collection_name, path, flat_paths, params,
639               enable_uri_parsing):
640    self.collection_name = collection_name
641    self.path = path
642    self.flat_paths = flat_paths
643    self.params = params
644    self.enable_uri_parsing = enable_uri_parsing
645