[Ovirt-devel] [PATCH 4/6] hardware_pool: search by path

Scott Seago sseago at redhat.com
Tue Aug 26 14:11:52 UTC 2008


David Lutterkort wrote:
> On Mon, 2008-08-18 at 09:25 -0400, Scott Seago wrote:
>   
>> David Lutterkort wrote:
>>     
>>> Signed-off-by: David Lutterkort <dlutter at redhat.com>
>>> ---
>>>  wui/src/app/models/hardware_pool.rb |   12 ++++++++++++
>>>  1 files changed, 12 insertions(+), 0 deletions(-)
>>>
>>> diff --git a/wui/src/app/models/hardware_pool.rb b/wui/src/app/models/hardware_pool.rb
>>> index 276779f..249d744 100644
>>> --- a/wui/src/app/models/hardware_pool.rb
>>> +++ b/wui/src/app/models/hardware_pool.rb
>>> @@ -97,4 +97,16 @@ class HardwarePool < Pool
>>>      return {:total => total, :labels => labels}
>>>    end
>>>  
>>> +  def self.find_by_path(path)
>>> +      segs = path.split("/")
>>> +      unless segs.shift.empty?
>>> +          raise "Path must be absolute, but is #{path}"
>>> +      end
>>> +      if segs.shift == "default"
>>> +          segs.inject(get_default_pool) do |pool, seg|
>>> +              pool.sub_hardware_pools.find { |p| p.name == seg } if pool
>>> +          end
>>> +      end
>>> +  end
>>> +
>>>  end
>>>   
>>>       
>> We shouldn't assume that the default pool happens to be named 'default'. 
>> I'm not sure the best way to do this, but one way is to treat the 
>> default pool as having path "/". So Pool.find_by_path("/") would return 
>> the default pool, and Pool.find_by_path("/engineering/QA") would start 
>> with the default pool, find a subpool named "engineering" and a subpool 
>> of engineering called "QA".
>>     
>
> That won't work .. if '/' is the default pool, what is '/default' ?
>
> In the above code, I can get rid of the hardcoded "default" by comparing
> against get_default_pool.name.
>
> David
>
>   
We could probably make '/' work for the default pool, but it looks like 
it might be too confusing. If '/' were the default pool, then '/default' 
would be a subpool of 'default' which happens to be called default -- 
but I like the other idea better anyway. i.e. the first pool in the path 
after the initial '/' is compared against the default pool.

I'm assuming the path-based pool lookup is just an alternate method of 
getting this from your API, as the id-based ones will all still work. I 
just realized that full path-based lookup will only work for users that 
have read permissions on the whole hierarchy. A user with lower-level 
permissions only (i.e. only read permissions for pools under 
'/default/engineering/qa' and write permissions for subpools below that) 
won't even see the top level pool. In   the WUI, the left-hand nav tree 
begins with the pools that a user has read permissions on -- other pools 
don't even show up. So for such users, the full path lookup won't be so 
useful.

Scott




More information about the ovirt-devel mailing list