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
data/.gitignore CHANGED
@@ -1,9 +1,14 @@
1
- /Mccloudfile
2
- /.mccloud
3
- /*.pp
4
- /puppet/*
5
- /chef/*
6
- /.fog
7
- /bootstrap*
8
- Mccloudfile.*
1
+ Mccloudfile*
2
+ .mccloud
3
+ puppet/*
4
+ manifests/*
5
+ vms/*
6
+ definitions/*
7
+ /^modules/
8
+ ^chef/*
9
+ .fog
10
+ /^bootstrap*/
9
11
  pkg/*
12
+ *.swp
13
+ Gemfile.lock
14
+ .DS_Store
data/.rvmrc CHANGED
@@ -1,4 +1,6 @@
1
1
  rvm use ruby-1.8.7
2
+ #rvm use ruby-1.9.2
2
3
  rvm gemset use mccloud
3
4
  alias mccloud="bundle exec mccloud"
4
5
  alias irb="bundle exec irb"
6
+ alias rake="bundle exec rake"
data/Gemfile CHANGED
@@ -1,4 +1,13 @@
1
1
  source "http://rubygems.org"
2
2
 
3
+ #gem 'fog', :path => "/Users/patrick/imac/fog"
4
+ #gem "fog", :git => 'git@github.com:geemus/fog.git',:branch => 'master'
5
+
6
+ #http://www.deploymentzone.com/2011/05/24/guard-rspec-2-and-growl/
7
+ group :development do
8
+ gem 'rspec', '>= 2.0'
9
+ gem "rake"
10
+ gem 'parallel_tests'
11
+ end
12
+
3
13
  gem "mccloud", :path => "."
4
- #gem "fog", :path => "fog"
data/Guardfile ADDED
@@ -0,0 +1,10 @@
1
+ guard :rspec, :version => 2, :cli => "--color --format documentation" do
2
+ watch(%r{spec/.+_spec\.rb$})
3
+ watch(%r{^lib/(.+)\.rb$}) { "spec" }
4
+ #watch(%r{^lib/(.+)\.rb$}) { |m| "spec/lib/#{m[1]}_spec.rb" }
5
+ watch(%r{spec/spec_helper\.rb$}) { "spec" }
6
+ end
7
+
8
+ guard :cucumber, :cli => "-s" do
9
+ watch(%r{lib/(.+)\.rb$}) { "features" }
10
+ end
data/README.md CHANGED
@@ -1,123 +1,487 @@
1
- ## Note:
2
- - This is a quick copy and paste job(weekend hacking), you should not consider it anything but experimental right now
3
- - But I wanted to share the idea already with others
1
+ # Note: documentation is currently in flux
4
2
 
5
- ## DISCLAIMER:
6
- this is alpha sofware . Don't trust it:) And don't complain if it removes all your EC instances at once....
3
+ # About
4
+ ## What the hell is mccloud?
5
+
6
+ Over the years I fell in love with [Vagrant](http://vagrantup.com) and wanted to have the same workflow for ec2, kvm, internal clouds etc..
7
+
8
+ Therefore Mccloud aims to be the equivalent of ``vagrant`` but extending it to use providers:
9
+ - aws/ec2
10
+ - kvm
11
+ - simple scripts
12
+ - and of course vagrant itself.
13
+
14
+ I'm aware vagrant might extend it's providers in the future; still as they are currently not yet implemented I thought I'd share this code with you.
15
+ As new provider will become available in vagrant they will also be available in mccloud through the vagrant provider
7
16
 
8
17
  ## Kudos to great stuff
18
+ Without the following opensource software this would not be that awesome!
19
+
9
20
  - [Vagrant](http://www.vagrantup.com) is great for testing machines on your local machines
10
21
  - [Fog](https://github.com/geemus/fog) is a great fog library for managing cloud systems
22
+ - [Fission](https://github.com/thbishop/fission) is a gem to interact with vmware fusion machines
23
+
24
+ Kudos to the authors!
25
+
26
+ ## Why not in vagrant?
27
+
28
+ NOTE: mccloud is meant to be complementary to vagrant - we truely love @mitchellh
29
+
30
+ - Main reason - this code has been around way before there was discussion on vagrant new providers
31
+ - Companies are using it now as it supports EC2, KVM, scripts, NOW
32
+ - Vagrant is (currently) focused on desktop vm types only - this extends it to server based cloud solution
33
+ - Once providers are available in vagrant, you can easily switch: the effort is not in the Mccloudfile or Vagrantfile syntax but in the provisioning
34
+ - Vagrant moves away from the 'gem ' support and targets fat installers - I need this code available as a library
35
+ - Vagrant new setup requires root to be installed - not what I want
36
+ - Vagrant builder (might) replace veewee with new setup - I want to continue working with it now
37
+
38
+ Bottom line - if vagrant has the new plugin architecture going and documented I'm happy to review again
39
+
40
+
41
+ # Installation
42
+ ## Requirements
43
+
44
+ - You currently need ruby installed. Either use the system ruby or install [rvm](https://rvm.io/)
45
+ - libxml, libxslt and nokogiri
46
+
47
+ ## Using the stable gem
48
+
49
+ $ gem install mccloud
50
+
51
+ ## Using the cutting edge github code
52
+
53
+ $ git clone git@github.com:jedi4ever/mccloud.git
54
+ $ cd mccloud
55
+ # Note when you use rvm , there is an .rvmrc that will set some aliases
56
+ $ bundle install
57
+ $ bundle exec mccloud
58
+
59
+ # Configuration
60
+ Similar to a Vagrantfile, mccloud has a Mccloudfile where all is configured.
61
+ TODO: there is currently no ``mccloud init`` as it's hard to guess your preferred options
62
+
63
+ ## Mccloudfile Skeleton
64
+ A mccloudfile is actually a ruby code file with a specific block
65
+
66
+ Mccloud::Config.run do |config|
67
+ end
68
+
69
+ ## Provider section
70
+ As mccloud supports multiple providers , the first part you need to do it define the providers you want to use
71
+
72
+ ### Provider AWS
73
+
74
+ You can use this provider to create/manage ec2 instances.
75
+
76
+ As this relies on fog, you first have to create a fog configuration file
77
+
78
+ $ cat $HOME/.fog
79
+ :default:
80
+ :aws_access_key_id: <your id here>
81
+ :aws_secret_access_key: <your acess key here>
82
+
83
+ The syntax to use for an ec2
84
+
85
+ Mccloud::Config.run do |config|
86
+
87
+ # Define a :aws provider 'aws-us-east'
88
+ config.provider.define "host-provider" do |provider_config|
89
+
90
+ #Note: this are option provided to fog for creation
91
+ provider_config.provider.options = { }
92
+
93
+ # Region in which to create the VM
94
+ provider_config.provider.region = "us-east-1"
95
+
96
+ ## Check if necessary keypairs exist
97
+ ## To speed things up, set it to false
98
+ provider_config.provider.check_keypairs = false
99
+
100
+ ## Disable check if required security groups exist
101
+ ## To speed things up, set it to false
102
+ provider_config.provider.check_security_groups = false
103
+
104
+ ## If you share an amazon account with multiple people
105
+ ## You can use namespaces to separate resources
106
+ ## All resources will take this prefix
107
+ provider_config.provider.namespace = ""
108
+
109
+ ## Fog credential pair to use in .fog file
110
+ provider_config.provider.credential = :default
111
+
112
+ end
113
+ end
114
+
115
+ If using the aws/ec see also the section about defining keystores and keypairs
116
+
117
+ ### Provider host
118
+ Useful with machines that are only ssh-able and where you don't have create options
119
+
120
+ Mccloud::Config.run do |config|
121
+
122
+ # Define a :host provider 'host-provider' that is ssh-able
123
+ config.provider.define "host-provider" do |provider_config|
124
+ provider_config.provider.flavor = :host
125
+ end
126
+
127
+ end
128
+
129
+ ### Provider vagrant
130
+ Have mccloud pick up your ``Vagrantfile``
131
+
132
+ Mccloud::Config.run do |config|
133
+
134
+ # Define a :vagrant provider 'vagrant-provider'
135
+ config.provider.define "vagrant-provider" do |provider_config|
136
+ provider_config.provider.flavor = :vagrant
137
+ end
138
+ end
139
+
140
+ ### Provider script
141
+ Usefull if your cloud doesn't have an ip, but you can create start,stop, etc... scripts to do the work
142
+
143
+ Mccloud::Config.run do |config|
144
+
145
+ datacenter_settings = {
146
+ :DATACENTER => 'belgium',
147
+ :ENVIRONMENT => 'test'
148
+ }
149
+
150
+ # Define a :script provider 'script-provider'
151
+ config.provider.define "script-provider" do |provider_config|
152
+ provider_config.provider.flavor = :script
153
+
154
+
155
+ # environment variables to pass to the scripts
156
+ # these are passed as MCCLOUD_<varname>
157
+ provider_config.provider.variables = datacenter_settings
158
+
159
+ # No need for a namespace
160
+ provider_config.provider.namespace = ""
161
+
162
+ # location of the start, stop etc.. scripts
163
+ provider_config.provider.script_dir = "myscript-provider"
164
+ end
165
+
166
+ end
167
+
168
+ ### Provider kvm
169
+
170
+ this works together with veewee that support creating kvm template machines.
171
+ Like on vagrant, mccloud clones a veewee created vm
172
+
173
+ config.provider.define "kvm-libvirt" do |config|
174
+ config.provider.type=:libvirt
175
+ config.provider.options={ :libvirt_uri => "qemu+ssh://ubuntu@kvmbox/system" }
176
+ config.provider.namespace="test"
177
+ end
178
+
179
+ ## Keypair section
180
+
181
+ Currently only used by aws provider. Allows you to define a re-usable name for keypairs for each aws region
182
+
183
+ config.keypair.define "mccloud" do |key_config|
184
+ key_config.keypair.public_key_path = "#{File.join(ENV['HOME'],'.ssh','mccloud_rsa.pub')}"
185
+ key_config.keypair.private_key_path = "#{File.join(ENV['HOME'],'.ssh','mccloud_rsa')}"
186
+ end
187
+
188
+
189
+ ## Keystore section
190
+
191
+ Currently only used by aws provider. Allows you to define multiple keystores for your aws keys
192
+
193
+ config.keystore.define "aws-us-east-key-store" do |keystore_config|
194
+ keystore_config.keystore.provider = "aws-us-east"
195
+ keystore_config.keystore.keypairs = [
196
+ # :name is the name as it will be displayed on amazon
197
+ # :keypair is the named as defined in the mccloudfile
198
+ { :name => "mccloud", :keypair => "mccloud"},
199
+ ]
200
+ end
201
+
202
+ ## IP definitions
203
+
204
+ config.ip.define "ip-demo1" do |config|
205
+ config.ip.provider="aws-eu-west"
206
+ config.ip.address="46.137.72.170"
207
+ config.ip.vmname = "aws-demo1"
208
+ end
209
+
210
+ ## LB definitions
211
+
212
+ config.lb.define "mccloud-development-patrick-lb" do |config|
213
+ config.lb.provider="aws-eu-west"
214
+ config.lb.members=["aws-demo2","aws-demo1"]
215
+ config.lb.sorry_members=["aws-demo2"]
216
+ end
217
+
218
+ ## Template/definitions
219
+ TODO
220
+
221
+ ## VM definitions
222
+ ### Core vm
223
+
224
+ Sharing of files is done over rsync because cloud based architectures don't have the ability to mount local folders
225
+
226
+ vm_config.vm.share_folder("somename", "/source/inthemachinepath", "localmachinepath")
227
+
228
+ vm_config.vm.bootstrap = "somescript"
229
+ vm_config.vm.bootstrap_user = "root"
230
+ vm_config.vm.bootstrap_password = "blabla"
231
+ vm_config.vm.user = "ubuntu"
232
+
233
+ vm_config.vm.name
234
+ vm_config.vm.port
235
+
236
+ vm_config.vm.private_key_path
237
+ vm_config.vm.public_key_path
238
+ vm_config.vm.agent_forwarding
239
+ vm_config.vm.autoselection
240
+ vm_config.vm.bootstrap
241
+ vm_config.vm.bootstrap_user
242
+ vm_config.vm.bootstrap_password
243
+
244
+ vm_config.vm.forward_port
245
+
246
+ ### AWS vm
247
+
248
+ vm.ami
249
+ vm.key_name
250
+ vm.security_groups = Array
251
+ vm.user_data
252
+ vm.flavor
253
+ vm.user
254
+
255
+ config.vm.define "demo" do |config|
256
+ config.vm.provider="aws-eu-west"
257
+ config.vm.ami="ami-e59ca991"
258
+ config.vm.flavor="t1.micro"
259
+ config.vm.zone="eu-west-1a"
260
+ config.vm.user="ubuntu"
261
+ config.vm.security_groups=["thesecuritygroup"]
262
+ config.vm.key_name="mccloud-key-patrick"
263
+ config.vm.bootstrap="definitions/ubuntu/bootstrap-ubuntu-system.sh"
264
+ config.vm.private_key_path="keys/mccloud_rsa"
265
+ config.vm.public_key_path="keys/mccloud_rsa.pub"
266
+ end
267
+
268
+
269
+ this is the way we are currently mounting EBS Volumes with Mccloud.
270
+ For attaching an EBS volume created from a Snaphot;
271
+
272
+ # see http://fog.io/1.1.2/rdoc/Fog/Compute/AWS/Servers.html
273
+ # and https://github.com/fog/fog/blob/v1.1.2/lib/fog/aws/requests/compute/run_instances.rb
274
+ config.vm.create_options = {
275
+ :block_device_mapping => [
276
+ { "DeviceName" => "/dev/sdf", "Ebs.SnapshotId" =>
277
+ "snap-d056d786", "Ebs.DeleteOnTermination" => true }
278
+ ]
279
+ }
280
+
281
+ Or, for attaching a newly created EBS volume:
282
+
283
+ config.vm.create_options = {
284
+ :block_device_mapping => [
285
+ { "DeviceName" => "/dev/sdf", "Ebs.VolumeSize" => "100",
286
+ "Ebs.DeleteOnTermination" => false }
287
+ ]
288
+ }
289
+
290
+ The mounting we then do our provision.sh script:
291
+
292
+ echo "/dev/sdf1 /mnt/ebs ext4 defaults 0 0" >> /etc/fstab
293
+ mkdir -p /mnt/ebs
294
+ mount -a
295
+
296
+
297
+ ### Fog vm
298
+
299
+ ### Vagrant vm
300
+
301
+ config.vm.define "compute1" do |vm_config|
302
+ vm_config.vm.provider = "vagrant"
303
+ end
304
+
305
+ ### Host vm
306
+
307
+ config.vm.define "mycoolhost.com" do |config|
308
+ config.vm.provider=:hosts
309
+ config.vm.ip_address="mycoolhost.com"
310
+ config.vm.user="ubuntu"
311
+ config.vm.port = "2222"
312
+ config.vm.bootstrap = "bootstrap/centos-603"
313
+ config.vm.agent_forwarding = true
314
+ end
315
+
316
+ ### KVM vm
317
+
318
+ config.vm.define "backend" do |config|
319
+ config.vm.provider="juno-libvirt"
320
+
321
+ config.vm.create_options={
322
+ :network_interface_type => "bridge",
323
+ :volume_template_name => "test-baseimage.img",
324
+ :cpus => "3",
325
+ :memory_size => 2*1024*1024, #2 GB
326
+ }
327
+ config.vm.user="ubuntu"
328
+ config.vm.bootstrap="definitions/ubuntu/bootstrap-ubuntu-system.sh"
329
+ config.vm.private_key_path="keys/mccloud_rsa"
330
+ config.vm.public_key_path="keys/mccloud_rsa.pub"
331
+ end
332
+
333
+
334
+ ### Vmfusion
335
+
336
+ ## Provisioners
337
+
338
+ You can use multiple provisioners per vm
339
+
340
+
341
+ ### Puppet apply provisioner
342
+
343
+ manifest_file
344
+ manifest_path
345
+ module_paths = Array
346
+ pp_path
347
+ options
348
+
349
+ vm_config.vm.provision :puppet do |puppet|
350
+ puppet_flags = "--verbose --show_diff"
351
+ puppet.manifest_file = "site.pp"
352
+ puppet.pp_path = "/var/tmp/puppet"
353
+ puppet.manifests_path = "puppet/manifests"
354
+ puppet.module_path = [ "puppet/modules" ,"puppet/my-modules"]
355
+ puppet.options = puppet_flags
356
+ end
357
+
358
+ ### Chef-solo provisioner
359
+
360
+ cookbooks_path
361
+ roles_path
362
+ provisioning_path
363
+ data_bags_path
364
+ json
365
+ json_erb
366
+ clean_after_run
367
+ roles
368
+
369
+ mccloud server is added to json
11
370
 
12
- Without those two, this project would not be possible. Kudos to the authors!
371
+ add_role(name)
372
+ add_recipe(name)
13
373
 
14
- This project tries to combine both:
15
- - Because your local machine might outgrow your complexity your local machine can handle
16
- - use the same vagrantfile for local dev, and cloud devel
374
+ # Read chef solo nodes files
375
+ require 'chef'
376
+ nodes = []
377
+ Dir["data_bags/node/*.json"].each do |n|
378
+ nodes << JSON.parse(IO.read(n))
379
+ end
17
380
 
18
- ## Some notes before you dive in
381
+ nodes.each do |n|
382
+ config.vm.define n.name do |vm_config|
383
+ vm_config.vm.provider = "host"
384
+ vm_config.vm.ip_address = n.automatic_attrs[:ipaddress]
385
+ vm_config.vm.user = n.automatic_attrs[:sudo_user]
19
386
 
20
- - I could probably have integrated with vagrant code but this would have taken me longer to understand vagrant code
21
- - I didn't want the dependency on virtualbox
22
- - The machines it creates will have the prefix as defined in the Mccloudfile, so this should not pollute your stuff
387
+ vm_config.vm.bootstrap = File.join("bootstrap","bootstrap-#{n.automatic_attrs[:platform]}.sh")
388
+ vm_config.vm.bootstrap_user = n.automatic_attrs[:bootstrap_user]
389
+ vm_config.vm.bootstrap_password = n.automatic_attrs[:bootstrap_password]
23
390
 
24
- ## Todo:
391
+ vm_config.vm.provision :chef_solo do |chef|
392
+ chef.cookbooks_path = [ "cookbooks", "site-cookbooks" ]
393
+ chef.roles_path = "roles"
394
+ chef.data_bags_path = "data_bags"
395
+ chef.clean_after_run = false
25
396
 
26
- - provision to other providers than ec2
27
- - try to stay fully compatible with Vagrantfile
397
+ chef.json.merge!(n.default_attrs)
398
+ chef.json.merge!(n.automatic_attrs)
399
+ chef.json.merge!(n.override_attrs)
28
400
 
29
- ## How it will work/works
401
+ chef.add_role n.chef_environment
402
+ chef.add_role n.automatic_attrs[:platform]
30
403
 
31
- ### Create a config file for fog. Note that these are spaces in front and no tabs
32
- $ cat $HOME/.fog
33
- <pre>
34
- :default:
35
- :aws_access_key_id: <your id here>
36
- :aws_secret_access_key: <your acess key here>
37
- </pre>
404
+ n.run_list.run_list_items.each do |r|
405
+ chef.add_role r.name if r.type == :role
406
+ chef.add_recipe r.name if r.type == :recipe
407
+ end
408
+ end #end provisioner
38
409
 
39
- ### Create a Mccloud project
40
- $ mccloud init
410
+ end #end vm define
411
+ end # nodes.each
41
412
 
42
- This will create a Mccloudfile
43
413
 
44
- ### Edit your Mccloud appropriate
414
+ # Using ips in erb json
415
+ chef.json.merge!({
416
+ :logger => {
417
+ :redis_host_ip => "<%= private_ips['frontend'] %>"
418
+ }
419
+ })
45
420
 
46
- <pre>
47
- Mccloud::Config.run do |config|
48
- # All Mccloud configuration is done here. For a detailed explanation
49
- # and listing of configuration options, please view the documentation
50
- # online.
421
+ # Defining a default node
422
+ def default_node(chef)
423
+ chef.add_recipe("ntp")
424
+ chef.add_recipe("timezone")
425
+ chef.json.merge!({
426
+ :nagios_host_ip => "<%= private_ips['monitoring'] %>",
427
+ :ruby => {
428
+ :version => "1.9.2",
429
+ :patch_level => "p180"}}
430
+ })
431
+ end
51
432
 
52
- config.mccloud.prefix="mccloud"
433
+ ### Shell provisioner
53
434
 
54
- config.vm.define :web do |web_config|
55
- web_config.vm.ami = "ami-cef405a7"
56
- web_config.vm.provider="AWS"
435
+ option command.sudo = true|false
57
436
 
58
- #web_config.vm.provisioner=:chef_solo
59
- #web_config.vm.provisioner=:puppet
437
+ config.vm.provision :shell do |command|
438
+ command.inline="uptime"
439
+ end
60
440
 
61
- web_config.vm.provider_options={
62
- # ID = "ami-cef405a7" = x64 Ubuntu 10.10
63
- :image_id => 'ami-cef405a7',
64
- # Flavors
65
- :flavor_id => 't1.micro',
66
- #:flavor_id => 'm1.large',
67
- :groups => %w(ec2securitygroup), :key_name => "ec2-keyname",
68
- :availability_zone => "us-east-1b"
69
- }
70
- web_config.vm.forward_port("http", 80, 8080)
71
- web_config.vm.user="ubuntu"
72
- web_config.vm.bootstrap="ruby-bootstrap.sh"
73
- web_config.vm.key="my-ec2-key.pem"
74
- end
441
+ config.vm.provision :shell do |command|
442
+ command.path="script.sh"
443
+ end
75
444
 
76
- ### Provisioners
77
- config.vm.provision :puppet do |puppet|
78
- puppet.pp_path = "/tmp/vagrant-puppet"
79
- #puppet.manifests_path = "puppet/manifests"
80
- #puppet.module_path = "puppet/modules"
81
- puppet.manifest_file = "newbox.pp"
82
- end
445
+ ## Usage
83
446
 
84
- config.vm.provision :chef_solo do |chef|
85
- chef.cookbooks_path = ["<your cookboopath>"]
86
- chef.add_recipe("<some recipe>")
87
- # You may also specify custom JSON attributes:
88
- chef.json.merge!({})
89
- end
90
- end
447
+ Some functions are there in the CLI, but they are left overs from previous coding sessions.
91
448
 
92
- </pre>
449
+ ### Mostly working
450
+ Tasks:
93
451
 
94
- ### Start your machines
95
- # If the machine does not yet exist, it will also run bootstrap
96
- $ mccloud up web
452
+ mccloud version # Prints the Mccloud version information
97
453
 
98
- ### Check the status
99
- $ mccloud status
454
+ mccloud bootstrap [NAME] [FILENAME] # Executes the bootstrap sequence
455
+ mccloud destroy [NAME] # Destroys the machine
456
+ mccloud forward [NAME] # Forwards ports from a machine to localhost
457
+ mccloud halt [NAME] # Shutdown the machine
458
+ mccloud help [TASK] # Describe available tasks or one specific task
459
+ mccloud image # Subcommand to manage images
460
+ mccloud up [NAME] # Starts the machine and provisions it
461
+ mccloud provision [NAME] # Provisions the machine
462
+ mccloud reload [NAME] # Reboots the machine
463
+ mccloud ssh [NAME] [COMMAND] # Ssh-shes into the box
464
+ mccloud status [name] # Shows the status of the current Mccloud environment
100
465
 
101
- ### Bootstrap the machine
102
- $ mccloud bootstrap web
466
+ mccloud lb # Subcommand to manage Loadbalancers
467
+ mccloud balance [LB-NAME] # Balances loadbalancers
468
+ mccloud sorry [LB-NAME] # Puts loadbalancers in a sorry state
103
469
 
104
- ### (interactive) Login into the machine
105
- $ mccloud ssh web
470
+ mccloud ip # Subcommand to manage IP's
471
+ mccloud ips [NAME] # Associate IP addresses
106
472
 
107
- ### run a command on a machine
108
- $ mccloud command web "who am i"
473
+ ### Experimental/Not checked
109
474
 
110
- ### Halt the machine
111
- $ mccloud halt web
475
+ mccloud define NAME TEMPLATE-NAME # Creates a new definition based on a tempate
476
+ mccloud init # Initializes a new Mccloud project
112
477
 
113
- ### Start the machine again
114
- $ mccloud up web
478
+ mccloud keypair # Subcommand to manage keypairs
479
+ mccloud keystore # Subcommand to manage keystores
115
480
 
116
- ### Provision the machine
117
- $ mccloud provision web
481
+ mccloud package [NAME] # Packages the machine
482
+ mccloud template # Subcommand to manage templates
483
+ mccloud vm # Subcommand to manage vms
118
484
 
119
- ### Port forwarding server
120
- $ mccloud server
121
485
 
122
- ### Destroy the machine again
123
- $ mccloud destroy web
486
+ # DISCLAIMER:
487
+ this is eternal beta sofware . Don't trust it:) And don't complain if it removes all your EC instances at once....
data/Rakefile CHANGED
@@ -1,5 +1,32 @@
1
- require 'rubygems'
2
- require 'bundler'
3
1
  require 'bundler/setup'
4
2
  Bundler::GemHelper.install_tasks
5
3
 
4
+ #desc 'Default: run tests'
5
+ #task :default => :test
6
+
7
+ require 'rake'
8
+ require 'rspec/core/rake_task'
9
+ require 'rake/testtask'
10
+
11
+
12
+ desc 'Tests not requiring an real box'
13
+ Rake::TestTask.new do |t|
14
+ t.libs << "test"
15
+ t.pattern = 'test/**/*_test.rb'
16
+ end
17
+
18
+ desc 'Tests requiring an real providers'
19
+ Rake::TestTask.new do |t|
20
+ t.name="realtest"
21
+ t.libs << "test"
22
+ t.pattern = 'test/**/*_realtest.rb'
23
+ end
24
+
25
+
26
+ desc 'Specs'
27
+ RSpec::Core::RakeTask.new(:spec) do |t|
28
+ t.pattern = './spec/**/*_spec.rb' # don't need this, it's default
29
+ t.verbose = true
30
+ #t.rspec_opts = "--format documentation --color"
31
+ # Put spec opts in a file named .rspec in root
32
+ end