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/alpha/'
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  IMAGEFAMILYVIEWS = (
169      'imageFamilyViews',
170      'projects/{project}/zones/{zone}/imageFamilyViews/{family}',
171      {},
172      ['project', 'zone', 'family'],
173      True
174  )
175  IMAGES = (
176      'images',
177      'projects/{project}/global/images/{image}',
178      {},
179      ['project', 'image'],
180      True
181  )
182  INSTANCEGROUPMANAGERS = (
183      'instanceGroupManagers',
184      'projects/{project}/zones/{zone}/instanceGroupManagers/'
185      '{instanceGroupManager}',
186      {},
187      ['project', 'zone', 'instanceGroupManager'],
188      True
189  )
190  INSTANCEGROUPS = (
191      'instanceGroups',
192      'projects/{project}/zones/{zone}/instanceGroups/{instanceGroup}',
193      {},
194      ['project', 'zone', 'instanceGroup'],
195      True
196  )
197  INSTANCETEMPLATES = (
198      'instanceTemplates',
199      'projects/{project}/global/instanceTemplates/{instanceTemplate}',
200      {},
201      ['project', 'instanceTemplate'],
202      True
203  )
204  INSTANCES = (
205      'instances',
206      'projects/{project}/zones/{zone}/instances/{instance}',
207      {},
208      ['project', 'zone', 'instance'],
209      True
210  )
211  INTERCONNECTATTACHMENTS = (
212      'interconnectAttachments',
213      'projects/{project}/regions/{region}/interconnectAttachments/'
214      '{interconnectAttachment}',
215      {},
216      ['project', 'region', 'interconnectAttachment'],
217      True
218  )
219  INTERCONNECTLOCATIONS = (
220      'interconnectLocations',
221      'projects/{project}/global/interconnectLocations/{interconnectLocation}',
222      {},
223      ['project', 'interconnectLocation'],
224      True
225  )
226  INTERCONNECTS = (
227      'interconnects',
228      'projects/{project}/global/interconnects/{interconnect}',
229      {},
230      ['project', 'interconnect'],
231      True
232  )
233  LICENSECODES = (
234      'licenseCodes',
235      'projects/{project}/global/licenseCodes/{licenseCode}',
236      {},
237      ['project', 'licenseCode'],
238      True
239  )
240  LICENSES = (
241      'licenses',
242      'projects/{project}/global/licenses/{license}',
243      {},
244      ['project', 'license'],
245      True
246  )
247  MACHINEIMAGES = (
248      'machineImages',
249      'projects/{project}/global/machineImages/{machineImage}',
250      {},
251      ['project', 'machineImage'],
252      True
253  )
254  MACHINETYPES = (
255      'machineTypes',
256      'projects/{project}/zones/{zone}/machineTypes/{machineType}',
257      {},
258      ['project', 'zone', 'machineType'],
259      True
260  )
261  NETWORKENDPOINTGROUPS = (
262      'networkEndpointGroups',
263      'projects/{project}/zones/{zone}/networkEndpointGroups/'
264      '{networkEndpointGroup}',
265      {},
266      ['project', 'zone', 'networkEndpointGroup'],
267      True
268  )
269  NETWORKFIREWALLPOLICIES = (
270      'networkFirewallPolicies',
271      'projects/{project}/global/firewallPolicies/{firewallPolicy}',
272      {},
273      ['project', 'firewallPolicy'],
274      True
275  )
276  NETWORKS = (
277      'networks',
278      'projects/{project}/global/networks/{network}',
279      {},
280      ['project', 'network'],
281      True
282  )
283  NEXTHOPGATEWAYS = (
284      'nextHopGateways',
285      'projects/{project}/global/gateways/{nextHopGateway}',
286      {},
287      ['project', 'nextHopGateway'],
288      True
289  )
290  NODEGROUPS = (
291      'nodeGroups',
292      'projects/{project}/zones/{zone}/nodeGroups/{nodeGroup}',
293      {},
294      ['project', 'zone', 'nodeGroup'],
295      True
296  )
297  NODETEMPLATES = (
298      'nodeTemplates',
299      'projects/{project}/regions/{region}/nodeTemplates/{nodeTemplate}',
300      {},
301      ['project', 'region', 'nodeTemplate'],
302      True
303  )
304  NODETYPES = (
305      'nodeTypes',
306      'projects/{project}/zones/{zone}/nodeTypes/{nodeType}',
307      {},
308      ['project', 'zone', 'nodeType'],
309      True
310  )
311  ORGANIZATIONSECURITYPOLICIES = (
312      'organizationSecurityPolicies',
313      'locations/global/securityPolicies/{securityPolicy}',
314      {},
315      ['securityPolicy'],
316      True
317  )
318  PACKETMIRRORINGS = (
319      'packetMirrorings',
320      'projects/{project}/regions/{region}/packetMirrorings/{packetMirroring}',
321      {},
322      ['project', 'region', 'packetMirroring'],
323      True
324  )
325  PROJECTS = (
326      'projects',
327      'projects/{project}',
328      {},
329      ['project'],
330      True
331  )
332  PUBLICADVERTISEDPREFIXES = (
333      'publicAdvertisedPrefixes',
334      'projects/{project}/global/publicAdvertisedPrefixes/'
335      '{publicAdvertisedPrefix}',
336      {},
337      ['project', 'publicAdvertisedPrefix'],
338      True
339  )
340  PUBLICDELEGATEDPREFIXES = (
341      'publicDelegatedPrefixes',
342      'projects/{project}/regions/{region}/publicDelegatedPrefixes/'
343      '{publicDelegatedPrefix}',
344      {},
345      ['project', 'region', 'publicDelegatedPrefix'],
346      True
347  )
348  REGIONACCELERATORTYPES = (
349      'regionAcceleratorTypes',
350      'projects/{project}/regions/{region}/acceleratorTypes/{acceleratorType}',
351      {},
352      ['project', 'region', 'acceleratorType'],
353      True
354  )
355  REGIONAUTOSCALERS = (
356      'regionAutoscalers',
357      'projects/{project}/regions/{region}/autoscalers/{autoscaler}',
358      {},
359      ['project', 'region', 'autoscaler'],
360      True
361  )
362  REGIONBACKENDSERVICES = (
363      'regionBackendServices',
364      'projects/{project}/regions/{region}/backendServices/{backendService}',
365      {},
366      ['project', 'region', 'backendService'],
367      True
368  )
369  REGIONCOMMITMENTS = (
370      'regionCommitments',
371      'projects/{project}/regions/{region}/commitments/{commitment}',
372      {},
373      ['project', 'region', 'commitment'],
374      True
375  )
376  REGIONDISKTYPES = (
377      'regionDiskTypes',
378      'projects/{project}/regions/{region}/diskTypes/{diskType}',
379      {},
380      ['project', 'region', 'diskType'],
381      True
382  )
383  REGIONDISKS = (
384      'regionDisks',
385      'projects/{project}/regions/{region}/disks/{disk}',
386      {},
387      ['project', 'region', 'disk'],
388      True
389  )
390  REGIONHEALTHCHECKSERVICES = (
391      'regionHealthCheckServices',
392      'projects/{project}/regions/{region}/healthCheckServices/'
393      '{healthCheckService}',
394      {},
395      ['project', 'region', 'healthCheckService'],
396      True
397  )
398  REGIONHEALTHCHECKS = (
399      'regionHealthChecks',
400      'projects/{project}/regions/{region}/healthChecks/{healthCheck}',
401      {},
402      ['project', 'region', 'healthCheck'],
403      True
404  )
405  REGIONINPLACESNAPSHOTS = (
406      'regionInPlaceSnapshots',
407      'projects/{project}/regions/{region}/inPlaceSnapshots/{inPlaceSnapshot}',
408      {},
409      ['project', 'region', 'inPlaceSnapshot'],
410      True
411  )
412  REGIONINSTANCEGROUPMANAGERS = (
413      'regionInstanceGroupManagers',
414      'projects/{project}/regions/{region}/instanceGroupManagers/'
415      '{instanceGroupManager}',
416      {},
417      ['project', 'region', 'instanceGroupManager'],
418      True
419  )
420  REGIONINSTANCEGROUPS = (
421      'regionInstanceGroups',
422      'projects/{project}/regions/{region}/instanceGroups/{instanceGroup}',
423      {},
424      ['project', 'region', 'instanceGroup'],
425      True
426  )
427  REGIONINSTANTSNAPSHOTS = (
428      'regionInstantSnapshots',
429      'projects/{project}/regions/{region}/instantSnapshots/{instantSnapshot}',
430      {},
431      ['project', 'region', 'instantSnapshot'],
432      True
433  )
434  REGIONMACHINETYPES = (
435      'regionMachineTypes',
436      'projects/{project}/regions/{region}/machineTypes/{machineType}',
437      {},
438      ['project', 'region', 'machineType'],
439      True
440  )
441  REGIONNETWORKENDPOINTGROUPS = (
442      'regionNetworkEndpointGroups',
443      'projects/{project}/regions/{region}/networkEndpointGroups/'
444      '{networkEndpointGroup}',
445      {},
446      ['project', 'region', 'networkEndpointGroup'],
447      True
448  )
449  REGIONNOTIFICATIONENDPOINTS = (
450      'regionNotificationEndpoints',
451      'projects/{project}/regions/{region}/notificationEndpoints/'
452      '{notificationEndpoint}',
453      {},
454      ['project', 'region', 'notificationEndpoint'],
455      True
456  )
457  REGIONOPERATIONS = (
458      'regionOperations',
459      'projects/{project}/regions/{region}/operations/{operation}',
460      {},
461      ['project', 'region', 'operation'],
462      True
463  )
464  REGIONSSLCERTIFICATES = (
465      'regionSslCertificates',
466      'projects/{project}/regions/{region}/sslCertificates/{sslCertificate}',
467      {},
468      ['project', 'region', 'sslCertificate'],
469      True
470  )
471  REGIONTARGETHTTPPROXIES = (
472      'regionTargetHttpProxies',
473      'projects/{project}/regions/{region}/targetHttpProxies/'
474      '{targetHttpProxy}',
475      {},
476      ['project', 'region', 'targetHttpProxy'],
477      True
478  )
479  REGIONTARGETHTTPSPROXIES = (
480      'regionTargetHttpsProxies',
481      'projects/{project}/regions/{region}/targetHttpsProxies/'
482      '{targetHttpsProxy}',
483      {},
484      ['project', 'region', 'targetHttpsProxy'],
485      True
486  )
487  REGIONURLMAPS = (
488      'regionUrlMaps',
489      'projects/{project}/regions/{region}/urlMaps/{urlMap}',
490      {},
491      ['project', 'region', 'urlMap'],
492      True
493  )
494  REGIONS = (
495      'regions',
496      'projects/{project}/regions/{region}',
497      {},
498      ['project', 'region'],
499      True
500  )
501  RESERVATIONS = (
502      'reservations',
503      'projects/{project}/zones/{zone}/reservations/{reservation}',
504      {},
505      ['project', 'zone', 'reservation'],
506      True
507  )
508  RESOURCEPOLICIES = (
509      'resourcePolicies',
510      'projects/{project}/regions/{region}/resourcePolicies/{resourcePolicy}',
511      {},
512      ['project', 'region', 'resourcePolicy'],
513      True
514  )
515  ROUTERS = (
516      'routers',
517      'projects/{project}/regions/{region}/routers/{router}',
518      {},
519      ['project', 'region', 'router'],
520      True
521  )
522  ROUTES = (
523      'routes',
524      'projects/{project}/global/routes/{route}',
525      {},
526      ['project', 'route'],
527      True
528  )
529  SECURITYPOLICIES = (
530      'securityPolicies',
531      'projects/{project}/global/securityPolicies/{securityPolicy}',
532      {},
533      ['project', 'securityPolicy'],
534      True
535  )
536  SECURITYPOLICYRULES = (
537      'securityPolicyRules',
538      'projects/{project}/global/securityPolicies/{securityPolicy}/'
539      'securityPolicyRules/{securityPolicyRule}',
540      {},
541      ['project', 'securityPolicy', 'securityPolicyRule'],
542      True
543  )
544  SERVICEATTACHMENTS = (
545      'serviceAttachments',
546      'projects/{project}/regions/{region}/serviceAttachments/'
547      '{serviceAttachment}',
548      {},
549      ['project', 'region', 'serviceAttachment'],
550      True
551  )
552  SNAPSHOTS = (
553      'snapshots',
554      'projects/{project}/global/snapshots/{snapshot}',
555      {},
556      ['project', 'snapshot'],
557      True
558  )
559  SSLCERTIFICATES = (
560      'sslCertificates',
561      'projects/{project}/global/sslCertificates/{sslCertificate}',
562      {},
563      ['project', 'sslCertificate'],
564      True
565  )
566  SSLPOLICIES = (
567      'sslPolicies',
568      'projects/{project}/global/sslPolicies/{sslPolicy}',
569      {},
570      ['project', 'sslPolicy'],
571      True
572  )
573  SUBNETWORKS = (
574      'subnetworks',
575      'projects/{project}/regions/{region}/subnetworks/{subnetwork}',
576      {},
577      ['project', 'region', 'subnetwork'],
578      True
579  )
580  TARGETGRPCPROXIES = (
581      'targetGrpcProxies',
582      'projects/{project}/global/targetGrpcProxies/{targetGrpcProxy}',
583      {},
584      ['project', 'targetGrpcProxy'],
585      True
586  )
587  TARGETHTTPPROXIES = (
588      'targetHttpProxies',
589      'projects/{project}/global/targetHttpProxies/{targetHttpProxy}',
590      {},
591      ['project', 'targetHttpProxy'],
592      True
593  )
594  TARGETHTTPSPROXIES = (
595      'targetHttpsProxies',
596      'projects/{project}/global/targetHttpsProxies/{targetHttpsProxy}',
597      {},
598      ['project', 'targetHttpsProxy'],
599      True
600  )
601  TARGETINSTANCES = (
602      'targetInstances',
603      'projects/{project}/zones/{zone}/targetInstances/{targetInstance}',
604      {},
605      ['project', 'zone', 'targetInstance'],
606      True
607  )
608  TARGETPOOLS = (
609      'targetPools',
610      'projects/{project}/regions/{region}/targetPools/{targetPool}',
611      {},
612      ['project', 'region', 'targetPool'],
613      True
614  )
615  TARGETSSLPROXIES = (
616      'targetSslProxies',
617      'projects/{project}/global/targetSslProxies/{targetSslProxy}',
618      {},
619      ['project', 'targetSslProxy'],
620      True
621  )
622  TARGETTCPPROXIES = (
623      'targetTcpProxies',
624      'projects/{project}/global/targetTcpProxies/{targetTcpProxy}',
625      {},
626      ['project', 'targetTcpProxy'],
627      True
628  )
629  TARGETVPNGATEWAYS = (
630      'targetVpnGateways',
631      'projects/{project}/regions/{region}/targetVpnGateways/'
632      '{targetVpnGateway}',
633      {},
634      ['project', 'region', 'targetVpnGateway'],
635      True
636  )
637  URLMAPS = (
638      'urlMaps',
639      'projects/{project}/global/urlMaps/{urlMap}',
640      {},
641      ['project', 'urlMap'],
642      True
643  )
644  VPNGATEWAYS = (
645      'vpnGateways',
646      'projects/{project}/regions/{region}/vpnGateways/{vpnGateway}',
647      {},
648      ['project', 'region', 'vpnGateway'],
649      True
650  )
651  VPNTUNNELS = (
652      'vpnTunnels',
653      'projects/{project}/regions/{region}/vpnTunnels/{vpnTunnel}',
654      {},
655      ['project', 'region', 'vpnTunnel'],
656      True
657  )
658  ZONEINPLACESNAPSHOTS = (
659      'zoneInPlaceSnapshots',
660      'projects/{project}/zones/{zone}/inPlaceSnapshots/{inPlaceSnapshot}',
661      {},
662      ['project', 'zone', 'inPlaceSnapshot'],
663      True
664  )
665  ZONEINSTANTSNAPSHOTS = (
666      'zoneInstantSnapshots',
667      'projects/{project}/zones/{zone}/instantSnapshots/{instantSnapshot}',
668      {},
669      ['project', 'zone', 'instantSnapshot'],
670      True
671  )
672  ZONEOPERATIONS = (
673      'zoneOperations',
674      'projects/{project}/zones/{zone}/operations/{operation}',
675      {},
676      ['project', 'zone', 'operation'],
677      True
678  )
679  ZONES = (
680      'zones',
681      'projects/{project}/zones/{zone}',
682      {},
683      ['project', 'zone'],
684      True
685  )
686
687  def __init__(self, collection_name, path, flat_paths, params,
688               enable_uri_parsing):
689    self.collection_name = collection_name
690    self.path = path
691    self.flat_paths = flat_paths
692    self.params = params
693    self.enable_uri_parsing = enable_uri_parsing
694