mirror of
				https://github.com/fog/fog.git
				synced 2022-11-09 13:51:43 -05:00 
			
		
		
		
	Merge pull request #934 from chirag-jog/master
Update the terremark driver to work with the latest vcloud express 0.8-ext1.6
This commit is contained in:
		
						commit
						22b6a11218
					
				
					 25 changed files with 639 additions and 66 deletions
				
			
		
							
								
								
									
										3
									
								
								Rakefile
									
										
									
									
									
								
							
							
						
						
									
										3
									
								
								Rakefile
									
										
									
									
									
								
							| 
						 | 
				
			
			@ -1,4 +1,6 @@
 | 
			
		|||
require 'rubygems'
 | 
			
		||||
require 'rake/gempackagetask'
 | 
			
		||||
require 'rake/rdoctask'
 | 
			
		||||
require 'bundler/setup'
 | 
			
		||||
require 'date'
 | 
			
		||||
require File.dirname(__FILE__) + '/lib/fog'
 | 
			
		||||
| 
						 | 
				
			
			@ -44,6 +46,7 @@ end
 | 
			
		|||
#
 | 
			
		||||
#############################################################################
 | 
			
		||||
 | 
			
		||||
GEM_NAME = "#{name}"
 | 
			
		||||
task :default => :test
 | 
			
		||||
 | 
			
		||||
namespace :test do
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										22
									
								
								lib/fog/terremark/models/shared/image.rb
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								lib/fog/terremark/models/shared/image.rb
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,22 @@
 | 
			
		|||
require 'fog/core/model'
 | 
			
		||||
 | 
			
		||||
module Fog
 | 
			
		||||
  module Terremark
 | 
			
		||||
    module Shared
 | 
			
		||||
 | 
			
		||||
      class Image < Fog::Model
 | 
			
		||||
 | 
			
		||||
        identity :id
 | 
			
		||||
 | 
			
		||||
        attribute :name
 | 
			
		||||
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      private
 | 
			
		||||
 | 
			
		||||
      def href=(new_href)
 | 
			
		||||
        self.id = new_href.split('/').last.to_i
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
							
								
								
									
										48
									
								
								lib/fog/terremark/models/shared/images.rb
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										48
									
								
								lib/fog/terremark/models/shared/images.rb
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,48 @@
 | 
			
		|||
require 'fog/core/collection'
 | 
			
		||||
require 'fog/terremark/models/shared/image'
 | 
			
		||||
 | 
			
		||||
module Fog
 | 
			
		||||
  module Terremark
 | 
			
		||||
    module Shared
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
      module Mock
 | 
			
		||||
        def images(options = {})
 | 
			
		||||
          Fog::Terremark::Shared::Images.new(options.merge(:connection => self))
 | 
			
		||||
        end
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      module Real
 | 
			
		||||
        def images(options = {})
 | 
			
		||||
          Fog::Terremark::Shared::Images.new(options.merge(:connection => self))
 | 
			
		||||
        end
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      class Images < Fog::Collection
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        model Fog::Terremark::Shared::Image 
 | 
			
		||||
 | 
			
		||||
        def all
 | 
			
		||||
          data = connection.get_catalog(vdc_id).body['CatalogItems'].select do |entity|
 | 
			
		||||
            entity['type'] == "application/vnd.vmware.vcloud.catalogItem+xml"
 | 
			
		||||
          end
 | 
			
		||||
          load(data)
 | 
			
		||||
        end
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        def vdc_id
 | 
			
		||||
          @vdc_id ||= connection.default_vdc_id
 | 
			
		||||
        end
 | 
			
		||||
 | 
			
		||||
        private
 | 
			
		||||
 | 
			
		||||
        def vdc_id=(new_vdc_id)
 | 
			
		||||
          @vdc_id = new_vdc_id
 | 
			
		||||
        end
 | 
			
		||||
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
							
								
								
									
										67
									
								
								lib/fog/terremark/models/shared/internetservice.rb
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										67
									
								
								lib/fog/terremark/models/shared/internetservice.rb
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,67 @@
 | 
			
		|||
require 'fog/core/model'
 | 
			
		||||
 | 
			
		||||
module Fog
 | 
			
		||||
  module Terremark
 | 
			
		||||
    module Shared
 | 
			
		||||
 | 
			
		||||
      class InternetService < Fog::Model
 | 
			
		||||
 | 
			
		||||
        identity :Id
 | 
			
		||||
 | 
			
		||||
        attribute :Name
 | 
			
		||||
        attribute :Port
 | 
			
		||||
        attribute :Protocol
 | 
			
		||||
        attribute :Description
 | 
			
		||||
        attribute :PublicIpAddress
 | 
			
		||||
        attribute :public_ip_address_id
 | 
			
		||||
 | 
			
		||||
        def destroy(delete_public_ip=true)
 | 
			
		||||
          connection.delete_internet_service(self.Id)
 | 
			
		||||
          connection.delete_public_ip(self.PublicIpAddress["Id"]) if delete_public_ip
 | 
			
		||||
        true
 | 
			
		||||
        end
 | 
			
		||||
 | 
			
		||||
        def save
 | 
			
		||||
          requires :Name, :Protocol, :Port
 | 
			
		||||
          if not public_ip_address_id
 | 
			
		||||
            #Create the first internet service and allocate public IP
 | 
			
		||||
            data = connection.create_internet_service(
 | 
			
		||||
                vdc = connection.default_vdc_id,
 | 
			
		||||
                name = self.Name,
 | 
			
		||||
                protocol = self.Protocol,
 | 
			
		||||
                port = self.Port,
 | 
			
		||||
                options = {
 | 
			
		||||
                        'Enabled' => 'true',
 | 
			
		||||
                        "Description" => self.Name
 | 
			
		||||
                }
 | 
			
		||||
            )
 | 
			
		||||
          else
 | 
			
		||||
            #create additional services to existing Public IP
 | 
			
		||||
            data = connection.add_internet_service(
 | 
			
		||||
                      ip_id = public_ip_address_id,
 | 
			
		||||
                      name = self.Name,
 | 
			
		||||
                      protocol = self.Protocol,
 | 
			
		||||
                      port = self.Port,
 | 
			
		||||
                      options = {
 | 
			
		||||
                        'Enabled' => 'true',
 | 
			
		||||
                        "Description" => self.Name
 | 
			
		||||
                        }
 | 
			
		||||
                    )           
 | 
			
		||||
            end
 | 
			
		||||
            merge_attributes(data.body)
 | 
			
		||||
            true
 | 
			
		||||
        end
 | 
			
		||||
        private
 | 
			
		||||
 | 
			
		||||
        def href=(new_href)
 | 
			
		||||
          self.id = new_href.split('/').last.to_i
 | 
			
		||||
        end
 | 
			
		||||
 | 
			
		||||
        def type=(new_type); @type = new_type; end
 | 
			
		||||
        def size=(new_size); @size = new_size; end
 | 
			
		||||
        def Links=(new_links); @Links = new_links; end
 | 
			
		||||
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
							
								
								
									
										42
									
								
								lib/fog/terremark/models/shared/internetservices.rb
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										42
									
								
								lib/fog/terremark/models/shared/internetservices.rb
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,42 @@
 | 
			
		|||
require 'fog/core/collection'
 | 
			
		||||
require 'fog/terremark/models/shared/internetservice'
 | 
			
		||||
 | 
			
		||||
module Fog
 | 
			
		||||
  module Terremark
 | 
			
		||||
    module Shared
 | 
			
		||||
 | 
			
		||||
      module Mock
 | 
			
		||||
        def internetservices(options = {})
 | 
			
		||||
          Fog::Terremark::Shared::Servers.new(options.merge(:connection => self))
 | 
			
		||||
        end
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      module Real
 | 
			
		||||
        def internetservices(options = {})
 | 
			
		||||
          Fog::Terremark::Shared::InternetServices.new(options.merge(:connection => self))
 | 
			
		||||
        end
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      class InternetServices < Fog::Collection
 | 
			
		||||
 | 
			
		||||
        model Fog::Terremark::Shared::InternetService
 | 
			
		||||
 | 
			
		||||
        def all
 | 
			
		||||
          data = connection.get_internet_services(vdc_id).body["InternetServices"]
 | 
			
		||||
          load(data)
 | 
			
		||||
        end
 | 
			
		||||
 | 
			
		||||
        def get(service_id)
 | 
			
		||||
          data = connection.get_internet_services(vdc_id)
 | 
			
		||||
          internet_service = services.body["InternetServices"].select {|item| item["Id"] == service_id}
 | 
			
		||||
          new(internetservice)
 | 
			
		||||
        end
 | 
			
		||||
 | 
			
		||||
        def vdc_id
 | 
			
		||||
          @vdc_id ||= connection.default_vdc_id
 | 
			
		||||
        end
 | 
			
		||||
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
							
								
								
									
										52
									
								
								lib/fog/terremark/models/shared/nodeservice.rb
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										52
									
								
								lib/fog/terremark/models/shared/nodeservice.rb
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,52 @@
 | 
			
		|||
require 'fog/core/model'
 | 
			
		||||
 | 
			
		||||
module Fog
 | 
			
		||||
  module Terremark
 | 
			
		||||
    module Shared
 | 
			
		||||
 | 
			
		||||
      class NodeService < Fog::Model
 | 
			
		||||
 | 
			
		||||
        identity :Id
 | 
			
		||||
        attribute :Name
 | 
			
		||||
        attribute :Href
 | 
			
		||||
        attribute :Port
 | 
			
		||||
        attribute :Description
 | 
			
		||||
        attribute :IpAddress
 | 
			
		||||
        attribute :Enabled
 | 
			
		||||
        attribute :InternetServiceId
 | 
			
		||||
 | 
			
		||||
        def destroy
 | 
			
		||||
          connection.delete_node_service(self.Id)
 | 
			
		||||
        end
 | 
			
		||||
 | 
			
		||||
        def save
 | 
			
		||||
         requires :Name, :Port, :InternetServiceId
 | 
			
		||||
            data = connection.add_node_service(
 | 
			
		||||
                service_id = self.InternetServiceId,
 | 
			
		||||
                ip = self.IpAddress,
 | 
			
		||||
                name = self.Name,
 | 
			
		||||
                port = self.Port,
 | 
			
		||||
                options = {"Enabled" => 'true',
 | 
			
		||||
                           "Description" => self.Name,
 | 
			
		||||
                }
 | 
			
		||||
            
 | 
			
		||||
            )
 | 
			
		||||
            merge_attributes(data.body)
 | 
			
		||||
            true
 | 
			
		||||
        end
 | 
			
		||||
 | 
			
		||||
        private
 | 
			
		||||
 | 
			
		||||
        def href=(new_href)
 | 
			
		||||
          self.id = new_href.split('/').last.to_i
 | 
			
		||||
        end
 | 
			
		||||
 | 
			
		||||
        def type=(new_type); @type = new_type; end
 | 
			
		||||
        def size=(new_size); @size = new_size; end
 | 
			
		||||
        def Links=(new_links); @Links = new_links; end
 | 
			
		||||
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
							
								
								
									
										32
									
								
								lib/fog/terremark/models/shared/nodeservices.rb
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										32
									
								
								lib/fog/terremark/models/shared/nodeservices.rb
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,32 @@
 | 
			
		|||
require 'fog/core/collection'
 | 
			
		||||
require 'fog/terremark/models/shared/nodeservice'
 | 
			
		||||
 | 
			
		||||
module Fog
 | 
			
		||||
  module Terremark
 | 
			
		||||
    module Shared
 | 
			
		||||
 | 
			
		||||
      module Mock
 | 
			
		||||
        def nodeservices(options = {})
 | 
			
		||||
          Fog::Terremark::Shared::Servers.new(options.merge(:connection => self))
 | 
			
		||||
        end
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      module Real
 | 
			
		||||
        def nodeservices(options = {})
 | 
			
		||||
          Fog::Terremark::Shared::NodeServices.new(options.merge(:connection => self))
 | 
			
		||||
        end
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      class NodeServices < Fog::Collection
 | 
			
		||||
 | 
			
		||||
        model Fog::Terremark::Shared::NodeService
 | 
			
		||||
        
 | 
			
		||||
        def all(internet_service_id)
 | 
			
		||||
          data = connection.get_node_services(internet_service_id).body["NodeServices"]
 | 
			
		||||
          load(data)
 | 
			
		||||
        end
 | 
			
		||||
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
| 
						 | 
				
			
			@ -1,4 +1,15 @@
 | 
			
		|||
require 'fog/core/model'
 | 
			
		||||
require 'fog/terremark/models/shared/nodeservices'
 | 
			
		||||
require 'fog/terremark/models/shared/internetservices'
 | 
			
		||||
 | 
			
		||||
# { '0' => 'Being created', '1' => 'Being Deployed, '2' => 'Powered Off', '4' => 'Powered On'}
 | 
			
		||||
module VAppStatus
 | 
			
		||||
  BEING_CREATED = "0"
 | 
			
		||||
  BEING_DEPLOYED = "1"
 | 
			
		||||
  POWERED_OFF = "2"
 | 
			
		||||
  POWERED_ON = "4"
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
module Fog
 | 
			
		||||
  module Terremark
 | 
			
		||||
| 
						 | 
				
			
			@ -9,30 +20,68 @@ module Fog
 | 
			
		|||
        identity :id
 | 
			
		||||
 | 
			
		||||
        attribute :name
 | 
			
		||||
        attribute :image
 | 
			
		||||
        attribute :vcpus
 | 
			
		||||
        attribute :memory
 | 
			
		||||
        attribute :sshkeyFingerPrint
 | 
			
		||||
        attribute :powerOn
 | 
			
		||||
        attribute :status
 | 
			
		||||
        attribute :OperatingSystem
 | 
			
		||||
        attribute :VirtualHardware
 | 
			
		||||
        attribute :IpAddress
 | 
			
		||||
 | 
			
		||||
        def reload
 | 
			
		||||
         merge_attributes(connection.get_vapp(id).body)
 | 
			
		||||
        end
 | 
			
		||||
        def destroy
 | 
			
		||||
          requires :id
 | 
			
		||||
          data = connection.power_off(id).body
 | 
			
		||||
          task = connection.tasks.new(data)
 | 
			
		||||
          task.wait_for { ready? }
 | 
			
		||||
          connection.delete_vapp(id)
 | 
			
		||||
          case self.status
 | 
			
		||||
            when VAppStatus::BEING_CREATED, VAppStatus::BEING_DEPLOYED
 | 
			
		||||
              return false
 | 
			
		||||
            when VAppStatus::POWERED_ON
 | 
			
		||||
              data = connection.power_off(self.id).body
 | 
			
		||||
              wait_for { off? }
 | 
			
		||||
            end
 | 
			
		||||
          connection.delete_vapp(self.id)
 | 
			
		||||
          true
 | 
			
		||||
        end
 | 
			
		||||
 | 
			
		||||
        def PublicIpAddress
 | 
			
		||||
          @PublicIpAddress ||=
 | 
			
		||||
            if internet_services.size > 0
 | 
			
		||||
              internet_services[0].PublicIpAddress["Name"]
 | 
			
		||||
            end
 | 
			
		||||
          @PublicIpAddress
 | 
			
		||||
        end
 | 
			
		||||
 | 
			
		||||
        def internet_services
 | 
			
		||||
            @internet_services ||= connection.internetservices.all.select {|item| item.Name == self.name}
 | 
			
		||||
        end
 | 
			
		||||
        
 | 
			
		||||
        def delete_internet_services
 | 
			
		||||
            #Find the internet service
 | 
			
		||||
 | 
			
		||||
            while (service = internet_services.pop) do
 | 
			
		||||
 | 
			
		||||
              nodes = connection.nodeservices.all(service.Id)
 | 
			
		||||
              #Delete all the associated nodes
 | 
			
		||||
              nodes.select { |item| item.destroy }
 | 
			
		||||
              #Clear out the services
 | 
			
		||||
              service.destroy(delete_public_ip = !(internet_services.size > 0))
 | 
			
		||||
            end
 | 
			
		||||
            true
 | 
			
		||||
        end
 | 
			
		||||
 | 
			
		||||
        # { '0' => 'Being created', '2' => 'Powered Off', '4' => 'Powered On'}
 | 
			
		||||
        def ready?
 | 
			
		||||
          status == '2'
 | 
			
		||||
          status == VAppStatus::POWERED_OFF
 | 
			
		||||
        end
 | 
			
		||||
 | 
			
		||||
        def on?
 | 
			
		||||
          status == '4'
 | 
			
		||||
          status == VAppStatus::POWERED_ON
 | 
			
		||||
        end
 | 
			
		||||
 | 
			
		||||
        def off?
 | 
			
		||||
          status == '2'
 | 
			
		||||
          status == VAppStatus::POWERED_OFF
 | 
			
		||||
        end
 | 
			
		||||
 | 
			
		||||
        def power_on(options = {})
 | 
			
		||||
| 
						 | 
				
			
			@ -81,14 +130,66 @@ module Fog
 | 
			
		|||
          power_on
 | 
			
		||||
        end
 | 
			
		||||
 | 
			
		||||
        def create_internet_services(internet_spec)
 | 
			
		||||
          public_ip_info = nil
 | 
			
		||||
          internet_service_id = nil
 | 
			
		||||
          internet_spec.each do |proto, ports|
 | 
			
		||||
            for port in ports
 | 
			
		||||
              if not public_ip_info
 | 
			
		||||
                #Create the first internet service and allocate public IP
 | 
			
		||||
                inet_services = connection.internetservices.create({
 | 
			
		||||
                      "Name" => self.name,
 | 
			
		||||
                      "Protocol" => proto,
 | 
			
		||||
                      "Port" => port,
 | 
			
		||||
                })
 | 
			
		||||
                internet_service_id = inet_services.Id
 | 
			
		||||
                public_ip_info = inet_services.PublicIpAddress
 | 
			
		||||
 | 
			
		||||
              else
 | 
			
		||||
                #create additional services to existing Public IP
 | 
			
		||||
                inet_services = connection.internetservices.create({
 | 
			
		||||
                      "public_ip_address_id" => public_ip_info["Id"],                      
 | 
			
		||||
                      "Name" => self.name,
 | 
			
		||||
                      "Protocol" => proto,
 | 
			
		||||
                      "Port" => port,
 | 
			
		||||
                }
 | 
			
		||||
                    )
 | 
			
		||||
                internet_service_id = inet_services.Id
 | 
			
		||||
              end
 | 
			
		||||
 | 
			
		||||
              #Create the associate node service to the server
 | 
			
		||||
              connection.nodeservices.create({"Name" => self.name, 
 | 
			
		||||
                                           "IpAddress" => self.IpAddress,
 | 
			
		||||
                                           "Port" => port,
 | 
			
		||||
                                           "InternetServiceId" => internet_service_id
 | 
			
		||||
              })
 | 
			
		||||
            end
 | 
			
		||||
          end
 | 
			
		||||
          true
 | 
			
		||||
        end
 | 
			
		||||
 | 
			
		||||
        def save
 | 
			
		||||
          requires :name
 | 
			
		||||
          data = connection.instantiate_vapp(name)
 | 
			
		||||
          if powerOn
 | 
			
		||||
          end
 | 
			
		||||
          data = connection.instantiate_vapp_template(
 | 
			
		||||
              server_name=name, 
 | 
			
		||||
              vapp_template=image, 
 | 
			
		||||
              options={
 | 
			
		||||
                  'ssh_key_fingerprint' => sshkeyFingerPrint,
 | 
			
		||||
                  'cpus' => vcpus,
 | 
			
		||||
                  'memory' => memory
 | 
			
		||||
              })
 | 
			
		||||
 | 
			
		||||
          merge_attributes(data.body)
 | 
			
		||||
          task = connection.deploy_vapp(id)
 | 
			
		||||
          task.wait_for { ready? }
 | 
			
		||||
          task = connection.power_on(id)
 | 
			
		||||
          task.wait_for { ready? }
 | 
			
		||||
          wait_for { ready? }
 | 
			
		||||
 | 
			
		||||
          #Optional, incase further configuration required.
 | 
			
		||||
          if powerOn
 | 
			
		||||
            power_on
 | 
			
		||||
            wait_for { ready? }
 | 
			
		||||
          end
 | 
			
		||||
 | 
			
		||||
          true
 | 
			
		||||
        end
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -100,11 +201,9 @@ module Fog
 | 
			
		|||
 | 
			
		||||
        def type=(new_type); @type = new_type; end
 | 
			
		||||
        def size=(new_size); @size = new_size; end
 | 
			
		||||
        def IpAddress=(new_ipaddress); @IpAddress = new_ipaddress; end
 | 
			
		||||
        def Links=(new_links); @Links = new_links; end
 | 
			
		||||
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -22,20 +22,19 @@ module Fog
 | 
			
		|||
        model Fog::Terremark::Shared::Server
 | 
			
		||||
 | 
			
		||||
        def all
 | 
			
		||||
          data = connection.get_vdc(vdc_id).body['ResourceEntities'].select do |entity|
 | 
			
		||||
            entity['type'] == 'application/vnd.vmware.vcloud.vApp+xml'
 | 
			
		||||
          data = []
 | 
			
		||||
          connection.get_vdc(vdc_id).body['ResourceEntities'].select do |entity|
 | 
			
		||||
              data << connection.servers.get(entity["href"].split('/').last)
 | 
			
		||||
          end
 | 
			
		||||
          load(data)
 | 
			
		||||
          data
 | 
			
		||||
        end
 | 
			
		||||
 | 
			
		||||
        def get(server_id)
 | 
			
		||||
          if server_id && server = connection.get_vapp(server_id).body
 | 
			
		||||
            new(server)
 | 
			
		||||
          elsif !server_id
 | 
			
		||||
          if server_id
 | 
			
		||||
            new(connection.get_vapp(server_id).body)
 | 
			
		||||
          else
 | 
			
		||||
            nil
 | 
			
		||||
          end
 | 
			
		||||
        rescue Excon::Errors::Forbidden
 | 
			
		||||
          nil
 | 
			
		||||
        end
 | 
			
		||||
 | 
			
		||||
        def vdc_id
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -9,7 +9,9 @@ module Fog
 | 
			
		|||
        identity :id
 | 
			
		||||
 | 
			
		||||
        attribute :name
 | 
			
		||||
 | 
			
		||||
        attribute :ResourceEntities
 | 
			
		||||
        attribute :AvailableNetworks
 | 
			
		||||
        attribute :links
 | 
			
		||||
        def networks
 | 
			
		||||
          connection.networks(:vdc_id => id)
 | 
			
		||||
        end
 | 
			
		||||
| 
						 | 
				
			
			@ -22,6 +24,9 @@ module Fog
 | 
			
		|||
          connection.servers(:vdc_id => id)
 | 
			
		||||
        end
 | 
			
		||||
 | 
			
		||||
        def images
 | 
			
		||||
          connection.images(:vdc_id => id)
 | 
			
		||||
        end
 | 
			
		||||
        private
 | 
			
		||||
 | 
			
		||||
        def href=(new_href)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -14,8 +14,13 @@ module Fog
 | 
			
		|||
            case name
 | 
			
		||||
            when 'CatalogItem'
 | 
			
		||||
              catalog_item = {}
 | 
			
		||||
              until attributes.empty?
 | 
			
		||||
                catalog_item[attributes.shift] = attributes.shift
 | 
			
		||||
              attributes.each do |attrib|
 | 
			
		||||
                i = 0
 | 
			
		||||
                while i < attrib.size
 | 
			
		||||
                  catalog_item[attrib[i]] = attrib[i+1]
 | 
			
		||||
                  i += 2
 | 
			
		||||
                end
 | 
			
		||||
                catalog_item["id"] = catalog_item["href"].split('/').last
 | 
			
		||||
              end            
 | 
			
		||||
              @response['CatalogItems'] << catalog_item
 | 
			
		||||
            when 'Catalog'
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										56
									
								
								lib/fog/terremark/parsers/shared/get_keys_list.rb
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										56
									
								
								lib/fog/terremark/parsers/shared/get_keys_list.rb
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,56 @@
 | 
			
		|||
 | 
			
		||||
module Fog
 | 
			
		||||
  module Parsers
 | 
			
		||||
    module Terremark
 | 
			
		||||
      module Shared
 | 
			
		||||
 | 
			
		||||
        class GetKeysList < Fog::Parsers::Base
 | 
			
		||||
 | 
			
		||||
          def reset
 | 
			
		||||
            @response = { 'Keys' => [] }
 | 
			
		||||
            @key = {}
 | 
			
		||||
          end
 | 
			
		||||
 | 
			
		||||
          def start_element(name, attributes)
 | 
			
		||||
            super
 | 
			
		||||
            case name
 | 
			
		||||
            when 'Id', 'Href', 'Name', 'IsDefault','FingerPrint'
 | 
			
		||||
              data = {}
 | 
			
		||||
              until attributes.empty?
 | 
			
		||||
                data[attributes.shift] = attributes.shift
 | 
			
		||||
              end
 | 
			
		||||
              @key[name] = data
 | 
			
		||||
            when 'Key'
 | 
			
		||||
              until attributes.empty?
 | 
			
		||||
                @key[attributes.shift] = attributes.shift
 | 
			
		||||
              end
 | 
			
		||||
            when 'Keys'
 | 
			
		||||
              keys_list = {}
 | 
			
		||||
              until attributes.empty?
 | 
			
		||||
                if attributes.first.is_a?(Array)
 | 
			
		||||
                  attribute = attributes.shift
 | 
			
		||||
                  keys_list[attribute.first] = attribute.last
 | 
			
		||||
                else
 | 
			
		||||
                  keys_list[attributes.shift] = attributes.shift
 | 
			
		||||
                end
 | 
			
		||||
              end
 | 
			
		||||
              @response['href'] = keys_list['href']
 | 
			
		||||
            end
 | 
			
		||||
          end
 | 
			
		||||
 | 
			
		||||
          def end_element(name)
 | 
			
		||||
            case name
 | 
			
		||||
            when 'Id', 'Href', 'Name', 'IsDefault','FingerPrint'
 | 
			
		||||
            @key[name] = value
 | 
			
		||||
            when 'Key'
 | 
			
		||||
              @response['Keys'] << @key
 | 
			
		||||
              @key = {}
 | 
			
		||||
            end
 | 
			
		||||
          end
 | 
			
		||||
 | 
			
		||||
        end
 | 
			
		||||
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
| 
						 | 
				
			
			@ -31,21 +31,22 @@ module Fog
 | 
			
		|||
            options['Enabled'] = true
 | 
			
		||||
          end
 | 
			
		||||
          data = <<-DATA
 | 
			
		||||
  <InternetService xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="urn:tmrk:vCloudExpress-1.0:request:createInternetService">
 | 
			
		||||
    <Name>#{name}</Name>
 | 
			
		||||
    <Protocol>#{protocol.upcase}</Protocol>
 | 
			
		||||
    <Port>#{port}</Port>
 | 
			
		||||
    <Enabled>#{options['Enabled']}</Enabled>
 | 
			
		||||
    <Description>#{options['Description']}</Description>
 | 
			
		||||
  </InternetService>
 | 
			
		||||
  DATA
 | 
			
		||||
          <CreateInternetServiceRequest xml:lang="en" xmlns="urn:tmrk:vCloudExpressExtensions-1.6" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
 | 
			
		||||
            <Name>#{name}</Name>
 | 
			
		||||
            <Protocol>#{protocol.upcase}</Protocol>
 | 
			
		||||
            <Port>#{port}</Port> 
 | 
			
		||||
            <Enabled>#{options['Enabled']}</Enabled>
 | 
			
		||||
            <Description>#{options['Description']}</Description>
 | 
			
		||||
            </CreateInternetServiceRequest>
 | 
			
		||||
            DATA
 | 
			
		||||
          request(
 | 
			
		||||
            :body     => data,
 | 
			
		||||
            :expects  => 200,
 | 
			
		||||
            :headers  => {'Content-Type' => 'application/xml'},
 | 
			
		||||
            :method   => 'POST',
 | 
			
		||||
            :parser   => Fog::Parsers::Terremark::Shared::InternetService.new,
 | 
			
		||||
            :path     => "publicIps/#{ip_id}/internetServices"
 | 
			
		||||
            :path     => "api/extensions/v1.6/publicIp/#{ip_id}/internetServices",
 | 
			
		||||
            :override_path => true
 | 
			
		||||
          )
 | 
			
		||||
        end
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -30,23 +30,21 @@ module Fog
 | 
			
		|||
          unless options.has_key?('Enabled')
 | 
			
		||||
            options['Enabled'] = true
 | 
			
		||||
          end
 | 
			
		||||
 | 
			
		||||
          data = <<-DATA
 | 
			
		||||
  <NodeService xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="urn:tmrk:vCloudExpress-1.0:request:createNodeService">
 | 
			
		||||
    <IpAddress>#{ip}</IpAddress>
 | 
			
		||||
    <Name>#{name}</Name>
 | 
			
		||||
    <Port>#{port}</Port>
 | 
			
		||||
    <Enabled>#{options['Enabled']}</Enabled>
 | 
			
		||||
    <Description>#{options['Description']}</Description>
 | 
			
		||||
  </NodeService>
 | 
			
		||||
  DATA
 | 
			
		||||
          request(
 | 
			
		||||
                <CreateNodeServiceRequest xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="urn:tmrk:vCloudExpressExtensions-1.6"><IpAddress>#{ip}</IpAddress><Name>#{name}</Name><Port>#{port}</Port><Enabled>#{options['Enabled']}</Enabled><Description>#{options['Description']}</Description></CreateNodeServiceRequest>
 | 
			
		||||
          DATA
 | 
			
		||||
          response = request(
 | 
			
		||||
            :body     => data,
 | 
			
		||||
            :expects  => 200,
 | 
			
		||||
            :headers  => {'Content-Type' => 'application/xml'},
 | 
			
		||||
            :headers  => {'Content-Type' => 'application/vnd.tmrk.vCloud.nodeService+xml'},
 | 
			
		||||
            :method   => 'POST',
 | 
			
		||||
            :parser   => Fog::Parsers::Terremark::Shared::InternetService.new,
 | 
			
		||||
            :path     => "internetServices/#{service_id}/nodes"
 | 
			
		||||
            :parser   => Fog::Parsers::Terremark::Shared::NodeService.new,
 | 
			
		||||
            :path     => "api/extensions/v1.6/internetService/#{service_id}/nodeServices",
 | 
			
		||||
            :override_path => true
 | 
			
		||||
          )
 | 
			
		||||
 | 
			
		||||
          response
 | 
			
		||||
        end
 | 
			
		||||
 | 
			
		||||
      end
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										61
									
								
								lib/fog/terremark/requests/shared/configure_vapp.rb
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										61
									
								
								lib/fog/terremark/requests/shared/configure_vapp.rb
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,61 @@
 | 
			
		|||
module Fog
 | 
			
		||||
  module Terremark
 | 
			
		||||
    module Shared
 | 
			
		||||
      module Real
 | 
			
		||||
        include Common
 | 
			
		||||
        def configure_vapp(vapp_id, vapp_name, options = {})
 | 
			
		||||
 | 
			
		||||
        items = ""
 | 
			
		||||
        vapp_uri = [@host, @path, "vApp", vapp_id.to_s].join("/") 
 | 
			
		||||
        
 | 
			
		||||
        if options['vcpus']
 | 
			
		||||
          vcpu_item = <<-DATA
 | 
			
		||||
<Item xmlns="http://schemas.dmtf.org/ovf/envelope/1"> <InstanceID xmlns="http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_ResourceAllocationSettingData">1</InstanceID><ResourceType xmlns="http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_ResourceAllocationSettingData">3</ResourceType><VirtualQuantity xmlns="http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_ResourceAllocationSettingData">#{options['vcpus']}</VirtualQuantity></Item>
 | 
			
		||||
DATA
 | 
			
		||||
          items << vcpu_item
 | 
			
		||||
        end
 | 
			
		||||
 | 
			
		||||
        if options['memory']
 | 
			
		||||
          memory_item = <<-DATA
 | 
			
		||||
<Item xmlns="http://schemas.dmtf.org/ovf/envelope/1"><InstanceID xmlns="http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_ResourceAllocationSettingData">2</InstanceID><ResourceType xmlns="http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_ResourceAllocationSettingData">4</ResourceType>38<VirtualQuantity xmlns="http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_ResourceAllocationSettingData">#{options['memory']}</VirtualQuantity></Item>
 | 
			
		||||
DATA
 | 
			
		||||
          items << memory_item
 | 
			
		||||
        end
 | 
			
		||||
        #Default root disk
 | 
			
		||||
        virtual_disk_item = <<-DATA
 | 
			
		||||
<Item>
 | 
			
		||||
<AddressOnParent xmlns="http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_ResourceAllocationSettingData">0</AddressOnParent> <HostResource xmlns="http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_ResourceAllocationSettingData">1048576</HostResource><InstanceID xmlns="http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_ResourceAllocationSettingData">9</InstanceID><ResourceType xmlns="http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_ResourceAllocationSettingData">17</ResourceType><VirtualQuantity xmlns="http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_ResourceAllocationSettingData">1048576</VirtualQuantity></Item>
 | 
			
		||||
DATA
 | 
			
		||||
        items << virtual_disk_item
 | 
			
		||||
        #Additional disks
 | 
			
		||||
        if options['virtual_disks']
 | 
			
		||||
          for disk in options['virtual_disks']
 | 
			
		||||
            actual_size = disk.to_i * 1024 * 1024
 | 
			
		||||
            virtual_disk_item = <<-DATA
 | 
			
		||||
<Item>
 | 
			
		||||
<AddressOnParent xmlns="http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_ResourceAllocationSettingData">-1</AddressOnParent><HostResource xmlns="http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_ResourceAllocationSettingData">#{actual_size}</HostResource><InstanceID xmlns="http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_ResourceAllocationSettingData">9</InstanceID><ResourceType xmlns="http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_ResourceAllocationSettingData">17</ResourceType><VirtualQuantity xmlns="http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_ResourceAllocationSettingData">#{actual_size}</VirtualQuantity></Item>
 | 
			
		||||
DATA
 | 
			
		||||
            items << virtual_disk_item
 | 
			
		||||
          end
 | 
			
		||||
        end
 | 
			
		||||
          
 | 
			
		||||
        data = <<-DATA
 | 
			
		||||
<VApp href="#{vapp_uri}" type="application/vnd.vmware.vcloud.vApp+xml" name="#{vapp_name}" status="2" size="10485760" xmlns="http://www.vmware.com/vcloud/v0.8" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
 | 
			
		||||
<VirtualHardwareSection xmlns="http://schemas.dmtf.org/ovf/envelope/1"><Info>Virtual Hardware</Info>#{items}
 | 
			
		||||
</VirtualHardwareSection>
 | 
			
		||||
</VApp>
 | 
			
		||||
DATA
 | 
			
		||||
 | 
			
		||||
          request(
 | 
			
		||||
            :body => data,
 | 
			
		||||
            :expects => 202,
 | 
			
		||||
            :headers => { 'Content-Type' => 'application/vnd.vmware.vCloud.vApp+xml' },
 | 
			
		||||
            :method => 'PUT',
 | 
			
		||||
            :path => "vapp/#{vapp_id}"
 | 
			
		||||
          )
 | 
			
		||||
        end
 | 
			
		||||
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
| 
						 | 
				
			
			@ -2,6 +2,7 @@ module Fog
 | 
			
		|||
  module Terremark
 | 
			
		||||
    module Shared
 | 
			
		||||
      module Real
 | 
			
		||||
        include Common
 | 
			
		||||
 | 
			
		||||
        # Reserve requested resources and deploy vApp
 | 
			
		||||
        #
 | 
			
		||||
| 
						 | 
				
			
			@ -30,23 +31,27 @@ module Fog
 | 
			
		|||
          unless options.has_key?('Enabled')
 | 
			
		||||
            options['Enabled'] = true
 | 
			
		||||
          end
 | 
			
		||||
          #Sample: "https://services.vcloudexpress.terremark.com/api/extensions/v1.6/vdc/3142/internetServices"
 | 
			
		||||
          path = vdcs.get(vdc_id).links.find { |item| item['name'] == 'Internet Services'}['href'].split(@host)[1]
 | 
			
		||||
          data = <<-DATA
 | 
			
		||||
  <InternetService xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="urn:tmrk:vCloudExpress-1.0:request:createInternetService">
 | 
			
		||||
    <Name>#{name}</Name>
 | 
			
		||||
    <Protocol>#{protocol.upcase}</Protocol>
 | 
			
		||||
    <Port>#{port}</Port>
 | 
			
		||||
    <Enabled>#{options['Enabled']}</Enabled>
 | 
			
		||||
    <Description>#{options['Description']}</Description>
 | 
			
		||||
  </InternetService>
 | 
			
		||||
  DATA
 | 
			
		||||
          request(
 | 
			
		||||
          <CreateInternetServiceRequest xml:lang="en" xmlns="urn:tmrk:vCloudExpressExtensions-1.6" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
 | 
			
		||||
            <Name>#{name}</Name>
 | 
			
		||||
            <Protocol>#{protocol.upcase}</Protocol>
 | 
			
		||||
            <Port>#{port}</Port> 
 | 
			
		||||
            <Enabled>#{options['Enabled']}</Enabled>
 | 
			
		||||
            <Description>#{options['Description']}</Description>
 | 
			
		||||
            </CreateInternetServiceRequest>
 | 
			
		||||
            DATA
 | 
			
		||||
          response = request(
 | 
			
		||||
            :body     => data,
 | 
			
		||||
            :expects  => 200,
 | 
			
		||||
            :headers  => {'Content-Type' => 'application/xml'},
 | 
			
		||||
            :headers  => {'Content-Type' => 'application/vnd.tmrk.vCloud.internetService+xml'},
 | 
			
		||||
            :method   => 'POST',
 | 
			
		||||
            :parser   => Fog::Parsers::Terremark::Shared::InternetService.new,
 | 
			
		||||
            :path     => "vdc/#{vdc_id}/internetServices"
 | 
			
		||||
	    :path     => path,
 | 
			
		||||
            :override_path => true
 | 
			
		||||
          )
 | 
			
		||||
          response
 | 
			
		||||
        end
 | 
			
		||||
 | 
			
		||||
      end
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -12,7 +12,8 @@ module Fog
 | 
			
		|||
          request(
 | 
			
		||||
            :expects  => 200,
 | 
			
		||||
            :method   => 'DELETE',
 | 
			
		||||
            :path     => "InternetServices/#{internet_service_id}"
 | 
			
		||||
            :path     => "api/extensions/v1.6/internetService/#{internet_service_id}",
 | 
			
		||||
            :override_path => true
 | 
			
		||||
          )
 | 
			
		||||
        end
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -12,7 +12,8 @@ module Fog
 | 
			
		|||
          request(
 | 
			
		||||
            :expects  => 200,
 | 
			
		||||
            :method   => 'DELETE',
 | 
			
		||||
            :path     => "nodeServices/#{node_service_id}"
 | 
			
		||||
            :path     => "api/extensions/v1.6/nodeService/#{node_service_id}",
 | 
			
		||||
            :override_path => true
 | 
			
		||||
          )
 | 
			
		||||
        end
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -12,7 +12,8 @@ module Fog
 | 
			
		|||
          request(
 | 
			
		||||
            :expects  => 200,
 | 
			
		||||
            :method   => 'DELETE',
 | 
			
		||||
            :path     => "publicIps/#{public_ip_id}"
 | 
			
		||||
            :path     => "api/extensions/v1.6/publicIp/#{public_ip_id}",
 | 
			
		||||
            :override_path => true
 | 
			
		||||
          )
 | 
			
		||||
        end
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -25,7 +25,8 @@ module Fog
 | 
			
		|||
            :expects  => 200,
 | 
			
		||||
            :method   => 'GET',
 | 
			
		||||
            :parser   => Fog::Parsers::Terremark::Shared::GetInternetServices.new,
 | 
			
		||||
            :path     => "vdc/#{vdc_id}/internetServices"
 | 
			
		||||
            :path     => "api/extensions/v1.6/vdc/#{vdc_id}/internetServices",
 | 
			
		||||
            :override_path => true
 | 
			
		||||
          )
 | 
			
		||||
        end
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										36
									
								
								lib/fog/terremark/requests/shared/get_keys_list.rb
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										36
									
								
								lib/fog/terremark/requests/shared/get_keys_list.rb
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,36 @@
 | 
			
		|||
module Fog
 | 
			
		||||
  module Terremark
 | 
			
		||||
    module Shared
 | 
			
		||||
      module Real
 | 
			
		||||
        include Common
 | 
			
		||||
 | 
			
		||||
        # Get list of SSH keys for an organization
 | 
			
		||||
        #
 | 
			
		||||
        # ==== Parameters
 | 
			
		||||
        # * organization_id<~Integer> - Id of organization to lookup
 | 
			
		||||
        #
 | 
			
		||||
        # ==== Returns
 | 
			
		||||
        # * response<~Excon::Response>:
 | 
			
		||||
        #   * body<~Hash>:
 | 
			
		||||
        #     * 'description'<~String> - Description of organization
 | 
			
		||||
        #     * 'links'<~Array> - An array of links to entities in the organization
 | 
			
		||||
        #       * 'href'<~String> - location of link
 | 
			
		||||
        #       * 'name'<~String> - name of link
 | 
			
		||||
        #       * 'rel'<~String> - action to perform
 | 
			
		||||
        #       * 'type'<~String> - type of link
 | 
			
		||||
        def get_keys_list(organization_id)
 | 
			
		||||
          response = request(
 | 
			
		||||
            :expects  => 200,
 | 
			
		||||
            :method   => 'GET',
 | 
			
		||||
            :parser   => Fog::Parsers::Terremark::Shared::GetKeysList.new,
 | 
			
		||||
            :path     => "api/extensions/v1.6/org/#{organization_id}/keys",
 | 
			
		||||
            :override_path => true
 | 
			
		||||
          )
 | 
			
		||||
          response
 | 
			
		||||
        end
 | 
			
		||||
      
 | 
			
		||||
      end
 | 
			
		||||
    
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
| 
						 | 
				
			
			@ -20,7 +20,8 @@ module Fog
 | 
			
		|||
            :expects  => 200,
 | 
			
		||||
            :method   => 'GET',
 | 
			
		||||
            :parser   => Fog::Parsers::Terremark::Shared::GetNodeServices.new,
 | 
			
		||||
            :path     => "InternetServices/#{service_id}/nodes"
 | 
			
		||||
            :path     => "api/extensions/v1.6/internetService/#{service_id}/nodeServices",
 | 
			
		||||
            :override_path => true
 | 
			
		||||
          )
 | 
			
		||||
        end
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -23,17 +23,27 @@ module Fog
 | 
			
		|||
          unless name.length < 15
 | 
			
		||||
            raise ArgumentError.new('Name must be fewer than 15 characters')
 | 
			
		||||
          end
 | 
			
		||||
          unless vapp_template
 | 
			
		||||
            raise ArgumentError.new("vApp Image Template is a compulsary parameter")
 | 
			
		||||
          end
 | 
			
		||||
          options['ssh_key_fingerprint'] ||= default_ssh_key["FingerPrint"]
 | 
			
		||||
          options['cpus'] ||= 1
 | 
			
		||||
          options['memory'] ||= 512
 | 
			
		||||
          options['network_id'] ||= default_network_id
 | 
			
		||||
          options['vdc_id'] ||= default_vdc_id
 | 
			
		||||
          options['primary_dns'] ||= '208.67.222.222'
 | 
			
		||||
          options['secondary_dns'] ||= '208.67.220.220'
 | 
			
		||||
 | 
			
		||||
          data = <<-DATA
 | 
			
		||||
<?xml version="1.0" encoding="UTF-8"?>
 | 
			
		||||
<InstantiateVAppTemplateParams name="#{name}" xmlns="http://www.vmware.com/vcloud/v0.8" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.vmware.com/vcloud/v0.8 http://services.vcloudexpress.terremark.com/api/v0.8/ns/vcloud.xsd">
 | 
			
		||||
  <VAppTemplate href="#{@scheme}://#{@host}/#{@path}/vAppTemplate/#{vapp_template}" />
 | 
			
		||||
  <InstantiationParams xmlns:vmw="http://www.vmware.com/schema/ovf">
 | 
			
		||||
    <ProductSection xmlns:ovf="http://schemas.dmtf.org/ovf/envelope/1" xmlns:q1="http://www.vmware.com/vcloud/v0.8"/>
 | 
			
		||||
    <ProductSection xmlns:ovf="http://schemas.dmtf.org/ovf/envelope/1" xmlns:q1="http://www.vmware.com/vcloud/v0.8">
 | 
			
		||||
    <Property xmlns="http://schemas.dmtf.org/ovf/envelope/1" ovf:key="primaryDNS" ovf:value="#{options['primary_dns']}" />
 | 
			
		||||
    <Property xmlns="http://schemas.dmtf.org/ovf/envelope/1" ovf:key="secondaryDNS" ovf:value="#{options['secondary_dns']}" />
 | 
			
		||||
    <Property xmlns="http://schemas.dmtf.org/ovf/envelope/1" ovf:key="sshKeyFingerprint" ovf:value="#{options['ssh_key_fingerprint']}" />
 | 
			
		||||
    </ProductSection>
 | 
			
		||||
    <VirtualHardwareSection xmlns:q1="http://www.vmware.com/vcloud/v0.8">
 | 
			
		||||
      <Item xmlns="http://schemas.dmtf.org/ovf/envelope/1">
 | 
			
		||||
        <InstanceID xmlns="http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_ResourceAllocationSettingData">1</InstanceID>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -72,6 +72,15 @@ module Fog
 | 
			
		|||
          if @cookie
 | 
			
		||||
            headers.merge!('Cookie' => @cookie)
 | 
			
		||||
          end
 | 
			
		||||
          if params[:path]
 | 
			
		||||
              if params[:override_path] == true
 | 
			
		||||
                  path = params[:path]
 | 
			
		||||
              else
 | 
			
		||||
                  path = "#{@path}/#{params[:path]}"
 | 
			
		||||
              end
 | 
			
		||||
          else
 | 
			
		||||
              path = "#{@path}"
 | 
			
		||||
          end
 | 
			
		||||
          @connection.request({
 | 
			
		||||
            :body     => params[:body],
 | 
			
		||||
            :expects  => params[:expects],
 | 
			
		||||
| 
						 | 
				
			
			@ -79,7 +88,7 @@ module Fog
 | 
			
		|||
            :host     => @host,
 | 
			
		||||
            :method   => params[:method],
 | 
			
		||||
            :parser   => params[:parser],
 | 
			
		||||
            :path     => "#{@path}/#{params[:path]}"
 | 
			
		||||
            :path     => path
 | 
			
		||||
          })
 | 
			
		||||
        end
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -236,10 +245,16 @@ module Fog
 | 
			
		|||
        require 'fog/terremark/models/shared/networks'
 | 
			
		||||
        require 'fog/terremark/models/shared/server'
 | 
			
		||||
        require 'fog/terremark/models/shared/servers'
 | 
			
		||||
        require 'fog/terremark/models/shared/image'
 | 
			
		||||
        require 'fog/terremark/models/shared/images'
 | 
			
		||||
        require 'fog/terremark/models/shared/task'
 | 
			
		||||
        require 'fog/terremark/models/shared/tasks'
 | 
			
		||||
        require 'fog/terremark/models/shared/vdc'
 | 
			
		||||
        require 'fog/terremark/models/shared/vdcs'
 | 
			
		||||
        require 'fog/terremark/models/shared/internetservice'
 | 
			
		||||
        require 'fog/terremark/models/shared/internetservices'
 | 
			
		||||
        require 'fog/terremark/models/shared/nodeservice'
 | 
			
		||||
        require 'fog/terremark/models/shared/nodeservices'
 | 
			
		||||
        require 'fog/terremark/parsers/shared/get_catalog'
 | 
			
		||||
        require 'fog/terremark/parsers/shared/get_catalog_item'
 | 
			
		||||
        require 'fog/terremark/parsers/shared/get_internet_services'
 | 
			
		||||
| 
						 | 
				
			
			@ -249,6 +264,7 @@ module Fog
 | 
			
		|||
        require 'fog/terremark/parsers/shared/get_organizations'
 | 
			
		||||
        require 'fog/terremark/parsers/shared/get_public_ips'
 | 
			
		||||
        require 'fog/terremark/parsers/shared/get_tasks_list'
 | 
			
		||||
        require 'fog/terremark/parsers/shared/get_keys_list'
 | 
			
		||||
        require 'fog/terremark/parsers/shared/get_vapp_template'
 | 
			
		||||
        require 'fog/terremark/parsers/shared/get_vdc'
 | 
			
		||||
        require 'fog/terremark/parsers/shared/instantiate_vapp_template'
 | 
			
		||||
| 
						 | 
				
			
			@ -278,10 +294,12 @@ module Fog
 | 
			
		|||
        require 'fog/terremark/requests/shared/get_public_ips'
 | 
			
		||||
        require 'fog/terremark/requests/shared/get_task'
 | 
			
		||||
        require 'fog/terremark/requests/shared/get_tasks_list'
 | 
			
		||||
        require 'fog/terremark/requests/shared/get_keys_list'
 | 
			
		||||
        require 'fog/terremark/requests/shared/get_vapp'
 | 
			
		||||
        require 'fog/terremark/requests/shared/get_vapp_template'
 | 
			
		||||
        require 'fog/terremark/requests/shared/get_vdc'
 | 
			
		||||
        require 'fog/terremark/requests/shared/instantiate_vapp_template'
 | 
			
		||||
        require 'fog/terremark/requests/shared/configure_vapp'
 | 
			
		||||
        require 'fog/terremark/requests/shared/power_off'
 | 
			
		||||
        require 'fog/terremark/requests/shared/power_on'
 | 
			
		||||
        require 'fog/terremark/requests/shared/power_reset'
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -7,7 +7,8 @@ module Fog
 | 
			
		|||
 | 
			
		||||
     module Defaults
 | 
			
		||||
       HOST   = 'services.vcloudexpress.terremark.com'
 | 
			
		||||
       PATH   = '/api/v0.8'
 | 
			
		||||
       PATH   = '/api/v0.8a-ext1.6'
 | 
			
		||||
       #PATH   = '/api/'
 | 
			
		||||
       PORT   = 443
 | 
			
		||||
       SCHEME = 'https'
 | 
			
		||||
     end
 | 
			
		||||
| 
						 | 
				
			
			@ -96,6 +97,14 @@ module Fog
 | 
			
		|||
        end
 | 
			
		||||
     end
 | 
			
		||||
 | 
			
		||||
     def default_ssh_key
 | 
			
		||||
         if default_ssh_key
 | 
			
		||||
             @default_ssh_key ||= begin
 | 
			
		||||
                keys = get_keys_list(default_organization_id).body["Keys"]
 | 
			
		||||
                keys.find { |item| item["IsDefault"] == "true" }
 | 
			
		||||
            end
 | 
			
		||||
         end
 | 
			
		||||
     end
 | 
			
		||||
     class Mock
 | 
			
		||||
       include Fog::Terremark::Shared::Mock
 | 
			
		||||
       include Fog::Terremark::Shared::Parser
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue