Module: Pangea::Resources::NetworkHelpers
- Defined in:
- lib/pangea/resources/network_helpers.rb
Overview
Network helpers for templates
Instance Method Summary collapse
-
#availability_zones(region, count = 3) ⇒ Object
Generate availability zones for a region.
-
#cidr_block(ip, mask) ⇒ Object
Create CIDR block from IP and mask.
-
#discover_public_ip(timeout: 5) ⇒ Object
Discover public IP address - available in template context.
-
#subnet_cidr(base_cidr, subnet_bits, index) ⇒ Object
Calculate subnet CIDR from base and offset.
-
#valid_ip?(ip) ⇒ Boolean
Validate IP address format.
Instance Method Details
#availability_zones(region, count = 3) ⇒ Object
Generate availability zones for a region
59 60 61 62 |
# File 'lib/pangea/resources/network_helpers.rb', line 59 def availability_zones(region, count = 3) zones = ('a'..'f').to_a zones.take(count).map { |zone| "#{region}#{zone}" } end |
#cidr_block(ip, mask) ⇒ Object
Create CIDR block from IP and mask
35 36 37 |
# File 'lib/pangea/resources/network_helpers.rb', line 35 def cidr_block(ip, mask) "#{ip}/#{mask}" end |
#discover_public_ip(timeout: 5) ⇒ Object
Discover public IP address - available in template context
24 25 26 27 28 29 30 31 32 |
# File 'lib/pangea/resources/network_helpers.rb', line 24 def discover_public_ip(timeout: 5) # Cache the IP discovery result to avoid multiple calls @_discovered_ip ||= begin discovery = Utilities::IpDiscovery.new(timeout: timeout) ip = discovery.discover puts "[Pangea] Discovered public IP: #{ip}" ip end end |
#subnet_cidr(base_cidr, subnet_bits, index) ⇒ Object
Calculate subnet CIDR from base and offset
40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
# File 'lib/pangea/resources/network_helpers.rb', line 40 def subnet_cidr(base_cidr, subnet_bits, index) base_ip, base_mask = base_cidr.split('/') octets = base_ip.split('.').map(&:to_i) # Calculate new IP based on subnet bits and index subnet_size = 2 ** subnet_bits offset = index * subnet_size # Apply offset to appropriate octet octet_index = (32 - base_mask.to_i - subnet_bits) / 8 octets[octet_index] += offset new_ip = octets.join('.') new_mask = base_mask.to_i + subnet_bits "#{new_ip}/#{new_mask}" end |
#valid_ip?(ip) ⇒ Boolean
Validate IP address format
65 66 67 68 69 |
# File 'lib/pangea/resources/network_helpers.rb', line 65 def valid_ip?(ip) return false unless ip =~ /\A(?:\d{1,3}\.){3}\d{1,3}\z/ ip.split('.').all? { |octet| octet.to_i <= 255 } end |