mccloud 0.0.13 → 0.0.14

Sign up to get free protection for your applications and to get access to all the features.
Files changed (225) hide show
  1. data/.gitignore +13 -8
  2. data/.rvmrc +2 -0
  3. data/Gemfile +10 -1
  4. data/Guardfile +10 -0
  5. data/README.md +453 -89
  6. data/Rakefile +29 -2
  7. data/bin/mccloud +17 -116
  8. data/bin/mccloud_old +159 -0
  9. data/doc/old-README.md +81 -0
  10. data/lib/mccloud/cli.rb +55 -0
  11. data/lib/mccloud/command/balance.rb +21 -0
  12. data/lib/mccloud/command/base.rb +106 -0
  13. data/lib/mccloud/command/bootstrap.rb +12 -24
  14. data/lib/mccloud/command/define.rb +18 -0
  15. data/lib/mccloud/command/destroy.rb +12 -13
  16. data/lib/mccloud/command/forward.rb +29 -0
  17. data/lib/mccloud/command/group_base.rb +107 -0
  18. data/lib/mccloud/command/halt.rb +11 -13
  19. data/lib/mccloud/command/helpers.rb +13 -0
  20. data/lib/mccloud/command/image.rb +37 -0
  21. data/lib/mccloud/command/init.rb +8 -504
  22. data/lib/mccloud/command/init_vagrant.rb +14 -0
  23. data/lib/mccloud/command/ip.rb +32 -0
  24. data/lib/mccloud/command/ips.rb +22 -0
  25. data/lib/mccloud/command/keypair.rb +27 -0
  26. data/lib/mccloud/command/keystore.rb +29 -0
  27. data/lib/mccloud/command/lb.rb +38 -0
  28. data/lib/mccloud/command/named_base.rb +14 -0
  29. data/lib/mccloud/command/package.rb +17 -0
  30. data/lib/mccloud/command/provider.rb +30 -0
  31. data/lib/mccloud/command/provision.rb +10 -24
  32. data/lib/mccloud/command/reload.rb +12 -6
  33. data/lib/mccloud/command/sorry.rb +20 -0
  34. data/lib/mccloud/command/ssh.rb +11 -45
  35. data/lib/mccloud/command/status.rb +14 -35
  36. data/lib/mccloud/command/template.rb +16 -0
  37. data/lib/mccloud/command/undefine.rb +23 -0
  38. data/lib/mccloud/command/up.rb +8 -62
  39. data/lib/mccloud/command/version.rb +14 -0
  40. data/lib/mccloud/command/vm.rb +27 -0
  41. data/lib/mccloud/command.rb +36 -0
  42. data/lib/mccloud/config/collection.rb +107 -0
  43. data/lib/mccloud/config/component.rb +20 -0
  44. data/lib/mccloud/config/definition.rb +35 -0
  45. data/lib/mccloud/config/keypair.rb +36 -0
  46. data/lib/mccloud/config/mccloud.rb +39 -0
  47. data/lib/mccloud/config/provider.rb +55 -0
  48. data/lib/mccloud/config/template.rb +35 -0
  49. data/lib/mccloud/config.rb +128 -41
  50. data/lib/mccloud/definition.rb +104 -0
  51. data/lib/mccloud/definitions.rb +91 -0
  52. data/lib/mccloud/environment.rb +222 -0
  53. data/lib/mccloud/error.rb +20 -0
  54. data/lib/mccloud/generator.rb +49 -0
  55. data/lib/mccloud/keypair.rb +48 -0
  56. data/lib/mccloud/mccloudfile.rb +78 -0
  57. data/lib/mccloud/provider/aws/image.rb +107 -0
  58. data/lib/mccloud/provider/aws/ip/associate.rb +33 -0
  59. data/lib/mccloud/provider/aws/ip.rb +31 -0
  60. data/lib/mccloud/provider/aws/keystore.rb +21 -0
  61. data/lib/mccloud/provider/aws/lb/associate.rb +53 -0
  62. data/lib/mccloud/provider/aws/lb/sorry.rb +14 -0
  63. data/lib/mccloud/provider/aws/lb.rb +37 -0
  64. data/lib/mccloud/provider/aws/provider/image_destroy.rb +27 -0
  65. data/lib/mccloud/provider/aws/provider/image_list.rb +19 -0
  66. data/lib/mccloud/provider/aws/provider/ip_list.rb +17 -0
  67. data/lib/mccloud/provider/aws/provider/keystore_list.rb +22 -0
  68. data/lib/mccloud/provider/aws/provider/keystore_sync.rb +62 -0
  69. data/lib/mccloud/provider/aws/provider/lb_list.rb +21 -0
  70. data/lib/mccloud/provider/aws/provider/old_deregister.rb +39 -0
  71. data/lib/mccloud/provider/aws/provider/old_flavors.rb +18 -0
  72. data/lib/mccloud/provider/aws/provider/old_ips.rb +42 -0
  73. data/lib/mccloud/provider/aws/provider/old_loadbalance.rb +46 -0
  74. data/lib/mccloud/provider/aws/provider/old_package.rb +75 -0
  75. data/lib/mccloud/provider/aws/provider/old_sorry.rb +51 -0
  76. data/lib/mccloud/provider/aws/provider/old_status.rb +119 -0
  77. data/lib/mccloud/provider/aws/provider/old_validate.rb +51 -0
  78. data/lib/mccloud/provider/aws/provider/status.rb +58 -0
  79. data/lib/mccloud/provider/aws/provider.rb +219 -0
  80. data/lib/mccloud/provider/aws/stack/old_destroy.rb +43 -0
  81. data/lib/mccloud/provider/aws/stack/old_up.rb +59 -0
  82. data/lib/mccloud/provider/aws/stack/old_vm.rb +98 -0
  83. data/lib/mccloud/provider/aws/stack.rb +243 -0
  84. data/lib/mccloud/provider/aws/vm/bootstrap.rb +13 -0
  85. data/lib/mccloud/provider/aws/vm/destroy.rb +21 -0
  86. data/lib/mccloud/provider/aws/vm/forward.rb +17 -0
  87. data/lib/mccloud/provider/aws/vm/halt.rb +24 -0
  88. data/lib/mccloud/provider/aws/vm/package.rb +63 -0
  89. data/lib/mccloud/provider/aws/vm/provision.rb +25 -0
  90. data/lib/mccloud/provider/aws/vm/reload.rb +13 -0
  91. data/lib/mccloud/provider/aws/vm/resume.rb +0 -0
  92. data/lib/mccloud/provider/aws/vm/rsync.rb +11 -0
  93. data/lib/mccloud/provider/aws/vm/scp.rb +21 -0
  94. data/lib/mccloud/provider/aws/vm/ssh.rb +11 -0
  95. data/lib/mccloud/provider/aws/vm/suspend.rb +0 -0
  96. data/lib/mccloud/provider/aws/vm/up.rb +133 -0
  97. data/lib/mccloud/provider/aws/vm.rb +123 -0
  98. data/lib/mccloud/{type → provider/core}/forwarding.rb +6 -3
  99. data/lib/mccloud/provider/core/ip.rb +24 -0
  100. data/lib/mccloud/provider/core/keystore.rb +23 -0
  101. data/lib/mccloud/provider/core/lb.rb +23 -0
  102. data/lib/mccloud/provider/core/provider.rb +99 -0
  103. data/lib/mccloud/provider/core/vm/old_halt.rb +19 -0
  104. data/lib/mccloud/{generators.rb → provider/core/vm/old_init.rb} +0 -0
  105. data/lib/mccloud/provider/core/vm/old_multi.rb +60 -0
  106. data/lib/mccloud/provider/core/vm/old_reload.rb +11 -0
  107. data/lib/mccloud/{command/server.rb → provider/core/vm/old_server.rb} +2 -2
  108. data/lib/mccloud/provider/core/vm/old_ssh_command.rb +21 -0
  109. data/lib/mccloud/{command/suspend.rb → provider/core/vm/old_suspend.rb} +2 -2
  110. data/lib/mccloud/provider/core/vm/old_wizard.rb +511 -0
  111. data/lib/mccloud/provider/core/vm/rsync.rb +67 -0
  112. data/lib/mccloud/provider/core/vm/ssh.rb +137 -0
  113. data/lib/mccloud/provider/core/vm/ssh_bootstrap.rb +62 -0
  114. data/lib/mccloud/provider/core/vm/ssh_forward.rb +47 -0
  115. data/lib/mccloud/provider/core/vm.rb +121 -0
  116. data/lib/mccloud/provider/fog/fogconfig.rb +44 -0
  117. data/lib/mccloud/provider/fog/provider.rb +46 -0
  118. data/lib/mccloud/provider/host/provider/status.rb +12 -0
  119. data/lib/mccloud/provider/host/provider.rb +85 -0
  120. data/lib/mccloud/provider/host/vm/bootstrap.rb +11 -0
  121. data/lib/mccloud/provider/host/vm/forward.rb +12 -0
  122. data/lib/mccloud/provider/host/vm/provision.rb +19 -0
  123. data/lib/mccloud/provider/host/vm/scp.rb +35 -0
  124. data/lib/mccloud/provider/host/vm/ssh.rb +11 -0
  125. data/lib/mccloud/provider/host/vm.rb +28 -0
  126. data/lib/mccloud/provider/libvirt/provider/status.rb +43 -0
  127. data/lib/mccloud/provider/libvirt/provider.rb +96 -0
  128. data/lib/mccloud/provider/libvirt/vm/bootstrap.rb +17 -0
  129. data/lib/mccloud/provider/libvirt/vm/destroy.rb +33 -0
  130. data/lib/mccloud/provider/libvirt/vm/forward.rb +12 -0
  131. data/lib/mccloud/provider/libvirt/vm/halt.rb +20 -0
  132. data/lib/mccloud/provider/libvirt/vm/provision.rb +25 -0
  133. data/lib/mccloud/provider/libvirt/vm/reload.rb +13 -0
  134. data/lib/mccloud/provider/libvirt/vm/rsync.rb +11 -0
  135. data/lib/mccloud/provider/libvirt/vm/scp.rb +15 -0
  136. data/lib/mccloud/provider/libvirt/vm/ssh.rb +11 -0
  137. data/lib/mccloud/provider/libvirt/vm/up.rb +65 -0
  138. data/lib/mccloud/provider/libvirt/vm.rb +67 -0
  139. data/lib/mccloud/provider/script/provider/status.rb +12 -0
  140. data/lib/mccloud/provider/script/provider.rb +125 -0
  141. data/lib/mccloud/provider/script/vm.rb +13 -0
  142. data/lib/mccloud/provider/vagrant/provider/status.rb +14 -0
  143. data/lib/mccloud/provider/vagrant/provider.rb +135 -0
  144. data/lib/mccloud/provider/vagrant/vm/destroy.rb +11 -0
  145. data/lib/mccloud/provider/vagrant/vm/forward.rb +12 -0
  146. data/lib/mccloud/provider/vagrant/vm/halt.rb +11 -0
  147. data/lib/mccloud/provider/vagrant/vm/provision.rb +11 -0
  148. data/lib/mccloud/provider/vagrant/vm/reload.rb +11 -0
  149. data/lib/mccloud/provider/vagrant/vm/resume.rb +11 -0
  150. data/lib/mccloud/provider/vagrant/vm/ssh.rb +11 -0
  151. data/lib/mccloud/provider/vagrant/vm/suspend.rb +11 -0
  152. data/lib/mccloud/provider/vagrant/vm/up.rb +11 -0
  153. data/lib/mccloud/provider/vagrant/vm.rb +46 -0
  154. data/lib/mccloud/provider/vmfusion/provider/status.rb +24 -0
  155. data/lib/mccloud/provider/vmfusion/provider.rb +98 -0
  156. data/lib/mccloud/provider/vmfusion/vm/forward.rb +12 -0
  157. data/lib/mccloud/provider/vmfusion/vm/halt.rb +11 -0
  158. data/lib/mccloud/provider/vmfusion/vm/resume.rb +11 -0
  159. data/lib/mccloud/provider/vmfusion/vm/suspend.rb +11 -0
  160. data/lib/mccloud/provider/vmfusion/vm/up.rb +11 -0
  161. data/lib/mccloud/provider/vmfusion/vm.rb +47 -0
  162. data/lib/mccloud/provisioner/chef_solo.rb +193 -79
  163. data/lib/mccloud/provisioner/puppet.rb +205 -32
  164. data/lib/mccloud/provisioner/shell.rb +48 -0
  165. data/lib/mccloud/template.rb +74 -0
  166. data/lib/mccloud/templates/Mccloudfile.erb +212 -39
  167. data/lib/mccloud/templates/{bootstrap-centos-rubysource-1.8.7.sh → bootstrap/bootstrap-centos-rubysource-1.8.7.sh} +0 -0
  168. data/lib/mccloud/templates/{bootstrap-centos-rvm-1.8.7.sh → bootstrap/bootstrap-centos-rvm-1.8.7.sh} +0 -0
  169. data/lib/mccloud/templates/{bootstrap-centos-rvm-1.9.2.sh → bootstrap/bootstrap-centos-rvm-1.9.2.sh} +0 -0
  170. data/lib/mccloud/templates/{bootstrap-centos-rvm-ree-1.8.7.sh → bootstrap/bootstrap-centos-rvm-ree-1.8.7.sh} +0 -0
  171. data/lib/mccloud/templates/bootstrap/bootstrap-chef-omnibus.sh +8 -0
  172. data/lib/mccloud/templates/{bootstrap-custom.sh → bootstrap/bootstrap-custom.sh} +0 -0
  173. data/lib/mccloud/templates/{bootstrap-ubuntu-rvm-1.8.7.sh → bootstrap/bootstrap-ubuntu-rvm-1.8.7.sh} +0 -0
  174. data/lib/mccloud/templates/{bootstrap-ubuntu-system.sh → bootstrap/bootstrap-ubuntu-system.sh} +0 -0
  175. data/lib/mccloud/templates/locales/en.yml +30 -0
  176. data/lib/mccloud/templates/vm.erb +9 -0
  177. data/lib/mccloud/templates.rb +35 -0
  178. data/lib/mccloud/ui.rb +82 -0
  179. data/lib/mccloud/util/rostruct.rb +24 -0
  180. data/lib/mccloud/util/rsync.rb +12 -8
  181. data/lib/mccloud/util/ssh.rb +18 -12
  182. data/lib/mccloud/util/sshkey.rb +3 -2
  183. data/lib/mccloud/version.rb +4 -1
  184. data/lib/mccloud/vm.rb +62 -0
  185. data/lib/mccloud/vms.rb +60 -0
  186. data/lib/mccloud.rb +24 -1
  187. data/mccloud.gemspec +12 -3
  188. data/samples/Mccloudfile +117 -0
  189. data/samples/bitnami_drupal_cloud.json +102 -0
  190. data/samples/bootstrap-ubuntu-system.sh +16 -0
  191. data/samples/mcollective_cloud.json +198 -0
  192. data/samples/stack_cloud.json +93 -0
  193. data/samples/stacks.txt +5 -0
  194. data/spec/commands/define_spec.rb +96 -0
  195. data/spec/commands/init_spec.rb +30 -0
  196. data/spec/environment/environment_spec.rb +26 -0
  197. data/spec/generator_spec.rb +30 -0
  198. data/spec/keypair_spec.rb +38 -0
  199. data/spec/provider/aws/credentials_spec.rb +37 -0
  200. data/spec/provisioner/puppet/Mccloud-puppet-test +32 -0
  201. data/spec/provisioner/puppet/puppet_spec.rb +110 -0
  202. data/spec/spec_helper.rb +0 -0
  203. data/templates/ubuntu-10.10-server-amd64/aws.json +3 -0
  204. data/templates/ubuntu-10.10-server-amd64/bootstrap.sh +16 -0
  205. data/templates/ubuntu-10.10-server-amd64/definition.old +51 -0
  206. data/templates/ubuntu-10.10-server-amd64/mccloud.erb +6 -0
  207. metadata +293 -67
  208. data/Gemfile.lock +0 -53
  209. data/lib/mccloud/command/boot.rb +0 -12
  210. data/lib/mccloud/command/command.rb +0 -21
  211. data/lib/mccloud/command/multi.rb +0 -60
  212. data/lib/mccloud/configurator/lb.rb +0 -26
  213. data/lib/mccloud/configurator/mccloud.rb +0 -33
  214. data/lib/mccloud/configurator/vm.rb +0 -37
  215. data/lib/mccloud/provisioner/vagrant/base.rb +0 -63
  216. data/lib/mccloud/provisioner/vagrant/chef.rb +0 -130
  217. data/lib/mccloud/provisioner/vagrant/chef_server.rb +0 -103
  218. data/lib/mccloud/provisioner/vagrant/chef_solo.rb +0 -142
  219. data/lib/mccloud/provisioner/vagrant/puppet.rb +0 -137
  220. data/lib/mccloud/provisioner/vagrant/puppet_server.rb +0 -55
  221. data/lib/mccloud/provisioner/vagrant/shell.rb +0 -52
  222. data/lib/mccloud/session.rb +0 -206
  223. data/lib/mccloud/type/lb.rb +0 -34
  224. data/lib/mccloud/type/vm.rb +0 -47
  225. data/lib/mccloud/util/iterator.rb +0 -20
@@ -0,0 +1,243 @@
1
+ require 'open-uri'
2
+ require 'json'
3
+
4
+ module Mccloud
5
+ module Provider
6
+ module Core
7
+
8
+ class Stack
9
+ attr_accessor :name
10
+ attr_accessor :params
11
+ attr_accessor :provider
12
+ attr_accessor :provider_options
13
+ attr_accessor :create_options
14
+ attr_accessor :jsonfile
15
+ attr_accessor :instance
16
+ attr_accessor :rewrite_names
17
+
18
+ attr_accessor :user
19
+ attr_accessor :private_key
20
+ attr_accessor :public_key
21
+ attr_accessor :key_name
22
+ attr_accessor :userdata_file
23
+
24
+
25
+ def initialize(env)
26
+ super(env)
27
+ # @forwardings=Array.new
28
+ @rewrite_names=true
29
+ @user=Hash.new
30
+ @private_key=Hash.new
31
+ @public_key=Hash.new
32
+ @userdata_file=Hash.new
33
+ @key_name=Hash.new
34
+ @provider_options={:region => "us-east-1"}
35
+ end
36
+
37
+ def private_key_for_instance(machinename)
38
+ default_private_key=private_key[:default]
39
+ if private_key[machinename].nil?
40
+ return default_private_key
41
+ else
42
+ return private_key[machinename]
43
+ end
44
+ end
45
+
46
+ def public_key_for_instance(machinename)
47
+ default_public_key=public_key[:default]
48
+ if public_key[machinename].nil?
49
+ return default_public_key
50
+ else
51
+ return public_key[machinename]
52
+ end
53
+ end
54
+
55
+ def user_for_instance(machinename)
56
+ default_user=user[:default]
57
+ if user[machinename].nil?
58
+ return default_user
59
+ else
60
+ return user[machinename]
61
+ end
62
+ end
63
+
64
+ def key_name_for_instance(machinename)
65
+ default_key_name=key_name[:default]
66
+ if key_name[machinename].nil?
67
+ return default_key_name
68
+ else
69
+ return key_name[machinename]
70
+ end
71
+ end
72
+
73
+ def userdata_file_for_instance(machinename)
74
+ default_userdata_file=userdata_file[:default]
75
+ if userdata_file[machinename].nil?
76
+ return default_userdata_file
77
+ else
78
+ return userdata_file[machinename]
79
+ end
80
+ end
81
+
82
+ def instance
83
+ # if @this_instance.nil?
84
+ # begin
85
+ # @this_instance=Mccloud.environment.config.providers[provider].servers.get(Mccloud.environment.all_servers[name.to_s])
86
+ # rescue Fog::Service::Error => e
87
+ # env.ui.info "Error: #{e.message}"
88
+ # env.ui.info "We could not request the information from your provider #{provider}. We suggest you check your credentials."
89
+ # env.ui.info "Check configuration file: #{File.join(ENV['HOME'],".fog")}"
90
+ # exit -1
91
+ # end
92
+ # end
93
+ # return @this_instance
94
+ end
95
+
96
+ def json_rewrite
97
+ hash=self.json_to_hash
98
+ unknown_counter=1
99
+ # First rewrite the Name Tags
100
+ hash["Resources"].each do |name,resource|
101
+
102
+ if resource["Type"]=="AWS::EC2::Instance"
103
+ foundName=false
104
+ foundKeyName=false
105
+ instance_name=""
106
+
107
+ rewrittenTags=Array.new
108
+
109
+ # Loop over each hash
110
+ hash["Resources"][name]["Properties"]["Tags"].each do |tag_hash|
111
+
112
+ new_tag_hash=tag_hash
113
+
114
+ # If we found the Name tag rewrite it
115
+ if tag_hash["Key"]="Name"
116
+ # Need to rewrite name
117
+ new_tag_hash={"Value"=>"#{Mccloud.environment.config.mccloud.filter}#{tag_hash["Value"]}", "Key"=>"Name"}
118
+ instance_name="#{tag_hash["Value"]}"
119
+ foundName=true
120
+ end
121
+
122
+ #if tag_hash["Key"]="KeyName"
123
+ # foundKeyName=true
124
+ #end
125
+
126
+ rewrittenTags << new_tag_hash
127
+
128
+ end #Hash Tags iteration
129
+ unless foundName
130
+ rewrittenTags << {"Value"=>"#{Mccloud.environment.config.mccloud.filter}noname-#{unkown_counter}", "Key"=>"Name"}
131
+ instance_name="noname-#{unkown_counter}"
132
+ unknown_counter=unknown_counter+1
133
+ end
134
+
135
+ hash["Resources"][name]["Properties"]["Tags"]=rewrittenTags
136
+
137
+ unless hash["Resources"][name]["Properties"].has_key?("UserData")
138
+ env.ui.info "merging in Userdata file for server #{instance_name} - #{self.userdata_file_for_instance(instance_name)}"
139
+ userdata=json_escape_file(self.userdata_file_for_instance(instance_name))
140
+ hash["Resources"][name]["Properties"]["UserData"]={ "Fn::Base64" => "#{userdata}" }
141
+ end
142
+
143
+ end #EC2 Instance
144
+ end
145
+
146
+
147
+ return hash.to_json
148
+ end
149
+
150
+ def json_escape_file(filename)
151
+ data=''
152
+ File.open(filename) {|f| data << f.read}
153
+ return self.json_escape(data)
154
+ end
155
+
156
+
157
+
158
+ def json_escape(string)
159
+ parse = JSON.parse({ 'json' => string }.to_json)
160
+ return parse['json']
161
+ end
162
+
163
+
164
+ def json
165
+ begin
166
+ json=open(@jsonfile) {|f| f.read }
167
+ hash=JSON.parse(json)
168
+ rescue Errno::ENOENT => e
169
+ env.ui.info "Error getting json file - #{e.message}"
170
+ exit
171
+ rescue JSON::ParserError => e
172
+ env.ui.info "Error parsing json file - #{e.message}"
173
+ exit
174
+ end
175
+ return json
176
+ end
177
+
178
+ def exists?
179
+ false
180
+ end
181
+
182
+ def json_to_hash
183
+ hash=nil
184
+ begin
185
+ hash=JSON.parse(self.json)
186
+ rescue JSON::ParserError => e
187
+ env.ui.info "Error parsing json file - #{e.message}"
188
+ exit
189
+ end
190
+ return hash
191
+ end
192
+
193
+ def filtered_instance_names
194
+ fullname_instances=self.instance_names
195
+ short_instances=[]
196
+ filter=Mccloud.environment.config.mccloud.filter
197
+ fullname_instances.each do |instancename|
198
+ if instancename.start_with?(filter)
199
+ short=instancename
200
+ short[filter]=""
201
+ short_instances << short
202
+ end
203
+ end
204
+ return short_instances
205
+ end
206
+
207
+
208
+ def instance_names
209
+ hash=self.json_to_hash
210
+
211
+ instances=[]
212
+ resources=hash["Resources"]
213
+ resources.each do |name,resource|
214
+
215
+ if resource["Type"]=="AWS::EC2::Instance"
216
+
217
+ resources[name]["Properties"]["Tags"].each do |tag|
218
+
219
+ if tag["Key"]=="Name"
220
+ instances << tag["Value"]
221
+ end
222
+ end
223
+ # instances << hash["Resources"][name]["Properties"]["Tags"]
224
+ # hash["Resources"][name]["Properties"]["Tags"]=[{"Value"=>"mccloud - development - patrick - drupalblub", "Key"=>"Name"}]
225
+ else
226
+ # env.ui.info "found something else"
227
+ end
228
+ end
229
+ return instances
230
+ end
231
+
232
+ def reload
233
+ #@this_instance=nil
234
+ end
235
+ def forward_port(name,local,remote)
236
+ #forwarding=Forwarding.new(name,local,remote)
237
+ #forwardings << forwarding
238
+ end
239
+ end
240
+
241
+ end
242
+ end
243
+ end #Module Mccloud
@@ -0,0 +1,13 @@
1
+ require 'mccloud/util/platform'
2
+
3
+ module Mccloud::Provider
4
+ module Aws
5
+ module VmCommand
6
+
7
+ def _bootstrap(command,options=nil)
8
+ ssh_bootstrap(command,options)
9
+ end
10
+
11
+ end #module
12
+ end #Module
13
+ end #module
@@ -0,0 +1,21 @@
1
+ module Mccloud::Provider
2
+ module Aws
3
+ module VmCommand
4
+
5
+ def destroy(options)
6
+
7
+ unless raw.nil? || raw.state == "shutting-down" || raw.state =="terminated"
8
+ env.ui.info "[#{@name}] - Destroying machine (#{raw.id})"
9
+ raw.destroy
10
+
11
+ raw.wait_for { print "."; STDOUT.flush; state=="terminated"}
12
+ env.ui.info ""
13
+ else
14
+ env.ui.info "[#{@name}] - Machine is already terminated #{@raw.id}"
15
+ end
16
+
17
+ end
18
+
19
+ end #module
20
+ end #module
21
+ end #module
@@ -0,0 +1,17 @@
1
+ module Mccloud::Provider
2
+ module Aws
3
+ module VmCommand
4
+
5
+ def forward(command,options={})
6
+ @forward_threads=Array.new
7
+ unless raw.nil?
8
+ return self.ssh_forward(options)
9
+ else
10
+ env.ui.info "[#{self.name}] not yet created"
11
+ return []
12
+ end
13
+ end
14
+
15
+ end #module
16
+ end #module
17
+ end #module
@@ -0,0 +1,24 @@
1
+ module Mccloud::Provider
2
+ module Aws
3
+ module VmCommand
4
+
5
+ def halt(options)
6
+
7
+ if self.running?
8
+ env.ui.info "Halting machine #{@name}(#{@raw.id})"
9
+ raw.stop
10
+ raw.wait_for { printf "."; STDOUT.flush; state=="stopped"}
11
+ env.ui.info ""
12
+ else
13
+ unless @raw.nil?
14
+ env.ui.info "#{@name}(#{@raw.id}) is already halted."
15
+ else
16
+ env.ui.info "#{@name} is not yet created or was terminated"
17
+ end
18
+ end
19
+
20
+ end
21
+
22
+ end #module
23
+ end #module
24
+ end #module
@@ -0,0 +1,63 @@
1
+ module Mccloud::Provider
2
+ module Aws
3
+ module VmCommand
4
+
5
+ def package(options=nil)
6
+
7
+ #f=Fog::Compute.new({ :region => "eu-west-1", :provider => "AWS"})
8
+ # i=f.create_image("i-c1ac2bb7","name","description")
9
+ # f.images.all({ "Owner" => "self"})
10
+ # f.deregister_image("ami-796d5b0d")
11
+
12
+ time=Time.new
13
+ strtime=time.strftime("%Y-%m-%d-%H-%M-%S")
14
+ name=""
15
+
16
+ if options["name"].nil?
17
+ name="#{@name}-#{strtime}"
18
+ else
19
+ name=options["name"]
20
+ end
21
+
22
+ description=""
23
+ if options["description"].nil?
24
+ description="Autogenerated snapshot from machine #{@name}"
25
+ else
26
+ description=options["description"]
27
+ end
28
+
29
+ begin
30
+ puts raw.id
31
+ result=@provider.raw.create_image(raw.id,name,description)
32
+ imageId=result.body["imageId"]
33
+ env.ui.info "[#{@name}] image #{imageId} with #{description} being created"
34
+ unless options["dontwait"]
35
+ sleep 3
36
+ counter=0
37
+ max_tries=5
38
+ #Pending
39
+ state="pending"
40
+ until state!="pending" do
41
+ print "."
42
+ sleep 2
43
+ image=@provider.raw.images.get(imageId)
44
+
45
+ if image.nil?
46
+ sleep 3
47
+ print "."
48
+ else
49
+ state=image.state
50
+ end
51
+ end
52
+ env.ui.info ""
53
+ env.ui.info "[#{@name}] creation done!"
54
+ end
55
+ rescue Fog::Service::Error => fogerror
56
+ env.ui.error "[Error] #{fogerror}"
57
+
58
+ end
59
+ end
60
+
61
+ end #module
62
+ end #module
63
+ end #module
@@ -0,0 +1,25 @@
1
+ module Mccloud::Provider
2
+ module Aws
3
+ module VmCommand
4
+
5
+ def _provision(options=nil)
6
+ unless raw.nil?
7
+
8
+ if raw.ready?
9
+ self.share
10
+
11
+ @provisioners.each do |provisioner|
12
+ env.ui.info "[#{@name}] - starting provisioning with #{provisioner.name} as provisioner"
13
+ provisioner.run(self)
14
+ end
15
+ else
16
+ raise Mccloud::Error, "[#{@name}] - machine is not running, skipping provisioning"
17
+ end
18
+ else
19
+ raise Mccloud::Error, "[#{@name}] - machine doesn't exit yet"
20
+ end
21
+ end
22
+
23
+ end #module
24
+ end #module
25
+ end #module
@@ -0,0 +1,13 @@
1
+ module Mccloud::Provider
2
+ module Aws
3
+ module VmCommand
4
+ def reload(options)
5
+ env.logger.info "Checking if #{@name} is running: #{self.running?}"
6
+ if self.running?
7
+ self.halt(options)
8
+ end
9
+ self.up(options)
10
+ end
11
+ end
12
+ end
13
+ end
File without changes
@@ -0,0 +1,11 @@
1
+ module Mccloud::Provider
2
+ module Aws
3
+ module VmCommand
4
+
5
+ def rsync(src,dest,options)
6
+ super(src,dest,options)
7
+ end
8
+
9
+ end #module
10
+ end #module
11
+ end #module
@@ -0,0 +1,21 @@
1
+ module Mccloud::Provider
2
+ module Aws
3
+ module VmCommand
4
+
5
+ def transfer(src,dest,options = {})
6
+ scp(src,dest,options)
7
+ end
8
+
9
+ def scp(local_path, remote_path, scp_options = {})
10
+ unless File.exists?(local_path)
11
+ raise Mccloud::Error,"scp failed: #{local_path} does not exist"
12
+ end
13
+ #@raw.scp(src,dest)
14
+ scp_options[:key_data] = [@raw.private_key] if @raw.private_key
15
+
16
+ ::Fog::SCP.new(self.ip_address, @raw.username, scp_options).upload(local_path, remote_path, {})
17
+ end
18
+
19
+ end #module
20
+ end #module
21
+ end #module
@@ -0,0 +1,11 @@
1
+ module Mccloud::Provider
2
+ module Aws
3
+ module VmCommand
4
+
5
+ def ssh(command,options={})
6
+ super(command,options)
7
+ end
8
+
9
+ end #module
10
+ end #module
11
+ end #module
File without changes
@@ -0,0 +1,133 @@
1
+ module Mccloud::Provider
2
+ module Aws
3
+ module VmCommand
4
+
5
+ def security_group_has_ssh_open?(group)
6
+ return false
7
+ end
8
+
9
+ def security_group_exists?(group)
10
+ return !@provider.raw.security_groups.get(group).nil?
11
+ end
12
+
13
+ def security_group_is_managed_by_mccloud?(group)
14
+ return /^mccloud/ =~ group
15
+ end
16
+
17
+ def check_security_groups(groups)
18
+ if @provider.check_security_groups
19
+ # Iterate over all groups
20
+ groups.each do |group|
21
+
22
+ if security_group_exists?(group)
23
+ env.logger.info "security group #{group} exists"
24
+ else
25
+ env.logger.info "security group #{group} does not yet exist"
26
+ if security_group_is_managed_by_mccloud?(group)
27
+ # Managed by mccloud
28
+ env.logger.info "security group #{group} starts with mccloud"
29
+ env.ui.info "Creating security group #{group}"
30
+ @provider.create_sg(group)
31
+ else
32
+ # Not managed by mccloud
33
+ raise Mccloud::Error, "security group #{group} does not exits. And we only managed security groups with prefix mccloud"
34
+ end
35
+ end
36
+
37
+ unless security_group_has_ssh_open?(group)
38
+ end
39
+ end
40
+ end
41
+ end
42
+
43
+ def key_is_managed_by_mccloud?(keyname)
44
+ return /^mccloud/ =~ keyname
45
+ end
46
+
47
+ def check_key(key_name)
48
+ if @provider.check_keypairs
49
+ raw_keypair=@provider.raw.key_pairs.get(key_name)
50
+ if raw_keypair.nil?
51
+ raise Mccloud::Error, "keypair #{key_name} does not exits. And we only managed keys with prefix mccloud"
52
+ raise Mccloud::Error, "keypair #{key_name} does not exist"
53
+ end
54
+ end
55
+ end
56
+
57
+ def up(options={})
58
+
59
+ if raw.nil? || raw.state =="terminated"
60
+
61
+ create_options= {
62
+ :private_key_path => @private_key_path ,
63
+ :public_key_path => @public_key_path,
64
+ :availability_zone => @zone,
65
+ :image_id => @ami,
66
+ :flavor_id => @flavor,
67
+ :key_name => @key_name,
68
+ :user_data => @user_data,
69
+ :groups => @security_groups,
70
+ :tags => {"Name" => "#{@provider.filter}#{@name}"}
71
+ }.merge(@create_options)
72
+
73
+ check_security_groups(create_options[:groups])
74
+ check_key(create_options[:key_name])
75
+
76
+ env.ui.info "Creating new vm #{@name} for provider #{@provider.name}"
77
+ begin
78
+ @raw=@provider.raw.servers.create(create_options)
79
+ rescue ::Fog::Compute::AWS::NotFound => ex
80
+ raise ::Mccloud::Error, "Error creating the new server: #{ex}"
81
+ return
82
+ end
83
+
84
+ env.ui.info "[#{@name}] - Waiting for the machine to become accessible"
85
+ raw.wait_for { printf "."; STDOUT.flush; ready?}
86
+ env.ui.info ""
87
+
88
+ # Wait for ssh to become available ...
89
+ env.ui.info "[#{@name}] - Waiting for ssh port to become available"
90
+
91
+ Mccloud::Util::Ssh.execute_when_tcp_available(self.ip_address, { :port => @port, :timeout => 6000 }) do
92
+ env.ui.info "[#{@name}] - Ssh Port is available"
93
+ end
94
+
95
+ Mccloud::Util::Ssh.when_ssh_login_works(self.ip_address, { :user => @user, :port => @port, :timeout => 6000 ,:keys => [@private_key_path]}) do
96
+ env.ui.info "[#{@name}] - Ssh login works , proceeding with bootstrap"
97
+ end
98
+ # No bootstrap to provide
99
+ self._bootstrap(nil,options)
100
+
101
+ else
102
+ state=raw.state
103
+ if state =="stopped"
104
+ env.ui.info "Booting up machine #{@name}"
105
+ raw.start
106
+ raw.wait_for { printf ".";STDOUT.flush; ready?}
107
+ env.ui.info ""
108
+ else
109
+ unless raw.state == "shutting-down" || raw.state =="terminated"
110
+ env.ui.info "[#{@name}] - already running."
111
+ else
112
+ env.ui.info "[#{@name}] - can't start machine because it is in state #{raw.state}"
113
+ return
114
+ end
115
+ end
116
+ end
117
+
118
+ unless options["noprovision"]
119
+ env.ui.info "[#{@name}] - Waiting for ssh to become available"
120
+ Mccloud::Util::Ssh.execute_when_tcp_available(self.ip_address, { :port => @port, :timeout => 6000 }) do
121
+ env.ui.info "[#{@name}] - Ssh is available , proceeding with provisioning"
122
+ end
123
+
124
+ env.ui.info "[#{@name}] - provision step #{@name}"
125
+ self._provision(options)
126
+ end
127
+
128
+
129
+ end
130
+
131
+ end #module
132
+ end #module
133
+ end #module