fog/fog-azure-rm

View on GitHub
lib/fog/azurerm/requests/application_gateway/create_or_update_application_gateway.rb

Summary

Maintainability
B
4 hrs
Test Coverage
F
9%
module Fog
  module ApplicationGateway
    class AzureRM
      # Real class for Application Gateway Request
      class Real
        def create_or_update_application_gateway(gateway_params)
          msg = "Creating/Updated Application Gateway: #{gateway_params[:name]} in Resource Group: #{gateway_params[:resource_group]}."
          Fog::Logger.debug msg
          gateway = define_application_gateway(gateway_params)
          begin
            gateway_obj = @network_client.application_gateways.create_or_update(gateway_params[:resource_group], gateway_params[:name], gateway)
          rescue MsRestAzure::AzureOperationError => e
            raise_azure_exception(e, msg)
          end
          Fog::Logger.debug "Application Gateway #{gateway_params[:name]} created/updated successfully."
          gateway_obj
        end

        private

        def define_application_gateway(gateway_params)
          application_gateway = Azure::ARM::Network::Models::ApplicationGateway.new
          application_gateway.name = gateway_params[:name]
          application_gateway.location = gateway_params[:location]

          application_gateway.gateway_ipconfigurations = define_gateway_ip_configuration(gateway_params[:gateway_ip_configurations]) if gateway_params[:gateway_ip_configurations]
          application_gateway.ssl_certificates = define_ssl_certificate(gateway_params[:ssl_certificates]) if gateway_params[:ssl_certificates]
          application_gateway.frontend_ipconfigurations = define_frontend_ip_configurations(gateway_params[:frontend_ip_configurations]) if gateway_params[:frontend_ip_configurations]
          application_gateway.frontend_ports = define_frontend_ports(gateway_params[:frontend_ports]) if gateway_params[:frontend_ports]
          application_gateway.probes = define_probes(gateway_params[:probes]) if gateway_params[:probes]
          application_gateway.backend_address_pools = define_backend_address_pools(gateway_params[:backend_address_pools]) if gateway_params[:backend_address_pools]
          application_gateway.backend_http_settings_collection = define_backend_http_settings(gateway_params[:backend_http_settings_list]) if gateway_params[:backend_http_settings_list]
          application_gateway.http_listeners = define_http_listeners(gateway_params[:http_listeners]) if gateway_params[:http_listeners]
          application_gateway.url_path_maps = define_url_path_maps(gateway_params[:url_path_maps]) if gateway_params[:url_path_maps]
          application_gateway.request_routing_rules = define_request_routing_rules(gateway_params[:request_routing_rules]) if gateway_params[:request_routing_rules]
          application_gateway.tags = gateway_params[:tags]

          gateway_sku = Azure::ARM::Network::Models::ApplicationGatewaySku.new
          gateway_sku.name = gateway_params[:sku_name]
          gateway_sku.tier = gateway_params[:sku_tier]
          gateway_sku.capacity = gateway_params[:sku_capacity]
          application_gateway.sku = gateway_sku

          application_gateway
        end

        def define_gateway_ip_configuration(gateway_ip_configurations)
          gateway_ip_configuration_arr = []
          gateway_ip_configurations.each do |ip_configuration|
            configuration = Azure::ARM::Network::Models::ApplicationGatewayIPConfiguration.new
            configuration.provisioning_state = ip_configuration[:provisioning_state]
            if ip_configuration[:subnet_id]
              subnet = Azure::ARM::Network::Models::Subnet.new
              subnet.id = ip_configuration[:subnet_id]
              configuration.subnet = subnet
            end

            configuration.name = ip_configuration[:name]
            gateway_ip_configuration_arr.push(configuration)
          end
          gateway_ip_configuration_arr
        end

        def define_ssl_certificate(ssl_certificates)
          ssl_certificate_arr = []
          ssl_certificates.each do |ssl_certificate|
            certificate = Azure::ARM::Network::Models::ApplicationGatewaySslCertificate.new
            certificate.data = ssl_certificate[:data]
            certificate.password = ssl_certificate[:password]
            certificate.public_cert_data = ssl_certificate[:public_cert_data]

            certificate.name = ssl_certificate[:name]
            ssl_certificate_arr.push(ssl_certificate)
          end
          ssl_certificate_arr
        end

        def define_frontend_ip_configurations(frontend_ip_configurations)
          frontend_ip_configuration_arr = []
          frontend_ip_configurations.each do |fic|
            frontend_ip_configuration = Azure::ARM::Network::Models::ApplicationGatewayFrontendIPConfiguration.new

            frontend_ip_configuration.private_ipaddress = fic[:private_ip_address]
            frontend_ip_configuration.private_ipallocation_method = fic[:private_ip_allocation_method]

            if fic[:subnet_id]
              subnet = Azure::ARM::Network::Models::Subnet.new
              subnet.id = fic[:subnet_id]
              frontend_ip_configuration.subnet = subnet
            end

            unless fic[:public_ip_address_id].nil?
              pip = Azure::ARM::Network::Models::PublicIPAddress.new
              pip.id = fic[:public_ip_address_id]
              frontend_ip_configuration.public_ipaddress = pip
            end

            frontend_ip_configuration.name = fic[:name]

            frontend_ip_configuration_arr.push(frontend_ip_configuration)
          end
          frontend_ip_configuration_arr
        end

        def define_frontend_ports(frontend_ports)
          frontend_port_arr = []
          frontend_ports.each do |port|
            frontend_port = Azure::ARM::Network::Models::ApplicationGatewayFrontendPort.new

            frontend_port.port = port[:port]
            frontend_port.name = port[:name]

            frontend_port_arr.push(frontend_port)
          end
          frontend_port_arr
        end

        def define_probes(probes)
          probe_arr = []
          probes.each do |probe|
            ag_probe = Azure::ARM::Network::Models::ApplicationGatewayProbe.new
            ag_probe.protocol = probe[:protocol]
            ag_probe.host = probe[:host]
            ag_probe.path = probe[:path]
            ag_probe.interval = probe[:interval]
            ag_probe.timeout = probe[:timeout]
            ag_probe.unhealthy_threshold = probe[:unhealthy_threshold]

            ag_probe.name = probe[:name]
            probe_arr.push(ag_probe)
          end
          probe_arr
        end

        def define_backend_address_pools(backend_address_pools)
          backend_address_pool_arr = []

          backend_address_pools.each do |bap|
            backend_pool = Azure::ARM::Network::Models::ApplicationGatewayBackendAddressPool.new

            backend_addresses1 = bap[:ip_addresses]
            addresses = []
            backend_addresses1.each do |address|
              backend_add = Azure::ARM::Network::Models::ApplicationGatewayBackendAddress.new
              backend_add.ip_address = address[:ipAddress]
              addresses.push(backend_add)
            end
            backend_pool.backend_addresses = addresses

            backend_pool.name = bap[:name]
            backend_address_pool_arr.push(backend_pool)
          end
          backend_address_pool_arr
        end

        def define_backend_http_settings(backend_http_settings_list)
          backend_http_setting_arr = []

          backend_http_settings_list.each do |http_setting|
            backend_http_setting = Azure::ARM::Network::Models::ApplicationGatewayBackendHttpSettings.new
            backend_http_setting.port = http_setting[:port]
            backend_http_setting.protocol = http_setting[:protocol]
            backend_http_setting.cookie_based_affinity = http_setting[:cookie_based_affinity]
            backend_http_setting.request_timeout = http_setting[:request_timeout]
            if http_setting[:probe]
              probe = Azure::ARM::Network::Models::Probe.new
              probe.id = http_setting[:probe]
              backend_http_setting.probe = probe
            end

            backend_http_setting.name = http_setting[:name]
            backend_http_setting_arr.push(backend_http_setting)
          end
          backend_http_setting_arr
        end

        def define_http_listeners(http_listeners)
          http_listener_arr = []

          http_listeners.each do |listener|
            http_listener = Azure::ARM::Network::Models::ApplicationGatewayHttpListener.new

            http_listener.protocol = listener[:protocol]
            http_listener.host_name = listener[:host_name]
            http_listener.require_server_name_indication = listener[:require_server_name_indication]
            if listener[:frontend_ip_config_id]
              frontend_ip = Azure::ARM::Network::Models::FrontendIPConfiguration.new
              frontend_ip.id = listener[:frontend_ip_config_id]
              http_listener.frontend_ipconfiguration = frontend_ip
            end
            if listener[:frontend_port_id]
              frontend_port = Azure::ARM::Network::Models::ApplicationGatewayFrontendPort.new
              frontend_port.id = listener[:frontend_port_id]
              http_listener.frontend_port = frontend_port
            end
            if listener[:ssl_certificate_id]
              ssl_cert = Azure::ARM::Network::Models::ApplicationGatewaySslCertificate.new
              ssl_cert.id = listener[:ssl_certificate_id]
              http_listener.ssl_certificate = ssl_cert
            end

            http_listener.name = listener[:name]
            http_listener_arr.push(http_listener)
          end
          http_listener_arr
        end

        def define_url_path_maps(url_path_maps)
          url_path_map_arr = []

          url_path_maps.each do |map|
            url_path_map = Azure::ARM::Network::Models::ApplicationGatewayUrlPathMap.new

            if map[:default_backend_address_pool_id]
              default_backend_address_pool = Azure::ARM::Network::Models::BackendAddressPool.new
              default_backend_address_pool.id = map[:default_backend_address_pool_id]
              url_path_map.default_backend_address_pool = default_backend_address_pool
            end
            if map[:default_backend_http_settings_id]
              default_backend_http_setting = Azure::ARM::Network::Models::ApplicationGatewayBackendHttpSettings.new
              default_backend_http_setting.id = map[:default_backend_http_settings_id]
              url_path_map.default_backend_http_settings = default_backend_http_setting
            end

            if map[:path_rules]
              path_rules = map[:path_rules]
              path_rule_arr = define_path_rules(path_rules)
              url_path_map.path_rules = path_rule_arr
            end

            url_path_map.name = map[:name]
            url_path_map_arr.push(url_path_map)
          end
          url_path_map_arr
        end

        def define_path_rules(path_rules)
          path_rule_arr = []
          path_rules.each do |rule|
            path_rule = Azure::ARM::Network::Models::ApplicationGatewayPathRule.new
            if rule[:backend_address_pool_id]
              backend_address_pool = Azure::ARM::Network::Models::BackendAddressPool.new
              backend_address_pool.id = rule[:backend_address_pool_id]
              path_rule.backend_address_pool = backend_address_pool
            end
            if rule[:backend_http_settings_id]
              backend_http_setting = Azure::ARM::Network::Models::ApplicationGatewayBackendHttpSettings.new
              backend_http_setting.id = rule[:backend_http_settings_id]
              path_rule.backend_http_settings = backend_http_setting
            end
            path_urls = rule[:paths]

            paths = []
            path_urls.each do |url|
              paths.push(url)
            end
            path_rule.paths = paths

            path_rule.name = rule[:name]
            path_rule_arr.push(path_rule)
          end
          path_rule_arr
        end

        def define_request_routing_rules(request_routing_rules)
          request_routing_rule_arr = []

          request_routing_rules.each do |rule|
            request_routing_rule = Azure::ARM::Network::Models::ApplicationGatewayRequestRoutingRule.new

            request_routing_rule.rule_type = rule[:type]
            if rule[:http_listener_id]
              http_listener = Azure::ARM::Network::Models::ApplicationGatewayHttpListener.new
              http_listener.id = rule[:http_listener_id]
              request_routing_rule.http_listener = http_listener
            end
            if rule[:backend_address_pool_id]
              backend_address_pool = Azure::ARM::Network::Models::BackendAddressPool.new
              backend_address_pool.id = rule[:backend_address_pool_id]
              request_routing_rule.backend_address_pool = backend_address_pool
            end
            if rule[:backend_http_settings_id]
              backend_http_setting = Azure::ARM::Network::Models::ApplicationGatewayBackendHttpSettings.new
              backend_http_setting.id = rule[:backend_http_settings_id]
              request_routing_rule.backend_http_settings = backend_http_setting
            end

            request_routing_rule.name = rule[:name]
            request_routing_rule_arr.push(request_routing_rule)
          end
          request_routing_rule_arr
        end
      end

      # Mock class for Network Request
      class Mock
        def create_or_update_application_gateway(*)
        end
      end
    end
  end
end