diff --git a/lib/fog/vcloud_director/requests/compute/get_catalogs_from_query.rb b/lib/fog/vcloud_director/requests/compute/get_catalogs_from_query.rb index b0a19fb24..b1ada430e 100644 --- a/lib/fog/vcloud_director/requests/compute/get_catalogs_from_query.rb +++ b/lib/fog/vcloud_director/requests/compute/get_catalogs_from_query.rb @@ -15,8 +15,19 @@ module Fog # multiple pages, return this page. # @option options [Integer] :pageSize (25) Number of results per page, # to a maximum of 128. + # @option options [String] :format (records) One of the following + # types: + # - *references* Returns a reference to each object, including its + # :name, :type, and :href attributes. + # - *records* Returns all database records for each object, with each + # record as an attribute. + # - *idrecords* Identical to the records format, except that object + # references are returned in :id format rather than :href format. + # @option options [Array] :fields (all static attribute names) + # List of attribute names or metadata key names to return. # @option options [Integer] :offset (0) Integer value specifying the # first record to return. Record numbers < offset are not returned. + # @option options [String] :filter (none) Filter expression. # @return [Excon::Response] # * hash<~Hash>: # * :href<~String> - The URI of the entity. @@ -28,6 +39,11 @@ module Fog # references. # * :total<~String> - Total number of records or references in the # container. + # * :Link<~Array>: + # * :href<~String> - Contains the URI to the entity. + # * :type<~String> - Contains the type of the entity. + # * :rel<~String> - Defines the relationship of the link to the + # object that contains it. # * :CatalogRecord<~Array>: # * TODO # * :firstPage<~Integer> - First page in the result set. @@ -38,12 +54,15 @@ module Fog # @see http://pubs.vmware.com/vcd-51/topic/com.vmware.vcloud.api.reference.doc_51/doc/operations/GET-CatalogsFromQuery.html # @since vCloud API version 1.5 def get_catalogs_from_query(options={}) - query = {} - query[:sortAsc] = options[:sortAsc] if options[:sortAsc] - query[:sortDesc] = options[:sortDesc] if options[:sortDesc] - query[:page] = options[:page] if options[:page] - query[:pageSize] = options[:pageSize] if options[:pageSize] - query[:offset] = options[:offset] if options[:offset] + query = [] + query << "sortAsc=#{options[:sortAsc]}" if options[:sortAsc] + query << "sortDesc=#{options[:sortDesc]}" if options[:sortDesc] + query << "page=#{options[:page]}" if options[:page] + query << "pageSize=#{options[:pageSize]}" if options[:pageSize] + query << "format=#{options[:format]}" if options[:format] + query << "fields=#{Array(options[:fields]).join(',')}" if options[:fields] + query << "offset=#{options[:offset]}" if options[:offset] + query << "filter=#{options[:filter]}" if options[:filter] response = request( :expects => 200, @@ -51,9 +70,11 @@ module Fog :method => 'GET', :parser => Fog::ToHashDocument.new, :path => 'catalogs/query', - :query => query + :query => query.map {|q| URI.escape(q)}.join('&') ) + response.body[:Link] = [response.body[:Link]] if response.body[:Link].is_a?(Hash) response.body[:CatalogRecord] = [response.body[:CatalogRecord]] if response.body[:CatalogRecord].is_a?(Hash) + response.body[:CatalogRecord] ||= [] %w[firstPage previousPage nextPage lastPage].each do |rel| if link = response.body[:Link].detect {|l| l[:rel] == rel} diff --git a/lib/fog/vcloud_director/requests/compute/get_disks_from_query.rb b/lib/fog/vcloud_director/requests/compute/get_disks_from_query.rb index 0e309ef15..79c843bc5 100644 --- a/lib/fog/vcloud_director/requests/compute/get_disks_from_query.rb +++ b/lib/fog/vcloud_director/requests/compute/get_disks_from_query.rb @@ -15,8 +15,19 @@ module Fog # multiple pages, return this page. # @option options [Integer] :pageSize (25) Number of results per page, # to a maximum of 128. + # @option options [String] :format (records) One of the following + # types: + # - *references* Returns a reference to each object, including its + # :name, :type, and :href attributes. + # - *records* Returns all database records for each object, with each + # record as an attribute. + # - *idrecords* Identical to the records format, except that object + # references are returned in :id format rather than :href format. + # @option options [Array] :fields (all static attribute names) + # List of attribute names or metadata key names to return. # @option options [Integer] :offset (0) Integer value specifying the # first record to return. Record numbers < offset are not returned. + # @option options [String] :filter (none) Filter expression. # @return [Excon::Response] # * hash<~Hash>: # * :href<~String> - The URI of the entity. @@ -28,6 +39,11 @@ module Fog # references. # * :total<~String> - Total number of records or references in the # container. + # * :Link<~Array>: + # * :href<~String> - Contains the URI to the entity. + # * :type<~String> - Contains the type of the entity. + # * :rel<~String> - Defines the relationship of the link to the + # object that contains it. # * :DiskRecord<~Array>: # * TODO # * :firstPage<~Integer> - First page in the result set. @@ -38,12 +54,15 @@ module Fog # @see http://pubs.vmware.com/vcd-51/topic/com.vmware.vcloud.api.reference.doc_51/doc/operations/GET-DisksFromQuery.html # @since vCloud API version 1.5 def get_disks_from_query(options={}) - query = {} - query[:sortAsc] = options[:sortAsc] if options[:sortAsc] - query[:sortDesc] = options[:sortDesc] if options[:sortDesc] - query[:page] = options[:page] if options[:page] - query[:pageSize] = options[:pageSize] if options[:pageSize] - query[:offset] = options[:offset] if options[:offset] + query = [] + query << "sortAsc=#{options[:sortAsc]}" if options[:sortAsc] + query << "sortDesc=#{options[:sortDesc]}" if options[:sortDesc] + query << "page=#{options[:page]}" if options[:page] + query << "pageSize=#{options[:pageSize]}" if options[:pageSize] + query << "format=#{options[:format]}" if options[:format] + query << "fields=#{Array(options[:fields]).join(',')}" if options[:fields] + query << "offset=#{options[:offset]}" if options[:offset] + query << "filter=#{options[:filter]}" if options[:filter] response = request( :expects => 200, @@ -51,9 +70,11 @@ module Fog :method => 'GET', :parser => Fog::ToHashDocument.new, :path => 'disks/query', - :query => query + :query => query.map {|q| URI.escape(q)}.join('&') ) + response.body[:Link] = [response.body[:Link]] if response.body[:Link].is_a?(Hash) response.body[:DiskRecord] = [response.body[:DiskRecord]] if response.body[:DiskRecord].is_a?(Hash) + response.body[:DiskRecord] ||= [] %w[firstPage previousPage nextPage lastPage].each do |rel| if link = response.body[:Link].detect {|l| l[:rel] == rel} diff --git a/lib/fog/vcloud_director/requests/compute/get_execute_query.rb b/lib/fog/vcloud_director/requests/compute/get_execute_query.rb index 5f48e4cb7..4c435a4c7 100644 --- a/lib/fog/vcloud_director/requests/compute/get_execute_query.rb +++ b/lib/fog/vcloud_director/requests/compute/get_execute_query.rb @@ -97,8 +97,8 @@ module Fog ) response.body[:Link] = [response.body[:Link]] if response.body[:Link].is_a?(Hash) record = "#{response.body[:name]}Record".to_sym - response.body[record] ||= [] response.body[record] = [response.body[record]] if response.body[record].is_a?(Hash) + response.body[record] ||= [] %w[firstPage previousPage nextPage lastPage].each do |rel| if link = response.body[:Link].detect {|l| l[:rel] == rel} diff --git a/lib/fog/vcloud_director/requests/compute/get_groups_from_query.rb b/lib/fog/vcloud_director/requests/compute/get_groups_from_query.rb index ee4528f4c..966e4a6a7 100644 --- a/lib/fog/vcloud_director/requests/compute/get_groups_from_query.rb +++ b/lib/fog/vcloud_director/requests/compute/get_groups_from_query.rb @@ -16,8 +16,19 @@ module Fog # multiple pages, return this page. # @option options [Integer] :pageSize (25) Number of results per page, # to a maximum of 128. + # @option options [String] :format (records) One of the following + # types: + # - *references* Returns a reference to each object, including its + # :name, :type, and :href attributes. + # - *records* Returns all database records for each object, with each + # record as an attribute. + # - *idrecords* Identical to the records format, except that object + # references are returned in :id format rather than :href format. + # @option options [Array] :fields (all static attribute names) + # List of attribute names or metadata key names to return. # @option options [Integer] :offset (0) Integer value specifying the # first record to return. Record numbers < offset are not returned. + # @option options [String] :filter (none) Filter expression. # @return [Excon::Response] # * hash<~Hash>: # * :href<~String> - The URI of the entity. @@ -29,6 +40,11 @@ module Fog # references. # * :total<~String> - Total number of records or references in the # container. + # * :Link<~Array>: + # * :href<~String> - Contains the URI to the entity. + # * :type<~String> - Contains the type of the entity. + # * :rel<~String> - Defines the relationship of the link to the + # object that contains it. # * :GroupRecord<~Array>: # * TODO # * :firstPage<~Integer> - First page in the result set. @@ -39,12 +55,15 @@ module Fog # @see http://pubs.vmware.com/vcd-51/topic/com.vmware.vcloud.api.reference.doc_51/doc/operations/GET-GroupsFromQuery.html # @since vCloud API version 1.5 def get_groups_from_query(options={}) - query = {} - query[:sortAsc] = options[:sortAsc] if options[:sortAsc] - query[:sortDesc] = options[:sortDesc] if options[:sortDesc] - query[:page] = options[:page] if options[:page] - query[:pageSize] = options[:pageSize] if options[:pageSize] - query[:offset] = options[:offset] if options[:offset] + query = [] + query << "sortAsc=#{options[:sortAsc]}" if options[:sortAsc] + query << "sortDesc=#{options[:sortDesc]}" if options[:sortDesc] + query << "page=#{options[:page]}" if options[:page] + query << "pageSize=#{options[:pageSize]}" if options[:pageSize] + query << "format=#{options[:format]}" if options[:format] + query << "fields=#{Array(options[:fields]).join(',')}" if options[:fields] + query << "offset=#{options[:offset]}" if options[:offset] + query << "filter=#{options[:filter]}" if options[:filter] response = request( :expects => 200, @@ -52,9 +71,11 @@ module Fog :method => 'GET', :parser => Fog::ToHashDocument.new, :path => 'admin/groups/query', - :query => query + :query => query.map {|q| URI.escape(q)}.join('&') ) + response.body[:Link] = [response.body[:Link]] if response.body[:Link].is_a?(Hash) response.body[:GroupRecord] = [response.body[:GroupRecord]] if response.body[:GroupRecord].is_a?(Hash) + response.body[:GroupRecord] ||= [] %w[firstPage previousPage nextPage lastPage].each do |rel| if link = response.body[:Link].detect {|l| l[:rel] == rel} diff --git a/lib/fog/vcloud_director/requests/compute/get_medias_from_query.rb b/lib/fog/vcloud_director/requests/compute/get_medias_from_query.rb index 76edc000a..39b89c94d 100644 --- a/lib/fog/vcloud_director/requests/compute/get_medias_from_query.rb +++ b/lib/fog/vcloud_director/requests/compute/get_medias_from_query.rb @@ -15,8 +15,19 @@ module Fog # multiple pages, return this page. # @option options [Integer] :pageSize (25) Number of results per page, # to a maximum of 128. + # @option options [String] :format (records) One of the following + # types: + # - *references* Returns a reference to each object, including its + # :name, :type, and :href attributes. + # - *records* Returns all database records for each object, with each + # record as an attribute. + # - *idrecords* Identical to the records format, except that object + # references are returned in :id format rather than :href format. + # @option options [Array] :fields (all static attribute names) + # List of attribute names or metadata key names to return. # @option options [Integer] :offset (0) Integer value specifying the # first record to return. Record numbers < offset are not returned. + # @option options [String] :filter (none) Filter expression. # @return [Excon::Response] # * hash<~Hash>: # * :href<~String> - The URI of the entity. @@ -28,6 +39,11 @@ module Fog # references. # * :total<~String> - Total number of records or references in the # container. + # * :Link<~Array>: + # * :href<~String> - Contains the URI to the entity. + # * :type<~String> - Contains the type of the entity. + # * :rel<~String> - Defines the relationship of the link to the + # object that contains it. # * :MediaRecord<~Array>: # * TODO # * :firstPage<~Integer> - First page in the result set. @@ -38,12 +54,15 @@ module Fog # @see http://pubs.vmware.com/vcd-51/topic/com.vmware.vcloud.api.reference.doc_51/doc/operations/GET-MediasFromQuery.html # @since vCloud API version 1.5 def get_medias_from_query(options={}) - query = {} - query[:sortAsc] = options[:sortAsc] if options[:sortAsc] - query[:sortDesc] = options[:sortDesc] if options[:sortDesc] - query[:page] = options[:page] if options[:page] - query[:pageSize] = options[:pageSize] if options[:pageSize] - query[:offset] = options[:offset] if options[:offset] + query = [] + query << "sortAsc=#{options[:sortAsc]}" if options[:sortAsc] + query << "sortDesc=#{options[:sortDesc]}" if options[:sortDesc] + query << "page=#{options[:page]}" if options[:page] + query << "pageSize=#{options[:pageSize]}" if options[:pageSize] + query << "format=#{options[:format]}" if options[:format] + query << "fields=#{Array(options[:fields]).join(',')}" if options[:fields] + query << "offset=#{options[:offset]}" if options[:offset] + query << "filter=#{options[:filter]}" if options[:filter] response = request( :expects => 200, @@ -51,9 +70,11 @@ module Fog :method => 'GET', :parser => Fog::ToHashDocument.new, :path => 'mediaList/query', - :query => query + :query => query.map {|q| URI.escape(q)}.join('&') ) + response.body[:Link] = [response.body[:Link]] if response.body[:Link].is_a?(Hash) response.body[:MediaRecord] = [response.body[:MediaRecord]] if response.body[:MediaRecord].is_a?(Hash) + response.body[:MediaRecord] ||= [] %w[firstPage previousPage nextPage lastPage].each do |rel| if link = response.body[:Link].detect {|l| l[:rel] == rel} diff --git a/lib/fog/vcloud_director/requests/compute/get_organizations_from_query.rb b/lib/fog/vcloud_director/requests/compute/get_organizations_from_query.rb index a34a4b910..27dff18fa 100644 --- a/lib/fog/vcloud_director/requests/compute/get_organizations_from_query.rb +++ b/lib/fog/vcloud_director/requests/compute/get_organizations_from_query.rb @@ -16,8 +16,19 @@ module Fog # multiple pages, return this page. # @option options [Integer] :pageSize (25) Number of results per page, # to a maximum of 128. + # @option options [String] :format (records) One of the following + # types: + # - *references* Returns a reference to each object, including its + # :name, :type, and :href attributes. + # - *records* Returns all database records for each object, with each + # record as an attribute. + # - *idrecords* Identical to the records format, except that object + # references are returned in :id format rather than :href format. + # @option options [Array] :fields (all static attribute names) + # List of attribute names or metadata key names to return. # @option options [Integer] :offset (0) Integer value specifying the # first record to return. Record numbers < offset are not returned. + # @option options [String] :filter (none) Filter expression. # @return [Excon::Response] # * hash<~Hash>: # * :href<~String> - The URI of the entity. @@ -29,6 +40,11 @@ module Fog # references. # * :total<~String> - Total number of records or references in the # container. + # * :Link<~Array>: + # * :href<~String> - Contains the URI to the entity. + # * :type<~String> - Contains the type of the entity. + # * :rel<~String> - Defines the relationship of the link to the + # object that contains it. # * :OrganizationRecord<~Array>: # * TODO # * :firstPage<~Integer> - First page in the result set. @@ -39,12 +55,15 @@ module Fog # @see http://pubs.vmware.com/vcd-51/topic/com.vmware.vcloud.api.reference.doc_51/doc/operations/GET-OrganizationsFromQuery.html # @since vCloud API version 1.5 def get_organizations_from_query(options={}) - query = {} - query[:sortAsc] = options[:sortAsc] if options[:sortAsc] - query[:sortDesc] = options[:sortDesc] if options[:sortDesc] - query[:page] = options[:page] if options[:page] - query[:pageSize] = options[:pageSize] if options[:pageSize] - query[:offset] = options[:offset] if options[:offset] + query = [] + query << "sortAsc=#{options[:sortAsc]}" if options[:sortAsc] + query << "sortDesc=#{options[:sortDesc]}" if options[:sortDesc] + query << "page=#{options[:page]}" if options[:page] + query << "pageSize=#{options[:pageSize]}" if options[:pageSize] + query << "format=#{options[:format]}" if options[:format] + query << "fields=#{Array(options[:fields]).join(',')}" if options[:fields] + query << "offset=#{options[:offset]}" if options[:offset] + query << "filter=#{options[:filter]}" if options[:filter] response = request( :expects => 200, @@ -52,9 +71,11 @@ module Fog :method => 'GET', :parser => Fog::ToHashDocument.new, :path => 'admin/orgs/query', - :query => query + :query => query.map {|q| URI.escape(q)}.join('&') ) + response.body[:Link] = [response.body[:Link]] if response.body[:Link].is_a?(Hash) response.body[:OrganizationRecord] = [response.body[:OrganizationRecord]] if response.body[:OrganizationRecord].is_a?(Hash) + response.body[:OrganizationRecord] ||= [] %w[firstPage previousPage nextPage lastPage].each do |rel| if link = response.body[:Link].detect {|l| l[:rel] == rel} diff --git a/lib/fog/vcloud_director/requests/compute/get_users_from_query.rb b/lib/fog/vcloud_director/requests/compute/get_users_from_query.rb index 767f92d75..330ce35fe 100644 --- a/lib/fog/vcloud_director/requests/compute/get_users_from_query.rb +++ b/lib/fog/vcloud_director/requests/compute/get_users_from_query.rb @@ -16,8 +16,19 @@ module Fog # multiple pages, return this page. # @option options [Integer] :pageSize (25) Number of results per page, # to a maximum of 128. + # @option options [String] :format (records) One of the following + # types: + # - *references* Returns a reference to each object, including its + # :name, :type, and :href attributes. + # - *records* Returns all database records for each object, with each + # record as an attribute. + # - *idrecords* Identical to the records format, except that object + # references are returned in :id format rather than :href format. + # @option options [Array] :fields (all static attribute names) + # List of attribute names or metadata key names to return. # @option options [Integer] :offset (0) Integer value specifying the # first record to return. Record numbers < offset are not returned. + # @option options [String] :filter (none) Filter expression. # @return [Excon::Response] # * hash<~Hash>: # * :href<~String> - The URI of the entity. @@ -29,6 +40,11 @@ module Fog # references. # * :total<~String> - Total number of records or references in the # container. + # * :Link<~Array>: + # * :href<~String> - Contains the URI to the entity. + # * :type<~String> - Contains the type of the entity. + # * :rel<~String> - Defines the relationship of the link to the + # object that contains it. # * :UserRecord<~Array>: # * TODO # * :firstPage<~Integer> - First page in the result set. @@ -39,12 +55,15 @@ module Fog # @see http://pubs.vmware.com/vcd-51/topic/com.vmware.vcloud.api.reference.doc_51/doc/operations/GET-UsersFromQuery-query.html # @since vCloud API version 1.5 def get_users_from_query(options={}) - query = {} - query[:sortAsc] = options[:sortAsc] if options[:sortAsc] - query[:sortDesc] = options[:sortDesc] if options[:sortDesc] - query[:page] = options[:page] if options[:page] - query[:pageSize] = options[:pageSize] if options[:pageSize] - query[:offset] = options[:offset] if options[:offset] + query = [] + query << "sortAsc=#{options[:sortAsc]}" if options[:sortAsc] + query << "sortDesc=#{options[:sortDesc]}" if options[:sortDesc] + query << "page=#{options[:page]}" if options[:page] + query << "pageSize=#{options[:pageSize]}" if options[:pageSize] + query << "format=#{options[:format]}" if options[:format] + query << "fields=#{Array(options[:fields]).join(',')}" if options[:fields] + query << "offset=#{options[:offset]}" if options[:offset] + query << "filter=#{options[:filter]}" if options[:filter] response = request( :expects => 200, @@ -52,9 +71,11 @@ module Fog :method => 'GET', :parser => Fog::ToHashDocument.new, :path => 'admin/users/query', - :query => query + :query => query.map {|q| URI.escape(q)}.join('&') ) + response.body[:Link] = [response.body[:Link]] if response.body[:Link].is_a?(Hash) response.body[:UserRecord] = [response.body[:UserRecord]] if response.body[:UserRecord].is_a?(Hash) + response.body[:UserRecord] ||= [] %w[firstPage previousPage nextPage lastPage].each do |rel| if link = response.body[:Link].detect {|l| l[:rel] == rel} diff --git a/lib/fog/vcloud_director/requests/compute/get_vapp_templates_from_query.rb b/lib/fog/vcloud_director/requests/compute/get_vapp_templates_from_query.rb index 0315c0c95..2bb879a1a 100644 --- a/lib/fog/vcloud_director/requests/compute/get_vapp_templates_from_query.rb +++ b/lib/fog/vcloud_director/requests/compute/get_vapp_templates_from_query.rb @@ -16,8 +16,19 @@ module Fog # multiple pages, return this page. # @option options [Integer] :pageSize (25) Number of results per page, # to a maximum of 128. + # @option options [String] :format (records) One of the following + # types: + # - *references* Returns a reference to each object, including its + # :name, :type, and :href attributes. + # - *records* Returns all database records for each object, with each + # record as an attribute. + # - *idrecords* Identical to the records format, except that object + # references are returned in :id format rather than :href format. + # @option options [Array] :fields (all static attribute names) + # List of attribute names or metadata key names to return. # @option options [Integer] :offset (0) Integer value specifying the # first record to return. Record numbers < offset are not returned. + # @option options [String] :filter (none) Filter expression. # @return [Excon::Response] # * hash<~Hash>: # * :href<~String> - The URI of the entity. @@ -29,6 +40,11 @@ module Fog # references. # * :total<~String> - Total number of records or references in the # container. + # * :Link<~Array>: + # * :href<~String> - Contains the URI to the entity. + # * :type<~String> - Contains the type of the entity. + # * :rel<~String> - Defines the relationship of the link to the + # object that contains it. # * :VAppTemplateRecord<~Array>: # * TODO # * :firstPage<~Integer> - First page in the result set. @@ -39,12 +55,15 @@ module Fog # @see http://pubs.vmware.com/vcd-51/topic/com.vmware.vcloud.api.reference.doc_51/doc/operations/GET-VAppTemplatesFromQuery.html # @since vCloud API version 1.5 def get_vapp_templates_from_query(options={}) - query = {} - query[:sortAsc] = options[:sortAsc] if options[:sortAsc] - query[:sortDesc] = options[:sortDesc] if options[:sortDesc] - query[:page] = options[:page] if options[:page] - query[:pageSize] = options[:pageSize] if options[:pageSize] - query[:offset] = options[:offset] if options[:offset] + query = [] + query << "sortAsc=#{options[:sortAsc]}" if options[:sortAsc] + query << "sortDesc=#{options[:sortDesc]}" if options[:sortDesc] + query << "page=#{options[:page]}" if options[:page] + query << "pageSize=#{options[:pageSize]}" if options[:pageSize] + query << "format=#{options[:format]}" if options[:format] + query << "fields=#{Array(options[:fields]).join(',')}" if options[:fields] + query << "offset=#{options[:offset]}" if options[:offset] + query << "filter=#{options[:filter]}" if options[:filter] response = request( :expects => 200, @@ -52,9 +71,11 @@ module Fog :method => 'GET', :parser => Fog::ToHashDocument.new, :path => 'vAppTemplates/query', - :query => query + :query => query.map {|q| URI.escape(q)}.join('&') ) + response.body[:Link] = [response.body[:Link]] if response.body[:Link].is_a?(Hash) response.body[:VAppTemplateRecord] = [response.body[:VAppTemplateRecord]] if response.body[:VAppTemplateRecord].is_a?(Hash) + response.body[:VAppTemplateRecord] ||= [] %w[firstPage previousPage nextPage lastPage].each do |rel| if link = response.body[:Link].detect {|l| l[:rel] == rel} diff --git a/lib/fog/vcloud_director/requests/compute/get_vapps_in_lease_from_query.rb b/lib/fog/vcloud_director/requests/compute/get_vapps_in_lease_from_query.rb index 01a7b081e..54a39578b 100644 --- a/lib/fog/vcloud_director/requests/compute/get_vapps_in_lease_from_query.rb +++ b/lib/fog/vcloud_director/requests/compute/get_vapps_in_lease_from_query.rb @@ -15,8 +15,19 @@ module Fog # multiple pages, return this page. # @option options [Integer] :pageSize (25) Number of results per page, # to a maximum of 128. + # @option options [String] :format (records) One of the following + # types: + # - *references* Returns a reference to each object, including its + # :name, :type, and :href attributes. + # - *records* Returns all database records for each object, with each + # record as an attribute. + # - *idrecords* Identical to the records format, except that object + # references are returned in :id format rather than :href format. + # @option options [Array] :fields (all static attribute names) + # List of attribute names or metadata key names to return. # @option options [Integer] :offset (0) Integer value specifying the # first record to return. Record numbers < offset are not returned. + # @option options [String] :filter (none) Filter expression. # @return [Excon::Response] # * hash<~Hash>: # * :href<~String> - The URI of the entity. @@ -28,6 +39,11 @@ module Fog # references. # * :total<~String> - Total number of records or references in the # container. + # * :Link<~Array>: + # * :href<~String> - Contains the URI to the entity. + # * :type<~String> - Contains the type of the entity. + # * :rel<~String> - Defines the relationship of the link to the + # object that contains it. # * :VAppRecord<~Array>: # * TODO # * :firstPage<~Integer> - First page in the result set. @@ -38,12 +54,15 @@ module Fog # @see http://pubs.vmware.com/vcd-51/topic/com.vmware.vcloud.api.reference.doc_51/doc/operations/GET-VAppsInLeaseFromQuery.html # @since vCloud API version 1.5 def get_vapps_in_lease_from_query(options={}) - query = {} - query[:sortAsc] = options[:sortAsc] if options[:sortAsc] - query[:sortDesc] = options[:sortDesc] if options[:sortDesc] - query[:page] = options[:page] if options[:page] - query[:pageSize] = options[:pageSize] if options[:pageSize] - query[:offset] = options[:offset] if options[:offset] + query = [] + query << "sortAsc=#{options[:sortAsc]}" if options[:sortAsc] + query << "sortDesc=#{options[:sortDesc]}" if options[:sortDesc] + query << "page=#{options[:page]}" if options[:page] + query << "pageSize=#{options[:pageSize]}" if options[:pageSize] + query << "format=#{options[:format]}" if options[:format] + query << "fields=#{Array(options[:fields]).join(',')}" if options[:fields] + query << "offset=#{options[:offset]}" if options[:offset] + query << "filter=#{options[:filter]}" if options[:filter] response = request( :expects => 200, @@ -51,9 +70,11 @@ module Fog :method => 'GET', :parser => Fog::ToHashDocument.new, :path => 'vApps/query', - :query => query + :query => query.map {|q| URI.escape(q)}.join('&') ) + response.body[:Link] = [response.body[:Link]] if response.body[:Link].is_a?(Hash) response.body[:VAppRecord] = [response.body[:VAppRecord]] if response.body[:VAppRecord].is_a?(Hash) + response.body[:VAppRecord] ||= [] %w[firstPage previousPage nextPage lastPage].each do |rel| if link = response.body[:Link].detect {|l| l[:rel] == rel} diff --git a/lib/fog/vcloud_director/requests/compute/get_vdcs_from_query.rb b/lib/fog/vcloud_director/requests/compute/get_vdcs_from_query.rb index 29be3b4ad..1160637bd 100644 --- a/lib/fog/vcloud_director/requests/compute/get_vdcs_from_query.rb +++ b/lib/fog/vcloud_director/requests/compute/get_vdcs_from_query.rb @@ -15,8 +15,19 @@ module Fog # multiple pages, return this page. # @option options [Integer] :pageSize (25) Number of results per page, # to a maximum of 128. + # @option options [String] :format (records) One of the following + # types: + # - *references* Returns a reference to each object, including its + # :name, :type, and :href attributes. + # - *records* Returns all database records for each object, with each + # record as an attribute. + # - *idrecords* Identical to the records format, except that object + # references are returned in :id format rather than :href format. + # @option options [Array] :fields (all static attribute names) + # List of attribute names or metadata key names to return. # @option options [Integer] :offset (0) Integer value specifying the # first record to return. Record numbers < offset are not returned. + # @option options [String] :filter (none) Filter expression. # @return [Excon::Response] # * hash<~Hash>: # * :href<~String> - The URI of the entity. @@ -28,6 +39,11 @@ module Fog # references. # * :total<~String> - Total number of records or references in the # container. + # * :Link<~Array>: + # * :href<~String> - Contains the URI to the entity. + # * :type<~String> - Contains the type of the entity. + # * :rel<~String> - Defines the relationship of the link to the + # object that contains it. # * :OrgVdcRecord<~Array>: # * TODO # * :firstPage<~Integer> - First page in the result set. @@ -38,12 +54,15 @@ module Fog # @see http://pubs.vmware.com/vcd-55/topic/com.vmware.vcloud.api.reference.doc_55/doc/operations/GET-RightsFromQuery-query.html # @since vCloud API version 1.5 def get_vdcs_from_query(options={}) - query = {} - query[:sortAsc] = options[:sortAsc] if options[:sortAsc] - query[:sortDesc] = options[:sortDesc] if options[:sortDesc] - query[:page] = options[:page] if options[:page] - query[:pageSize] = options[:pageSize] if options[:pageSize] - query[:offset] = options[:offset] if options[:offset] + query = [] + query << "sortAsc=#{options[:sortAsc]}" if options[:sortAsc] + query << "sortDesc=#{options[:sortDesc]}" if options[:sortDesc] + query << "page=#{options[:page]}" if options[:page] + query << "pageSize=#{options[:pageSize]}" if options[:pageSize] + query << "format=#{options[:format]}" if options[:format] + query << "fields=#{Array(options[:fields]).join(',')}" if options[:fields] + query << "offset=#{options[:offset]}" if options[:offset] + query << "filter=#{options[:filter]}" if options[:filter] response = request( :expects => 200, @@ -51,9 +70,11 @@ module Fog :method => 'GET', :parser => Fog::ToHashDocument.new, :path => 'admin/vdcs/query', - :query => query + :query => query.map {|q| URI.escape(q)}.join('&') ) + response.body[:Link] = [response.body[:Link]] if response.body[:Link].is_a?(Hash) response.body[:OrgVdcRecord] = [response.body[:OrgVdcRecord]] if response.body[:OrgVdcRecord].is_a?(Hash) + response.body[:OrgVdcRecord] ||= [] %w[firstPage previousPage nextPage lastPage].each do |rel| if link = response.body[:Link].detect {|l| l[:rel] == rel} diff --git a/lib/fog/vcloud_director/requests/compute/get_vms_by_metadata.rb b/lib/fog/vcloud_director/requests/compute/get_vms_by_metadata.rb index 41c6b3222..1de02048f 100644 --- a/lib/fog/vcloud_director/requests/compute/get_vms_by_metadata.rb +++ b/lib/fog/vcloud_director/requests/compute/get_vms_by_metadata.rb @@ -4,6 +4,7 @@ module Fog class Real require 'fog/vcloud_director/parsers/compute/vms_by_metadata' + # @see #get_vms_in_lease_by_query def get_vms_by_metadata(key,value) request( :expects => 200, diff --git a/lib/fog/vcloud_director/requests/compute/get_vms_in_lease_from_query.rb b/lib/fog/vcloud_director/requests/compute/get_vms_in_lease_from_query.rb index 0c0f3d23f..1628395e4 100644 --- a/lib/fog/vcloud_director/requests/compute/get_vms_in_lease_from_query.rb +++ b/lib/fog/vcloud_director/requests/compute/get_vms_in_lease_from_query.rb @@ -16,8 +16,19 @@ module Fog # multiple pages, return this page. # @option options [Integer] :pageSize (25) Number of results per page, # to a maximum of 128. + # @option options [String] :format (records) One of the following + # types: + # - *references* Returns a reference to each object, including its + # :name, :type, and :href attributes. + # - *records* Returns all database records for each object, with each + # record as an attribute. + # - *idrecords* Identical to the records format, except that object + # references are returned in :id format rather than :href format. + # @option options [Array] :fields (all static attribute names) + # List of attribute names or metadata key names to return. # @option options [Integer] :offset (0) Integer value specifying the # first record to return. Record numbers < offset are not returned. + # @option options [String] :filter (none) Filter expression. # @return [Excon::Response] # * hash<~Hash>: # * :href<~String> - The URI of the entity. @@ -29,6 +40,11 @@ module Fog # references. # * :total<~String> - Total number of records or references in the # container. + # * :Link<~Array>: + # * :href<~String> - Contains the URI to the entity. + # * :type<~String> - Contains the type of the entity. + # * :rel<~String> - Defines the relationship of the link to the + # object that contains it. # * :VMRecord<~Array>: # * TODO # * :firstPage<~Integer> - First page in the result set. @@ -39,12 +55,15 @@ module Fog # @see http://pubs.vmware.com/vcd-51/topic/com.vmware.vcloud.api.reference.doc_51/doc/operations/GET-VMsInLeaseFromQuery.html # @since vCloud API version 1.5 def get_vms_in_lease_from_query(options={}) - query = {} - query[:sortAsc] = options[:sortAsc] if options[:sortAsc] - query[:sortDesc] = options[:sortDesc] if options[:sortDesc] - query[:page] = options[:page] if options[:page] - query[:pageSize] = options[:pageSize] if options[:pageSize] - query[:offset] = options[:offset] if options[:offset] + query = [] + query << "sortAsc=#{options[:sortAsc]}" if options[:sortAsc] + query << "sortDesc=#{options[:sortDesc]}" if options[:sortDesc] + query << "page=#{options[:page]}" if options[:page] + query << "pageSize=#{options[:pageSize]}" if options[:pageSize] + query << "format=#{options[:format]}" if options[:format] + query << "fields=#{Array(options[:fields]).join(',')}" if options[:fields] + query << "offset=#{options[:offset]}" if options[:offset] + query << "filter=#{options[:filter]}" if options[:filter] response = request( :expects => 200, @@ -52,9 +71,11 @@ module Fog :method => 'GET', :parser => Fog::ToHashDocument.new, :path => 'vms/query', - :query => query + :query => query.map {|q| URI.escape(q)}.join('&') ) + response.body[:Link] = [response.body[:Link]] if response.body[:Link].is_a?(Hash) response.body[:VMRecord] = [response.body[:VMRecord]] if response.body[:VMRecord].is_a?(Hash) + response.body[:VMRecord] ||= [] %w[firstPage previousPage nextPage lastPage].each do |rel| if link = response.body[:Link].detect {|l| l[:rel] == rel}