terrafying-components 1.13.0 → 1.13.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 1059ca89056f183bcc8d684b0b356adc33d5179047b436788e0cdfc4117352c5
4
- data.tar.gz: 445ffd8351cd455e4dd4d25e0287fec0efecae4041a7e299e4d1df5f253f028c
3
+ metadata.gz: e87aa6a31720eaa6bcf59f5a2905b82f8c4041bd05395ec58759966eafc9354c
4
+ data.tar.gz: 8824ab8ebbfbe49595e81f119077518d9f521bc036dcd7f2ec0b49fe1a604f68
5
5
  SHA512:
6
- metadata.gz: 07e48e4b9adc0192c95c6182b12cc1507472ffa0036db6b86bec4688bddbd4ab6ab4b94a5efc696a78f2bcdfb50d5d4cc47de9f3fd7fc07569d45da1a382d1b4
7
- data.tar.gz: 0b9bb4f07a70422d1f4da39c9e76a718075a52507a9f55c24c55897347de144300b994cfaabb848e241f812a89274e869c8129f6cf7c43f669e954e7d9743496
6
+ metadata.gz: 25c885618f286940a020c28df09621883fdc18e0362bcb68410e49b0c44ec150a38783bb11dffb7001fca9dd610fc4fe0ebc17daeb93ae89b8a310b4c73efb8c
7
+ data.tar.gz: d2432d707a88c8ed0231706abf493821451c80ff8c8f143b5a0abc3cb3707742ab8713c94c5a36762ee27683a1e29acf1dcd04c3f401ccb505afd5a322090f4f
@@ -136,12 +136,12 @@ module Terrafying
136
136
  @egress_security_group = @instance_set.security_group
137
137
  end
138
138
 
139
- vpc.zone.add_alias_in(self, name, @load_balancer.alias_config)
139
+ @zone.add_alias_in(self, name, @load_balancer.alias_config)
140
140
  elsif set == StaticSet
141
- vpc.zone.add_record_in(self, name, @instance_set.instances.map(&:ip_address))
141
+ @zone.add_record_in(self, name, @instance_set.instances.map(&:ip_address))
142
142
  @instance_set.instances.each do |i|
143
143
  @domain_names << vpc.zone.qualify(i.name)
144
- vpc.zone.add_record_in(self, i.name, [i.ip_address])
144
+ @zone.add_record_in(self, i.name, [i.ip_address])
145
145
  end
146
146
  end
147
147
 
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Terrafying
4
4
  module Components
5
- VERSION = '1.13.0'
5
+ VERSION = '1.13.1'
6
6
  end
7
7
  end
@@ -32,6 +32,9 @@ module Terrafying
32
32
  @name = name
33
33
  @id = vpc.vpc_id
34
34
  @cidr = vpc.cidr_block
35
+ @azs = aws.availability_zones
36
+ @remaining_ip_space = NetAddr::Tree.new
37
+ @remaining_ip_space.add! cidr
35
38
  @tags = {}
36
39
  @zone = Terrafying::Components::Zone.find_by_tag(vpc: @id)
37
40
  raise 'Failed to find zone' if @zone.nil?
@@ -57,6 +60,17 @@ module Terrafying
57
60
  # need to sort subnets so they are in az order
58
61
  @subnets.each { |_, s| s.sort! { |a, b| a.az <=> b.az } }
59
62
 
63
+ @subnets.each do |_,subnet|
64
+ subnet.each do |s|
65
+ drop_subnet!(s.cidr)
66
+ end
67
+ end
68
+
69
+ @nat_gateways = []
70
+ aws.nat_gateways_for_vpc(vpc.vpc_id).each do |nat_gateway|
71
+ @nat_gateways << nat_gateway.nat_gateway_id
72
+ end
73
+
60
74
  tags = vpc.tags.select { |tag| tag.key == 'ssh_group' }
61
75
  @ssh_group = if tags.count > 0
62
76
  tags[0].value
@@ -336,7 +350,6 @@ module Terrafying
336
350
  if targets.count == 0
337
351
  raise "Run out of ip space to allocate a /#{bit_size}"
338
352
  end
339
-
340
353
  target = targets[0]
341
354
 
342
355
  @remaining_ip_space.delete!(target)
@@ -354,7 +367,26 @@ module Terrafying
354
367
  new_subnet.to_s
355
368
  end
356
369
 
370
+ def drop_subnet!(raw_cidr)
371
+
372
+ cidr = NetAddr::CIDR.create(raw_cidr)
373
+ bit_size = cidr.bits
374
+ target = @remaining_ip_space.longest_match(cidr)
375
+
376
+ @remaining_ip_space.delete!(target)
377
+
378
+ if target.bits != bit_size
379
+ target.remainder(cidr).each do |rem|
380
+ @remaining_ip_space.add!(rem)
381
+ end
382
+ end
383
+ end
384
+
357
385
  def allocate_subnets!(name, options = {})
386
+ allocate_subnets_in!(self, name, options)
387
+ end
388
+
389
+ def allocate_subnets_in!(ctx, name, options = {})
358
390
  options = {
359
391
  public: false,
360
392
  bit_size: @subnet_size,
@@ -369,20 +401,37 @@ module Terrafying
369
401
  else
370
402
  [nil] * @azs.count
371
403
  end
372
-
373
- @subnets[name] = @azs.zip(gateways).map do |az, gateway|
374
- subnet_options = { tags: { subnet_name: name }.merge(options[:tags]).merge(@tags) }
375
- unless gateway.nil?
376
- if options[:public]
377
- subnet_options[:gateway] = gateway
378
- elsif options[:internet]
379
- subnet_options[:nat_gateway] = gateway
404
+ if @subnets.has_key?(name.to_sym)
405
+
406
+ @subnets[name.to_sym].zip(gateways).map do |subnet, gateway|
407
+ subnet_options = { tags: { subnet_name: name }.merge(options[:tags]).merge(@tags) }
408
+ unless gateway.nil?
409
+ if options[:public]
410
+ subnet_options[:gateway] = gateway
411
+ elsif options[:internet]
412
+ subnet_options[:nat_gateway] = gateway
413
+ end
380
414
  end
415
+ ctx.add! Terrafying::Components::Subnet.create_in(
416
+ self, name, subnet.az, subnet.cidr, subnet_options
417
+ )
381
418
  end
382
419
 
383
- add! Terrafying::Components::Subnet.create_in(
384
- self, name, az, extract_subnet!(options[:bit_size]), subnet_options
385
- )
420
+ else
421
+ @subnets[name] = @azs.zip(gateways).map do |az, gateway|
422
+ subnet_options = { tags: { subnet_name: name }.merge(options[:tags]).merge(@tags) }
423
+ unless gateway.nil?
424
+ if options[:public]
425
+ subnet_options[:gateway] = gateway
426
+ elsif options[:internet]
427
+ subnet_options[:nat_gateway] = gateway
428
+ end
429
+ end
430
+
431
+ ctx.add! Terrafying::Components::Subnet.create_in(
432
+ self, name, az, extract_subnet!(options[:bit_size]), subnet_options
433
+ )
434
+ end
386
435
  end
387
436
  end
388
437
  end
metadata CHANGED
@@ -1,29 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: terrafying-components
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.13.0
4
+ version: 1.13.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - uSwitch Limited
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-06-10 00:00:00.000000000 Z
11
+ date: 2019-07-23 00:00:00.000000000 Z
12
12
  dependencies:
13
- - !ruby/object:Gem::Dependency
14
- name: bundler
15
- requirement: !ruby/object:Gem::Requirement
16
- requirements:
17
- - - "~>"
18
- - !ruby/object:Gem::Version
19
- version: '1.11'
20
- type: :development
21
- prerelease: false
22
- version_requirements: !ruby/object:Gem::Requirement
23
- requirements:
24
- - - "~>"
25
- - !ruby/object:Gem::Version
26
- version: '1.11'
27
13
  - !ruby/object:Gem::Dependency
28
14
  name: rake
29
15
  requirement: !ruby/object:Gem::Requirement
@@ -72,14 +58,14 @@ dependencies:
72
58
  requirements:
73
59
  - - ">="
74
60
  - !ruby/object:Gem::Version
75
- version: 1.7.5
61
+ version: 1.7.6
76
62
  type: :runtime
77
63
  prerelease: false
78
64
  version_requirements: !ruby/object:Gem::Requirement
79
65
  requirements:
80
66
  - - ">="
81
67
  - !ruby/object:Gem::Version
82
- version: 1.7.5
68
+ version: 1.7.6
83
69
  - !ruby/object:Gem::Dependency
84
70
  name: xxhash
85
71
  requirement: !ruby/object:Gem::Requirement