wakame 0.4.0
Sign up to get free protection for your applications and to get access to all the features.
- data/History.txt +20 -0
- data/README.rdoc +63 -0
- data/Rakefile +86 -0
- data/VERSION +1 -0
- data/app_generators/wakame/templates/README +0 -0
- data/app_generators/wakame/templates/Rakefile +18 -0
- data/app_generators/wakame/templates/bin/wakame-agent +9 -0
- data/app_generators/wakame/templates/bin/wakame-master +9 -0
- data/app_generators/wakame/templates/bin/wakameadm +9 -0
- data/app_generators/wakame/templates/cluster/resources/apache_app/apache_app.rb +54 -0
- data/app_generators/wakame/templates/cluster/resources/apache_app/conf/apache2.conf +46 -0
- data/app_generators/wakame/templates/cluster/resources/apache_app/conf/envvars-app +7 -0
- data/app_generators/wakame/templates/cluster/resources/apache_app/conf/sites-app.conf +23 -0
- data/app_generators/wakame/templates/cluster/resources/apache_app/conf/system-app.conf +67 -0
- data/app_generators/wakame/templates/cluster/resources/apache_app/init.d/apache2-app +192 -0
- data/app_generators/wakame/templates/cluster/resources/apache_lb/apache_lb.rb +56 -0
- data/app_generators/wakame/templates/cluster/resources/apache_lb/conf/apache2.conf +46 -0
- data/app_generators/wakame/templates/cluster/resources/apache_lb/conf/envvars-lb +6 -0
- data/app_generators/wakame/templates/cluster/resources/apache_lb/conf/sites-lb.conf +54 -0
- data/app_generators/wakame/templates/cluster/resources/apache_lb/conf/system-lb.conf +75 -0
- data/app_generators/wakame/templates/cluster/resources/apache_lb/init.d/apache2-lb +192 -0
- data/app_generators/wakame/templates/cluster/resources/apache_www/apache_www.rb +50 -0
- data/app_generators/wakame/templates/cluster/resources/apache_www/conf/apache2.conf +47 -0
- data/app_generators/wakame/templates/cluster/resources/apache_www/conf/envvars-www +7 -0
- data/app_generators/wakame/templates/cluster/resources/apache_www/conf/sites-www.conf +23 -0
- data/app_generators/wakame/templates/cluster/resources/apache_www/conf/system-www.conf +63 -0
- data/app_generators/wakame/templates/cluster/resources/apache_www/init.d/apache2-www +192 -0
- data/app_generators/wakame/templates/cluster/resources/ec2_elastic_ip/ec2_elastic_ip.rb +39 -0
- data/app_generators/wakame/templates/cluster/resources/mysql_master/conf/my.cnf +154 -0
- data/app_generators/wakame/templates/cluster/resources/mysql_master/init.d/mysql +185 -0
- data/app_generators/wakame/templates/cluster/resources/mysql_master/mysql_master.rb +174 -0
- data/app_generators/wakame/templates/config/boot.rb +85 -0
- data/app_generators/wakame/templates/config/cluster.rb +64 -0
- data/app_generators/wakame/templates/config/environments/common.rb +0 -0
- data/app_generators/wakame/templates/config/environments/ec2.rb +3 -0
- data/app_generators/wakame/templates/config/environments/stand_alone.rb +0 -0
- data/app_generators/wakame/templates/config/init.d/wakame-agent +72 -0
- data/app_generators/wakame/templates/config/init.d/wakame-master +73 -0
- data/app_generators/wakame/wakame_generator.rb +124 -0
- data/bin/wakame +18 -0
- data/contrib/imagesetup.sh +77 -0
- data/lib/ext/eventmachine.rb +86 -0
- data/lib/ext/shellwords.rb +172 -0
- data/lib/ext/uri.rb +15 -0
- data/lib/wakame/action.rb +156 -0
- data/lib/wakame/actions/destroy_instances.rb +39 -0
- data/lib/wakame/actions/launch_cluster.rb +31 -0
- data/lib/wakame/actions/migrate_service.rb +65 -0
- data/lib/wakame/actions/propagate_instances.rb +95 -0
- data/lib/wakame/actions/reload_service.rb +21 -0
- data/lib/wakame/actions/scaleout_when_high_load.rb +44 -0
- data/lib/wakame/actions/shutdown_cluster.rb +22 -0
- data/lib/wakame/actions/shutdown_vm.rb +19 -0
- data/lib/wakame/actions/start_service.rb +64 -0
- data/lib/wakame/actions/stop_service.rb +49 -0
- data/lib/wakame/actions/util.rb +71 -0
- data/lib/wakame/actor/daemon.rb +37 -0
- data/lib/wakame/actor/service_monitor.rb +21 -0
- data/lib/wakame/actor/system.rb +46 -0
- data/lib/wakame/actor.rb +33 -0
- data/lib/wakame/agent.rb +226 -0
- data/lib/wakame/amqp_client.rb +219 -0
- data/lib/wakame/command/action_status.rb +62 -0
- data/lib/wakame/command/actor.rb +23 -0
- data/lib/wakame/command/clone_service.rb +12 -0
- data/lib/wakame/command/launch_cluster.rb +15 -0
- data/lib/wakame/command/migrate_service.rb +21 -0
- data/lib/wakame/command/propagate_service.rb +24 -0
- data/lib/wakame/command/shutdown_cluster.rb +15 -0
- data/lib/wakame/command/status.rb +81 -0
- data/lib/wakame/command.rb +31 -0
- data/lib/wakame/command_queue.rb +44 -0
- data/lib/wakame/configuration.rb +93 -0
- data/lib/wakame/daemonize.rb +96 -0
- data/lib/wakame/event.rb +232 -0
- data/lib/wakame/event_dispatcher.rb +154 -0
- data/lib/wakame/graph.rb +79 -0
- data/lib/wakame/initializer.rb +162 -0
- data/lib/wakame/instance_counter.rb +78 -0
- data/lib/wakame/logger.rb +12 -0
- data/lib/wakame/manager/commands.rb +134 -0
- data/lib/wakame/master.rb +369 -0
- data/lib/wakame/monitor/agent.rb +50 -0
- data/lib/wakame/monitor/service.rb +183 -0
- data/lib/wakame/monitor.rb +69 -0
- data/lib/wakame/packets.rb +160 -0
- data/lib/wakame/queue_declare.rb +14 -0
- data/lib/wakame/rule.rb +116 -0
- data/lib/wakame/rule_engine.rb +202 -0
- data/lib/wakame/runner/administrator_command.rb +112 -0
- data/lib/wakame/runner/agent.rb +81 -0
- data/lib/wakame/runner/master.rb +93 -0
- data/lib/wakame/scheduler.rb +251 -0
- data/lib/wakame/service.rb +914 -0
- data/lib/wakame/template.rb +189 -0
- data/lib/wakame/trigger.rb +66 -0
- data/lib/wakame/triggers/instance_count_update.rb +45 -0
- data/lib/wakame/triggers/load_history.rb +107 -0
- data/lib/wakame/triggers/maintain_ssh_known_hosts.rb +43 -0
- data/lib/wakame/triggers/process_command.rb +34 -0
- data/lib/wakame/triggers/shutdown_unused_vm.rb +16 -0
- data/lib/wakame/util.rb +569 -0
- data/lib/wakame/vm_manipulator.rb +186 -0
- data/lib/wakame.rb +59 -0
- data/tasks/ec2.rake +127 -0
- data/tests/cluster.json +3 -0
- data/tests/conf/a +1 -0
- data/tests/conf/b +1 -0
- data/tests/conf/c +1 -0
- data/tests/setup_agent.rb +39 -0
- data/tests/setup_master.rb +28 -0
- data/tests/test_actor.rb +54 -0
- data/tests/test_agent.rb +218 -0
- data/tests/test_amqp_client.rb +94 -0
- data/tests/test_graph.rb +36 -0
- data/tests/test_master.rb +167 -0
- data/tests/test_monitor.rb +47 -0
- data/tests/test_rule_engine.rb +127 -0
- data/tests/test_scheduler.rb +123 -0
- data/tests/test_service.rb +60 -0
- data/tests/test_template.rb +67 -0
- data/tests/test_uri_amqp.rb +19 -0
- data/tests/test_util.rb +71 -0
- data/wakame_generators/resource/resource_generator.rb +54 -0
- data/wakame_generators/resource/templates/apache_app/apache_app.rb +60 -0
- data/wakame_generators/resource/templates/apache_app/conf/apache2.conf +46 -0
- data/wakame_generators/resource/templates/apache_app/conf/envvars-app +7 -0
- data/wakame_generators/resource/templates/apache_app/conf/sites-app.conf +23 -0
- data/wakame_generators/resource/templates/apache_app/conf/system-app.conf +67 -0
- data/wakame_generators/resource/templates/apache_app/init.d/apache2-app +192 -0
- data/wakame_generators/resource/templates/apache_lb/apache_lb.rb +67 -0
- data/wakame_generators/resource/templates/apache_lb/conf/apache2.conf +46 -0
- data/wakame_generators/resource/templates/apache_lb/conf/envvars-lb +6 -0
- data/wakame_generators/resource/templates/apache_lb/conf/sites-lb.conf +54 -0
- data/wakame_generators/resource/templates/apache_lb/conf/system-lb.conf +75 -0
- data/wakame_generators/resource/templates/apache_lb/init.d/apache2-lb +192 -0
- data/wakame_generators/resource/templates/apache_www/apache_www.rb +56 -0
- data/wakame_generators/resource/templates/apache_www/conf/apache2.conf +47 -0
- data/wakame_generators/resource/templates/apache_www/conf/envvars-www +7 -0
- data/wakame_generators/resource/templates/apache_www/conf/sites-www.conf +23 -0
- data/wakame_generators/resource/templates/apache_www/conf/system-www.conf +63 -0
- data/wakame_generators/resource/templates/apache_www/init.d/apache2-www +192 -0
- data/wakame_generators/resource/templates/ec2_elastic_ip/ec2_elastic_ip.rb +39 -0
- data/wakame_generators/resource/templates/mysql_master/conf/my.cnf +154 -0
- data/wakame_generators/resource/templates/mysql_master/init.d/mysql +185 -0
- data/wakame_generators/resource/templates/mysql_master/mysql_master.rb +119 -0
- metadata +289 -0
@@ -0,0 +1,123 @@
|
|
1
|
+
|
2
|
+
$:.unshift File.dirname(__FILE__) + '/../lib'
|
3
|
+
require 'rubygems'
|
4
|
+
require 'eventmachine'
|
5
|
+
|
6
|
+
require 'test/unit'
|
7
|
+
require 'wakame'
|
8
|
+
require 'wakame/manager/scheduler'
|
9
|
+
|
10
|
+
WAKAME_ROOT="#{File.dirname(__FILE__)}/.."
|
11
|
+
|
12
|
+
class TestScheduler < Test::Unit::TestCase
|
13
|
+
include Wakame::Manager
|
14
|
+
|
15
|
+
def test_sequence
|
16
|
+
seq = Scheduler::TimedSequence.new
|
17
|
+
seq.start_at = Time.now
|
18
|
+
|
19
|
+
seq[0]=1
|
20
|
+
seq[30]=3
|
21
|
+
seq[780]=1
|
22
|
+
seq[110]=2
|
23
|
+
seq[320]=4
|
24
|
+
|
25
|
+
p seq
|
26
|
+
p seq.duration
|
27
|
+
p (seq.start_at + seq.duration)
|
28
|
+
|
29
|
+
seq2 = Scheduler::PerMinuteSequence.new
|
30
|
+
seq2.start_at = Time.now
|
31
|
+
|
32
|
+
seq2[0]=1
|
33
|
+
seq2[20]=2
|
34
|
+
seq2[59]=2
|
35
|
+
seq2[10]=3
|
36
|
+
seq2[15]=8
|
37
|
+
seq2[30]=4
|
38
|
+
seq2[55]=3
|
39
|
+
seq2[5]=8
|
40
|
+
seq2[2930]=1
|
41
|
+
seq2[430]=1
|
42
|
+
seq2[3430]=3
|
43
|
+
seq2[1410]=1
|
44
|
+
seq2[159]=2
|
45
|
+
|
46
|
+
#assert_equal([0, 5, 10, 15, 20, 30, 55, 59], seq2.keys)
|
47
|
+
assert(seq2.duration == 60)
|
48
|
+
assert(seq2.range_check?(seq2.start_at))
|
49
|
+
assert(seq2.range_check?(seq2.start_at + 0.0))
|
50
|
+
assert(seq2.range_check?(seq2.start_at + 59.0))
|
51
|
+
assert(seq2.range_check?(seq2.start_at + 59.1))
|
52
|
+
assert(seq2.range_check?(seq2.start_at + 59.9))
|
53
|
+
assert(seq2.range_check?(seq2.start_at + 60.0) == true )
|
54
|
+
assert(seq2.range_check?(seq2.start_at - 1.0) == false )
|
55
|
+
assert_equal(1, seq2.value_at(seq2.start_at))
|
56
|
+
assert_equal(1, seq2.value_at(seq2.start_at + 0.0))
|
57
|
+
assert_equal(1, seq2.value_at(seq2.start_at + 2.0))
|
58
|
+
assert_equal(2, seq2.value_at(seq2.start_at + 59.0))
|
59
|
+
assert_equal(2, seq2.value_at(seq2.start_at + 59.32939))
|
60
|
+
assert_equal(2, seq2.value_at(seq2.start_at + 60.0))
|
61
|
+
assert_equal(nil, seq2.value_at(seq2.start_at + 61.0))
|
62
|
+
assert_equal(nil, seq2.value_at(seq2.start_at + 99999.0))
|
63
|
+
assert_equal([5.0, 8], seq2.next_event(seq2.start_at) )
|
64
|
+
assert_equal([5.0, 8], seq2.next_event(seq2.start_at + 0.0) )
|
65
|
+
assert_equal([4.0, 8], seq2.next_event(seq2.start_at + 1.0) )
|
66
|
+
assert_equal([5.0, 3], seq2.next_event(seq2.start_at + 5.0) )
|
67
|
+
assert_equal([1.0, 3], seq2.next_event(seq2.start_at + 9.0) )
|
68
|
+
assert_equal([1.0, 8], seq2.next_event(seq2.start_at + 14.0) )
|
69
|
+
assert_equal([4.0, 2], seq2.next_event(seq2.start_at + 55.0) )
|
70
|
+
assert_equal([1.0, 2], seq2.next_event(seq2.start_at + 58.0) )
|
71
|
+
assert_equal(nil, seq2.next_event(seq2.start_at + 59.0) )
|
72
|
+
assert_equal(nil, seq2.next_event(seq2.start_at + 59.1883) )
|
73
|
+
assert_equal(nil, seq2.next_event(seq2.start_at + 60.0) )
|
74
|
+
assert_equal(nil, seq2.next_event(seq2.start_at + 99999.0) )
|
75
|
+
|
76
|
+
|
77
|
+
seq = Scheduler::LoopSequence.new(seq2)
|
78
|
+
|
79
|
+
check_at = seq2.start_at + 360.0
|
80
|
+
assert_equal(1, seq.value_at(check_at))
|
81
|
+
assert_equal(1, seq.value_at(check_at + 0.0))
|
82
|
+
assert_equal(1, seq.value_at(check_at + 2.0))
|
83
|
+
assert_equal(8, seq.value_at(check_at + 10.0))
|
84
|
+
assert_equal(3, seq.value_at(check_at + 10.88393))
|
85
|
+
assert_equal(2, seq.value_at(check_at + 59.0))
|
86
|
+
assert_equal(2, seq.value_at(check_at + 59.32939))
|
87
|
+
assert_equal(2, seq.value_at(check_at + 60.0))
|
88
|
+
assert_equal(1, seq.value_at(check_at + 61.0))
|
89
|
+
assert_equal(1, seq.value_at(check_at + 361.0))
|
90
|
+
assert_equal([5.0, 8], seq.next_event(check_at) )
|
91
|
+
assert_equal([5.0, 8], seq.next_event(check_at + 0.0) )
|
92
|
+
assert_equal([4.0, 8], seq.next_event(check_at + 1.0) )
|
93
|
+
assert_equal([5.0, 3], seq.next_event(check_at + 5.0) )
|
94
|
+
assert_equal([1.0, 3], seq.next_event(check_at + 9.0) )
|
95
|
+
assert_equal([1.0, 8], seq.next_event(check_at + 14.0) )
|
96
|
+
assert_equal([4.0, 2], seq.next_event(check_at + 55.0) )
|
97
|
+
assert_equal([1.0, 2], seq.next_event(check_at + 58.0) )
|
98
|
+
assert_equal([4.0, 2], seq.next_event(check_at + 55.0) )
|
99
|
+
|
100
|
+
|
101
|
+
seq2 = Scheduler::PerMinuteSequence.new
|
102
|
+
seq2.start_at = Time.now
|
103
|
+
seq2[0]=1
|
104
|
+
|
105
|
+
seq = Scheduler::LoopSequence.new(seq2)
|
106
|
+
|
107
|
+
check_at = seq2.start_at + 360.0
|
108
|
+
assert_equal(1, seq.value_at(check_at))
|
109
|
+
assert_equal(1, seq.value_at(check_at + 0.0))
|
110
|
+
assert_equal(1, seq.value_at(check_at + 2.0))
|
111
|
+
assert_equal(1, seq.value_at(check_at + 10.0))
|
112
|
+
assert_equal(1, seq.value_at(check_at + 61.0))
|
113
|
+
assert_equal(1, seq.value_at(check_at + 361.0))
|
114
|
+
assert_equal([60.0, 1], seq.next_event(check_at) )
|
115
|
+
assert_equal([60.0, 1], seq.next_event(check_at + 0.0) )
|
116
|
+
assert_equal([59.0, 1], seq.next_event(check_at + 1.0) )
|
117
|
+
assert_equal([25.0, 1], seq.next_event(check_at + 35.0) )
|
118
|
+
assert_equal([1.0, 1], seq.next_event(check_at + 59.0) )
|
119
|
+
assert_equal([0.0, 1], seq.next_event(check_at + 60.0) )
|
120
|
+
assert_equal([59.0, 1], seq.next_event(check_at + 61.0) )
|
121
|
+
|
122
|
+
end
|
123
|
+
end
|
@@ -0,0 +1,60 @@
|
|
1
|
+
|
2
|
+
|
3
|
+
$:.unshift File.dirname(__FILE__) + '/../lib'
|
4
|
+
require 'rubygems'
|
5
|
+
|
6
|
+
require 'test/unit'
|
7
|
+
require 'wakame'
|
8
|
+
require 'wakame/service.rb'
|
9
|
+
|
10
|
+
WAKAME_ROOT="#{File.dirname(__FILE__)}/.."
|
11
|
+
|
12
|
+
class TestService < Test::Unit::TestCase
|
13
|
+
include Wakame::Service
|
14
|
+
|
15
|
+
def test_dg
|
16
|
+
c = WebCluster.new(nil)
|
17
|
+
c.dg.each_level{ |s|
|
18
|
+
p s
|
19
|
+
}
|
20
|
+
|
21
|
+
p c.dg.levels
|
22
|
+
|
23
|
+
p c.dg.children(MySQL_Master)
|
24
|
+
p c.dg.parents(Apache_APP)
|
25
|
+
end
|
26
|
+
|
27
|
+
|
28
|
+
def test_each_instance
|
29
|
+
c = WebCluster.new(nil)
|
30
|
+
c.launch
|
31
|
+
c.each_instance(WebCluster::HttpLoadBalanceServer) { |svc|
|
32
|
+
assert(svc.property.is_a?(Apache_LB))
|
33
|
+
}
|
34
|
+
end
|
35
|
+
|
36
|
+
|
37
|
+
def test_vmspec
|
38
|
+
spec = VmSpec.define {
|
39
|
+
environment(:EC2) { |ec2|
|
40
|
+
ec2.instance_type = 'm1.small'
|
41
|
+
ec2.availability_zone = 'us-east-c1'
|
42
|
+
ec2.security_groups << 'default'
|
43
|
+
}
|
44
|
+
|
45
|
+
environment(:StandAlone) {
|
46
|
+
}
|
47
|
+
}
|
48
|
+
|
49
|
+
|
50
|
+
Wakame.config.vm_environment = :EC2
|
51
|
+
p spec.current.attrs
|
52
|
+
Wakame.config.vm_environment = :StandAlone
|
53
|
+
p spec.current.attrs
|
54
|
+
|
55
|
+
assert_raise(RuntimeError) {
|
56
|
+
Wakame.config.vm_environment = :EC3
|
57
|
+
spec.current.attrs
|
58
|
+
}
|
59
|
+
end
|
60
|
+
end
|
@@ -0,0 +1,67 @@
|
|
1
|
+
|
2
|
+
|
3
|
+
$:.unshift(File.dirname(__FILE__) + '/../lib')
|
4
|
+
$:.unshift(File.dirname(__FILE__))
|
5
|
+
|
6
|
+
require 'setup_master.rb'
|
7
|
+
|
8
|
+
require 'wakame'
|
9
|
+
|
10
|
+
require 'test/unit'
|
11
|
+
require 'wakame'
|
12
|
+
require 'wakame/template'
|
13
|
+
require 'wakame/service'
|
14
|
+
require 'wakame/event'
|
15
|
+
require 'wakame/event_dispatcher'
|
16
|
+
|
17
|
+
class TestTemplate < Test::Unit::TestCase
|
18
|
+
class DummyAgent
|
19
|
+
def agent_id
|
20
|
+
'safasdfadsf'
|
21
|
+
end
|
22
|
+
|
23
|
+
def agent_ip
|
24
|
+
'127.0.0.1'
|
25
|
+
end
|
26
|
+
|
27
|
+
def services
|
28
|
+
{'aaa'=>nil}
|
29
|
+
end
|
30
|
+
|
31
|
+
def has_service_type?(n)
|
32
|
+
false
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
class A < Wakame::Service::Resource
|
37
|
+
def basedir
|
38
|
+
'./tests/'
|
39
|
+
end
|
40
|
+
|
41
|
+
def render_config(template)
|
42
|
+
template.cp(%w(conf/a conf/b conf/c))
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
def test_render
|
47
|
+
cluster = Wakame::Service::ServiceCluster.new(nil) { |c|
|
48
|
+
c.add_service(A.new)
|
49
|
+
}
|
50
|
+
cluster.launch
|
51
|
+
|
52
|
+
|
53
|
+
agent = DummyAgent.new
|
54
|
+
cluster.each_instance { |n|
|
55
|
+
n.bind_agent(agent)
|
56
|
+
|
57
|
+
tmpl = Wakame::Template.new(n)
|
58
|
+
tmpl.render_config
|
59
|
+
assert(File.exists?(File.join(tmpl.tmp_basedir, 'conf/a')))
|
60
|
+
assert(File.exists?(File.join(tmpl.tmp_basedir, 'conf/b')))
|
61
|
+
assert(File.exists?(File.join(tmpl.tmp_basedir, 'conf/c')))
|
62
|
+
tmpl.cleanup
|
63
|
+
assert(File.directory?(tmpl.tmp_basedir) == false )
|
64
|
+
}
|
65
|
+
|
66
|
+
end
|
67
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
|
2
|
+
$:.unshift File.dirname(__FILE__) + '/../lib'
|
3
|
+
require 'rubygems'
|
4
|
+
|
5
|
+
require 'test/unit'
|
6
|
+
require 'uri'
|
7
|
+
require 'ext/uri'
|
8
|
+
|
9
|
+
class TestUriAMQP < Test::Unit::TestCase
|
10
|
+
def test_parse
|
11
|
+
|
12
|
+
assert_equal('amqp://localhost/', URI.parse('amqp://localhost/').to_s)
|
13
|
+
assert_equal('amqp://localhost:1122/', URI.parse('amqp://localhost:1122/').to_s)
|
14
|
+
assert_equal('amqp://127.0.0.1/vvv', URI.parse('amqp://127.0.0.1/vvv').to_s)
|
15
|
+
|
16
|
+
u=URI.parse('amqp://127.0.0.1/vvv')
|
17
|
+
assert_equal('/vvv', u.vhost)
|
18
|
+
end
|
19
|
+
end
|
data/tests/test_util.rb
ADDED
@@ -0,0 +1,71 @@
|
|
1
|
+
|
2
|
+
$:.unshift File.dirname(__FILE__) + '/../lib'
|
3
|
+
require 'rubygems'
|
4
|
+
|
5
|
+
require 'test/unit'
|
6
|
+
require 'wakame/util'
|
7
|
+
|
8
|
+
WAKAME_ROOT="#{File.dirname(__FILE__)}/.."
|
9
|
+
|
10
|
+
class TestUtilClass < Test::Unit::TestCase
|
11
|
+
class A
|
12
|
+
include AttributeHelper
|
13
|
+
|
14
|
+
def_attribute :a, 1
|
15
|
+
def_attribute :b, 2
|
16
|
+
def_attribute :c, []
|
17
|
+
attr :m
|
18
|
+
attr_accessor :n, :o
|
19
|
+
attr_reader :p
|
20
|
+
end
|
21
|
+
|
22
|
+
|
23
|
+
class B < A
|
24
|
+
def_attribute :d, 30
|
25
|
+
def_attribute :e, 'aaa'
|
26
|
+
def_attribute :f
|
27
|
+
end
|
28
|
+
|
29
|
+
def test_attribute_helper1
|
30
|
+
a = A.new
|
31
|
+
assert_equal(1, a.a)
|
32
|
+
assert_equal(2, a.b)
|
33
|
+
assert_equal([], a.c)
|
34
|
+
assert_equal({:type=>'TestUtilClass::A', :a=>1, :b=>2, :c=>[], :m=>nil, :n=>nil, :o=>nil, :p=>nil}, a.dump_attrs)
|
35
|
+
|
36
|
+
b = B.new
|
37
|
+
assert(b.kind_of?(AttributeHelper))
|
38
|
+
assert_equal(1, b.a)
|
39
|
+
assert_equal(2, b.b)
|
40
|
+
assert_equal([], b.c)
|
41
|
+
assert_equal(30, b.d)
|
42
|
+
assert_equal('aaa', b.e)
|
43
|
+
assert(b.f == nil)
|
44
|
+
assert_equal( {:type=>'TestUtilClass::B', :a=>1, :b=>2, :c=>[], :d=>30, :e=>'aaa', :f=>nil, :m=>nil, :n=>nil, :o=>nil, :p=>nil}, b.dump_attrs)
|
45
|
+
end
|
46
|
+
|
47
|
+
|
48
|
+
|
49
|
+
H={23=>1, 38=>3, 2837=>1, 3727=>4, 937=>1, 184=>5, 328=>2, 8939=>1}
|
50
|
+
def test_sorted_hash1
|
51
|
+
s = SortedHash.new
|
52
|
+
|
53
|
+
H.keys.sort_by{rand}.each { |k|
|
54
|
+
s[k]=H[k]
|
55
|
+
}
|
56
|
+
|
57
|
+
assert_equal(H.keys.sort, s.keys)
|
58
|
+
|
59
|
+
s.clear
|
60
|
+
assert_equal([], s.keys)
|
61
|
+
|
62
|
+
end
|
63
|
+
|
64
|
+
|
65
|
+
def test_snake_case
|
66
|
+
{'CNN'=>'cnn', 'CNNNews'=>'cnn_news', 'NewsCNN'=>'news_cnn', 'Apache_WWW'=>'apache_www', 'ApacheAPP'=>'apache_app', 'HeadlineCNNNews'=>'headline_cnn_news'}.each { |k,v|
|
67
|
+
assert_equal(v, Wakame::Util.snake_case(k))
|
68
|
+
}
|
69
|
+
end
|
70
|
+
|
71
|
+
end
|
@@ -0,0 +1,54 @@
|
|
1
|
+
class ResourceGenerator < RubiGen::Base
|
2
|
+
DEFAULT_SHEBANG = File.join(Config::CONFIG['bindir'],
|
3
|
+
Config::CONFIG['ruby_install_name'])
|
4
|
+
|
5
|
+
def initialize(runtime_args, runtime_options = {})
|
6
|
+
super
|
7
|
+
usage if args.empty?
|
8
|
+
@resource_template = args.shift
|
9
|
+
@resource_name = nil
|
10
|
+
@resource_name = args.shift unless args.empty?
|
11
|
+
end
|
12
|
+
|
13
|
+
def manifest
|
14
|
+
# Use /usr/bin/env if no special shebang was specified
|
15
|
+
script_options = { :chmod => 0755, :shebang => options[:shebang] == DEFAULT_SHEBANG ? nil : options[:shebang] }
|
16
|
+
windows = (RUBY_PLATFORM =~ /dos|win32|cygwin/i) || (RUBY_PLATFORM =~ /(:?mswin|mingw)/)
|
17
|
+
|
18
|
+
source_dir = source_path('.').sub(%r{/\.\Z}, '')
|
19
|
+
|
20
|
+
fail "[ERROR] The resource folder does not exist: #{@resource_template}" unless File.directory? source_path(@resource_template)
|
21
|
+
@resource_name ||= @resource_template
|
22
|
+
|
23
|
+
record do |m|
|
24
|
+
Dir.glob(source_path(@resource_template) + "/**/*").each { |path|
|
25
|
+
relpath = path.sub(%r{\A#{source_root}\/}, '')
|
26
|
+
|
27
|
+
if File.directory? path
|
28
|
+
m.directory File.join('cluster', 'resources', relpath)
|
29
|
+
else
|
30
|
+
m.file relpath, File.join('cluster', 'resources', relpath)
|
31
|
+
end
|
32
|
+
}
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
|
37
|
+
protected
|
38
|
+
def banner
|
39
|
+
templates = Dir.glob(spec.path + "/templates/*").collect { |path|
|
40
|
+
File.basename(path)
|
41
|
+
}
|
42
|
+
|
43
|
+
<<-EOS
|
44
|
+
Generate a wakame resource folder under cluster/resources/.
|
45
|
+
|
46
|
+
USAGE: #{$0} resource "resource template name" [resource instance name]
|
47
|
+
|
48
|
+
Installed Templates:
|
49
|
+
#{templates.join(', ')}
|
50
|
+
|
51
|
+
EOS
|
52
|
+
end
|
53
|
+
|
54
|
+
end
|
@@ -0,0 +1,60 @@
|
|
1
|
+
class Apache_APP < Wakame::Service::Resource
|
2
|
+
include Wakame::Service::ApacheBasicProps
|
3
|
+
include WebCluster::HttpAppServer
|
4
|
+
|
5
|
+
def_attribute :listen_port, {:default=>8001}
|
6
|
+
def_attribute :listen_port_https, {:default=>443}
|
7
|
+
def_attribute :max_instance, {:default=>5}
|
8
|
+
|
9
|
+
def render_config(template)
|
10
|
+
template.cp(%w(conf/envvars-app init.d/apache2-app))
|
11
|
+
template.render(%w(conf/system-app.conf conf/apache2.conf conf/sites-app.conf))
|
12
|
+
template.chmod("init.d/apache2-app", 0755)
|
13
|
+
end
|
14
|
+
|
15
|
+
|
16
|
+
def start(svc, action)
|
17
|
+
cond = ConditionalWait.new { |cond|
|
18
|
+
cond.wait_event(Wakame::Event::ServiceOnline) { |event|
|
19
|
+
event.instance_id == svc.instance_id
|
20
|
+
}
|
21
|
+
}
|
22
|
+
|
23
|
+
request = action.actor_request(svc.agent.agent_id,
|
24
|
+
'/service_monitor/register', svc.instance_id, :pidfile, '/var/run/apache2-app.pid').request
|
25
|
+
action.actor_request(svc.agent.agent_id,
|
26
|
+
'/daemon/start', "apache_app", 'init.d/apache2-app'){ |req|
|
27
|
+
req.wait
|
28
|
+
Wakame.log.debug("#{self.class} process started")
|
29
|
+
}
|
30
|
+
cond.wait
|
31
|
+
end
|
32
|
+
|
33
|
+
|
34
|
+
def stop(svc, action)
|
35
|
+
cond = ConditionalWait.new { |cond|
|
36
|
+
cond.wait_event(Wakame::Event::ServiceOffline) { |event|
|
37
|
+
event.instance_id == svc.instance_id
|
38
|
+
}
|
39
|
+
}
|
40
|
+
|
41
|
+
request = action.actor_request(svc.agent.agent_id,
|
42
|
+
'/daemon/stop', 'apache_app', 'init.d/apache2-app'){ |req|
|
43
|
+
req.wait
|
44
|
+
Wakame.log.debug("#{self.class} process stopped")
|
45
|
+
}
|
46
|
+
cond.wait
|
47
|
+
|
48
|
+
request = action.actor_request(svc.agent.agent_id,
|
49
|
+
'/service_monitor/unregister', svc.instance_id ).request
|
50
|
+
end
|
51
|
+
|
52
|
+
def reload(svc, action)
|
53
|
+
action.actor_request(svc.agent.agent_id,
|
54
|
+
'/daemon/reload', "apache_app", 'init.d/apache2-app'){ |req|
|
55
|
+
req.wait
|
56
|
+
Wakame.log.debug("#{self.class} process reloaded")
|
57
|
+
}
|
58
|
+
end
|
59
|
+
|
60
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
#ServerRoot "/etc/apache2"
|
2
|
+
#ServerRoot "/home/wakame/config/apache2"
|
3
|
+
ServerRoot "<%= agent.root_path %>/tmp/config/apache_app/conf"
|
4
|
+
|
5
|
+
LockFile /var/lock/apache2/accept.lock
|
6
|
+
PidFile ${APACHE_PID_FILE}
|
7
|
+
|
8
|
+
User ${APACHE_RUN_USER}
|
9
|
+
Group ${APACHE_RUN_GROUP}
|
10
|
+
|
11
|
+
Include ${SYSTEM_INCLUDE_FILE}
|
12
|
+
|
13
|
+
LoadModule mime_module /usr/lib/apache2/modules/mod_mime.so
|
14
|
+
<IfModule mod_mime.c>
|
15
|
+
TypesConfig /etc/mime.types
|
16
|
+
|
17
|
+
AddType application/x-compress .Z
|
18
|
+
AddType application/x-gzip .gz .tgz
|
19
|
+
AddType application/x-bzip2 .bz2
|
20
|
+
</IfModule>
|
21
|
+
|
22
|
+
AccessFileName .htaccess
|
23
|
+
<Files ~ "^\.ht">
|
24
|
+
Order allow,deny
|
25
|
+
Deny from all
|
26
|
+
</Files>
|
27
|
+
|
28
|
+
ErrorLog ${APACHE_ERROR_LOG_FILE}
|
29
|
+
|
30
|
+
ServerTokens Full
|
31
|
+
ServerSignature On
|
32
|
+
|
33
|
+
#
|
34
|
+
# The following directives define some format nicknames for use with
|
35
|
+
# a CustomLog directive (see below).
|
36
|
+
# If you are behind a reverse proxy, you might want to change %h into %{X-Forwarded-For}i
|
37
|
+
#
|
38
|
+
<IfModule mod_log_config.c>
|
39
|
+
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
|
40
|
+
LogFormat "%{X-Forwarded-For}i %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined_proxy
|
41
|
+
LogFormat "%h %l %u %t \"%r\" %>s %b" common
|
42
|
+
LogFormat "%{Referer}i -> %U" referer
|
43
|
+
LogFormat "%{User-agent}i" agent
|
44
|
+
</IfModule>
|
45
|
+
|
46
|
+
Include ${SITES_INCLUDE_FILE}
|
@@ -0,0 +1,7 @@
|
|
1
|
+
export APACHE_RUN_USER=www-data
|
2
|
+
export APACHE_RUN_GROUP=www-data
|
3
|
+
export APACHE_PID_FILE=/var/run/apache2-app.pid
|
4
|
+
export APACHE_ACCESS_LOG_FILE=/var/log/apache2/access-app.log
|
5
|
+
export APACHE_ERROR_LOG_FILE=/var/log/apache2/error-app.log
|
6
|
+
export SYSTEM_INCLUDE_FILE=system-app.conf
|
7
|
+
export SITES_INCLUDE_FILE=sites-app.conf
|
@@ -0,0 +1,23 @@
|
|
1
|
+
NameVirtualHost *:<%= property.listen_port %>
|
2
|
+
|
3
|
+
# Wild Card Virtual Host
|
4
|
+
#<VirtualHost *:<%= property.listen_port %>>
|
5
|
+
#DocumentRoot /var/www
|
6
|
+
#
|
7
|
+
#LogLevel warn
|
8
|
+
#CustomLog /var/log/apache2/access-app.log combined
|
9
|
+
#ErrorLog /var/log/apache2/error-app.log
|
10
|
+
#
|
11
|
+
#</VirtualHost>
|
12
|
+
|
13
|
+
<%- cluster.virtual_hosts.each { |vh| -%>
|
14
|
+
<VirtualHost *:<%= property.listen_port %>>
|
15
|
+
ServerName <%= vh.server_name %>
|
16
|
+
DocumentRoot /home/wakame/apps/development/test/public
|
17
|
+
RailsEnv development
|
18
|
+
|
19
|
+
LogLevel warn
|
20
|
+
CustomLog /var/log/apache2/access-app.log combined
|
21
|
+
ErrorLog /var/log/apache2/error-app.log
|
22
|
+
</VirtualHost>
|
23
|
+
<%- } -%>
|
@@ -0,0 +1,67 @@
|
|
1
|
+
Timeout 300
|
2
|
+
KeepAlive Off
|
3
|
+
#MaxKeepAliveRequests 100
|
4
|
+
#KeepAliveTimeout 15
|
5
|
+
|
6
|
+
<IfModule mpm_prefork_module>
|
7
|
+
StartServers 5
|
8
|
+
MinSpareServers 5
|
9
|
+
MaxSpareServers 10
|
10
|
+
MaxClients 10
|
11
|
+
MaxRequestsPerChild 5000
|
12
|
+
</IfModule>
|
13
|
+
|
14
|
+
<IfModule mpm_worker_module>
|
15
|
+
StartServers 2
|
16
|
+
MaxClients 150
|
17
|
+
MinSpareThreads 25
|
18
|
+
MaxSpareThreads 75
|
19
|
+
ThreadsPerChild 25
|
20
|
+
MaxRequestsPerChild 0
|
21
|
+
</IfModule>
|
22
|
+
|
23
|
+
|
24
|
+
LoadModule alias_module /usr/lib/apache2/modules/mod_alias.so
|
25
|
+
LoadModule auth_basic_module /usr/lib/apache2/modules/mod_auth_basic.so
|
26
|
+
LoadModule authn_file_module /usr/lib/apache2/modules/mod_authn_file.so
|
27
|
+
LoadModule authz_default_module /usr/lib/apache2/modules/mod_authz_default.so
|
28
|
+
LoadModule authz_groupfile_module /usr/lib/apache2/modules/mod_authz_groupfile.so
|
29
|
+
LoadModule authz_host_module /usr/lib/apache2/modules/mod_authz_host.so
|
30
|
+
LoadModule authz_user_module /usr/lib/apache2/modules/mod_authz_user.so
|
31
|
+
LoadModule env_module /usr/lib/apache2/modules/mod_env.so
|
32
|
+
LoadModule rewrite_module /usr/lib/apache2/modules/mod_rewrite.so
|
33
|
+
LoadModule setenvif_module /usr/lib/apache2/modules/mod_setenvif.so
|
34
|
+
LoadModule status_module /usr/lib/apache2/modules/mod_status.so
|
35
|
+
LoadModule info_module /usr/lib/apache2/modules/mod_info.so
|
36
|
+
LoadModule passenger_module /usr/local/gems/gems/passenger-2.2.1/ext/apache2/mod_passenger.so
|
37
|
+
|
38
|
+
### Port configuration
|
39
|
+
Listen <%= property.listen_port %>
|
40
|
+
|
41
|
+
#<IfModule mod_ssl.c>
|
42
|
+
# Listen 443
|
43
|
+
#</IfModule>
|
44
|
+
|
45
|
+
|
46
|
+
<IfModule mod_status.c>
|
47
|
+
<Location /server-status>
|
48
|
+
SetHandler server-status
|
49
|
+
Order deny,allow
|
50
|
+
Deny from all
|
51
|
+
Allow from 127.0.0.1 localhost.localdomain localhost ip6-localhost
|
52
|
+
</Location>
|
53
|
+
</IfModule>
|
54
|
+
|
55
|
+
<IfModule mod_info.c>
|
56
|
+
<Location /server-info>
|
57
|
+
SetHandler server-info
|
58
|
+
Order deny,allow
|
59
|
+
Deny from all
|
60
|
+
Allow from 127.0.0.1 localhost.localdomain localhost ip6-localhost
|
61
|
+
</Location>
|
62
|
+
</IfModule>
|
63
|
+
|
64
|
+
<IfModule mod_passenger.c>
|
65
|
+
PassengerRoot /usr/local/gems/gems/passenger-2.2.1
|
66
|
+
PassengerRuby "/usr/local/bin/passenger_ruby.sh"
|
67
|
+
</IfModule>
|