modules/mu/clouds/google.rb in cloud-mu-2.0.0.pre.alpha9 vs modules/mu/clouds/google.rb in cloud-mu-2.0.0.pre.beta1
- old
+ new
@@ -69,16 +69,24 @@
end
$MU_CFG['google'].keys
end
+ # Resolve the administrative Cloud Storage bucket for a given credential
+ # set, or return a default.
+ # @param credentials [String]
+ # @return [String]
def self.adminBucketName(credentials = nil)
#XXX find a default if this particular account doesn't have a log_bucket_name configured
cfg = credConfig(credentials)
cfg['log_bucket_name']
end
+ # Resolve the administrative Cloud Storage bucket for a given credential
+ # set, or return a default.
+ # @param credentials [String]
+ # @return [String]
def self.adminBucketUrl(credentials = nil)
"gs://"+adminBucketName(credentials)+"/"
end
# Return the $MU_CFG data associated with a particular profile/name/set of
@@ -119,11 +127,11 @@
return name_only ? name : $MU_CFG['google'][name]
elsif @@acct_to_profile_map[name.to_s]
return name_only ? name : @@acct_to_profile_map[name.to_s]
end
# XXX whatever process might lead us to populate @@acct_to_profile_map with some mappings, like projectname -> account profile, goes here
- raise MuError, "Google credential set #{name} was requested, but I see no such working credentials in mu.yaml"
+ return nil
end
end
# If we've configured Google as a provider, or are simply hosted in GCP,
# decide what our default region is.
@@ -530,11 +538,11 @@
# @param subclass [<Google::Apis::ComputeBeta>]: If specified, will return the class ::Google::Apis::ComputeBeta::subclass instead of an API client instance
def self.compute(subclass = nil, credentials: nil)
require 'google/apis/compute_beta'
if subclass.nil?
- @@compute_api[credentials] ||= MU::Cloud::Google::Endpoint.new(api: "ComputeBeta::ComputeService", scopes: ['https://www.googleapis.com/auth/cloud-platform', 'https://www.googleapis.com/auth/compute.readonly'], credentials: credentials)
+ @@compute_api[credentials] ||= MU::Cloud::Google::GoogleEndpoint.new(api: "ComputeBeta::ComputeService", scopes: ['https://www.googleapis.com/auth/cloud-platform', 'https://www.googleapis.com/auth/compute.readonly'], credentials: credentials)
return @@compute_api[credentials]
elsif subclass.is_a?(Symbol)
return Object.const_get("::Google").const_get("Apis").const_get("ComputeBeta").const_get(subclass)
end
end
@@ -543,11 +551,11 @@
# @param subclass [<Google::Apis::StorageV1>]: If specified, will return the class ::Google::Apis::StorageV1::subclass instead of an API client instance
def self.storage(subclass = nil, credentials: nil)
require 'google/apis/storage_v1'
if subclass.nil?
- @@storage_api[credentials] ||= MU::Cloud::Google::Endpoint.new(api: "StorageV1::StorageService", scopes: ['https://www.googleapis.com/auth/cloud-platform'], credentials: credentials)
+ @@storage_api[credentials] ||= MU::Cloud::Google::GoogleEndpoint.new(api: "StorageV1::StorageService", scopes: ['https://www.googleapis.com/auth/cloud-platform'], credentials: credentials)
return @@storage_api[credentials]
elsif subclass.is_a?(Symbol)
return Object.const_get("::Google").const_get("Apis").const_get("StorageV1").const_get(subclass)
end
end
@@ -556,11 +564,11 @@
# @param subclass [<Google::Apis::IamV1>]: If specified, will return the class ::Google::Apis::IamV1::subclass instead of an API client instance
def self.iam(subclass = nil, credentials: nil)
require 'google/apis/iam_v1'
if subclass.nil?
- @@iam_api[credentials] ||= MU::Cloud::Google::Endpoint.new(api: "IamV1::IamService", scopes: ['https://www.googleapis.com/auth/cloud-platform'], credentials: credentials)
+ @@iam_api[credentials] ||= MU::Cloud::Google::GoogleEndpoint.new(api: "IamV1::IamService", scopes: ['https://www.googleapis.com/auth/cloud-platform'], credentials: credentials)
return @@iam_api[credentials]
elsif subclass.is_a?(Symbol)
return Object.const_get("::Google").const_get("Apis").const_get("IamV1").const_get(subclass)
end
end
@@ -570,11 +578,11 @@
def self.admin_directory(subclass = nil, credentials: nil)
require 'google/apis/admin_directory_v1'
if subclass.nil?
begin
- @@admin_directory_api[credentials] ||= MU::Cloud::Google::Endpoint.new(api: "AdminDirectoryV1::DirectoryService", scopes: ['https://www.googleapis.com/auth/admin.directory.group.member.readonly', 'https://www.googleapis.com/auth/admin.directory.group.readonly', 'https://www.googleapis.com/auth/admin.directory.user.readonly', 'https://www.googleapis.com/auth/admin.directory.domain.readonly', 'https://www.googleapis.com/auth/admin.directory.orgunit.readonly', 'https://www.googleapis.com/auth/admin.directory.rolemanagement.readonly', 'https://www.googleapis.com/auth/admin.directory.customer.readonly'], masquerade: MU::Cloud::Google.credConfig(credentials)['masquerade_as'], credentials: credentials)
+ @@admin_directory_api[credentials] ||= MU::Cloud::Google::GoogleEndpoint.new(api: "AdminDirectoryV1::DirectoryService", scopes: ['https://www.googleapis.com/auth/admin.directory.group.member.readonly', 'https://www.googleapis.com/auth/admin.directory.group.readonly', 'https://www.googleapis.com/auth/admin.directory.user.readonly', 'https://www.googleapis.com/auth/admin.directory.domain.readonly', 'https://www.googleapis.com/auth/admin.directory.orgunit.readonly', 'https://www.googleapis.com/auth/admin.directory.rolemanagement.readonly', 'https://www.googleapis.com/auth/admin.directory.customer.readonly'], masquerade: MU::Cloud::Google.credConfig(credentials)['masquerade_as'], credentials: credentials)
rescue Signet::AuthorizationError => e
MU.log "Cannot masquerade as #{MU::Cloud::Google.credConfig(credentials)['masquerade_as']}", MU::ERROR, details: "You can only use masquerade_as with GSuite. For more information on delegating GSuite authority to a service account, see:\nhttps://developers.google.com/identity/protocols/OAuth2ServiceAccount#delegatingauthority"
raise e
end
return @@admin_directory_api[credentials]
@@ -587,11 +595,11 @@
# @param subclass [<Google::Apis::CloudresourcemanagerV1>]: If specified, will return the class ::Google::Apis::CloudresourcemanagerV1::subclass instead of an API client instance
def self.resource_manager(subclass = nil, credentials: nil)
require 'google/apis/cloudresourcemanager_v1'
if subclass.nil?
- @@resource_api[credentials] ||= MU::Cloud::Google::Endpoint.new(api: "CloudresourcemanagerV1::CloudResourceManagerService", scopes: ['https://www.googleapis.com/auth/cloud-platform'], credentials: credentials)
+ @@resource_api[credentials] ||= MU::Cloud::Google::GoogleEndpoint.new(api: "CloudresourcemanagerV1::CloudResourceManagerService", scopes: ['https://www.googleapis.com/auth/cloud-platform'], credentials: credentials)
return @@resource_api[credentials]
elsif subclass.is_a?(Symbol)
return Object.const_get("::Google").const_get("Apis").const_get("CloudresourcemanagerV1").const_get(subclass)
end
end
@@ -600,11 +608,11 @@
# @param subclass [<Google::Apis::CloudresourcemanagerV2beta1>]: If specified, will return the class ::Google::Apis::CloudresourcemanagerV2beta1::subclass instead of an API client instance
def self.folder(subclass = nil, credentials: nil)
require 'google/apis/cloudresourcemanager_v2beta1'
if subclass.nil?
- @@resource2_api[credentials] ||= MU::Cloud::Google::Endpoint.new(api: "CloudresourcemanagerV2beta1::CloudResourceManagerService", scopes: ['https://www.googleapis.com/auth/cloud-platform'], credentials: credentials)
+ @@resource2_api[credentials] ||= MU::Cloud::Google::GoogleEndpoint.new(api: "CloudresourcemanagerV2beta1::CloudResourceManagerService", scopes: ['https://www.googleapis.com/auth/cloud-platform'], credentials: credentials)
return @@resource2_api[credentials]
elsif subclass.is_a?(Symbol)
return Object.const_get("::Google").const_get("Apis").const_get("CloudresourcemanagerV2beta1").const_get(subclass)
end
end
@@ -613,11 +621,11 @@
# @param subclass [<Google::Apis::ContainerV1>]: If specified, will return the class ::Google::Apis::ContainerV1::subclass instead of an API client instance
def self.container(subclass = nil, credentials: nil)
require 'google/apis/container_v1'
if subclass.nil?
- @@container_api[credentials] ||= MU::Cloud::Google::Endpoint.new(api: "ContainerV1::ContainerService", scopes: ['https://www.googleapis.com/auth/cloud-platform'], credentials: credentials)
+ @@container_api[credentials] ||= MU::Cloud::Google::GoogleEndpoint.new(api: "ContainerV1::ContainerService", scopes: ['https://www.googleapis.com/auth/cloud-platform'], credentials: credentials)
return @@container_api[credentials]
elsif subclass.is_a?(Symbol)
return Object.const_get("::Google").const_get("Apis").const_get("ContainerV1").const_get(subclass)
end
end
@@ -626,11 +634,11 @@
# @param subclass [<Google::Apis::ServicemanagementV1>]: If specified, will return the class ::Google::Apis::ServicemanagementV1::subclass instead of an API client instance
def self.service_manager(subclass = nil, credentials: nil)
require 'google/apis/servicemanagement_v1'
if subclass.nil?
- @@service_api[credentials] ||= MU::Cloud::Google::Endpoint.new(api: "ServicemanagementV1::ServiceManagementService", scopes: ['https://www.googleapis.com/auth/cloud-platform'], credentials: credentials)
+ @@service_api[credentials] ||= MU::Cloud::Google::GoogleEndpoint.new(api: "ServicemanagementV1::ServiceManagementService", scopes: ['https://www.googleapis.com/auth/cloud-platform'], credentials: credentials)
return @@service_api[credentials]
elsif subclass.is_a?(Symbol)
return Object.const_get("::Google").const_get("Apis").const_get("ServicemanagementV1").const_get(subclass)
end
end
@@ -639,24 +647,37 @@
# @param subclass [<Google::Apis::SqladminV1beta4>]: If specified, will return the class ::Google::Apis::SqladminV1beta4::subclass instead of an API client instance
def self.sql(subclass = nil, credentials: nil)
require 'google/apis/sqladmin_v1beta4'
if subclass.nil?
- @@sql_api[credentials] ||= MU::Cloud::Google::Endpoint.new(api: "SqladminV1beta4::SQLAdminService", scopes: ['https://www.googleapis.com/auth/cloud-platform'], credentials: credentials)
+ @@sql_api[credentials] ||= MU::Cloud::Google::GoogleEndpoint.new(api: "SqladminV1beta4::SQLAdminService", scopes: ['https://www.googleapis.com/auth/cloud-platform'], credentials: credentials)
return @@sql_api[credentials]
elsif subclass.is_a?(Symbol)
return Object.const_get("::Google").const_get("Apis").const_get("SqladminV1beta4").const_get(subclass)
end
end
+ # Google's Firestore (NoSQL) Service API
+ # @param subclass [<Google::Apis::FirestoreV1>]: If specified, will return the class ::Google::Apis::FirestoreV1::subclass instead of an API client instance
+ def self.firestore(subclass = nil, credentials: nil)
+ require 'google/apis/firestore_v1'
+
+ if subclass.nil?
+ @@firestore_api[credentials] ||= MU::Cloud::Google::GoogleEndpoint.new(api: "FirestoreV1::FirestoreService", scopes: ['https://www.googleapis.com/auth/cloud-platform'], credentials: credentials)
+ return @@firestore_api[credentials]
+ elsif subclass.is_a?(Symbol)
+ return Object.const_get("::Google").const_get("Apis").const_get("FirestoreV1").const_get(subclass)
+ end
+ end
+
# Google's StackDriver Logging Service API
# @param subclass [<Google::Apis::LoggingV2>]: If specified, will return the class ::Google::Apis::LoggingV2::subclass instead of an API client instance
def self.logging(subclass = nil, credentials: nil)
require 'google/apis/logging_v2'
if subclass.nil?
- @@logging_api[credentials] ||= MU::Cloud::Google::Endpoint.new(api: "LoggingV2::LoggingService", scopes: ['https://www.googleapis.com/auth/cloud-platform'], credentials: credentials)
+ @@logging_api[credentials] ||= MU::Cloud::Google::GoogleEndpoint.new(api: "LoggingV2::LoggingService", scopes: ['https://www.googleapis.com/auth/cloud-platform'], credentials: credentials)
return @@logging_api[credentials]
elsif subclass.is_a?(Symbol)
return Object.const_get("::Google").const_get("Apis").const_get("LoggingV2").const_get(subclass)
end
end
@@ -665,11 +686,11 @@
private
# Wrapper class for Google APIs, so that we can catch some common
# transient endpoint errors without having to spray rescues all over the
# codebase.
- class Endpoint
+ class GoogleEndpoint
@api = nil
@credentials = nil
attr_reader :issuer
# Create a Google Cloud Platform API client
@@ -943,9 +964,10 @@
@@iam_api = {}
@@logging_api = {}
@@resource_api = {}
@@resource2_api = {}
@@service_api = {}
+ @@firestore_api = {}
@@admin_directory_api = {}
end
end
end