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
@@ -7,7 +7,7 @@ require 'digest/md5'
7
7
 
8
8
  module Mccloud
9
9
  module Util
10
-
10
+
11
11
  class SSHKey
12
12
 
13
13
  def self.generate(options = {})
@@ -18,11 +18,12 @@ class SSHKey
18
18
 
19
19
  def initialize(private_key, options = {})
20
20
  @key_object = OpenSSL::PKey::RSA.new(private_key)
21
+
21
22
  @comment = options[:comment] || ""
22
23
  @rsa_private_key = @key_object.to_pem
23
24
  @rsa_public_key = @key_object.public_key.to_pem
24
25
  raw_ssh_public_key = ssh_public_key_conversion
25
-
26
+
26
27
  # @ssh_public_key = ["ssh-rsa", Base64.strict_encode64(raw_ssh_public_key), @comment].join(" ").strip
27
28
 
28
29
  @ssh_public_key = ["ssh-rsa", [raw_ssh_public_key].pack("m0").gsub(/\n/,''), @comment].join(" ").strip
@@ -1,3 +1,6 @@
1
1
  module Mccloud
2
- VERSION = "0.0.13"
2
+ end
3
+
4
+ unless defined?(Mccloud::VERSION)
5
+ ::Mccloud::VERSION = "0.0.14"
3
6
  end
data/lib/mccloud/vm.rb ADDED
@@ -0,0 +1,62 @@
1
+ module Mccloud
2
+
3
+ class Vm
4
+
5
+ attr_accessor :name
6
+ attr_reader :env
7
+ attr_accessor :definition
8
+
9
+ def initialize(name,env)
10
+ @name=name
11
+ @env=env
12
+ end
13
+
14
+ def exists?
15
+ File.exists?(self.path)
16
+ end
17
+
18
+ def path
19
+ File.join(@env.config.mccloud.vm_path,@name+".rb")
20
+ end
21
+
22
+ def load!
23
+ self.validate
24
+
25
+ content=File.read(self.path)
26
+ mccloud_configurator=env.config
27
+ content.gsub!("Mccloud::Config.run","mccloud_configurator.define")
28
+
29
+ begin
30
+ env.config.instance_eval(content)
31
+ rescue Error => ex
32
+ raise ::Mccloud::Error, "Error reading vm from file #{definition_file}#{ex}"
33
+ end
34
+ end
35
+
36
+ def create
37
+ begin
38
+ unless self.exists?
39
+ File.open(self.path,'w'){ |f| f.write(self.to_template)}
40
+ else
41
+ raise ::Mccloud::Error, "VM file #{self.path} already exists"
42
+ end
43
+ rescue Error => ex
44
+ raise ::Mccloud::Error, "Error writing vm file"
45
+ end
46
+ end
47
+
48
+ def to_template
49
+ result=""
50
+ filename=File.expand_path(File.join(File.dirname(__FILE__),'templates','vm.erb'))
51
+ env.logger.info "Opening vm template file #{@file}"
52
+ template=File.new(filename).read
53
+ result=ERB.new(template).result(binding)
54
+ return result
55
+ end
56
+
57
+ def validate
58
+ raise ::Mccloud::Error, "Vm #{@name} does not yet exist" unless self.exists?
59
+ end
60
+ end
61
+ end
62
+
@@ -0,0 +1,60 @@
1
+ require 'mccloud/vm'
2
+ module Mccloud
3
+ class Vms < Hash
4
+
5
+ attr_reader :env
6
+
7
+ def initialize(env)
8
+ @env=env
9
+ end
10
+
11
+ def define(name,definitionname)
12
+ # Check if definition exists
13
+ unless env.config.definitions.registered?(definitionname)
14
+ raise ::Mccloud::Error, "Definition #{definitionname} does not exist"
15
+ end
16
+ # Create the vms dir if needed
17
+ unless self.exists?
18
+ self.create
19
+ end
20
+
21
+ vm=::Mccloud::Vm.new(name,env)
22
+ unless vm.exists?
23
+ vm.definition=env.config.definitions[definitionname]
24
+ vm.create
25
+ end
26
+ end
27
+
28
+ def load!
29
+ if self.exists?
30
+ Dir[File.join(self.path,"**.rb")].each do |dir|
31
+ name=File.basename(dir,'.rb')
32
+ vm=::Mccloud::Vm.new(name,env)
33
+ vm.load!
34
+ end
35
+ else
36
+ env.logger.info "Skipping loading of vms as the vm_path does exist"
37
+ end
38
+ end
39
+
40
+ def path
41
+ @env.config.mccloud.vm_path
42
+ end
43
+
44
+ def exists?
45
+ File.directory?(self.path)
46
+ end
47
+
48
+ def create
49
+ begin
50
+ unless self.exists?
51
+ env.logger.info "Creating the vms directory #{self.path} as it doesn't exist yet"
52
+ FileUtils.mkdir(self.path)
53
+ end
54
+ rescue Exception => ex
55
+ raise ::Mccloud::Error, "Error creating vms directory #{self.path}: \n#{ex}"
56
+ end
57
+ end
58
+
59
+ end
60
+ end
data/lib/mccloud.rb CHANGED
@@ -1,2 +1,25 @@
1
- require 'fog'
2
1
  require 'json'
2
+
3
+ require 'i18n'
4
+ require 'openssl'
5
+ require 'pathname'
6
+
7
+ module Mccloud
8
+ # The source root is the path to the root directory of
9
+ # the Mccloud gem.
10
+ def self.source_root
11
+ @source_root ||= Pathname.new(File.expand_path('../../', __FILE__))
12
+ end
13
+ end
14
+
15
+ # # Default I18n to load the en locale
16
+ I18n.load_path << File.expand_path("lib/mccloud/templates/locales/en.yml", Mccloud.source_root)
17
+
18
+ # Load the things which must be loaded before anything else
19
+ require 'mccloud/cli'
20
+ require 'mccloud/ui'
21
+ require 'mccloud/command'
22
+ require 'mccloud/error'
23
+ #require 'mccloud/logger'
24
+ require 'mccloud/environment'
25
+ require 'mccloud/version'
data/mccloud.gemspec CHANGED
@@ -14,22 +14,31 @@ Gem::Specification.new do |s|
14
14
  s.required_rubygems_version = ">= 1.3.6"
15
15
  s.rubyforge_project = "mccloud"
16
16
 
17
- s.add_dependency "net-ssh", "~> 2.1.0"
17
+ s.add_dependency "net-ssh", "~> 2.2.2"
18
18
  #s.add_dependency "sshkey"
19
19
  s.add_dependency "net-scp"
20
- s.add_dependency "fog", "~> 0.7.2"
20
+ s.add_dependency "fog", ">= 1.1.0"
21
+
21
22
  s.add_dependency "json"
23
+ s.add_dependency "ansi"
24
+
22
25
  #s.add_dependency "templater"
23
26
  s.add_dependency "popen4", "~> 0.1.2"
24
- s.add_dependency "thor", "~> 0.14.6"
27
+ s.add_dependency "thor", ">= 0.14.6"
25
28
  s.add_dependency "highline", "~> 1.6.1"
26
29
  #s.add_dependency "progressbar"
27
30
  #s.add_development_dependency "cucumber", "0.8.5"
28
31
 
32
+
29
33
  s.add_dependency "net-ssh-multi"
30
34
  #s.add_dependency "rspec"
31
35
 
32
36
  s.add_development_dependency "bundler", ">= 1.0.0"
37
+ s.add_development_dependency("ruby-libvirt","~>0.4.0")
38
+ s.add_development_dependency("vagrant","~>0.8.1")
39
+ s.add_development_dependency("rake","~>0.9")
40
+
41
+ s.add_dependency "i18n"
33
42
 
34
43
  s.files = `git ls-files`.split("\n")
35
44
  s.executables = `git ls-files`.split("\n").map{|f| f =~ /^bin\/(.*)/ ? $1 : nil}.compact
@@ -0,0 +1,117 @@
1
+ Mccloud::Config.run do |config|
2
+ # All Mccloud configuration is done here. For a detailed explanation
3
+ # and listing of configuration options, please view the documentation
4
+ # online.
5
+
6
+ config.mccloud.prefix="mccloud"
7
+ config.mccloud.environment="development"
8
+ config.mccloud.identity="patrick"
9
+
10
+ config.vm.define "backend" do |sqr_be_config|
11
+ sqr_be_config.vm.provider="AWS"
12
+ sqr_be_config.vm.provider_options={ :region => "eu-west-1"}
13
+
14
+ #admin_config.vm.provisioner=:chef_solo
15
+ sqr_be_config.vm.create_options={
16
+ # ID = "ami-e59ca991" = Ubuntu 10.10 - Maverick 64-bit (Canonical/EBS) - Euwest1
17
+ :image_id => "ami-e59ca991" ,
18
+ :flavor_id => "m1.large",
19
+ :groups => %w(mccloud-development-patrick-securitygroup),
20
+ :key_name => "mccloud-key-patrick",
21
+ :availability_zone => "eu-west-1a"
22
+ }
23
+ sqr_be_config.vm.forward_port("redis", 6379, 6379)
24
+ sqr_be_config.vm.forward_port("postgres", 5432, 5432)
25
+ sqr_be_config.vm.forward_port("sphinx", 9312, 9312)
26
+ sqr_be_config.vm.user="ubuntu"
27
+ sqr_be_config.vm.bootstrap="definitions/project-ubuntu/bootstrap-ubuntu-system.sh"
28
+ sqr_be_config.vm.key_name="mccloud-key-patrick"
29
+ sqr_be_config.vm.private_key="/Users/patrick/.ssh/mccloud_rsa"
30
+ sqr_be_config.vm.public_key="/Users/patrick/.ssh/mccloud_rsa.pub"
31
+
32
+ sqr_be_config.vm.provision :chef_solo do |chef|
33
+ chef.cookbooks_path = ["../project-chefrepo/cookbooks","../project-chefrepo/site-cookbooks"]
34
+ chef.log_level = "debug"
35
+ chef.add_recipe("myapp::backend")
36
+ chef.json.merge!({
37
+ :myapp => {
38
+ :redis_host_ip => "<%= private_ips['backend'] %>",
39
+ :postgres_host_ip => "<%= private_ips['backend'] %>",
40
+ :sphinx_host_ip => "<%= private_ips['backend'] %>"
41
+ }})
42
+ end
43
+
44
+
45
+ end
46
+
47
+ config.vm.define "frontend" do |sqr_fe_config|
48
+
49
+ sqr_fe_config.vm.provider="AWS"
50
+ sqr_fe_config.vm.provider_options={ :region => "eu-west-1"}
51
+
52
+ sqr_fe_config.vm.provisioner=:chef_solo
53
+ sqr_fe_config.vm.create_options={
54
+ # ID = "ami-e59ca991" = Ubuntu 10.10 - Maverick 64-bit (Canonical/EBS) - Euwest1
55
+ :image_id => "ami-e59ca991" ,
56
+ :flavor_id => "m1.large",
57
+ :groups => %w(mccloud-development-patrick-securitygroup),
58
+ :key_name => "mccloud-key-patrick",
59
+ :availability_zone => "eu-west-1a"
60
+ }
61
+ sqr_fe_config.vm.forward_port("http", 8080, 8080)
62
+ sqr_fe_config.vm.forward_port("http", 9000, 9000)
63
+ sqr_fe_config.vm.user="ubuntu"
64
+ sqr_fe_config.vm.bootstrap="definitions/project-ubuntu/bootstrap-ubuntu-system.sh"
65
+ sqr_fe_config.vm.key_name="mccloud-key-patrick"
66
+ sqr_fe_config.vm.private_key="/Users/patrick/.ssh/mccloud_rsa"
67
+ sqr_fe_config.vm.public_key="/Users/patrick/.ssh/mccloud_rsa.pub"
68
+
69
+ sqr_fe_config.vm.provision :chef_solo do |chef|
70
+ chef.cookbooks_path = ["../project-chefrepo/cookbooks","../project-chefrepo/site-cookbooks"]
71
+ chef.log_level = "debug"
72
+ chef.add_recipe("myapp::frontend")
73
+ chef.json.merge!({
74
+ :myapp => {
75
+ :redis_host_ip => "<%= private_ips['backend'] %>",
76
+ :postgres_host_ip => "<%= private_ips['backend'] %>",
77
+ :sphinx_host_ip => "<%= private_ips['backend'] %>"
78
+
79
+ }})
80
+ end
81
+
82
+ end
83
+
84
+
85
+ config.vm.define "logger" do |logger_config|
86
+ logger_config.vm.provider="AWS"
87
+ logger_config.vm.provider_options={ :region => "eu-west-1"}
88
+
89
+ #admin_config.vm.provisioner=:chef_solo
90
+ logger_config.vm.create_options={
91
+ # ID = "ami-e59ca991" = Ubuntu 10.10 - Maverick 64-bit (Canonical/EBS) - Euwest1
92
+ :image_id => "ami-476d5b33" ,
93
+ :flavor_id => "m1.large",
94
+ :groups => %w(mccloud-development-patrick-securitygroup),
95
+ :key_name => "mccloud-key-patrick",
96
+ :availability_zone => "eu-west-1a"
97
+ }
98
+ logger_config.vm.forward_port("http", 8080, 8080)
99
+ logger_config.vm.user="ubuntu"
100
+ logger_config.vm.bootstrap="definitions/project-ubuntu/bootstrap-ubuntu-system.sh"
101
+ logger_config.vm.key_name="mccloud-key-patrick"
102
+ logger_config.vm.private_key="/Users/patrick/.ssh/mccloud_rsa"
103
+ logger_config.vm.public_key="/Users/patrick/.ssh/mccloud_rsa.pub"
104
+
105
+ logger_config.vm.provision :chef_solo do |chef|
106
+ chef.cookbooks_path = ["../project-chefrepo/cookbooks","../project-chefrepo/site-cookbooks"]
107
+ chef.log_level = "debug"
108
+ chef.add_recipe("app_logger::default")
109
+ chef.json.merge!({
110
+ :app_logger => {
111
+ :redis_host_ip => "<%= private_ips['backend'] %>",
112
+ }})
113
+ end
114
+
115
+ end
116
+
117
+ end
@@ -0,0 +1,102 @@
1
+ {
2
+ "AWSTemplateFormatVersion" : "2010-09-09",
3
+
4
+ "Description" : "The BitNami Drupal 7.0: Drupal is a content management platform that allows an individual or community of users to easily publish, manage, and organize a wide variety of content on a website. In general, Drupal is used for community web portals, discussion sites, corporate web sites, intranet applications, personal web sites or blogs, aficionado sites, e-commerce applications, resource directories, and social networking sites. Drupal is easy to extend by plugging in one or more of the dozens of freely available modules. For more information, please visit: http://bitnami.org.",
5
+
6
+ "Parameters" : {
7
+ "BitnamiInstanceType" : {
8
+ "Default" : "m1.small",
9
+ "Type" : "String",
10
+ "Description" : "The type of EC2 instances: only t1.micro, m1.small and m1.medium supported"
11
+ },
12
+ "KeyName": {
13
+ "Description" : "Name of an existing EC2 KeyPair to enable SSH access",
14
+ "Type": "String",
15
+ "Default" : "default"
16
+ },
17
+ "BitnamiUser" : {
18
+ "Default" : "user",
19
+ "Type" : "String",
20
+ "Description" : "The BitNami Drupal user login"
21
+ },
22
+ "BitnamiPassword" : {
23
+ "Default" : "bitnami",
24
+ "Type" : "String",
25
+ "Description" : "The BitNami Drupal user password (minimum 6 characters, default value: bitnami )",
26
+ "NoEcho" : "TRUE"
27
+ },
28
+ "BitnamiEmail" : {
29
+ "Default" : "user@example.com",
30
+ "Description" : "The BitNami Drupal user email",
31
+ "Type" : "String"
32
+ },
33
+ "BitnamiUserName" : {
34
+ "Default" : "BitNami User",
35
+ "Description" : "The BitNami Drupal user full name",
36
+ "Type" : "String"
37
+ }
38
+ },
39
+ "Resources" : {
40
+ "BitnamiSecurityGroup" : {
41
+ "Type" : "AWS::EC2::SecurityGroup",
42
+ "Properties" : {
43
+ "GroupDescription" : "Allow HTTP/SSH to BitNami machine.",
44
+ "SecurityGroupIngress" : [ {
45
+ "IpProtocol" : "tcp",
46
+ "FromPort" : "80",
47
+ "ToPort" : "80",
48
+ "CidrIp" : "0.0.0.0/0"
49
+ }, {
50
+ "IpProtocol" : "tcp",
51
+ "FromPort" : "22",
52
+ "ToPort" : "22",
53
+ "CidrIp" : "0.0.0.0/0"
54
+ } ]
55
+ }
56
+ },
57
+ "BitnamiServer" : {
58
+ "Type" : "AWS::EC2::Instance",
59
+ "Properties" : {
60
+ "ImageId" : { "Fn::FindInMap": [ "AWSRegionArch2AMI", { "Ref": "AWS::Region" }, { "Fn::FindInMap": [ "AWSInstanceType2Arch", {"Ref": "BitnamiInstanceType" },"Arch" ] } ]},
61
+ "KeyName" : {"Ref": "KeyName"},
62
+ "SecurityGroups" : [ { "Ref" : "BitnamiSecurityGroup" } ],
63
+ "UserData" : { "Fn::Base64" : { "Fn::Join" : [ "\n", [
64
+ { "Fn::Join" : [ "=", [ "base_user", { "Ref" : "BitnamiUser" } ] ] },
65
+ { "Fn::Join" : [ "=", [ "base_mail", { "Ref" : "BitnamiEmail" } ] ] },
66
+ { "Fn::Join" : [ "=", [ "base_user_name", { "Ref" : "BitnamiUserName" } ] ] },
67
+ { "Fn::Join" : [ "=", [ "base_password", { "Ref" : "BitnamiPassword" } ] ] },
68
+ { "Fn::Join" : [ "=", [ "stack_name", "drupal" ] ] },
69
+ { "Fn::Join" : [ "=", [ "stack_version", "7.0-0" ] ] }
70
+ ] ] } },
71
+ "InstanceType" : { "Ref" : "BitnamiInstanceType" },
72
+ "Tags" : [ {
73
+ "Key" : "Name",
74
+ "Value" : "The BitNami Drupal 7.0"
75
+ } ]
76
+ }
77
+ },
78
+ "BitnamiIP" : {
79
+ "Type" : "AWS::EC2::EIP",
80
+ "Properties" : {
81
+ "InstanceId" : { "Ref" : "BitnamiServer" }
82
+ }
83
+ }
84
+
85
+ },
86
+ "Mappings": {
87
+ "AWSInstanceType2Arch" : {
88
+ "t1.micro" : { "Arch" : "32" },
89
+ "m1.small" : { "Arch" : "32" },
90
+ "c1.medium" : { "Arch" : "32" }
91
+ },
92
+ "AWSRegionArch2AMI" : {
93
+ "us-east-1" : { "32" : "ami-986497f1"}
94
+ }
95
+ },
96
+ "Outputs" : {
97
+ "URL" : {
98
+ "Description" : "URL of the BitNami Drupal 7.0 server:",
99
+ "Value" : { "Fn::Join" : [ "", [ "http://", { "Ref" : "BitnamiIP" } ] ] }
100
+ }
101
+ }
102
+ }
@@ -0,0 +1,16 @@
1
+ #!/bin/bash -e
2
+
3
+ apt-get update
4
+ apt-get -y install ruby ruby-dev libopenssl-ruby rdoc ri irb build-essential wget ssl-cert
5
+ cd /tmp
6
+ test ! -f rubygems-1.3.7.tgz && wget http://production.cf.rubygems.org/rubygems/rubygems-1.3.7.tgz
7
+ test -f rubygems-1.3.7.tgz && tar zxf rubygems-1.3.7.tgz
8
+
9
+ gem --version |grep 1.3.7 | wc -l |grep 0 && cd rubygems-1.3.7 && ruby setup.rb --no-format-executable
10
+
11
+ gem list chef|grep chef|wc -l | grep 0 && gem install chef --no-ri --no-rdoc
12
+ gem list puppet|grep puppet|wc -l | grep 0 && gem install puppet --no-ri --no-rdoc
13
+
14
+ useradd puppet
15
+
16
+ echo "bootstrap finished"
@@ -0,0 +1,198 @@
1
+ {
2
+ "AWSTemplateFormatVersion" : "2010-09-09",
3
+
4
+ "Description" : "Marionette Collective 1.0.1 demo network with 1 ActiveMQ broker and 5 managed instances",
5
+
6
+ "Parameters" : {
7
+ "KeyName" : {
8
+ "Description" : "Name of an existing EC2 KeyPair to enable SSH access to the instances",
9
+ "Type" : "String"
10
+ },
11
+
12
+ "Password" : {
13
+ "Description" : "Password for ActiveMQ",
14
+ "NoEcho": "true",
15
+ "Type" : "String"
16
+ },
17
+
18
+ "PSK" : {
19
+ "Description" : "Pre Shared Key for MCollective",
20
+ "NoEcho": "true",
21
+ "Type" : "String"
22
+ }
23
+ },
24
+
25
+ "Resources" : {
26
+ "ActiveMQInstance" : {
27
+ "Type" : "AWS::EC2::Instance",
28
+ "Properties" : {
29
+ "InstanceType" : "m1.small",
30
+ "SecurityGroups" : [ { "Ref" : "ActiveMQSecurityGroup" } ],
31
+ "AvailabilityZone" : "eu-west-1b",
32
+ "ImageId" : "ami-3fb4804b",
33
+ "KeyName" : { "Ref" : "KeyName" },
34
+ "Tags" : [ { "Key" : "Name",
35
+ "Value" : "management_node"
36
+ } ],
37
+ "UserData" : {"Fn::Base64" :
38
+ {"Fn::Join": [ "\n", [
39
+ "mcollective=server",
40
+ {"Fn::Join": [ "", ["mcollective_password=", { "Ref": "Password" }]]},
41
+ {"Fn::Join": [ "", ["mcollective_psk=", { "Ref": "PSK" }]]}
42
+ ]
43
+ ]
44
+
45
+ }
46
+ }
47
+ }
48
+ },
49
+
50
+ "ManagedInstance1" : {
51
+ "Type" : "AWS::EC2::Instance",
52
+ "Properties" : {
53
+ "InstanceType" : "m1.small",
54
+ "AvailabilityZone" : "eu-west-1b",
55
+ "SecurityGroups" : [ { "Ref" : "ActiveMQSecurityGroup" } ],
56
+ "ImageId" : "ami-3fb4804b",
57
+ "KeyName" : { "Ref" : "KeyName" },
58
+ "Tags" : [ { "Key" : "Name",
59
+ "Value" : "node1"
60
+ } ],
61
+ "UserData" : {"Fn::Base64" :
62
+ {"Fn::Join": [ "\n", [
63
+ {"Fn::Join": [ "", ["mcollective=", {"Fn::GetAtt": [ "ActiveMQInstance", "PublicIp" ]}]] },
64
+ {"Fn::Join": [ "", ["mcollective_password=", { "Ref": "Password" }]]},
65
+ {"Fn::Join": [ "", ["mcollective_psk=", { "Ref": "PSK" }]]}
66
+ ]
67
+ ]
68
+
69
+ }
70
+ }
71
+ }
72
+ },
73
+
74
+ "ManagedInstance2" : {
75
+ "Type" : "AWS::EC2::Instance",
76
+ "Properties" : {
77
+ "InstanceType" : "m1.small",
78
+ "AvailabilityZone" : "eu-west-1b",
79
+ "SecurityGroups" : [ { "Ref" : "ActiveMQSecurityGroup" } ],
80
+ "ImageId" : "ami-3fb4804b",
81
+ "KeyName" : { "Ref" : "KeyName" },
82
+ "Tags" : [ { "Key" : "Name",
83
+ "Value" : "node2"
84
+ } ],
85
+ "UserData" : {"Fn::Base64" :
86
+ {"Fn::Join": [ "\n", [
87
+ {"Fn::Join": [ "", ["mcollective=", {"Fn::GetAtt": [ "ActiveMQInstance", "PublicIp" ]}]] },
88
+ {"Fn::Join": [ "", ["mcollective_password=", { "Ref": "Password" }]]},
89
+ {"Fn::Join": [ "", ["mcollective_psk=", { "Ref": "PSK" }]]}
90
+ ]
91
+ ]
92
+
93
+ }
94
+ }
95
+ }
96
+ },
97
+
98
+ "ManagedInstance3" : {
99
+ "Type" : "AWS::EC2::Instance",
100
+ "Properties" : {
101
+ "InstanceType" : "m1.small",
102
+ "AvailabilityZone" : "eu-west-1a",
103
+ "SecurityGroups" : [ { "Ref" : "ActiveMQSecurityGroup" } ],
104
+ "ImageId" : "ami-3fb4804b",
105
+ "KeyName" : { "Ref" : "KeyName" },
106
+ "Tags" : [ { "Key" : "Name",
107
+ "Value" : "node3"
108
+ } ],
109
+ "UserData" : {"Fn::Base64" :
110
+ {"Fn::Join": [ "\n", [
111
+ {"Fn::Join": [ "", ["mcollective=", {"Fn::GetAtt": [ "ActiveMQInstance", "PublicIp" ]}]] },
112
+ {"Fn::Join": [ "", ["mcollective_password=", { "Ref": "Password" }]]},
113
+ {"Fn::Join": [ "", ["mcollective_psk=", { "Ref": "PSK" }]]}
114
+ ]
115
+ ]
116
+
117
+ }
118
+ }
119
+ }
120
+ },
121
+
122
+ "ManagedInstance4" : {
123
+ "Type" : "AWS::EC2::Instance",
124
+ "Properties" : {
125
+ "InstanceType" : "m1.small",
126
+ "AvailabilityZone" : "eu-west-1a",
127
+ "SecurityGroups" : [ { "Ref" : "ActiveMQSecurityGroup" } ],
128
+ "ImageId" : "ami-3fb4804b",
129
+ "KeyName" : { "Ref" : "KeyName" },
130
+ "Tags" : [ { "Key" : "Name",
131
+ "Value" : "node4"
132
+ } ],
133
+ "UserData" : {"Fn::Base64" :
134
+ {"Fn::Join": [ "\n", [
135
+ {"Fn::Join": [ "", ["mcollective=", {"Fn::GetAtt": [ "ActiveMQInstance", "PublicIp" ]}]] },
136
+ {"Fn::Join": [ "", ["mcollective_password=", { "Ref": "Password" }]]},
137
+ {"Fn::Join": [ "", ["mcollective_psk=", { "Ref": "PSK" }]]}
138
+ ]
139
+ ]
140
+
141
+ }
142
+ }
143
+ }
144
+ },
145
+
146
+ "ManagedInstance5" : {
147
+ "Type" : "AWS::EC2::Instance",
148
+ "Properties" : {
149
+ "InstanceType" : "m1.small",
150
+ "AvailabilityZone" : "eu-west-1a",
151
+ "SecurityGroups" : [ { "Ref" : "ActiveMQSecurityGroup" } ],
152
+ "ImageId" : "ami-3fb4804b",
153
+ "KeyName" : { "Ref" : "KeyName" },
154
+ "Tags" : [ { "Key" : "Name",
155
+ "Value" : "node5"
156
+ } ],
157
+ "UserData" : {"Fn::Base64" :
158
+ {"Fn::Join": [ "\n", [
159
+ {"Fn::Join": [ "", ["mcollective=", {"Fn::GetAtt": [ "ActiveMQInstance", "PublicIp" ]}]] },
160
+ {"Fn::Join": [ "", ["mcollective_password=", { "Ref": "Password" }]]},
161
+ {"Fn::Join": [ "", ["mcollective_psk=", { "Ref": "PSK" }]]}
162
+ ]
163
+ ]
164
+
165
+ }
166
+ }
167
+ }
168
+ },
169
+
170
+ "ActiveMQSecurityGroup" : {
171
+ "Type" : "AWS::EC2::SecurityGroup",
172
+ "Properties" : {
173
+ "GroupDescription" : "Enable SSH and ActiveMQ access",
174
+ "SecurityGroupIngress" : [
175
+ {
176
+ "IpProtocol" : "tcp",
177
+ "FromPort" : "22",
178
+ "ToPort" : "22",
179
+ "CidrIp" : "0.0.0.0/0"
180
+ },
181
+ {
182
+ "IpProtocol" : "tcp",
183
+ "FromPort" : "6163",
184
+ "ToPort" : "6163",
185
+ "CidrIp" : "0.0.0.0/0"
186
+ }
187
+ ]
188
+ }
189
+ }
190
+ },
191
+
192
+ "Outputs": {
193
+ "ManagementConsole": {
194
+ "Value" : { "Fn::GetAtt" : [ "ActiveMQInstance", "PublicIp" ] },
195
+ "Description" : "Address for the management instance"
196
+ }
197
+ }
198
+ }