murakumo 0.1.4 → 0.1.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/bin/murakumo-install-init-script +1 -2
- data/etc/murakumo.server +14 -1
- data/lib/cli/mrkmctl.rb +15 -10
- data/lib/cli/murakumo_options.rb +13 -1
- data/lib/misc/murakumo_const.rb +1 -1
- data/lib/srv/murakumo_cloud.rb +20 -5
- metadata +4 -4
@@ -1,5 +1,4 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
|
-
MRKM_DIR = 'murakumo-0.1.4'
|
3
2
|
INIT_D_DIR = '/etc/init.d'
|
4
3
|
|
5
4
|
begin
|
@@ -19,5 +18,5 @@ else
|
|
19
18
|
exit 1
|
20
19
|
end
|
21
20
|
|
22
|
-
`cp -i #{gem_dir}
|
21
|
+
`cp -i #{gem_dir}/murakumo-*/etc/murakumo.server #{INIT_D_DIR}/murakumo`
|
23
22
|
`chmod 755 #{INIT_D_DIR}/murakumo`
|
data/etc/murakumo.server
CHANGED
@@ -91,10 +91,23 @@ host: $ip_addr, $hostname, 60
|
|
91
91
|
# http_get '/index.html'
|
92
92
|
EOF
|
93
93
|
|
94
|
+
chmod 600 $conf
|
95
|
+
|
94
96
|
echo "configuration file was created: $conf"
|
95
97
|
echo -e "\033[0;31mPlease set 127.0.0.1 to resolv.conf.\033[0;39m"
|
96
98
|
;;
|
99
|
+
hup)
|
100
|
+
PID=`ps -ef | awk '/ruby/ && /murakumo/ && !/awk/{print $2}'`
|
101
|
+
|
102
|
+
if [ -n "$PID" ]; then
|
103
|
+
echo "sent HUP to murakumo($PID)."
|
104
|
+
kill -HUP $PID
|
105
|
+
else
|
106
|
+
echo 'pid is not found.'
|
107
|
+
exit 1
|
108
|
+
fi
|
109
|
+
;;
|
97
110
|
*)
|
98
|
-
echo $"Usage: $0 {start|stop|restart|status|save|
|
111
|
+
echo $"Usage: $0 {start|stop|restart|status|save|configure|hup}"
|
99
112
|
exit 1
|
100
113
|
esac
|
data/lib/cli/mrkmctl.rb
CHANGED
@@ -17,17 +17,10 @@ begin
|
|
17
17
|
case cmd
|
18
18
|
# 一覧表示
|
19
19
|
when :list
|
20
|
-
|
21
|
-
|
22
|
-
there.list_records.select {|r| r[0..1].any?{|i| i.start_with?(arg) } }
|
23
|
-
else
|
24
|
-
there.list_records
|
25
|
-
end
|
20
|
+
# レコードの取得
|
21
|
+
records = there.list_records
|
26
22
|
|
27
|
-
|
28
|
-
IP address TTL Priority Activity Hostname
|
29
|
-
--------------- ------ --------- -------- ----------
|
30
|
-
EOF
|
23
|
+
# 値の書き換え
|
31
24
|
records.each do |r|
|
32
25
|
priority = case r[3]
|
33
26
|
when Murakumo::ORIGIN
|
@@ -42,6 +35,18 @@ IP address TTL Priority Activity Hostname
|
|
42
35
|
|
43
36
|
r[3] = priority
|
44
37
|
r[4] = (r[4] == Murakumo::ACTIVE ? 'Active' : 'Inactive')
|
38
|
+
end
|
39
|
+
|
40
|
+
if arg.kind_of?(String)
|
41
|
+
# 引数がある場合はフィルタリング(TTLを除く)
|
42
|
+
records = records.select {|r| r.values_at(0, 1, 3, 4).any?{|i| i.to_s =~ /\A#{arg.to_s}/i } }
|
43
|
+
end
|
44
|
+
|
45
|
+
puts <<-EOF
|
46
|
+
IP address TTL Priority Activity Hostname
|
47
|
+
--------------- ------ --------- -------- ----------
|
48
|
+
EOF
|
49
|
+
records.each do |r|
|
45
50
|
puts '%-15s %6d %-9s %-8s %s' % r.values_at(0, 2, 3, 4, 1)
|
46
51
|
end
|
47
52
|
|
data/lib/cli/murakumo_options.rb
CHANGED
@@ -10,7 +10,7 @@ Version = Murakumo::VERSION
|
|
10
10
|
def murakumo_parse_args
|
11
11
|
optopus do
|
12
12
|
desc 'key for authentication (required)'
|
13
|
-
option :auth_key, '-K', '--auth-key
|
13
|
+
option :auth_key, '-K', '--auth-key STRING_OR_PATH', :required => true
|
14
14
|
|
15
15
|
desc 'ip address to bind'
|
16
16
|
option :dns_address, '-a', '--address IP', :default => '0.0.0.0' do |value|
|
@@ -114,6 +114,11 @@ def murakumo_parse_args
|
|
114
114
|
option :gossip_receive_timeout, '-O', '--gossip-receive-timeout NUM', :type => Integer, :default => 3
|
115
115
|
|
116
116
|
after do |options|
|
117
|
+
# auth_key
|
118
|
+
if File.exist?(options[:auth_key])
|
119
|
+
options[:auth_key] = File.read(options[:auth_key]).strip
|
120
|
+
end
|
121
|
+
|
117
122
|
# resolver
|
118
123
|
if options[:resolver]
|
119
124
|
options[:resolver] = options[:resolver].map {|i| i.strip }
|
@@ -168,6 +173,13 @@ def murakumo_parse_args
|
|
168
173
|
|
169
174
|
options[:logger] = Logger.new(options[:log_path] || $stderr)
|
170
175
|
options[:logger].level = Logger.const_get(options[:log_level].to_s.upcase)
|
176
|
+
|
177
|
+
# check same hostname
|
178
|
+
hostnames = [options[:host][0].downcase] + options[:aliases].map {|i| i[0].downcase }
|
179
|
+
|
180
|
+
if hostnames.length != hostnames.uniq.length
|
181
|
+
raise OptionParser::ParseError, 'same hostname was found'
|
182
|
+
end
|
171
183
|
end
|
172
184
|
|
173
185
|
error do |e|
|
data/lib/misc/murakumo_const.rb
CHANGED
data/lib/srv/murakumo_cloud.rb
CHANGED
@@ -13,6 +13,7 @@ module Murakumo
|
|
13
13
|
attr_reader :address
|
14
14
|
attr_reader :gossip
|
15
15
|
attr_reader :db
|
16
|
+
attr_reader :hostname
|
16
17
|
|
17
18
|
def initialize(options)
|
18
19
|
# オプションはインスタンス変数に保存
|
@@ -21,8 +22,10 @@ module Murakumo
|
|
21
22
|
# リソースレコードからホストのアドレスとデータを取り出す
|
22
23
|
host_data = options[:host]
|
23
24
|
@address = host_data.shift
|
25
|
+
@hostname = host_data.first
|
24
26
|
host_data.concat [ORIGIN, ACTIVE]
|
25
27
|
alias_datas = options[:aliases].map {|r| r + [ACTIVE] }
|
28
|
+
@logger = options[:logger]
|
26
29
|
|
27
30
|
# 名前は小文字に変換
|
28
31
|
datas = ([host_data] + alias_datas).map do |i|
|
@@ -45,7 +48,7 @@ module Murakumo
|
|
45
48
|
:node_lifetime => options[:gossip_node_lifetime],
|
46
49
|
:gossip_interval => options[:gossip_send_interval],
|
47
50
|
:receive_timeout => options[:gossip_receive_timeout],
|
48
|
-
:logger =>
|
51
|
+
:logger => @logger,
|
49
52
|
})
|
50
53
|
|
51
54
|
# ノードの更新をフック
|
@@ -70,12 +73,19 @@ module Murakumo
|
|
70
73
|
|
71
74
|
if health_check.kind_of?(Hash)
|
72
75
|
health_check.each do |name, conf|
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
+
name = name.downcase
|
77
|
+
|
78
|
+
if datas.any? {|i| i[0] == name }
|
79
|
+
checker = HealthChecker.new(name, self, @logger, conf)
|
80
|
+
@health_checkers[name] = checker
|
81
|
+
# ヘルスチェックはまだ起動しない
|
82
|
+
else
|
83
|
+
# ホスト名になかったら警告
|
84
|
+
@logger.warn("host for a health check is not found: #{name}")
|
85
|
+
end
|
76
86
|
end
|
77
87
|
else
|
78
|
-
|
88
|
+
@logger.warn('configuration of a health check is not right')
|
79
89
|
end
|
80
90
|
end
|
81
91
|
end
|
@@ -308,6 +318,11 @@ module Murakumo
|
|
308
318
|
# 名前は小文字に変換
|
309
319
|
name = name.downcase
|
310
320
|
|
321
|
+
# ホスト名と同じなら警告
|
322
|
+
if name == @hostname
|
323
|
+
@logger.warn('same hostname as origin was found')
|
324
|
+
end
|
325
|
+
|
311
326
|
@db.execute(<<-EOS, address, name, ttl, priority, activity)
|
312
327
|
REPLACE INTO records (ip_address, name, ttl, priority, activity)
|
313
328
|
VALUES (?, ?, ?, ?, ?)
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: murakumo
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 17
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 1
|
9
|
-
-
|
10
|
-
version: 0.1.
|
9
|
+
- 5
|
10
|
+
version: 0.1.5
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- winebarrel
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2011-11-
|
18
|
+
date: 2011-11-20 00:00:00 Z
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
21
21
|
name: rubydns
|