gcloud 0.4.1 → 0.5.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +8 -8
- data/CHANGELOG.md +15 -0
- data/OVERVIEW.md +38 -5
- data/lib/gcloud.rb +55 -4
- data/lib/gcloud/bigquery/data.rb +2 -0
- data/lib/gcloud/bigquery/dataset.rb +1 -1
- data/lib/gcloud/bigquery/dataset/list.rb +2 -0
- data/lib/gcloud/bigquery/job/list.rb +2 -0
- data/lib/gcloud/bigquery/project.rb +2 -9
- data/lib/gcloud/bigquery/table/list.rb +2 -0
- data/lib/gcloud/datastore.rb +23 -28
- data/lib/gcloud/datastore/connection.rb +3 -1
- data/lib/gcloud/datastore/dataset.rb +167 -22
- data/lib/gcloud/datastore/dataset/lookup_results.rb +2 -0
- data/lib/gcloud/datastore/dataset/query_results.rb +2 -0
- data/lib/gcloud/datastore/entity.rb +11 -11
- data/lib/gcloud/datastore/key.rb +33 -16
- data/lib/gcloud/dns/change/list.rb +2 -0
- data/lib/gcloud/dns/project.rb +1 -1
- data/lib/gcloud/dns/record/list.rb +2 -0
- data/lib/gcloud/dns/zone.rb +2 -2
- data/lib/gcloud/dns/zone/list.rb +2 -0
- data/lib/gcloud/gce.rb +0 -5
- data/lib/gcloud/pubsub.rb +65 -62
- data/lib/gcloud/pubsub/connection.rb +20 -2
- data/lib/gcloud/pubsub/project.rb +233 -72
- data/lib/gcloud/pubsub/subscription.rb +45 -13
- data/lib/gcloud/pubsub/subscription/list.rb +2 -0
- data/lib/gcloud/pubsub/topic.rb +66 -85
- data/lib/gcloud/pubsub/topic/list.rb +2 -0
- data/lib/gcloud/resource_manager.rb +244 -0
- data/lib/gcloud/resource_manager/connection.rb +124 -0
- data/lib/gcloud/resource_manager/credentials.rb +30 -0
- data/lib/gcloud/resource_manager/errors.rb +64 -0
- data/lib/gcloud/resource_manager/manager.rb +319 -0
- data/lib/gcloud/resource_manager/project.rb +529 -0
- data/lib/gcloud/resource_manager/project/list.rb +91 -0
- data/lib/gcloud/resource_manager/project/updater.rb +137 -0
- data/lib/gcloud/storage/bucket.rb +1 -1
- data/lib/gcloud/storage/bucket/cors.rb +2 -0
- data/lib/gcloud/storage/bucket/list.rb +2 -0
- data/lib/gcloud/storage/file/list.rb +2 -0
- data/lib/gcloud/storage/project.rb +1 -1
- data/lib/gcloud/version.rb +1 -1
- metadata +10 -2
@@ -90,9 +90,7 @@ module Gcloud
|
|
90
90
|
#
|
91
91
|
def topic
|
92
92
|
ensure_gapi!
|
93
|
-
|
94
|
-
# was intentionally deleted.
|
95
|
-
Topic.new_lazy @gapi["topic"], connection, autocreate: false
|
93
|
+
Topic.new_lazy @gapi["topic"], connection
|
96
94
|
end
|
97
95
|
|
98
96
|
##
|
@@ -193,9 +191,6 @@ module Gcloud
|
|
193
191
|
end
|
194
192
|
end
|
195
193
|
|
196
|
-
# rubocop:disable Metrics/MethodLength
|
197
|
-
# Disabled rubocop because these lines are needed.
|
198
|
-
|
199
194
|
##
|
200
195
|
# Pulls messages from the server. Returns an empty list if there are no
|
201
196
|
# messages available in the backlog. Raises an ApiError with status
|
@@ -271,8 +266,6 @@ module Gcloud
|
|
271
266
|
[]
|
272
267
|
end
|
273
268
|
|
274
|
-
# rubocop:enable Metrics/MethodLength
|
275
|
-
|
276
269
|
##
|
277
270
|
# Pulls from the server while waiting for messages to become available.
|
278
271
|
# This is the same as:
|
@@ -476,11 +469,11 @@ module Gcloud
|
|
476
469
|
# A hash that conforms to the following structure:
|
477
470
|
#
|
478
471
|
# {
|
472
|
+
# "etag"=>"CAE=",
|
479
473
|
# "bindings" => [{
|
480
474
|
# "role" => "roles/viewer",
|
481
475
|
# "members" => ["serviceAccount:your-service-account"]
|
482
|
-
# }]
|
483
|
-
# "rules" => []
|
476
|
+
# }]
|
484
477
|
# }
|
485
478
|
#
|
486
479
|
# === Examples
|
@@ -513,7 +506,7 @@ module Gcloud
|
|
513
506
|
@policy ||= begin
|
514
507
|
ensure_connection!
|
515
508
|
resp = connection.get_subscription_policy name
|
516
|
-
policy = resp.data
|
509
|
+
policy = resp.data
|
517
510
|
policy = policy.to_hash if policy.respond_to? :to_hash
|
518
511
|
policy
|
519
512
|
end
|
@@ -531,8 +524,7 @@ module Gcloud
|
|
531
524
|
# "bindings" => [{
|
532
525
|
# "role" => "roles/viewer",
|
533
526
|
# "members" => ["serviceAccount:your-service-account"]
|
534
|
-
# }]
|
535
|
-
# "rules" => []
|
527
|
+
# }]
|
536
528
|
# }
|
537
529
|
#
|
538
530
|
# === Example
|
@@ -562,6 +554,46 @@ module Gcloud
|
|
562
554
|
end
|
563
555
|
end
|
564
556
|
|
557
|
+
##
|
558
|
+
# Tests the specified permissions against the {Cloud
|
559
|
+
# IAM}[https://cloud.google.com/iam/] access control policy. See
|
560
|
+
# {Managing Policies}[https://cloud.google.com/iam/docs/managing-policies]
|
561
|
+
# for more information.
|
562
|
+
#
|
563
|
+
# === Parameters
|
564
|
+
#
|
565
|
+
# +permissions+::
|
566
|
+
# The set of permissions to check access for. Permissions with wildcards
|
567
|
+
# (such as +*+ or +storage.*+) are not allowed.
|
568
|
+
# (String or Array of Strings)
|
569
|
+
#
|
570
|
+
# === Returns
|
571
|
+
#
|
572
|
+
# The permissions that have access. (Array of Strings)
|
573
|
+
#
|
574
|
+
# === Example
|
575
|
+
#
|
576
|
+
# require "gcloud"
|
577
|
+
#
|
578
|
+
# gcloud = Gcloud.new
|
579
|
+
# pubsub = gcloud.pubsub
|
580
|
+
# sub = pubsub.subscription "my-subscription"
|
581
|
+
# perms = sub.test_permissions "projects.subscriptions.list",
|
582
|
+
# "projects.subscriptions.pull"
|
583
|
+
# perms.include? "projects.subscriptions.list" #=> true
|
584
|
+
# perms.include? "projects.subscriptions.pull" #=> false
|
585
|
+
#
|
586
|
+
def test_permissions *permissions
|
587
|
+
permissions = Array(permissions).flatten
|
588
|
+
ensure_connection!
|
589
|
+
resp = connection.test_subscription_permissions name, permissions
|
590
|
+
if resp.success?
|
591
|
+
Array(resp.data["permissions"])
|
592
|
+
else
|
593
|
+
fail ApiError.from_response(resp)
|
594
|
+
end
|
595
|
+
end
|
596
|
+
|
565
597
|
##
|
566
598
|
# New Subscription from a Google API Client object.
|
567
599
|
def self.from_gapi gapi, conn #:nodoc:
|
data/lib/gcloud/pubsub/topic.rb
CHANGED
@@ -48,20 +48,17 @@ module Gcloud
|
|
48
48
|
@connection = nil
|
49
49
|
@gapi = {}
|
50
50
|
@name = nil
|
51
|
-
@autocreate = nil
|
52
51
|
@exists = nil
|
53
52
|
end
|
54
53
|
|
55
54
|
##
|
56
55
|
# New lazy Topic object without making an HTTP request.
|
57
56
|
def self.new_lazy name, conn, options = {} #:nodoc:
|
58
|
-
options[:autocreate] = true if options[:autocreate].nil?
|
59
57
|
new.tap do |t|
|
60
58
|
t.gapi = nil
|
61
59
|
t.connection = conn
|
62
60
|
t.instance_eval do
|
63
61
|
@name = conn.topic_path(name, options)
|
64
|
-
@autocreate = options[:autocreate]
|
65
62
|
end
|
66
63
|
end
|
67
64
|
end
|
@@ -167,27 +164,28 @@ module Gcloud
|
|
167
164
|
else
|
168
165
|
fail ApiError.from_response(resp)
|
169
166
|
end
|
170
|
-
rescue Gcloud::Pubsub::NotFoundError => e
|
171
|
-
retry if lazily_create_topic!
|
172
|
-
raise e
|
173
167
|
end
|
174
168
|
alias_method :create_subscription, :subscribe
|
175
169
|
alias_method :new_subscription, :subscribe
|
176
170
|
|
177
171
|
##
|
178
172
|
# Retrieves subscription by name.
|
179
|
-
# The difference between this method and Topic#get_subscription is
|
180
|
-
# that this method does not make an API call to Pub/Sub to verify the
|
181
|
-
# subscription exists.
|
182
173
|
#
|
183
174
|
# === Parameters
|
184
175
|
#
|
185
176
|
# +subscription_name+::
|
186
177
|
# Name of a subscription. (+String+)
|
178
|
+
# +options+::
|
179
|
+
# An optional Hash for controlling additional behavior. (+Hash+)
|
180
|
+
# <code>options[:skip_lookup]</code>::
|
181
|
+
# Optionally create a Subscription object without verifying the
|
182
|
+
# subscription resource exists on the Pub/Sub service. Calls made on
|
183
|
+
# this object will raise errors if the service resource does not exist.
|
184
|
+
# Default is +false+. (+Boolean+)
|
187
185
|
#
|
188
186
|
# === Returns
|
189
187
|
#
|
190
|
-
# Gcloud::Pubsub::Subscription
|
188
|
+
# Gcloud::Pubsub::Subscription or nil if subscription does not exist
|
191
189
|
#
|
192
190
|
# === Example
|
193
191
|
#
|
@@ -200,48 +198,30 @@ module Gcloud
|
|
200
198
|
# subscription = topic.subscription "my-topic-subscription"
|
201
199
|
# puts subscription.name
|
202
200
|
#
|
203
|
-
|
204
|
-
|
205
|
-
|
206
|
-
Subscription.new_lazy subscription_name, connection
|
207
|
-
end
|
208
|
-
|
209
|
-
##
|
210
|
-
# Retrieves a subscription by name.
|
211
|
-
# The difference between this method and Topic#subscription is that
|
212
|
-
# this method makes an API call to Pub/Sub to verify the subscription
|
213
|
-
# exists.
|
214
|
-
#
|
215
|
-
# === Parameters
|
216
|
-
#
|
217
|
-
# +subscription_name+::
|
218
|
-
# Name of a subscription. (+String+)
|
219
|
-
#
|
220
|
-
# === Returns
|
221
|
-
#
|
222
|
-
# Gcloud::Pubsub::Subscription or nil if subscription does not exist
|
223
|
-
#
|
224
|
-
# === Example
|
201
|
+
# The lookup against the Pub/Sub service can be skipped using the
|
202
|
+
# +skip_lookup+ option:
|
225
203
|
#
|
226
204
|
# require "gcloud"
|
227
205
|
#
|
228
206
|
# gcloud = Gcloud.new
|
229
207
|
# pubsub = gcloud.pubsub
|
230
208
|
#
|
231
|
-
#
|
232
|
-
# subscription =
|
209
|
+
# # No API call is made to retrieve the subscription information.
|
210
|
+
# subscription = pubsub.subscription "my-sub", skip_lookup: true
|
233
211
|
# puts subscription.name
|
234
212
|
#
|
235
|
-
def
|
213
|
+
def subscription subscription_name, options = {}
|
236
214
|
ensure_connection!
|
237
|
-
|
238
|
-
|
239
|
-
Subscription.from_gapi resp.data, connection
|
240
|
-
else
|
241
|
-
nil
|
215
|
+
if options[:skip_lookup]
|
216
|
+
return Subscription.new_lazy(subscription_name, connection, options)
|
242
217
|
end
|
218
|
+
resp = connection.get_subscription subscription_name
|
219
|
+
return Subscription.from_gapi(resp.data, connection) if resp.success?
|
220
|
+
return nil if resp.status == 404
|
221
|
+
fail ApiError.from_response(resp)
|
243
222
|
end
|
244
|
-
alias_method :
|
223
|
+
alias_method :get_subscription, :subscription
|
224
|
+
alias_method :find_subscription, :subscription
|
245
225
|
|
246
226
|
##
|
247
227
|
# Retrieves a list of subscription names for the given project.
|
@@ -259,7 +239,7 @@ module Gcloud
|
|
259
239
|
#
|
260
240
|
# === Returns
|
261
241
|
#
|
262
|
-
# Array of Subscription objects (Subscription::List)
|
242
|
+
# Array of Subscription objects (See Subscription::List)
|
263
243
|
#
|
264
244
|
# === Examples
|
265
245
|
#
|
@@ -364,9 +344,6 @@ module Gcloud
|
|
364
344
|
yield batch if block_given?
|
365
345
|
return nil if batch.messages.count.zero?
|
366
346
|
publish_batch_messages batch
|
367
|
-
rescue Gcloud::Pubsub::NotFoundError => e
|
368
|
-
retry if lazily_create_topic!
|
369
|
-
raise e
|
370
347
|
end
|
371
348
|
|
372
349
|
##
|
@@ -387,11 +364,11 @@ module Gcloud
|
|
387
364
|
# A hash that conforms to the following structure:
|
388
365
|
#
|
389
366
|
# {
|
367
|
+
# "etag"=>"CAE=",
|
390
368
|
# "bindings" => [{
|
391
369
|
# "role" => "roles/viewer",
|
392
370
|
# "members" => ["serviceAccount:your-service-account"]
|
393
|
-
# }]
|
394
|
-
# "rules" => []
|
371
|
+
# }]
|
395
372
|
# }
|
396
373
|
#
|
397
374
|
# === Examples
|
@@ -424,7 +401,7 @@ module Gcloud
|
|
424
401
|
@policy ||= begin
|
425
402
|
ensure_connection!
|
426
403
|
resp = connection.get_topic_policy name
|
427
|
-
policy = resp.data
|
404
|
+
policy = resp.data
|
428
405
|
policy = policy.to_hash if policy.respond_to? :to_hash
|
429
406
|
policy
|
430
407
|
end
|
@@ -442,8 +419,7 @@ module Gcloud
|
|
442
419
|
# "bindings" => [{
|
443
420
|
# "role" => "roles/viewer",
|
444
421
|
# "members" => ["serviceAccount:your-service-account"]
|
445
|
-
# }]
|
446
|
-
# "rules" => []
|
422
|
+
# }]
|
447
423
|
# }
|
448
424
|
#
|
449
425
|
# === Example
|
@@ -473,6 +449,46 @@ module Gcloud
|
|
473
449
|
end
|
474
450
|
end
|
475
451
|
|
452
|
+
##
|
453
|
+
# Tests the specified permissions against the {Cloud
|
454
|
+
# IAM}[https://cloud.google.com/iam/] access control policy. See
|
455
|
+
# {Managing Policies}[https://cloud.google.com/iam/docs/managing-policies]
|
456
|
+
# for more information.
|
457
|
+
#
|
458
|
+
# === Parameters
|
459
|
+
#
|
460
|
+
# +permissions+::
|
461
|
+
# The set of permissions to check access for. Permissions with wildcards
|
462
|
+
# (such as +*+ or +storage.*+) are not allowed.
|
463
|
+
# (String or Array of Strings)
|
464
|
+
#
|
465
|
+
# === Returns
|
466
|
+
#
|
467
|
+
# The permissions that have access. (Array of Strings)
|
468
|
+
#
|
469
|
+
# === Example
|
470
|
+
#
|
471
|
+
# require "gcloud"
|
472
|
+
#
|
473
|
+
# gcloud = Gcloud.new
|
474
|
+
# pubsub = gcloud.pubsub
|
475
|
+
# topic = pubsub.topic "my-topic"
|
476
|
+
# perms = topic.test_permissions "projects.topic.list",
|
477
|
+
# "projects.topic.publish"
|
478
|
+
# perms.include? "projects.topic.list" #=> true
|
479
|
+
# perms.include? "projects.topic.publish" #=> false
|
480
|
+
#
|
481
|
+
def test_permissions *permissions
|
482
|
+
permissions = Array(permissions).flatten
|
483
|
+
ensure_connection!
|
484
|
+
resp = connection.test_topic_permissions name, permissions
|
485
|
+
if resp.success?
|
486
|
+
Array(resp.data["permissions"])
|
487
|
+
else
|
488
|
+
fail ApiError.from_response(resp)
|
489
|
+
end
|
490
|
+
end
|
491
|
+
|
476
492
|
##
|
477
493
|
# Determines whether the topic exists in the Pub/Sub service.
|
478
494
|
#
|
@@ -512,29 +528,6 @@ module Gcloud
|
|
512
528
|
@gapi.nil?
|
513
529
|
end
|
514
530
|
|
515
|
-
# rubocop:disable Style/TrivialAccessors
|
516
|
-
# Disabled rubocop because you can't use "?" in an attr.
|
517
|
-
|
518
|
-
##
|
519
|
-
# Determines whether the lazy topic object should create a topic on the
|
520
|
-
# Pub/Sub service.
|
521
|
-
#
|
522
|
-
# === Example
|
523
|
-
#
|
524
|
-
# require "gcloud"
|
525
|
-
#
|
526
|
-
# gcloud = Gcloud.new
|
527
|
-
# pubsub = gcloud.pubsub
|
528
|
-
#
|
529
|
-
# topic = pubsub.topic "my-topic"
|
530
|
-
# topic.autocreate? #=> true
|
531
|
-
#
|
532
|
-
def autocreate? #:nodoc:
|
533
|
-
@autocreate
|
534
|
-
end
|
535
|
-
|
536
|
-
# rubocop:enable Style/TrivialAccessors
|
537
|
-
|
538
531
|
##
|
539
532
|
# New Topic from a Google API Client object.
|
540
533
|
def self.from_gapi gapi, conn #:nodoc:
|
@@ -561,18 +554,6 @@ module Gcloud
|
|
561
554
|
@gapi = resp.data if resp.success?
|
562
555
|
end
|
563
556
|
|
564
|
-
##
|
565
|
-
def lazily_create_topic!
|
566
|
-
if lazy? && autocreate?
|
567
|
-
resp = connection.create_topic name
|
568
|
-
if resp.success?
|
569
|
-
@gapi = resp.data
|
570
|
-
return true
|
571
|
-
end
|
572
|
-
end
|
573
|
-
nil
|
574
|
-
end
|
575
|
-
|
576
557
|
##
|
577
558
|
# Call the publish API with arrays of data data and attrs.
|
578
559
|
def publish_batch_messages batch
|
@@ -0,0 +1,244 @@
|
|
1
|
+
# Copyright 2015 Google Inc. All rights reserved.
|
2
|
+
#
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
+
# you may not use this file except in compliance with the License.
|
5
|
+
# You may obtain a copy of the License at
|
6
|
+
#
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
8
|
+
#
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
+
# See the License for the specific language governing permissions and
|
13
|
+
# limitations under the License.
|
14
|
+
|
15
|
+
require "gcloud"
|
16
|
+
require "gcloud/resource_manager/manager"
|
17
|
+
|
18
|
+
#--
|
19
|
+
# Google Cloud Resource Manager
|
20
|
+
module Gcloud
|
21
|
+
##
|
22
|
+
# Creates a new +Project+ instance connected to the Resource Manager service.
|
23
|
+
# Each call creates a new connection.
|
24
|
+
#
|
25
|
+
# === Parameters
|
26
|
+
#
|
27
|
+
# +keyfile+::
|
28
|
+
# Keyfile downloaded from Google Cloud. If file path the file must be
|
29
|
+
# readable. (+String+ or +Hash+)
|
30
|
+
# +options+::
|
31
|
+
# An optional Hash for controlling additional behavior. (+Hash+)
|
32
|
+
# <code>options[:scope]</code>::
|
33
|
+
# The OAuth 2.0 scopes controlling the set of resources and operations that
|
34
|
+
# the connection can access. See {Using OAuth 2.0 to Access Google
|
35
|
+
# APIs}[https://developers.google.com/identity/protocols/OAuth2]. (+String+
|
36
|
+
# or +Array+)
|
37
|
+
#
|
38
|
+
# The default scope is:
|
39
|
+
#
|
40
|
+
# * +https://www.googleapis.com/auth/cloud-platform+
|
41
|
+
#
|
42
|
+
# === Returns
|
43
|
+
#
|
44
|
+
# Gcloud::ResourceManager::Manager
|
45
|
+
#
|
46
|
+
# === Example
|
47
|
+
#
|
48
|
+
# require "gcloud/resource_manager"
|
49
|
+
#
|
50
|
+
# resource_manager = Gcloud.resource_manager
|
51
|
+
# resource_manager.projects.each do |project|
|
52
|
+
# puts projects.project_id
|
53
|
+
# end
|
54
|
+
#
|
55
|
+
def self.resource_manager keyfile = nil, options = {}
|
56
|
+
if keyfile.nil?
|
57
|
+
credentials = Gcloud::ResourceManager::Credentials.default options
|
58
|
+
else
|
59
|
+
credentials = Gcloud::ResourceManager::Credentials.new keyfile, options
|
60
|
+
end
|
61
|
+
Gcloud::ResourceManager::Manager.new credentials
|
62
|
+
end
|
63
|
+
|
64
|
+
# rubocop:disable Metrics/LineLength
|
65
|
+
# Disabled because there are links in the docs that are long.
|
66
|
+
|
67
|
+
##
|
68
|
+
# = Google Cloud Resource Manager
|
69
|
+
#
|
70
|
+
# The Resource Manager API provides methods that you can use to
|
71
|
+
# programmatically manage your projects in the Google Cloud Platform. You may
|
72
|
+
# be familiar with managing projects in the {Developers
|
73
|
+
# Console}[https://developers.google.com/console/help/new/]. With this API you
|
74
|
+
# can do the following:
|
75
|
+
#
|
76
|
+
# * Get a list of all projects associated with an account
|
77
|
+
# * Create new projects
|
78
|
+
# * Update existing projects
|
79
|
+
# * Delete projects
|
80
|
+
# * Undelete, or recover, projects that you don't want to delete
|
81
|
+
#
|
82
|
+
# The Resource Manager API is a Beta release and is not covered by any SLA or
|
83
|
+
# deprecation policy and may be subject to backward-incompatible changes.
|
84
|
+
#
|
85
|
+
# == Accessing the Service
|
86
|
+
#
|
87
|
+
# Currently, the full functionality of the Resource Manager API is available
|
88
|
+
# only to whitelisted users. (Contact your account manager or a member of the
|
89
|
+
# Google Cloud sales team if you are interested in access.) Read-only methods
|
90
|
+
# such as ResourceManager::Manager#projects and
|
91
|
+
# ResourceManager::Manager#project are accessible to any user who enables the
|
92
|
+
# Resource Manager API in the {Developers
|
93
|
+
# Console}[https://console.developers.google.com].
|
94
|
+
#
|
95
|
+
# == Authentication
|
96
|
+
#
|
97
|
+
# The Resource Manager API currently requires authentication of a {User
|
98
|
+
# Account}[https://developers.google.com/identity/protocols/OAuth2], and
|
99
|
+
# cannot currently be accessed with a {Service
|
100
|
+
# Account}[https://developers.google.com/identity/protocols/OAuth2ServiceAccount].
|
101
|
+
# To use a User Account install the {Google Cloud
|
102
|
+
# SDK}[http://cloud.google.com/sdk] and authenticate with the following:
|
103
|
+
#
|
104
|
+
# $ gcloud auth login
|
105
|
+
#
|
106
|
+
# Also make sure all +GCLOUD+ environment variables are cleared of any service
|
107
|
+
# accounts. Then gcloud will be able to detect the user authentication and
|
108
|
+
# connect with those credentials.
|
109
|
+
#
|
110
|
+
# require "gcloud"
|
111
|
+
#
|
112
|
+
# gcloud = Gcloud.new
|
113
|
+
# resource_manager = gcloud.resource_manager
|
114
|
+
#
|
115
|
+
# == Listing Projects
|
116
|
+
#
|
117
|
+
# Project is a collection of settings, credentials, and metadata about the
|
118
|
+
# application or applications you're working on. You can retrieve and inspect
|
119
|
+
# all projects that you have permissions to. (See Manager#projects)
|
120
|
+
#
|
121
|
+
# require "gcloud"
|
122
|
+
#
|
123
|
+
# gcloud = Gcloud.new
|
124
|
+
# resource_manager = gcloud.resource_manager
|
125
|
+
# resource_manager.projects.each do |project|
|
126
|
+
# puts projects.project_id
|
127
|
+
# end
|
128
|
+
#
|
129
|
+
# == Managing Projects with Labels
|
130
|
+
#
|
131
|
+
# Labels can be added to or removed from projects. (See Project#labels)
|
132
|
+
#
|
133
|
+
# require "gcloud"
|
134
|
+
#
|
135
|
+
# gcloud = Gcloud.new
|
136
|
+
# resource_manager = gcloud.resource_manager
|
137
|
+
# project = resource_manager.project "tokyo-rain-123"
|
138
|
+
# # Label the project as production
|
139
|
+
# project.update do |p|
|
140
|
+
# p.labels["env"] = "production"
|
141
|
+
# end
|
142
|
+
#
|
143
|
+
# Projects can then be filtered by labels. (See Manager#projects)
|
144
|
+
#
|
145
|
+
# require "gcloud"
|
146
|
+
#
|
147
|
+
# gcloud = Gcloud.new
|
148
|
+
# resource_manager = gcloud.resource_manager
|
149
|
+
# # Find only the productions projects
|
150
|
+
# projects = resource_manager.projects filter: "labels.env:production"
|
151
|
+
# projects.each do |project|
|
152
|
+
# puts project.project_id
|
153
|
+
# end
|
154
|
+
#
|
155
|
+
# == Creating a Project
|
156
|
+
#
|
157
|
+
# You can also use the API to create new projects. (See
|
158
|
+
# Manager#create_project)
|
159
|
+
#
|
160
|
+
# require "gcloud"
|
161
|
+
#
|
162
|
+
# gcloud = Gcloud.new
|
163
|
+
# resource_manager = gcloud.resource_manager
|
164
|
+
# project = resource_manager.create_project "tokyo-rain-123",
|
165
|
+
# name: "Todos Development",
|
166
|
+
# labels: {env: :development}
|
167
|
+
#
|
168
|
+
# == Deleting a Project
|
169
|
+
#
|
170
|
+
# You can delete projects when they are no longer needed. (See
|
171
|
+
# Manager#delete and Project#delete)
|
172
|
+
#
|
173
|
+
# require "gcloud"
|
174
|
+
#
|
175
|
+
# gcloud = Gcloud.new
|
176
|
+
# resource_manager = gcloud.resource_manager
|
177
|
+
# resource_manager.delete "tokyo-rain-123"
|
178
|
+
#
|
179
|
+
# == Undeleting a Project
|
180
|
+
#
|
181
|
+
# You can also restore a deleted project within the waiting period that
|
182
|
+
# starts when the project was deleted. Restoring a project returns it to the
|
183
|
+
# state it was in prior to being deleted. (See Manager#undelete and
|
184
|
+
# Project#undelete)
|
185
|
+
#
|
186
|
+
# require "gcloud"
|
187
|
+
#
|
188
|
+
# gcloud = Gcloud.new
|
189
|
+
# resource_manager = gcloud.resource_manager
|
190
|
+
# resource_manager.undelete "tokyo-rain-123"
|
191
|
+
#
|
192
|
+
# == Managing IAM Policies
|
193
|
+
#
|
194
|
+
# Google Cloud Identity and Access Management ({Cloud
|
195
|
+
# IAM}[https://cloud.google.com/iam/]) access control policies can be managed
|
196
|
+
# on projects. These policies allow project owners to manage _who_ (identity)
|
197
|
+
# has access to _what_ (role). See {Cloud IAM
|
198
|
+
# Overview}[https://cloud.google.com/iam/docs/overview] for more information.
|
199
|
+
#
|
200
|
+
# A project's access control policy can be retrieved. (See Project#policy)
|
201
|
+
#
|
202
|
+
# require "gcloud"
|
203
|
+
#
|
204
|
+
# gcloud = Gcloud.new
|
205
|
+
# resource_manager = gcloud.resource_manager
|
206
|
+
# project = resource_manager.project "tokyo-rain-123"
|
207
|
+
# policy = project.policy
|
208
|
+
#
|
209
|
+
# A project's access control policy can also be set. (See Project#policy=)
|
210
|
+
#
|
211
|
+
# require "gcloud"
|
212
|
+
#
|
213
|
+
# gcloud = Gcloud.new
|
214
|
+
# resource_manager = gcloud.resource_manager
|
215
|
+
# project = resource_manager.project "tokyo-rain-123"
|
216
|
+
#
|
217
|
+
# viewer_policy = {
|
218
|
+
# "bindings" => [{
|
219
|
+
# "role" => "roles/viewer",
|
220
|
+
# "members" => ["serviceAccount:your-service-account"]
|
221
|
+
# }]
|
222
|
+
# }
|
223
|
+
# project.policy = viewer_policy
|
224
|
+
#
|
225
|
+
# And permissions can be tested on a project. (See Project#test_permissions)
|
226
|
+
#
|
227
|
+
# require "gcloud"
|
228
|
+
#
|
229
|
+
# gcloud = Gcloud.new
|
230
|
+
# resource_manager = gcloud.resource_manager
|
231
|
+
# project = resource_manager.project "tokyo-rain-123"
|
232
|
+
# perms = project.test_permissions "resourcemanager.projects.get",
|
233
|
+
# "resourcemanager.projects.delete"
|
234
|
+
# perms.include? "resourcemanager.projects.get" #=> true
|
235
|
+
# perms.include? "resourcemanager.projects.delete" #=> false
|
236
|
+
#
|
237
|
+
# For more information about using access control policies see {Managing
|
238
|
+
# Policies}[https://cloud.google.com/iam/docs/managing-policies].
|
239
|
+
#
|
240
|
+
module ResourceManager
|
241
|
+
end
|
242
|
+
|
243
|
+
# rubocop:enable Metrics/LineLength
|
244
|
+
end
|