1
0
Fork 0
mirror of https://github.com/fog/fog.git synced 2022-11-09 13:51:43 -05:00
fog--fog/lib/fog/ecloud/requests/compute/firewall_acls_create.rb

80 lines
2.8 KiB
Ruby
Raw Normal View History

2012-06-07 12:50:11 -04:00
module Fog
module Compute
class Ecloud
class Real
include Shared
def firewall_acls_create(data)
validate_data([:permission, :protocol, :source, :destination], data)
raise ArgumentError.new("Required data missing: source[:type] is required") unless data[:source][:type]
raise ArgumentError.new("Required data missing: destination[:type] is required") unless data[:destination][:type]
request(
:body => generate_create_firewall_acls_request(data),
:expects => 201,
:method => "POST",
:headers => {},
:uri => data[:uri],
:parse => true
)
end
private
def generate_create_firewall_acls_request(data)
xml = Builder::XmlMarkup.new
xml.CreateFirewallAcl do
xml.Permission data[:permission]
xml.Protocol data[:protocol]
xml.Source do
xml.Type data[:source][:type]
if data[:source][:external_ip_address]
xml.ExternalIpAddress data[:external_ip_address]
end
if data[:source][:external_network]
xml.ExternalNetwork do
xml.Address data[:source][:external_network][:address]
xml.Size data[:source][:external_network][:size]
end
end
if data[:source][:ip_address]
xml.IpAddress(:href => data[:source][:ip_address])
end
if data[:source][:network]
xml.Network(:href => data[:source][:network][:href], :name => data[:source][:network][:name])
end
end
xml.Destination do
xml.Type data[:destination][:type]
if data[:destination][:external_ip_address]
xml.ExternalIpAddress data[:external_ip_address]
end
if data[:destination][:external_network]
xml.ExternalNetwork do
xml.Address data[:destination][:external_network][:address]
xml.Size data[:destination][:external_network][:size]
end
end
if data[:destination][:ip_address]
xml.IpAddress(:href => data[:destination][:ip_address])
end
if data[:destination][:network]
xml.Network(:href => data[:destination][:network][:href], :name => data[:destination][:network][:name])
end
end
xml.PortRange do
if data[:port_range][:start]
xml.Start data[:port_range][:start]
end
if data[:port_range][:end]
xml.End data[:port_range][:end]
end
end
end
end
end
end
end
end