wakame 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (147) hide show
  1. data/History.txt +20 -0
  2. data/README.rdoc +63 -0
  3. data/Rakefile +86 -0
  4. data/VERSION +1 -0
  5. data/app_generators/wakame/templates/README +0 -0
  6. data/app_generators/wakame/templates/Rakefile +18 -0
  7. data/app_generators/wakame/templates/bin/wakame-agent +9 -0
  8. data/app_generators/wakame/templates/bin/wakame-master +9 -0
  9. data/app_generators/wakame/templates/bin/wakameadm +9 -0
  10. data/app_generators/wakame/templates/cluster/resources/apache_app/apache_app.rb +54 -0
  11. data/app_generators/wakame/templates/cluster/resources/apache_app/conf/apache2.conf +46 -0
  12. data/app_generators/wakame/templates/cluster/resources/apache_app/conf/envvars-app +7 -0
  13. data/app_generators/wakame/templates/cluster/resources/apache_app/conf/sites-app.conf +23 -0
  14. data/app_generators/wakame/templates/cluster/resources/apache_app/conf/system-app.conf +67 -0
  15. data/app_generators/wakame/templates/cluster/resources/apache_app/init.d/apache2-app +192 -0
  16. data/app_generators/wakame/templates/cluster/resources/apache_lb/apache_lb.rb +56 -0
  17. data/app_generators/wakame/templates/cluster/resources/apache_lb/conf/apache2.conf +46 -0
  18. data/app_generators/wakame/templates/cluster/resources/apache_lb/conf/envvars-lb +6 -0
  19. data/app_generators/wakame/templates/cluster/resources/apache_lb/conf/sites-lb.conf +54 -0
  20. data/app_generators/wakame/templates/cluster/resources/apache_lb/conf/system-lb.conf +75 -0
  21. data/app_generators/wakame/templates/cluster/resources/apache_lb/init.d/apache2-lb +192 -0
  22. data/app_generators/wakame/templates/cluster/resources/apache_www/apache_www.rb +50 -0
  23. data/app_generators/wakame/templates/cluster/resources/apache_www/conf/apache2.conf +47 -0
  24. data/app_generators/wakame/templates/cluster/resources/apache_www/conf/envvars-www +7 -0
  25. data/app_generators/wakame/templates/cluster/resources/apache_www/conf/sites-www.conf +23 -0
  26. data/app_generators/wakame/templates/cluster/resources/apache_www/conf/system-www.conf +63 -0
  27. data/app_generators/wakame/templates/cluster/resources/apache_www/init.d/apache2-www +192 -0
  28. data/app_generators/wakame/templates/cluster/resources/ec2_elastic_ip/ec2_elastic_ip.rb +39 -0
  29. data/app_generators/wakame/templates/cluster/resources/mysql_master/conf/my.cnf +154 -0
  30. data/app_generators/wakame/templates/cluster/resources/mysql_master/init.d/mysql +185 -0
  31. data/app_generators/wakame/templates/cluster/resources/mysql_master/mysql_master.rb +174 -0
  32. data/app_generators/wakame/templates/config/boot.rb +85 -0
  33. data/app_generators/wakame/templates/config/cluster.rb +64 -0
  34. data/app_generators/wakame/templates/config/environments/common.rb +0 -0
  35. data/app_generators/wakame/templates/config/environments/ec2.rb +3 -0
  36. data/app_generators/wakame/templates/config/environments/stand_alone.rb +0 -0
  37. data/app_generators/wakame/templates/config/init.d/wakame-agent +72 -0
  38. data/app_generators/wakame/templates/config/init.d/wakame-master +73 -0
  39. data/app_generators/wakame/wakame_generator.rb +124 -0
  40. data/bin/wakame +18 -0
  41. data/contrib/imagesetup.sh +77 -0
  42. data/lib/ext/eventmachine.rb +86 -0
  43. data/lib/ext/shellwords.rb +172 -0
  44. data/lib/ext/uri.rb +15 -0
  45. data/lib/wakame/action.rb +156 -0
  46. data/lib/wakame/actions/destroy_instances.rb +39 -0
  47. data/lib/wakame/actions/launch_cluster.rb +31 -0
  48. data/lib/wakame/actions/migrate_service.rb +65 -0
  49. data/lib/wakame/actions/propagate_instances.rb +95 -0
  50. data/lib/wakame/actions/reload_service.rb +21 -0
  51. data/lib/wakame/actions/scaleout_when_high_load.rb +44 -0
  52. data/lib/wakame/actions/shutdown_cluster.rb +22 -0
  53. data/lib/wakame/actions/shutdown_vm.rb +19 -0
  54. data/lib/wakame/actions/start_service.rb +64 -0
  55. data/lib/wakame/actions/stop_service.rb +49 -0
  56. data/lib/wakame/actions/util.rb +71 -0
  57. data/lib/wakame/actor/daemon.rb +37 -0
  58. data/lib/wakame/actor/service_monitor.rb +21 -0
  59. data/lib/wakame/actor/system.rb +46 -0
  60. data/lib/wakame/actor.rb +33 -0
  61. data/lib/wakame/agent.rb +226 -0
  62. data/lib/wakame/amqp_client.rb +219 -0
  63. data/lib/wakame/command/action_status.rb +62 -0
  64. data/lib/wakame/command/actor.rb +23 -0
  65. data/lib/wakame/command/clone_service.rb +12 -0
  66. data/lib/wakame/command/launch_cluster.rb +15 -0
  67. data/lib/wakame/command/migrate_service.rb +21 -0
  68. data/lib/wakame/command/propagate_service.rb +24 -0
  69. data/lib/wakame/command/shutdown_cluster.rb +15 -0
  70. data/lib/wakame/command/status.rb +81 -0
  71. data/lib/wakame/command.rb +31 -0
  72. data/lib/wakame/command_queue.rb +44 -0
  73. data/lib/wakame/configuration.rb +93 -0
  74. data/lib/wakame/daemonize.rb +96 -0
  75. data/lib/wakame/event.rb +232 -0
  76. data/lib/wakame/event_dispatcher.rb +154 -0
  77. data/lib/wakame/graph.rb +79 -0
  78. data/lib/wakame/initializer.rb +162 -0
  79. data/lib/wakame/instance_counter.rb +78 -0
  80. data/lib/wakame/logger.rb +12 -0
  81. data/lib/wakame/manager/commands.rb +134 -0
  82. data/lib/wakame/master.rb +369 -0
  83. data/lib/wakame/monitor/agent.rb +50 -0
  84. data/lib/wakame/monitor/service.rb +183 -0
  85. data/lib/wakame/monitor.rb +69 -0
  86. data/lib/wakame/packets.rb +160 -0
  87. data/lib/wakame/queue_declare.rb +14 -0
  88. data/lib/wakame/rule.rb +116 -0
  89. data/lib/wakame/rule_engine.rb +202 -0
  90. data/lib/wakame/runner/administrator_command.rb +112 -0
  91. data/lib/wakame/runner/agent.rb +81 -0
  92. data/lib/wakame/runner/master.rb +93 -0
  93. data/lib/wakame/scheduler.rb +251 -0
  94. data/lib/wakame/service.rb +914 -0
  95. data/lib/wakame/template.rb +189 -0
  96. data/lib/wakame/trigger.rb +66 -0
  97. data/lib/wakame/triggers/instance_count_update.rb +45 -0
  98. data/lib/wakame/triggers/load_history.rb +107 -0
  99. data/lib/wakame/triggers/maintain_ssh_known_hosts.rb +43 -0
  100. data/lib/wakame/triggers/process_command.rb +34 -0
  101. data/lib/wakame/triggers/shutdown_unused_vm.rb +16 -0
  102. data/lib/wakame/util.rb +569 -0
  103. data/lib/wakame/vm_manipulator.rb +186 -0
  104. data/lib/wakame.rb +59 -0
  105. data/tasks/ec2.rake +127 -0
  106. data/tests/cluster.json +3 -0
  107. data/tests/conf/a +1 -0
  108. data/tests/conf/b +1 -0
  109. data/tests/conf/c +1 -0
  110. data/tests/setup_agent.rb +39 -0
  111. data/tests/setup_master.rb +28 -0
  112. data/tests/test_actor.rb +54 -0
  113. data/tests/test_agent.rb +218 -0
  114. data/tests/test_amqp_client.rb +94 -0
  115. data/tests/test_graph.rb +36 -0
  116. data/tests/test_master.rb +167 -0
  117. data/tests/test_monitor.rb +47 -0
  118. data/tests/test_rule_engine.rb +127 -0
  119. data/tests/test_scheduler.rb +123 -0
  120. data/tests/test_service.rb +60 -0
  121. data/tests/test_template.rb +67 -0
  122. data/tests/test_uri_amqp.rb +19 -0
  123. data/tests/test_util.rb +71 -0
  124. data/wakame_generators/resource/resource_generator.rb +54 -0
  125. data/wakame_generators/resource/templates/apache_app/apache_app.rb +60 -0
  126. data/wakame_generators/resource/templates/apache_app/conf/apache2.conf +46 -0
  127. data/wakame_generators/resource/templates/apache_app/conf/envvars-app +7 -0
  128. data/wakame_generators/resource/templates/apache_app/conf/sites-app.conf +23 -0
  129. data/wakame_generators/resource/templates/apache_app/conf/system-app.conf +67 -0
  130. data/wakame_generators/resource/templates/apache_app/init.d/apache2-app +192 -0
  131. data/wakame_generators/resource/templates/apache_lb/apache_lb.rb +67 -0
  132. data/wakame_generators/resource/templates/apache_lb/conf/apache2.conf +46 -0
  133. data/wakame_generators/resource/templates/apache_lb/conf/envvars-lb +6 -0
  134. data/wakame_generators/resource/templates/apache_lb/conf/sites-lb.conf +54 -0
  135. data/wakame_generators/resource/templates/apache_lb/conf/system-lb.conf +75 -0
  136. data/wakame_generators/resource/templates/apache_lb/init.d/apache2-lb +192 -0
  137. data/wakame_generators/resource/templates/apache_www/apache_www.rb +56 -0
  138. data/wakame_generators/resource/templates/apache_www/conf/apache2.conf +47 -0
  139. data/wakame_generators/resource/templates/apache_www/conf/envvars-www +7 -0
  140. data/wakame_generators/resource/templates/apache_www/conf/sites-www.conf +23 -0
  141. data/wakame_generators/resource/templates/apache_www/conf/system-www.conf +63 -0
  142. data/wakame_generators/resource/templates/apache_www/init.d/apache2-www +192 -0
  143. data/wakame_generators/resource/templates/ec2_elastic_ip/ec2_elastic_ip.rb +39 -0
  144. data/wakame_generators/resource/templates/mysql_master/conf/my.cnf +154 -0
  145. data/wakame_generators/resource/templates/mysql_master/init.d/mysql +185 -0
  146. data/wakame_generators/resource/templates/mysql_master/mysql_master.rb +119 -0
  147. 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
@@ -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>