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/hp/requests/network/add_router_interface.rb

75 lines
No EOL
2.7 KiB
Ruby

module Fog
module HP
class Network
class Real
# Add an internal router interface, thus attaching a subnet or a port to an existing router
#
# ==== Parameters
# * 'router_id'<~String>: - UUId for the router
# * 'subnet_id'<~String>: - UUId for the subnet (Either a subnet or a port can be passed, not both)
# * 'port_id'<~String>: - UUId for the port (Either a subnet or a port can be passed, not both)
#
# ==== Returns
# * response<~Excon::Response>:
# * body<~Hash>:
# * 'subnet_id'<~String>: - UUId for the subnet
# * 'port_id'<~String>: - UUId for the port
def add_router_interface(router_id, subnet_id=nil, port_id=nil, options = {})
# Either a subnet or a port can be passed, not both
if (subnet_id && port_id) || (subnet_id.nil? && port_id.nil?)
raise ArgumentError.new('Either a subnet or a port can be passed, not both')
end
if subnet_id
data = { 'subnet_id' => subnet_id }
elsif port_id
data = { 'port_id' => port_id }
end
request(
:body => Fog::JSON.encode(data),
:expects => 200,
:method => 'PUT',
:path => "routers/#{router_id}/add_router_interface"
)
end
end
class Mock
def add_router_interface(router_id, subnet_id=nil, port_id=nil, options = {})
response = Excon::Response.new
if list_routers.body['routers'].detect {|_| _['id'] == router_id}
# Either a subnet or a port can be passed, not both
if (subnet_id && port_id) || (subnet_id.nil? && port_id.nil?)
raise ArgumentError.new('Either a subnet or a port can be passed, not both')
end
if port_id.nil?
# create a new port
resp = create_port(self.data[:networks].keys[0], {:name => "New Port #{rand(10)}"})
port_id = resp.body['port']['id']
end
data = {
'subnet_id' => subnet_id || Fog::HP::Mock.uuid.to_s,
'port_id' => port_id
}
# so either way if I pass a subnet or a port,
# it basically adds the router uuid to the port's device_id
# and sets device_owner to network:router_interface
self.data[:ports][port_id]['device_id'] = router_id
self.data[:ports][port_id]['device_owner'] = 'network:router_interface'
response.status = 200
response.body = data
response
else
raise Fog::HP::Network::NotFound
end
end
end
end
end
end