wakame 0.5.0 → 0.5.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (111) hide show
  1. data/History.txt +4 -0
  2. data/LICENSE +202 -0
  3. data/Rakefile +11 -12
  4. data/VERSION +1 -1
  5. data/app_generators/wakame/templates/bin/wakame-agent +1 -1
  6. data/app_generators/wakame/templates/bin/wakame-master +1 -1
  7. data/app_generators/wakame/templates/config/cluster.rb +32 -24
  8. data/app_generators/wakame/templates/config/init.d/centos/wakame-agent +40 -0
  9. data/app_generators/wakame/templates/config/init.d/centos/wakame-master +40 -0
  10. data/app_generators/wakame/templates/config/init.d/wakame-master +1 -1
  11. data/lib/ext/eventmachine.rb +5 -5
  12. data/lib/wakame.rb +12 -0
  13. data/lib/wakame/action.rb +10 -11
  14. data/lib/wakame/actions/deploy_application.rb +61 -0
  15. data/lib/wakame/actions/deploy_config.rb +1 -3
  16. data/lib/wakame/actions/freeze_cluster.rb +15 -0
  17. data/lib/wakame/actions/launch_cluster.rb +1 -3
  18. data/lib/wakame/actions/launch_vm.rb +1 -1
  19. data/lib/wakame/actions/migrate_service.rb +4 -3
  20. data/lib/wakame/actions/notify_child_changed.rb +3 -6
  21. data/lib/wakame/actions/notify_parent_changed.rb +4 -7
  22. data/lib/wakame/actions/propagate_resource.rb +1 -3
  23. data/lib/wakame/actions/propagate_service.rb +1 -3
  24. data/lib/wakame/actions/register_agent.rb +43 -0
  25. data/lib/wakame/actions/reload_service.rb +2 -2
  26. data/lib/wakame/actions/shutdown_cluster.rb +4 -6
  27. data/lib/wakame/actions/shutdown_vm.rb +27 -6
  28. data/lib/wakame/actions/start_service.rb +40 -32
  29. data/lib/wakame/actions/stop_service.rb +8 -10
  30. data/lib/wakame/actions/unfreeze_cluster.rb +15 -0
  31. data/lib/wakame/actor.rb +2 -5
  32. data/lib/wakame/actor/deploy.rb +110 -0
  33. data/lib/wakame/actor/monitor.rb +14 -0
  34. data/lib/wakame/actor/s3fs.rb +45 -0
  35. data/lib/wakame/actor/service_monitor.rb +0 -17
  36. data/lib/wakame/actor/system.rb +5 -1
  37. data/lib/wakame/agent.rb +29 -179
  38. data/lib/wakame/agent_manager.rb +11 -0
  39. data/lib/wakame/agent_managers/actor_manager.rb +101 -0
  40. data/lib/wakame/agent_managers/monitor_manager.rb +48 -0
  41. data/lib/wakame/command.rb +4 -7
  42. data/lib/wakame/command/actor.rb +9 -12
  43. data/lib/wakame/command/agent_status.rb +2 -2
  44. data/lib/wakame/command/control_service.rb +66 -0
  45. data/lib/wakame/command/deploy_application.rb +18 -0
  46. data/lib/wakame/command/deploy_config.rb +16 -0
  47. data/lib/wakame/command/launch_cluster.rb +1 -1
  48. data/lib/wakame/command/launch_vm.rb +1 -1
  49. data/lib/wakame/command/propagate_resource.rb +1 -1
  50. data/lib/wakame/command/propagate_service.rb +5 -3
  51. data/lib/wakame/command/reload_service.rb +1 -1
  52. data/lib/wakame/command/shutdown_cluster.rb +1 -1
  53. data/lib/wakame/command/shutdown_vm.rb +37 -11
  54. data/lib/wakame/command/start_service.rb +1 -1
  55. data/lib/wakame/command/status.rb +6 -4
  56. data/lib/wakame/command/stop_service.rb +1 -1
  57. data/lib/wakame/configuration.rb +5 -0
  58. data/lib/wakame/event.rb +85 -33
  59. data/lib/wakame/event_dispatcher.rb +2 -2
  60. data/lib/wakame/initializer.rb +97 -31
  61. data/lib/wakame/master.rb +23 -346
  62. data/lib/wakame/master_manager.rb +11 -0
  63. data/lib/wakame/master_managers/action_manager.rb +321 -0
  64. data/lib/wakame/master_managers/agent_monitor.rb +166 -0
  65. data/lib/wakame/master_managers/cluster_manager.rb +176 -0
  66. data/lib/wakame/master_managers/command_queue.rb +133 -0
  67. data/lib/wakame/models/agent_pool.rb +113 -0
  68. data/lib/wakame/models/application_repository.rb +34 -0
  69. data/lib/wakame/models/object_store.rb +32 -0
  70. data/lib/wakame/models/service_cluster_pool.rb +36 -0
  71. data/lib/wakame/monitor.rb +3 -6
  72. data/lib/wakame/monitor/agent.rb +9 -6
  73. data/lib/wakame/monitor/service.rb +56 -29
  74. data/lib/wakame/runner/administrator_command.rb +210 -24
  75. data/lib/wakame/runner/agent.rb +2 -0
  76. data/lib/wakame/runner/master.rb +2 -1
  77. data/lib/wakame/service.rb +140 -130
  78. data/lib/wakame/status_db.rb +101 -121
  79. data/lib/wakame/util.rb +26 -15
  80. data/tests/setup_master.rb +1 -0
  81. data/tests/test_master.rb +0 -2
  82. data/tests/test_model_agent_pool.rb +21 -0
  83. data/tests/test_service.rb +14 -8
  84. data/tests/test_status_db.rb +2 -0
  85. data/tests/test_util.rb +12 -1
  86. data/wakame_generators/resource/templates/apache_app/apache_app.rb +20 -11
  87. data/wakame_generators/resource/templates/apache_app/conf/vh/aaa.test.conf +1 -1
  88. data/wakame_generators/resource/templates/apache_lb/apache_lb.rb +7 -7
  89. data/wakame_generators/resource/templates/apache_lb/conf/system-lb.conf +6 -4
  90. data/wakame_generators/resource/templates/apache_www/apache_www.rb +15 -13
  91. data/wakame_generators/resource/templates/ec2_elastic_ip/ec2_elastic_ip.rb +17 -17
  92. data/wakame_generators/resource/templates/ec2_elb/ec2_elb.rb +22 -15
  93. data/wakame_generators/resource/templates/mongodb/conf/mongodb.conf +95 -0
  94. data/wakame_generators/resource/templates/mongodb/init.d/mongodb +244 -0
  95. data/wakame_generators/resource/templates/mongodb/mongodb.rb +64 -0
  96. data/wakame_generators/resource/templates/mysql_master/mysql_master.rb +17 -21
  97. data/wakame_generators/resource/templates/nginx/conf/nginx.conf +4 -0
  98. data/wakame_generators/resource/templates/nginx/conf/vh/ec2_elb_common.conf +19 -0
  99. data/wakame_generators/resource/templates/nginx/init.d/nginx +6 -0
  100. data/wakame_generators/resource/templates/nginx/init.d/spawn-fcgi +46 -0
  101. data/wakame_generators/resource/templates/nginx/nginx.rb +15 -10
  102. data/wakame_generators/resource/templates/nginx_passenger/conf/nginx-passenger.conf +39 -0
  103. data/wakame_generators/resource/templates/nginx_passenger/conf/vh/ec2_elb_common.conf +10 -0
  104. data/wakame_generators/resource/templates/nginx_passenger/init.d/nginx-passenger +70 -0
  105. data/wakame_generators/resource/templates/nginx_passenger/nginx_passenger.rb +71 -0
  106. data/wakame_generators/resource/templates/s3fs/s3fs.rb +24 -0
  107. metadata +195 -74
  108. data/lib/wakame/action_manager.rb +0 -303
  109. data/lib/wakame/command/clone_service.rb +0 -12
  110. data/lib/wakame/command_queue.rb +0 -135
  111. data/lib/wakame/vm_manipulator.rb +0 -187
@@ -1,187 +0,0 @@
1
-
2
- require 'wakame'
3
-
4
- module Wakame
5
- module VmManipulator
6
- def self.create
7
- Wakame.new_([self.to_s, Wakame.config.vm_environment ].join('::'))
8
- end
9
-
10
- class Base
11
- def start_instance(attr)
12
- end
13
-
14
- def stop_instance(instance_id)
15
- end
16
-
17
- # expected_status : :online, :offline, :failed
18
- def check_status(instance_id, expected_status=:online)
19
- end
20
-
21
- # Expected common keys/attributes when returned.
22
- # local_ipv4 : Internal IP address which is assigned to the VM instance.
23
- # local_hostname : Internal hostname assigned to the VM instance.
24
- def fetch_local_attrs
25
-
26
- end
27
- end
28
-
29
- class StandAlone < Base
30
- INSTANCE_ID='__standalone__'
31
-
32
- def start_instance(attr)
33
- # Nothing to be done
34
- {:instance_id =>INSTANCE_ID}
35
- end
36
-
37
- def stop_instance(instance_id)
38
- # Nothing to be done
39
- end
40
-
41
- def check_status(instance_id, expected_status=:online)
42
- # Always running
43
- expected_status == :online
44
- end
45
-
46
- def self.fetch_local_attrs
47
- attrs = {:instance_id=>INSTANCE_ID, :local_ipv4=>'127.0.0.1', :local_hostname=>'localhost', :ami_id=>'localimage'}
48
- attrs
49
- end
50
- end
51
-
52
- class EC2 < Base
53
-
54
- require 'EC2'
55
-
56
- def initialize()
57
- @ec2 = ::EC2::Base.new(:access_key_id => Wakame.config.aws_access_key, :secret_access_key => Wakame.config.aws_secret_key )
58
- end
59
-
60
- def start_instance(image_id, attr={})
61
- res = @ec2.run_instances(:image_id => image_id,
62
- :availability_zone => attr[:availability_zone],
63
- :group_id => attr[:security_groups],
64
- :instance_type => attr[:instance_type],
65
- :user_data => attr[:user_data]
66
- )
67
- {:instance_id => res.instancesSet.item[0].instanceId}
68
- end
69
-
70
- def stop_instance(instance_id)
71
- @ec2.terminate_instances(:instance_id=>instance_id)
72
- end
73
-
74
- def check_status(instance_id, expected_status=:online)
75
- res = @ec2.describe_instances(:instance_id => instance_id)
76
-
77
- status = res.reservationSet.item[0].instancesSet.item[0].instanceState
78
- # status is returned in a hash structure. i.e. {'name'=>'running', 'code'=>'16' }
79
- Wakame.log.debug("VM (#{instance_id}) status: #{status['name']}")
80
- return case status['name']
81
- when "running"
82
- expected_status == :online
83
- when "terminated"
84
- expected_status == :offline
85
- when "rebooting"
86
- expected_status == :offline
87
- when "starting"
88
- expected_status == :offline
89
- when "pending"
90
- expected_status == :offline
91
- else
92
- raise "Unknown status from AWS: #{status['name']}"
93
- end
94
- end
95
-
96
- def associate_address(instance_id, ip_addr)
97
- res = @ec2.associate_address(:instance_id=>instance_id, :public_ip=>ip_addr)
98
- # {"requestId"=>"000ac66b-4a9c-43be-8176-b1b96ed6d4b7", "return"=>"true", "xmlns"=>"http://ec2.amazonaws.com/doc/2008-12-01/"}
99
- res['return'] == 'true'
100
- end
101
- def disassociate_address(ip_addr)
102
- res = @ec2.disassociate_address(:public_ip=>ip_addr)
103
- # {"requestId"=>"2f38c8bb-4b1a-4df3-9f30-fa17317c89c4", "return"=>"true", "xmlns"=>"http://ec2.amazonaws.com/doc/2008-12-01/"}
104
- res['return'] == 'true'
105
- end
106
-
107
- # volume
108
- def describe_volume(vol_id)
109
- res = @ec2.describe_volumes(:volume_id=>vol_id)
110
- if res['volumeSet']['item'][0]['attachmentSet']
111
- res['volumeSet']['item'][0]['attachmentSet']['item'][0]
112
- else
113
- res['volumeSet']['item'][0]
114
- end
115
- end
116
- # >> @ec2.attach_volume(:instance_id => 'i-1fa1cd76', :volume_id => "vol-1f927176", :device=>'/dev/sde')
117
- # => {"attachTime"=>"2009-04-17T05:46:18.000Z", "status"=>"attaching", "device"=>"/dev/sde", "requestId"=>"0fd3797b-b4f9-476b-8cb2-3e7401c6fae2", "instanceId"=>"i-1fa1cd76", "volumeId"=>"vol-1f927176", "xmlns"=>"http://ec2.amazonaws.com/doc/2008-12-01/"}
118
- def attach_volume(instance_id, vol_id, vol_dev)
119
- res = @ec2.attach_volume(:instance_id=>instance_id, :volume_id=>vol_id, :device=>vol_dev)
120
- end
121
- def detach_volume(vol_id)
122
- res = @ec2.detach_volume(:volume_id=>vol_id)
123
- end
124
-
125
- # volume
126
- # >> @ec2.describe_volumes(:volume_id => "vol-c58360ac")
127
- # => {"volumeSet"=>{"item"=>[{"status"=>"available", "size"=>"1", "snapshotId"=>nil, "availabilityZone"=>"us-east-1a", "attachmentSet"=>nil, "createTime"=>"2009-04-16T09:56:01.000Z", "volumeId"=>"vol-c58360ac"}]}, "requestId"=>"0e6d0923-eba8-425a-b939-87c7fe8e835e", "xmlns"=>"http://ec2.amazonaws.com/doc/2008-12-01/"}
128
- def describe_volume(vol_id)
129
- res = @ec2.describe_volumes(:volume_id=>vol_id)
130
- res['volumeSet']['item'][0]
131
- end
132
- def create_volume(availability_zone, size)
133
- res = @ec2.create_volume(:availability_zone=>availability_zone, :size=>size)
134
- end
135
- # >> @ec2.create_volume(:availability_zone=>"us-east-1b", :snapshot_id=>"snap-27c1324e")
136
- # => {"status"=>"creating", "size"=>"1", "snapshotId"=>"snap-27c1324e", "requestId"=>"f3a0ddbf-9eb8-4594-b43e-8486459a0168", "availabilityZone"=>"us-east-1b", "createTime"=>"2009-04-17T05:44:58.000Z", "volumeId"=>"vol-1f927176", "xmlns"=>"http://ec2.amazonaws.com/doc/2008-12-01/"}
137
- def create_volume_from_snapshot(availability_zone, snapshot_id)
138
- res = @ec2.create_volume(:availability_zone=>availability_zone, :snapshot_id=>snapshot_id)
139
- end
140
- def delete_volume(vol_id)
141
- res = @ec2.delete_volume(:volume_id=>vol_id)
142
- end
143
-
144
- # snapshot
145
- def describe_snapshot(snapshot_id)
146
- res = @ec2.describe_snapshots(:snapshot_id=>snapshot_id)
147
- res['snapshotSet']['item'][0]
148
- end
149
-
150
- # >> @ec2.create_snapshot(:volume_id => 'vol-c58360ac')
151
- # => {"status"=>"pending", "snapshotId"=>"snap-18c13271", "requestId"=>"9d1d586a-44b7-4edd-b94a-aaccb54e888d", "progress"=>nil, "startTime"=>"2009-04-16T10:13:37.000Z", "volumeId"=>"vol-c58360ac", "xmlns"=>"http://ec2.amazonaws.com/doc/2008-12-01/"}
152
- def create_snapshot(vol_id)
153
- res = @ec2.create_snapshot(:volume_id=>vol_id)
154
- end
155
- def delete_snapshot(snapshot_id)
156
- res = @ec2.delete_snapshot(:snapshot_id=>snapshot_id)
157
- end
158
-
159
- module MetadataService
160
- def query_metadata_uri(key)
161
- require 'open-uri'
162
- open("http://169.254.169.254/2008-02-01/meta-data/#{key}") { |f|
163
- return f.readline
164
- }
165
- end
166
- module_function :query_metadata_uri
167
- public :query_metadata_uri
168
-
169
- def fetch_local_attrs
170
- attrs = {}
171
- %w[instance-id instance-type local-ipv4 local-hostname public-hostname public-ipv4 ami-id].each { |key|
172
- rkey = key.tr('-', '_')
173
- attrs[rkey.to_sym]=query_metadata_uri(key)
174
- }
175
- attrs[:availability_zone] = query_metadata_uri('placement/availability-zone')
176
- attrs
177
- end
178
- module_function :fetch_local_attrs
179
- public :fetch_local_attrs
180
-
181
- end
182
-
183
- include MetadataService
184
- end
185
-
186
- end
187
- end