class Train::Transports::Gcp::Connection

Public Class Methods

new(options) click to toggle source
Calls superclass method
# File lib/train/transports/gcp.rb, line 37
def initialize(options)
  super(options)

  # additional GCP platform metadata
  release = Gem.loaded_specs["google-api-client"].version
  @platform_details = { release: "google-api-client-v#{release}" }

  # Initialize the client object cache
  @cache_enabled[:api_call] = true
  @cache[:api_call] = {}

  connect
end

Public Instance Methods

connect() click to toggle source
# File lib/train/transports/gcp.rb, line 89
def connect
  ENV["GOOGLE_APPLICATION_CREDENTIALS"] = @options[:google_application_credentials] if @options[:google_application_credentials]
  ENV["GOOGLE_CLOUD_PROJECT"] = @options[:google_cloud_project] if @options[:google_cloud_project]
  # GCP initialization
  scopes = ["https://www.googleapis.com/auth/cloud-platform",
            "https://www.googleapis.com/auth/compute"]
  authorization = Google::Auth.get_application_default(scopes)
  Google::Apis::ClientOptions.default.application_name = "chef-inspec-train"
  Google::Apis::ClientOptions.default.application_version = Train::VERSION
  Google::Apis::RequestOptions.default.authorization = authorization
end
gcp_admin_client() click to toggle source
# File lib/train/transports/gcp.rb, line 72
def gcp_admin_client
  scopes = ["https://www.googleapis.com/auth/admin.directory.user.readonly"]
  authorization = Google::Auth.get_application_default(scopes).dup
  # Use of the Admin API requires delegation (impersonation). An email address of a Super Admin in
  # the G Suite account may be required.
  authorization.sub = @options[:google_super_admin_email] if @options[:google_super_admin_email]
  Google::Apis::RequestOptions.default.authorization = authorization
  gcp_client(Google::Apis::AdminDirectoryV1::DirectoryService)
end
gcp_client(klass) click to toggle source

Let's allow for other clients too

# File lib/train/transports/gcp.rb, line 83
def gcp_client(klass)
  return klass.new unless cache_enabled?(:api_call)

  @cache[:api_call][klass.to_s.to_sym] ||= klass.new
end
gcp_compute_client() click to toggle source

Instantiate some named classes for ease of use

# File lib/train/transports/gcp.rb, line 56
def gcp_compute_client
  gcp_client(Google::Apis::ComputeV1::ComputeService)
end
gcp_iam_client() click to toggle source
# File lib/train/transports/gcp.rb, line 60
def gcp_iam_client
  gcp_client(Google::Apis::IamV1::IamService)
end
gcp_project_client() click to toggle source
# File lib/train/transports/gcp.rb, line 64
def gcp_project_client
  gcp_client(Google::Apis::CloudresourcemanagerV1::CloudResourceManagerService)
end
gcp_storage_client() click to toggle source
# File lib/train/transports/gcp.rb, line 68
def gcp_storage_client
  gcp_client(Google::Apis::StorageV1::StorageService)
end
platform() click to toggle source
# File lib/train/transports/gcp.rb, line 51
def platform
  force_platform!("gcp", @platform_details)
end
unique_identifier() click to toggle source
# File lib/train/transports/gcp.rb, line 105
def unique_identifier
  unique_id = "default"
  # use auth client_id for users (issuer is nil)
  unique_id = gcp_iam_client.request_options.authorization.client_id unless gcp_iam_client.request_options.authorization.client_id.nil?
  # for service account credentials (client_id is nil)
  unique_id = gcp_iam_client.request_options.authorization.issuer unless gcp_iam_client.request_options.authorization.issuer.nil?
  unique_id
end
uri() click to toggle source
# File lib/train/transports/gcp.rb, line 101
def uri
  "gcp://#{unique_identifier}"
end