fog/fog-azure-rm

View on GitHub
lib/fog/azurerm/requests/traffic_manager/create_or_update_traffic_manager_endpoint.rb

Summary

Maintainability
A
45 mins
Test Coverage
F
33%
module Fog
  module TrafficManager
    class AzureRM
      # Real class for Traffic Manager Request
      class Real
        def create_or_update_traffic_manager_endpoint(endpoint_hash)
          msg = "Creating Traffic Manager Endpoint: #{endpoint_hash[:name]}."
          Fog::Logger.debug msg
          endpoint_parameters = get_endpoint_object(endpoint_hash[:target_resource_id], endpoint_hash[:target], endpoint_hash[:weight], endpoint_hash[:priority], endpoint_hash[:endpoint_location], endpoint_hash[:min_child_endpoints])
          begin
            traffic_manager_endpoint = @traffic_mgmt_client.endpoints.create_or_update(endpoint_hash[:resource_group], endpoint_hash[:traffic_manager_profile_name],
                                                                                       endpoint_hash[:type], endpoint_hash[:name], endpoint_parameters)
          rescue MsRestAzure::AzureOperationError => e
            raise_azure_exception(e, msg)
          end
          Fog::Logger.debug "Traffic Manager Endpoint: #{endpoint_hash[:name]} created successfully."
          traffic_manager_endpoint
        end

        private

        def get_endpoint_object(target_resource_id, target, weight, priority, endpoint_location, min_child_endpoints)
          endpoint = Azure::ARM::TrafficManager::Models::Endpoint.new
          endpoint.min_child_endpoints = min_child_endpoints
          endpoint.target_resource_id = target_resource_id
          endpoint.endpoint_location = endpoint_location
          endpoint.priority = priority
          endpoint.target = target
          endpoint.weight = weight
          endpoint
        end
      end

      # Mock class for TrafficManager Request
      class Mock
        def create_or_update_traffic_manager_endpoint(*)
          endpoint = {
            'name' => '{endpoint-name}',
            'type' => 'Microsoft.Network/trafficManagerProfiles/externalEndpoints',
            'properties' => {
              'target' => 'myendpoint.contoso.com',
              'endpointStatus' => 'Enabled',
              'weight' => 10,
              'priority' => 5,
              'endpointLocation' => 'northeurope'
            }
          }
          endpoint_mapper = Azure::ARM::TrafficManager::Models::Endpoint.mapper
          @traffic_mgmt_client.deserialize(endpoint_mapper, endpoint, 'result.body')
        end
      end
    end
  end
end