mccloud 0.0.1
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 +5 -0
- data/.rvmrc +4 -0
- data/Gemfile +4 -0
- data/Gemfile.lock +74 -0
- data/README.md +123 -0
- data/Rakefile +5 -0
- data/bin/mccloud +116 -0
- data/lib/mccloud.rb +2 -0
- data/lib/mccloud/command/boot.rb +12 -0
- data/lib/mccloud/command/bootstrap.rb +31 -0
- data/lib/mccloud/command/command.rb +21 -0
- data/lib/mccloud/command/destroy.rb +19 -0
- data/lib/mccloud/command/halt.rb +19 -0
- data/lib/mccloud/command/init.rb +7 -0
- data/lib/mccloud/command/multi.rb +53 -0
- data/lib/mccloud/command/provision.rb +28 -0
- data/lib/mccloud/command/reload.rb +11 -0
- data/lib/mccloud/command/server.rb +30 -0
- data/lib/mccloud/command/ssh.rb +46 -0
- data/lib/mccloud/command/status.rb +31 -0
- data/lib/mccloud/command/suspend.rb +15 -0
- data/lib/mccloud/command/up.rb +65 -0
- data/lib/mccloud/config.rb +47 -0
- data/lib/mccloud/configurator/lb.rb +26 -0
- data/lib/mccloud/configurator/mccloud.rb +13 -0
- data/lib/mccloud/configurator/vm.rb +37 -0
- data/lib/mccloud/generators.rb +28 -0
- data/lib/mccloud/provisioner/chef_solo.rb +149 -0
- data/lib/mccloud/provisioner/puppet.rb +39 -0
- data/lib/mccloud/provisioner/vagrant/base.rb +63 -0
- data/lib/mccloud/provisioner/vagrant/chef.rb +130 -0
- data/lib/mccloud/provisioner/vagrant/chef_server.rb +103 -0
- data/lib/mccloud/provisioner/vagrant/chef_solo.rb +142 -0
- data/lib/mccloud/provisioner/vagrant/puppet.rb +137 -0
- data/lib/mccloud/provisioner/vagrant/puppet_server.rb +55 -0
- data/lib/mccloud/provisioner/vagrant/shell.rb +52 -0
- data/lib/mccloud/session.rb +199 -0
- data/lib/mccloud/templates/Mccloudfilet +44 -0
- data/lib/mccloud/type/forwarding.rb +11 -0
- data/lib/mccloud/type/lb.rb +34 -0
- data/lib/mccloud/type/vm.rb +46 -0
- data/lib/mccloud/util/iterator.rb +21 -0
- data/lib/mccloud/util/platform.rb +29 -0
- data/lib/mccloud/util/rsync.rb +21 -0
- data/lib/mccloud/util/ssh.rb +167 -0
- data/lib/mccloud/version.rb +3 -0
- data/mccloud.gemspec +37 -0
- data/ruby-bootstrap.sh +11 -0
- data/ruby-bootstrap2.sh +39 -0
- metadata +297 -0
| @@ -0,0 +1,53 @@ | |
| 1 | 
            +
            require 'net/ssh/multi'
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            module Mccloud
         | 
| 4 | 
            +
              module Command
         | 
| 5 | 
            +
                #http://stackoverflow.com/questions/1383282/netsshmulti-using-the-session-exec-how-do-you-get-the-output-straight-away
         | 
| 6 | 
            +
                #https://gist.github.com/700730
         | 
| 7 | 
            +
                def multi(selection=nil,command="who am i",options=nil)
         | 
| 8 | 
            +
                  trap("INT") { puts "we hit CTRL_C"; exit }
         | 
| 9 | 
            +
                  
         | 
| 10 | 
            +
                  Net::SSH::Multi.start do |session|
         | 
| 11 | 
            +
                     # Connect to remote machines
         | 
| 12 | 
            +
                     ip2name=Hash.new
         | 
| 13 | 
            +
                     on_selected_machines(selection) do |id,vm|
         | 
| 14 | 
            +
                       instance=vm.instance
         | 
| 15 | 
            +
                       if instance.state == "running"
         | 
| 16 | 
            +
                         ip2name[instance.public_ip_address]=vm.name
         | 
| 17 | 
            +
                         session.use "#{instance.public_ip_address}", { :user => vm.user , :keys => [ vm.key ], :paranoid => false, :keys_only => true}
         | 
| 18 | 
            +
                       end
         | 
| 19 | 
            +
                     end
         | 
| 20 | 
            +
             | 
| 21 | 
            +
                    puts "Executing #{command}"
         | 
| 22 | 
            +
                    begin
         | 
| 23 | 
            +
                     session.exec("#{command}") do |ch, stream, data|
         | 
| 24 | 
            +
                     #exit code
         | 
| 25 | 
            +
                     #http://groups.google.com/group/comp.lang.ruby/browse_thread/thread/a806b0f5dae4e1e2
         | 
| 26 | 
            +
                     
         | 
| 27 | 
            +
                     ch.on_request("exit-status") do |ch, data|
         | 
| 28 | 
            +
                       exit_code = data.read_long
         | 
| 29 | 
            +
                       @status=exit_code
         | 
| 30 | 
            +
                       if exit_code > 0
         | 
| 31 | 
            +
                         puts "ERROR: exit code #{exit_code}"
         | 
| 32 | 
            +
                       else
         | 
| 33 | 
            +
                         puts "Successfully executed"
         | 
| 34 | 
            +
                       end
         | 
| 35 | 
            +
                     end
         | 
| 36 | 
            +
                        if (ip2name.count > 1) || options.verbose?
         | 
| 37 | 
            +
                          puts "[#{ip2name[ch[:host]]}] #{data}"
         | 
| 38 | 
            +
                        else
         | 
| 39 | 
            +
                          print "#{data}"              
         | 
| 40 | 
            +
                        end
         | 
| 41 | 
            +
                       # puts "[#{ch[:host]} : #{stream}] #{data}"
         | 
| 42 | 
            +
             | 
| 43 | 
            +
                     end
         | 
| 44 | 
            +
                   rescue Errno::ECONNREFUSED
         | 
| 45 | 
            +
                     puts "oops - no connection"
         | 
| 46 | 
            +
                   end
         | 
| 47 | 
            +
                     # Tell Net::SSH to wait for output from the SSH server
         | 
| 48 | 
            +
                     session.loop  
         | 
| 49 | 
            +
                  end
         | 
| 50 | 
            +
                  
         | 
| 51 | 
            +
                end
         | 
| 52 | 
            +
              end
         | 
| 53 | 
            +
            end
         | 
| @@ -0,0 +1,28 @@ | |
| 1 | 
            +
            require 'net/scp'
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            module Mccloud
         | 
| 4 | 
            +
              module Command
         | 
| 5 | 
            +
             | 
| 6 | 
            +
                def provision(selection=nil,options=nil)
         | 
| 7 | 
            +
                  on_selected_machines(selection) do |id,vm|
         | 
| 8 | 
            +
                    instance=vm.instance
         | 
| 9 | 
            +
                    instance.private_key_path=vm.key
         | 
| 10 | 
            +
                    instance.username = vm.user
         | 
| 11 | 
            +
              
         | 
| 12 | 
            +
                    #p vm.provisioner
         | 
| 13 | 
            +
                    provisioner=@session.config.provisioners[vm.provisioner.to_s]
         | 
| 14 | 
            +
                    if provisioner.nil?
         | 
| 15 | 
            +
                      # We take the first provisioner defined
         | 
| 16 | 
            +
                      provisioner=@session.config.provisioners.first[1]
         | 
| 17 | 
            +
                    end
         | 
| 18 | 
            +
                    provisioner.run(vm)
         | 
| 19 | 
            +
                  end
         | 
| 20 | 
            +
                  ##on_selected_machines(selection) do |id,vm|
         | 
| 21 | 
            +
                  #instance=PROVIDER.servers.get(id)
         | 
| 22 | 
            +
                  #options={ :port => 22, :keys => [ vm.key ], :paranoid => false, :keys_only => true}
         | 
| 23 | 
            +
                  #Mccloud::Ssh.execute(instance.public_ip_address,vm.user,options,"who am i")
         | 
| 24 | 
            +
                  #end
         | 
| 25 | 
            +
                end
         | 
| 26 | 
            +
                
         | 
| 27 | 
            +
              end
         | 
| 28 | 
            +
            end
         | 
| @@ -0,0 +1,30 @@ | |
| 1 | 
            +
            require 'net/ssh/multi'
         | 
| 2 | 
            +
            require 'pp'
         | 
| 3 | 
            +
            module Mccloud
         | 
| 4 | 
            +
              module Command
         | 
| 5 | 
            +
                def server(selection=nil,options=nil)
         | 
| 6 | 
            +
                  
         | 
| 7 | 
            +
                  trap("INT") { puts "You've hit CTRL-C . Stopping server now"; exit }
         | 
| 8 | 
            +
                  threads = []
         | 
| 9 | 
            +
                  on_selected_machines(selection) do |id,vm|
         | 
| 10 | 
            +
                    threads << Thread.new(id,vm) do |id,vm|
         | 
| 11 | 
            +
                      public_ip_address=vm.instance.public_ip_address
         | 
| 12 | 
            +
                      private_ip_address=vm.instance.private_ip_address
         | 
| 13 | 
            +
                      unless public_ip_address.nil? || private_ip_address.nil?
         | 
| 14 | 
            +
                        ssh_options={ :keys => [ vm.key ], :paranoid => false, :keys_only => true}
         | 
| 15 | 
            +
                        Net::SSH.start(public_ip_address, vm.user, ssh_options) do |ssh|
         | 
| 16 | 
            +
                          vm.forwardings.each do |forwarding|
         | 
| 17 | 
            +
                            puts "forwarding port #{forwarding.remote} from #{vm.name} to local port #{forwarding.local}"
         | 
| 18 | 
            +
                            ssh.forward.local(forwarding.local, private_ip_address,forwarding.remote)
         | 
| 19 | 
            +
                          end
         | 
| 20 | 
            +
                          ssh.loop { true }
         | 
| 21 | 
            +
                        end
         | 
| 22 | 
            +
                      end
         | 
| 23 | 
            +
                    end
         | 
| 24 | 
            +
                  end
         | 
| 25 | 
            +
            #      threads.each {|thr| thr.join}
         | 
| 26 | 
            +
                  puts "and we continue here"
         | 
| 27 | 
            +
                  sleep 30
         | 
| 28 | 
            +
                end
         | 
| 29 | 
            +
              end
         | 
| 30 | 
            +
            end
         | 
| @@ -0,0 +1,46 @@ | |
| 1 | 
            +
            require 'mccloud/util/platform'
         | 
| 2 | 
            +
            require 'pp'
         | 
| 3 | 
            +
             | 
| 4 | 
            +
            module Mccloud
         | 
| 5 | 
            +
              module Command
         | 
| 6 | 
            +
              def ssh(selection=nil,command=nil,options=nil)
         | 
| 7 | 
            +
                if options.screen?
         | 
| 8 | 
            +
                  extra_command="\"screen -R \\\"#{command}\\\"\""
         | 
| 9 | 
            +
                else
         | 
| 10 | 
            +
                  extra_command="\"#{command}\""
         | 
| 11 | 
            +
                end
         | 
| 12 | 
            +
                
         | 
| 13 | 
            +
                if selection.nil?
         | 
| 14 | 
            +
                  @session.config.vms
         | 
| 15 | 
            +
                  selection=@session.config.vms.first[0]
         | 
| 16 | 
            +
                end
         | 
| 17 | 
            +
                
         | 
| 18 | 
            +
                name=selection
         | 
| 19 | 
            +
                vm=@session.config.vms[name]
         | 
| 20 | 
            +
                if vm.instance.state != "running"
         | 
| 21 | 
            +
                  puts "#{name} is not running, move along"
         | 
| 22 | 
            +
                  return
         | 
| 23 | 
            +
                end
         | 
| 24 | 
            +
             | 
| 25 | 
            +
                #https://github.com/mitchellh/vagrant/blob/master/lib/vagrant/ssh.rb
         | 
| 26 | 
            +
                options={ :port => 22, :private_key_path => vm.key, 
         | 
| 27 | 
            +
                  :username => vm.user , :host => vm.instance.public_ip_address }
         | 
| 28 | 
            +
                  # Command line options
         | 
| 29 | 
            +
                  command_options = ["-p #{options[:port]}", "-o UserKnownHostsFile=/dev/null",
         | 
| 30 | 
            +
                  "-t -o StrictHostKeyChecking=no", "-o IdentitiesOnly=yes","-o VerifyHostKeyDNS=no",
         | 
| 31 | 
            +
                  "-i #{options[:private_key_path]}"]
         | 
| 32 | 
            +
                  # Some hackery going on here. On Mac OS X Leopard (10.5), exec fails
         | 
| 33 | 
            +
                  # (GH-51). As a workaround, we fork and wait. On all other platforms,
         | 
| 34 | 
            +
                  # we simply exec.
         | 
| 35 | 
            +
                  pid = nil
         | 
| 36 | 
            +
                  pid = fork if Mccloud::Util::Platform.leopard? || Mccloud::Util::Platform.tiger?
         | 
| 37 | 
            +
             | 
| 38 | 
            +
                  command_exec="ssh #{command_options.join(" ")} #{options[:username]}@#{options[:host]} #{extra_command}".strip
         | 
| 39 | 
            +
                  puts "#{command_exec}"
         | 
| 40 | 
            +
                  Kernel.exec command_exec if pid.nil?
         | 
| 41 | 
            +
                  Process.wait(pid) if pid
         | 
| 42 | 
            +
                end
         | 
| 43 | 
            +
             | 
| 44 | 
            +
             
         | 
| 45 | 
            +
              end
         | 
| 46 | 
            +
            end
         | 
| @@ -0,0 +1,31 @@ | |
| 1 | 
            +
            module Mccloud
         | 
| 2 | 
            +
              module Command
         | 
| 3 | 
            +
                def status(selection=nil,options=nil)
         | 
| 4 | 
            +
             | 
| 5 | 
            +
                  printf "%-10s %-12s %-20s %-15s %-8s\n", "Name", "Instance Id", "IP", "Type","Status"
         | 
| 6 | 
            +
                  80.times { |i| printf "=" } ; puts
         | 
| 7 | 
            +
             | 
| 8 | 
            +
                  unless options.verbose?
         | 
| 9 | 
            +
                    filter=@session.config.mccloud.prefix
         | 
| 10 | 
            +
                  else
         | 
| 11 | 
            +
                    filter=""
         | 
| 12 | 
            +
                  end
         | 
| 13 | 
            +
             | 
| 14 | 
            +
                  @session.config.providers.each  do |name,provider|
         | 
| 15 | 
            +
                      provider.servers.each do |vm|
         | 
| 16 | 
            +
                        name="<no name set>"
         | 
| 17 | 
            +
                        if !vm.tags["Name"].nil?
         | 
| 18 | 
            +
                          name=vm.tags["Name"].strip
         | 
| 19 | 
            +
                        end #end if
         | 
| 20 | 
            +
             | 
| 21 | 
            +
                        if name.start_with?(filter)
         | 
| 22 | 
            +
                          unless filter==""
         | 
| 23 | 
            +
                            name[filter+" - "]=""
         | 
| 24 | 
            +
                          end
         | 
| 25 | 
            +
                          printf "%-10s %-12s %-20s %-15s %-8s\n",name,vm.id, vm.public_ip_address, vm.flavor.name,vm.state
         | 
| 26 | 
            +
                        end
         | 
| 27 | 
            +
                      end #End 1 provider
         | 
| 28 | 
            +
                    end #providers
         | 
| 29 | 
            +
                end #def
         | 
| 30 | 
            +
              end #module
         | 
| 31 | 
            +
            end
         | 
| @@ -0,0 +1,15 @@ | |
| 1 | 
            +
            module Mccloud
         | 
| 2 | 
            +
              module Command
         | 
| 3 | 
            +
                def suspend
         | 
| 4 | 
            +
                  load_config
         | 
| 5 | 
            +
                  on_selected_machines(selection) do |id,vm|
         | 
| 6 | 
            +
                    puts "Halting machine #{vm.name} with Id: #{id}"
         | 
| 7 | 
            +
                    PROVIDER.servers.get(id).stop
         | 
| 8 | 
            +
             | 
| 9 | 
            +
                    vm.instance.wait_for { printf ".";STDOUT.flush;  state=="stopped"}          
         | 
| 10 | 
            +
                    puts
         | 
| 11 | 
            +
                    
         | 
| 12 | 
            +
                  end
         | 
| 13 | 
            +
                end
         | 
| 14 | 
            +
              end
         | 
| 15 | 
            +
            end
         | 
| @@ -0,0 +1,65 @@ | |
| 1 | 
            +
            require 'pp'
         | 
| 2 | 
            +
            require 'mccloud/util/iterator'
         | 
| 3 | 
            +
             | 
| 4 | 
            +
            module Mccloud
         | 
| 5 | 
            +
              module Command
         | 
| 6 | 
            +
                include Mccloud::Util
         | 
| 7 | 
            +
                def up(selection,options)
         | 
| 8 | 
            +
             | 
| 9 | 
            +
                  on_selected_machines(selection) do |id,vm|
         | 
| 10 | 
            +
             | 
| 11 | 
            +
                    provider=@session.config.providers[vm.provider]
         | 
| 12 | 
            +
                    if (id.nil?)
         | 
| 13 | 
            +
                      puts "Machine #{vm.name} doesn't yet exist"
         | 
| 14 | 
            +
                      provider_options=vm.provider_options
         | 
| 15 | 
            +
                      boxname=vm.name
         | 
| 16 | 
            +
                      puts "Spinning up a new machine called #{boxname}"
         | 
| 17 | 
            +
                      instance=provider.servers.create(provider_options)
         | 
| 18 | 
            +
                      puts "Waiting for it the machine to become accessible"
         | 
| 19 | 
            +
                      instance.wait_for { printf "."; STDOUT.flush;  ready?}
         | 
| 20 | 
            +
                      puts
         | 
| 21 | 
            +
                      prefix=@session.config.mccloud.prefix
         | 
| 22 | 
            +
             | 
| 23 | 
            +
             | 
| 24 | 
            +
                      provider.create_tags(instance.id, { "Name" => "#{prefix} - #{boxname}"})
         | 
| 25 | 
            +
             | 
| 26 | 
            +
                      # Resetting the in memory model of the new machine
         | 
| 27 | 
            +
                      @all_servers[boxname.to_s]=instance.id
         | 
| 28 | 
            +
                      unless @session.config.vms[boxname.to_s].nil?
         | 
| 29 | 
            +
                        @session.config.vms[boxname.to_s].reload
         | 
| 30 | 
            +
                      end
         | 
| 31 | 
            +
             | 
| 32 | 
            +
                      # Wait for ssh to become available ...
         | 
| 33 | 
            +
                      puts "Waiting for ssh to be come available"
         | 
| 34 | 
            +
                      Mccloud::Util.execute_when_tcp_available(instance.public_ip_address, { :port => 22, :timeout => 60 }) do
         | 
| 35 | 
            +
                        puts "Ok, ssh is available , proceeding with bootstrap"
         | 
| 36 | 
            +
                      end
         | 
| 37 | 
            +
             | 
| 38 | 
            +
                      @session.bootstrap(boxname.to_s,nil,options)       
         | 
| 39 | 
            +
             | 
| 40 | 
            +
                    else 
         | 
| 41 | 
            +
                      state=vm.instance.state
         | 
| 42 | 
            +
                      if state =="stopped"
         | 
| 43 | 
            +
                        puts "Machine #{vm.name} was stopped -> starting it again"
         | 
| 44 | 
            +
                        vm.instance.start
         | 
| 45 | 
            +
                        vm.instance.wait_for { printf ".";STDOUT.flush;  ready?}  
         | 
| 46 | 
            +
                        puts        
         | 
| 47 | 
            +
                      else
         | 
| 48 | 
            +
                        puts "Machine #{selection} already exists but is currently in state #{state} "
         | 
| 49 | 
            +
                      end
         | 
| 50 | 
            +
                    end
         | 
| 51 | 
            +
             | 
| 52 | 
            +
             | 
| 53 | 
            +
                  end
         | 
| 54 | 
            +
             | 
| 55 | 
            +
                  @session.provision(selection,options)       
         | 
| 56 | 
            +
             | 
| 57 | 
            +
                  #server.boostrap(:image_id => 'ami', :private_key_path => '', :public_key_path => '')
         | 
| 58 | 
            +
                end
         | 
| 59 | 
            +
             
         | 
| 60 | 
            +
             
         | 
| 61 | 
            +
             
         | 
| 62 | 
            +
             
         | 
| 63 | 
            +
             
         | 
| 64 | 
            +
              end
         | 
| 65 | 
            +
            end
         | 
| @@ -0,0 +1,47 @@ | |
| 1 | 
            +
            require 'mccloud/configurator/mccloud'
         | 
| 2 | 
            +
            require 'mccloud/configurator/vm'
         | 
| 3 | 
            +
            require 'mccloud/configurator/lb'
         | 
| 4 | 
            +
            require 'mccloud/provisioner/chef_solo'
         | 
| 5 | 
            +
             | 
| 6 | 
            +
            module Mccloud
         | 
| 7 | 
            +
              
         | 
| 8 | 
            +
              class Configuration
         | 
| 9 | 
            +
                attr_accessor :vms
         | 
| 10 | 
            +
                attr_accessor :lbs
         | 
| 11 | 
            +
                attr_accessor :providers
         | 
| 12 | 
            +
                attr_accessor :provisioners
         | 
| 13 | 
            +
                
         | 
| 14 | 
            +
                attr_accessor :mccloud
         | 
| 15 | 
            +
                attr_accessor :vm
         | 
| 16 | 
            +
                attr_accessor :lb
         | 
| 17 | 
            +
                attr_accessor :session
         | 
| 18 | 
            +
                
         | 
| 19 | 
            +
                def initialize
         | 
| 20 | 
            +
                  @vms=Hash.new
         | 
| 21 | 
            +
                  @lbs=Hash.new
         | 
| 22 | 
            +
                  @providers=Hash.new
         | 
| 23 | 
            +
                  @vm=Mccloud::Configurator::VmConfigurator.new
         | 
| 24 | 
            +
                  @lb=Mccloud::Configurator::LbConfigurator.new
         | 
| 25 | 
            +
                  @mccloud=Mccloud::Configurator::MccloudConfigurator.new	
         | 
| 26 | 
            +
                  @provisioners=Hash.new
         | 
| 27 | 
            +
                end
         | 
| 28 | 
            +
              end
         | 
| 29 | 
            +
              
         | 
| 30 | 
            +
              module Config
         | 
| 31 | 
            +
                class << self; 
         | 
| 32 | 
            +
                  attr_accessor :config
         | 
| 33 | 
            +
                end
         | 
| 34 | 
            +
                def self.run
         | 
| 35 | 
            +
                  @config=Configuration.new
         | 
| 36 | 
            +
                  
         | 
| 37 | 
            +
                  # Here we access a global thing, TODO to make it session specific
         | 
| 38 | 
            +
                  
         | 
| 39 | 
            +
                  Mccloud.session.config=@config
         | 
| 40 | 
            +
                  yield @config
         | 
| 41 | 
            +
                  #Resetting any left over
         | 
| 42 | 
            +
                  
         | 
| 43 | 
            +
                  @config.vm=nil
         | 
| 44 | 
            +
                  @config.lb=nil
         | 
| 45 | 
            +
                end
         | 
| 46 | 
            +
              end
         | 
| 47 | 
            +
            end
         | 
| @@ -0,0 +1,26 @@ | |
| 1 | 
            +
            require 'mccloud/provisioner/chef_solo'
         | 
| 2 | 
            +
            require 'mccloud/provisioner/puppet'
         | 
| 3 | 
            +
             | 
| 4 | 
            +
            require 'mccloud/type/lb'
         | 
| 5 | 
            +
             | 
| 6 | 
            +
            module Mccloud
         | 
| 7 | 
            +
              module Configurator
         | 
| 8 | 
            +
                
         | 
| 9 | 
            +
              class LbConfigurator
         | 
| 10 | 
            +
             | 
| 11 | 
            +
                attr_accessor :lb
         | 
| 12 | 
            +
                
         | 
| 13 | 
            +
                def initialize()
         | 
| 14 | 
            +
                 end
         | 
| 15 | 
            +
                
         | 
| 16 | 
            +
                def define(name)
         | 
| 17 | 
            +
                  @lb=Mccloud::Type::Lb.new	
         | 
| 18 | 
            +
                  lbconfig=self
         | 
| 19 | 
            +
                  yield lbconfig
         | 
| 20 | 
            +
                  @lb.name=name
         | 
| 21 | 
            +
                  Mccloud.session.config.lbs[name.to_s]=@lb
         | 
| 22 | 
            +
                end
         | 
| 23 | 
            +
              end
         | 
| 24 | 
            +
              
         | 
| 25 | 
            +
            end
         | 
| 26 | 
            +
            end #Module Mccloud
         | 
| @@ -0,0 +1,37 @@ | |
| 1 | 
            +
            require 'mccloud/provisioner/chef_solo'
         | 
| 2 | 
            +
            require 'mccloud/provisioner/puppet'
         | 
| 3 | 
            +
             | 
| 4 | 
            +
            require 'mccloud/type/vm'
         | 
| 5 | 
            +
             | 
| 6 | 
            +
            module Mccloud
         | 
| 7 | 
            +
              module Configurator
         | 
| 8 | 
            +
                
         | 
| 9 | 
            +
              class VmConfigurator
         | 
| 10 | 
            +
             | 
| 11 | 
            +
                attr_accessor :vm
         | 
| 12 | 
            +
                
         | 
| 13 | 
            +
                def initialize()
         | 
| 14 | 
            +
                 end
         | 
| 15 | 
            +
                
         | 
| 16 | 
            +
                def define(name)
         | 
| 17 | 
            +
                  @vm=Mccloud::Type::Vm.new	
         | 
| 18 | 
            +
                  vmconfig=self
         | 
| 19 | 
            +
                  yield vmconfig
         | 
| 20 | 
            +
                  @vm.name=name
         | 
| 21 | 
            +
                  Mccloud.session.config.vms[name.to_s]=@vm
         | 
| 22 | 
            +
                end
         | 
| 23 | 
            +
                def provision(type)
         | 
| 24 | 
            +
                  case type
         | 
| 25 | 
            +
                  when :chef_solo
         | 
| 26 | 
            +
                    @provisioner=Mccloud::Provisioner::ChefSolo.new
         | 
| 27 | 
            +
                  when :puppet
         | 
| 28 | 
            +
                    @provisioner=Mccloud::Provisioner::Puppet.new        
         | 
| 29 | 
            +
                  else
         | 
| 30 | 
            +
                  end
         | 
| 31 | 
            +
                  yield @provisioner
         | 
| 32 | 
            +
                  Mccloud.session.config.provisioners[type.to_s]=@provisioner
         | 
| 33 | 
            +
                end
         | 
| 34 | 
            +
              end
         | 
| 35 | 
            +
              
         | 
| 36 | 
            +
            end
         | 
| 37 | 
            +
            end #Module Mccloud
         | 
| @@ -0,0 +1,28 @@ | |
| 1 | 
            +
            require 'templater'
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            module Mccloud
         | 
| 4 | 
            +
              module Generators
         | 
| 5 | 
            +
                extend Templater::Manifold
         | 
| 6 | 
            +
             | 
| 7 | 
            +
                class InitGenerator < Templater::Generator
         | 
| 8 | 
            +
                  def self.source_root
         | 
| 9 | 
            +
                    File.join(File.dirname(__FILE__), 'templates')
         | 
| 10 | 
            +
                  end
         | 
| 11 | 
            +
             | 
| 12 | 
            +
                  desc <<-DESC
         | 
| 13 | 
            +
                  Initialize a mccloud environment 
         | 
| 14 | 
            +
                  mccloud init [AMI-ID]
         | 
| 15 | 
            +
                  DESC
         | 
| 16 | 
            +
             | 
| 17 | 
            +
                  first_argument :ami_id, :required => true, :desc => 'AMI ID'
         | 
| 18 | 
            +
             
         | 
| 19 | 
            +
                  template :mccloudfile, 'Mccloudfile'
         | 
| 20 | 
            +
                            
         | 
| 21 | 
            +
                end
         | 
| 22 | 
            +
                
         | 
| 23 | 
            +
                desc "Generators to simplify the creation of a Mccloud Project"
         | 
| 24 | 
            +
                add :init, InitGenerator
         | 
| 25 | 
            +
                
         | 
| 26 | 
            +
              end
         | 
| 27 | 
            +
            end
         | 
| 28 | 
            +
             |