processwanker 0.0.7
Sign up to get free protection for your applications and to get access to all the features.
- data/Manifest +34 -0
- data/README +11 -0
- data/Rakefile +13 -0
- data/bin/pw +5 -0
- data/lib/config/config.rb +96 -0
- data/lib/config/config_auth.rb +208 -0
- data/lib/config/config_client.rb +75 -0
- data/lib/config/config_client_cluster.rb +66 -0
- data/lib/config/config_client_clusters.rb +62 -0
- data/lib/config/config_client_host.rb +152 -0
- data/lib/config/config_daemon.rb +94 -0
- data/lib/config/config_daemon_service.rb +84 -0
- data/lib/config/config_daemon_service_dependency.rb +59 -0
- data/lib/config/config_daemon_services.rb +89 -0
- data/lib/config/config_hook.rb +40 -0
- data/lib/config/config_node.rb +160 -0
- data/lib/config/config_smtp.rb +103 -0
- data/lib/events.rb +224 -0
- data/lib/log.rb +88 -0
- data/lib/net/net_api.rb +189 -0
- data/lib/net/net_client.rb +107 -0
- data/lib/net/net_connection.rb +167 -0
- data/lib/net/net_server.rb +232 -0
- data/lib/net/net_server_client.rb +84 -0
- data/lib/net/net_util.rb +205 -0
- data/lib/process_util.rb +216 -0
- data/lib/pw_app.rb +557 -0
- data/lib/service.rb +512 -0
- data/lib/service_classes/dummy_service.rb +88 -0
- data/lib/service_classes/pid_service.rb +126 -0
- data/lib/service_classes/process_service.rb +218 -0
- data/lib/service_classes/upstart_service.rb +103 -0
- data/lib/service_mgr.rb +226 -0
- data/lib/util.rb +31 -0
- data/processwanker.gemspec +36 -0
- data.tar.gz.sig +0 -0
- metadata +157 -0
- metadata.gz.sig +0 -0
data/Manifest
ADDED
@@ -0,0 +1,34 @@
|
|
1
|
+
README
|
2
|
+
Rakefile
|
3
|
+
bin/pw
|
4
|
+
lib/config/config.rb
|
5
|
+
lib/config/config_auth.rb
|
6
|
+
lib/config/config_client.rb
|
7
|
+
lib/config/config_client_cluster.rb
|
8
|
+
lib/config/config_client_clusters.rb
|
9
|
+
lib/config/config_client_host.rb
|
10
|
+
lib/config/config_daemon.rb
|
11
|
+
lib/config/config_daemon_service.rb
|
12
|
+
lib/config/config_daemon_service_dependency.rb
|
13
|
+
lib/config/config_daemon_services.rb
|
14
|
+
lib/config/config_hook.rb
|
15
|
+
lib/config/config_node.rb
|
16
|
+
lib/config/config_smtp.rb
|
17
|
+
lib/events.rb
|
18
|
+
lib/log.rb
|
19
|
+
lib/net/net_api.rb
|
20
|
+
lib/net/net_client.rb
|
21
|
+
lib/net/net_connection.rb
|
22
|
+
lib/net/net_server.rb
|
23
|
+
lib/net/net_server_client.rb
|
24
|
+
lib/net/net_util.rb
|
25
|
+
lib/process_util.rb
|
26
|
+
lib/pw_app.rb
|
27
|
+
lib/service.rb
|
28
|
+
lib/service_classes/dummy_service.rb
|
29
|
+
lib/service_classes/pid_service.rb
|
30
|
+
lib/service_classes/process_service.rb
|
31
|
+
lib/service_classes/upstart_service.rb
|
32
|
+
lib/service_mgr.rb
|
33
|
+
lib/util.rb
|
34
|
+
Manifest
|
data/README
ADDED
@@ -0,0 +1,11 @@
|
|
1
|
+
ProcessWanker is a work-in-progress.
|
2
|
+
|
3
|
+
Enough features are implemented for it to be useful.
|
4
|
+
|
5
|
+
Docs (not yet complete) are available at:
|
6
|
+
|
7
|
+
http://codepuppies.com/~ben/pw
|
8
|
+
|
9
|
+
|
10
|
+
(Important note: under more recent versions of Ubuntu running "upstart", you may need to use the upstart_service class)
|
11
|
+
|
data/Rakefile
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'rake'
|
3
|
+
require 'echoe'
|
4
|
+
|
5
|
+
Echoe.new('processwanker', '0.0.7') do |p|
|
6
|
+
p.description = "Process monitoring and remote control system"
|
7
|
+
p.url = "http://codepuppies.com/~ben/pw"
|
8
|
+
p.author = "Ben Stragnell"
|
9
|
+
p.email = "pw@codepuppies.com"
|
10
|
+
p.ignore_pattern = ["tmp/*", "script/*"]
|
11
|
+
p.runtime_dependencies = [ "echoe" ]
|
12
|
+
p.development_dependencies = []
|
13
|
+
end
|
data/bin/pw
ADDED
@@ -0,0 +1,96 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
############################################################################
|
3
|
+
#
|
4
|
+
# config.rb
|
5
|
+
#
|
6
|
+
# base configuration loader
|
7
|
+
#
|
8
|
+
############################################################################
|
9
|
+
|
10
|
+
require 'config_node'
|
11
|
+
require 'config_client'
|
12
|
+
require 'config_daemon'
|
13
|
+
require 'config_auth'
|
14
|
+
|
15
|
+
module ProcessWanker
|
16
|
+
|
17
|
+
############################################################################
|
18
|
+
#
|
19
|
+
# Configuration - the root configuration object
|
20
|
+
#
|
21
|
+
# client - the client configuration section
|
22
|
+
# daemon - the daemon configuration section
|
23
|
+
#
|
24
|
+
############################################################################
|
25
|
+
|
26
|
+
class Configuration < ConfigNode
|
27
|
+
|
28
|
+
attr_accessor :client
|
29
|
+
attr_accessor :daemon
|
30
|
+
attr_accessor :auth
|
31
|
+
|
32
|
+
############################################################################
|
33
|
+
#
|
34
|
+
#
|
35
|
+
#
|
36
|
+
############################################################################
|
37
|
+
|
38
|
+
def initialize()
|
39
|
+
@client=nil
|
40
|
+
@daemon=nil
|
41
|
+
end
|
42
|
+
|
43
|
+
def add_defaults()
|
44
|
+
|
45
|
+
# ensure there's a default auth block
|
46
|
+
if(!@auth)
|
47
|
+
@auth = ConfigAuth.new()
|
48
|
+
@auth.container=self
|
49
|
+
end
|
50
|
+
|
51
|
+
# ensure there's a default client config
|
52
|
+
if(!@client)
|
53
|
+
@client = ConfigClient.new
|
54
|
+
@client.container=self
|
55
|
+
end
|
56
|
+
|
57
|
+
end
|
58
|
+
|
59
|
+
end
|
60
|
+
|
61
|
+
############################################################################
|
62
|
+
#
|
63
|
+
#
|
64
|
+
#
|
65
|
+
############################################################################
|
66
|
+
|
67
|
+
class ConfigurationBuilder < Builder
|
68
|
+
|
69
|
+
def build(container,args,block)
|
70
|
+
super(container,args,block)
|
71
|
+
@config.add_defaults()
|
72
|
+
@config
|
73
|
+
end
|
74
|
+
|
75
|
+
def client(&block)
|
76
|
+
@config.client=Deferred.new(@config,[],block,ConfigClientBuilder)
|
77
|
+
end
|
78
|
+
|
79
|
+
def daemon(&block)
|
80
|
+
@config.daemon=Deferred.new(@config,[],block,ConfigDaemonBuilder)
|
81
|
+
end
|
82
|
+
|
83
|
+
def auth(&block)
|
84
|
+
@config.auth=Deferred.new(@config,[],block,ConfigAuthBuilder)
|
85
|
+
end
|
86
|
+
|
87
|
+
end
|
88
|
+
|
89
|
+
############################################################################
|
90
|
+
#
|
91
|
+
#
|
92
|
+
#
|
93
|
+
############################################################################
|
94
|
+
|
95
|
+
|
96
|
+
end
|
@@ -0,0 +1,208 @@
|
|
1
|
+
############################################################################
|
2
|
+
#
|
3
|
+
# config_auth.rb
|
4
|
+
#
|
5
|
+
# auth block parser:
|
6
|
+
#
|
7
|
+
# auth {
|
8
|
+
# ca_cert "ca_cert_path"
|
9
|
+
# my_cert "my_cert_path"
|
10
|
+
# my_key "my_key_path"
|
11
|
+
# accept_peers "blah","hello"
|
12
|
+
# reject_peers "fred"
|
13
|
+
# accept_ip 10.1.99.0/24
|
14
|
+
# reject_ip 10.1.99.0/24
|
15
|
+
# }
|
16
|
+
#
|
17
|
+
############################################################################
|
18
|
+
|
19
|
+
require 'ipaddr'
|
20
|
+
require 'openssl'
|
21
|
+
require 'config'
|
22
|
+
|
23
|
+
module ProcessWanker
|
24
|
+
|
25
|
+
############################################################################
|
26
|
+
#
|
27
|
+
#
|
28
|
+
#
|
29
|
+
############################################################################
|
30
|
+
|
31
|
+
class IPFilter
|
32
|
+
|
33
|
+
attr_accessor :ips
|
34
|
+
|
35
|
+
def initialize()
|
36
|
+
@ips=[]
|
37
|
+
end
|
38
|
+
|
39
|
+
def contains(ip)
|
40
|
+
ips.each do |x|
|
41
|
+
return(true) if(x.include?(ip))
|
42
|
+
end
|
43
|
+
false
|
44
|
+
end
|
45
|
+
|
46
|
+
end
|
47
|
+
|
48
|
+
############################################################################
|
49
|
+
#
|
50
|
+
#
|
51
|
+
#
|
52
|
+
############################################################################
|
53
|
+
|
54
|
+
class ConfigAuth < ConfigNode
|
55
|
+
|
56
|
+
attr_accessor :ca_cert
|
57
|
+
attr_accessor :my_cert
|
58
|
+
attr_accessor :my_key
|
59
|
+
attr_accessor :accept_peers
|
60
|
+
attr_accessor :reject_peers
|
61
|
+
attr_accessor :is_default
|
62
|
+
attr_accessor :accept_ip
|
63
|
+
attr_accessor :reject_ip
|
64
|
+
|
65
|
+
def initialize()
|
66
|
+
init_default()
|
67
|
+
end
|
68
|
+
|
69
|
+
def init_default()
|
70
|
+
@is_default=true
|
71
|
+
@ca_cert=OpenSSL::X509::Certificate.new(DEFAULT_CA_CERT)
|
72
|
+
@my_cert=OpenSSL::X509::Certificate.new(DEFAULT_MY_CERT)
|
73
|
+
@my_key=OpenSSL::PKey::RSA.new(DEFAULT_MY_KEY)
|
74
|
+
end
|
75
|
+
|
76
|
+
def allow_ip(ip)
|
77
|
+
return(false) if(accept_ip && !accept_ip.contains(ip))
|
78
|
+
return(false) if(reject_ip && reject_ip.contains(ip))
|
79
|
+
true
|
80
|
+
end
|
81
|
+
|
82
|
+
end
|
83
|
+
|
84
|
+
############################################################################
|
85
|
+
#
|
86
|
+
#
|
87
|
+
#
|
88
|
+
############################################################################
|
89
|
+
|
90
|
+
class ConfigAuthBuilder < Builder
|
91
|
+
|
92
|
+
def ca_cert(v)
|
93
|
+
@config.ca_cert=OpenSSL::X509::Certificate.new(File.read(v))
|
94
|
+
@config.is_default=false
|
95
|
+
end
|
96
|
+
|
97
|
+
def my_cert(v)
|
98
|
+
@config.my_cert=OpenSSL::X509::Certificate.new(File.read(v))
|
99
|
+
end
|
100
|
+
|
101
|
+
def my_key(v)
|
102
|
+
@config.my_key=OpenSSL::PKey::RSA.new(File.read(v))
|
103
|
+
end
|
104
|
+
|
105
|
+
def accept_peers(*v)
|
106
|
+
@config.accept_peers ||= {}
|
107
|
+
v.each do |vv|
|
108
|
+
@config.accept_peers[vv]=true
|
109
|
+
end
|
110
|
+
end
|
111
|
+
|
112
|
+
def reject_peers(*v)
|
113
|
+
@config.reject_peers ||= {}
|
114
|
+
v.each do |vv|
|
115
|
+
@config.reject_peers[vv]=true
|
116
|
+
end
|
117
|
+
end
|
118
|
+
|
119
|
+
def accept_ip(v)
|
120
|
+
@config.accept_ip ||= IPFilter.new
|
121
|
+
@config.accept_ip.ips << IPAddr.new(v)
|
122
|
+
end
|
123
|
+
|
124
|
+
def reject_ip(v)
|
125
|
+
@config.reject_ip ||= IPFilter.new
|
126
|
+
@config.reject_ip.ips << IPAddr.new(v)
|
127
|
+
end
|
128
|
+
|
129
|
+
end
|
130
|
+
|
131
|
+
############################################################################
|
132
|
+
#
|
133
|
+
#
|
134
|
+
#
|
135
|
+
############################################################################
|
136
|
+
|
137
|
+
DEFAULT_CA_CERT=<<END_CA_CERT
|
138
|
+
-----BEGIN CERTIFICATE-----
|
139
|
+
MIICkzCCAXugAwIBAgIBADANBgkqhkiG9w0BAQUFADANMQswCQYDVQQDDAJjYTAe
|
140
|
+
Fw03MDAxMDEwMDAwMDBaFw0zODAxMTkwMzE0MDdaMA0xCzAJBgNVBAMMAmNhMIIB
|
141
|
+
IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAzSNGNA/eiCAWgHvpv73VnR31
|
142
|
+
4UIk2KYayXMJqg7QFVBJF6VHHrlX2Ec5GtdQmCewbcxsdgGxRsg2YV+l9Yl0SCkK
|
143
|
+
swnly+HLwW8zuyeUuTRxVbOH6yxAyvqdk5e9Ic5X3Bmc+YCIcqZGo3uAYBs4mpaw
|
144
|
+
a+loKMLwS+HO7ZoPyGBOYOen1MjEbF40l07KuwiLtesDF5yQ40qWIjbwtJPznPs9
|
145
|
+
AjRIOQBN9NbLzJQAJRCxXG8ZhAsjyxtdW4/0G8uLHHAjVLVuLxESwIVm2ZaCA6pG
|
146
|
+
v6hzqjtUYoB21C0jJeZm60RWeh8h8AYBJMWEZTHqgcRfxanPKSe7srtw1BmzSwID
|
147
|
+
AQABMA0GCSqGSIb3DQEBBQUAA4IBAQBV7nbpFCQpgBP9angRhzCRpOkLeMkXOy7F
|
148
|
+
jlBPWJHdEheNuOyfV6Mfnfc0Tc/b7l6AafzYPUk7cl5EHPYVnRBWiVqI8xPbC5Hy
|
149
|
+
lfb6dojPfp6WTzSzcqnNlhXwSoelBXs3Qj46Xkaix8bWyL0rsbjmFI2k+hhPrZdj
|
150
|
+
DKhPjAFJIK5luzWrtpUToq4FdoMBuIErD9nwp4/+aWRRRQvp3H43hY4Nu4Pguiv4
|
151
|
+
4Otn1gz5A+7xkItNzj2I2YeFx05yuUpISLHPFaJ7NOAGECxymcP3IEqkP6+ggMWb
|
152
|
+
V58KB/erhTtQ0asXfeW9eyGNOeoLFMROP0iecbSzmbaCkSVK7Gyf
|
153
|
+
-----END CERTIFICATE-----
|
154
|
+
END_CA_CERT
|
155
|
+
|
156
|
+
DEFAULT_MY_CERT=<<END_MY_CERT
|
157
|
+
-----BEGIN CERTIFICATE-----
|
158
|
+
MIICmDCCAYCgAwIBAgIBADANBgkqhkiG9w0BAQUFADANMQswCQYDVQQDDAJjYTAe
|
159
|
+
Fw03MDAxMDEwMDAwMDBaFw0zODAxMTkwMzE0MDdaMBIxEDAOBgNVBAMMB2RlZmF1
|
160
|
+
bHQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC+9jTYOZ1vXFxzHSfX
|
161
|
+
NeeC6jAuYqGn9ZYUzBz759O9lRVIK4qXejo+E2QHTN5fhxd9YKMFBiGo6j+ONTg/
|
162
|
+
kJT9h0vUfwODlR8LF/qQAkRv25frMK5NYef1QSOCFiLZuPM6wwb8qL27v+XU6OsY
|
163
|
+
xk4c2CqNHDTjgxdMDaAshJTWj5cQYwlU3sEXZ5NDOQzNtkdXhbcOLGJ+RFqiSzb7
|
164
|
+
KWzVV3jXMNb8acndnvNyLUNRpTEANJsWCMefzGoMJMw55d5DU6/EQuAyMacFBM30
|
165
|
+
kCKzpcOM39DoISgjNiVcfuHG0dXzDwMQu0LjvOJZkKyL5qYtsU0twzFPcLQvn3+p
|
166
|
+
uNz5AgMBAAEwDQYJKoZIhvcNAQEFBQADggEBAGIj7CZ/St5F40jNmdIHG4xRnxP/
|
167
|
+
4Pz6BDSNHokRqQ97rQ/vl6f+jKf9IGOeBYpo2bxBz+oce290vLPuTkosj5Bgwa2e
|
168
|
+
jM4y89qdMoDJn8mcqU/LV4sspwddY2kuKvn4DTzmbm+XvezrkX6tQXdeKeIl3yJP
|
169
|
+
CZOnc78OdVArHjrK4IbFdW3jSsLIjtfGX3VCLVmWpGR5vVcKy5steFRtAUwwDpPj
|
170
|
+
+XdYcDJJV28ziN6918/baiP9kIR0nws9o0R+u90h0YWS46k/kHOrLwGoSy/S9xjD
|
171
|
+
weHGtHeoRPLKH8n3tcrXJ6ZBoow12au4QM0YIkhGgl6+t21Td49WRaMfEkY=
|
172
|
+
-----END CERTIFICATE-----
|
173
|
+
END_MY_CERT
|
174
|
+
|
175
|
+
DEFAULT_MY_KEY=<<END_MY_KEY
|
176
|
+
-----BEGIN RSA PRIVATE KEY-----
|
177
|
+
MIIEpAIBAAKCAQEAvvY02Dmdb1xccx0n1zXnguowLmKhp/WWFMwc++fTvZUVSCuK
|
178
|
+
l3o6PhNkB0zeX4cXfWCjBQYhqOo/jjU4P5CU/YdL1H8Dg5UfCxf6kAJEb9uX6zCu
|
179
|
+
TWHn9UEjghYi2bjzOsMG/Ki9u7/l1OjrGMZOHNgqjRw044MXTA2gLISU1o+XEGMJ
|
180
|
+
VN7BF2eTQzkMzbZHV4W3DixifkRaoks2+yls1Vd41zDW/GnJ3Z7zci1DUaUxADSb
|
181
|
+
FgjHn8xqDCTMOeXeQ1OvxELgMjGnBQTN9JAis6XDjN/Q6CEoIzYlXH7hxtHV8w8D
|
182
|
+
ELtC47ziWZCsi+amLbFNLcMxT3C0L59/qbjc+QIDAQABAoIBABfJy+Nzqe0JcGrW
|
183
|
+
ovPoPyLL0Zy1pLWrnjqRArtOsc3YGIKZCfa8vyykdb2DEeCMj5yKwUQK8357T9eD
|
184
|
+
QbKJbEX46LVb7TAjD27uWcQ+xA+7Jz2hHtV88MxYhPfbkhPVOleDnAc1bg1JZnQT
|
185
|
+
X9YCPhDRzNsvPFdrKSfMOrvQ+EmR+oINwzE6jWNsvr3kZsuT3LXzjuiAU1aLP3fX
|
186
|
+
dIJexw/xKdVaXCJYbJzgW6XmTiNSWVedgnfanORLcIh8o4+EemE1QSXMl9gxrUFW
|
187
|
+
huEjyYXLyw/skVfldHngafz+xQiG0KMkAOT8+qtSWA4IfqcAQgwp6Fc8PaVI3W6z
|
188
|
+
xB6380ECgYEA4fLn4Iexn9WBnC4qnqeUHd4aJQ5GgBAW9TvfYO7YeYHm1BodEttL
|
189
|
+
1wnbtA8yW4MxeTYF/WeJiv/2+AzSbE1cXpDWWZ4WY8WVAyQdkmX/iL/ovdmP4gJq
|
190
|
+
fkys/zjPpTesjYvBGPLN3hbsT03mFUf+21PVT3NbEfb4yIxbk340r10CgYEA2FwP
|
191
|
+
wNpKpiZczbvHKkrtGLxD6GsJwxvQpCSa3GNCu2zFAFkavlZoHA1t8IvvHTAlTd3I
|
192
|
+
9A8rLRr+j1mX/HQ/8Cdmj1/Q/zjDGfAWQve3Rn4Lg4OpMt15EPYdqSsPoKxgEoiF
|
193
|
+
2siTuRQm448ZMo/S8DcuAXSGUrk4fmcluyzEtk0CgYEA2fUKbtIWqxs3GuSB4me+
|
194
|
+
/ozIZaR+p3xd2RR3Z7cfBR8k/sdt8kmuv/HXiLr8FcDZUZamcoqU6Iv/vcoIlcaO
|
195
|
+
av6Gdw6DhJ0NIGmPSTCxLkYJilG7dQZlmg3293/i9fpdrnD4xUs7AZjVPa7kWvUH
|
196
|
+
SKV26Fxbplm6JSMYF5Av3FUCgYAeQOFDCkMd8IdRjUxQMaHtr4WfXjhDPAR0r1mo
|
197
|
+
L4kJRDBX2B3RN6vfIFGbLTYGUtEkjjqnRee3quqliNWjy22VWy0QJ0nGJl3Bpry2
|
198
|
+
KIVMKhvaC/MA1c8z+/YxzX+l6/STItv0t89QNe0qLLxNQacxR8X7FhwiPRwVML8p
|
199
|
+
6RyokQKBgQCg9M1u9w5XR+JQYri6hVt4vTaN3MvEn6IvgqoRmSF3nquhoNBr6D6g
|
200
|
+
m0xYiL0CYzrRPPcjixdQtRNMjmgHvIunjYdm8HcDUpSK26UAi3wBzVWpQnDbioX6
|
201
|
+
ho684wh+7fuOavKTpaBoddUjD6+4Msu6i+px8jhjXA7+fTazZ19mYQ==
|
202
|
+
-----END RSA PRIVATE KEY-----
|
203
|
+
END_MY_KEY
|
204
|
+
|
205
|
+
|
206
|
+
|
207
|
+
end
|
208
|
+
|
@@ -0,0 +1,75 @@
|
|
1
|
+
############################################################################
|
2
|
+
#
|
3
|
+
# config_client.rb
|
4
|
+
#
|
5
|
+
# client {
|
6
|
+
#
|
7
|
+
# auth {
|
8
|
+
# ...
|
9
|
+
# }
|
10
|
+
#
|
11
|
+
# clusters {
|
12
|
+
# cluster("name") {
|
13
|
+
# ...
|
14
|
+
# }
|
15
|
+
# }
|
16
|
+
# }
|
17
|
+
#
|
18
|
+
#
|
19
|
+
#
|
20
|
+
############################################################################
|
21
|
+
|
22
|
+
require 'config_auth'
|
23
|
+
require 'config_client_clusters'
|
24
|
+
require 'config'
|
25
|
+
|
26
|
+
module ProcessWanker
|
27
|
+
|
28
|
+
############################################################################
|
29
|
+
#
|
30
|
+
#
|
31
|
+
#
|
32
|
+
############################################################################
|
33
|
+
|
34
|
+
class ConfigClient < ConfigNode
|
35
|
+
|
36
|
+
attr_accessor :auth
|
37
|
+
attr_accessor :clusters
|
38
|
+
|
39
|
+
def get_cluster(name)
|
40
|
+
|
41
|
+
@clusters ||= ConfigClientClusters.new
|
42
|
+
|
43
|
+
if(name == "default" && !@clusters.clusters[name])
|
44
|
+
@clusters.clusters[name]=Deferred.new(self,[name],proc {
|
45
|
+
host("localhost") {
|
46
|
+
}
|
47
|
+
},ConfigClientClusterBuilder)
|
48
|
+
end
|
49
|
+
|
50
|
+
@clusters.clusters[name]
|
51
|
+
|
52
|
+
end
|
53
|
+
|
54
|
+
end
|
55
|
+
|
56
|
+
############################################################################
|
57
|
+
#
|
58
|
+
#
|
59
|
+
#
|
60
|
+
############################################################################
|
61
|
+
|
62
|
+
class ConfigClientBuilder < Builder
|
63
|
+
|
64
|
+
def auth(&block)
|
65
|
+
@config.auth=Deferred.new(@config,[],block,ConfigAuthBuilder)
|
66
|
+
end
|
67
|
+
|
68
|
+
def clusters(&block)
|
69
|
+
@config.clusters=Deferred.new(@config,[],block,ConfigClientClustersBuilder)
|
70
|
+
end
|
71
|
+
|
72
|
+
end
|
73
|
+
|
74
|
+
|
75
|
+
end
|
@@ -0,0 +1,66 @@
|
|
1
|
+
############################################################################
|
2
|
+
#
|
3
|
+
# config_client_cluster.rb
|
4
|
+
#
|
5
|
+
# cluster {
|
6
|
+
# auth {
|
7
|
+
# ...
|
8
|
+
# }
|
9
|
+
# host("name") {
|
10
|
+
# ...
|
11
|
+
# }
|
12
|
+
# }
|
13
|
+
#
|
14
|
+
############################################################################
|
15
|
+
|
16
|
+
require 'config_client_host'
|
17
|
+
require 'config_auth'
|
18
|
+
require 'config'
|
19
|
+
|
20
|
+
module ProcessWanker
|
21
|
+
|
22
|
+
############################################################################
|
23
|
+
#
|
24
|
+
#
|
25
|
+
#
|
26
|
+
############################################################################
|
27
|
+
|
28
|
+
class ConfigClientCluster < ConfigNode
|
29
|
+
|
30
|
+
attr_accessor :name
|
31
|
+
attr_accessor :auth
|
32
|
+
attr_accessor :hosts
|
33
|
+
|
34
|
+
def initialize(name)
|
35
|
+
@name=name
|
36
|
+
@hosts={}
|
37
|
+
end
|
38
|
+
|
39
|
+
end
|
40
|
+
|
41
|
+
############################################################################
|
42
|
+
#
|
43
|
+
#
|
44
|
+
#
|
45
|
+
############################################################################
|
46
|
+
|
47
|
+
class ConfigClientClusterBuilder < Builder
|
48
|
+
|
49
|
+
def auth(&block)
|
50
|
+
@config.auth=Deferred.new(@config,[],block,ConfigAuthBuilder)
|
51
|
+
end
|
52
|
+
|
53
|
+
def host(name,&block)
|
54
|
+
@config.hosts[name]=Deferred.new(@config,[name],block,ConfigClientHostBuilder)
|
55
|
+
end
|
56
|
+
|
57
|
+
end
|
58
|
+
|
59
|
+
############################################################################
|
60
|
+
#
|
61
|
+
#
|
62
|
+
#
|
63
|
+
############################################################################
|
64
|
+
|
65
|
+
|
66
|
+
end
|
@@ -0,0 +1,62 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
############################################################################
|
3
|
+
#
|
4
|
+
# config_client_clusters.rb
|
5
|
+
#
|
6
|
+
# clusters {
|
7
|
+
# auth {
|
8
|
+
# ...
|
9
|
+
# }
|
10
|
+
# cluster("name") {
|
11
|
+
# ...
|
12
|
+
# }
|
13
|
+
# }
|
14
|
+
#
|
15
|
+
#
|
16
|
+
#
|
17
|
+
############################################################################
|
18
|
+
|
19
|
+
require 'config_auth'
|
20
|
+
require 'config_client_cluster'
|
21
|
+
require 'config'
|
22
|
+
|
23
|
+
module ProcessWanker
|
24
|
+
|
25
|
+
############################################################################
|
26
|
+
#
|
27
|
+
#
|
28
|
+
#
|
29
|
+
############################################################################
|
30
|
+
|
31
|
+
class ConfigClientClusters < ConfigNode
|
32
|
+
|
33
|
+
attr_accessor :clusters
|
34
|
+
attr_accessor :auth
|
35
|
+
|
36
|
+
def initialize()
|
37
|
+
@clusters={}
|
38
|
+
end
|
39
|
+
|
40
|
+
end
|
41
|
+
|
42
|
+
############################################################################
|
43
|
+
#
|
44
|
+
#
|
45
|
+
#
|
46
|
+
############################################################################
|
47
|
+
|
48
|
+
class ConfigClientClustersBuilder < Builder
|
49
|
+
|
50
|
+
def cluster(name,&block)
|
51
|
+
cluster=Deferred.new(@config,[name],block,ConfigClientClusterBuilder)
|
52
|
+
@config.clusters[name]=cluster
|
53
|
+
end
|
54
|
+
|
55
|
+
def auth(&block)
|
56
|
+
@config.auth=Deferred.new(@config,[],block,ConfigAuthBuilder)
|
57
|
+
end
|
58
|
+
|
59
|
+
end
|
60
|
+
|
61
|
+
|
62
|
+
end
|