class Piculet::DSL::EC2::SecurityGroup::Permissions::Permission
Public Class Methods
new(context, security_group, direction, protocol_prot_range, &block)
click to toggle source
# File lib/piculet/dsl/permission.rb, line 9 def initialize(context, security_group, direction, protocol_prot_range, &block) @security_group = security_group @direction = direction @protocol_prot_range = protocol_prot_range @context = context.merge( :protocol => protocol_prot_range[0], :port_range => protocol_prot_range[1] ) @result = OpenStruct.new instance_eval(&block) end
Public Instance Methods
result()
click to toggle source
# File lib/piculet/dsl/permission.rb, line 23 def result unless @result.ip_ranges or @result.groups raise "SecurityGroup `#{@security_group}`: #{@direction}: #{@protocol_prot_range}: `ip_ranges` or `groups` is required" end @result end
Private Instance Methods
groups(*values)
click to toggle source
# File lib/piculet/dsl/permission.rb, line 66 def groups(*values) if values.empty? raise ArgumentError, "SecurityGroup `#{@security_group}`: #{@direction}: #{@protocol_prot_range}: `groups`: wrong number of arguments (0 for 1..)" end values.each do |group| unless [String, Array].any? {|i| group.kind_of?(i) } raise "SecurityGroup `#{@security_group}`: #{@direction}: #{@protocol_prot_range}: `groups`: invalid type: #{group}" end end if values.size != values.uniq.size raise "SecurityGroup `#{@security_group}\: #{@direction}: #{@protocol_prot_range}: `groups`: duplicate groups" end @result.groups = values end
ip_ranges(*values)
click to toggle source
# File lib/piculet/dsl/permission.rb, line 32 def ip_ranges(*values) if values.empty? raise ArgumentError, "SecurityGroup `#{@security_group}`: #{@direction}: #{@protocol_prot_range}: `ip_ranges`: wrong number of arguments (0 for 1..)" end values.each do |ip_range| unless ip_range =~ %r|\d{1,3}\.\d{1,3}\.\d{1,3}/\d{1,2}| raise "SecurityGroup `#{@security_group}`: #{@direction}: #{@protocol_prot_range}: `ip_ranges`: invalid ip range: #{ip_range}" end ip, range = ip_range.split('/', 2) unless ip.split('.').all? {|i| (0..255).include?(i.to_i) } and (0..32).include?(range.to_i) raise "SecurityGroup `#{@security_group}`: #{@direction}: #{@protocol_prot_range}: `ip_ranges`: invalid ip range: #{ip_range}" end begin parsed_ipaddr = IPAddr.new(ip_range) if ip != parsed_ipaddr.to_s raise "SecurityGroup `#{@security_group}`: #{@direction}: #{@protocol_prot_range}: `ip_ranges`: invalid ip range: #{ip_range} correct #{parsed_ipaddr.to_s}/#{range}" end rescue => e raise "SecurityGroup `#{@security_group}`: #{@direction}: #{@protocol_prot_range}: `ip_ranges`: #{ip_range}: #{e.message}" end end if values.size != values.uniq.size raise "SecurityGroup `#{@security_group}\: #{@direction}: #{@protocol_prot_range}: `ip_ranges`: duplicate ip ranges" end @result.ip_ranges = values end