class Vcloud::EdgeGateway::ConfigurationGenerator::NatService

Public Class Methods

new(input_config, edge_gateway_interfaces) click to toggle source
# File lib/vcloud/edge_gateway/configuration_generator/nat_service.rb, line 6
def initialize input_config, edge_gateway_interfaces
  @input_config = input_config
  @edge_gateway_interfaces = edge_gateway_interfaces
end

Public Instance Methods

generate_fog_config() click to toggle source
# File lib/vcloud/edge_gateway/configuration_generator/nat_service.rb, line 11
def generate_fog_config
  if @input_config
    nat_service = {}
    nat_service[:IsEnabled] = @input_config.key?(:enabled) ? @input_config[:enabled].to_s : 'true'
    nat_service[:NatRule] = populate_nat_rules
    nat_service
  end
end
populate_gateway_nat_rule(rule) click to toggle source
# File lib/vcloud/edge_gateway/configuration_generator/nat_service.rb, line 36
def populate_gateway_nat_rule(rule)
  raise "Must supply a :network_id parameter" unless rule[:network_id]
  edge_gw_interface = @edge_gateway_interfaces.find do |interface|
    interface.network_id == rule[:network_id]
  end
  raise "unable to find gateway network interface with id #{rule[:network_id]}" unless edge_gw_interface
  gateway_nat_rule = {}
  gateway_nat_rule[:Interface] = populate_nat_interface(edge_gw_interface)
  gateway_nat_rule[:OriginalIp] = rule[:original_ip]
  gateway_nat_rule[:TranslatedIp] = rule[:translated_ip]
  gateway_nat_rule[:OriginalPort] = rule[:original_port] if rule.key?(:original_port)
  gateway_nat_rule[:TranslatedPort] = rule[:translated_port] if rule.key?(:translated_port)
  if rule[:rule_type] == 'DNAT'
    gateway_nat_rule[:Protocol] = rule.key?(:protocol) ? rule[:protocol] : "tcp"
  end
  gateway_nat_rule
end
populate_nat_interface(edge_interface) click to toggle source
# File lib/vcloud/edge_gateway/configuration_generator/nat_service.rb, line 54
def populate_nat_interface(edge_interface)
  vcloud_interface = {}
  vcloud_interface[:type] = 'application/vnd.vmware.admin.network+xml'
  vcloud_interface[:name] = edge_interface.network_name
  vcloud_interface[:href] = edge_interface.network_href
  vcloud_interface
end
populate_nat_rules() click to toggle source
# File lib/vcloud/edge_gateway/configuration_generator/nat_service.rb, line 20
def populate_nat_rules
  rules = @input_config[:nat_rules]
  i = ID_RANGES::NAT_SERVICE[:min]
  rules.collect do |rule|
    new_rule = {}
    new_rule[:Id] = rule.key?(:id) ? rule[:id] : i.to_s
    new_rule[:IsEnabled] = rule.key?(:enabled) ? rule[:enabled].to_s : 'true'
    new_rule[:RuleType] = rule[:rule_type]
    new_rule[:Description] = rule[:description] if rule.key?(:description)
    gateway_nat_rule = populate_gateway_nat_rule(rule)
    new_rule[:GatewayNatRule] = gateway_nat_rule
    i += 1
    new_rule
  end
end