Class: Bosh::Director::DeploymentPlan::InMemoryIpRepo
- Inherits:
-
Object
- Object
- Bosh::Director::DeploymentPlan::InMemoryIpRepo
show all
- Includes:
- IpUtil
- Defined in:
- lib/bosh/director/deployment_plan/ip_provider/in_memory_ip_repo.rb
Instance Method Summary
collapse
Methods included from IpUtil
#each_ip, #format_ip, #ip_to_i, #ip_to_netaddr
Constructor Details
Returns a new instance of InMemoryIpRepo.
5
6
7
8
9
10
|
# File 'lib/bosh/director/deployment_plan/ip_provider/in_memory_ip_repo.rb', line 5
def initialize(logger)
@logger = Bosh::Director::TaggedLogger.new(logger, 'network-configuration')
@mutex = Mutex.new
@ips = []
@recently_released_ips = []
end
|
Instance Method Details
#add(reservation) ⇒ Object
23
24
25
26
27
28
29
|
# File 'lib/bosh/director/deployment_plan/ip_provider/in_memory_ip_repo.rb', line 23
def add(reservation)
ip = ip_to_netaddr(reservation.ip)
network_name = reservation.network.name
@mutex.synchronize do
add_ip(ip, network_name)
end
end
|
#allocate_dynamic_ip(reservation, subnet) ⇒ Object
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
|
# File 'lib/bosh/director/deployment_plan/ip_provider/in_memory_ip_repo.rb', line 31
def allocate_dynamic_ip(reservation, subnet)
@mutex.synchronize do
item = (0...subnet.range.size).find { |i| available_for_dynamic?(subnet.range[i], subnet) }
if item.nil?
entry = @recently_released_ips.find do |entry|
entry[:network_name] == subnet.network_name && subnet.range.contains?(entry[:ip])
end
ip = ip_to_netaddr(entry[:ip]) unless entry.nil?
else
ip = subnet.range[item]
end
add_ip(ip, subnet.network_name) unless ip.nil?
ip
end
end
|
#contains_ip?(ip, network_name) ⇒ Boolean
51
52
53
|
# File 'lib/bosh/director/deployment_plan/ip_provider/in_memory_ip_repo.rb', line 51
def contains_ip?(ip, network_name)
@ips.include?({ip: ip.to_i, network_name: network_name})
end
|
#delete(ip, network_name) ⇒ Object
12
13
14
15
16
17
18
19
20
21
|
# File 'lib/bosh/director/deployment_plan/ip_provider/in_memory_ip_repo.rb', line 12
def delete(ip, network_name)
ip = ip_to_netaddr(ip)
entry_to_delete = {ip: ip.to_i, network_name: network_name}
@logger.debug("Deleting ip '#{ip.ip}' for #{network_name}")
@mutex.synchronize do
@ips.delete(entry_to_delete)
@recently_released_ips << (entry_to_delete)
end
end
|