rcloadenv 0.0.1.rc1

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.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 7a87297ed8dee36a3aed034991042cd36fca122b
4
+ data.tar.gz: 1714fafa57d7e35fe6f5a258a5ffd939f7253bce
5
+ SHA512:
6
+ metadata.gz: 3f8cc786c9a142a0d7381488b9d8282d4507bceb9e9b3c14b0b4e0597f6be5dff2ce2dd4590a4b5b2aad093a37dc34f32479dccf73d28f83ff27edb51ebda12d
7
+ data.tar.gz: 977c7bb995baa901fb36934b4d5f9ec552047d2778d3e7212c207307760748eae840d77d3ea385d70944b1bce34e56b5b2b5fe7546a4f63368bd8c2d9083a128
data/.yardopts ADDED
@@ -0,0 +1,9 @@
1
+ --no-private
2
+ --title=RCLoadEnv
3
+ --markup markdown
4
+
5
+ ./lib/rcloadenv.rb
6
+ ./lib/rcloadenv/*.rb
7
+ -
8
+ README.md
9
+ CHANGELOG.md
data/CHANGELOG.md ADDED
@@ -0,0 +1,6 @@
1
+ # Changelog for Ruby rcloadenv
2
+
3
+ ## v0.1.0 / (not yet released)
4
+
5
+ * Initial implementation; parallels the nodejs implementation features
6
+ including all supported command line arguments.
data/README.md ADDED
@@ -0,0 +1,132 @@
1
+ # Ruby implementation of rcloadenv
2
+
3
+ `rcloadenv` is a tool for loading configuration from the [Runtime Config
4
+ API](https://cloud.google.com/deployment-manager/runtime-configurator/).
5
+
6
+ This is a Ruby implementation that may be installed as a Rubygem.
7
+
8
+ ## Usage
9
+
10
+ Install the gem using
11
+
12
+ gem install rcloadenv
13
+
14
+ Alternately, include "rcloadenv" in your bundle.
15
+
16
+ You may then invoke the "rcloadenv" binary. You must pass the name of the
17
+ runtime config resource, and then the command to execute. For example:
18
+
19
+ bundle exec rcloadenv my-config -- bin/rails s
20
+
21
+ If `rcloadenv` is run on Google Cloud Platform hosting (such as Google Compute
22
+ Engine, Container Engine, or App Engine), then it infers the project name and
23
+ credentials from the hosting environment.
24
+
25
+ If you are not running on GCP, you may set the project using the `--project`
26
+ switch, or by setting the `GOOGLE_CLOUD_PROJECT` environment variable. For
27
+ example:
28
+
29
+ bundle exec rcloadenv --project=my-project my-config -- bin/rails s
30
+
31
+ Run `rcloadenv --help` for more information on flags you can set.
32
+ When not running on GCP, credentials are obtained from
33
+ [Application Default Credentials](https://developers.google.com/identity/protocols/application-default-credentials)
34
+ so you can the `GOOGLE_APPLICATION_CREDENTIALS` environment variable or
35
+ configure `gcloud auth`.
36
+
37
+ ## Example: Loading the Rails SECRET_KEY in Google App Engine
38
+
39
+ This gem is commonly used to provide sensitive information such as API keys or
40
+ database passwords to a Ruby application deployed to Google Cloud Platform,
41
+ without exposing them to configuration files checked into source control.
42
+
43
+ For example, Rails applications require the environment variable `SECRET_KEY`
44
+ to be set in the production environment. When deploying a Rails application to
45
+ Google App Engine, you could set this environment variable in the "app.yaml"
46
+ configuration file, but that is not recommended because the "app.yaml" file
47
+ is commonly checked into source control. Instead, you can set the `SECRET_KEY`
48
+ value securely in the Runtime Config service, and use `rcloadenv` to load it
49
+ into the Rails app. Here's how.
50
+
51
+ 1. We will assume that:
52
+
53
+ * You have a Ruby on Rails application
54
+ * You have a Google Cloud App Engine project to deploy it to
55
+ * You have installed the Google Cloud SDK, have logged in, and have
56
+ set your project name in the configuration.
57
+
58
+ See https://cloud.google.com/ruby for more information on deploying a
59
+ Ruby application to Google App Engine.
60
+
61
+ 2. Enable the Runtime Config API for your project using the Google Cloud
62
+ Console (https://console.cloud.google.com/). To do so, navigate to
63
+ https://console.cloud.google.com/apis/api/runtimeconfig.googleapis.com/overview
64
+ choose the correct project and click "Enable".
65
+
66
+ 3. Use the gcloud command line to create a Runtime Configuration:
67
+
68
+ gcloud beta runtime-config configs create my-config
69
+
70
+ Choose a name for your configuration and replace `my-config` with that
71
+ name. Any keys you set in this configuration will be loaded as environment
72
+ variables in your application.
73
+
74
+ Because you will be storing sensitive information in this configuration
75
+ resource, you may consider restricting access to it. See
76
+ https://cloud.google.com/deployment-manager/runtime-configurator/access-control
77
+ for more information. If you do so, make sure any service accounts that
78
+ run `rcloadenv` retain access to the resource. That includes the App Engine
79
+ service account (which runs your application in App Engine) and the
80
+ Cloud Build service account (which performs build steps such as asset
81
+ precompilation for your application).
82
+
83
+ 4. Create a secret key
84
+
85
+ bundle exec rake secret
86
+
87
+ This will generate a random key and print it to the console.
88
+
89
+ 5. Use the gcloud command line to set the `SECRET_KEY` in your configuration.
90
+
91
+ gcloud beta runtime-config configs variables set SECRET_KEY 12345678 \
92
+ --config-name=my-config
93
+
94
+ Replace `my-config` with the name of your configuration, and `12345678`
95
+ with the secret key that you generated above.
96
+
97
+ 6. Add the `rcloadenv` gem to your Gemfile, and run `bundle install` to update
98
+ your bundle.
99
+
100
+ 7. Now set the entrypoint in your "app.yaml" configuration file to load the
101
+ Runtime Configuration into environment variables using `rcloadenv`. For
102
+ example, if entrypoint would normally be:
103
+
104
+ bundle exec bin/rails s
105
+
106
+ Then change it to:
107
+
108
+ bundle exec rcloadenv my-config -- bin/rails s
109
+
110
+ Replace `my-config` with the name of your configuration.
111
+
112
+ (If you previously set SECRET_KEY in the env_variables section of your
113
+ app.yaml, remove it. You no longer need it!)
114
+
115
+ Now when you deploy and run your application, it should load the
116
+ SECRET_KEY value from your Runtime Configuration.
117
+
118
+ 8. If you have set any custom build steps for your application that require
119
+ this configuration, make sure you update them too. For example, you might
120
+ use the following to build rails assets:
121
+
122
+ bundle exec rcloadenv my-config -- rake assets:precompile
123
+
124
+ You may set additional environment variables, such as database names and
125
+ passwords, in this config as well, whether or not they are sensitive. It's a
126
+ useful way to manage your application's configuration independent of its
127
+ source code and config files.
128
+
129
+ ## More info
130
+
131
+ More info can be found in the general cross-language rcloadenv README at
132
+ https://github.com/GoogleCloudPlatform/rcloadenv
data/bin/rcloadenv ADDED
@@ -0,0 +1,29 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ # Copyright 2017 Google Inc.
4
+ #
5
+ # Licensed under the Apache License, Version 2.0 (the "License");
6
+ # you may not use this file except in compliance with the License.
7
+ # You may obtain a copy of the License at
8
+ #
9
+ # http://www.apache.org/licenses/LICENSE-2.0
10
+ #
11
+ # Unless required by applicable law or agreed to in writing, software
12
+ # distributed under the License is distributed on an "AS IS" BASIS,
13
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ # See the License for the specific language governing permissions and
15
+ # limitations under the License.
16
+
17
+ begin
18
+ require "rcloadenv"
19
+ rescue LoadError
20
+ # If the gem is not installed, attempt to use the library from local source
21
+ # (i.e. for local testing).
22
+ path = File.dirname ::File.dirname __FILE__
23
+ path = File.join path, "lib"
24
+ $:.unshift path
25
+ require "rcloadenv"
26
+ end
27
+
28
+ cli = RCLoadEnv::CLI.new ARGV
29
+ cli.run
data/lib/rcloadenv.rb ADDED
@@ -0,0 +1,30 @@
1
+ # Copyright 2017 Google Inc.
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 "optparse"
17
+
18
+ ##
19
+ # # Ruby implementation of rcloadenv
20
+ #
21
+ # See https://github.com/GoogleCloudPlatform/rcloadenv for more information
22
+ # on this tool.
23
+ #
24
+ module RCLoadEnv
25
+ end
26
+
27
+ require "rcloadenv/cli"
28
+ require "rcloadenv/credentials"
29
+ require "rcloadenv/loader"
30
+ require "rcloadenv/version"
@@ -0,0 +1,24 @@
1
+ # Copyright 2017 Google Inc.
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
+ # As of google-api-client 0.13.1 (July 2017) there isn't a client for
17
+ # RuntimeConfig V1beta1, but there might be in the future. So first we attempt
18
+ # to load a client from google-api-client, but if it doesn't exist, we use
19
+ # a vendored client we generated on 2017-07-19.
20
+ begin
21
+ require "google/apis/runtimeconfig_v1beta1"
22
+ rescue LoadError
23
+ require "rcloadenv/google/apis/runtimeconfig_v1beta1"
24
+ end
@@ -0,0 +1,83 @@
1
+ # Copyright 2017 Google Inc.
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 "optparse"
17
+
18
+ module RCLoadEnv
19
+
20
+ ##
21
+ # Implementation of the rcloadenv command line.
22
+ #
23
+ class CLI
24
+
25
+ ##
26
+ # Create a command line handler.
27
+ #
28
+ # @param [Array<String>] args Command-line arguments
29
+ #
30
+ def initialize args
31
+ @project = nil
32
+ @exclude = []
33
+ @include = []
34
+ @override = false
35
+ @debug = false
36
+ parser = OptionParser.new do |opts|
37
+ opts.banner = "Usage: rcloadenv [options] <config-name> -- <command>"
38
+ opts.on "-p name", "--project=name", "--projectId=name",
39
+ "Project to read runtime config from" do |p|
40
+ @project = p
41
+ end
42
+ opts.on "-E key1,key2,key3", "--except=key1,key2,key3",
43
+ "Runtime-config variables to exclude, comma delimited" do |v|
44
+ @exclude += v.split ","
45
+ end
46
+ opts.on "-O key1,key2,key3", "--only=key1,key2,key3",
47
+ "Runtime-config variables to include, comma delimited" do |v|
48
+ @include += v.split ","
49
+ end
50
+ opts.on "-o", "--override",
51
+ "Cause config to override existing environment variables" do
52
+ @override = true
53
+ end
54
+ opts.on "-d", "--debug", "Enable debug output" do
55
+ @debug = true
56
+ end
57
+ opts.on "-?", "--help", "Show the help text and exit" do
58
+ puts parser.help
59
+ exit
60
+ end
61
+ end
62
+ @command_list = parser.parse args
63
+ @config_name = @command_list.shift
64
+ unless @config_name && @command_list.size > 0
65
+ STDERR.puts "rcloadenv: config name and command are both required."
66
+ STDERR.puts parser.help
67
+ exit 1
68
+ end
69
+ end
70
+
71
+ ##
72
+ # Run the command line handler. This method either never returns or throws
73
+ # an exception.
74
+ #
75
+ def run
76
+ loader = RCLoadEnv::Loader.new @config_name,
77
+ exclude: @exclude, include: @include, override: @override,
78
+ project: @project, debug: @debug
79
+ loader.modify_env ENV
80
+ exec(*@command_list)
81
+ end
82
+ end
83
+ end
@@ -0,0 +1,28 @@
1
+ # Copyright 2017 Google Inc.
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 "rcloadenv/api_client"
17
+ require "google/cloud/credentials"
18
+
19
+ module RCLoadEnv
20
+ ##
21
+ # @private Represents the OAuth 2.0 signing logic for Runtime Config.
22
+ #
23
+ class Credentials < Google::Cloud::Credentials
24
+ SCOPE = [Google::Apis::RuntimeconfigV1beta1::AUTH_CLOUDRUNTIMECONFIG]
25
+ PATH_ENV_VARS = %w(GOOGLE_CLOUD_KEYFILE GCLOUD_KEYFILE)
26
+ JSON_ENV_VARS = %w(GOOGLE_CLOUD_KEYFILE_JSON GCLOUD_KEYFILE_JSON)
27
+ end
28
+ end
@@ -0,0 +1,44 @@
1
+ # Copyright 2015 Google Inc.
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
+ # Note this is a vendored copy of this class, generated 2017-07-19 alongside
16
+ # google-api-client 0.13.1.
17
+
18
+ # Vendored location: "rcloadenv/google/apis/runtimeconfig_v1beta1"
19
+ require 'rcloadenv/google/apis/runtimeconfig_v1beta1/service.rb'
20
+ require 'rcloadenv/google/apis/runtimeconfig_v1beta1/classes.rb'
21
+ require 'rcloadenv/google/apis/runtimeconfig_v1beta1/representations.rb'
22
+
23
+ module Google
24
+ module Apis
25
+ # Google Cloud Runtime Configuration API
26
+ #
27
+ # The Runtime Configurator allows you to dynamically configure and expose
28
+ # variables through Google Cloud Platform. In addition, you can also set
29
+ # Watchers and Waiters that will watch for changes to your data and return based
30
+ # on certain conditions.
31
+ #
32
+ # @see https://cloud.google.com/deployment-manager/runtime-configurator/
33
+ module RuntimeconfigV1beta1
34
+ VERSION = 'V1beta1'
35
+ REVISION = '20170620'
36
+
37
+ # View and manage your data across Google Cloud Platform services
38
+ AUTH_CLOUD_PLATFORM = 'https://www.googleapis.com/auth/cloud-platform'
39
+
40
+ # Manage your Google Cloud Platform services' runtime configuration
41
+ AUTH_CLOUDRUNTIMECONFIG = 'https://www.googleapis.com/auth/cloudruntimeconfig'
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,805 @@
1
+ # Copyright 2015 Google Inc.
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 'date'
16
+ require 'google/apis/core/base_service'
17
+ require 'google/apis/core/json_representation'
18
+ require 'google/apis/core/hashable'
19
+ require 'google/apis/errors'
20
+
21
+ module Google
22
+ module Apis
23
+ module RuntimeconfigV1beta1
24
+
25
+ # Request message for `SetIamPolicy` method.
26
+ class SetIamPolicyRequest
27
+ include Google::Apis::Core::Hashable
28
+
29
+ # Defines an Identity and Access Management (IAM) policy. It is used to
30
+ # specify access control policies for Cloud Platform resources.
31
+ # A `Policy` consists of a list of `bindings`. A `Binding` binds a list of
32
+ # `members` to a `role`, where the members can be user accounts, Google groups,
33
+ # Google domains, and service accounts. A `role` is a named list of permissions
34
+ # defined by IAM.
35
+ # **Example**
36
+ # `
37
+ # "bindings": [
38
+ # `
39
+ # "role": "roles/owner",
40
+ # "members": [
41
+ # "user:mike@example.com",
42
+ # "group:admins@example.com",
43
+ # "domain:google.com",
44
+ # "serviceAccount:my-other-app@appspot.gserviceaccount.com",
45
+ # ]
46
+ # `,
47
+ # `
48
+ # "role": "roles/viewer",
49
+ # "members": ["user:sean@example.com"]
50
+ # `
51
+ # ]
52
+ # `
53
+ # For a description of IAM and its features, see the
54
+ # [IAM developer's guide](https://cloud.google.com/iam).
55
+ # Corresponds to the JSON property `policy`
56
+ # @return [Google::Apis::RuntimeconfigV1beta1::Policy]
57
+ attr_accessor :policy
58
+
59
+ def initialize(**args)
60
+ update!(**args)
61
+ end
62
+
63
+ # Update properties of this object
64
+ def update!(**args)
65
+ @policy = args[:policy] if args.key?(:policy)
66
+ end
67
+ end
68
+
69
+ # The `Status` type defines a logical error model that is suitable for different
70
+ # programming environments, including REST APIs and RPC APIs. It is used by
71
+ # [gRPC](https://github.com/grpc). The error model is designed to be:
72
+ # - Simple to use and understand for most users
73
+ # - Flexible enough to meet unexpected needs
74
+ # # Overview
75
+ # The `Status` message contains three pieces of data: error code, error message,
76
+ # and error details. The error code should be an enum value of
77
+ # google.rpc.Code, but it may accept additional error codes if needed. The
78
+ # error message should be a developer-facing English message that helps
79
+ # developers *understand* and *resolve* the error. If a localized user-facing
80
+ # error message is needed, put the localized message in the error details or
81
+ # localize it in the client. The optional error details may contain arbitrary
82
+ # information about the error. There is a predefined set of error detail types
83
+ # in the package `google.rpc` that can be used for common error conditions.
84
+ # # Language mapping
85
+ # The `Status` message is the logical representation of the error model, but it
86
+ # is not necessarily the actual wire format. When the `Status` message is
87
+ # exposed in different client libraries and different wire protocols, it can be
88
+ # mapped differently. For example, it will likely be mapped to some exceptions
89
+ # in Java, but more likely mapped to some error codes in C.
90
+ # # Other uses
91
+ # The error model and the `Status` message can be used in a variety of
92
+ # environments, either with or without APIs, to provide a
93
+ # consistent developer experience across different environments.
94
+ # Example uses of this error model include:
95
+ # - Partial errors. If a service needs to return partial errors to the client,
96
+ # it may embed the `Status` in the normal response to indicate the partial
97
+ # errors.
98
+ # - Workflow errors. A typical workflow has multiple steps. Each step may
99
+ # have a `Status` message for error reporting.
100
+ # - Batch operations. If a client uses batch request and batch response, the
101
+ # `Status` message should be used directly inside batch response, one for
102
+ # each error sub-response.
103
+ # - Asynchronous operations. If an API call embeds asynchronous operation
104
+ # results in its response, the status of those operations should be
105
+ # represented directly using the `Status` message.
106
+ # - Logging. If some API errors are stored in logs, the message `Status` could
107
+ # be used directly after any stripping needed for security/privacy reasons.
108
+ class Status
109
+ include Google::Apis::Core::Hashable
110
+
111
+ # A list of messages that carry the error details. There will be a
112
+ # common set of message types for APIs to use.
113
+ # Corresponds to the JSON property `details`
114
+ # @return [Array<Hash<String,Object>>]
115
+ attr_accessor :details
116
+
117
+ # The status code, which should be an enum value of google.rpc.Code.
118
+ # Corresponds to the JSON property `code`
119
+ # @return [Fixnum]
120
+ attr_accessor :code
121
+
122
+ # A developer-facing error message, which should be in English. Any
123
+ # user-facing error message should be localized and sent in the
124
+ # google.rpc.Status.details field, or localized by the client.
125
+ # Corresponds to the JSON property `message`
126
+ # @return [String]
127
+ attr_accessor :message
128
+
129
+ def initialize(**args)
130
+ update!(**args)
131
+ end
132
+
133
+ # Update properties of this object
134
+ def update!(**args)
135
+ @details = args[:details] if args.key?(:details)
136
+ @code = args[:code] if args.key?(:code)
137
+ @message = args[:message] if args.key?(:message)
138
+ end
139
+ end
140
+
141
+ # Associates `members` with a `role`.
142
+ class Binding
143
+ include Google::Apis::Core::Hashable
144
+
145
+ # Specifies the identities requesting access for a Cloud Platform resource.
146
+ # `members` can have the following values:
147
+ # * `allUsers`: A special identifier that represents anyone who is
148
+ # on the internet; with or without a Google account.
149
+ # * `allAuthenticatedUsers`: A special identifier that represents anyone
150
+ # who is authenticated with a Google account or a service account.
151
+ # * `user:`emailid``: An email address that represents a specific Google
152
+ # account. For example, `alice@gmail.com` or `joe@example.com`.
153
+ # * `serviceAccount:`emailid``: An email address that represents a service
154
+ # account. For example, `my-other-app@appspot.gserviceaccount.com`.
155
+ # * `group:`emailid``: An email address that represents a Google group.
156
+ # For example, `admins@example.com`.
157
+ # * `domain:`domain``: A Google Apps domain name that represents all the
158
+ # users of that domain. For example, `google.com` or `example.com`.
159
+ # Corresponds to the JSON property `members`
160
+ # @return [Array<String>]
161
+ attr_accessor :members
162
+
163
+ # Role that is assigned to `members`.
164
+ # For example, `roles/viewer`, `roles/editor`, or `roles/owner`.
165
+ # Required
166
+ # Corresponds to the JSON property `role`
167
+ # @return [String]
168
+ attr_accessor :role
169
+
170
+ def initialize(**args)
171
+ update!(**args)
172
+ end
173
+
174
+ # Update properties of this object
175
+ def update!(**args)
176
+ @members = args[:members] if args.key?(:members)
177
+ @role = args[:role] if args.key?(:role)
178
+ end
179
+ end
180
+
181
+ # A generic empty message that you can re-use to avoid defining duplicated
182
+ # empty messages in your APIs. A typical example is to use it as the request
183
+ # or the response type of an API method. For instance:
184
+ # service Foo `
185
+ # rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty);
186
+ # `
187
+ # The JSON representation for `Empty` is empty JSON object ````.
188
+ class Empty
189
+ include Google::Apis::Core::Hashable
190
+
191
+ def initialize(**args)
192
+ update!(**args)
193
+ end
194
+
195
+ # Update properties of this object
196
+ def update!(**args)
197
+ end
198
+ end
199
+
200
+ # A Cardinality condition for the Waiter resource. A cardinality condition is
201
+ # met when the number of variables under a specified path prefix reaches a
202
+ # predefined number. For example, if you set a Cardinality condition where
203
+ # the `path` is set to `/foo` and the number of paths is set to 2, the
204
+ # following variables would meet the condition in a RuntimeConfig resource:
205
+ # + `/foo/variable1 = "value1"`
206
+ # + `/foo/variable2 = "value2"`
207
+ # + `/bar/variable3 = "value3"`
208
+ # It would not would not satisify the same condition with the `number` set to
209
+ # 3, however, because there is only 2 paths that start with `/foo`.
210
+ # Cardinality conditions are recursive; all subtrees under the specific
211
+ # path prefix are counted.
212
+ class Cardinality
213
+ include Google::Apis::Core::Hashable
214
+
215
+ # The number variables under the `path` that must exist to meet this
216
+ # condition. Defaults to 1 if not specified.
217
+ # Corresponds to the JSON property `number`
218
+ # @return [Fixnum]
219
+ attr_accessor :number
220
+
221
+ # The root of the variable subtree to monitor. For example, `/foo`.
222
+ # Corresponds to the JSON property `path`
223
+ # @return [String]
224
+ attr_accessor :path
225
+
226
+ def initialize(**args)
227
+ update!(**args)
228
+ end
229
+
230
+ # Update properties of this object
231
+ def update!(**args)
232
+ @number = args[:number] if args.key?(:number)
233
+ @path = args[:path] if args.key?(:path)
234
+ end
235
+ end
236
+
237
+ # `ListConfigs()` returns the following response. The order of returned
238
+ # objects is arbitrary; that is, it is not ordered in any particular way.
239
+ class ListConfigsResponse
240
+ include Google::Apis::Core::Hashable
241
+
242
+ # A list of the configurations in the project. The order of returned
243
+ # objects is arbitrary; that is, it is not ordered in any particular way.
244
+ # Corresponds to the JSON property `configs`
245
+ # @return [Array<Google::Apis::RuntimeconfigV1beta1::RuntimeConfig>]
246
+ attr_accessor :configs
247
+
248
+ # This token allows you to get the next page of results for list requests.
249
+ # If the number of results is larger than `pageSize`, use the `nextPageToken`
250
+ # as a value for the query parameter `pageToken` in the next list request.
251
+ # Subsequent list requests will have their own `nextPageToken` to continue
252
+ # paging through the results
253
+ # Corresponds to the JSON property `nextPageToken`
254
+ # @return [String]
255
+ attr_accessor :next_page_token
256
+
257
+ def initialize(**args)
258
+ update!(**args)
259
+ end
260
+
261
+ # Update properties of this object
262
+ def update!(**args)
263
+ @configs = args[:configs] if args.key?(:configs)
264
+ @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
265
+ end
266
+ end
267
+
268
+ # The condition that a Waiter resource is waiting for.
269
+ class EndCondition
270
+ include Google::Apis::Core::Hashable
271
+
272
+ # A Cardinality condition for the Waiter resource. A cardinality condition is
273
+ # met when the number of variables under a specified path prefix reaches a
274
+ # predefined number. For example, if you set a Cardinality condition where
275
+ # the `path` is set to `/foo` and the number of paths is set to 2, the
276
+ # following variables would meet the condition in a RuntimeConfig resource:
277
+ # + `/foo/variable1 = "value1"`
278
+ # + `/foo/variable2 = "value2"`
279
+ # + `/bar/variable3 = "value3"`
280
+ # It would not would not satisify the same condition with the `number` set to
281
+ # 3, however, because there is only 2 paths that start with `/foo`.
282
+ # Cardinality conditions are recursive; all subtrees under the specific
283
+ # path prefix are counted.
284
+ # Corresponds to the JSON property `cardinality`
285
+ # @return [Google::Apis::RuntimeconfigV1beta1::Cardinality]
286
+ attr_accessor :cardinality
287
+
288
+ def initialize(**args)
289
+ update!(**args)
290
+ end
291
+
292
+ # Update properties of this object
293
+ def update!(**args)
294
+ @cardinality = args[:cardinality] if args.key?(:cardinality)
295
+ end
296
+ end
297
+
298
+ # Response message for `TestIamPermissions` method.
299
+ class TestIamPermissionsResponse
300
+ include Google::Apis::Core::Hashable
301
+
302
+ # A subset of `TestPermissionsRequest.permissions` that the caller is
303
+ # allowed.
304
+ # Corresponds to the JSON property `permissions`
305
+ # @return [Array<String>]
306
+ attr_accessor :permissions
307
+
308
+ def initialize(**args)
309
+ update!(**args)
310
+ end
311
+
312
+ # Update properties of this object
313
+ def update!(**args)
314
+ @permissions = args[:permissions] if args.key?(:permissions)
315
+ end
316
+ end
317
+
318
+ # Response for the `ListVariables()` method.
319
+ class ListVariablesResponse
320
+ include Google::Apis::Core::Hashable
321
+
322
+ # This token allows you to get the next page of results for list requests.
323
+ # If the number of results is larger than `pageSize`, use the `nextPageToken`
324
+ # as a value for the query parameter `pageToken` in the next list request.
325
+ # Subsequent list requests will have their own `nextPageToken` to continue
326
+ # paging through the results
327
+ # Corresponds to the JSON property `nextPageToken`
328
+ # @return [String]
329
+ attr_accessor :next_page_token
330
+
331
+ # A list of variables and their values. The order of returned variable
332
+ # objects is arbitrary.
333
+ # Corresponds to the JSON property `variables`
334
+ # @return [Array<Google::Apis::RuntimeconfigV1beta1::Variable>]
335
+ attr_accessor :variables
336
+
337
+ def initialize(**args)
338
+ update!(**args)
339
+ end
340
+
341
+ # Update properties of this object
342
+ def update!(**args)
343
+ @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
344
+ @variables = args[:variables] if args.key?(:variables)
345
+ end
346
+ end
347
+
348
+ # A RuntimeConfig resource is the primary resource in the Cloud RuntimeConfig
349
+ # service. A RuntimeConfig resource consists of metadata and a hierarchy of
350
+ # variables.
351
+ class RuntimeConfig
352
+ include Google::Apis::Core::Hashable
353
+
354
+ # The resource name of a runtime config. The name must have the format:
355
+ # projects/[PROJECT_ID]/configs/[CONFIG_NAME]
356
+ # The `[PROJECT_ID]` must be a valid project ID, and `[CONFIG_NAME]` is an
357
+ # arbitrary name that matches RFC 1035 segment specification. The length of
358
+ # `[CONFIG_NAME]` must be less than 64 bytes.
359
+ # You pick the RuntimeConfig resource name, but the server will validate that
360
+ # the name adheres to this format. After you create the resource, you cannot
361
+ # change the resource's name.
362
+ # Corresponds to the JSON property `name`
363
+ # @return [String]
364
+ attr_accessor :name
365
+
366
+ # An optional description of the RuntimeConfig object.
367
+ # Corresponds to the JSON property `description`
368
+ # @return [String]
369
+ attr_accessor :description
370
+
371
+ def initialize(**args)
372
+ update!(**args)
373
+ end
374
+
375
+ # Update properties of this object
376
+ def update!(**args)
377
+ @name = args[:name] if args.key?(:name)
378
+ @description = args[:description] if args.key?(:description)
379
+ end
380
+ end
381
+
382
+ # Request for the `WatchVariable()` method.
383
+ class WatchVariableRequest
384
+ include Google::Apis::Core::Hashable
385
+
386
+ # If specified, checks the current timestamp of the variable and if the
387
+ # current timestamp is newer than `newerThan` timestamp, the method returns
388
+ # immediately.
389
+ # If not specified or the variable has an older timestamp, the watcher waits
390
+ # for a the value to change before returning.
391
+ # Corresponds to the JSON property `newerThan`
392
+ # @return [String]
393
+ attr_accessor :newer_than
394
+
395
+ def initialize(**args)
396
+ update!(**args)
397
+ end
398
+
399
+ # Update properties of this object
400
+ def update!(**args)
401
+ @newer_than = args[:newer_than] if args.key?(:newer_than)
402
+ end
403
+ end
404
+
405
+ # Response for the `ListWaiters()` method.
406
+ # Order of returned waiter objects is arbitrary.
407
+ class ListWaitersResponse
408
+ include Google::Apis::Core::Hashable
409
+
410
+ # This token allows you to get the next page of results for list requests.
411
+ # If the number of results is larger than `pageSize`, use the `nextPageToken`
412
+ # as a value for the query parameter `pageToken` in the next list request.
413
+ # Subsequent list requests will have their own `nextPageToken` to continue
414
+ # paging through the results
415
+ # Corresponds to the JSON property `nextPageToken`
416
+ # @return [String]
417
+ attr_accessor :next_page_token
418
+
419
+ # Found waiters in the project.
420
+ # Corresponds to the JSON property `waiters`
421
+ # @return [Array<Google::Apis::RuntimeconfigV1beta1::Waiter>]
422
+ attr_accessor :waiters
423
+
424
+ def initialize(**args)
425
+ update!(**args)
426
+ end
427
+
428
+ # Update properties of this object
429
+ def update!(**args)
430
+ @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
431
+ @waiters = args[:waiters] if args.key?(:waiters)
432
+ end
433
+ end
434
+
435
+ # Request message for `TestIamPermissions` method.
436
+ class TestIamPermissionsRequest
437
+ include Google::Apis::Core::Hashable
438
+
439
+ # The set of permissions to check for the `resource`. Permissions with
440
+ # wildcards (such as '*' or 'storage.*') are not allowed. For more
441
+ # information see
442
+ # [IAM Overview](https://cloud.google.com/iam/docs/overview#permissions).
443
+ # Corresponds to the JSON property `permissions`
444
+ # @return [Array<String>]
445
+ attr_accessor :permissions
446
+
447
+ def initialize(**args)
448
+ update!(**args)
449
+ end
450
+
451
+ # Update properties of this object
452
+ def update!(**args)
453
+ @permissions = args[:permissions] if args.key?(:permissions)
454
+ end
455
+ end
456
+
457
+ # A Waiter resource waits for some end condition within a RuntimeConfig resource
458
+ # to be met before it returns. For example, assume you have a distributed
459
+ # system where each node writes to a Variable resource indidicating the node's
460
+ # readiness as part of the startup process.
461
+ # You then configure a Waiter resource with the success condition set to wait
462
+ # until some number of nodes have checked in. Afterwards, your application
463
+ # runs some arbitrary code after the condition has been met and the waiter
464
+ # returns successfully.
465
+ # Once created, a Waiter resource is immutable.
466
+ # To learn more about using waiters, read the
467
+ # [Creating a Waiter](/deployment-manager/runtime-configurator/creating-a-waiter)
468
+ # documentation.
469
+ class Waiter
470
+ include Google::Apis::Core::Hashable
471
+
472
+ # The `Status` type defines a logical error model that is suitable for different
473
+ # programming environments, including REST APIs and RPC APIs. It is used by
474
+ # [gRPC](https://github.com/grpc). The error model is designed to be:
475
+ # - Simple to use and understand for most users
476
+ # - Flexible enough to meet unexpected needs
477
+ # # Overview
478
+ # The `Status` message contains three pieces of data: error code, error message,
479
+ # and error details. The error code should be an enum value of
480
+ # google.rpc.Code, but it may accept additional error codes if needed. The
481
+ # error message should be a developer-facing English message that helps
482
+ # developers *understand* and *resolve* the error. If a localized user-facing
483
+ # error message is needed, put the localized message in the error details or
484
+ # localize it in the client. The optional error details may contain arbitrary
485
+ # information about the error. There is a predefined set of error detail types
486
+ # in the package `google.rpc` that can be used for common error conditions.
487
+ # # Language mapping
488
+ # The `Status` message is the logical representation of the error model, but it
489
+ # is not necessarily the actual wire format. When the `Status` message is
490
+ # exposed in different client libraries and different wire protocols, it can be
491
+ # mapped differently. For example, it will likely be mapped to some exceptions
492
+ # in Java, but more likely mapped to some error codes in C.
493
+ # # Other uses
494
+ # The error model and the `Status` message can be used in a variety of
495
+ # environments, either with or without APIs, to provide a
496
+ # consistent developer experience across different environments.
497
+ # Example uses of this error model include:
498
+ # - Partial errors. If a service needs to return partial errors to the client,
499
+ # it may embed the `Status` in the normal response to indicate the partial
500
+ # errors.
501
+ # - Workflow errors. A typical workflow has multiple steps. Each step may
502
+ # have a `Status` message for error reporting.
503
+ # - Batch operations. If a client uses batch request and batch response, the
504
+ # `Status` message should be used directly inside batch response, one for
505
+ # each error sub-response.
506
+ # - Asynchronous operations. If an API call embeds asynchronous operation
507
+ # results in its response, the status of those operations should be
508
+ # represented directly using the `Status` message.
509
+ # - Logging. If some API errors are stored in logs, the message `Status` could
510
+ # be used directly after any stripping needed for security/privacy reasons.
511
+ # Corresponds to the JSON property `error`
512
+ # @return [Google::Apis::RuntimeconfigV1beta1::Status]
513
+ attr_accessor :error
514
+
515
+ # The condition that a Waiter resource is waiting for.
516
+ # Corresponds to the JSON property `failure`
517
+ # @return [Google::Apis::RuntimeconfigV1beta1::EndCondition]
518
+ attr_accessor :failure
519
+
520
+ # The condition that a Waiter resource is waiting for.
521
+ # Corresponds to the JSON property `success`
522
+ # @return [Google::Apis::RuntimeconfigV1beta1::EndCondition]
523
+ attr_accessor :success
524
+
525
+ # [Output Only] If the value is `false`, it means the waiter is still waiting
526
+ # for one of its conditions to be met.
527
+ # If true, the waiter has finished. If the waiter finished due to a timeout
528
+ # or failure, `error` will be set.
529
+ # Corresponds to the JSON property `done`
530
+ # @return [Boolean]
531
+ attr_accessor :done
532
+ alias_method :done?, :done
533
+
534
+ # [Output Only] The instant at which this Waiter resource was created. Adding
535
+ # the value of `timeout` to this instant yields the timeout deadline for the
536
+ # waiter.
537
+ # Corresponds to the JSON property `createTime`
538
+ # @return [String]
539
+ attr_accessor :create_time
540
+
541
+ # [Required] Specifies the timeout of the waiter in seconds, beginning from
542
+ # the instant that `waiters().create` method is called. If this time elapses
543
+ # before the success or failure conditions are met, the waiter fails and sets
544
+ # the `error` code to `DEADLINE_EXCEEDED`.
545
+ # Corresponds to the JSON property `timeout`
546
+ # @return [String]
547
+ attr_accessor :timeout
548
+
549
+ # The name of the Waiter resource, in the format:
550
+ # projects/[PROJECT_ID]/configs/[CONFIG_NAME]/waiters/[WAITER_NAME]
551
+ # The `[PROJECT_ID]` must be a valid Google Cloud project ID,
552
+ # the `[CONFIG_NAME]` must be a valid RuntimeConfig resource, the
553
+ # `[WAITER_NAME]` must match RFC 1035 segment specification, and the length
554
+ # of `[WAITER_NAME]` must be less than 64 bytes.
555
+ # After you create a Waiter resource, you cannot change the resource name.
556
+ # Corresponds to the JSON property `name`
557
+ # @return [String]
558
+ attr_accessor :name
559
+
560
+ def initialize(**args)
561
+ update!(**args)
562
+ end
563
+
564
+ # Update properties of this object
565
+ def update!(**args)
566
+ @error = args[:error] if args.key?(:error)
567
+ @failure = args[:failure] if args.key?(:failure)
568
+ @success = args[:success] if args.key?(:success)
569
+ @done = args[:done] if args.key?(:done)
570
+ @create_time = args[:create_time] if args.key?(:create_time)
571
+ @timeout = args[:timeout] if args.key?(:timeout)
572
+ @name = args[:name] if args.key?(:name)
573
+ end
574
+ end
575
+
576
+ # Defines an Identity and Access Management (IAM) policy. It is used to
577
+ # specify access control policies for Cloud Platform resources.
578
+ # A `Policy` consists of a list of `bindings`. A `Binding` binds a list of
579
+ # `members` to a `role`, where the members can be user accounts, Google groups,
580
+ # Google domains, and service accounts. A `role` is a named list of permissions
581
+ # defined by IAM.
582
+ # **Example**
583
+ # `
584
+ # "bindings": [
585
+ # `
586
+ # "role": "roles/owner",
587
+ # "members": [
588
+ # "user:mike@example.com",
589
+ # "group:admins@example.com",
590
+ # "domain:google.com",
591
+ # "serviceAccount:my-other-app@appspot.gserviceaccount.com",
592
+ # ]
593
+ # `,
594
+ # `
595
+ # "role": "roles/viewer",
596
+ # "members": ["user:sean@example.com"]
597
+ # `
598
+ # ]
599
+ # `
600
+ # For a description of IAM and its features, see the
601
+ # [IAM developer's guide](https://cloud.google.com/iam).
602
+ class Policy
603
+ include Google::Apis::Core::Hashable
604
+
605
+ # `etag` is used for optimistic concurrency control as a way to help
606
+ # prevent simultaneous updates of a policy from overwriting each other.
607
+ # It is strongly suggested that systems make use of the `etag` in the
608
+ # read-modify-write cycle to perform policy updates in order to avoid race
609
+ # conditions: An `etag` is returned in the response to `getIamPolicy`, and
610
+ # systems are expected to put that etag in the request to `setIamPolicy` to
611
+ # ensure that their change will be applied to the same version of the policy.
612
+ # If no `etag` is provided in the call to `setIamPolicy`, then the existing
613
+ # policy is overwritten blindly.
614
+ # Corresponds to the JSON property `etag`
615
+ # NOTE: Values are automatically base64 encoded/decoded in the client library.
616
+ # @return [String]
617
+ attr_accessor :etag
618
+
619
+ # Version of the `Policy`. The default version is 0.
620
+ # Corresponds to the JSON property `version`
621
+ # @return [Fixnum]
622
+ attr_accessor :version
623
+
624
+ # Associates a list of `members` to a `role`.
625
+ # `bindings` with no members will result in an error.
626
+ # Corresponds to the JSON property `bindings`
627
+ # @return [Array<Google::Apis::RuntimeconfigV1beta1::Binding>]
628
+ attr_accessor :bindings
629
+
630
+ def initialize(**args)
631
+ update!(**args)
632
+ end
633
+
634
+ # Update properties of this object
635
+ def update!(**args)
636
+ @etag = args[:etag] if args.key?(:etag)
637
+ @version = args[:version] if args.key?(:version)
638
+ @bindings = args[:bindings] if args.key?(:bindings)
639
+ end
640
+ end
641
+
642
+ # Describes a single variable within a RuntimeConfig resource.
643
+ # The name denotes the hierarchical variable name. For example,
644
+ # `ports/serving_port` is a valid variable name. The variable value is an
645
+ # opaque string and only leaf variables can have values (that is, variables
646
+ # that do not have any child variables).
647
+ class Variable
648
+ include Google::Apis::Core::Hashable
649
+
650
+ # The binary value of the variable. The length of the value must be less
651
+ # than 4096 bytes. Empty values are also accepted. The value must be
652
+ # base64 encoded. Only one of `value` or `text` can be set.
653
+ # Corresponds to the JSON property `value`
654
+ # NOTE: Values are automatically base64 encoded/decoded in the client library.
655
+ # @return [String]
656
+ attr_accessor :value
657
+
658
+ # [Ouput only] The current state of the variable. The variable state indicates
659
+ # the outcome of the `variables().watch` call and is visible through the
660
+ # `get` and `list` calls.
661
+ # Corresponds to the JSON property `state`
662
+ # @return [String]
663
+ attr_accessor :state
664
+
665
+ # [Output Only] The time of the last variable update.
666
+ # Corresponds to the JSON property `updateTime`
667
+ # @return [String]
668
+ attr_accessor :update_time
669
+
670
+ # The name of the variable resource, in the format:
671
+ # projects/[PROJECT_ID]/configs/[CONFIG_NAME]/variables/[VARIABLE_NAME]
672
+ # The `[PROJECT_ID]` must be a valid project ID, `[CONFIG_NAME]` must be a
673
+ # valid RuntimeConfig reource and `[VARIABLE_NAME]` follows Unix file system
674
+ # file path naming.
675
+ # The `[VARIABLE_NAME]` can contain ASCII letters, numbers, slashes and
676
+ # dashes. Slashes are used as path element separators and are not part of the
677
+ # `[VARIABLE_NAME]` itself, so `[VARIABLE_NAME]` must contain at least one
678
+ # non-slash character. Multiple slashes are coalesced into single slash
679
+ # character. Each path segment should follow RFC 1035 segment specification.
680
+ # The length of a `[VARIABLE_NAME]` must be less than 256 bytes.
681
+ # Once you create a variable, you cannot change the variable name.
682
+ # Corresponds to the JSON property `name`
683
+ # @return [String]
684
+ attr_accessor :name
685
+
686
+ # The string value of the variable. The length of the value must be less
687
+ # than 4096 bytes. Empty values are also accepted. For example,
688
+ # `text: "my text value"`. The string must be valid UTF-8.
689
+ # Corresponds to the JSON property `text`
690
+ # @return [String]
691
+ attr_accessor :text
692
+
693
+ def initialize(**args)
694
+ update!(**args)
695
+ end
696
+
697
+ # Update properties of this object
698
+ def update!(**args)
699
+ @value = args[:value] if args.key?(:value)
700
+ @state = args[:state] if args.key?(:state)
701
+ @update_time = args[:update_time] if args.key?(:update_time)
702
+ @name = args[:name] if args.key?(:name)
703
+ @text = args[:text] if args.key?(:text)
704
+ end
705
+ end
706
+
707
+ # This resource represents a long-running operation that is the result of a
708
+ # network API call.
709
+ class Operation
710
+ include Google::Apis::Core::Hashable
711
+
712
+ # Service-specific metadata associated with the operation. It typically
713
+ # contains progress information and common metadata such as create time.
714
+ # Some services might not provide such metadata. Any method that returns a
715
+ # long-running operation should document the metadata type, if any.
716
+ # Corresponds to the JSON property `metadata`
717
+ # @return [Hash<String,Object>]
718
+ attr_accessor :metadata
719
+
720
+ # If the value is `false`, it means the operation is still in progress.
721
+ # If true, the operation is completed, and either `error` or `response` is
722
+ # available.
723
+ # Corresponds to the JSON property `done`
724
+ # @return [Boolean]
725
+ attr_accessor :done
726
+ alias_method :done?, :done
727
+
728
+ # The normal response of the operation in case of success. If the original
729
+ # method returns no data on success, such as `Delete`, the response is
730
+ # `google.protobuf.Empty`. If the original method is standard
731
+ # `Get`/`Create`/`Update`, the response should be the resource. For other
732
+ # methods, the response should have the type `XxxResponse`, where `Xxx`
733
+ # is the original method name. For example, if the original method name
734
+ # is `TakeSnapshot()`, the inferred response type is
735
+ # `TakeSnapshotResponse`.
736
+ # Corresponds to the JSON property `response`
737
+ # @return [Hash<String,Object>]
738
+ attr_accessor :response
739
+
740
+ # The server-assigned name, which is only unique within the same service that
741
+ # originally returns it. If you use the default HTTP mapping, the
742
+ # `name` should have the format of `operations/some/unique/name`.
743
+ # Corresponds to the JSON property `name`
744
+ # @return [String]
745
+ attr_accessor :name
746
+
747
+ # The `Status` type defines a logical error model that is suitable for different
748
+ # programming environments, including REST APIs and RPC APIs. It is used by
749
+ # [gRPC](https://github.com/grpc). The error model is designed to be:
750
+ # - Simple to use and understand for most users
751
+ # - Flexible enough to meet unexpected needs
752
+ # # Overview
753
+ # The `Status` message contains three pieces of data: error code, error message,
754
+ # and error details. The error code should be an enum value of
755
+ # google.rpc.Code, but it may accept additional error codes if needed. The
756
+ # error message should be a developer-facing English message that helps
757
+ # developers *understand* and *resolve* the error. If a localized user-facing
758
+ # error message is needed, put the localized message in the error details or
759
+ # localize it in the client. The optional error details may contain arbitrary
760
+ # information about the error. There is a predefined set of error detail types
761
+ # in the package `google.rpc` that can be used for common error conditions.
762
+ # # Language mapping
763
+ # The `Status` message is the logical representation of the error model, but it
764
+ # is not necessarily the actual wire format. When the `Status` message is
765
+ # exposed in different client libraries and different wire protocols, it can be
766
+ # mapped differently. For example, it will likely be mapped to some exceptions
767
+ # in Java, but more likely mapped to some error codes in C.
768
+ # # Other uses
769
+ # The error model and the `Status` message can be used in a variety of
770
+ # environments, either with or without APIs, to provide a
771
+ # consistent developer experience across different environments.
772
+ # Example uses of this error model include:
773
+ # - Partial errors. If a service needs to return partial errors to the client,
774
+ # it may embed the `Status` in the normal response to indicate the partial
775
+ # errors.
776
+ # - Workflow errors. A typical workflow has multiple steps. Each step may
777
+ # have a `Status` message for error reporting.
778
+ # - Batch operations. If a client uses batch request and batch response, the
779
+ # `Status` message should be used directly inside batch response, one for
780
+ # each error sub-response.
781
+ # - Asynchronous operations. If an API call embeds asynchronous operation
782
+ # results in its response, the status of those operations should be
783
+ # represented directly using the `Status` message.
784
+ # - Logging. If some API errors are stored in logs, the message `Status` could
785
+ # be used directly after any stripping needed for security/privacy reasons.
786
+ # Corresponds to the JSON property `error`
787
+ # @return [Google::Apis::RuntimeconfigV1beta1::Status]
788
+ attr_accessor :error
789
+
790
+ def initialize(**args)
791
+ update!(**args)
792
+ end
793
+
794
+ # Update properties of this object
795
+ def update!(**args)
796
+ @metadata = args[:metadata] if args.key?(:metadata)
797
+ @done = args[:done] if args.key?(:done)
798
+ @response = args[:response] if args.key?(:response)
799
+ @name = args[:name] if args.key?(:name)
800
+ @error = args[:error] if args.key?(:error)
801
+ end
802
+ end
803
+ end
804
+ end
805
+ end