Skip to content

Commit 32142bd

Browse files
feat: Support for universe_domain (#23773)
1 parent 18b89d0 commit 32142bd

File tree

459 files changed

+6522
-2831
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

459 files changed

+6522
-2831
lines changed

google-cloud-apigee_connect-v1/.owlbot-manifest.json

+1
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
".gitignore",
44
".repo-metadata.json",
55
".rubocop.yml",
6+
".toys.rb",
67
".yardopts",
78
"AUTHENTICATION.md",
89
"CHANGELOG.md",
+28
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
# frozen_string_literal: true
2+
3+
# Copyright 2024 Google LLC
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+
# https://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+
# Auto-generated by gapic-generator-ruby. DO NOT EDIT!
18+
19+
toys_version! ">= 0.15.3"
20+
21+
if ENV["RUBY_COMMON_TOOLS"]
22+
common_tools_dir = File.expand_path ENV["RUBY_COMMON_TOOLS"]
23+
load File.join(common_tools_dir, "toys", "gapic")
24+
else
25+
load_git remote: "https://github.com/googleapis/ruby-common-tools.git",
26+
path: "toys/gapic",
27+
update: true
28+
end
+72-101
Original file line numberDiff line numberDiff line change
@@ -1,151 +1,122 @@
11
# Authentication
22

3-
In general, the google-cloud-apigee_connect-v1 library uses
4-
[Service Account](https://cloud.google.com/iam/docs/creating-managing-service-accounts)
5-
credentials to connect to Google Cloud services. When running within
6-
[Google Cloud Platform environments](#google-cloud-platform-environments) the
7-
credentials will be discovered automatically. When running on other
8-
environments, the Service Account credentials can be specified by providing the
9-
path to the
10-
[JSON keyfile](https://cloud.google.com/iam/docs/managing-service-account-keys)
11-
for the account (or the JSON itself) in
12-
[environment variables](#environment-variables). Additionally, Cloud SDK
13-
credentials can also be discovered automatically, but this is only recommended
14-
during development.
3+
The recommended way to authenticate to the google-cloud-apigee_connect-v1 library is to use
4+
[Application Default Credentials (ADC)](https://cloud.google.com/docs/authentication/application-default-credentials).
5+
To review all of your authentication options, see [Credentials lookup](#credential-lookup).
156

167
## Quickstart
178

18-
1. [Create a service account and credentials](#creating-a-service-account).
19-
2. Set the [environment variable](#environment-variables).
9+
The following example shows how to set up authentication for a local development
10+
environment with your user credentials.
2011

21-
```sh
22-
export APIGEE_CONNECT_CREDENTIALS=path/to/keyfile.json
23-
```
24-
25-
3. Initialize the client.
12+
**NOTE:** This method is _not_ recommended for running in production. User credentials
13+
should be used only during development.
2614

27-
```ruby
28-
require "google/cloud/apigee_connect/v1"
15+
1. [Download and install the Google Cloud CLI](https://cloud.google.com/sdk).
16+
2. Set up a local ADC file with your user credentials:
2917

30-
client = ::Google::Cloud::ApigeeConnect::V1::ConnectionService::Client.new
18+
```sh
19+
gcloud auth application-default login
3120
```
3221

33-
## Credential Lookup
34-
35-
The google-cloud-apigee_connect-v1 library aims to make authentication
36-
as simple as possible, and provides several mechanisms to configure your system
37-
without requiring **Service Account Credentials** directly in code.
38-
39-
**Credentials** are discovered in the following order:
40-
41-
1. Specify credentials in method arguments
42-
2. Specify credentials in configuration
43-
3. Discover credentials path in environment variables
44-
4. Discover credentials JSON in environment variables
45-
5. Discover credentials file in the Cloud SDK's path
46-
6. Discover GCP credentials
47-
48-
### Google Cloud Platform environments
22+
3. Write code as if already authenticated.
4923

50-
When running on Google Cloud Platform (GCP), including Google Compute Engine
51-
(GCE), Google Kubernetes Engine (GKE), Google App Engine (GAE), Google Cloud
52-
Functions (GCF) and Cloud Run, **Credentials** are discovered automatically.
53-
Code should be written as if already authenticated.
24+
For more information about setting up authentication for a local development environment, see
25+
[Set up Application Default Credentials](https://cloud.google.com/docs/authentication/provide-credentials-adc#local-dev).
5426

55-
### Environment Variables
27+
## Credential Lookup
5628

57-
The **Credentials JSON** can be placed in environment variables instead of
58-
declaring them directly in code. Each service has its own environment variable,
59-
allowing for different service accounts to be used for different services. (See
60-
the READMEs for the individual service gems for details.) The path to the
61-
**Credentials JSON** file can be stored in the environment variable, or the
62-
**Credentials JSON** itself can be stored for environments such as Docker
63-
containers where writing files is difficult or not encouraged.
29+
The google-cloud-apigee_connect-v1 library provides several mechanisms to configure your system.
30+
Generally, using Application Default Credentials to facilitate automatic
31+
credentials discovery is the easist method. But if you need to explicitly specify
32+
credentials, there are several methods available to you.
6433

65-
The environment variables that google-cloud-apigee_connect-v1
66-
checks for credentials are configured on the service Credentials class (such as
67-
{::Google::Cloud::ApigeeConnect::V1::ConnectionService::Credentials}):
34+
Credentials are accepted in the following ways, in the following order or precedence:
6835

69-
* `APIGEE_CONNECT_CREDENTIALS` - Path to JSON file, or JSON contents
70-
* `APIGEE_CONNECT_KEYFILE` - Path to JSON file, or JSON contents
71-
* `GOOGLE_CLOUD_CREDENTIALS` - Path to JSON file, or JSON contents
72-
* `GOOGLE_CLOUD_KEYFILE` - Path to JSON file, or JSON contents
73-
* `GOOGLE_APPLICATION_CREDENTIALS` - Path to JSON file
36+
1. Credentials specified in method arguments
37+
2. Credentials specified in configuration
38+
3. Credentials pointed to or included in environment variables
39+
4. Credentials found in local ADC file
40+
5. Credentials returned by the metadata server for the attached service account (GCP)
7441

75-
```ruby
76-
require "google/cloud/apigee_connect/v1"
77-
78-
ENV["APIGEE_CONNECT_CREDENTIALS"] = "path/to/keyfile.json"
42+
### Configuration
7943

80-
client = ::Google::Cloud::ApigeeConnect::V1::ConnectionService::Client.new
81-
```
44+
You can configure a path to a JSON credentials file, either for an individual client object or
45+
globally, for all client objects. The JSON file can contain credentials created for
46+
[workload identity federation](https://cloud.google.com/iam/docs/workload-identity-federation),
47+
[workforce identity federation](https://cloud.google.com/iam/docs/workforce-identity-federation), or a
48+
[service account key](https://cloud.google.com/docs/authentication/provide-credentials-adc#local-key).
8249

83-
### Configuration
50+
Note: Service account keys are a security risk if not managed correctly. You should
51+
[choose a more secure alternative to service account keys](https://cloud.google.com/docs/authentication#auth-decision-tree)
52+
whenever possible.
8453

85-
The path to the **Credentials JSON** file can be configured instead of storing
86-
it in an environment variable. Either on an individual client initialization:
54+
To configure a credentials file for an individual client initialization:
8755

8856
```ruby
8957
require "google/cloud/apigee_connect/v1"
9058

9159
client = ::Google::Cloud::ApigeeConnect::V1::ConnectionService::Client.new do |config|
92-
config.credentials = "path/to/keyfile.json"
60+
config.credentials = "path/to/credentialfile.json"
9361
end
9462
```
9563

96-
Or globally for all clients:
64+
To configure a credentials file globally for all clients:
9765

9866
```ruby
9967
require "google/cloud/apigee_connect/v1"
10068

10169
::Google::Cloud::ApigeeConnect::V1::ConnectionService::Client.configure do |config|
102-
config.credentials = "path/to/keyfile.json"
70+
config.credentials = "path/to/credentialfile.json"
10371
end
10472

10573
client = ::Google::Cloud::ApigeeConnect::V1::ConnectionService::Client.new
10674
```
10775

108-
### Cloud SDK
76+
### Environment Variables
10977

110-
This option allows for an easy way to authenticate during development. If
111-
credentials are not provided in code or in environment variables, then Cloud SDK
112-
credentials are discovered.
78+
You can also use an environment variable to provide a JSON credentials file.
79+
The environment variable can contain a path to the credentials file or, for
80+
environments such as Docker containers where writing files is not encouraged,
81+
you can include the credentials file itself.
11382

114-
To configure your system for this, simply:
83+
The JSON file can contain credentials created for
84+
[workload identity federation](https://cloud.google.com/iam/docs/workload-identity-federation),
85+
[workforce identity federation](https://cloud.google.com/iam/docs/workforce-identity-federation), or a
86+
[service account key](https://cloud.google.com/docs/authentication/provide-credentials-adc#local-key).
11587

116-
1. [Download and install the Cloud SDK](https://cloud.google.com/sdk)
117-
2. Authenticate using OAuth 2.0 `$ gcloud auth application-default login`
118-
3. Write code as if already authenticated.
88+
Note: Service account keys are a security risk if not managed correctly. You should
89+
[choose a more secure alternative to service account keys](https://cloud.google.com/docs/authentication#auth-decision-tree)
90+
whenever possible.
91+
92+
The environment variables that google-cloud-apigee_connect-v1
93+
checks for credentials are:
11994

120-
**NOTE:** This is _not_ recommended for running in production. The Cloud SDK
121-
*should* only be used during development.
95+
* `GOOGLE_CLOUD_CREDENTIALS` - Path to JSON file, or JSON contents
96+
* `GOOGLE_APPLICATION_CREDENTIALS` - Path to JSON file
12297

123-
## Creating a Service Account
98+
```ruby
99+
require "google/cloud/apigee_connect/v1"
124100

125-
Google Cloud requires **Service Account Credentials** to
126-
connect to the APIs. You will use the **JSON key file** to
127-
connect to most services with google-cloud-apigee_connect-v1.
101+
ENV["GOOGLE_APPLICATION_CREDENTIALS"] = "path/to/credentialfile.json"
128102

129-
If you are not running this client within
130-
[Google Cloud Platform environments](#google-cloud-platform-environments), you
131-
need a Google Developers service account.
103+
client = ::Google::Cloud::ApigeeConnect::V1::ConnectionService::Client.new
104+
```
132105

133-
1. Visit the [Google Cloud Console](https://console.cloud.google.com/project).
134-
2. Create a new project or click on an existing project.
135-
3. Activate the menu in the upper left and select **APIs & Services**. From
136-
here, you will enable the APIs that your application requires.
106+
### Local ADC file
137107

138-
*Note: You may need to enable billing in order to use these services.*
108+
You can set up a local ADC file with your user credentials for authentication during
109+
development. If credentials are not provided in code or in environment variables,
110+
then the local ADC credentials are discovered.
139111

140-
4. Select **Credentials** from the side navigation.
112+
Follow the steps in [Quickstart](#quickstart) to set up a local ADC file.
141113

142-
Find the "Create credentials" drop down near the top of the page, and select
143-
"Service account" to be guided through downloading a new JSON key file.
114+
### Google Cloud Platform environments
144115

145-
If you want to re-use an existing service account, you can easily generate a
146-
new key file. Just select the account you wish to re-use, click the pencil
147-
tool on the right side to edit the service account, select the **Keys** tab,
148-
and then select **Add Key**.
116+
When running on Google Cloud Platform (GCP), including Google Compute Engine
117+
(GCE), Google Kubernetes Engine (GKE), Google App Engine (GAE), Google Cloud
118+
Functions (GCF) and Cloud Run, credentials are retrieved from the attached
119+
service account automatically. Code should be written as if already authenticated.
149120

150-
The key file you download will be used by this library to authenticate API
151-
requests and should be stored in a secure location.
121+
For more information, see
122+
[Set up ADC for Google Cloud services](https://cloud.google.com/docs/authentication/provide-credentials-adc#attached-sa).

google-cloud-apigee_connect-v1/google-cloud-apigee_connect-v1.gemspec

+1-1
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ Gem::Specification.new do |gem|
2323

2424
gem.required_ruby_version = ">= 2.6"
2525

26-
gem.add_dependency "gapic-common", ">= 0.20.0", "< 2.a"
26+
gem.add_dependency "gapic-common", ">= 0.21.1", "< 2.a"
2727
gem.add_dependency "google-cloud-errors", "~> 1.0"
2828

2929
gem.add_development_dependency "google-style", "~> 1.26.3"

google-cloud-apigee_connect-v1/lib/google/cloud/apigee_connect/v1/connection_service/client.rb

+31-8
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,9 @@ module ConnectionService
3030
# Service Interface for the Apigee Connect connection management APIs.
3131
#
3232
class Client
33+
# @private
34+
DEFAULT_ENDPOINT_TEMPLATE = "apigeeconnect.$UNIVERSE_DOMAIN$"
35+
3336
include Paths
3437

3538
# @private
@@ -95,6 +98,15 @@ def configure
9598
@config
9699
end
97100

101+
##
102+
# The effective universe domain
103+
#
104+
# @return [String]
105+
#
106+
def universe_domain
107+
@connection_service_stub.universe_domain
108+
end
109+
98110
##
99111
# Create a new ConnectionService client object.
100112
#
@@ -128,8 +140,9 @@ def initialize
128140
credentials = @config.credentials
129141
# Use self-signed JWT if the endpoint is unchanged from default,
130142
# but only if the default endpoint does not have a region prefix.
131-
enable_self_signed_jwt = @config.endpoint == Configuration::DEFAULT_ENDPOINT &&
132-
!@config.endpoint.split(".").first.include?("-")
143+
enable_self_signed_jwt = @config.endpoint.nil? ||
144+
(@config.endpoint == Configuration::DEFAULT_ENDPOINT &&
145+
!@config.endpoint.split(".").first.include?("-"))
133146
credentials ||= Credentials.default scope: @config.scope,
134147
enable_self_signed_jwt: enable_self_signed_jwt
135148
if credentials.is_a?(::String) || credentials.is_a?(::Hash)
@@ -140,8 +153,10 @@ def initialize
140153

141154
@connection_service_stub = ::Gapic::ServiceStub.new(
142155
::Google::Cloud::ApigeeConnect::V1::ConnectionService::Stub,
143-
credentials: credentials,
144-
endpoint: @config.endpoint,
156+
credentials: credentials,
157+
endpoint: @config.endpoint,
158+
endpoint_template: DEFAULT_ENDPOINT_TEMPLATE,
159+
universe_domain: @config.universe_domain,
145160
channel_args: @config.channel_args,
146161
interceptors: @config.interceptors,
147162
channel_pool_config: @config.channel_pool
@@ -282,9 +297,9 @@ def list_connections request, options = nil
282297
# end
283298
#
284299
# @!attribute [rw] endpoint
285-
# The hostname or hostname:port of the service endpoint.
286-
# Defaults to `"apigeeconnect.googleapis.com"`.
287-
# @return [::String]
300+
# A custom service endpoint, as a hostname or hostname:port. The default is
301+
# nil, indicating to use the default endpoint in the current universe domain.
302+
# @return [::String,nil]
288303
# @!attribute [rw] credentials
289304
# Credentials to send with calls. You may provide any of the following types:
290305
# * (`String`) The path to a service account key file in JSON format
@@ -330,13 +345,20 @@ def list_connections request, options = nil
330345
# @!attribute [rw] quota_project
331346
# A separate project against which to charge quota.
332347
# @return [::String]
348+
# @!attribute [rw] universe_domain
349+
# The universe domain within which to make requests. This determines the
350+
# default endpoint URL. The default value of nil uses the environment
351+
# universe (usually the default "googleapis.com" universe).
352+
# @return [::String,nil]
333353
#
334354
class Configuration
335355
extend ::Gapic::Config
336356

357+
# @private
358+
# The endpoint specific to the default "googleapis.com" universe. Deprecated.
337359
DEFAULT_ENDPOINT = "apigeeconnect.googleapis.com"
338360

339-
config_attr :endpoint, DEFAULT_ENDPOINT, ::String
361+
config_attr :endpoint, nil, ::String, nil
340362
config_attr :credentials, nil do |value|
341363
allowed = [::String, ::Hash, ::Proc, ::Symbol, ::Google::Auth::Credentials, ::Signet::OAuth2::Client, nil]
342364
allowed += [::GRPC::Core::Channel, ::GRPC::Core::ChannelCredentials] if defined? ::GRPC
@@ -351,6 +373,7 @@ class Configuration
351373
config_attr :metadata, nil, ::Hash, nil
352374
config_attr :retry_policy, nil, ::Hash, ::Proc, nil
353375
config_attr :quota_project, nil, ::String, nil
376+
config_attr :universe_domain, nil, ::String, nil
354377

355378
# @private
356379
def initialize parent_config = nil

0 commit comments

Comments
 (0)