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,58 @@
1
+ module Mccloud::Provider
2
+ module Aws
3
+ module ProviderCommand
4
+
5
+ def status(selection=nil,options=nil)
6
+
7
+ env.ui.info ""
8
+ env.ui.info "Server(s) - provider #{@name}"
9
+
10
+ printf "%-10s %-12s %-20s %-15s %-8s\n", "Name", "Instance Id", "IP", "Type","Status"
11
+ 80.times { |i| printf "=" } ; env.ui.info ""
12
+
13
+ # List servers
14
+ raw.servers.each do |vm|
15
+ name="<no name set>"
16
+ if !vm.tags["Name"].nil?
17
+ name=vm.tags["Name"].strip
18
+ end #end if
19
+
20
+ if name.start_with?(self.filter)
21
+ unless self.filter==""
22
+ name[self.filter]=""
23
+ printf "%-10s %-12s %-20s %-20s %-15s %-8s\n",name,vm.id, vm.public_ip_address, vm.private_ip_address,vm.flavor.name,vm.state
24
+ else
25
+ env.ui.info "Name: #{name}"
26
+ env.ui.info "Instance Id: #{vm.id}"
27
+ env.ui.info "Public Ip: #{vm.public_ip_address}"
28
+ env.ui.info "Flavor: #{vm.flavor.name}"
29
+ env.ui.info "State: #{vm.state}"
30
+ 80.times { |i| printf "=" } ; env.ui.info ""
31
+ end
32
+ end
33
+ end #End 1 provider
34
+
35
+ # List images
36
+ env.ui.info ""
37
+ env.ui.info "Image(s) - provider #{@name}"
38
+ 80.times { |i| printf "=" } ; env.ui.info ""
39
+ images_list=raw.images.all({"Owner" => "self"})
40
+ images_list.each do |image|
41
+ printf "%-10s %-10s %-10s %-20s\n",image.id,image.name.gsub(/"#{filter}"/,''),image.state, image.description[0..20]
42
+ end
43
+
44
+ # List volumes
45
+ env.ui.info ""
46
+ env.ui.info "Volume(s) - provider #{@name}"
47
+ 80.times { |i| printf "=" } ; env.ui.info ""
48
+ volume_list=raw.volumes.all()
49
+ volume_list.each do |volume|
50
+ printf "%-10s %-10s %-10s %-20s\n",volume.id,volume.device,volume.server_id, volume.size
51
+ end
52
+ env.ui.info ""
53
+
54
+ end
55
+
56
+ end #module
57
+ end #module
58
+ end #module
@@ -0,0 +1,219 @@
1
+ require 'mccloud/provider/fog/provider'
2
+
3
+ require 'mccloud/provider/aws/provider/status'
4
+ require 'mccloud/provider/aws/provider/ip_list'
5
+ require 'mccloud/provider/aws/provider/lb_list'
6
+ require 'mccloud/provider/aws/provider/keystore_list'
7
+ require 'mccloud/provider/aws/provider/keystore_sync'
8
+ require 'mccloud/provider/aws/provider/image_list'
9
+ require 'mccloud/provider/aws/provider/image_destroy'
10
+ require 'mccloud/provider/aws/vm'
11
+ require 'mccloud/provider/aws/lb'
12
+ require 'mccloud/provider/aws/ip'
13
+
14
+ module Mccloud
15
+ module Provider
16
+ module Aws
17
+ class Provider < ::Mccloud::Provider::Fog::Provider
18
+
19
+ attr_accessor :name
20
+ attr_accessor :flavor
21
+
22
+ attr_accessor :options
23
+ attr_accessor :region
24
+
25
+ attr_accessor :vms
26
+ attr_accessor :lbs
27
+ attr_accessor :ips
28
+ attr_accessor :credential
29
+
30
+ attr_accessor :keystores
31
+
32
+ attr_accessor :check_keypairs
33
+ attr_accessor :check_security_groups
34
+
35
+ include Mccloud::Provider::Aws::ProviderCommand
36
+
37
+
38
+ def initialize(name,options,env)
39
+
40
+ super(name,options,env)
41
+
42
+ # Default fog credential pair
43
+ @credential=:default
44
+
45
+ @check_security_groups=true
46
+ @check_keypairs=true
47
+
48
+ @options={}
49
+ unless options.nil?
50
+ @options.merge!(options)
51
+ end
52
+ @flavor=self.class.to_s.split("::")[-2]
53
+ @name=name
54
+ @region="us-east-1"
55
+
56
+ # Initializing the components
57
+ @vms=Hash.new
58
+ @lbs=Hash.new
59
+ @ips=Hash.new
60
+ @keystores=Hash.new
61
+
62
+ end
63
+
64
+ def raw
65
+ check_fog_credentials([:aws_access_key_id,:aws_secret_access_key])
66
+ if @raw.nil?
67
+ begin
68
+ @raw=::Fog::Compute.new({:provider => "Aws", :region => @region}.merge(@options))
69
+ rescue ArgumentError => e
70
+ @raw=nil
71
+ raise Mccloud::Error, "Error loading Aws provider : #{e.to_s} #{$!}"
72
+ end
73
+ end
74
+ return @raw
75
+ end
76
+
77
+ def verify
78
+ # We want to check the keyname "mccloud" exists
79
+ #list_keypairs
80
+ #list_flavors
81
+ #list_zones
82
+ #list_securitygroups
83
+ #check port 22 is open
84
+ end
85
+
86
+
87
+ # We should check to see if 22 is enabled for that zone
88
+ #(AWS.security_groups.get("JMETER").ip_permissions[0]["fromPort"]..AWS.security_groups.get("JMETER").ip_permissions[0]["toPort"]) === 22
89
+ # make sure port 22 is open in the first security group
90
+ # security_group = connection.security_groups.get(server.groups.first)
91
+ # authorized = security_group.ip_permissions.detect do |ip_permission|
92
+ # ip_permission['ipRanges'].first && ip_permission['ipRanges'].first['cidrIp'] == '0.0.0.0/0' &&
93
+ # ip_permission['fromPort'] == 22 &&
94
+ # ip_permission['ipProtocol'] == 'tcp' &&
95
+ # ip_permission['toPort'] == 22
96
+ # end
97
+ # unless authorized
98
+ # security_group.authorize_port_range(22..22)
99
+ # end
100
+ def create_sg(name,comment="Securitygroup created by Mccloud")
101
+ env.logger.info "Creating security group #{name}"
102
+ sg=raw.security_groups.new
103
+ sg.name=name
104
+ sg.description=comment
105
+ sg.save
106
+ sg.authorize_port_range(22..22)
107
+ end
108
+
109
+ def list_flavors
110
+ raw.flavors.each do |flavor|
111
+ env.logger.info "#{flavor.name} - #{flavor.id} - #{flavor.cores} cores#{flavor.bits}"
112
+ end
113
+ end
114
+
115
+ def list_zones
116
+ raw.describe_availability_zones.body["availabilityZoneInfo"].each do |region|
117
+ env.logger.info "Zone: #{region['zoneName']} - #{region['regionName']}"
118
+ end
119
+ end
120
+
121
+ def filter
122
+ if @namespace.nil? || @namespace==""
123
+ return ""
124
+ else
125
+ return "#{@namespace}-"
126
+ end
127
+ end
128
+
129
+ def up(selection,options)
130
+ raise ::Mccloud::Error,"#{selection} did not match any defined vms" unless vm_defined?(selection)
131
+ self.verify
132
+ on_selected_components("vm",selection) do |id,vm|
133
+ vm.up(options)
134
+ end
135
+ end
136
+
137
+ def bootstrap(selection,script,options)
138
+ raise ::Mccloud::Error,"#{selection} did not match any defined vms" unless vm_defined?(selection)
139
+ self.verify
140
+ on_selected_components("vm",selection) do |id,vm|
141
+ vm._bootstrap(script,options)
142
+ end
143
+ end
144
+
145
+ def shutdown(selection,options)
146
+ raise ::Mccloud::Error,"#{selection} did not match any defined vms" unless vm_defined?(selection)
147
+ self.verify
148
+ on_selected_components("vm",selection) do |id,vm|
149
+ vm.shutdown(options)
150
+ end
151
+ end
152
+
153
+ def resume(selection,options)
154
+ raise ::Mccloud::Error,"#{selection} did not match any defined vms" unless vm_defined?(selection)
155
+ self.verify
156
+ on_selected_components("vm",selection) do |id,vm|
157
+ vm.resume(options)
158
+ end
159
+ end
160
+
161
+ def reload(selection,options)
162
+ raise ::Mccloud::Error,"#{selection} did not match any defined vms" unless vm_defined?(selection)
163
+ self.verify
164
+ on_selected_components("vm",selection) do |id,vm|
165
+ vm.reload(options)
166
+ end
167
+ end
168
+
169
+ def destroy(selection,options)
170
+ raise ::Mccloud::Error,"#{selection} did not match any defined vms" unless vm_defined?(selection)
171
+ self.verify
172
+ on_selected_components("vm",selection) do |id,vm|
173
+ vm.destroy(options)
174
+ end
175
+
176
+ end
177
+
178
+ def ssh(selection,command,options)
179
+ raise ::Mccloud::Error,"#{selection} did not match any defined vms" unless vm_defined?(selection)
180
+ self.verify
181
+ on_selected_components("vm",selection) do |id,vm|
182
+ vm.ssh(command,options)
183
+ end
184
+ end
185
+
186
+ def vm_defined?(selection)
187
+ env.config.vms.keys.include?(selection)
188
+ end
189
+
190
+ def package(selection,options)
191
+ raise ::Mccloud::Error,"#{selection} did not match any defined vms" unless vm_defined?(selection)
192
+ self.verify
193
+ on_selected_components("vm",selection) do |id,vm|
194
+ vm.package(options)
195
+ end
196
+ end
197
+
198
+ def provision(selection,options)
199
+ raise ::Mccloud::Error,"#{selection} did not match any defined vms" unless vm_defined?(selection)
200
+ self.verify
201
+ on_selected_components("vm",selection) do |id,vm|
202
+ vm._provision(options)
203
+ end
204
+ end
205
+
206
+ def halt(selection,options)
207
+ raise ::Mccloud::Error,"#{selection} did not match any defined vms" unless vm_defined?(selection)
208
+ self.verify
209
+ on_selected_components("vm",selection) do |id,vm|
210
+ env.ui.info "Matched #{vm.name}"
211
+ vm.halt(options)
212
+ end
213
+
214
+ end
215
+
216
+ end
217
+ end
218
+ end
219
+ end
@@ -0,0 +1,43 @@
1
+ require 'mccloud/util/iterator'
2
+
3
+ module Mccloud
4
+ module Command
5
+ def destroy(selection=nil,options=nil)
6
+
7
+ on_selected_stacks(selection) do |id,stack|
8
+ stackfilter=@environment.config.mccloud.stackfilter
9
+ stack_fullname="#{stackfilter}#{stack.name}"
10
+
11
+ stack_exists=false
12
+ provider=@environment.config.providers[stack.provider]
13
+ cf = Fog::AWS::CloudFormation.new(stack.provider_options)
14
+
15
+ begin
16
+ cf.get_template("#{stack_fullname}")
17
+ stack_exists=true
18
+ rescue Exception => e
19
+ #puts "[#{stack.name}] - Error\n #{e}"
20
+ end
21
+
22
+ if stack_exists
23
+ begin
24
+ puts "[#{stack.name}] - Deleting stack"
25
+ cf.delete_stack(stack_fullname)
26
+ events=cf.describe_stack_events(stack_fullname).body
27
+ sorted_events=events['StackEvents']
28
+ sorted_events.reverse.each do |event|
29
+ printf " %-25s %-30s %-30s %-20s %-15s\n", event['Timestamp'],event['ResourceType'],event['LogicalResourceId'], event['ResourceStatus'],event['ResourceStatusReason']
30
+ end
31
+ rescue Excon::Errors::BadRequest => e
32
+ puts "[#{stack.name}] - Error deleting the stacks:\n #{e.response.body}"
33
+ end
34
+ else
35
+ puts "[#{stack.name}] - Stack does not exist"
36
+ end
37
+
38
+
39
+ end
40
+
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,59 @@
1
+ filter=@environment.config.mccloud.stackfilter
2
+
3
+ # http://allanfeid.com/content/using-amazons-cloudformation-cloud-init-chef-and-fog-automate-infrastructure
4
+ on_selected_stacks(selection) do |id,stack|
5
+ stack_fullname="#{filter}#{stack.name}"
6
+ stack_params=stack.params
7
+ template_body=stack.json_rewrite
8
+
9
+ provider=@environment.config.providers[stack.provider]
10
+ unless (stack.exists?)
11
+ cf = Fog::AWS::CloudFormation.new(stack.provider_options)
12
+
13
+ begin
14
+ cf.validate_template({'TemplateBody' => template_body})
15
+ rescue Excon::Errors::BadRequest => e
16
+ puts "[#{stack.name}] - Error validating template #{stack.jsonfile}:\n #{e.response.body}"
17
+ end
18
+
19
+ template_exists=false
20
+ begin
21
+ cf.get_template("#{stack_fullname}")
22
+ template_exists=true
23
+ rescue Excon::Errors::BadRequest => e
24
+ # puts "[#{stack.name}] - Error getting the remote template:\n #{e.response.body}"
25
+ end
26
+
27
+ unless template_exists
28
+ #DisableRollback, TemplateURL, TimeoutInMinutes
29
+ begin
30
+ cf.create_stack(stack_fullname, {'TemplateBody' => template_body, 'Parameters' => stack_params})
31
+ puts "[#{stack.name}] - Stack creation started"
32
+ rescue Excon::Errors::BadRequest => e
33
+ puts "[#{stack.name}] - Error creating the stack:\n #{e.response.body}"
34
+ end
35
+
36
+ begin
37
+ events=cf.describe_stack_events(stack_fullname).body
38
+ sorted_events=events['StackEvents']
39
+ sorted_events.reverse.each do |event|
40
+ printf " %-25s %-30s %-30s %-20s %-15s\n", event['Timestamp'],event['ResourceType'],event['LogicalResourceId'], event['ResourceStatus'],event['ResourceStatusReason']
41
+ end
42
+ rescue Excon::Errors::BadRequest => e
43
+ puts "[#{stack.name}] - Error fetching stack events:\n #{e.response.body}"
44
+ end
45
+
46
+ else
47
+ puts "[#{stack.name}] - Already exists"
48
+
49
+ events=cf.describe_stack_events(stack_fullname).body
50
+ sorted_events=events['StackEvents']
51
+ sorted_events.reverse.each do |event|
52
+ printf " %-25s %-30s %-30s %-20s %-15s\n", event['Timestamp'],event['ResourceType'],event['LogicalResourceId'], event['ResourceStatus'],event['ResourceStatusReason']
53
+ end
54
+ end
55
+
56
+ end
57
+
58
+ end
59
+
@@ -0,0 +1,98 @@
1
+ require 'mccloud/provider/core/vm'
2
+
3
+ require 'mccloud/provider/aws/vm/up.rb'
4
+ require 'mccloud/provider/aws/vm/bootstrap.rb'
5
+ require 'mccloud/provider/aws/vm/ssh.rb'
6
+ require 'mccloud/provider/aws/vm/scp.rb'
7
+ require 'mccloud/provider/aws/vm/rsync.rb'
8
+ ##require 'mccloud/provider/aws/command/vm/halt.rb'
9
+ require 'mccloud/provider/aws/vm/provision.rb'
10
+ require 'mccloud/provider/aws/vm/destroy.rb'
11
+
12
+
13
+ module Mccloud::Provider
14
+ module Aws
15
+
16
+
17
+ class Vm < ::Mccloud::Provider::Core::Vm
18
+
19
+ attr_accessor :ami
20
+ attr_accessor :key_name
21
+
22
+ # attr_accessor :server_id
23
+
24
+ include Mccloud::Provider::Aws::VmCommand
25
+
26
+ end
27
+ end
28
+ end
29
+
30
+
31
+
32
+ #attr_accessor :instance,:vm,:provider
33
+
34
+ #def initialize(vm,provider)
35
+ # @vm=vm
36
+ # @provider=provider
37
+ # found=@provider.raw_provider.servers.all(:name => @vm.name)
38
+ # unless found.nil?
39
+ # @instance=found.first
40
+ # @instance.private_key_path=@vm.private_key
41
+ # @instance.username = @vm.user
42
+ # end
43
+ #end
44
+
45
+ unless server.state=="terminated"
46
+
47
+ full_name="#{server.tags['Name']}"
48
+ if full_name.start_with?(filter)
49
+
50
+ temp_name=String.new(full_name)
51
+ temp_name[filter]=""
52
+ short_name=temp_name
53
+
54
+ # if the VM was not declared
55
+ unless !@environment.config.vms[short_name].nil?
56
+ #puts "#{short_name} - has been not been declared as a vm"
57
+ undeclared_vm=Mccloud::Type::Vm.new
58
+ undeclared_vm.declared=false
59
+ undeclared_vm.server_id=server.id
60
+ @environment.config.vms[short_name]=undeclared_vm
61
+ else
62
+
63
+ end
64
+
65
+ # Set the server.id of the vm
66
+ @environment.config.vms[short_name].server_id=server.id
67
+ @environment.config.vms[short_name].provider=name
68
+
69
+ # Check if the server is part of a stack
70
+ stack_name=server.tags['aws:cloudformation:stack-name']
71
+
72
+ unless stack_name.nil?
73
+ filtered_stack_name=stack_name
74
+ filtered_stack_name[stack_filter]=""
75
+ # Lookup stack on our config
76
+ #puts "Note: #{short_name} is part of #{filtered_stack_name} "
77
+
78
+ if @environment.config.stacks.has_key?(filtered_stack_name)
79
+ # If we found it, set the private, public and user appropriatly
80
+
81
+ #puts " [#{short_name}] Adjusting public and private keys for stack"
82
+ @environment.config.vms[short_name].private_key=@environment.config.stacks[filtered_stack_name].private_key_for_instance(short_name)
83
+ @environment.config.vms[short_name].public_key=@environment.config.stacks[filtered_stack_name].public_key_for_instance(short_name)
84
+ @environment.config.vms[short_name].user=@environment.config.stacks[filtered_stack_name].user_for_instance(short_name)
85
+
86
+ else
87
+ puts "Stack #{filtered_stack_name} is not defined "
88
+
89
+ end
90
+
91
+
92
+
93
+ end
94
+
95
+
96
+ end
97
+ end
98
+