Hi,
This patch will add possibility to filter instances by state. Basic usage example:
/api/instances?state=RUNNING
Or you could use command line client:
./bin/deltacloudc instances -sRUNNING ./bin/deltacloudc instances -sSTOPPED
I added filters into some drivers which doesn't have filter_on method inside 'instances'.
--- client/bin/deltacloudc | 2 ++ .../lib/deltacloud/drivers/ec2/ec2_driver.rb | 2 ++ .../lib/deltacloud/drivers/mock/mock_driver.rb | 2 ++ .../drivers/opennebula/opennebula_driver.rb | 2 ++ .../drivers/rackspace/rackspace_driver.rb | 1 + .../lib/deltacloud/drivers/rhevm/rhevm_driver.rb | 2 ++ .../deltacloud/drivers/rimu/rimu_hosting_driver.rb | 1 + server/libexec/server.rb | 4 +++- 8 files changed, 15 insertions(+), 1 deletions(-)
diff --git a/client/bin/deltacloudc b/client/bin/deltacloudc index 8058eac..7546107 100755 --- a/client/bin/deltacloudc +++ b/client/bin/deltacloudc @@ -39,6 +39,7 @@ BANNER opts.on( nil, '--arch ARCH', 'Architecture (x86, x86_64)') { |id| options[:architecture] = id } opts.on( nil, '--flavor_id FLAVOR', 'Flavor') { |id| options[:flavor_id] = id } opts.on( nil, '--name NAME', 'Name (for instance eg.)') { |name| options[:name] = name } + opts.on( '-s STATE', '--state STATE', 'Instance state (RUNNING, STOPPED)') { |state| options[:state] = state } opts.on( '-u', '--url URL', 'API url ($API_URL variable)') { |url| options[:api_url] = url } opts.on( '-l', '--list', 'List collections/operations') { |id| options[:list] = true } opts.on( '-h', '--help', 'Display this screen' ) { puts opts ; exit } @@ -101,6 +102,7 @@ if options[:collection] and ( options[:operation].nil? or options[:operation].eq params = {} params.merge!(:architecture => options[:architecture]) if options[:architecture] params.merge!(:id => options[:id]) if options[:id] + params.merge!(:state => options[:state]) if options[:state] client.send(options[:collection].to_s, params).each do |model| puts model.to_plain end diff --git a/server/libexec/lib/deltacloud/drivers/ec2/ec2_driver.rb b/server/libexec/lib/deltacloud/drivers/ec2/ec2_driver.rb index 08c6c7c..dc280fa 100644 --- a/server/libexec/lib/deltacloud/drivers/ec2/ec2_driver.rb +++ b/server/libexec/lib/deltacloud/drivers/ec2/ec2_driver.rb @@ -179,6 +179,8 @@ class EC2Driver < Deltacloud::BaseDriver instances << convert_instance( ec2_instance ) end end + instances = filter_on( instances, :id, opts ) + instances = filter_on( instances, :state, opts ) instances end
diff --git a/server/libexec/lib/deltacloud/drivers/mock/mock_driver.rb b/server/libexec/lib/deltacloud/drivers/mock/mock_driver.rb index 73cdcc4..bdd1224 100644 --- a/server/libexec/lib/deltacloud/drivers/mock/mock_driver.rb +++ b/server/libexec/lib/deltacloud/drivers/mock/mock_driver.rb @@ -135,6 +135,7 @@ class MockDriver < Deltacloud::BaseDriver #
def instances(credentials, opts=nil) + $stderr.puts opts.inspect check_credentials( credentials ) instances = [] Dir[ "#{STORAGE_ROOT}/instances/*.yml" ].each do |instance_file| @@ -146,6 +147,7 @@ class MockDriver < Deltacloud::BaseDriver end end instances = filter_on( instances, :id, opts ) + instances = filter_on( instances, :state, opts ) instances end
diff --git a/server/libexec/lib/deltacloud/drivers/opennebula/opennebula_driver.rb b/server/libexec/lib/deltacloud/drivers/opennebula/opennebula_driver.rb index e88131a..e49c662 100644 --- a/server/libexec/lib/deltacloud/drivers/opennebula/opennebula_driver.rb +++ b/server/libexec/lib/deltacloud/drivers/opennebula/opennebula_driver.rb @@ -141,6 +141,8 @@ class OpennebulaDriver < Deltacloud::BaseDriver
instances << convert_instance(computexml.to_s(), credentials) end + instances = filter_on( instances, :id, opts ) + instances = filter_on( instances, :state, opts ) instances end
diff --git a/server/libexec/lib/deltacloud/drivers/rackspace/rackspace_driver.rb b/server/libexec/lib/deltacloud/drivers/rackspace/rackspace_driver.rb index a71d722..d1aa03a 100644 --- a/server/libexec/lib/deltacloud/drivers/rackspace/rackspace_driver.rb +++ b/server/libexec/lib/deltacloud/drivers/rackspace/rackspace_driver.rb @@ -106,6 +106,7 @@ class RackspaceDriver < Deltacloud::BaseDriver instances << convert_srv_to_instance(racks.load_server_details(opts[:id])) end instances = filter_on( instances, :id, opts ) + instances = filter_on( instances, :state, opts ) instances end
diff --git a/server/libexec/lib/deltacloud/drivers/rhevm/rhevm_driver.rb b/server/libexec/lib/deltacloud/drivers/rhevm/rhevm_driver.rb index d026852..a9fbcc4 100644 --- a/server/libexec/lib/deltacloud/drivers/rhevm/rhevm_driver.rb +++ b/server/libexec/lib/deltacloud/drivers/rhevm/rhevm_driver.rb @@ -190,6 +190,8 @@ class RHEVMDriver < Deltacloud::BaseDriver vms.each do |vm| instances << vm_to_instance(vm) end + instances = filter_on( instances, :id, opts ) + instances = filter_on( instances, :state, opts ) instances end
diff --git a/server/libexec/lib/deltacloud/drivers/rimu/rimu_hosting_driver.rb b/server/libexec/lib/deltacloud/drivers/rimu/rimu_hosting_driver.rb index 7cb7a7d..ad1eb04 100755 --- a/server/libexec/lib/deltacloud/drivers/rimu/rimu_hosting_driver.rb +++ b/server/libexec/lib/deltacloud/drivers/rimu/rimu_hosting_driver.rb @@ -68,6 +68,7 @@ class RimuHostingDriver < Deltacloud::BaseDriver convert_srv_to_instance(inst) end instances = filter_on( instances, :id, opts) + instances = filter_on( instances, :state, opts ) instances end
diff --git a/server/libexec/server.rb b/server/libexec/server.rb index 58bccaa..95c532e 100644 --- a/server/libexec/server.rb +++ b/server/libexec/server.rb @@ -40,6 +40,7 @@ def filter_all(model) filter.merge!(:id => params[:id]) if params[:id] filter.merge!(:architecture => params[:architecture]) if params[:architecture] filter.merge!(:owner_id => params[:owner_id]) if params[:owner_id] + filter.merge!(:state => params[:state]) if params[:state] filter = nil if filter.keys.size.eql?(0) safely do singular = model.to_s.singularize.to_sym @@ -201,7 +202,8 @@ collection :instances do
operation :index do description "List all instances" - param :id, :string + param :id, :string, :optional + param :state, :string, :optional control { filter_all(:instances) } end
On 24/02/10 13:14 +0100, mfojtik@redhat.com wrote:
Oh sorry for:
+ $stderr.puts opts.inspect
This will be removed in final patch.
client/bin/deltacloudc | 2 ++ .../lib/deltacloud/drivers/ec2/ec2_driver.rb | 2 ++ .../lib/deltacloud/drivers/mock/mock_driver.rb | 2 ++ .../drivers/opennebula/opennebula_driver.rb | 2 ++ .../drivers/rackspace/rackspace_driver.rb | 1 + .../lib/deltacloud/drivers/rhevm/rhevm_driver.rb | 2 ++ .../deltacloud/drivers/rimu/rimu_hosting_driver.rb | 1 + server/libexec/server.rb | 4 +++- 8 files changed, 15 insertions(+), 1 deletions(-)
diff --git a/client/bin/deltacloudc b/client/bin/deltacloudc index 8058eac..7546107 100755 --- a/client/bin/deltacloudc +++ b/client/bin/deltacloudc @@ -39,6 +39,7 @@ BANNER opts.on( nil, '--arch ARCH', 'Architecture (x86, x86_64)') { |id| options[:architecture] = id } opts.on( nil, '--flavor_id FLAVOR', 'Flavor') { |id| options[:flavor_id] = id } opts.on( nil, '--name NAME', 'Name (for instance eg.)') { |name| options[:name] = name }
- opts.on( '-s STATE', '--state STATE', 'Instance state (RUNNING, STOPPED)') { |state| options[:state] = state } opts.on( '-u', '--url URL', 'API url ($API_URL variable)') { |url| options[:api_url] = url } opts.on( '-l', '--list', 'List collections/operations') { |id| options[:list] = true } opts.on( '-h', '--help', 'Display this screen' ) { puts opts ; exit }
@@ -101,6 +102,7 @@ if options[:collection] and ( options[:operation].nil? or options[:operation].eq params = {} params.merge!(:architecture => options[:architecture]) if options[:architecture] params.merge!(:id => options[:id]) if options[:id]
- params.merge!(:state => options[:state]) if options[:state] client.send(options[:collection].to_s, params).each do |model| puts model.to_plain end
diff --git a/server/libexec/lib/deltacloud/drivers/ec2/ec2_driver.rb b/server/libexec/lib/deltacloud/drivers/ec2/ec2_driver.rb index 08c6c7c..dc280fa 100644 --- a/server/libexec/lib/deltacloud/drivers/ec2/ec2_driver.rb +++ b/server/libexec/lib/deltacloud/drivers/ec2/ec2_driver.rb @@ -179,6 +179,8 @@ class EC2Driver < Deltacloud::BaseDriver instances << convert_instance( ec2_instance ) end end
- instances = filter_on( instances, :id, opts )
- instances = filter_on( instances, :state, opts ) instances end
diff --git a/server/libexec/lib/deltacloud/drivers/mock/mock_driver.rb b/server/libexec/lib/deltacloud/drivers/mock/mock_driver.rb index 73cdcc4..bdd1224 100644 --- a/server/libexec/lib/deltacloud/drivers/mock/mock_driver.rb +++ b/server/libexec/lib/deltacloud/drivers/mock/mock_driver.rb @@ -135,6 +135,7 @@ class MockDriver < Deltacloud::BaseDriver #
def instances(credentials, opts=nil)
- $stderr.puts opts.inspect check_credentials( credentials ) instances = [] Dir[ "#{STORAGE_ROOT}/instances/*.yml" ].each do |instance_file|
@@ -146,6 +147,7 @@ class MockDriver < Deltacloud::BaseDriver end end instances = filter_on( instances, :id, opts )
- instances = filter_on( instances, :state, opts ) instances end
diff --git a/server/libexec/lib/deltacloud/drivers/opennebula/opennebula_driver.rb b/server/libexec/lib/deltacloud/drivers/opennebula/opennebula_driver.rb index e88131a..e49c662 100644 --- a/server/libexec/lib/deltacloud/drivers/opennebula/opennebula_driver.rb +++ b/server/libexec/lib/deltacloud/drivers/opennebula/opennebula_driver.rb @@ -141,6 +141,8 @@ class OpennebulaDriver < Deltacloud::BaseDriver
instances << convert_instance(computexml.to_s(), credentials)
end
instances = filter_on( instances, :id, opts )
instances endinstances = filter_on( instances, :state, opts )
diff --git a/server/libexec/lib/deltacloud/drivers/rackspace/rackspace_driver.rb b/server/libexec/lib/deltacloud/drivers/rackspace/rackspace_driver.rb index a71d722..d1aa03a 100644 --- a/server/libexec/lib/deltacloud/drivers/rackspace/rackspace_driver.rb +++ b/server/libexec/lib/deltacloud/drivers/rackspace/rackspace_driver.rb @@ -106,6 +106,7 @@ class RackspaceDriver < Deltacloud::BaseDriver instances << convert_srv_to_instance(racks.load_server_details(opts[:id])) end instances = filter_on( instances, :id, opts )
- instances = filter_on( instances, :state, opts ) instances end
diff --git a/server/libexec/lib/deltacloud/drivers/rhevm/rhevm_driver.rb b/server/libexec/lib/deltacloud/drivers/rhevm/rhevm_driver.rb index d026852..a9fbcc4 100644 --- a/server/libexec/lib/deltacloud/drivers/rhevm/rhevm_driver.rb +++ b/server/libexec/lib/deltacloud/drivers/rhevm/rhevm_driver.rb @@ -190,6 +190,8 @@ class RHEVMDriver < Deltacloud::BaseDriver vms.each do |vm| instances << vm_to_instance(vm) end
- instances = filter_on( instances, :id, opts )
- instances = filter_on( instances, :state, opts ) instances end
diff --git a/server/libexec/lib/deltacloud/drivers/rimu/rimu_hosting_driver.rb b/server/libexec/lib/deltacloud/drivers/rimu/rimu_hosting_driver.rb index 7cb7a7d..ad1eb04 100755 --- a/server/libexec/lib/deltacloud/drivers/rimu/rimu_hosting_driver.rb +++ b/server/libexec/lib/deltacloud/drivers/rimu/rimu_hosting_driver.rb @@ -68,6 +68,7 @@ class RimuHostingDriver < Deltacloud::BaseDriver convert_srv_to_instance(inst) end instances = filter_on( instances, :id, opts)
- instances = filter_on( instances, :state, opts ) instances end
diff --git a/server/libexec/server.rb b/server/libexec/server.rb index 58bccaa..95c532e 100644 --- a/server/libexec/server.rb +++ b/server/libexec/server.rb @@ -40,6 +40,7 @@ def filter_all(model) filter.merge!(:id => params[:id]) if params[:id] filter.merge!(:architecture => params[:architecture]) if params[:architecture] filter.merge!(:owner_id => params[:owner_id]) if params[:owner_id]
- filter.merge!(:state => params[:state]) if params[:state] filter = nil if filter.keys.size.eql?(0) safely do singular = model.to_s.singularize.to_sym
@@ -201,7 +202,8 @@ collection :instances do
operation :index do description "List all instances"
- param :id, :string
- param :id, :string, :optional
- param :state, :string, :optional control { filter_all(:instances) } end
-- 1.6.6.2
On Wed, 2010-02-24 at 13:14 +0100, mfojtik@redhat.com wrote:
client/bin/deltacloudc | 2 ++ .../lib/deltacloud/drivers/ec2/ec2_driver.rb | 2 ++ .../lib/deltacloud/drivers/mock/mock_driver.rb | 2 ++ .../drivers/opennebula/opennebula_driver.rb | 2 ++ .../drivers/rackspace/rackspace_driver.rb | 1 + .../lib/deltacloud/drivers/rhevm/rhevm_driver.rb | 2 ++ .../deltacloud/drivers/rimu/rimu_hosting_driver.rb | 1 + server/libexec/server.rb | 4 +++- 8 files changed, 15 insertions(+), 1 deletions(-)
Looks good - besides the puts you already noticed, it's also missing the bit in client/lib/deltacloud.rb that causes the opts to be sent to the server.
ACK after fixing that.
David
deltacloud-devel@lists.fedorahosted.org