gcloud 0.12.2 → 0.20.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (169) hide show
  1. checksums.yaml +5 -13
  2. data/lib/gcloud.rb +27 -456
  3. data/lib/gcloud/bigquery.rb +2 -382
  4. data/lib/gcloud/datastore.rb +2 -576
  5. data/lib/gcloud/dns.rb +2 -321
  6. data/lib/gcloud/logging.rb +1 -322
  7. data/lib/gcloud/pubsub.rb +2 -476
  8. data/lib/gcloud/resource_manager.rb +2 -273
  9. data/lib/gcloud/storage.rb +2 -440
  10. data/lib/gcloud/translate.rb +1 -250
  11. data/lib/gcloud/version.rb +2 -2
  12. data/lib/gcloud/vision.rb +1 -501
  13. metadata +36 -332
  14. data/AUTHENTICATION.md +0 -75
  15. data/CHANGELOG.md +0 -382
  16. data/OVERVIEW.md +0 -259
  17. data/lib/gcloud/backoff.rb +0 -150
  18. data/lib/gcloud/bigquery/copy_job.rb +0 -97
  19. data/lib/gcloud/bigquery/credentials.rb +0 -29
  20. data/lib/gcloud/bigquery/data.rb +0 -239
  21. data/lib/gcloud/bigquery/dataset.rb +0 -753
  22. data/lib/gcloud/bigquery/dataset/access.rb +0 -507
  23. data/lib/gcloud/bigquery/dataset/list.rb +0 -169
  24. data/lib/gcloud/bigquery/extract_job.rb +0 -117
  25. data/lib/gcloud/bigquery/insert_response.rb +0 -81
  26. data/lib/gcloud/bigquery/job.rb +0 -299
  27. data/lib/gcloud/bigquery/job/list.rb +0 -172
  28. data/lib/gcloud/bigquery/load_job.rb +0 -202
  29. data/lib/gcloud/bigquery/project.rb +0 -475
  30. data/lib/gcloud/bigquery/query_data.rb +0 -234
  31. data/lib/gcloud/bigquery/query_job.rb +0 -137
  32. data/lib/gcloud/bigquery/schema.rb +0 -359
  33. data/lib/gcloud/bigquery/service.rb +0 -506
  34. data/lib/gcloud/bigquery/table.rb +0 -1141
  35. data/lib/gcloud/bigquery/table/list.rb +0 -180
  36. data/lib/gcloud/bigquery/view.rb +0 -475
  37. data/lib/gcloud/credentials.rb +0 -129
  38. data/lib/gcloud/datastore/commit.rb +0 -148
  39. data/lib/gcloud/datastore/credentials.rb +0 -35
  40. data/lib/gcloud/datastore/cursor.rb +0 -76
  41. data/lib/gcloud/datastore/dataset.rb +0 -660
  42. data/lib/gcloud/datastore/dataset/lookup_results.rb +0 -219
  43. data/lib/gcloud/datastore/dataset/query_results.rb +0 -386
  44. data/lib/gcloud/datastore/entity.rb +0 -449
  45. data/lib/gcloud/datastore/errors.rb +0 -41
  46. data/lib/gcloud/datastore/gql_query.rb +0 -211
  47. data/lib/gcloud/datastore/grpc_utils.rb +0 -132
  48. data/lib/gcloud/datastore/key.rb +0 -281
  49. data/lib/gcloud/datastore/properties.rb +0 -128
  50. data/lib/gcloud/datastore/query.rb +0 -348
  51. data/lib/gcloud/datastore/service.rb +0 -167
  52. data/lib/gcloud/datastore/transaction.rb +0 -362
  53. data/lib/gcloud/dns/change.rb +0 -158
  54. data/lib/gcloud/dns/change/list.rb +0 -173
  55. data/lib/gcloud/dns/credentials.rb +0 -29
  56. data/lib/gcloud/dns/importer.rb +0 -183
  57. data/lib/gcloud/dns/project.rb +0 -247
  58. data/lib/gcloud/dns/record.rb +0 -170
  59. data/lib/gcloud/dns/record/list.rb +0 -174
  60. data/lib/gcloud/dns/service.rb +0 -167
  61. data/lib/gcloud/dns/zone.rb +0 -759
  62. data/lib/gcloud/dns/zone/list.rb +0 -168
  63. data/lib/gcloud/dns/zone/transaction.rb +0 -176
  64. data/lib/gcloud/errors.rb +0 -206
  65. data/lib/gcloud/gce.rb +0 -56
  66. data/lib/gcloud/grpc_utils.rb +0 -87
  67. data/lib/gcloud/logging/credentials.rb +0 -29
  68. data/lib/gcloud/logging/entry.rb +0 -465
  69. data/lib/gcloud/logging/entry/http_request.rb +0 -141
  70. data/lib/gcloud/logging/entry/list.rb +0 -177
  71. data/lib/gcloud/logging/entry/operation.rb +0 -90
  72. data/lib/gcloud/logging/logger.rb +0 -307
  73. data/lib/gcloud/logging/metric.rb +0 -169
  74. data/lib/gcloud/logging/metric/list.rb +0 -172
  75. data/lib/gcloud/logging/project.rb +0 -642
  76. data/lib/gcloud/logging/resource.rb +0 -84
  77. data/lib/gcloud/logging/resource_descriptor.rb +0 -137
  78. data/lib/gcloud/logging/resource_descriptor/list.rb +0 -174
  79. data/lib/gcloud/logging/service.rb +0 -267
  80. data/lib/gcloud/logging/sink.rb +0 -227
  81. data/lib/gcloud/logging/sink/list.rb +0 -171
  82. data/lib/gcloud/pubsub/credentials.rb +0 -29
  83. data/lib/gcloud/pubsub/message.rb +0 -94
  84. data/lib/gcloud/pubsub/policy.rb +0 -204
  85. data/lib/gcloud/pubsub/project.rb +0 -482
  86. data/lib/gcloud/pubsub/received_message.rb +0 -160
  87. data/lib/gcloud/pubsub/service.rb +0 -334
  88. data/lib/gcloud/pubsub/subscription.rb +0 -565
  89. data/lib/gcloud/pubsub/subscription/list.rb +0 -208
  90. data/lib/gcloud/pubsub/topic.rb +0 -511
  91. data/lib/gcloud/pubsub/topic/list.rb +0 -174
  92. data/lib/gcloud/pubsub/topic/publisher.rb +0 -85
  93. data/lib/gcloud/resource_manager/credentials.rb +0 -30
  94. data/lib/gcloud/resource_manager/manager.rb +0 -266
  95. data/lib/gcloud/resource_manager/policy.rb +0 -211
  96. data/lib/gcloud/resource_manager/project.rb +0 -484
  97. data/lib/gcloud/resource_manager/project/list.rb +0 -167
  98. data/lib/gcloud/resource_manager/project/updater.rb +0 -130
  99. data/lib/gcloud/resource_manager/service.rb +0 -127
  100. data/lib/gcloud/storage/bucket.rb +0 -775
  101. data/lib/gcloud/storage/bucket/acl.rb +0 -810
  102. data/lib/gcloud/storage/bucket/cors.rb +0 -153
  103. data/lib/gcloud/storage/bucket/list.rb +0 -172
  104. data/lib/gcloud/storage/credentials.rb +0 -29
  105. data/lib/gcloud/storage/errors.rb +0 -65
  106. data/lib/gcloud/storage/file.rb +0 -842
  107. data/lib/gcloud/storage/file/acl.rb +0 -425
  108. data/lib/gcloud/storage/file/list.rb +0 -191
  109. data/lib/gcloud/storage/file/verifier.rb +0 -67
  110. data/lib/gcloud/storage/project.rb +0 -316
  111. data/lib/gcloud/storage/service.rb +0 -347
  112. data/lib/gcloud/translate/api.rb +0 -241
  113. data/lib/gcloud/translate/detection.rb +0 -137
  114. data/lib/gcloud/translate/language.rb +0 -69
  115. data/lib/gcloud/translate/service.rb +0 -80
  116. data/lib/gcloud/translate/translation.rb +0 -112
  117. data/lib/gcloud/vision/annotate.rb +0 -224
  118. data/lib/gcloud/vision/annotation.rb +0 -455
  119. data/lib/gcloud/vision/annotation/entity.rb +0 -234
  120. data/lib/gcloud/vision/annotation/face.rb +0 -1750
  121. data/lib/gcloud/vision/annotation/properties.rb +0 -245
  122. data/lib/gcloud/vision/annotation/safe_search.rb +0 -161
  123. data/lib/gcloud/vision/annotation/text.rb +0 -236
  124. data/lib/gcloud/vision/annotation/vertex.rb +0 -108
  125. data/lib/gcloud/vision/credentials.rb +0 -29
  126. data/lib/gcloud/vision/image.rb +0 -590
  127. data/lib/gcloud/vision/location.rb +0 -115
  128. data/lib/gcloud/vision/project.rb +0 -278
  129. data/lib/gcloud/vision/service.rb +0 -66
  130. data/lib/google/api/annotations.rb +0 -14
  131. data/lib/google/api/http.rb +0 -30
  132. data/lib/google/api/label.rb +0 -24
  133. data/lib/google/api/monitored_resource.rb +0 -25
  134. data/lib/google/datastore/v1beta3/datastore.rb +0 -115
  135. data/lib/google/datastore/v1beta3/datastore_services.rb +0 -33
  136. data/lib/google/datastore/v1beta3/entity.rb +0 -63
  137. data/lib/google/datastore/v1beta3/query.rb +0 -128
  138. data/lib/google/devtools/cloudtrace/v1/trace.rb +0 -78
  139. data/lib/google/devtools/cloudtrace/v1/trace_services.rb +0 -32
  140. data/lib/google/example/library/v1/library.rb +0 -91
  141. data/lib/google/example/library/v1/library_services.rb +0 -40
  142. data/lib/google/iam/v1/iam_policy.rb +0 -33
  143. data/lib/google/iam/v1/iam_policy_services.rb +0 -30
  144. data/lib/google/iam/v1/policy.rb +0 -25
  145. data/lib/google/logging/type/http_request.rb +0 -28
  146. data/lib/google/logging/type/log_severity.rb +0 -27
  147. data/lib/google/logging/v2/log_entry.rb +0 -44
  148. data/lib/google/logging/v2/logging.rb +0 -56
  149. data/lib/google/logging/v2/logging_config.rb +0 -59
  150. data/lib/google/logging/v2/logging_config_services.rb +0 -32
  151. data/lib/google/logging/v2/logging_metrics.rb +0 -51
  152. data/lib/google/logging/v2/logging_metrics_services.rb +0 -32
  153. data/lib/google/logging/v2/logging_services.rb +0 -31
  154. data/lib/google/longrunning/operations.rb +0 -50
  155. data/lib/google/longrunning/operations_services.rb +0 -29
  156. data/lib/google/protobuf/descriptor.rb +0 -0
  157. data/lib/google/pubsub/v1/pubsub.rb +0 -129
  158. data/lib/google/pubsub/v1/pubsub_services.rb +0 -56
  159. data/lib/google/pubsub/v1beta2/pubsub.rb +0 -126
  160. data/lib/google/pubsub/v1beta2/pubsub_services.rb +0 -56
  161. data/lib/google/rpc/code.rb +0 -32
  162. data/lib/google/rpc/error_details.rb +0 -61
  163. data/lib/google/rpc/status.rb +0 -19
  164. data/lib/google/type/color.rb +0 -20
  165. data/lib/google/type/date.rb +0 -18
  166. data/lib/google/type/dayofweek.rb +0 -23
  167. data/lib/google/type/latlng.rb +0 -17
  168. data/lib/google/type/money.rb +0 -18
  169. data/lib/google/type/timeofday.rb +0 -19
@@ -1,211 +0,0 @@
1
- # Copyright 2016 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
-
16
- require "gcloud/errors"
17
- require "google/apis/cloudresourcemanager_v1"
18
-
19
- module Gcloud
20
- module ResourceManager
21
- ##
22
- # # Policy
23
- #
24
- # Represents a Cloud IAM Policy for the Resource Manager service.
25
- #
26
- # A common pattern for updating a resource's metadata, such as its Policy,
27
- # is to read the current data from the service, update the data locally, and
28
- # then send the modified data for writing. This pattern may result in a
29
- # conflict if two or more processes attempt the sequence simultaneously. IAM
30
- # solves this problem with the {Gcloud::ResourceManager::Policy#etag}
31
- # property, which is used to verify whether the policy has changed since the
32
- # last request. When you make a request to with an `etag` value, Cloud IAM
33
- # compares the `etag` value in the request with the existing `etag` value
34
- # associated with the policy. It writes the policy only if the `etag` values
35
- # match.
36
- #
37
- # When you update a policy, first read the policy (and its current `etag`)
38
- # from the service, then modify the policy locally, and then write the
39
- # modified policy to the service. See
40
- # {Gcloud::ResourceManager::Project#policy} and
41
- # {Gcloud::ResourceManager::Project#policy=}.
42
- #
43
- # @see https://cloud.google.com/iam/docs/managing-policies Managing policies
44
- # @see https://cloud.google.com/resource-manager/reference/rest/v1beta1/projects/setIamPolicy
45
- # projects.setIamPolicy
46
- #
47
- # @attr [String] etag Used to verify whether the policy has changed since
48
- # the last request. The policy will be written only if the `etag` values
49
- # match.
50
- # @attr [Hash{String => Array<String>}] roles The bindings that associate
51
- # roles with an array of members. See [Understanding
52
- # Roles](https://cloud.google.com/iam/docs/understanding-roles) for a
53
- # listing of primitive and curated roles.
54
- # See [Binding](https://cloud.google.com/resource-manager/reference/rpc/google.iam.v1#binding)
55
- # for a listing of values and patterns for members.
56
- #
57
- # @example
58
- # require "gcloud"
59
- #
60
- # gcloud = Gcloud.new
61
- # resource_manager = gcloud.resource_manager
62
- # project = resource_manager.project "tokyo-rain-123"
63
- #
64
- # policy = project.policy # API call
65
- #
66
- # policy.remove "roles/owner", "user:owner@example.com" # Local call
67
- # policy.add "roles/owner", "user:newowner@example.com" # Local call
68
- # policy.roles["roles/viewer"] = ["allUsers"] # Local call
69
- #
70
- # project.policy = policy # API call
71
- #
72
- class Policy
73
- ##
74
- # Alias to the Google Client API module
75
- API = Google::Apis::CloudresourcemanagerV1
76
-
77
- attr_reader :etag, :roles
78
-
79
- ##
80
- # @private Creates a Policy object.
81
- def initialize etag, roles
82
- @etag = etag
83
- @roles = roles
84
- end
85
-
86
- ##
87
- # Convenience method for adding a member to a binding on this policy.
88
- # See [Understanding
89
- # Roles](https://cloud.google.com/iam/docs/understanding-roles) for a
90
- # listing of primitive and curated roles.
91
- # See [Binding](https://cloud.google.com/resource-manager/reference/rpc/google.iam.v1#binding)
92
- # for a listing of values and patterns for members.
93
- #
94
- # @param [String] role_name A Cloud IAM role, such as `"roles/owner"`.
95
- # @param [String] member A Cloud IAM identity, such as
96
- # `"user:owner@example.com"`.
97
- #
98
- # @example
99
- # require "gcloud"
100
- #
101
- # gcloud = Gcloud.new
102
- # resource_manager = gcloud.resource_manager
103
- # project = resource_manager.project "tokyo-rain-123"
104
- #
105
- # policy = project.policy # API call
106
- #
107
- # policy.add "roles/owner", "user:newowner@example.com" # Local call
108
- #
109
- # project.policy = policy # API call
110
- #
111
- def add role_name, member
112
- role(role_name) << member
113
- end
114
-
115
- ##
116
- # Convenience method for removing a member from a binding on this policy.
117
- # See [Understanding
118
- # Roles](https://cloud.google.com/iam/docs/understanding-roles) for a
119
- # listing of primitive and curated roles.
120
- # See [Binding](https://cloud.google.com/resource-manager/reference/rpc/google.iam.v1#binding)
121
- # for a listing of values and patterns for members.
122
- #
123
- # @param [String] role_name A Cloud IAM role, such as `"roles/owner"`.
124
- # @param [String] member A Cloud IAM identity, such as
125
- # `"user:owner@example.com"`.
126
- #
127
- # @example
128
- # require "gcloud"
129
- #
130
- # gcloud = Gcloud.new
131
- # resource_manager = gcloud.resource_manager
132
- # project = resource_manager.project "tokyo-rain-123"
133
- #
134
- # policy = project.policy # API call
135
- #
136
- # policy.remove "roles/owner", "user:owner@example.com" # Local call
137
- #
138
- # project.policy = policy # API call
139
- #
140
- def remove role_name, member
141
- role(role_name).delete member
142
- end
143
-
144
- ##
145
- # Convenience method returning the array of members bound to a role in
146
- # this policy, or an empty array if no value is present for the role in
147
- # {#roles}. See [Understanding
148
- # Roles](https://cloud.google.com/iam/docs/understanding-roles) for a
149
- # listing of primitive and curated roles. See
150
- # [Binding](https://cloud.google.com/resource-manager/reference/rpc/google.iam.v1#binding)
151
- # for a listing of values and patterns for members.
152
- #
153
- # @return [Array<String>] The members strings, or an empty array.
154
- #
155
- # @example
156
- # require "gcloud"
157
- #
158
- # gcloud = Gcloud.new
159
- # resource_manager = gcloud.resource_manager
160
- # project = resource_manager.project "tokyo-rain-123"
161
- #
162
- # policy = project.policy
163
- #
164
- # policy.role("roles/viewer") << "user:viewer@example.com"
165
- #
166
- def role role_name
167
- roles[role_name] ||= []
168
- end
169
-
170
- ##
171
- # Returns a deep copy of the policy.
172
- #
173
- # @return [Policy]
174
- #
175
- def deep_dup
176
- dup.tap do |p|
177
- roles_dup = p.roles.each_with_object({}) do |(k, v), memo|
178
- memo[k] = v.dup rescue value
179
- end
180
- p.instance_variable_set "@roles", roles_dup
181
- end
182
- end
183
-
184
- ##
185
- # @private Convert the Policy to a
186
- # Google::Apis::CloudresourcemanagerV1::Policy.
187
- def to_gapi
188
- API::Policy.new(
189
- etag: etag,
190
- bindings: roles.keys.map do |role_name|
191
- next if roles[role_name].empty?
192
- API::Binding.new(
193
- role: role_name,
194
- members: roles[role_name]
195
- )
196
- end
197
- )
198
- end
199
-
200
- ##
201
- # @private New Policy from a
202
- # Google::Apis::CloudresourcemanagerV1::Policy object.
203
- def self.from_gapi gapi
204
- roles = gapi.bindings.each_with_object({}) do |binding, memo|
205
- memo[binding.role] = binding.members.to_a
206
- end
207
- new gapi.etag, roles
208
- end
209
- end
210
- end
211
- end
@@ -1,484 +0,0 @@
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
-
16
- require "time"
17
- require "gcloud/resource_manager/project/list"
18
- require "gcloud/resource_manager/project/updater"
19
- require "gcloud/resource_manager/policy"
20
-
21
- module Gcloud
22
- module ResourceManager
23
- ##
24
- # # Project
25
- #
26
- # Project is a high-level Google Cloud Platform entity. It is a container
27
- # for ACLs, APIs, AppEngine Apps, VMs, and other Google Cloud Platform
28
- # resources.
29
- #
30
- # @example
31
- # require "gcloud"
32
- #
33
- # gcloud = Gcloud.new
34
- # resource_manager = gcloud.resource_manager
35
- # project = resource_manager.project "tokyo-rain-123"
36
- # project.update do |p|
37
- # p.name = "My Project"
38
- # p.labels["env"] = "production"
39
- # end
40
- #
41
- class Project
42
- ##
43
- # @private The Service object.
44
- attr_accessor :service
45
-
46
- ##
47
- # @private The Google API Client object.
48
- attr_accessor :gapi
49
-
50
- ##
51
- # @private Create an empty Project object.
52
- def initialize
53
- @service = nil
54
- @gapi = Gcloud::ResourceManager::Service::API::Project.new
55
- end
56
-
57
- ##
58
- # The unique, user-assigned ID of the project. It must be 6 to 30
59
- # lowercase letters, digits, or hyphens. It must start with a letter.
60
- # Trailing hyphens are prohibited. e.g. tokyo-rain-123
61
- #
62
- def project_id
63
- @gapi.project_id
64
- end
65
-
66
- ##
67
- # The number uniquely identifying the project. e.g. 415104041262
68
- #
69
- def project_number
70
- @gapi.project_number
71
- end
72
-
73
- ##
74
- # The user-assigned name of the project.
75
- #
76
- def name
77
- @gapi.name
78
- end
79
-
80
- ##
81
- # Updates the user-assigned name of the project. This field is optional
82
- # and can remain unset.
83
- #
84
- # Allowed characters are: lowercase and uppercase letters, numbers,
85
- # hyphen, single-quote, double-quote, space, and exclamation point.
86
- #
87
- # @example
88
- # require "gcloud"
89
- #
90
- # gcloud = Gcloud.new
91
- # resource_manager = gcloud.resource_manager
92
- # project = resource_manager.project "tokyo-rain-123"
93
- # project.name = "My Project"
94
- #
95
- def name= new_name
96
- ensure_service!
97
- @gapi.name = new_name
98
- @gapi = service.update_project @gapi
99
- end
100
-
101
- ##
102
- # The labels associated with this project.
103
- #
104
- # Label keys must be between 1 and 63 characters long and must conform to
105
- # the regular expression <code>[a-z]([-a-z0-9]*[a-z0-9])?</code>.
106
- #
107
- # Label values must be between 0 and 63 characters long and must conform
108
- # to the regular expression <code>([a-z]([-a-z0-9]*[a-z0-9])?)?</code>.
109
- #
110
- # No more than 256 labels can be associated with a given resource.
111
- # (`Hash`)
112
- #
113
- # @yield [labels] a block for setting labels
114
- # @yieldparam [Hash] labels the hash accepting labels
115
- #
116
- # @example Labels are read-only and cannot be changed:
117
- # require "gcloud"
118
- #
119
- # gcloud = Gcloud.new
120
- # resource_manager = gcloud.resource_manager
121
- # project = resource_manager.project "tokyo-rain-123"
122
- # project.labels["env"] #=> "dev" # read only
123
- # project.labels["env"] = "production" # raises error
124
- #
125
- # @example Labels can be updated by passing a block, or with {#labels=}:
126
- # require "gcloud"
127
- #
128
- # gcloud = Gcloud.new
129
- # resource_manager = gcloud.resource_manager
130
- # project = resource_manager.project "tokyo-rain-123"
131
- # project.labels do |labels|
132
- # labels["env"] = "production"
133
- # end
134
- #
135
- def labels
136
- labels = @gapi.labels.to_h
137
- if block_given?
138
- yielded_labels = labels.dup
139
- yield yielded_labels
140
- self.labels = yielded_labels if yielded_labels != labels # changed
141
- else
142
- labels.freeze
143
- end
144
- end
145
-
146
- ##
147
- # Updates the labels associated with this project.
148
- #
149
- # Label keys must be between 1 and 63 characters long and must conform to
150
- # the regular expression <code>[a-z]([-a-z0-9]*[a-z0-9])?</code>.
151
- #
152
- # Label values must be between 0 and 63 characters long and must conform
153
- # to the regular expression <code>([a-z]([-a-z0-9]*[a-z0-9])?)?</code>.
154
- #
155
- # No more than 256 labels can be associated with a given resource.
156
- # (`Hash`)
157
- #
158
- # @example
159
- # require "gcloud"
160
- #
161
- # gcloud = Gcloud.new
162
- # resource_manager = gcloud.resource_manager
163
- # project = resource_manager.project "tokyo-rain-123"
164
- # project.labels = { "env" => "production" }
165
- #
166
- def labels= new_labels
167
- ensure_service!
168
- @gapi.labels = new_labels
169
- @gapi = service.update_project @gapi
170
- end
171
-
172
- ##
173
- # The time that this project was created.
174
- #
175
- def created_at
176
- Time.parse @gapi.create_time
177
- rescue
178
- nil
179
- end
180
-
181
- ##
182
- # The project lifecycle state.
183
- #
184
- # Possible values are:
185
- # * `ACTIVE` - The normal and active state.
186
- # * `DELETE_REQUESTED` - The project has been marked for deletion by the
187
- # user (by invoking ##delete) or by the system (Google Cloud
188
- # Platform). This can generally be reversed by invoking {#undelete}.
189
- # * `DELETE_IN_PROGRESS` - The process of deleting the project has begun.
190
- # Reversing the deletion is no longer possible.
191
- # * `LIFECYCLE_STATE_UNSPECIFIED` - Unspecified state. This is only
192
- # used/useful for distinguishing unset values.
193
- #
194
- def state
195
- @gapi.lifecycle_state
196
- end
197
-
198
- ##
199
- # Checks if the state is `ACTIVE`.
200
- def active?
201
- return false if state.nil?
202
- "ACTIVE".casecmp(state).zero?
203
- end
204
-
205
- ##
206
- # Checks if the state is `LIFECYCLE_STATE_UNSPECIFIED`.
207
- def unspecified?
208
- return false if state.nil?
209
- "LIFECYCLE_STATE_UNSPECIFIED".casecmp(state).zero?
210
- end
211
-
212
- ##
213
- # Checks if the state is `DELETE_REQUESTED`.
214
- def delete_requested?
215
- return false if state.nil?
216
- "DELETE_REQUESTED".casecmp(state).zero?
217
- end
218
-
219
- ##
220
- # Checks if the state is `DELETE_IN_PROGRESS`.
221
- def delete_in_progress?
222
- return false if state.nil?
223
- "DELETE_IN_PROGRESS".casecmp(state).zero?
224
- end
225
-
226
- ##
227
- # Updates the project in a single API call. See {Project::Updater}
228
- #
229
- # @yield [project] a block yielding a project delegate
230
- # @yieldparam [Project::Updater] project the delegate object for updating
231
- # the project
232
- #
233
- # @example
234
- # require "gcloud"
235
- #
236
- # gcloud = Gcloud.new
237
- # resource_manager = gcloud.resource_manager
238
- # project = resource_manager.project "tokyo-rain-123"
239
- # project.update do |p|
240
- # p.name = "My Project"
241
- # p.labels["env"] = "production"
242
- # end
243
- #
244
- def update
245
- updater = Updater.from_project self
246
- yield updater
247
- if updater.gapi.to_h != @gapi.to_h # changed
248
- @gapi = service.update_project updater.gapi
249
- end
250
- self
251
- end
252
-
253
- ##
254
- # Reloads the project (with updated state) from the Google Cloud Resource
255
- # Manager service.
256
- #
257
- # @example
258
- # require "gcloud"
259
- #
260
- # gcloud = Gcloud.new
261
- # resource_manager = gcloud.resource_manager
262
- # project = resource_manager.project "tokyo-rain-123"
263
- # project.reload!
264
- #
265
- def reload!
266
- @gapi = service.get_project project_id
267
- end
268
- alias_method :refresh!, :reload!
269
-
270
- ##
271
- # Marks the project for deletion. This method will only affect the project
272
- # if the following criteria are met:
273
- #
274
- # * The project does not have a billing account associated with it.
275
- # * The project has a lifecycle state of `ACTIVE`.
276
- # * This method changes the project's lifecycle state from `ACTIVE` to
277
- # `DELETE_REQUESTED`. The deletion starts at an unspecified time, at
278
- # which point the lifecycle state changes to `DELETE_IN_PROGRESS`.
279
- #
280
- # Until the deletion completes, you can check the lifecycle state by
281
- # calling #reload!, or by retrieving the project with Manager#project. The
282
- # project remains visible to Manager#project and Manager#projects, but
283
- # cannot be updated.
284
- #
285
- # After the deletion completes, the project is not retrievable by the
286
- # Manager#project and Manager#projects methods.
287
- #
288
- # The caller must have modify permissions for this project.
289
- #
290
- # @example
291
- # require "gcloud"
292
- #
293
- # gcloud = Gcloud.new
294
- # resource_manager = gcloud.resource_manager
295
- # project = resource_manager.project "tokyo-rain-123"
296
- # project.active? #=> true
297
- # project.delete
298
- # project.active? #=> false
299
- # project.delete_requested? #=> true
300
- #
301
- def delete
302
- service.delete_project project_id
303
- reload!
304
- true
305
- end
306
-
307
- ##
308
- # Restores the project. You can only use this method for a project that
309
- # has a lifecycle state of `DELETE_REQUESTED`. After deletion starts, as
310
- # indicated by a lifecycle state of `DELETE_IN_PROGRESS`, the project
311
- # cannot be restored.
312
- #
313
- # The caller must have modify permissions for this project.
314
- #
315
- # @example
316
- # require "gcloud"
317
- #
318
- # gcloud = Gcloud.new
319
- # resource_manager = gcloud.resource_manager
320
- # project = resource_manager.project "tokyo-rain-123"
321
- # project.delete_requested? #=> true
322
- # project.undelete
323
- # project.delete_requested? #=> false
324
- # project.active? #=> true
325
- #
326
- def undelete
327
- service.undelete_project project_id
328
- reload!
329
- true
330
- end
331
-
332
- ##
333
- # Gets and updates the [Cloud IAM](https://cloud.google.com/iam/) access
334
- # control policy for this project.
335
- #
336
- # @see https://cloud.google.com/iam/docs/managing-policies Managing
337
- # Policies
338
- # @see https://cloud.google.com/resource-manager/reference/rest/v1beta1/projects/setIamPolicy
339
- # projects.setIamPolicy
340
- #
341
- # @param [Boolean] force Force load the latest policy when `true`.
342
- # Otherwise the policy will be memoized to reduce the number of API
343
- # calls made. The default is `false`.
344
- #
345
- # @yield [policy] A block for updating the policy. The latest policy will
346
- # be read from the service and passed to the block. After the block
347
- # completes, the modified policy will be written to the service.
348
- # @yieldparam [Policy] policy the current Cloud IAM Policy for this
349
- # project
350
- #
351
- # @return [Policy] the current Cloud IAM Policy for this project
352
- #
353
- # @example Policy values are memoized to reduce the number of API calls:
354
- # require "gcloud"
355
- #
356
- # gcloud = Gcloud.new
357
- # resource_manager = gcloud.resource_manager
358
- # project = resource_manager.project "tokyo-rain-123"
359
- #
360
- # policy = project.policy # API call
361
- # policy_2 = project.policy # No API call
362
- #
363
- # @example Use `force` to retrieve the latest policy from the service:
364
- # require "gcloud"
365
- #
366
- # gcloud = Gcloud.new
367
- # resource_manager = gcloud.resource_manager
368
- # project = resource_manager.project "tokyo-rain-123"
369
- #
370
- # policy = project.policy force: true # API call
371
- # policy_2 = project.policy force: true # API call
372
- #
373
- # @example Update the policy by passing a block:
374
- # require "gcloud"
375
- #
376
- # gcloud = Gcloud.new
377
- # resource_manager = gcloud.resource_manager
378
- # project = resource_manager.project "tokyo-rain-123"
379
- #
380
- # policy = project.policy do |p|
381
- # p.add "roles/owner", "user:owner@example.com"
382
- # end # 2 API calls
383
- #
384
- def policy force: false
385
- @policy = nil if force || block_given?
386
- @policy ||= begin
387
- ensure_service!
388
- gapi = service.get_policy project_id
389
- Policy.from_gapi gapi
390
- end
391
- return @policy unless block_given?
392
- p = @policy.deep_dup
393
- yield p
394
- self.policy = p
395
- end
396
-
397
- ##
398
- # Updates the [Cloud IAM](https://cloud.google.com/iam/) access control
399
- # policy for this project. The policy should be read from {#policy}.
400
- # See {Gcloud::ResourceManager::Policy} for an explanation of the policy
401
- # `etag` property and how to modify policies.
402
- #
403
- # You can also update the policy by passing a block to {#policy}, which
404
- # will call this method internally after the block completes.
405
- #
406
- # @see https://cloud.google.com/iam/docs/managing-policies Managing
407
- # Policies
408
- # @see https://cloud.google.com/resource-manager/reference/rest/v1beta1/projects/setIamPolicy
409
- # projects.setIamPolicy
410
- #
411
- # @param [Policy] new_policy a new or modified Cloud IAM Policy for this
412
- # project
413
- #
414
- # @example
415
- # require "gcloud"
416
- #
417
- # gcloud = Gcloud.new
418
- # resource_manager = gcloud.resource_manager
419
- # project = resource_manager.project "tokyo-rain-123"
420
- #
421
- # policy = project.policy # API call
422
- #
423
- # policy.add "roles/owner", "user:owner@example.com"
424
- #
425
- # project.policy = policy # API call
426
- #
427
- def policy= new_policy
428
- ensure_service!
429
- gapi = service.set_policy project_id, new_policy.to_gapi
430
- # Convert symbols to strings for backwards compatibility.
431
- # This will go away when we add a ResourceManager::Policy class.
432
- @policy = Policy.from_gapi gapi
433
- end
434
-
435
- ##
436
- # Tests the specified permissions against the [Cloud
437
- # IAM](https://cloud.google.com/iam/) access control policy.
438
- #
439
- # @see https://cloud.google.com/iam/docs/managing-policies Managing
440
- # Policies
441
- #
442
- # @param [String, Array<String>] permissions The set of permissions to
443
- # check access for. Permissions with wildcards (such as `*` or
444
- # `storage.*`) are not allowed.
445
- #
446
- # @return [Array<String>] The permissions that have access
447
- #
448
- # @example
449
- # require "gcloud"
450
- #
451
- # gcloud = Gcloud.new
452
- # resource_manager = gcloud.resource_manager
453
- # project = resource_manager.project "tokyo-rain-123"
454
- # perms = project.test_permissions "resourcemanager.projects.get",
455
- # "resourcemanager.projects.delete"
456
- # perms.include? "resourcemanager.projects.get" #=> true
457
- # perms.include? "resourcemanager.projects.delete" #=> false
458
- #
459
- def test_permissions *permissions
460
- permissions = Array(permissions).flatten
461
- ensure_service!
462
- gapi = service.test_permissions project_id, permissions
463
- gapi.permissions
464
- end
465
-
466
- ##
467
- # @private New Change from a Google API Client object.
468
- def self.from_gapi gapi, service
469
- new.tap do |p|
470
- p.gapi = gapi
471
- p.service = service
472
- end
473
- end
474
-
475
- protected
476
-
477
- ##
478
- # Raise an error unless an active service is available.
479
- def ensure_service!
480
- fail "Must have active connection" unless service
481
- end
482
- end
483
- end
484
- end