mirror of
https://github.com/fog/fog.git
synced 2022-11-09 13:51:43 -05:00
67 lines
1.9 KiB
Ruby
67 lines
1.9 KiB
Ruby
require 'fog/core/model'
|
|
|
|
module Fog
|
|
module Terremark
|
|
module Shared
|
|
|
|
class InternetService < Fog::Model
|
|
|
|
identity :Id
|
|
|
|
attribute :Name
|
|
attribute :Port
|
|
attribute :Protocol
|
|
attribute :Description
|
|
attribute :PublicIpAddress
|
|
attribute :public_ip_address_id
|
|
|
|
def destroy(delete_public_ip=true)
|
|
service.delete_internet_service(self.Id)
|
|
service.delete_public_ip(self.PublicIpAddress["Id"]) if delete_public_ip
|
|
true
|
|
end
|
|
|
|
def save
|
|
requires :Name, :Protocol, :Port
|
|
if not public_ip_address_id
|
|
#Create the first internet service and allocate public IP
|
|
data = service.create_internet_service(
|
|
vdc = service.default_vdc_id,
|
|
name = self.Name,
|
|
protocol = self.Protocol,
|
|
port = self.Port,
|
|
options = {
|
|
'Enabled' => 'true',
|
|
"Description" => self.Name
|
|
}
|
|
)
|
|
else
|
|
#create additional services to existing Public IP
|
|
data = service.add_internet_service(
|
|
ip_id = public_ip_address_id,
|
|
name = self.Name,
|
|
protocol = self.Protocol,
|
|
port = self.Port,
|
|
options = {
|
|
'Enabled' => 'true',
|
|
"Description" => self.Name
|
|
}
|
|
)
|
|
end
|
|
merge_attributes(data.body)
|
|
true
|
|
end
|
|
private
|
|
|
|
def href=(new_href)
|
|
self.id = new_href.split('/').last.to_i
|
|
end
|
|
|
|
def type=(new_type); @type = new_type; end
|
|
def size=(new_size); @size = new_size; end
|
|
def Links=(new_links); @Links = new_links; end
|
|
|
|
end
|
|
end
|
|
end
|
|
end
|