mccloud 0.0.13 → 0.0.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.gitignore +13 -8
- data/.rvmrc +2 -0
- data/Gemfile +10 -1
- data/Guardfile +10 -0
- data/README.md +453 -89
- data/Rakefile +29 -2
- data/bin/mccloud +17 -116
- data/bin/mccloud_old +159 -0
- data/doc/old-README.md +81 -0
- data/lib/mccloud/cli.rb +55 -0
- data/lib/mccloud/command/balance.rb +21 -0
- data/lib/mccloud/command/base.rb +106 -0
- data/lib/mccloud/command/bootstrap.rb +12 -24
- data/lib/mccloud/command/define.rb +18 -0
- data/lib/mccloud/command/destroy.rb +12 -13
- data/lib/mccloud/command/forward.rb +29 -0
- data/lib/mccloud/command/group_base.rb +107 -0
- data/lib/mccloud/command/halt.rb +11 -13
- data/lib/mccloud/command/helpers.rb +13 -0
- data/lib/mccloud/command/image.rb +37 -0
- data/lib/mccloud/command/init.rb +8 -504
- data/lib/mccloud/command/init_vagrant.rb +14 -0
- data/lib/mccloud/command/ip.rb +32 -0
- data/lib/mccloud/command/ips.rb +22 -0
- data/lib/mccloud/command/keypair.rb +27 -0
- data/lib/mccloud/command/keystore.rb +29 -0
- data/lib/mccloud/command/lb.rb +38 -0
- data/lib/mccloud/command/named_base.rb +14 -0
- data/lib/mccloud/command/package.rb +17 -0
- data/lib/mccloud/command/provider.rb +30 -0
- data/lib/mccloud/command/provision.rb +10 -24
- data/lib/mccloud/command/reload.rb +12 -6
- data/lib/mccloud/command/sorry.rb +20 -0
- data/lib/mccloud/command/ssh.rb +11 -45
- data/lib/mccloud/command/status.rb +14 -35
- data/lib/mccloud/command/template.rb +16 -0
- data/lib/mccloud/command/undefine.rb +23 -0
- data/lib/mccloud/command/up.rb +8 -62
- data/lib/mccloud/command/version.rb +14 -0
- data/lib/mccloud/command/vm.rb +27 -0
- data/lib/mccloud/command.rb +36 -0
- data/lib/mccloud/config/collection.rb +107 -0
- data/lib/mccloud/config/component.rb +20 -0
- data/lib/mccloud/config/definition.rb +35 -0
- data/lib/mccloud/config/keypair.rb +36 -0
- data/lib/mccloud/config/mccloud.rb +39 -0
- data/lib/mccloud/config/provider.rb +55 -0
- data/lib/mccloud/config/template.rb +35 -0
- data/lib/mccloud/config.rb +128 -41
- data/lib/mccloud/definition.rb +104 -0
- data/lib/mccloud/definitions.rb +91 -0
- data/lib/mccloud/environment.rb +222 -0
- data/lib/mccloud/error.rb +20 -0
- data/lib/mccloud/generator.rb +49 -0
- data/lib/mccloud/keypair.rb +48 -0
- data/lib/mccloud/mccloudfile.rb +78 -0
- data/lib/mccloud/provider/aws/image.rb +107 -0
- data/lib/mccloud/provider/aws/ip/associate.rb +33 -0
- data/lib/mccloud/provider/aws/ip.rb +31 -0
- data/lib/mccloud/provider/aws/keystore.rb +21 -0
- data/lib/mccloud/provider/aws/lb/associate.rb +53 -0
- data/lib/mccloud/provider/aws/lb/sorry.rb +14 -0
- data/lib/mccloud/provider/aws/lb.rb +37 -0
- data/lib/mccloud/provider/aws/provider/image_destroy.rb +27 -0
- data/lib/mccloud/provider/aws/provider/image_list.rb +19 -0
- data/lib/mccloud/provider/aws/provider/ip_list.rb +17 -0
- data/lib/mccloud/provider/aws/provider/keystore_list.rb +22 -0
- data/lib/mccloud/provider/aws/provider/keystore_sync.rb +62 -0
- data/lib/mccloud/provider/aws/provider/lb_list.rb +21 -0
- data/lib/mccloud/provider/aws/provider/old_deregister.rb +39 -0
- data/lib/mccloud/provider/aws/provider/old_flavors.rb +18 -0
- data/lib/mccloud/provider/aws/provider/old_ips.rb +42 -0
- data/lib/mccloud/provider/aws/provider/old_loadbalance.rb +46 -0
- data/lib/mccloud/provider/aws/provider/old_package.rb +75 -0
- data/lib/mccloud/provider/aws/provider/old_sorry.rb +51 -0
- data/lib/mccloud/provider/aws/provider/old_status.rb +119 -0
- data/lib/mccloud/provider/aws/provider/old_validate.rb +51 -0
- data/lib/mccloud/provider/aws/provider/status.rb +58 -0
- data/lib/mccloud/provider/aws/provider.rb +219 -0
- data/lib/mccloud/provider/aws/stack/old_destroy.rb +43 -0
- data/lib/mccloud/provider/aws/stack/old_up.rb +59 -0
- data/lib/mccloud/provider/aws/stack/old_vm.rb +98 -0
- data/lib/mccloud/provider/aws/stack.rb +243 -0
- data/lib/mccloud/provider/aws/vm/bootstrap.rb +13 -0
- data/lib/mccloud/provider/aws/vm/destroy.rb +21 -0
- data/lib/mccloud/provider/aws/vm/forward.rb +17 -0
- data/lib/mccloud/provider/aws/vm/halt.rb +24 -0
- data/lib/mccloud/provider/aws/vm/package.rb +63 -0
- data/lib/mccloud/provider/aws/vm/provision.rb +25 -0
- data/lib/mccloud/provider/aws/vm/reload.rb +13 -0
- data/lib/mccloud/provider/aws/vm/resume.rb +0 -0
- data/lib/mccloud/provider/aws/vm/rsync.rb +11 -0
- data/lib/mccloud/provider/aws/vm/scp.rb +21 -0
- data/lib/mccloud/provider/aws/vm/ssh.rb +11 -0
- data/lib/mccloud/provider/aws/vm/suspend.rb +0 -0
- data/lib/mccloud/provider/aws/vm/up.rb +133 -0
- data/lib/mccloud/provider/aws/vm.rb +123 -0
- data/lib/mccloud/{type → provider/core}/forwarding.rb +6 -3
- data/lib/mccloud/provider/core/ip.rb +24 -0
- data/lib/mccloud/provider/core/keystore.rb +23 -0
- data/lib/mccloud/provider/core/lb.rb +23 -0
- data/lib/mccloud/provider/core/provider.rb +99 -0
- data/lib/mccloud/provider/core/vm/old_halt.rb +19 -0
- data/lib/mccloud/{generators.rb → provider/core/vm/old_init.rb} +0 -0
- data/lib/mccloud/provider/core/vm/old_multi.rb +60 -0
- data/lib/mccloud/provider/core/vm/old_reload.rb +11 -0
- data/lib/mccloud/{command/server.rb → provider/core/vm/old_server.rb} +2 -2
- data/lib/mccloud/provider/core/vm/old_ssh_command.rb +21 -0
- data/lib/mccloud/{command/suspend.rb → provider/core/vm/old_suspend.rb} +2 -2
- data/lib/mccloud/provider/core/vm/old_wizard.rb +511 -0
- data/lib/mccloud/provider/core/vm/rsync.rb +67 -0
- data/lib/mccloud/provider/core/vm/ssh.rb +137 -0
- data/lib/mccloud/provider/core/vm/ssh_bootstrap.rb +62 -0
- data/lib/mccloud/provider/core/vm/ssh_forward.rb +47 -0
- data/lib/mccloud/provider/core/vm.rb +121 -0
- data/lib/mccloud/provider/fog/fogconfig.rb +44 -0
- data/lib/mccloud/provider/fog/provider.rb +46 -0
- data/lib/mccloud/provider/host/provider/status.rb +12 -0
- data/lib/mccloud/provider/host/provider.rb +85 -0
- data/lib/mccloud/provider/host/vm/bootstrap.rb +11 -0
- data/lib/mccloud/provider/host/vm/forward.rb +12 -0
- data/lib/mccloud/provider/host/vm/provision.rb +19 -0
- data/lib/mccloud/provider/host/vm/scp.rb +35 -0
- data/lib/mccloud/provider/host/vm/ssh.rb +11 -0
- data/lib/mccloud/provider/host/vm.rb +28 -0
- data/lib/mccloud/provider/libvirt/provider/status.rb +43 -0
- data/lib/mccloud/provider/libvirt/provider.rb +96 -0
- data/lib/mccloud/provider/libvirt/vm/bootstrap.rb +17 -0
- data/lib/mccloud/provider/libvirt/vm/destroy.rb +33 -0
- data/lib/mccloud/provider/libvirt/vm/forward.rb +12 -0
- data/lib/mccloud/provider/libvirt/vm/halt.rb +20 -0
- data/lib/mccloud/provider/libvirt/vm/provision.rb +25 -0
- data/lib/mccloud/provider/libvirt/vm/reload.rb +13 -0
- data/lib/mccloud/provider/libvirt/vm/rsync.rb +11 -0
- data/lib/mccloud/provider/libvirt/vm/scp.rb +15 -0
- data/lib/mccloud/provider/libvirt/vm/ssh.rb +11 -0
- data/lib/mccloud/provider/libvirt/vm/up.rb +65 -0
- data/lib/mccloud/provider/libvirt/vm.rb +67 -0
- data/lib/mccloud/provider/script/provider/status.rb +12 -0
- data/lib/mccloud/provider/script/provider.rb +125 -0
- data/lib/mccloud/provider/script/vm.rb +13 -0
- data/lib/mccloud/provider/vagrant/provider/status.rb +14 -0
- data/lib/mccloud/provider/vagrant/provider.rb +135 -0
- data/lib/mccloud/provider/vagrant/vm/destroy.rb +11 -0
- data/lib/mccloud/provider/vagrant/vm/forward.rb +12 -0
- data/lib/mccloud/provider/vagrant/vm/halt.rb +11 -0
- data/lib/mccloud/provider/vagrant/vm/provision.rb +11 -0
- data/lib/mccloud/provider/vagrant/vm/reload.rb +11 -0
- data/lib/mccloud/provider/vagrant/vm/resume.rb +11 -0
- data/lib/mccloud/provider/vagrant/vm/ssh.rb +11 -0
- data/lib/mccloud/provider/vagrant/vm/suspend.rb +11 -0
- data/lib/mccloud/provider/vagrant/vm/up.rb +11 -0
- data/lib/mccloud/provider/vagrant/vm.rb +46 -0
- data/lib/mccloud/provider/vmfusion/provider/status.rb +24 -0
- data/lib/mccloud/provider/vmfusion/provider.rb +98 -0
- data/lib/mccloud/provider/vmfusion/vm/forward.rb +12 -0
- data/lib/mccloud/provider/vmfusion/vm/halt.rb +11 -0
- data/lib/mccloud/provider/vmfusion/vm/resume.rb +11 -0
- data/lib/mccloud/provider/vmfusion/vm/suspend.rb +11 -0
- data/lib/mccloud/provider/vmfusion/vm/up.rb +11 -0
- data/lib/mccloud/provider/vmfusion/vm.rb +47 -0
- data/lib/mccloud/provisioner/chef_solo.rb +193 -79
- data/lib/mccloud/provisioner/puppet.rb +205 -32
- data/lib/mccloud/provisioner/shell.rb +48 -0
- data/lib/mccloud/template.rb +74 -0
- data/lib/mccloud/templates/Mccloudfile.erb +212 -39
- data/lib/mccloud/templates/{bootstrap-centos-rubysource-1.8.7.sh → bootstrap/bootstrap-centos-rubysource-1.8.7.sh} +0 -0
- data/lib/mccloud/templates/{bootstrap-centos-rvm-1.8.7.sh → bootstrap/bootstrap-centos-rvm-1.8.7.sh} +0 -0
- data/lib/mccloud/templates/{bootstrap-centos-rvm-1.9.2.sh → bootstrap/bootstrap-centos-rvm-1.9.2.sh} +0 -0
- data/lib/mccloud/templates/{bootstrap-centos-rvm-ree-1.8.7.sh → bootstrap/bootstrap-centos-rvm-ree-1.8.7.sh} +0 -0
- data/lib/mccloud/templates/bootstrap/bootstrap-chef-omnibus.sh +8 -0
- data/lib/mccloud/templates/{bootstrap-custom.sh → bootstrap/bootstrap-custom.sh} +0 -0
- data/lib/mccloud/templates/{bootstrap-ubuntu-rvm-1.8.7.sh → bootstrap/bootstrap-ubuntu-rvm-1.8.7.sh} +0 -0
- data/lib/mccloud/templates/{bootstrap-ubuntu-system.sh → bootstrap/bootstrap-ubuntu-system.sh} +0 -0
- data/lib/mccloud/templates/locales/en.yml +30 -0
- data/lib/mccloud/templates/vm.erb +9 -0
- data/lib/mccloud/templates.rb +35 -0
- data/lib/mccloud/ui.rb +82 -0
- data/lib/mccloud/util/rostruct.rb +24 -0
- data/lib/mccloud/util/rsync.rb +12 -8
- data/lib/mccloud/util/ssh.rb +18 -12
- data/lib/mccloud/util/sshkey.rb +3 -2
- data/lib/mccloud/version.rb +4 -1
- data/lib/mccloud/vm.rb +62 -0
- data/lib/mccloud/vms.rb +60 -0
- data/lib/mccloud.rb +24 -1
- data/mccloud.gemspec +12 -3
- data/samples/Mccloudfile +117 -0
- data/samples/bitnami_drupal_cloud.json +102 -0
- data/samples/bootstrap-ubuntu-system.sh +16 -0
- data/samples/mcollective_cloud.json +198 -0
- data/samples/stack_cloud.json +93 -0
- data/samples/stacks.txt +5 -0
- data/spec/commands/define_spec.rb +96 -0
- data/spec/commands/init_spec.rb +30 -0
- data/spec/environment/environment_spec.rb +26 -0
- data/spec/generator_spec.rb +30 -0
- data/spec/keypair_spec.rb +38 -0
- data/spec/provider/aws/credentials_spec.rb +37 -0
- data/spec/provisioner/puppet/Mccloud-puppet-test +32 -0
- data/spec/provisioner/puppet/puppet_spec.rb +110 -0
- data/spec/spec_helper.rb +0 -0
- data/templates/ubuntu-10.10-server-amd64/aws.json +3 -0
- data/templates/ubuntu-10.10-server-amd64/bootstrap.sh +16 -0
- data/templates/ubuntu-10.10-server-amd64/definition.old +51 -0
- data/templates/ubuntu-10.10-server-amd64/mccloud.erb +6 -0
- metadata +293 -67
- data/Gemfile.lock +0 -53
- data/lib/mccloud/command/boot.rb +0 -12
- data/lib/mccloud/command/command.rb +0 -21
- data/lib/mccloud/command/multi.rb +0 -60
- data/lib/mccloud/configurator/lb.rb +0 -26
- data/lib/mccloud/configurator/mccloud.rb +0 -33
- data/lib/mccloud/configurator/vm.rb +0 -37
- data/lib/mccloud/provisioner/vagrant/base.rb +0 -63
- data/lib/mccloud/provisioner/vagrant/chef.rb +0 -130
- data/lib/mccloud/provisioner/vagrant/chef_server.rb +0 -103
- data/lib/mccloud/provisioner/vagrant/chef_solo.rb +0 -142
- data/lib/mccloud/provisioner/vagrant/puppet.rb +0 -137
- data/lib/mccloud/provisioner/vagrant/puppet_server.rb +0 -55
- data/lib/mccloud/provisioner/vagrant/shell.rb +0 -52
- data/lib/mccloud/session.rb +0 -206
- data/lib/mccloud/type/lb.rb +0 -34
- data/lib/mccloud/type/vm.rb +0 -47
- data/lib/mccloud/util/iterator.rb +0 -20
data/.gitignore
CHANGED
|
@@ -1,9 +1,14 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
/
|
|
8
|
-
|
|
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
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
|
-
|
|
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
|
-
|
|
6
|
-
|
|
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
|
-
|
|
371
|
+
add_role(name)
|
|
372
|
+
add_recipe(name)
|
|
13
373
|
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
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
|
-
|
|
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
|
-
|
|
21
|
-
|
|
22
|
-
|
|
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
|
-
|
|
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
|
-
|
|
27
|
-
|
|
397
|
+
chef.json.merge!(n.default_attrs)
|
|
398
|
+
chef.json.merge!(n.automatic_attrs)
|
|
399
|
+
chef.json.merge!(n.override_attrs)
|
|
28
400
|
|
|
29
|
-
|
|
401
|
+
chef.add_role n.chef_environment
|
|
402
|
+
chef.add_role n.automatic_attrs[:platform]
|
|
30
403
|
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
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
|
-
|
|
40
|
-
|
|
410
|
+
end #end vm define
|
|
411
|
+
end # nodes.each
|
|
41
412
|
|
|
42
|
-
This will create a Mccloudfile
|
|
43
413
|
|
|
44
|
-
|
|
414
|
+
# Using ips in erb json
|
|
415
|
+
chef.json.merge!({
|
|
416
|
+
:logger => {
|
|
417
|
+
:redis_host_ip => "<%= private_ips['frontend'] %>"
|
|
418
|
+
}
|
|
419
|
+
})
|
|
45
420
|
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
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
|
-
|
|
433
|
+
### Shell provisioner
|
|
53
434
|
|
|
54
|
-
|
|
55
|
-
web_config.vm.ami = "ami-cef405a7"
|
|
56
|
-
web_config.vm.provider="AWS"
|
|
435
|
+
option command.sudo = true|false
|
|
57
436
|
|
|
58
|
-
|
|
59
|
-
|
|
437
|
+
config.vm.provision :shell do |command|
|
|
438
|
+
command.inline="uptime"
|
|
439
|
+
end
|
|
60
440
|
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
449
|
+
### Mostly working
|
|
450
|
+
Tasks:
|
|
93
451
|
|
|
94
|
-
|
|
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
|
-
|
|
99
|
-
|
|
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
|
-
|
|
102
|
-
|
|
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
|
-
|
|
105
|
-
|
|
470
|
+
mccloud ip # Subcommand to manage IP's
|
|
471
|
+
mccloud ips [NAME] # Associate IP addresses
|
|
106
472
|
|
|
107
|
-
###
|
|
108
|
-
$ mccloud command web "who am i"
|
|
473
|
+
### Experimental/Not checked
|
|
109
474
|
|
|
110
|
-
|
|
111
|
-
|
|
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
|
-
|
|
114
|
-
|
|
478
|
+
mccloud keypair # Subcommand to manage keypairs
|
|
479
|
+
mccloud keystore # Subcommand to manage keystores
|
|
115
480
|
|
|
116
|
-
|
|
117
|
-
|
|
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
|
-
|
|
123
|
-
|
|
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
|