[openstack-dev] [nova][policy] Exposing hypervisor details to users

Sean Dague sean at dague.net
Fri Nov 6 14:09:53 UTC 2015


On 11/06/2015 08:44 AM, Alex Xu wrote:
> 
> 
> 2015-11-06 20:59 GMT+08:00 Sean Dague <sean at dague.net
> <mailto:sean at dague.net>>:
> 
>     On 11/06/2015 07:28 AM, John Garbutt wrote:
>     > On 6 November 2015 at 12:09, Sean Dague <sean at dague.net
>     <mailto:sean at dague.net>> wrote:
>     >> On 11/06/2015 04:49 AM, Daniel P. Berrange wrote:
>     >>> On Fri, Nov 06, 2015 at 05:08:59PM +1100, Tony Breeds wrote:
>     >>>> Hello all,
>     >>>>     I came across [1] which is notionally an ironic bug in that
>     horizon presents
>     >>>> VM operations (like suspend) to users.  Clearly these options
>     don't make sense
>     >>>> to ironic which can be confusing.
>     >>>>
>     >>>> There is a horizon fix that just disables migrate/suspened and
>     other functaions
>     >>>> if the operator sets a flag say ironic is present.  Clealy this
>     is sub optimal
>     >>>> for a mixed hv environment.
>     >>>>
>     >>>> The data needed (hpervisor type) is currently avilable only to
>     admins, a quick
>     >>>> hack to remove this policy restriction is functional.
>     >>>>
>     >>>> There are a few ways to solve this.
>     >>>>
>     >>>>  1. Change the default from "rule:admin_api" to "" (for
>     >>>>     os_compute_api:os-extended-server-attributes and
>     >>>>     os_compute_api:os-hypervisors), and set a list of values we're
>     >>>>     comfortbale exposing the user (hypervisor_type and
>     >>>>     hypervisor_hostname).  So a user can get the
>     hypervisor_name as part of
>     >>>>     the instance deatils and get the hypervisor_type from the
>     >>>>     os-hypervisors.  This would work for horizon but increases
>     the API load
>     >>>>     on nova and kinda implies that horizon would have to cache
>     the data and
>     >>>>     open-code assumptions that hypervisor_type can/can't do
>     action $x
>     >>>>
>     >>>>  2. Include the hypervisor_type with the instance data.  This
>     would place the
>     >>>>     burdon on nova.  It makes the looking up instance details
>     slightly more
>     >>>>     complex but doesn't result in additional API queries, nor
>     caching
>     >>>>     overhead in horizon.  This has the same opencoding issues
>     as Option 1.
>     >>>>
>     >>>>  3. Define a service user and have horizon look up the
>     hypervisors details via
>     >>>>     that role.  Has all the drawbacks as option 1 and I'm
>     struggling to
>     >>>>     think of many benefits.
>     >>>>
>     >>>>  4. Create a capabilitioes API of some description, that can be
>     queried so that
>     >>>>     consumers (horizon) can known
>     >>>>
>     >>>>  5. Some other way for users to know what kind of hypervisor
>     they're on, Perhaps
>     >>>>     there is an established image property that would work here?
>     >>>>
>     >>>> If we're okay with exposing the hypervisor_type to users, then
>     #2 is pretty
>     >>>> quick and easy, and could be done in Mitaka.  Option 4 is
>     probably the best
>     >>>> long term solution but I think is best done in 'N' as it needs
>     lots of
>     >>>> discussion.
>     >>>
>     >>> I think that exposing hypervisor_type is very much the *wrong*
>     approach
>     >>> to this problem. The set of allowed actions varies based on much
>     more than
>     >>> just the hypervisor_type. The hypervisor version may affect it,
>     as may
>     >>> the hypervisor architecture, and even the version of Nova. If
>     horizon
>     >>> restricted its actions based on hypevisor_type alone, then it is
>     going
>     >>> to inevitably prevent the user from performing otherwise valid
>     actions
>     >>> in a number of scenarios.
>     >>>
>     >>> IMHO, a capabilities based approach is the only viable solution to
>     >>> this kind of problem.
>     >>
>     >> Right, we just had a super long conversation about this in
>     #openstack-qa
>     >> yesterday with mordred, jroll, and deva around what it's going to
>     take
>     >> to get upgrade tests passing with ironic.
>     >>
>     >> Capabilities is the right approach, because it means we're future
>     >> proofing our interface by telling users what they can do, not some
>     >> arbitrary string that they need to cary around a separate library to
>     >> figure those things out.
>     >>
>     >> It seems like capabilities need to exist on flavor, and by proxy
>     instance.
>     >>
>     >> GET /flavors/bm.large/capabilities
>     >>
>     >> {
>     >>      "actions": {
>     >>          'pause': False,
>     >>          'unpause': False,
>     >>          'rebuild': True
>     >>          ..........
>     >>       }
>     >>
> 
> 
> Does this need admin to set the capabilities? If yes, that looks like
> pain to admin to set capabilities for all the flavors. This should be
> the capabilities the instance required. And hypervisor should report
> their capabilities, and reflect to instance.

No, in version 1 there should be some mechanism that pulls this up from
the drivers. In a single hypervisor cloud, that's easy. In a multi
hypervisor cloud, some invention will be needed.

But solve the easy case first, it makes life better for a lot of users.

	-Sean

-- 
Sean Dague
http://dague.net



More information about the OpenStack-dev mailing list