lib/azure/virtual_network_management/serialization.rb in azure-0.6.0 vs lib/azure/virtual_network_management/serialization.rb in azure-0.6.1

- old
+ new

@@ -1,186 +1,186 @@ -#------------------------------------------------------------------------- -# Copyright 2013 Microsoft Open Technologies, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -#-------------------------------------------------------------------------- -require 'azure/virtual_network_management/virtual_network' - -module Azure - module VirtualNetworkManagement - module Serialization - def self.virtual_network_from_xml(network_xml) - virtual_networks = [] - virtual_network_services_xml = network_xml.css( - 'VirtualNetworkSites VirtualNetworkSite' - ) - - virtual_network_services_xml.each do |virtual_network_service_xml| - virtual_network = VirtualNetwork.new - virtual_network.name = xml_content( - virtual_network_service_xml, - 'Name' - ) - virtual_network.id = xml_content( - virtual_network_service_xml, - 'Id' - ) - virtual_network.affinity_group = xml_content( - virtual_network_service_xml, - 'AffinityGroup' - ) - virtual_network.state = xml_content( - virtual_network_service_xml, - 'State' - ) - address_prefixes = virtual_network_service_xml.css( - 'AddressSpace AddressPrefixes AddressPrefix' - ) - virtual_network.address_space = address_prefixes.map do |ap| - ap.content - end - subnets_xml = virtual_network_service_xml.css('Subnets Subnet') - virtual_network.subnets = subnets_xml.map do |sn| - { - name: xml_content(sn, 'Name'), - address_prefix: xml_content(sn, 'AddressPrefix') - } - end - dns_servers_xml = virtual_network_service_xml.css( - 'Dns DnsServers DnsServer' - ) - virtual_network.dns_servers = dns_servers_xml.map do |dns| - { - name: xml_content(dns, 'Name'), - ip_address: xml_content(dns, 'Address') - } - end - - virtual_networks << virtual_network - end - virtual_networks.compact - end - - def self.virtual_network_to_xml(vnet_name, - affinity_group, - address_spaces, - options = {}) - options[:dns] ||= {} - options[:subnet] ||= {} - options[:subnet].each do |subnet| - IPAddr.validate_ip_and_prefix(subnet[:ip_address], subnet[:cidr]) - end - address_spaces = address_spaces.compact.uniq.reject(&:empty?) - address_spaces.each do |address_space| - IPAddr.validate_address_space(address_space) - end - vnet_service = Azure::VirtualNetworkManagementService.new - vnets = vnet_service.list_virtual_networks - builder = Nokogiri::XML::Builder.new do |xml| - xml.NetworkConfiguration( - 'xmlns' => 'http://schemas.microsoft.com/ServiceHosting'\ - '/2011/07/NetworkConfiguration') do - xml.VirtualNetworkConfiguration do - xml.Dns do - xml.DnsServers do - dns = vnets.map(&:dns_servers) - dns.flatten! unless dns.empty? - dns_server_to_xml(xml, dns, options[:dns]) - end - end - xml.VirtualNetworkSites do - vnets.each do |vnet| - if vnet.name != vnet_name - others = { - subnet: vnet.subnets, dns: vnet.dns_servers - } - virtual_network_site(xml, - vnet.name, - vnet.affinity_group, - vnet.address_space, - others) - end - end - virtual_network_site(xml, - vnet_name, - affinity_group, - address_spaces, - options) - end - end - end - end - builder.doc.to_xml - end - - private - - def self.virtual_network_site(xml, - vnet_name, - affinity_group, - address_spaces, - options) - xml.VirtualNetworkSite( - 'name' => vnet_name, - 'AffinityGroup' => affinity_group - ) do - xml.DnsServersRef do - options[:dns].each do |dns| - xml.DnsServerRef('name' => dns[:name]) - end - end - xml.Subnets do - options[:subnet].each do |subnet| - xml.Subnet('name' => subnet[:name]) do - if subnet.key?(:cidr) - address_prefix = IPAddr.address_prefix(subnet[:ip_address], - subnet[:cidr]) - else - address_prefix = subnet[:address_prefix] - end - xml.AddressPrefix address_prefix - end - end - end - xml.AddressSpace do - address_spaces.each do |address_space| - xml.AddressPrefix address_space - end - end - end - end - - def self.dns_server_to_xml(xml, dns_servers, new_dns_servers) - dns_names = [] - - dns_list = {} - dns_list.merge!(merge_dns(new_dns_servers)) - dns_list.merge!(merge_dns(dns_servers)) - - dns_list.each do |name, ip_address| - xml.DnsServer('name' => name, 'IPAddress' => ip_address) - end - end - - def self.merge_dns(dns_list) - new_dns_list = {} - - dns_list.each do |dns| - unless dns_list.include?(dns[:name]) - new_dns_list.merge!(dns[:name] => dns[:ip_address]) - end - end - - new_dns_list - end - end - end -end +#------------------------------------------------------------------------- +# Copyright 2013 Microsoft Open Technologies, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +#-------------------------------------------------------------------------- +require 'azure/virtual_network_management/virtual_network' + +module Azure + module VirtualNetworkManagement + module Serialization + def self.virtual_network_from_xml(network_xml) + virtual_networks = [] + virtual_network_services_xml = network_xml.css( + 'VirtualNetworkSites VirtualNetworkSite' + ) + + virtual_network_services_xml.each do |virtual_network_service_xml| + virtual_network = VirtualNetwork.new + virtual_network.name = xml_content( + virtual_network_service_xml, + 'Name' + ) + virtual_network.id = xml_content( + virtual_network_service_xml, + 'Id' + ) + virtual_network.affinity_group = xml_content( + virtual_network_service_xml, + 'AffinityGroup' + ) + virtual_network.state = xml_content( + virtual_network_service_xml, + 'State' + ) + address_prefixes = virtual_network_service_xml.css( + 'AddressSpace AddressPrefixes AddressPrefix' + ) + virtual_network.address_space = address_prefixes.map do |ap| + ap.content + end + subnets_xml = virtual_network_service_xml.css('Subnets Subnet') + virtual_network.subnets = subnets_xml.map do |sn| + { + name: xml_content(sn, 'Name'), + address_prefix: xml_content(sn, 'AddressPrefix') + } + end + dns_servers_xml = virtual_network_service_xml.css( + 'Dns DnsServers DnsServer' + ) + virtual_network.dns_servers = dns_servers_xml.map do |dns| + { + name: xml_content(dns, 'Name'), + ip_address: xml_content(dns, 'Address') + } + end + + virtual_networks << virtual_network + end + virtual_networks.compact + end + + def self.virtual_network_to_xml(vnet_name, + affinity_group, + address_spaces, + options = {}) + options[:dns] ||= {} + options[:subnet] ||= {} + options[:subnet].each do |subnet| + IPAddr.validate_ip_and_prefix(subnet[:ip_address], subnet[:cidr]) + end + address_spaces = address_spaces.compact.uniq.reject(&:empty?) + address_spaces.each do |address_space| + IPAddr.validate_address_space(address_space) + end + vnet_service = Azure::VirtualNetworkManagementService.new + vnets = vnet_service.list_virtual_networks + builder = Nokogiri::XML::Builder.new do |xml| + xml.NetworkConfiguration( + 'xmlns' => 'http://schemas.microsoft.com/ServiceHosting'\ + '/2011/07/NetworkConfiguration') do + xml.VirtualNetworkConfiguration do + xml.Dns do + xml.DnsServers do + dns = vnets.map(&:dns_servers) + dns.flatten! unless dns.empty? + dns_server_to_xml(xml, dns, options[:dns]) + end + end + xml.VirtualNetworkSites do + vnets.each do |vnet| + if vnet.name != vnet_name + others = { + subnet: vnet.subnets, dns: vnet.dns_servers + } + virtual_network_site(xml, + vnet.name, + vnet.affinity_group, + vnet.address_space, + others) + end + end + virtual_network_site(xml, + vnet_name, + affinity_group, + address_spaces, + options) + end + end + end + end + builder.doc.to_xml + end + + private + + def self.virtual_network_site(xml, + vnet_name, + affinity_group, + address_spaces, + options) + xml.VirtualNetworkSite( + 'name' => vnet_name, + 'AffinityGroup' => affinity_group + ) do + xml.DnsServersRef do + options[:dns].each do |dns| + xml.DnsServerRef('name' => dns[:name]) + end + end + xml.Subnets do + options[:subnet].each do |subnet| + xml.Subnet('name' => subnet[:name]) do + if subnet.key?(:cidr) + address_prefix = IPAddr.address_prefix(subnet[:ip_address], + subnet[:cidr]) + else + address_prefix = subnet[:address_prefix] + end + xml.AddressPrefix address_prefix + end + end + end + xml.AddressSpace do + address_spaces.each do |address_space| + xml.AddressPrefix address_space + end + end + end + end + + def self.dns_server_to_xml(xml, dns_servers, new_dns_servers) + dns_names = [] + + dns_list = {} + dns_list.merge!(merge_dns(new_dns_servers)) + dns_list.merge!(merge_dns(dns_servers)) + + dns_list.each do |name, ip_address| + xml.DnsServer('name' => name, 'IPAddress' => ip_address) + end + end + + def self.merge_dns(dns_list) + new_dns_list = {} + + dns_list.each do |dns| + unless dns_list.include?(dns[:name]) + new_dns_list.merge!(dns[:name] => dns[:ip_address]) + end + end + + new_dns_list + end + end + end +end