wakame 0.5.0 → 0.5.1
Sign up to get free protection for your applications and to get access to all the features.
- data/History.txt +4 -0
- data/LICENSE +202 -0
- data/Rakefile +11 -12
- data/VERSION +1 -1
- data/app_generators/wakame/templates/bin/wakame-agent +1 -1
- data/app_generators/wakame/templates/bin/wakame-master +1 -1
- data/app_generators/wakame/templates/config/cluster.rb +32 -24
- data/app_generators/wakame/templates/config/init.d/centos/wakame-agent +40 -0
- data/app_generators/wakame/templates/config/init.d/centos/wakame-master +40 -0
- data/app_generators/wakame/templates/config/init.d/wakame-master +1 -1
- data/lib/ext/eventmachine.rb +5 -5
- data/lib/wakame.rb +12 -0
- data/lib/wakame/action.rb +10 -11
- data/lib/wakame/actions/deploy_application.rb +61 -0
- data/lib/wakame/actions/deploy_config.rb +1 -3
- data/lib/wakame/actions/freeze_cluster.rb +15 -0
- data/lib/wakame/actions/launch_cluster.rb +1 -3
- data/lib/wakame/actions/launch_vm.rb +1 -1
- data/lib/wakame/actions/migrate_service.rb +4 -3
- data/lib/wakame/actions/notify_child_changed.rb +3 -6
- data/lib/wakame/actions/notify_parent_changed.rb +4 -7
- data/lib/wakame/actions/propagate_resource.rb +1 -3
- data/lib/wakame/actions/propagate_service.rb +1 -3
- data/lib/wakame/actions/register_agent.rb +43 -0
- data/lib/wakame/actions/reload_service.rb +2 -2
- data/lib/wakame/actions/shutdown_cluster.rb +4 -6
- data/lib/wakame/actions/shutdown_vm.rb +27 -6
- data/lib/wakame/actions/start_service.rb +40 -32
- data/lib/wakame/actions/stop_service.rb +8 -10
- data/lib/wakame/actions/unfreeze_cluster.rb +15 -0
- data/lib/wakame/actor.rb +2 -5
- data/lib/wakame/actor/deploy.rb +110 -0
- data/lib/wakame/actor/monitor.rb +14 -0
- data/lib/wakame/actor/s3fs.rb +45 -0
- data/lib/wakame/actor/service_monitor.rb +0 -17
- data/lib/wakame/actor/system.rb +5 -1
- data/lib/wakame/agent.rb +29 -179
- data/lib/wakame/agent_manager.rb +11 -0
- data/lib/wakame/agent_managers/actor_manager.rb +101 -0
- data/lib/wakame/agent_managers/monitor_manager.rb +48 -0
- data/lib/wakame/command.rb +4 -7
- data/lib/wakame/command/actor.rb +9 -12
- data/lib/wakame/command/agent_status.rb +2 -2
- data/lib/wakame/command/control_service.rb +66 -0
- data/lib/wakame/command/deploy_application.rb +18 -0
- data/lib/wakame/command/deploy_config.rb +16 -0
- data/lib/wakame/command/launch_cluster.rb +1 -1
- data/lib/wakame/command/launch_vm.rb +1 -1
- data/lib/wakame/command/propagate_resource.rb +1 -1
- data/lib/wakame/command/propagate_service.rb +5 -3
- data/lib/wakame/command/reload_service.rb +1 -1
- data/lib/wakame/command/shutdown_cluster.rb +1 -1
- data/lib/wakame/command/shutdown_vm.rb +37 -11
- data/lib/wakame/command/start_service.rb +1 -1
- data/lib/wakame/command/status.rb +6 -4
- data/lib/wakame/command/stop_service.rb +1 -1
- data/lib/wakame/configuration.rb +5 -0
- data/lib/wakame/event.rb +85 -33
- data/lib/wakame/event_dispatcher.rb +2 -2
- data/lib/wakame/initializer.rb +97 -31
- data/lib/wakame/master.rb +23 -346
- data/lib/wakame/master_manager.rb +11 -0
- data/lib/wakame/master_managers/action_manager.rb +321 -0
- data/lib/wakame/master_managers/agent_monitor.rb +166 -0
- data/lib/wakame/master_managers/cluster_manager.rb +176 -0
- data/lib/wakame/master_managers/command_queue.rb +133 -0
- data/lib/wakame/models/agent_pool.rb +113 -0
- data/lib/wakame/models/application_repository.rb +34 -0
- data/lib/wakame/models/object_store.rb +32 -0
- data/lib/wakame/models/service_cluster_pool.rb +36 -0
- data/lib/wakame/monitor.rb +3 -6
- data/lib/wakame/monitor/agent.rb +9 -6
- data/lib/wakame/monitor/service.rb +56 -29
- data/lib/wakame/runner/administrator_command.rb +210 -24
- data/lib/wakame/runner/agent.rb +2 -0
- data/lib/wakame/runner/master.rb +2 -1
- data/lib/wakame/service.rb +140 -130
- data/lib/wakame/status_db.rb +101 -121
- data/lib/wakame/util.rb +26 -15
- data/tests/setup_master.rb +1 -0
- data/tests/test_master.rb +0 -2
- data/tests/test_model_agent_pool.rb +21 -0
- data/tests/test_service.rb +14 -8
- data/tests/test_status_db.rb +2 -0
- data/tests/test_util.rb +12 -1
- data/wakame_generators/resource/templates/apache_app/apache_app.rb +20 -11
- data/wakame_generators/resource/templates/apache_app/conf/vh/aaa.test.conf +1 -1
- data/wakame_generators/resource/templates/apache_lb/apache_lb.rb +7 -7
- data/wakame_generators/resource/templates/apache_lb/conf/system-lb.conf +6 -4
- data/wakame_generators/resource/templates/apache_www/apache_www.rb +15 -13
- data/wakame_generators/resource/templates/ec2_elastic_ip/ec2_elastic_ip.rb +17 -17
- data/wakame_generators/resource/templates/ec2_elb/ec2_elb.rb +22 -15
- data/wakame_generators/resource/templates/mongodb/conf/mongodb.conf +95 -0
- data/wakame_generators/resource/templates/mongodb/init.d/mongodb +244 -0
- data/wakame_generators/resource/templates/mongodb/mongodb.rb +64 -0
- data/wakame_generators/resource/templates/mysql_master/mysql_master.rb +17 -21
- data/wakame_generators/resource/templates/nginx/conf/nginx.conf +4 -0
- data/wakame_generators/resource/templates/nginx/conf/vh/ec2_elb_common.conf +19 -0
- data/wakame_generators/resource/templates/nginx/init.d/nginx +6 -0
- data/wakame_generators/resource/templates/nginx/init.d/spawn-fcgi +46 -0
- data/wakame_generators/resource/templates/nginx/nginx.rb +15 -10
- data/wakame_generators/resource/templates/nginx_passenger/conf/nginx-passenger.conf +39 -0
- data/wakame_generators/resource/templates/nginx_passenger/conf/vh/ec2_elb_common.conf +10 -0
- data/wakame_generators/resource/templates/nginx_passenger/init.d/nginx-passenger +70 -0
- data/wakame_generators/resource/templates/nginx_passenger/nginx_passenger.rb +71 -0
- data/wakame_generators/resource/templates/s3fs/s3fs.rb +24 -0
- metadata +195 -74
- data/lib/wakame/action_manager.rb +0 -303
- data/lib/wakame/command/clone_service.rb +0 -12
- data/lib/wakame/command_queue.rb +0 -135
- 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
|