lib/fog/azurerm/models/application_gateway/gateway.rb in fog-azure-rm-0.1.1 vs lib/fog/azurerm/models/application_gateway/gateway.rb in fog-azure-rm-0.1.2

- old
+ new

@@ -1,617 +1,617 @@ -module Fog - module ApplicationGateway - class AzureRM - # Gateway model class for Application Gateway Service - class Gateway < Fog::Model - identity :name - attribute :id - attribute :location - attribute :resource_group - attribute :provisioning_state - attribute :sku_name - attribute :sku_tier - attribute :sku_capacity - attribute :operational_state - attribute :gateway_ip_configurations - attribute :ssl_certificates - attribute :frontend_ip_configurations - attribute :frontend_ports - attribute :probes - attribute :backend_address_pools - attribute :backend_http_settings_list - attribute :http_listeners - attribute :url_path_maps - attribute :request_routing_rules - - def self.parse(gateway) - hash = {} - hash['name'] = gateway.name - hash['id'] = gateway.id - hash['location'] = gateway.location - hash['resource_group'] = get_resource_group_from_id(gateway.id) - hash['provisioning_state'] = gateway.provisioning_state - unless gateway.sku.nil? - hash['sku_name'] = gateway.sku.name - hash['sku_tier'] = gateway.sku.tier - hash['sku_capacity'] = gateway.sku.capacity - end - hash['operational_state'] = gateway.operational_state - - hash['gateway_ip_configurations'] = [] - gateway.gateway_ipconfigurations.each do |ip_configuration| - gateway_ip_configuration = Fog::ApplicationGateway::AzureRM::IPConfiguration.new - hash['gateway_ip_configurations'] << gateway_ip_configuration.merge_attributes(Fog::ApplicationGateway::AzureRM::IPConfiguration.parse(ip_configuration)) - end unless gateway.gateway_ipconfigurations.nil? - - hash['ssl_certificates'] = [] - gateway.ssl_certificates.each do |certificate| - ssl_certificate = Fog::ApplicationGateway::AzureRM::SslCertificate.new - hash['ssl_certificates'] << ssl_certificate.merge_attributes(Fog::ApplicationGateway::AzureRM::SslCertificate.parse(certificate)) - end unless gateway.ssl_certificates.nil? - - hash['frontend_ip_configurations'] = [] - gateway.frontend_ipconfigurations.each do |frontend_ip_config| - frontend_ip_configuration = Fog::ApplicationGateway::AzureRM::FrontendIPConfiguration.new - hash['frontend_ip_configurations'] << frontend_ip_configuration.merge_attributes(Fog::ApplicationGateway::AzureRM::FrontendIPConfiguration.parse(frontend_ip_config)) - end unless gateway.frontend_ipconfigurations.nil? - - hash['frontend_ports'] = [] - gateway.frontend_ports.each do |port| - frontend_port = Fog::ApplicationGateway::AzureRM::FrontendPort.new - hash['frontend_ports'] << frontend_port.merge_attributes(Fog::ApplicationGateway::AzureRM::FrontendPort.parse(port)) - end unless gateway.frontend_ports.nil? - - hash['probes'] = [] - gateway.probes.each do |probe| - gateway_probe = Fog::ApplicationGateway::AzureRM::Probe.new - hash['probes'] << gateway_probe.merge_attributes(Fog::ApplicationGateway::AzureRM::Probe.parse(probe)) - end unless gateway.probes.nil? - - hash['backend_address_pools'] = [] - gateway.backend_address_pools.each do |address| - backend_address_pool = Fog::ApplicationGateway::AzureRM::BackendAddressPool.new - hash['backend_address_pools'] << backend_address_pool.merge_attributes(Fog::ApplicationGateway::AzureRM::BackendAddressPool.parse(address)) - end unless gateway.backend_address_pools.nil? - - hash['backend_http_settings_list'] = [] - gateway.backend_http_settings_collection.each do |http_setting| - backend_http_setting = Fog::ApplicationGateway::AzureRM::BackendHttpSetting.new - hash['backend_http_settings_list'] << backend_http_setting.merge_attributes(Fog::ApplicationGateway::AzureRM::BackendHttpSetting.parse(http_setting)) - end unless gateway.backend_http_settings_collection.nil? - - hash['http_listeners'] = [] - gateway.http_listeners.each do |listener| - http_listener = Fog::ApplicationGateway::AzureRM::HttpListener.new - hash['http_listeners'] << http_listener.merge_attributes(Fog::ApplicationGateway::AzureRM::HttpListener.parse(listener)) - end unless gateway.http_listeners.nil? - - hash['url_path_maps'] = [] - gateway.url_path_maps.each do |map| - url_path_map = Fog::ApplicationGateway::AzureRM::UrlPathMap.new - hash['url_path_maps'] << url_path_map.merge_attributes(Fog::ApplicationGateway::AzureRM::UrlPathMap.parse(map)) - end unless gateway.url_path_maps.nil? - - hash['request_routing_rules'] = [] - gateway.request_routing_rules.each do |rule| - request_routing_rule = Fog::ApplicationGateway::AzureRM::RequestRoutingRule.new - hash['request_routing_rules'] << request_routing_rule.merge_attributes(Fog::ApplicationGateway::AzureRM::RequestRoutingRule.parse(rule)) - end unless gateway.request_routing_rules.nil? - hash - end - - def save - requires :name, :location, :resource_group, :sku_name, :sku_tier, :sku_capacity, :gateway_ip_configurations, :frontend_ip_configurations, :frontend_ports, :backend_address_pools, :backend_http_settings_list, :http_listeners, :request_routing_rules - - validate_gateway_ip_configurations(gateway_ip_configurations) unless gateway_ip_configurations.nil? - validate_ssl_certificates(ssl_certificates) unless ssl_certificates.nil? - validate_frontend_ip_configurations(frontend_ip_configurations) unless frontend_ip_configurations.nil? - validate_frontend_ports(frontend_ports) unless frontend_ports.nil? - validate_probes(probes) unless probes.nil? - validate_backend_address_pools(backend_address_pools) unless backend_address_pools.nil? - validate_backend_http_settings_list(backend_http_settings_list) unless backend_http_settings_list.nil? - validate_http_listeners(http_listeners) unless http_listeners.nil? - validate_url_path_maps(url_path_maps) unless url_path_maps.nil? - validate_request_routing_rules(request_routing_rules) unless request_routing_rules.nil? - gateway = service.create_or_update_application_gateway(application_gateway_params) - merge_attributes(Fog::ApplicationGateway::AzureRM::Gateway.parse(gateway)) - end - - def application_gateway_params - { - name: name, - location: location, - resource_group: resource_group, - sku_name: sku_name, - sku_tier: sku_tier, - sku_capacity: sku_capacity, - gateway_ip_configurations: gateway_ip_configurations, - ssl_certificates: ssl_certificates, - frontend_ip_configurations: frontend_ip_configurations, - frontend_ports: frontend_ports, - probes: probes, - backend_address_pools: backend_address_pools, - backend_http_settings_list: backend_http_settings_list, - http_listeners: http_listeners, - url_path_maps: url_path_maps, - request_routing_rules: request_routing_rules - } - end - - def validate_gateway_ip_configurations(gateway_ip_configurations) - if gateway_ip_configurations.is_a?(Array) - if gateway_ip_configurations.any? - gateway_ip_configurations.each do |gateway_ip_configuration| - if gateway_ip_configuration.is_a?(Hash) - validate_gateway_ip_configuration_params(gateway_ip_configuration) - else - raise(ArgumentError, ':gateway_ip_configurations must be an Array of Hashes') - end - end - else - raise(ArgumentError, ':gateway_ip_configurations must not be an empty Array') - end - else - raise(ArgumentError, ':gateway_ip_configurations must be an Array') - end - end - - def validate_gateway_ip_configuration_params(gateway_ip_configuration) - required_params = [ - :name, - :subnet_id - ] - missing = required_params.select { |p| p unless gateway_ip_configuration.key?(p) } - if missing.length == 1 - raise(ArgumentError, "#{missing.first} is required for this operation") - elsif missing.any? - raise(ArgumentError, "#{missing[0...-1].join(', ')} and #{missing[-1]} are required for this operation") - end - end - - def validate_ssl_certificates(ssl_certificates) - if ssl_certificates.is_a?(Array) - if ssl_certificates.any? - ssl_certificates.each do |ssl_certificate| - if ssl_certificate.is_a?(Hash) - validate_ssl_certificate_params(ssl_certificate) - else - raise(ArgumentError, ':ssl_certificates must be an Array of Hashes') - end - end - else - raise(ArgumentError, ':ssl_certificates must not be an empty Array') - end - else - raise(ArgumentError, ':ssl_certificates must be an Array') - end - end - - def validate_ssl_certificate_params(ssl_certificate) - required_params = [ - :name, - :data, - :password, - :public_cert_data - ] - missing = required_params.select { |p| p unless ssl_certificate.key?(p) } - if missing.length == 1 - raise(ArgumentError, "#{missing.first} is required for this operation") - elsif missing.any? - raise(ArgumentError, "#{missing[0...-1].join(', ')} and #{missing[-1]} are required for this operation") - end - end - - def validate_frontend_ip_configurations(frontend_ip_configurations) - if frontend_ip_configurations.is_a?(Array) - if frontend_ip_configurations.any? - frontend_ip_configurations.each do |frontend_ip_configuration| - if frontend_ip_configuration.is_a?(Hash) - validate_frontend_ip_configuration_params(frontend_ip_configuration) - else - raise(ArgumentError, ':frontend_ip_configurations must be an Array of Hashes') - end - end - else - raise(ArgumentError, ':frontend_ip_configurations must not be an empty Array') - end - else - raise(ArgumentError, ':frontend_ip_configurations must be an Array') - end - end - - def validate_frontend_ip_configuration_params(frontend_ip_configuration) - required_params = [ - :name, - :public_ip_address_id, - :private_ip_allocation_method, - :private_ip_address - ] - missing = required_params.select { |p| p unless frontend_ip_configuration.key?(p) } - if missing.length == 1 - raise(ArgumentError, "#{missing.first} is required for this operation") - elsif missing.any? - raise(ArgumentError, "#{missing[0...-1].join(', ')} and #{missing[-1]} are required for this operation") - end - end - - def validate_frontend_ports(frontend_ports) - if frontend_ports.is_a?(Array) - if frontend_ports.any? - frontend_ports.each do |frontend_port| - if frontend_port.is_a?(Hash) - validate_frontend_port_params(frontend_port) - else - raise(ArgumentError, ':frontend_ports must be an Array of Hashes') - end - end - else - raise(ArgumentError, ':frontend_ports must not be an empty Array') - end - else - raise(ArgumentError, ':frontend_ports must be an Array') - end - end - - def validate_frontend_port_params(frontend_port) - required_params = [ - :name, - :port - ] - missing = required_params.select { |p| p unless frontend_port.key?(p) } - if missing.length == 1 - raise(ArgumentError, "#{missing.first} is required for this operation") - elsif missing.any? - raise(ArgumentError, "#{missing[0...-1].join(', ')} and #{missing[-1]} are required for this operation") - end - end - - def validate_probes(probes) - if probes.is_a?(Array) - if probes.any? - probes.each do |probe| - if probe.is_a?(Hash) - validate_probe_params(probe) - else - raise(ArgumentError, ':probes must be an Array of Hashes') - end - end - else - raise(ArgumentError, ':probes must not be an empty Array') - end - else - raise(ArgumentError, ':probes must be an Array') - end - end - - def validate_probe_params(probe) - required_params = [ - :name, - :protocol, - :host, - :path, - :interval, - :timeout, - :unhealthy_threshold - ] - missing = required_params.select { |p| p unless probe.key?(p) } - if missing.length == 1 - raise(ArgumentError, "#{missing.first} is required for this operation") - elsif missing.any? - raise(ArgumentError, "#{missing[0...-1].join(', ')} and #{missing[-1]} are required for this operation") - end - end - - def validate_backend_address_pools(backend_address_pools) - if backend_address_pools.is_a?(Array) - if backend_address_pools.any? - backend_address_pools.each do |backend_address_pool| - if backend_address_pool.is_a?(Hash) - validate_backend_address_pool_params(backend_address_pool) - else - raise(ArgumentError, ':backend_address_pools must be an Array of Hashes') - end - end - else - raise(ArgumentError, ':backend_address_pools must not be an empty Array') - end - else - raise(ArgumentError, ':backend_address_pools must be an Array') - end - end - - def validate_backend_address_pool_params(backend_address_pool) - required_params = [ - :name, - :ip_addresses - ] - missing = required_params.select { |p| p unless backend_address_pool.key?(p) } - if missing.length == 1 - raise(ArgumentError, "#{missing.first} is required for this operation") - elsif missing.any? - raise(ArgumentError, "#{missing[0...-1].join(', ')} and #{missing[-1]} are required for this operation") - end - end - - def validate_backend_http_settings_list(backend_http_settings_list) - if backend_http_settings_list.is_a?(Array) - if backend_http_settings_list.any? - backend_http_settings_list.each do |backend_http_settings| - if backend_http_settings.is_a?(Hash) - validate_backend_http_settings_params(backend_http_settings) - else - raise(ArgumentError, ':backend_http_settings_list must be an Array of Hashes') - end - end - else - raise(ArgumentError, ':backend_http_settings_list must not be an empty Array') - end - else - raise(ArgumentError, ':backend_http_settings_list must be an Array') - end - end - - def validate_backend_http_settings_params(backend_http_settings) - required_params = [ - :name, - :port, - :protocol, - :cookie_based_affinity, - :request_timeout - ] - missing = required_params.select { |p| p unless backend_http_settings.key?(p) } - if missing.length == 1 - raise(ArgumentError, "#{missing.first} is required for this operation") - elsif missing.any? - raise(ArgumentError, "#{missing[0...-1].join(', ')} and #{missing[-1]} are required for this operation") - end - end - - def validate_http_listeners(http_listeners) - if http_listeners.is_a?(Array) - if http_listeners.any? - http_listeners.each do |http_listener| - if http_listener.is_a?(Hash) - validate_http_listener_params(http_listener) - else - raise(ArgumentError, ':http_listeners must be an Array of Hashes') - end - end - else - raise(ArgumentError, ':http_listeners must not be an empty Array') - end - else - raise(ArgumentError, ':http_listeners must be an Array') - end - end - - def validate_http_listener_params(http_listener) - required_params = [ - :name, - :frontend_ip_config_id, - :frontend_port_id, - :protocol - ] - missing = required_params.select { |p| p unless http_listener.key?(p) } - if missing.length == 1 - raise(ArgumentError, "#{missing.first} is required for this operation") - elsif missing.any? - raise(ArgumentError, "#{missing[0...-1].join(', ')} and #{missing[-1]} are required for this operation") - end - end - - def validate_url_path_maps(url_path_maps) - if url_path_maps.is_a?(Array) - if url_path_maps.any? - url_path_maps.each do |url_path_map| - if url_path_map.is_a?(Hash) - validate_url_path_map_params(url_path_map) - else - raise(ArgumentError, ':url_path_maps must be an Array of Hashes') - end - end - else - raise(ArgumentError, ':url_path_maps must not be an empty Array') - end - else - raise(ArgumentError, ':url_path_maps must be an Array') - end - end - - def validate_url_path_map_params(url_path_map) - required_params = [ - :name, - :default_backend_address_pool_id, - :default_backend_http_settings_id, - :path_rules - ] - missing = required_params.select { |p| p unless url_path_map.key?(p) } - if missing.length == 1 - raise(ArgumentError, "#{missing.first} is required for this operation") - elsif missing.any? - raise(ArgumentError, "#{missing[0...-1].join(', ')} and #{missing[-1]} are required for this operation") - end - end - - def validate_request_routing_rules(request_routing_rules) - if request_routing_rules.is_a?(Array) - if request_routing_rules.any? - request_routing_rules.each do |request_routing_rule| - if request_routing_rule.is_a?(Hash) - validate_request_routing_rule_params(request_routing_rule) - else - raise(ArgumentError, ':request_routing_rules must be an Array of Hashes') - end - end - else - raise(ArgumentError, ':request_routing_rules must not be an empty Array') - end - else - raise(ArgumentError, ':request_routing_rules must be an Array') - end - end - - def validate_request_routing_rule_params(request_routing_rule) - required_params = [ - :type, - :http_listener_id - ] - missing = required_params.select { |p| p unless request_routing_rule.key?(p) } - if missing.length == 1 - raise(ArgumentError, "#{missing.first} is required for this operation") - elsif missing.any? - raise(ArgumentError, "#{missing[0...-1].join(', ')} and #{missing[-1]} are required for this operation") - end - end - - def serialize_sub_resources(gateway_params) - ip_configurations = [] - gateway_params[:gateway_ip_configurations].each do |ip_configuration| - hash = {} - ip_configuration.attributes.each { |key, value| hash[key] = value } - ip_configurations << hash - end - gateway_params[:gateway_ip_configurations] = ip_configurations - ssl_certificates = [] - gateway_params[:ssl_certificates].each do |ssl_certificate| - hash = {} - ssl_certificate.attributes.each { |key, value| hash[key] = value } - ssl_certificates << hash - end - gateway_params[:ssl_certificates] = ssl_certificates - frontend_ip_configurations = [] - gateway_params[:frontend_ip_configurations].each do |frontend_ip_configuration| - hash = {} - frontend_ip_configuration.attributes.each { |key, value| hash[key] = value } - frontend_ip_configurations << hash - end - gateway_params[:frontend_ip_configurations] = frontend_ip_configurations - frontend_ports = [] - gateway_params[:frontend_ports].each do |frontend_port| - hash = {} - frontend_port.attributes.each { |key, value| hash[key] = value } - frontend_ports << hash - end - gateway_params[:frontend_ports] = frontend_ports - probes = [] - gateway_params[:probes].each do |probe| - hash = {} - probe.attributes.each { |key, value| hash[key] = value } - probes << hash - end - gateway_params[:probes] = probes - backend_address_pools = [] - gateway_params[:backend_address_pools].each do |backend_address_pool| - hash = {} - backend_address_pool.attributes.each { |key, value| hash[key] = value } - backend_address_pools << hash - end - gateway_params[:backend_address_pools] = backend_address_pools - backend_address_ip_addresses = [] - gateway_params[:backend_address_pools].each do |backend_address_pool| - backend_address_pool[:ip_addresses].each do |ip_address| - hash = {} - ip_address.instance_variables.each_with_object({}) { |instance_variable| hash[:ipAddress] = ip_address.instance_variable_get(instance_variable) } - backend_address_ip_addresses << hash - end - backend_address_pool[:ip_addresses] = backend_address_ip_addresses - end - backend_http_settings_list = [] - gateway_params[:backend_http_settings_list].each do |backend_http_setting| - hash = {} - backend_http_setting.attributes.each { |key, value| hash[key] = value } - backend_http_settings_list << hash - end - gateway_params[:backend_http_settings_list] = backend_http_settings_list - http_listeners = [] - gateway_params[:http_listeners].each do |http_listener| - hash = {} - http_listener.attributes.each { |key, value| hash[key] = value } - http_listeners << hash - end - gateway_params[:http_listeners] = http_listeners - url_path_maps = [] - gateway_params[:url_path_maps].each do |url_path_map| - hash = {} - url_path_map.attributes.each { |key, value| hash[key] = value } - url_path_maps << hash - end - gateway_params[:url_path_maps] = url_path_maps - request_routing_rules = [] - gateway_params[:request_routing_rules].each do |request_routing_rule| - hash = {} - request_routing_rule.attributes.each { |key, value| hash[key] = value } - request_routing_rules << hash - end - gateway_params[:request_routing_rules] = request_routing_rules - gateway_params - end - - def update_sku(sku_name, sku_capacity = nil) - gateway_hash = serialize_sub_resources(application_gateway_params) - gateway = service.update_sku_attributes(gateway_hash, sku_name, sku_capacity) - merge_attributes(Fog::ApplicationGateway::AzureRM::Gateway.parse(gateway)) - end - - def update_gateway_ip_configuration(subnet_id) - gateway_hash = serialize_sub_resources(application_gateway_params) - gateway = service.update_subnet_id_in_gateway_ip_configuration(gateway_hash, subnet_id) - merge_attributes(Fog::ApplicationGateway::AzureRM::Gateway.parse(gateway)) - end - - def add_ssl_certificate(ssl_certificate_obj) - gateway_hash = serialize_sub_resources(application_gateway_params) - gateway_hash[:ssl_certificates] << ssl_certificate_obj - gateway = service.create_or_update_application_gateway(gateway_hash) - merge_attributes(Fog::ApplicationGateway::AzureRM::Gateway.parse(gateway)) - end - - def remove_ssl_certificate(ssl_certificate_obj) - gateway_hash = serialize_sub_resources(application_gateway_params) - gateway_hash[:ssl_certificates].delete(ssl_certificate_obj) - gateway = service.create_or_update_application_gateway(gateway_hash) - merge_attributes(Fog::ApplicationGateway::AzureRM::Gateway.parse(gateway)) - end - - def add_frontend_port(frontend_port_obj) - gateway_hash = serialize_sub_resources(application_gateway_params) - gateway_hash[:frontend_ports] << frontend_port_obj - gateway = service.create_or_update_application_gateway(gateway_hash) - merge_attributes(Fog::ApplicationGateway::AzureRM::Gateway.parse(gateway)) - end - - def remove_frontend_port(frontend_port_obj) - gateway_hash = serialize_sub_resources(application_gateway_params) - gateway_hash[:frontend_ports].delete(frontend_port_obj) - gateway = service.create_or_update_application_gateway(gateway_hash) - merge_attributes(Fog::ApplicationGateway::AzureRM::Gateway.parse(gateway)) - end - - def add_probe(probe_obj) - gateway_hash = serialize_sub_resources(application_gateway_params) - gateway_hash[:probes] << probe_obj - gateway = service.create_or_update_application_gateway(gateway_hash) - merge_attributes(Fog::ApplicationGateway::AzureRM::Gateway.parse(gateway)) - end - - def remove_probe(probe_obj) - gateway_hash = serialize_sub_resources(application_gateway_params) - gateway_hash[:probes].delete(probe_obj) - gateway = service.create_or_update_application_gateway(gateway_hash) - merge_attributes(Fog::ApplicationGateway::AzureRM::Gateway.parse(gateway)) - end - - def start - service.start_application_gateway(resource_group, name) - end - - def stop - service.stop_application_gateway(resource_group, name) - end - - def destroy - service.delete_application_gateway(resource_group, name) - end - end - end - end -end +module Fog + module ApplicationGateway + class AzureRM + # Gateway model class for Application Gateway Service + class Gateway < Fog::Model + identity :name + attribute :id + attribute :location + attribute :resource_group + attribute :provisioning_state + attribute :sku_name + attribute :sku_tier + attribute :sku_capacity + attribute :operational_state + attribute :gateway_ip_configurations + attribute :ssl_certificates + attribute :frontend_ip_configurations + attribute :frontend_ports + attribute :probes + attribute :backend_address_pools + attribute :backend_http_settings_list + attribute :http_listeners + attribute :url_path_maps + attribute :request_routing_rules + + def self.parse(gateway) + hash = {} + hash['name'] = gateway.name + hash['id'] = gateway.id + hash['location'] = gateway.location + hash['resource_group'] = get_resource_group_from_id(gateway.id) + hash['provisioning_state'] = gateway.provisioning_state + unless gateway.sku.nil? + hash['sku_name'] = gateway.sku.name + hash['sku_tier'] = gateway.sku.tier + hash['sku_capacity'] = gateway.sku.capacity + end + hash['operational_state'] = gateway.operational_state + + hash['gateway_ip_configurations'] = [] + gateway.gateway_ipconfigurations.each do |ip_configuration| + gateway_ip_configuration = Fog::ApplicationGateway::AzureRM::IPConfiguration.new + hash['gateway_ip_configurations'] << gateway_ip_configuration.merge_attributes(Fog::ApplicationGateway::AzureRM::IPConfiguration.parse(ip_configuration)) + end unless gateway.gateway_ipconfigurations.nil? + + hash['ssl_certificates'] = [] + gateway.ssl_certificates.each do |certificate| + ssl_certificate = Fog::ApplicationGateway::AzureRM::SslCertificate.new + hash['ssl_certificates'] << ssl_certificate.merge_attributes(Fog::ApplicationGateway::AzureRM::SslCertificate.parse(certificate)) + end unless gateway.ssl_certificates.nil? + + hash['frontend_ip_configurations'] = [] + gateway.frontend_ipconfigurations.each do |frontend_ip_config| + frontend_ip_configuration = Fog::ApplicationGateway::AzureRM::FrontendIPConfiguration.new + hash['frontend_ip_configurations'] << frontend_ip_configuration.merge_attributes(Fog::ApplicationGateway::AzureRM::FrontendIPConfiguration.parse(frontend_ip_config)) + end unless gateway.frontend_ipconfigurations.nil? + + hash['frontend_ports'] = [] + gateway.frontend_ports.each do |port| + frontend_port = Fog::ApplicationGateway::AzureRM::FrontendPort.new + hash['frontend_ports'] << frontend_port.merge_attributes(Fog::ApplicationGateway::AzureRM::FrontendPort.parse(port)) + end unless gateway.frontend_ports.nil? + + hash['probes'] = [] + gateway.probes.each do |probe| + gateway_probe = Fog::ApplicationGateway::AzureRM::Probe.new + hash['probes'] << gateway_probe.merge_attributes(Fog::ApplicationGateway::AzureRM::Probe.parse(probe)) + end unless gateway.probes.nil? + + hash['backend_address_pools'] = [] + gateway.backend_address_pools.each do |address| + backend_address_pool = Fog::ApplicationGateway::AzureRM::BackendAddressPool.new + hash['backend_address_pools'] << backend_address_pool.merge_attributes(Fog::ApplicationGateway::AzureRM::BackendAddressPool.parse(address)) + end unless gateway.backend_address_pools.nil? + + hash['backend_http_settings_list'] = [] + gateway.backend_http_settings_collection.each do |http_setting| + backend_http_setting = Fog::ApplicationGateway::AzureRM::BackendHttpSetting.new + hash['backend_http_settings_list'] << backend_http_setting.merge_attributes(Fog::ApplicationGateway::AzureRM::BackendHttpSetting.parse(http_setting)) + end unless gateway.backend_http_settings_collection.nil? + + hash['http_listeners'] = [] + gateway.http_listeners.each do |listener| + http_listener = Fog::ApplicationGateway::AzureRM::HttpListener.new + hash['http_listeners'] << http_listener.merge_attributes(Fog::ApplicationGateway::AzureRM::HttpListener.parse(listener)) + end unless gateway.http_listeners.nil? + + hash['url_path_maps'] = [] + gateway.url_path_maps.each do |map| + url_path_map = Fog::ApplicationGateway::AzureRM::UrlPathMap.new + hash['url_path_maps'] << url_path_map.merge_attributes(Fog::ApplicationGateway::AzureRM::UrlPathMap.parse(map)) + end unless gateway.url_path_maps.nil? + + hash['request_routing_rules'] = [] + gateway.request_routing_rules.each do |rule| + request_routing_rule = Fog::ApplicationGateway::AzureRM::RequestRoutingRule.new + hash['request_routing_rules'] << request_routing_rule.merge_attributes(Fog::ApplicationGateway::AzureRM::RequestRoutingRule.parse(rule)) + end unless gateway.request_routing_rules.nil? + hash + end + + def save + requires :name, :location, :resource_group, :sku_name, :sku_tier, :sku_capacity, :gateway_ip_configurations, :frontend_ip_configurations, :frontend_ports, :backend_address_pools, :backend_http_settings_list, :http_listeners, :request_routing_rules + + validate_gateway_ip_configurations(gateway_ip_configurations) unless gateway_ip_configurations.nil? + validate_ssl_certificates(ssl_certificates) unless ssl_certificates.nil? + validate_frontend_ip_configurations(frontend_ip_configurations) unless frontend_ip_configurations.nil? + validate_frontend_ports(frontend_ports) unless frontend_ports.nil? + validate_probes(probes) unless probes.nil? + validate_backend_address_pools(backend_address_pools) unless backend_address_pools.nil? + validate_backend_http_settings_list(backend_http_settings_list) unless backend_http_settings_list.nil? + validate_http_listeners(http_listeners) unless http_listeners.nil? + validate_url_path_maps(url_path_maps) unless url_path_maps.nil? + validate_request_routing_rules(request_routing_rules) unless request_routing_rules.nil? + gateway = service.create_or_update_application_gateway(application_gateway_params) + merge_attributes(Fog::ApplicationGateway::AzureRM::Gateway.parse(gateway)) + end + + def application_gateway_params + { + name: name, + location: location, + resource_group: resource_group, + sku_name: sku_name, + sku_tier: sku_tier, + sku_capacity: sku_capacity, + gateway_ip_configurations: gateway_ip_configurations, + ssl_certificates: ssl_certificates, + frontend_ip_configurations: frontend_ip_configurations, + frontend_ports: frontend_ports, + probes: probes, + backend_address_pools: backend_address_pools, + backend_http_settings_list: backend_http_settings_list, + http_listeners: http_listeners, + url_path_maps: url_path_maps, + request_routing_rules: request_routing_rules + } + end + + def validate_gateway_ip_configurations(gateway_ip_configurations) + if gateway_ip_configurations.is_a?(Array) + if gateway_ip_configurations.any? + gateway_ip_configurations.each do |gateway_ip_configuration| + if gateway_ip_configuration.is_a?(Hash) + validate_gateway_ip_configuration_params(gateway_ip_configuration) + else + raise(ArgumentError, ':gateway_ip_configurations must be an Array of Hashes') + end + end + else + raise(ArgumentError, ':gateway_ip_configurations must not be an empty Array') + end + else + raise(ArgumentError, ':gateway_ip_configurations must be an Array') + end + end + + def validate_gateway_ip_configuration_params(gateway_ip_configuration) + required_params = [ + :name, + :subnet_id + ] + missing = required_params.select { |p| p unless gateway_ip_configuration.key?(p) } + if missing.length == 1 + raise(ArgumentError, "#{missing.first} is required for this operation") + elsif missing.any? + raise(ArgumentError, "#{missing[0...-1].join(', ')} and #{missing[-1]} are required for this operation") + end + end + + def validate_ssl_certificates(ssl_certificates) + if ssl_certificates.is_a?(Array) + if ssl_certificates.any? + ssl_certificates.each do |ssl_certificate| + if ssl_certificate.is_a?(Hash) + validate_ssl_certificate_params(ssl_certificate) + else + raise(ArgumentError, ':ssl_certificates must be an Array of Hashes') + end + end + else + raise(ArgumentError, ':ssl_certificates must not be an empty Array') + end + else + raise(ArgumentError, ':ssl_certificates must be an Array') + end + end + + def validate_ssl_certificate_params(ssl_certificate) + required_params = [ + :name, + :data, + :password, + :public_cert_data + ] + missing = required_params.select { |p| p unless ssl_certificate.key?(p) } + if missing.length == 1 + raise(ArgumentError, "#{missing.first} is required for this operation") + elsif missing.any? + raise(ArgumentError, "#{missing[0...-1].join(', ')} and #{missing[-1]} are required for this operation") + end + end + + def validate_frontend_ip_configurations(frontend_ip_configurations) + if frontend_ip_configurations.is_a?(Array) + if frontend_ip_configurations.any? + frontend_ip_configurations.each do |frontend_ip_configuration| + if frontend_ip_configuration.is_a?(Hash) + validate_frontend_ip_configuration_params(frontend_ip_configuration) + else + raise(ArgumentError, ':frontend_ip_configurations must be an Array of Hashes') + end + end + else + raise(ArgumentError, ':frontend_ip_configurations must not be an empty Array') + end + else + raise(ArgumentError, ':frontend_ip_configurations must be an Array') + end + end + + def validate_frontend_ip_configuration_params(frontend_ip_configuration) + required_params = [ + :name, + :public_ip_address_id, + :private_ip_allocation_method, + :private_ip_address + ] + missing = required_params.select { |p| p unless frontend_ip_configuration.key?(p) } + if missing.length == 1 + raise(ArgumentError, "#{missing.first} is required for this operation") + elsif missing.any? + raise(ArgumentError, "#{missing[0...-1].join(', ')} and #{missing[-1]} are required for this operation") + end + end + + def validate_frontend_ports(frontend_ports) + if frontend_ports.is_a?(Array) + if frontend_ports.any? + frontend_ports.each do |frontend_port| + if frontend_port.is_a?(Hash) + validate_frontend_port_params(frontend_port) + else + raise(ArgumentError, ':frontend_ports must be an Array of Hashes') + end + end + else + raise(ArgumentError, ':frontend_ports must not be an empty Array') + end + else + raise(ArgumentError, ':frontend_ports must be an Array') + end + end + + def validate_frontend_port_params(frontend_port) + required_params = [ + :name, + :port + ] + missing = required_params.select { |p| p unless frontend_port.key?(p) } + if missing.length == 1 + raise(ArgumentError, "#{missing.first} is required for this operation") + elsif missing.any? + raise(ArgumentError, "#{missing[0...-1].join(', ')} and #{missing[-1]} are required for this operation") + end + end + + def validate_probes(probes) + if probes.is_a?(Array) + if probes.any? + probes.each do |probe| + if probe.is_a?(Hash) + validate_probe_params(probe) + else + raise(ArgumentError, ':probes must be an Array of Hashes') + end + end + else + raise(ArgumentError, ':probes must not be an empty Array') + end + else + raise(ArgumentError, ':probes must be an Array') + end + end + + def validate_probe_params(probe) + required_params = [ + :name, + :protocol, + :host, + :path, + :interval, + :timeout, + :unhealthy_threshold + ] + missing = required_params.select { |p| p unless probe.key?(p) } + if missing.length == 1 + raise(ArgumentError, "#{missing.first} is required for this operation") + elsif missing.any? + raise(ArgumentError, "#{missing[0...-1].join(', ')} and #{missing[-1]} are required for this operation") + end + end + + def validate_backend_address_pools(backend_address_pools) + if backend_address_pools.is_a?(Array) + if backend_address_pools.any? + backend_address_pools.each do |backend_address_pool| + if backend_address_pool.is_a?(Hash) + validate_backend_address_pool_params(backend_address_pool) + else + raise(ArgumentError, ':backend_address_pools must be an Array of Hashes') + end + end + else + raise(ArgumentError, ':backend_address_pools must not be an empty Array') + end + else + raise(ArgumentError, ':backend_address_pools must be an Array') + end + end + + def validate_backend_address_pool_params(backend_address_pool) + required_params = [ + :name, + :ip_addresses + ] + missing = required_params.select { |p| p unless backend_address_pool.key?(p) } + if missing.length == 1 + raise(ArgumentError, "#{missing.first} is required for this operation") + elsif missing.any? + raise(ArgumentError, "#{missing[0...-1].join(', ')} and #{missing[-1]} are required for this operation") + end + end + + def validate_backend_http_settings_list(backend_http_settings_list) + if backend_http_settings_list.is_a?(Array) + if backend_http_settings_list.any? + backend_http_settings_list.each do |backend_http_settings| + if backend_http_settings.is_a?(Hash) + validate_backend_http_settings_params(backend_http_settings) + else + raise(ArgumentError, ':backend_http_settings_list must be an Array of Hashes') + end + end + else + raise(ArgumentError, ':backend_http_settings_list must not be an empty Array') + end + else + raise(ArgumentError, ':backend_http_settings_list must be an Array') + end + end + + def validate_backend_http_settings_params(backend_http_settings) + required_params = [ + :name, + :port, + :protocol, + :cookie_based_affinity, + :request_timeout + ] + missing = required_params.select { |p| p unless backend_http_settings.key?(p) } + if missing.length == 1 + raise(ArgumentError, "#{missing.first} is required for this operation") + elsif missing.any? + raise(ArgumentError, "#{missing[0...-1].join(', ')} and #{missing[-1]} are required for this operation") + end + end + + def validate_http_listeners(http_listeners) + if http_listeners.is_a?(Array) + if http_listeners.any? + http_listeners.each do |http_listener| + if http_listener.is_a?(Hash) + validate_http_listener_params(http_listener) + else + raise(ArgumentError, ':http_listeners must be an Array of Hashes') + end + end + else + raise(ArgumentError, ':http_listeners must not be an empty Array') + end + else + raise(ArgumentError, ':http_listeners must be an Array') + end + end + + def validate_http_listener_params(http_listener) + required_params = [ + :name, + :frontend_ip_config_id, + :frontend_port_id, + :protocol + ] + missing = required_params.select { |p| p unless http_listener.key?(p) } + if missing.length == 1 + raise(ArgumentError, "#{missing.first} is required for this operation") + elsif missing.any? + raise(ArgumentError, "#{missing[0...-1].join(', ')} and #{missing[-1]} are required for this operation") + end + end + + def validate_url_path_maps(url_path_maps) + if url_path_maps.is_a?(Array) + if url_path_maps.any? + url_path_maps.each do |url_path_map| + if url_path_map.is_a?(Hash) + validate_url_path_map_params(url_path_map) + else + raise(ArgumentError, ':url_path_maps must be an Array of Hashes') + end + end + else + raise(ArgumentError, ':url_path_maps must not be an empty Array') + end + else + raise(ArgumentError, ':url_path_maps must be an Array') + end + end + + def validate_url_path_map_params(url_path_map) + required_params = [ + :name, + :default_backend_address_pool_id, + :default_backend_http_settings_id, + :path_rules + ] + missing = required_params.select { |p| p unless url_path_map.key?(p) } + if missing.length == 1 + raise(ArgumentError, "#{missing.first} is required for this operation") + elsif missing.any? + raise(ArgumentError, "#{missing[0...-1].join(', ')} and #{missing[-1]} are required for this operation") + end + end + + def validate_request_routing_rules(request_routing_rules) + if request_routing_rules.is_a?(Array) + if request_routing_rules.any? + request_routing_rules.each do |request_routing_rule| + if request_routing_rule.is_a?(Hash) + validate_request_routing_rule_params(request_routing_rule) + else + raise(ArgumentError, ':request_routing_rules must be an Array of Hashes') + end + end + else + raise(ArgumentError, ':request_routing_rules must not be an empty Array') + end + else + raise(ArgumentError, ':request_routing_rules must be an Array') + end + end + + def validate_request_routing_rule_params(request_routing_rule) + required_params = [ + :type, + :http_listener_id + ] + missing = required_params.select { |p| p unless request_routing_rule.key?(p) } + if missing.length == 1 + raise(ArgumentError, "#{missing.first} is required for this operation") + elsif missing.any? + raise(ArgumentError, "#{missing[0...-1].join(', ')} and #{missing[-1]} are required for this operation") + end + end + + def serialize_sub_resources(gateway_params) + ip_configurations = [] + gateway_params[:gateway_ip_configurations].each do |ip_configuration| + hash = {} + ip_configuration.attributes.each { |key, value| hash[key] = value } + ip_configurations << hash + end + gateway_params[:gateway_ip_configurations] = ip_configurations + ssl_certificates = [] + gateway_params[:ssl_certificates].each do |ssl_certificate| + hash = {} + ssl_certificate.attributes.each { |key, value| hash[key] = value } + ssl_certificates << hash + end + gateway_params[:ssl_certificates] = ssl_certificates + frontend_ip_configurations = [] + gateway_params[:frontend_ip_configurations].each do |frontend_ip_configuration| + hash = {} + frontend_ip_configuration.attributes.each { |key, value| hash[key] = value } + frontend_ip_configurations << hash + end + gateway_params[:frontend_ip_configurations] = frontend_ip_configurations + frontend_ports = [] + gateway_params[:frontend_ports].each do |frontend_port| + hash = {} + frontend_port.attributes.each { |key, value| hash[key] = value } + frontend_ports << hash + end + gateway_params[:frontend_ports] = frontend_ports + probes = [] + gateway_params[:probes].each do |probe| + hash = {} + probe.attributes.each { |key, value| hash[key] = value } + probes << hash + end + gateway_params[:probes] = probes + backend_address_pools = [] + gateway_params[:backend_address_pools].each do |backend_address_pool| + hash = {} + backend_address_pool.attributes.each { |key, value| hash[key] = value } + backend_address_pools << hash + end + gateway_params[:backend_address_pools] = backend_address_pools + backend_address_ip_addresses = [] + gateway_params[:backend_address_pools].each do |backend_address_pool| + backend_address_pool[:ip_addresses].each do |ip_address| + hash = {} + ip_address.instance_variables.each_with_object({}) { |instance_variable| hash[:ipAddress] = ip_address.instance_variable_get(instance_variable) } + backend_address_ip_addresses << hash + end + backend_address_pool[:ip_addresses] = backend_address_ip_addresses + end + backend_http_settings_list = [] + gateway_params[:backend_http_settings_list].each do |backend_http_setting| + hash = {} + backend_http_setting.attributes.each { |key, value| hash[key] = value } + backend_http_settings_list << hash + end + gateway_params[:backend_http_settings_list] = backend_http_settings_list + http_listeners = [] + gateway_params[:http_listeners].each do |http_listener| + hash = {} + http_listener.attributes.each { |key, value| hash[key] = value } + http_listeners << hash + end + gateway_params[:http_listeners] = http_listeners + url_path_maps = [] + gateway_params[:url_path_maps].each do |url_path_map| + hash = {} + url_path_map.attributes.each { |key, value| hash[key] = value } + url_path_maps << hash + end + gateway_params[:url_path_maps] = url_path_maps + request_routing_rules = [] + gateway_params[:request_routing_rules].each do |request_routing_rule| + hash = {} + request_routing_rule.attributes.each { |key, value| hash[key] = value } + request_routing_rules << hash + end + gateway_params[:request_routing_rules] = request_routing_rules + gateway_params + end + + def update_sku(sku_name, sku_capacity = nil) + gateway_hash = serialize_sub_resources(application_gateway_params) + gateway = service.update_sku_attributes(gateway_hash, sku_name, sku_capacity) + merge_attributes(Fog::ApplicationGateway::AzureRM::Gateway.parse(gateway)) + end + + def update_gateway_ip_configuration(subnet_id) + gateway_hash = serialize_sub_resources(application_gateway_params) + gateway = service.update_subnet_id_in_gateway_ip_configuration(gateway_hash, subnet_id) + merge_attributes(Fog::ApplicationGateway::AzureRM::Gateway.parse(gateway)) + end + + def add_ssl_certificate(ssl_certificate_obj) + gateway_hash = serialize_sub_resources(application_gateway_params) + gateway_hash[:ssl_certificates] << ssl_certificate_obj + gateway = service.create_or_update_application_gateway(gateway_hash) + merge_attributes(Fog::ApplicationGateway::AzureRM::Gateway.parse(gateway)) + end + + def remove_ssl_certificate(ssl_certificate_obj) + gateway_hash = serialize_sub_resources(application_gateway_params) + gateway_hash[:ssl_certificates].delete(ssl_certificate_obj) + gateway = service.create_or_update_application_gateway(gateway_hash) + merge_attributes(Fog::ApplicationGateway::AzureRM::Gateway.parse(gateway)) + end + + def add_frontend_port(frontend_port_obj) + gateway_hash = serialize_sub_resources(application_gateway_params) + gateway_hash[:frontend_ports] << frontend_port_obj + gateway = service.create_or_update_application_gateway(gateway_hash) + merge_attributes(Fog::ApplicationGateway::AzureRM::Gateway.parse(gateway)) + end + + def remove_frontend_port(frontend_port_obj) + gateway_hash = serialize_sub_resources(application_gateway_params) + gateway_hash[:frontend_ports].delete(frontend_port_obj) + gateway = service.create_or_update_application_gateway(gateway_hash) + merge_attributes(Fog::ApplicationGateway::AzureRM::Gateway.parse(gateway)) + end + + def add_probe(probe_obj) + gateway_hash = serialize_sub_resources(application_gateway_params) + gateway_hash[:probes] << probe_obj + gateway = service.create_or_update_application_gateway(gateway_hash) + merge_attributes(Fog::ApplicationGateway::AzureRM::Gateway.parse(gateway)) + end + + def remove_probe(probe_obj) + gateway_hash = serialize_sub_resources(application_gateway_params) + gateway_hash[:probes].delete(probe_obj) + gateway = service.create_or_update_application_gateway(gateway_hash) + merge_attributes(Fog::ApplicationGateway::AzureRM::Gateway.parse(gateway)) + end + + def start + service.start_application_gateway(resource_group, name) + end + + def stop + service.stop_application_gateway(resource_group, name) + end + + def destroy + service.delete_application_gateway(resource_group, name) + end + end + end + end +end