blob: 941cb9df14b87d98f9a95ac7fbb266706fc5b4e8 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
|
class Puppet::Network::Server
attr_reader :server_type, :http_server_class, :protocols
def initialize(args = {})
@server_type = Puppet[:servertype] or raise "No servertype configuration found." # e.g., WEBrick, Mongrel, etc.
@http_server_class = http_server_class_by_type(@server_type)
@protocols = []
@listening = false
@routes = {}
self.register(args[:handlers]) if args[:handlers]
end
def register(*indirections)
raise ArgumentError, "Indirection names are required." if indirections.empty?
indirections.flatten.each { |i| @routes[i.to_sym] = true }
end
def unregister(*indirections)
raise "Cannot unregister indirections while server is listening." if listening?
indirections = @routes.keys if indirections.empty?
indirections.flatten.each do |i|
raise(ArgumentError, "Indirection [%s] is unknown." % i) unless @routes[i.to_sym]
end
indirections.flatten.each do |i|
@routes.delete(i.to_sym)
end
end
def listening?
@listening
end
def listen
raise "Cannot listen -- already listening." if listening?
http_server.listen(@routes.dup)
@listening = true
end
def unlisten
raise "Cannot unlisten -- not currently listening." unless listening?
http_server.unlisten
@listening = false
end
private
def http_server
@http_server ||= http_server_class.new
end
def http_server_class_by_type(kind)
Puppet::Network::HTTP.server_class_by_type(kind)
end
end
|