mccloud 0.0.13 → 0.0.14
Sign up to get free protection for your applications and to get access to all the features.
- 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
@@ -0,0 +1,74 @@
|
|
1
|
+
module Mccloud
|
2
|
+
class Template
|
3
|
+
attr_accessor :file
|
4
|
+
attr_accessor :erb
|
5
|
+
attr_accessor :params
|
6
|
+
attr_accessor :author
|
7
|
+
attr_accessor :bootstrap
|
8
|
+
|
9
|
+
attr_accessor :name
|
10
|
+
attr_accessor :env
|
11
|
+
|
12
|
+
def initialize(name,env)
|
13
|
+
@name=name
|
14
|
+
@env=env
|
15
|
+
|
16
|
+
@erb=true
|
17
|
+
@file=nil
|
18
|
+
@params=Hash.new
|
19
|
+
@author="No author specified"
|
20
|
+
@bootstrap=nil
|
21
|
+
end
|
22
|
+
|
23
|
+
def path
|
24
|
+
File.join(@env.config.templates.path,@name)
|
25
|
+
end
|
26
|
+
|
27
|
+
def exists?
|
28
|
+
File.directory?(self.path)
|
29
|
+
end
|
30
|
+
|
31
|
+
# Bindings in ERB http://www.stuartellis.eu/articles/erb/
|
32
|
+
# Links:
|
33
|
+
# * Trimming whitespace in ERB
|
34
|
+
# http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-talk/242656
|
35
|
+
# * Appending to ERB output
|
36
|
+
# http://blog.jayfields.com/2007/01/appending-to-erb-output-from-block.html
|
37
|
+
def comment(flag)
|
38
|
+
cur_pos=@output.length
|
39
|
+
yield
|
40
|
+
new_pos=@output.length
|
41
|
+
if flag
|
42
|
+
|
43
|
+
# Extraxt the block
|
44
|
+
block_text=@output[cur_pos..new_pos]
|
45
|
+
|
46
|
+
# Remove the block
|
47
|
+
@output[cur_pos..new_pos]=''
|
48
|
+
|
49
|
+
# Comment the block, with leading spaces into account
|
50
|
+
block_text.gsub!(/^(\s)*/,'\1# ')
|
51
|
+
|
52
|
+
# Re-insert the block
|
53
|
+
@output=@output.insert cur_pos, block_text
|
54
|
+
end
|
55
|
+
|
56
|
+
end
|
57
|
+
|
58
|
+
def to_s
|
59
|
+
"Template #{name}"
|
60
|
+
end
|
61
|
+
|
62
|
+
def to_template(vm_name="noname")
|
63
|
+
result=""
|
64
|
+
filename=@file
|
65
|
+
env.logger.info "Opening template file #{@file}"
|
66
|
+
if File.exists?(filename)
|
67
|
+
template=File.new(filename).read
|
68
|
+
result=ERB.new(template,nil,"-","@output").result(binding)
|
69
|
+
end
|
70
|
+
return result
|
71
|
+
end
|
72
|
+
|
73
|
+
end
|
74
|
+
end
|
@@ -1,46 +1,219 @@
|
|
1
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="<%= mcPrefix %>"
|
7
|
-
config.mccloud.environment="<%= mcEnvironment %>"
|
8
|
-
config.mccloud.identity="<%= mcIdentity %>"
|
9
|
-
|
10
|
-
config.vm.define "<%= serverName %>" do |<%= serverName %>_config|
|
11
|
-
<%= serverName %>_config.vm.provider="<%= providerId %>"
|
12
|
-
|
13
|
-
#<%= serverName %>_config.vm.provisioner=:chef_solo
|
14
|
-
#<%= serverName %>_config.vm.provisioner=:puppet
|
15
|
-
<%= serverName %>_config.vm.provider_options={
|
16
|
-
# ID = "<%= imageId%>" = <%= imageDescription %>
|
17
|
-
:image_id => "<%= imageId %>" ,
|
18
|
-
:flavor_id => "<%= flavorId %>",
|
19
|
-
:groups => %w(<%= securityGroup %>),
|
20
|
-
:key_name => "<%= keyName %>",
|
21
|
-
:availability_zone => "<%= availabilityZone %>"
|
22
|
-
}
|
23
|
-
#Forward 80 remote to localport 8080
|
24
|
-
<%= serverName %>_config.vm.forward_port("http", 8080, 80)
|
25
|
-
<%= serverName %>_config.vm.user="<%= userName %>"
|
26
|
-
<%= serverName %>_config.vm.bootstrap="<%= bootstrapScript %>"
|
27
|
-
<%= serverName %>_config.vm.private_key="<%= privateKeyPath %>"
|
28
|
-
<%= serverName %>_config.vm.public_key="<%= publicKeyPath %>"
|
29
2
|
|
3
|
+
#############################################################
|
4
|
+
## ** Provider Section ** - list alls keys to be used
|
5
|
+
#############################################################
|
6
|
+
|
7
|
+
######
|
8
|
+
## Example Amazon provider
|
9
|
+
## Defines a provider called aws-us-east
|
10
|
+
## Note 1: specify a provider with a different name for each region you need
|
11
|
+
## Note 2: you need to have a valid .fog file with the correct key and secret-key
|
12
|
+
|
13
|
+
config.provider.define "aws-us-east" do |provider_config|
|
14
|
+
provider_config.provider.flavor = :aws
|
15
|
+
|
16
|
+
#Note: this are option provided to fog for creation
|
17
|
+
provider_config.provider.options = { }
|
18
|
+
|
19
|
+
# Region in which to create the VM
|
20
|
+
provider_config.provider.region = "us-east-1"
|
21
|
+
|
22
|
+
## Check if necessary keypairs exist
|
23
|
+
## To speed things up, set it to false
|
24
|
+
provider_config.provider.check_keypairs = true
|
25
|
+
|
26
|
+
## Disable check if required security groups exist
|
27
|
+
## To speed things up, set it to false
|
28
|
+
provider_config.provider.check_security_groups = true
|
29
|
+
|
30
|
+
## If you share an amazon account with multiple people
|
31
|
+
## You can use namespaces to separate resources
|
32
|
+
## All resources will take this prefix
|
33
|
+
provider_config.provider.namespace = "mccloud-development"
|
30
34
|
end
|
31
35
|
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
#puppet.module_path = "puppet/modules"
|
37
|
-
puppet.manifest_file = "newbox.pp"
|
36
|
+
######
|
37
|
+
## Generic provider to manage host reachable by ssh
|
38
|
+
config.provider.define "hosts" do |provider_config|
|
39
|
+
provider_config.provider.flavor = :host
|
38
40
|
end
|
39
41
|
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
42
|
+
#############################################################
|
43
|
+
## ** Key Section ** - list alls keys to be used
|
44
|
+
#############################################################
|
45
|
+
## Default is :
|
46
|
+
## - keyname = mccloud
|
47
|
+
## - location = in $HOME directory
|
48
|
+
## - private key_path = $HOME/mccloud_rsa
|
49
|
+
## - public key_path = $HOME/mccloud_rsa.pub
|
50
|
+
##
|
51
|
+
## Note 1: keys can be generated with '$ mccloud sshkeygen'
|
52
|
+
## Note 2: Amazon only supports RSA keys
|
53
|
+
## Note 3: You can have multiple keypair listed here
|
54
|
+
#############################################################
|
55
|
+
|
56
|
+
config.keypair.define "mccloud" do |key_config|
|
57
|
+
key_config.keypair.public_key_path = "#{File.join(ENV['HOME'],'.ssh','mccloud_rsa.pub')}"
|
58
|
+
key_config.keypair.private_key_path = "#{File.join(ENV['HOME'],'.ssh','mccloud_rsa')}"
|
59
|
+
end
|
60
|
+
|
61
|
+
#############################################################
|
62
|
+
## ** Key Store ** - defines a location to store keys in
|
63
|
+
#############################################################
|
64
|
+
##
|
65
|
+
## Defines a keystore provided by provider "aws-us-east"
|
66
|
+
## And specifies the keypair(s) to be stored in that keystore
|
67
|
+
## Note 1: this only handles creation, removal of keys needs to be done manual
|
68
|
+
##
|
69
|
+
## :name => "the name as visible on EC2"
|
70
|
+
## :pairname=> "the name specified in the Key Section of this config file"
|
71
|
+
#############################################################
|
72
|
+
|
73
|
+
<% uncomment([:aws]) do %>
|
74
|
+
config.keystore.define "aws-us-east-key-store" do |keystore_config|
|
75
|
+
keystore_config.keystore.provider = "aws-us-east"
|
76
|
+
keystore_config.keystore.keypairs = [
|
77
|
+
# :name is the name as it will be displayed on amazon
|
78
|
+
# :keypair is the named as defined above
|
79
|
+
{ :name => "mccloud-key", :keypair => "mccloud"},
|
80
|
+
]
|
81
|
+
end
|
82
|
+
<% end %>
|
83
|
+
|
84
|
+
#############################################################
|
85
|
+
## ** Server section ** Specifies server options
|
86
|
+
##
|
87
|
+
## Note: Loosely modelled after Vagrantfile syntax, but not compatible
|
88
|
+
#############################################################
|
89
|
+
|
90
|
+
config.vm.define "<%= @vm_name %>" do |vm_config|
|
91
|
+
|
92
|
+
# Provider to use for creating this vm
|
93
|
+
vm_config.vm.provider = "aws-us-east"
|
94
|
+
|
95
|
+
# AMI to use for creating the vm
|
96
|
+
vm_config.vm.ami = "ami-cef405a7"
|
97
|
+
|
98
|
+
# Flavor of the vm
|
99
|
+
vm_config.vm.flavor = "t1.micro"
|
100
|
+
|
101
|
+
# Availability zone to create the VM
|
102
|
+
vm_config.vm.zone = "us-east-1a"
|
103
|
+
|
104
|
+
# Security groups
|
105
|
+
# Note: if it starts with mccloud, it will be autocreated and port 22 will be opened
|
106
|
+
# Note: you can supply your own but you have to create these manual and open port 22
|
107
|
+
vm_config.vm.security_groups = [ "mccloud"]
|
108
|
+
|
109
|
+
# Options required
|
110
|
+
# There are directly passed to fog create
|
111
|
+
vm_config.vm.create_options = { }
|
112
|
+
|
113
|
+
# User to log into the new VM created
|
114
|
+
vm_config.vm.user = "ubuntu"
|
115
|
+
|
116
|
+
# Path to script to execute before provisioners are run
|
117
|
+
# Only run on vm creation
|
118
|
+
vm_config.vm.bootstrap = "samples/bootstrap-ubuntu-system.sh"
|
119
|
+
|
120
|
+
# Name of the key pair to use to login
|
121
|
+
vm_config.vm.key_name = "mccloud-key"
|
122
|
+
|
123
|
+
# Files to ssh into the create vm
|
124
|
+
vm_config.vm.private_key_path = "#{File.join(ENV['HOME'],'.ssh','mccloud_rsa')}"
|
125
|
+
|
126
|
+
# If no server is specified in mccloud subcommands,
|
127
|
+
# It will go over all server
|
128
|
+
# Setting auto_selection to false, will not include this server
|
129
|
+
vm_config.vm.auto_selection = false
|
130
|
+
|
131
|
+
# ###
|
132
|
+
# ### Server Provisioners
|
133
|
+
# ### Mccloud supports 3 provisioners : :chef_solo, :puppet , and :shell
|
134
|
+
# ### Note: if multiple are provided, they are run in the sequence as described in the vm_config file
|
135
|
+
# ###
|
136
|
+
#
|
137
|
+
# ##
|
138
|
+
# ## Sample chef solo provider
|
139
|
+
# ##
|
140
|
+
# vm_config.vm.provision :chef_solo do |chef|
|
141
|
+
# # Path to load cookbooks of
|
142
|
+
# chef.cookbooks_path = ["chefrepo/cookbooks","chefrepo/site-cookbooks"]
|
143
|
+
#
|
144
|
+
# # Level to pass on the chef server
|
145
|
+
# chef.log_level = "info"
|
146
|
+
#
|
147
|
+
# ## Add recipes to the runlist
|
148
|
+
# ## Can be specified multiple times
|
149
|
+
# chef.add_recipe "apache2"
|
150
|
+
#
|
151
|
+
# ## Note you can use ERB inside the json block
|
152
|
+
# ## :private_demo1_ip => "<%%= private_ips['awsdemo1'] %>"
|
153
|
+
# ## :public_demo2_ip=> "<%%= public_ips['awsdemo1'] %>"
|
154
|
+
# chef.json.merge!( {
|
155
|
+
# })
|
156
|
+
# end
|
157
|
+
#
|
158
|
+
# ##
|
159
|
+
# ## Sample puppet provider
|
160
|
+
# ##
|
161
|
+
vm_config.vm.provision :puppet do |puppet|
|
162
|
+
puppet.manifest_file = "aws-demo1.pp"
|
163
|
+
# puppet.manifest_path = "manifests"
|
164
|
+
# puppet.modules_path = ["modules"]
|
165
|
+
end
|
166
|
+
#
|
167
|
+
# ##
|
168
|
+
# ## Sample script provider
|
169
|
+
# ##
|
170
|
+
# vm_config.vm.provision :shell do |command|
|
171
|
+
# # Either provide the command to run inline
|
172
|
+
# command.inline = ""
|
173
|
+
# # Or provide the path to a local script to be executed remotely
|
174
|
+
# command.path = "myscript.sh"
|
175
|
+
# end
|
176
|
+
|
45
177
|
end
|
46
|
-
|
178
|
+
|
179
|
+
|
180
|
+
##
|
181
|
+
# ## Example on how to use the host provider for a server
|
182
|
+
# ##
|
183
|
+
# vm_config.vm.define "myserver" do |vm_config|
|
184
|
+
# vm_config.vm.provider=:hosts
|
185
|
+
# # Ip address or hostname that resolves
|
186
|
+
# vm_config.vm.ip_address="www.myserver.com"
|
187
|
+
# # Login in with user ubuntu on the remote server
|
188
|
+
# vm_config.vm.user="ubuntu"
|
189
|
+
# # Forward some ports between remote and local
|
190
|
+
# # example remote port = 80, local port 8080
|
191
|
+
# # Used by 'mccloud server' command
|
192
|
+
# vm_config.vm.forward_port("webport",8080,80)
|
193
|
+
#
|
194
|
+
# # Example provisioner via shell commands
|
195
|
+
# vm_config.vm.provision :shell do |command|
|
196
|
+
# command.inline="who am i"
|
197
|
+
# end
|
198
|
+
# end
|
199
|
+
|
200
|
+
#############################################################
|
201
|
+
## ** Non-server section
|
202
|
+
## Currently only had loadbalancer and ip-address for EC2
|
203
|
+
#############################################################
|
204
|
+
|
205
|
+
# config.lb.define "mccloud-development-lb" do |config|
|
206
|
+
# config.lb.provider="aws-eu-east"
|
207
|
+
# config.lb.members=["aws-demo1","aws-demo1"]
|
208
|
+
# config.lb.sorry_members=["aws-demo2"]
|
209
|
+
# end
|
210
|
+
#
|
211
|
+
# config.ip.define "mccloud-demo1" do |config|
|
212
|
+
# config.ip.provider="aws-eu-west"
|
213
|
+
# config.ip.address="46.137.72.170"
|
214
|
+
# config.ip.vmname = "aws-demo1"
|
215
|
+
# end
|
216
|
+
|
217
|
+
|
218
|
+
|
219
|
+
end # End Mccloud
|
File without changes
|
data/lib/mccloud/templates/{bootstrap-centos-rvm-1.8.7.sh → bootstrap/bootstrap-centos-rvm-1.8.7.sh}
RENAMED
File without changes
|
data/lib/mccloud/templates/{bootstrap-centos-rvm-1.9.2.sh → bootstrap/bootstrap-centos-rvm-1.9.2.sh}
RENAMED
File without changes
|
File without changes
|
File without changes
|
data/lib/mccloud/templates/{bootstrap-ubuntu-rvm-1.8.7.sh → bootstrap/bootstrap-ubuntu-rvm-1.8.7.sh}
RENAMED
File without changes
|
data/lib/mccloud/templates/{bootstrap-ubuntu-system.sh → bootstrap/bootstrap-ubuntu-system.sh}
RENAMED
File without changes
|
@@ -0,0 +1,30 @@
|
|
1
|
+
en:
|
2
|
+
mccloud:
|
3
|
+
general:
|
4
|
+
creating_home_dir: "Creating home directory since it doesn't exist: %{directory}"
|
5
|
+
moving_home_dir: "Moving old Vagrant home directory to new location: %{directory}"
|
6
|
+
home_dir_migration_failed: |-
|
7
|
+
Both an old and new Vagrant home directory exist. Only the new one will
|
8
|
+
be used. Please merge the old directory into the new directory if you'd
|
9
|
+
like to use the old data as well.
|
10
|
+
|
11
|
+
Old: %{old}
|
12
|
+
New: %{new}
|
13
|
+
|
14
|
+
#-------------------------------------------------------------------------------
|
15
|
+
# Translations for exception classes
|
16
|
+
#-------------------------------------------------------------------------------
|
17
|
+
errors:
|
18
|
+
base_vm_not_found: The base VM with the name '%{name}' was not found.
|
19
|
+
box_not_found: Box '%{name}' could not be found.
|
20
|
+
chef_not_detected: |-
|
21
|
+
The chef (either `chef-solo` or `chef-client`) binary was not found on
|
22
|
+
the VM and is required for chef provisioning. Please verify that chef
|
23
|
+
is installed and that the binary is available on the PATH.
|
24
|
+
|
25
|
+
|
26
|
+
#-------------------------------------------------------------------------------
|
27
|
+
# Translations for config validation errors
|
28
|
+
#-------------------------------------------------------------------------------
|
29
|
+
config:
|
30
|
+
|
@@ -0,0 +1,35 @@
|
|
1
|
+
require 'mccloud/template'
|
2
|
+
|
3
|
+
module Mccloud
|
4
|
+
class Templates < Hash
|
5
|
+
attr_reader :env
|
6
|
+
|
7
|
+
def initialize(env)
|
8
|
+
@env=env
|
9
|
+
end
|
10
|
+
|
11
|
+
def load!
|
12
|
+
if self.exists?
|
13
|
+
Dir[File.join(self.path,"**")].each do |dir|
|
14
|
+
template_name=File.basename(dir)
|
15
|
+
t=Template.new(template_name,env)
|
16
|
+
self[template_name]=t
|
17
|
+
end
|
18
|
+
else
|
19
|
+
env.logger.info "Skipping loading of definitions as the definition_path does exist"
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
def path
|
24
|
+
@env.config.mccloud.template_path
|
25
|
+
end
|
26
|
+
|
27
|
+
def exists?
|
28
|
+
File.directory?(self.path)
|
29
|
+
end
|
30
|
+
|
31
|
+
def registered?(name)
|
32
|
+
return self.has_key?(name)
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
data/lib/mccloud/ui.rb
ADDED
@@ -0,0 +1,82 @@
|
|
1
|
+
module Mccloud
|
2
|
+
# Vagrant UIs handle communication with the outside world (typically
|
3
|
+
# through a shell). They must respond to the typically logger methods
|
4
|
+
# of `warn`, `error`, `info`, and `confirm`.
|
5
|
+
class UI
|
6
|
+
attr_accessor :env
|
7
|
+
|
8
|
+
def initialize(env)
|
9
|
+
@env = env
|
10
|
+
end
|
11
|
+
|
12
|
+
[:warn, :error, :info, :confirm].each do |method|
|
13
|
+
define_method(method) do |message|
|
14
|
+
# Log normal console messages
|
15
|
+
env.logger.info("ui") { message }
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
[:clear_line, :report_progress, :ask, :no?, :yes?].each do |method|
|
20
|
+
# By default do nothing, these aren't logged
|
21
|
+
define_method(method) { |*args| }
|
22
|
+
end
|
23
|
+
|
24
|
+
# A shell UI, which uses a `Thor::Shell` object to talk with
|
25
|
+
# a terminal.
|
26
|
+
class Shell < UI
|
27
|
+
def initialize(env, shell)
|
28
|
+
super(env)
|
29
|
+
|
30
|
+
@shell = shell
|
31
|
+
end
|
32
|
+
|
33
|
+
[[:warn, :yellow], [:error, :red], [:info, nil], [:confirm, :green]].each do |method, color|
|
34
|
+
class_eval <<-CODE
|
35
|
+
def #{method}(message, opts=nil)
|
36
|
+
super(message)
|
37
|
+
opts ||= {}
|
38
|
+
opts[:new_line] = true if !opts.has_key?(:new_line)
|
39
|
+
@shell.say("\#{format_message(message, opts)}", #{color.inspect}, opts[:new_line])
|
40
|
+
end
|
41
|
+
CODE
|
42
|
+
end
|
43
|
+
|
44
|
+
[:ask, :no?, :yes?].each do |method|
|
45
|
+
class_eval <<-CODE
|
46
|
+
def #{method}(message, opts=nil)
|
47
|
+
super(message)
|
48
|
+
opts ||= {}
|
49
|
+
@shell.send(#{method.inspect}, format_message(message, opts), opts[:color])
|
50
|
+
end
|
51
|
+
CODE
|
52
|
+
end
|
53
|
+
|
54
|
+
def report_progress(progress, total, show_parts=true)
|
55
|
+
percent = (progress.to_f / total.to_f) * 100
|
56
|
+
line = "Progress: #{percent.to_i}%"
|
57
|
+
line << " (#{progress} / #{total})" if show_parts
|
58
|
+
|
59
|
+
@shell.say(line, nil, false)
|
60
|
+
end
|
61
|
+
|
62
|
+
def clear_line
|
63
|
+
@shell.say(line_reset, nil, false)
|
64
|
+
end
|
65
|
+
|
66
|
+
protected
|
67
|
+
|
68
|
+
def format_message(message, opts=nil)
|
69
|
+
opts = { :prefix => true }.merge(opts || {})
|
70
|
+
opts[:prefix]=false if env.resource=="mccloud"
|
71
|
+
message = "[#{env.resource}] #{message}" if opts[:prefix]
|
72
|
+
message
|
73
|
+
end
|
74
|
+
|
75
|
+
def line_reset
|
76
|
+
reset = "\r"
|
77
|
+
reset += "\e[0K" unless Util::Platform.windows?
|
78
|
+
reset
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
#http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-talk/150311
|
2
|
+
|
3
|
+
require 'ostruct'
|
4
|
+
|
5
|
+
class ROpenStruct < OpenStruct
|
6
|
+
def method_missing(mid, *args)
|
7
|
+
mname = mid.id2name
|
8
|
+
len = args.length
|
9
|
+
if len == 0
|
10
|
+
@table[mname.intern] = ROpenStruct.new
|
11
|
+
self.new_ostruct_member(mname)
|
12
|
+
@table[mname.intern]
|
13
|
+
else
|
14
|
+
super
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
test = ROpenStruct.new
|
20
|
+
test.p = "hello"
|
21
|
+
test.t.s.p.t.z.y.x = "hi"
|
22
|
+
test.xyz
|
23
|
+
|
24
|
+
p test
|
data/lib/mccloud/util/rsync.rb
CHANGED
@@ -1,9 +1,13 @@
|
|
1
1
|
require "pty"
|
2
2
|
module Mccloud
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
3
|
+
module Util
|
4
|
+
def self.rsync(path,vm,instance)
|
5
|
+
unless !File.exists?(path)
|
6
|
+
env.logger.info "[#{vm.name}] - rsyncing #{path}"
|
7
|
+
command="rsync --exclude='.DS_Store' --exclude='.git' --exclude='.hg' --delete --delete-excluded -az -e 'ssh -p 22 -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -i \"#{vm.private_key}\"' '#{path}/' '#{vm.user}@#{instance.public_ip_address}:/tmp/#{File.basename(path)}/'"
|
8
|
+
else
|
9
|
+
raise Mccloud::Error, "[#{vm.name}] - rsync error: #{path} does no exist"
|
10
|
+
end
|
7
11
|
begin
|
8
12
|
PTY.spawn( command ) do |r, w, pid|
|
9
13
|
begin
|
@@ -13,9 +17,9 @@ module Mccloud
|
|
13
17
|
end
|
14
18
|
rescue PTY::ChildExited => e
|
15
19
|
puts "The child process exited!"
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
+
end
|
21
|
+
#Kernel.exec(command)
|
22
|
+
end
|
23
|
+
end
|
20
24
|
end
|
21
25
|
|
data/lib/mccloud/util/ssh.rb
CHANGED
@@ -1,14 +1,15 @@
|
|
1
1
|
module Mccloud
|
2
2
|
module Util
|
3
3
|
|
4
|
+
class Ssh
|
4
5
|
def self.when_ssh_login_works(ip="localhost", options = { } , &block)
|
5
6
|
|
6
|
-
defaults={ :port => '22', :timeout =>
|
7
|
+
defaults={ :port => '22', :timeout => 20000 , :user => 'vagrant', :password => 'vagrant'}
|
7
8
|
|
8
9
|
options=defaults.merge(options)
|
9
10
|
|
10
11
|
puts
|
11
|
-
puts "Waiting for ssh login with user #{options[:user]} to sshd on port => #{options[:port]} to work"
|
12
|
+
puts "Waiting for ssh login on #{ip} with user #{options[:user]} to sshd on port => #{options[:port]} to work (Timeout in #{options[:timeout]} seconds)"
|
12
13
|
|
13
14
|
begin
|
14
15
|
Timeout::timeout(options[:timeout]) do
|
@@ -16,12 +17,12 @@ module Mccloud
|
|
16
17
|
while !connected do
|
17
18
|
begin
|
18
19
|
print "."
|
19
|
-
Net::SSH.start(ip, options[:user], { :port => options[:port] , :password => options[:password], :paranoid => false, :timeout => options[:timeout]
|
20
|
+
Net::SSH.start(ip, options[:user], { :port => options[:port] , :password => options[:password], :paranoid => false, :timeout => options[:timeout] ,:keys => options[:keys] }) do |ssh|
|
20
21
|
block.call(ip);
|
21
22
|
puts ""
|
22
23
|
return true
|
23
24
|
end
|
24
|
-
rescue Net::SSH::Disconnect,Errno::ECONNREFUSED, Errno::EHOSTUNREACH, Errno::ECONNABORTED, Errno::ECONNRESET, Errno::ENETUNREACH
|
25
|
+
rescue Net::SSH::AuthenticationFailed,Net::SSH::Disconnect,Errno::ECONNREFUSED, Errno::EHOSTUNREACH, Errno::ECONNABORTED, Errno::ECONNRESET, Errno::ENETUNREACH
|
25
26
|
sleep 5
|
26
27
|
end
|
27
28
|
end
|
@@ -36,6 +37,10 @@ module Mccloud
|
|
36
37
|
|
37
38
|
def self.transfer_file(host,filename,destination = '.' , options = {})
|
38
39
|
|
40
|
+
unless File.exists?(filename)
|
41
|
+
raise Mccloud::Error,"Can't transfer #{filename}: does not exist"
|
42
|
+
end
|
43
|
+
|
39
44
|
Net::SSH.start( host,options[:user],options ) do |ssh|
|
40
45
|
puts "Transferring #{filename} to #{destination} "
|
41
46
|
ssh.scp.upload!( filename, destination ) do |ch, name, sent, total|
|
@@ -43,7 +48,7 @@ module Mccloud
|
|
43
48
|
print "."
|
44
49
|
|
45
50
|
end
|
46
|
-
end
|
51
|
+
end
|
47
52
|
puts
|
48
53
|
end
|
49
54
|
|
@@ -52,7 +57,7 @@ module Mccloud
|
|
52
57
|
#after the machine boots
|
53
58
|
def self.execute_when_tcp_available(ip="localhost", options = { } , &block)
|
54
59
|
|
55
|
-
defaults={ :port => 22, :timeout =>
|
60
|
+
defaults={ :port => 22, :timeout => 20000 , :pollrate => 5}
|
56
61
|
|
57
62
|
options=defaults.merge(options)
|
58
63
|
|
@@ -66,7 +71,7 @@ module Mccloud
|
|
66
71
|
s.close
|
67
72
|
block.call(ip);
|
68
73
|
return true
|
69
|
-
rescue Errno::ECONNREFUSED, Errno::EHOSTUNREACH
|
74
|
+
rescue Errno::ECONNREFUSED, Errno::EHOSTUNREACH,Errno::ETIMEDOUT
|
70
75
|
sleep options[:pollrate]
|
71
76
|
end
|
72
77
|
end
|
@@ -79,7 +84,7 @@ module Mccloud
|
|
79
84
|
end
|
80
85
|
|
81
86
|
def self.ssh(host ,user , options = { :progress => "on" } ,command=nil ,exitcode=0)
|
82
|
-
|
87
|
+
|
83
88
|
defaults= { :port => "22", :user => "root", :paranoid => false }
|
84
89
|
options=defaults.merge(options)
|
85
90
|
@pid=""
|
@@ -97,8 +102,8 @@ module Mccloud
|
|
97
102
|
channel = ssh.open_channel do |ch|
|
98
103
|
|
99
104
|
#request pty for sudo stuff and so
|
100
|
-
ch.request_pty do |ch, success|
|
101
|
-
raise "Error requesting pty" unless success
|
105
|
+
ch.request_pty do |ch, success|
|
106
|
+
raise "Error requesting pty" unless success
|
102
107
|
end
|
103
108
|
|
104
109
|
|
@@ -153,7 +158,7 @@ module Mccloud
|
|
153
158
|
if (exitcode=="*")
|
154
159
|
#its a test so we don't need to worry
|
155
160
|
else
|
156
|
-
|
161
|
+
puts "Exitcode = #{exitcode} - #{@status.to_s}"
|
157
162
|
raise "Exitcode was not what we expected"
|
158
163
|
end
|
159
164
|
|
@@ -161,7 +166,8 @@ module Mccloud
|
|
161
166
|
|
162
167
|
end
|
163
168
|
|
169
|
+
end #Class
|
164
170
|
|
171
|
+
end #Module
|
165
172
|
|
166
|
-
end #Class
|
167
173
|
end #Module
|