Class: Train::Transports::Azure::Connection
- Inherits:
-
BaseConnection
- Object
- BaseConnection
- Train::Transports::Azure::Connection
- Defined in:
- lib/train/transports/azure.rb
Instance Method Summary collapse
- #azure_client(klass = ::Azure::Resources::Profiles::Latest::Mgmt::Client) ⇒ Object
- #connect ⇒ Object
-
#get_api_version(resource_type, options) ⇒ Object
Returns the api version for the specified resource type.
-
#initialize(options) ⇒ Connection
constructor
A new instance of Connection.
- #platform ⇒ Object
- #uri ⇒ Object
Constructor Details
#initialize(options) ⇒ Connection
Returns a new instance of Connection.
24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
# File 'lib/train/transports/azure.rb', line 24 def initialize() @apis = {} # Override for any cli options # azure://subscription_id [:subscription_id] = [:host] || [:subscription_id] super() @cache_enabled[:api_call] = true @cache[:api_call] = {} if @options[:client_secret].nil? && @options[:client_id].nil? parse_credentials_file end # additional platform details release = Gem.loaded_specs['azure_mgmt_resources'].version @platform_details = { release: "azure_mgmt_resources-v#{release}" } connect end |
Instance Method Details
#azure_client(klass = ::Azure::Resources::Profiles::Latest::Mgmt::Client) ⇒ Object
50 51 52 53 54 |
# File 'lib/train/transports/azure.rb', line 50 def azure_client(klass = ::Azure::Resources::Profiles::Latest::Mgmt::Client) return klass.new(@credentials) unless cache_enabled?(:api_call) @cache[:api_call][klass.to_s.to_sym] ||= klass.new(@credentials) end |
#connect ⇒ Object
56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 |
# File 'lib/train/transports/azure.rb', line 56 def connect provider = ::MsRestAzure::ApplicationTokenProvider.new( @options[:tenant_id], @options[:client_id], @options[:client_secret], ) @credentials = { credentials: ::MsRest::TokenCredentials.new(provider), subscription_id: @options[:subscription_id], tenant_id: @options[:tenant_id], client_id: @options[:client_id], client_secret: @options[:client_secret], } end |
#get_api_version(resource_type, options) ⇒ Object
Returns the api version for the specified resource type
If an api version has been specified in the options then the apis version table is updated with that value and it is returned
However if it is not specified, or multiple types are being interrogated then this method will interrogate Azure for each of the types versions and pick the latest one. This is added to the apis table so that it can be retrieved quickly again of another one of those resources is encountered again in the resource collection.
94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 |
# File 'lib/train/transports/azure.rb', line 94 def get_api_version(resource_type, ) # if an api version has been set in the options, add to the apis hashtable with # the resource type if [:apiversion] @apis[resource_type] = [:apiversion] else # only attempt to get the api version from Azure if the resource type # is not present in the apis hashtable unless @apis.key?(resource_type) # determine the namespace for the resource type namespace, type = resource_type.split(%r{/}) client = azure_client(::Azure::Resources::Profiles::Latest::Mgmt::Client) provider = client.providers.get(namespace) # get the latest API version for the type # assuming that this is the first one in the list api_versions = (provider.resource_types.find { |v| v.resource_type == type }).api_versions @apis[resource_type] = api_versions[0] end end # return the api version for the type @apis[resource_type] end |
#platform ⇒ Object
46 47 48 |
# File 'lib/train/transports/azure.rb', line 46 def platform direct_platform('azure', @platform_details) end |
#uri ⇒ Object
72 73 74 |
# File 'lib/train/transports/azure.rb', line 72 def uri "azure://#{@options[:subscription_id]}" end |