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,43 @@
1
+ module Mccloud::Provider
2
+ module Libvirt
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
+ raw.servers.each do |vm|
14
+ if vm.name.start_with?(self.filter)
15
+ unless self.filter==""
16
+ vm.name[self.filter]=""
17
+ printf "%-10s %-12s %-20s %-20s %-15s %-8s\n",vm.name,vm.mac, vm.public_ip_address, vm.cpus,vm.memory_size,vm.state
18
+ else
19
+ env.ui.info "Name: #{vm.name}"
20
+ env.ui.info "Instance Id: #{vm.uuid}"
21
+ env.ui.info "Public Ip: #{vm.public_ip_address}"
22
+ env.ui.info "Cpus: #{vm.cpus}"
23
+ env.ui.info "State: #{vm.state}"
24
+ 80.times { |i| printf "=" } ; env.ui.info ""
25
+ end
26
+ end
27
+ end
28
+
29
+
30
+ env.ui.info "Volume(s) - provider #{@name}"
31
+ 80.times { |i| printf "=" } ; env.ui.info ""
32
+ volume_list=raw.volumes.all()
33
+ volume_list.each do |volume|
34
+ printf "%-20s: %-10s %-10s \n",volume.name,volume.id,volume.key
35
+ printf "%-20s: %-10s %-20s %-10s\n","",volume.pool_name, volume.path, volume.format_type
36
+ printf "%-20s: %-10s %-10s\n","",volume.capacity,volume.allocation
37
+ end
38
+
39
+ end
40
+
41
+ end #module
42
+ end #module
43
+ end #module
@@ -0,0 +1,96 @@
1
+ require 'mccloud/provider/libvirt/provider/status'
2
+ require 'mccloud/provider/libvirt/vm'
3
+ require 'mccloud/provider/fog/provider'
4
+
5
+ module Mccloud
6
+ module Provider
7
+ module Libvirt
8
+ class Provider < ::Mccloud::Provider::Fog::Provider
9
+
10
+ attr_accessor :name
11
+ attr_accessor :flavor
12
+
13
+ attr_accessor :options
14
+
15
+ attr_accessor :vms
16
+
17
+ include Mccloud::Provider::Libvirt::ProviderCommand
18
+
19
+
20
+ def initialize(name,options,env)
21
+
22
+ super
23
+
24
+ @vms=Hash.new
25
+
26
+ @options=options
27
+ @flavor=self.class.to_s.split("::")[-2]
28
+ @name=name
29
+
30
+ required_gems=%w{ruby-libvirt fog}
31
+ check_gem_availability(required_gems)
32
+ require 'libvirt'
33
+ require 'fog'
34
+ end
35
+
36
+
37
+ def raw
38
+ if @raw.nil?
39
+ begin
40
+ @raw=::Fog::Compute.new({:provider => "Libvirt"}.merge(@options))
41
+ rescue ArgumentError => e
42
+ env.ui.error "Error loading raw provider : #{e.to_s} #{$!}"
43
+ @raw=nil
44
+ end
45
+ end
46
+ return @raw
47
+ end
48
+
49
+ def up(selection,options)
50
+ on_selected_components("vm",selection) do |id,vm|
51
+ vm.up(options)
52
+ end
53
+ end
54
+
55
+ def bootstrap(selection,script,options)
56
+ on_selected_components("vm",selection) do |id,vm|
57
+ vm._bootstrap(script,options)
58
+ end
59
+ end
60
+
61
+ def destroy(selection,options)
62
+ on_selected_components("vm",selection) do |id,vm|
63
+ vm.destroy(options)
64
+ end
65
+ end
66
+
67
+ def ssh(selection,command,options)
68
+ on_selected_components("vm",selection) do |id,vm|
69
+ vm.ssh(command,options)
70
+ end
71
+ end
72
+
73
+
74
+
75
+ def provision(selection,options)
76
+ on_selected_components("vm",selection) do |id,vm|
77
+ vm._provision(options)
78
+ end
79
+ end
80
+
81
+ def halt(selection,options)
82
+ on_selected_components("vm",selection) do |id,vm|
83
+ vm.halt(options)
84
+ end
85
+ end
86
+
87
+ def reload(selection,options)
88
+ on_selected_components("vm",selection) do |id,vm|
89
+ vm.reload(options)
90
+ end
91
+ end
92
+
93
+ end
94
+ end
95
+ end
96
+ end
@@ -0,0 +1,17 @@
1
+ require 'mccloud/util/platform'
2
+
3
+ module Mccloud::Provider
4
+ module Libvirt
5
+ module VmCommand
6
+
7
+ def _bootstrap(command,options=nil)
8
+ if raw.ready?
9
+ env.ui.info "[#{@name}] - Waiting for an ip-address "
10
+ raw.wait_for { printf "."; STDOUT.flush; !public_ip_address.nil? }
11
+ end
12
+ ssh_bootstrap(command,options)
13
+ end
14
+
15
+ end #module
16
+ end #Module
17
+ end #module
@@ -0,0 +1,33 @@
1
+ module Mccloud::Provider
2
+ module Libvirt
3
+ module VmCommand
4
+
5
+ def destroy(options)
6
+ fullname="#{@provider.filter}#{@name}"
7
+ server=@provider.raw.servers.all(:name => fullname)
8
+ volname="#{fullname}.img"
9
+ #TODO use the creation options
10
+ volume=@provider.raw.volumes.all(:name => volname)
11
+
12
+ unless server.nil?
13
+ env.ui.info "[#{@name}] - Destroying machine #{@provider.namespace}::#{@name}"
14
+
15
+ server.first.destroy
16
+ else
17
+ env.ui.info "[#{@name}] - Server #{@provider.namespace}::#{@name} does not exist"
18
+ end
19
+
20
+ unless volume.nil?
21
+ env.ui.info "[#{@name}] - Destroying volume #{@provider.namespace}::#{@name}.img"
22
+
23
+ volume.first.destroy
24
+ else
25
+ env.ui.info "[#{@name}] - Volume #{@provider.namespace}::#{@name}.img does not exist"
26
+
27
+ end
28
+
29
+ end
30
+
31
+ end #module
32
+ end #module
33
+ end #module
@@ -0,0 +1,12 @@
1
+ module Mccloud::Provider
2
+ module Libvirt
3
+ module VmCommand
4
+
5
+ def forward(command,options={})
6
+ @forward_threads=Array.new
7
+ return self.ssh_forward(options)
8
+ end
9
+
10
+ end #module
11
+ end #module
12
+ end #module
@@ -0,0 +1,20 @@
1
+ module Mccloud::Provider
2
+ module Libvirt
3
+ module VmCommand
4
+
5
+ def halt(options)
6
+
7
+ if self.running?
8
+ env.ui.info "Halting machine #{@name}(#{@raw.id})"
9
+ raw.shutdown
10
+ raw.wait_for { printf "."; STDOUT.flush; state=="stopped"||state=="crashed"}
11
+ env.ui.info ""
12
+ else
13
+ env.ui.info "#{@name}(#{raw.id}) is already halted."
14
+ end
15
+
16
+ end
17
+
18
+ end #module
19
+ end #module
20
+ end #module
@@ -0,0 +1,25 @@
1
+ module Mccloud::Provider
2
+ module Libvirt
3
+ module VmCommand
4
+
5
+ def _provision(options)
6
+
7
+ unless raw.nil?
8
+
9
+ if raw.ready?
10
+ @provisioners.each do |provisioner|
11
+ env.ui.info "[#{@name}] - starting provisioning with #{provisioner.name} as provisioner"
12
+ provisioner.run(self)
13
+ end
14
+ else
15
+ env.ui.info "[#{@name}] - machine is not running, skipping provisioning"
16
+ end
17
+ else
18
+ env.ui.info "[#{@name}] - machine doesn't exit yet"
19
+ end
20
+
21
+ end
22
+
23
+ end #module
24
+ end #module
25
+ end #module
@@ -0,0 +1,13 @@
1
+ module Mccloud::Provider
2
+ module Libvirt
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
@@ -0,0 +1,11 @@
1
+ module Mccloud::Provider
2
+ module Libvirt
3
+ module VmCommand
4
+
5
+ def rsync(path,options)
6
+ super(path,options)
7
+ end
8
+
9
+ end #module
10
+ end #module
11
+ end #module
@@ -0,0 +1,15 @@
1
+ module Mccloud::Provider
2
+ module Libvirt
3
+ module VmCommand
4
+
5
+ def transfer(src,dest,options = {})
6
+ scp(src,dest,options)
7
+ end
8
+
9
+ def scp(src,dest, options = {})
10
+ raw.scp(src,dest,options)
11
+ end
12
+
13
+ end #module
14
+ end #module
15
+ end #module
@@ -0,0 +1,11 @@
1
+ module Mccloud::Provider
2
+ module Libvirt
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
@@ -0,0 +1,65 @@
1
+ module Mccloud::Provider
2
+ module Libvirt
3
+ module VmCommand
4
+
5
+ def up(options)
6
+
7
+ env.ui.info "Upping of libvirt vm #{@name}"
8
+
9
+ # There is no existing machine yet, so we create it
10
+ if raw.nil?
11
+ enhanced_create_options=@create_options
12
+ enhanced_create_options[:name]="#{@provider.filter}#{@name}"
13
+ env.ui.info "[#{@name}] - Creating machine #{@provider.namespace}::#{@name}"
14
+ @raw=@provider.raw.servers.create(enhanced_create_options)
15
+ raw.start
16
+
17
+ env.ui.info "[#{@name}] - Waiting for the machine to become accessible"
18
+ raw.wait_for { printf "."; STDOUT.flush; ready?}
19
+
20
+ # Wait for ssh to become available ...
21
+ env.ui.info "[#{@name}] - Waiting for ip address"
22
+ #env.ui.info instance.console_output.body["output"]
23
+ raw.wait_for { printf "."; STDOUT.flush; !public_ip_address.nil?}
24
+
25
+ env.ui.info "[#{@name}] - Waiting for ssh on #{self.ip_address} to become available"
26
+ Mccloud::Util::Ssh.execute_when_tcp_available(self.ip_address, { :port => @port, :timeout => 6000 }) do
27
+ env.ui.info "[#{@name}] - Ssh is available , proceeding with bootstrap"
28
+ end
29
+
30
+ # Because it's a new machine we bootstrap it to
31
+ self._bootstrap(nil,options)
32
+
33
+ else
34
+ state=raw.state
35
+ if state !="running"
36
+ env.ui.info "Booting up machine #{@name}"
37
+ raw.start
38
+ raw.wait_for { printf ".";STDOUT.flush; ready?}
39
+ env.ui.info ""
40
+ else
41
+ unless raw.state == "shutting-down"
42
+ env.ui.info "[#{@name}] - already running."
43
+ else
44
+ env.ui.info "[#{@name}] - can't start machine because it is in state #{raw.state}"
45
+ return
46
+ end
47
+ end
48
+
49
+ end
50
+
51
+ unless options["noprovision"]
52
+ env.ui.info "[#{@name}] - Waiting for ssh to become available"
53
+ Mccloud::Util::Ssh.execute_when_tcp_available(self.ip_address, { :port => @port, :timeout => 6000 }) do
54
+ env.ui.info "[#{@name}] - Ssh is available , proceeding with provisioning"
55
+ end
56
+
57
+ env.ui.info "[#{@name}] - provision step #{@name}"
58
+ self._provision(options)
59
+ end
60
+
61
+ end
62
+
63
+ end #module
64
+ end #module
65
+ end #module
@@ -0,0 +1,67 @@
1
+ require 'mccloud/provider/core/vm'
2
+
3
+ require 'mccloud/provider/libvirt/vm/up'
4
+ require 'mccloud/provider/libvirt/vm/bootstrap'
5
+ require 'mccloud/provider/libvirt/vm/ssh'
6
+ require 'mccloud/provider/libvirt/vm/scp'
7
+ require 'mccloud/provider/libvirt/vm/rsync'
8
+ require 'mccloud/provider/libvirt/vm/halt'
9
+ require 'mccloud/provider/libvirt/vm/provision'
10
+ require 'mccloud/provider/libvirt/vm/destroy'
11
+ require 'mccloud/provider/libvirt/vm/reload'
12
+ require 'mccloud/provider/libvirt/vm/forward'
13
+
14
+
15
+ module Mccloud::Provider
16
+ module Libvirt
17
+
18
+ class Vm < ::Mccloud::Provider::Core::Vm
19
+
20
+ include Mccloud::Provider::Libvirt::VmCommand
21
+
22
+ def ip_address
23
+ return self.public_ip_address
24
+ end
25
+
26
+ def public_ip_address
27
+ unless raw.nil?
28
+ ip=raw.public_ip_address
29
+ else
30
+ ip=nil
31
+ end
32
+ return ip
33
+ end
34
+
35
+ def running?
36
+ if raw.nil?
37
+ return false
38
+ else
39
+ return raw.ready?
40
+ end
41
+ end
42
+
43
+ def private_ip_address
44
+ unless raw.nil?
45
+ ip=raw.private_ip_address
46
+ else
47
+ ip=nil
48
+ end
49
+ return ip
50
+ end
51
+
52
+ def raw
53
+ if @raw.nil?
54
+ found=@provider.raw.servers.all(:name => "#{@provider.filter}#{@name}")
55
+ unless found.nil?
56
+ @raw=found.first
57
+ end
58
+ else
59
+ @raw.private_key_path=@private_key_path
60
+ @raw.username = @user
61
+ end
62
+
63
+ return @raw
64
+ end
65
+ end
66
+ end
67
+ end
@@ -0,0 +1,12 @@
1
+ module Mccloud::Provider
2
+ module Script
3
+ module ProviderCommand
4
+
5
+ def status(selection=nil,options=nil)
6
+
7
+ end
8
+
9
+ end #module
10
+ end #module
11
+ end #module
12
+
@@ -0,0 +1,125 @@
1
+ require 'mccloud/provider/script/vm'
2
+ require 'mccloud/util/platform'
3
+ require 'mccloud/provider/core/provider'
4
+
5
+ module Mccloud
6
+ module Provider
7
+ module Script
8
+ class Provider < ::Mccloud::Provider::Core::Provider
9
+
10
+ attr_accessor :name
11
+ attr_accessor :flavor
12
+
13
+ attr_accessor :options
14
+
15
+ attr_accessor :vms
16
+
17
+ attr_accessor :script_dir
18
+ attr_accessor :variables
19
+
20
+ #include Mccloud::Provider::Script::ProviderCommand
21
+
22
+
23
+ def initialize(name,options,env)
24
+
25
+ super(name,options,env)
26
+
27
+ @vms=Hash.new
28
+ @variables=Hash.new
29
+
30
+ @options=options
31
+ @flavor=self.class.to_s.split("::")[-2]
32
+ @name=name
33
+ end
34
+
35
+ def up(selection,options)
36
+ on_selected_components("vm",selection) do |id,vm|
37
+ script_exec("up.sh",vm,options)
38
+ end
39
+ end
40
+
41
+ def status(selection,options)
42
+ unless selection.nil?
43
+ on_selected_components("vm",selection) do |id,vm|
44
+ script_exec("status.sh",vm,options)
45
+ end
46
+ else
47
+ script_exec("status.sh",nil,options)
48
+ end
49
+ end
50
+
51
+ def bootstrap(selection,script,options)
52
+ on_selected_components("vm",selection) do |id,vm|
53
+ script_exec("bootstrap.sh",vm,options)
54
+ end
55
+
56
+ end
57
+
58
+ def destroy(selection,options)
59
+
60
+ on_selected_components("vm",selection) do |id,vm|
61
+ script_exec("destroy.sh",vm,options)
62
+ end
63
+
64
+ end
65
+
66
+ def ssh(selection,command,options)
67
+
68
+ on_selected_components("vm",selection) do |id,vm|
69
+ script_exec("ssh.sh",vm,options)
70
+ end
71
+
72
+ end
73
+
74
+ def provision(selection,options)
75
+
76
+ on_selected_components("vm",selection) do |id,vm|
77
+ script_exec("provision.sh",vm,options)
78
+ end
79
+
80
+ end
81
+
82
+ def halt(selection,options)
83
+ on_selected_components("vm",selection) do |id,vm|
84
+ script_exec("halt.sh",vm,options)
85
+ end
86
+
87
+ end
88
+
89
+ private
90
+ def script_exec(filename,vm,options)
91
+
92
+ # Set provider variables
93
+ unless vm.nil?
94
+ vm.variables.each do |name,value|
95
+ env.logger.info "setting environment: #{name}=#{value}"
96
+ ENV["MC_"+name.to_s]=value
97
+ end
98
+ ENV["MC_BOXNAME"]=vm.name
99
+ end
100
+
101
+ # Set vm variables
102
+ env.logger.info "script_dir : #{File.expand_path(@script_dir)}"
103
+ ENV["MC_SCRIPT_DIR"]=File.expand_path(@script_dir)
104
+ @variables.each do |name,value|
105
+ env.logger.info "setting environment: #{name}=#{value}"
106
+ ENV["MC_"+name.to_s]=value
107
+ end
108
+
109
+ # Some hackery going on here. On Mac OS X Leopard (1.5), exec fails
110
+ # (GH-51). As a workaround, we fork and wait. On all other platforms,
111
+ # we simply exec.
112
+ pid = nil
113
+ pid = fork if ::Mccloud::Util::Platform.leopard? || ::Mccloud::Util::Platform.tiger?
114
+
115
+ env.ui.info "Executing internal ssh command"
116
+ script_command="#{File.join(self.script_dir,filename)}"
117
+ env.ui.info script_command
118
+ Kernel.exec "sh #{script_command}" if pid.nil?
119
+ Process.wait(pid) if pid
120
+ end
121
+
122
+ end
123
+ end
124
+ end
125
+ end
@@ -0,0 +1,13 @@
1
+ require 'mccloud/provider/core/vm'
2
+
3
+ module Mccloud::Provider
4
+ module Script
5
+
6
+ class Vm < ::Mccloud::Provider::Core::Vm
7
+
8
+ attr_accessor :ip_address
9
+ attr_accessor :variables
10
+
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,14 @@
1
+ module Mccloud::Provider
2
+ module Vagrant
3
+ module ProviderCommand
4
+
5
+ def status(selection=nil,options=nil)
6
+
7
+ self.raw.cli(['status',selection])
8
+
9
+ end
10
+
11
+ end #module
12
+ end #module
13
+ end #module
14
+