mirror of
https://github.com/fog/fog.git
synced 2022-11-09 13:51:43 -05:00
75 lines
No EOL
2.7 KiB
Ruby
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 |