class Asbestos::Service
Attributes
attributes[R]
Public Class Methods
new(name, host)
click to toggle source
# File lib/asbestos/service.rb, line 9 def initialize(name, host) @name = name @host = host @attributes = {} # # Attribute defaults # @attributes[:protocols] = [:tcp] end
Public Instance Methods
firewall_rules()
click to toggle source
# File lib/asbestos/service.rb, line 23 def firewall_rules Array.new.tap do |rules| from_each do |host_or_address, remote_interface_tag| rules << open_port(:from => host_or_address, :remote_interface_tag => remote_interface_tag) end end end
inspect()
click to toggle source
# File lib/asbestos/service.rb, line 19 def inspect "#{name}:#{[*ports].join(',')}/#{@attributes.inspect}" end
open_port(args = {})
click to toggle source
# File lib/asbestos/service.rb, line 31 def open_port(args = {}) interfaces = on ? host.interfaces[on] : nil # nil -> all interfaces Array.new.tap do |rules| protocols.each do |protocol| ports.each do |port| comment_base = "allow #{name}(#{protocol} port #{port}) from" case args[:from] when Host # specific host, specific remote interface raise "Host '#{args[:from].name}' doesn't have interface '#{args[:remote_interface_tag]}'" unless args[:from].interfaces[args[:remote_interface_tag]] args[:from].interfaces[args[:remote_interface_tag]].each do |remote_interface| comment = "#{comment_base} #{args[:from].name}:#{remote_interface} (#{args[:remote_interface_tag]})" rules << Asbestos.firewall.open_port(interfaces, port, protocol, comment, args[:from].addresses[remote_interface]) end when Symbol, String # an address comment = "#{comment_base} #{args[:from]}" rules << Asbestos.firewall.open_port(interfaces, port, protocol, comment, args[:from]) else comment = "#{comment_base} anyone" rules << Asbestos.firewall.open_port(interfaces, port, protocol, comment) end end end end end