module Fog::Vcloud::Compute::Shared

Private Instance Methods

generate_configure_node_request(node_data) click to toggle source
# File lib/fog/vcloud/requests/compute/configure_node.rb, line 7
def generate_configure_node_request(node_data)
  builder = Builder::XmlMarkup.new
  builder.NodeService(:"xmlns:i" => "http://www.w3.org/2001/XMLSchema-instance",
                          :xmlns => "urn:tmrk:eCloudExtensions-2.0") {
    builder.Name(node_data[:name])
    builder.Enabled(node_data[:enabled].to_s)
    builder.Description(node_data[:description])
  }
end
generate_instantiate_vapp_template_request(options) click to toggle source
# File lib/fog/vcloud/requests/compute/instantiate_vapp_template.rb, line 44
def generate_instantiate_vapp_template_request(options)
  xml = Builder::XmlMarkup.new
  xml.InstantiateVAppTemplateParams(xmlns.merge!(:name => options[:name], :"xml:lang" => "en")) {
    xml.Description(options[:description])
    xml.InstantiationParams {
      if options[:network_uri]
        # TODO - implement properly
        xml.NetworkConfigSection {
          xml.tag!("ovf:Info"){ "Configuration parameters for logical networks" }
          xml.NetworkConfig("networkName" => options[:network_name]) {
            # xml.NetworkAssociation( :href => options[:network_uri] )
              xml.Configuration {
                xml.ParentNetwork("name" => options[:network_name], "href" => options[:network_uri])
                xml.FenceMode("bridged")
            }
          }
        }
      end
    }
    # The template
    xml.Source(:href => options[:template_uri])
    xml.AllEULAsAccepted("true")
  }
end
validate_instantiate_vapp_template_options(options) click to toggle source
# File lib/fog/vcloud/requests/compute/instantiate_vapp_template.rb, line 7
def validate_instantiate_vapp_template_options options
  # :network_uri removed, if not specified will use template network config.
  valid_opts = [:catalog_item_uri, :name, :vdc_uri]
  unless valid_opts.all? { |opt| options.key?(opt) }
    raise ArgumentError.new("Required data missing: #{(valid_opts - options.keys).map(&:inspect).join(", ")}")
  end

  catalog_item_uri = options[:catalog_item_uri]

  # Figure out the template_uri
  catalog_item = get_catalog_item( catalog_item_uri ).body
  catalog_item[:Entity] = [ catalog_item[:Entity] ] if catalog_item[:Entity].is_a?(Hash)
  catalog_item[:Link] = [ catalog_item[:Link] ] if catalog_item[:Link].is_a?(Hash)

  options[:template_uri] = begin
     catalog_item[:Entity].find { |entity| entity[:type] == "application/vnd.vmware.vcloud.vAppTemplate+xml" }[:href]
  rescue
    raise RuntimeError.new("Unable to locate template uri for #{catalog_item_uri}")
  end

  customization_options = begin
      get_vapp_template(options[:template_uri]).body[:Children][:Vm][:GuestCustomizationSection]
  rescue
    raise RuntimeError.new("Unable to get customization options for #{catalog_item_uri}")
  end

  # Check to see if we can set the password
  if options[:password] and customization_options[:AdminPasswordEnabled] == "false"
    raise ArgumentError.new("This catalog item (#{catalog_item_uri}) does not allow setting a password.")
  end

  # According to the docs if CustomizePassword is "true" then we NEED to set a password
  if customization_options[:AdminPasswordEnabled] == "true" and customization_options[:AdminPasswordAuto] == "false" and ( options[:password].nil? or options[:password].empty? )
    raise ArgumentError.new("This catalog item (#{catalog_item_uri}) requires a :password to instantiate.")
  end
end
validate_network_ip_data(network_ip_data) click to toggle source
# File lib/fog/vcloud/requests/compute/configure_network_ip.rb, line 7
def validate_network_ip_data(network_ip_data)
  valid_opts = [:id, :href, :name, :status, :server]
  unless valid_opts.all? { |opt| network_ip_data.key?(opt) }
    raise ArgumentError.new("Required data missing: #{(valid_opts - network_ip_data.keys).map(&:inspect).join(", ")}")
  end
end
validate_vapp_data(vapp_data) click to toggle source
# File lib/fog/vcloud/requests/compute/configure_vapp.rb, line 7
def validate_vapp_data(vapp_data)
  valid_opts = [:name, :cpus, :memory, :disks]
  unless valid_opts.all? { |opt| vapp_data.key?(opt) }
    raise ArgumentError.new("Required Vapp data missing: #{(valid_opts - vapp_data.keys).map(&:inspect).join(", ")}")
  end
end
validate_vm_data(vm_data) click to toggle source
# File lib/fog/vcloud/requests/compute/configure_vm.rb, line 7
def validate_vm_data(vm_data)
  valid_opts = [:name, :cpus, :memory, :disks]
  unless valid_opts.all? { |opt| vm_data.key?(opt) }
    raise ArgumentError.new("Required vm data missing: #{(valid_opts - vm_data.keys).map(&:inspect).join(", ")}")
  end
end