Class: Vcloud::EdgeGateway::ConfigurationGenerator::NatService

Inherits:
Object
  • Object
show all
Defined in:
lib/vcloud/edge_gateway/configuration_generator/nat_service.rb

Instance Method Summary collapse

Constructor Details

#initialize(input_config, edge_gateway_interfaces) ⇒ NatService

Returns a new instance of NatService.



6
7
8
9
# 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

Instance Method Details

#generate_fog_configObject



11
12
13
14
15
16
17
18
# 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) ⇒ Object



35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
# File 'lib/vcloud/edge_gateway/configuration_generator/nat_service.rb', line 35

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) ⇒ Object



53
54
55
56
57
58
59
# File 'lib/vcloud/edge_gateway/configuration_generator/nat_service.rb', line 53

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_rulesObject



20
21
22
23
24
25
26
27
28
29
30
31
32
33
# 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]
    gateway_nat_rule = populate_gateway_nat_rule(rule)
    new_rule[:GatewayNatRule] = gateway_nat_rule
    i += 1
    new_rule
  end
end